Skip to content

Commit

Permalink
implement Hasher trait for Hasher
Browse files Browse the repository at this point in the history
  • Loading branch information
Luro02 committed May 19, 2020
1 parent cd43625 commit 310ef11
Show file tree
Hide file tree
Showing 2 changed files with 57 additions and 0 deletions.
16 changes: 16 additions & 0 deletions src/lib.rs
Original file line number Diff line number Diff line change
Expand Up @@ -99,6 +99,7 @@ use arrayref::{array_mut_ref, array_ref};
use arrayvec::{ArrayString, ArrayVec};
use core::cmp;
use core::fmt;
use core::hash;
use join::{Join, SerialJoin};
use platform::{Platform, MAX_SIMD_DEGREE, MAX_SIMD_DEGREE_OR_2};

Expand Down Expand Up @@ -1201,6 +1202,21 @@ impl Hasher {
}
}

impl hash::Hasher for Hasher {
fn finish(&self) -> u64 {
let mut bytes = [0; 8];

self.finalize_xof().fill(&mut bytes);

u64::from_be_bytes(bytes)
}

#[inline]
fn write(&mut self, bytes: &[u8]) {
self.update(bytes);
}
}

// Don't derive(Debug), because the state may be secret.
impl fmt::Debug for Hasher {
fn fmt(&self, f: &mut fmt::Formatter) -> fmt::Result {
Expand Down
41 changes: 41 additions & 0 deletions src/test.rs
Original file line number Diff line number Diff line change
Expand Up @@ -551,3 +551,44 @@ fn test_join_lengths() {
);
assert_eq!(CUSTOM_JOIN_CALLS.load(Ordering::SeqCst), 1);
}

#[test]
fn test_hasher_hasher() {
use crate::Hasher;

let buffer = [
100, 101, 102, 103, 104, 105, 106, 107, 108, 109, 110, 111, 112, 113, 114, 115, 116, 117,
118, 119, 120, 121, 122, 123, 124, 125, 126, 127, 128, 129, 130, 131, 132, 133, 134, 135,
136, 137, 138, 139, 140, 141, 142, 143, 144, 145, 146, 147, 148, 149, 150, 151, 152, 153,
154, 155, 156, 157, 158, 159, 160, 161, 162, 163, 164, 165, 166, 167, 168, 169, 170, 171,
172, 173, 174, 175, 176, 177, 178, 179, 180, 181, 182, 183, 184, 185, 186, 187, 188, 189,
190, 191, 192, 193, 194, 195, 196, 197, 198, 199, 200, 201, 202, 203, 204, 205, 206, 207,
208, 209, 210, 211, 212, 213, 214, 215, 216, 217, 218, 219, 220, 221, 222, 223, 224, 225,
226, 227, 228, 229, 230, 231, 232, 233, 234, 235, 236, 237, 238, 239, 240, 241, 242, 243,
244, 245, 246, 247, 248, 249, 250, 251, 252, 253, 254, 255,
];
let mut hasher = Hasher::new();

<Hasher as core::hash::Hasher>::write(&mut hasher, &buffer[..78]);

assert_eq!(<Hasher as core::hash::Hasher>::finish(&hasher), {
let mut bytes = [0; 8];
Hasher::new()
.update(&buffer[..78])
.finalize_xof()
.fill(&mut bytes);
u64::from_be_bytes(bytes)
});

<Hasher as core::hash::Hasher>::write(&mut hasher, &buffer[78..]);

assert_eq!(<Hasher as core::hash::Hasher>::finish(&hasher), {
let mut bytes = [0; 8];
Hasher::new()
.update(&buffer[..78])
.update(&buffer[78..])
.finalize_xof()
.fill(&mut bytes);
u64::from_be_bytes(bytes)
});
}

0 comments on commit 310ef11

Please sign in to comment.