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