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