1use crate::{Digest, FixedOutput, FixedOutputReset, HashMarker, dev::TestVector};
2
3pub fn fixed_reset_test<D: FixedOutputReset + Clone + Default + HashMarker>(
5 &TestVector { input, output }: &TestVector,
6) -> Result<(), &'static str> {
7 let mut hasher = D::new();
8 hasher.update(input);
10 let mut hasher2 = hasher.clone();
11 if hasher.finalize()[..] != output[..] {
12 return Err("whole message");
13 }
14
15 hasher2.reset();
17 hasher2.update(input);
18 if hasher2.finalize_reset()[..] != output[..] {
19 return Err("whole message after reset");
20 }
21
22 for n in 1..core::cmp::min(17, input.len()) {
24 let mut hasher = D::new();
25 for chunk in input.chunks(n) {
26 hasher.update(chunk);
27 hasher2.update(chunk);
28 }
29 if hasher.finalize()[..] != output[..] {
30 return Err("message in chunks");
31 }
32 if hasher2.finalize_reset()[..] != output[..] {
33 return Err("message in chunks");
34 }
35 }
36
37 Ok(())
38}
39
40pub fn fixed_test<D: FixedOutput + Default + HashMarker>(
42 &TestVector { input, output }: &TestVector,
43) -> Result<(), &'static str> {
44 let mut hasher = D::default();
45 hasher.update(input);
47 if hasher.finalize_fixed()[..] != output[..] {
48 return Err("whole message");
49 }
50
51 for n in 1..core::cmp::min(17, input.len()) {
53 let mut hasher = D::default();
54 for chunk in input.chunks(n) {
55 hasher.update(chunk);
56 }
57 if hasher.finalize_fixed()[..] != output[..] {
58 return Err("message in chunks");
59 }
60 }
61 Ok(())
62}