arnaucube
arnaucube/miden-cryptoPublic Self-hosted repository
miden-crypto/src/hash/blake/tests.rs
src/hash/blake/tests.rsRaw
 1use proptest::prelude::*;
 2use rand_utils::rand_vector;
 3
 4use super::*;
 5use alloc::vec::Vec;
 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}