From dab2f0b6b6b501f2680e9fb4cd21c8c80c9f2ae8 Mon Sep 17 00:00:00 2001 From: Matt Corallo Date: Mon, 4 Jun 2018 10:23:26 -0400 Subject: [PATCH] Switch fuzztarget SHA256 to simply XOR'ing all input bytes --- src/util/sha2.rs | 29 ++++++++++++++--------------- 1 file changed, 14 insertions(+), 15 deletions(-) diff --git a/src/util/sha2.rs b/src/util/sha2.rs index 7c819ff..40b4e5b 100644 --- a/src/util/sha2.rs +++ b/src/util/sha2.rs @@ -1,64 +1,63 @@ //! fuzztarget-only Sha2 context with a dummy Sha256 and Sha512 hashers. use crypto::digest::Digest; -use crypto::sha2; #[derive(Clone, Copy)] /// Dummy Sha256 that hashes the input, but only returns the first byte of output, masking the /// rest to 0s. pub struct Sha256 { - state: sha2::Sha256, + state: u8, } impl Sha256 { /// Constructs a new dummy Sha256 context pub fn new() -> Sha256 { Sha256 { - state: sha2::Sha256::new(), + state: 0, } } } impl Digest for Sha256 { fn result(&mut self, data: &mut [u8]) { - self.state.result(data); + data[0] = self.state; for i in 1..32 { data[i] = 0; } } - fn input(&mut self, data: &[u8]) { self.state.input(data); } - fn reset(&mut self) { self.state.reset(); } - fn output_bits(&self) -> usize { self.state.output_bits() } - fn block_size(&self) -> usize { self.state.block_size() } + fn input(&mut self, data: &[u8]) { for i in data { self.state ^= i; } } + fn reset(&mut self) { self.state = 0; } + fn output_bits(&self) -> usize { 256 } + fn block_size(&self) -> usize { 64 } } #[derive(Clone, Copy)] /// Dummy Sha512 that hashes the input, but only returns the first byte of output, masking the /// rest to 0s. pub struct Sha512 { - state: sha2::Sha512, + state: u8, } impl Sha512 { /// Constructs a new dummy Sha512 context pub fn new() -> Sha512 { Sha512 { - state: sha2::Sha512::new(), + state: 0xff, } } } impl Digest for Sha512 { fn result(&mut self, data: &mut [u8]) { - self.state.result(data); + data[0] = self.state; for i in 1..64 { data[i] = 0; } } - fn input(&mut self, data: &[u8]) { self.state.input(data); } - fn reset(&mut self) { self.state.reset(); } - fn output_bits(&self) -> usize { self.state.output_bits() } - fn block_size(&self) -> usize { self.state.block_size() } + fn input(&mut self, data: &[u8]) { for i in data { self.state ^= i; } } + fn reset(&mut self) { self.state = 0xff; } + fn output_bits(&self) -> usize { 512 } + fn block_size(&self) -> usize { 128 } }