in src/defs/eif_hasher.rs [295:325]
fn hash_with_writes_of_different_sizes<T: Digest + Debug + Write + Clone>(
hasher_alg: T,
block_size: usize,
) {
let data = vec![78u8; block_size * 256];
let mut hasher_in_one_go = EifHasher::new(block_size, hasher_alg.clone()).unwrap();
let mut hasher_in_random_chunks = EifHasher::new(block_size, hasher_alg.clone()).unwrap();
let mut hasher_one_byte_at_atime = EifHasher::new(block_size, hasher_alg).unwrap();
hasher_in_one_go.write_all(&data).unwrap();
let mut remaining = &data[..];
let mut iteration = 1;
while !remaining.is_empty() {
let chunk_size = std::cmp::max(1, (iteration % remaining.len()) % block_size);
let (to_be_written, unhandled) = remaining.split_at(chunk_size);
hasher_in_random_chunks.write_all(to_be_written).unwrap();
remaining = unhandled;
iteration += 1987;
}
for x in data {
hasher_one_byte_at_atime.write_all(&[x]).unwrap();
}
let result1 = hasher_in_one_go.finalize_reset().unwrap();
let result2 = hasher_in_random_chunks.finalize_reset().unwrap();
let result3 = hasher_one_byte_at_atime.finalize_reset().unwrap();
assert_eq!(result1, result2);
assert_eq!(result1, result3);
}