aboutsummaryrefslogtreecommitdiff
path: root/src/traits.rs
diff options
context:
space:
mode:
authorJack O'Connor <[email protected]>2020-06-14 14:08:08 -0400
committerJack O'Connor <[email protected]>2020-06-14 14:35:47 -0400
commit4c41a893a00a3ebe7b24529531ccf96d8593a57c (patch)
tree169fcd3058e03d341ea1e275d009f81f3d6f21d8 /src/traits.rs
parent1ecb14ce34790bb7b882449c77c36131af61add6 (diff)
a little bit of cleanup and more testing
Diffstat (limited to 'src/traits.rs')
-rw-r--r--src/traits.rs44
1 files changed, 38 insertions, 6 deletions
diff --git a/src/traits.rs b/src/traits.rs
index d49b5e3..9704e01 100644
--- a/src/traits.rs
+++ b/src/traits.rs
@@ -34,14 +34,12 @@ impl digest::FixedOutput for Hasher {
#[inline]
fn finalize_into(self, out: &mut GenericArray<u8, Self::OutputSize>) {
- let bytes = self.finalize();
- out.as_mut_slice().clone_from_slice(bytes.as_bytes());
+ out.copy_from_slice(self.finalize().as_bytes());
}
+ #[inline]
fn finalize_into_reset(&mut self, out: &mut GenericArray<u8, Self::OutputSize>) {
- let bytes = self.finalize();
- out.as_mut_slice().clone_from_slice(bytes.as_bytes());
-
+ out.copy_from_slice(self.finalize().as_bytes());
self.reset();
}
}
@@ -54,6 +52,7 @@ impl digest::ExtendableOutput for Hasher {
Hasher::finalize_xof(&self)
}
+ #[inline]
fn finalize_xof_reset(&mut self) -> Self::Reader {
let reader = Hasher::finalize_xof(self);
self.reset();
@@ -99,6 +98,8 @@ impl crypto_mac::Mac for Hasher {
#[cfg(test)]
mod test {
+ use super::*;
+
#[test]
fn test_digest_traits() {
// Inherent methods.
@@ -121,11 +122,42 @@ mod test {
let out2 = digest::Digest::finalize(hasher2.clone());
let mut xof2 = [0; 301];
digest::XofReader::read(
- &mut digest::ExtendableOutput::finalize_xof(hasher2),
+ &mut digest::ExtendableOutput::finalize_xof(hasher2.clone()),
&mut xof2,
);
assert_eq!(out1.as_bytes(), &out2[..]);
assert_eq!(xof1[..], xof2[..]);
+
+ // Again with the resetting variants.
+ let mut hasher3: crate::Hasher = digest::Digest::new();
+ digest::Digest::update(&mut hasher3, b"foobarbaz");
+ let mut out3 = [0; 32];
+ digest::FixedOutput::finalize_into_reset(
+ &mut hasher3,
+ GenericArray::from_mut_slice(&mut out3),
+ );
+ digest::Digest::update(&mut hasher3, b"foobarbaz");
+ let mut out4 = [0; 32];
+ digest::FixedOutput::finalize_into_reset(
+ &mut hasher3,
+ GenericArray::from_mut_slice(&mut out4),
+ );
+ digest::Digest::update(&mut hasher3, b"foobarbaz");
+ let mut xof3 = [0; 301];
+ digest::XofReader::read(
+ &mut digest::ExtendableOutput::finalize_xof_reset(&mut hasher3),
+ &mut xof3,
+ );
+ digest::Digest::update(&mut hasher3, b"foobarbaz");
+ let mut xof4 = [0; 301];
+ digest::XofReader::read(
+ &mut digest::ExtendableOutput::finalize_xof_reset(&mut hasher3),
+ &mut xof4,
+ );
+ assert_eq!(out1.as_bytes(), &out3[..]);
+ assert_eq!(out1.as_bytes(), &out4[..]);
+ assert_eq!(xof1[..], xof3[..]);
+ assert_eq!(xof1[..], xof4[..]);
}
#[test]