arnaucube
arnaucube/miden-cryptoPublic Self-hosted repository
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}