diff options
| author | Jack O'Connor <[email protected]> | 2023-05-28 13:02:48 -0700 |
|---|---|---|
| committer | Jack O'Connor <[email protected]> | 2023-05-28 13:02:48 -0700 |
| commit | d1bfc2ee4391b6c69a48f2bf0cbd687fbe306bd8 (patch) | |
| tree | f1e63a76b4e5224d7ae10ea94d7ba04717e743a7 | |
| parent | 176fdf8893f933577d87130d97519dcd00d491b8 (diff) | |
test_fuzz_xofxof_integration
| -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 d9e6cf3..69cf0b3 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(); |
