tests: refactor merge_in_domain tests

Signed-off-by: 0xKanekiKen <100861945+0xKanekiKen@users.noreply.github.com>
This commit is contained in:
0xKanekiKen 2023-02-01 13:14:03 +00:00
parent 5757b896fe
commit 37c6f003c4
No known key found for this signature in database
GPG key ID: 710E7542D34F548D

View file

@ -1,6 +1,6 @@
use super::{ use super::{
Felt, FieldElement, Hasher, Rpo256, RpoDigest, StarkField, ALPHA, CAPACITY_RANGE, DIGEST_RANGE, Felt, FieldElement, Hasher, Rpo256, RpoDigest, StarkField, ALPHA, INV_ALPHA, ONE, STATE_WIDTH,
INV_ALPHA, RATE_RANGE, STATE_WIDTH, ZERO, ZERO,
}; };
use core::convert::TryInto; use core::convert::TryInto;
use rand_utils::rand_value; use rand_utils::rand_value;
@ -53,37 +53,30 @@ fn hash_elements_vs_merge() {
} }
#[test] #[test]
fn hash_elements_vs_merge_in_domain() { fn merge_vs_merge_in_domain() {
let elements = [Felt::new(rand_value()); 8]; let elements = [Felt::new(rand_value()); 8];
let digests: [RpoDigest; 2] = [ let digests: [RpoDigest; 2] = [
RpoDigest::new(elements[..4].try_into().unwrap()), RpoDigest::new(elements[..4].try_into().unwrap()),
RpoDigest::new(elements[4..].try_into().unwrap()), RpoDigest::new(elements[4..].try_into().unwrap()),
]; ];
let merge_result = Rpo256::merge(&digests);
// pick a random domain value. // ------------- merge with domain = 0 ----------------------------------------------------------
let domain = Felt::new(rand_value());
// convert the elements into a list of base field elements // set domain to ZERO. This should not change the result.
let elements = Felt::as_base_elements(&elements); let domain = ZERO;
// initialize state to all zeros. let merge_in_domain_result = Rpo256::merge_in_domain(&digests, domain);
let mut state = [ZERO; STATE_WIDTH]; assert_eq!(merge_result, merge_in_domain_result);
// set the second capacity element to the domain. // ------------- merge with domain = 1 ----------------------------------------------------------
state[CAPACITY_RANGE.start + 1] = domain;
// absorb elements into the state. // set domain to ONE. This should change the result.
state[RATE_RANGE.start..RATE_RANGE.end].copy_from_slice(elements); let domain = ONE;
// apply permutation to the state. let merge_in_domain_result = Rpo256::merge_in_domain(&digests, domain);
Rpo256::apply_permutation(&mut state); assert_ne!(merge_result, merge_in_domain_result);
// return the first 4 elements of the state as hash result
let h_result = RpoDigest::new(state[DIGEST_RANGE].try_into().unwrap());
let m_result = Rpo256::merge_in_domain(&digests, domain);
assert_eq!(m_result, h_result);
} }
#[test] #[test]