miden-crypto/src/hash/blake/tests.rs
src/hash/blake/tests.rsRaw
1use proptest::prelude::*;
2use rand_utils::rand_vector;
3
4use super::*;
5use crate::utils::collections::*;
6
7#[test]
8fn blake3_hash_elements() {
9 // test multiple of 8
10 let elements = rand_vector::<Felt>(16);
11 let expected = compute_expected_element_hash(&elements);
12 let actual: [u8; 32] = hash_elements(&elements);
13 assert_eq!(&expected, &actual);
14
15 // test not multiple of 8
16 let elements = rand_vector::<Felt>(17);
17 let expected = compute_expected_element_hash(&elements);
18 let actual: [u8; 32] = hash_elements(&elements);
19 assert_eq!(&expected, &actual);
20}
21
22proptest! {
23 #[test]
24 fn blake160_wont_panic_with_arbitrary_input(ref vec in any::<Vec<u8>>()) {
25 Blake3_160::hash(vec);
26 }
27
28 #[test]
29 fn blake192_wont_panic_with_arbitrary_input(ref vec in any::<Vec<u8>>()) {
30 Blake3_192::hash(vec);
31 }
32
33 #[test]
34 fn blake256_wont_panic_with_arbitrary_input(ref vec in any::<Vec<u8>>()) {
35 Blake3_256::hash(vec);
36 }
37}
38
39// HELPER FUNCTIONS
40// ================================================================================================
41
42fn compute_expected_element_hash(elements: &[Felt]) -> blake3::Hash {
43 let mut bytes = Vec::new();
44 for element in elements.iter() {
45 bytes.extend_from_slice(&element.as_int().to_le_bytes());
46 }
47 blake3::hash(&bytes)
48}