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