diff options
author | Jack O'Connor <oconnor663@gmail.com> | 2023-05-28 13:02:48 -0700 |
---|---|---|
committer | Jack O'Connor <oconnor663@gmail.com> | 2024-08-15 16:02:10 -0700 |
commit | eb15bce0f1443b07fc45f151a72c840c19c4b2ae (patch) | |
tree | b48e97bb6bce1ac2eb090d18a93abca7eecd5b63 | |
parent | cfb305d0ab8e20d40a555f5241e29e0f5db06917 (diff) |
test_fuzz_xof
-rw-r--r-- | src/test.rs | 36 |
1 files changed, 36 insertions, 0 deletions
diff --git a/src/test.rs b/src/test.rs index 39dfe46..6ce2e50 100644 --- a/src/test.rs +++ b/src/test.rs @@ -520,6 +520,42 @@ fn test_fuzz_hasher() { } #[test] +fn test_fuzz_xof() { + let mut input_buf = [0u8; 3 * BLOCK_LEN]; + paint_test_input(&mut input_buf); + + // Don't do too many iterations in debug mode, to keep the tests under a + // second or so. CI should run tests in release mode also. Provide an + // environment variable for specifying a larger number of fuzz iterations. + let num_tests = if cfg!(debug_assertions) { 100 } else { 2500 }; + + // Use a fixed RNG seed for reproducibility. + let mut rng = rand_chacha::ChaCha8Rng::from_seed([1; 32]); + for _num_test in 0..num_tests { + #[cfg(feature = "std")] + dbg!(_num_test); + // 31 (16 + 8 + 4 + 2 + 1) outputs + let mut output_buf = [0; 31 * CHUNK_LEN]; + let input_len = rng.gen_range(0..input_buf.len()); + let mut xof = crate::Hasher::new() + .update(&input_buf[..input_len]) + .finalize_xof(); + let partial_start = rng.gen_range(0..output_buf.len()); + let partial_end = rng.gen_range(partial_start..output_buf.len()); + xof.fill(&mut output_buf[..partial_start]); + xof.fill(&mut output_buf[partial_start..partial_end]); + xof.fill(&mut output_buf[partial_end..]); + + let mut reference_buf = [0; 31 * CHUNK_LEN]; + let mut reference_hasher = reference_impl::Hasher::new(); + reference_hasher.update(&input_buf[..input_len]); + reference_hasher.finalize(&mut reference_buf); + + assert_eq!(reference_buf, output_buf); + } +} + +#[test] fn test_xof_seek() { let mut out = [0; 533]; let mut hasher = crate::Hasher::new(); |