Skip to content

Commit

Permalink
Merge pull request #47 from 0xPolygonMiden/kaneki-domain-separator
Browse files Browse the repository at this point in the history
refactor merge in domain tests
  • Loading branch information
0xkanekiken authored Feb 1, 2023
2 parents 6de7730 + 37c6f00 commit f399df5
Showing 1 changed file with 14 additions and 21 deletions.
35 changes: 14 additions & 21 deletions src/hash/rpo/tests.rs
Original file line number Diff line number Diff line change
@@ -1,6 +1,6 @@
use super::{
Felt, FieldElement, Hasher, Rpo256, RpoDigest, StarkField, ALPHA, CAPACITY_RANGE, DIGEST_RANGE,
INV_ALPHA, RATE_RANGE, STATE_WIDTH, ZERO,
Felt, FieldElement, Hasher, Rpo256, RpoDigest, StarkField, ALPHA, INV_ALPHA, ONE, STATE_WIDTH,
ZERO,
};
use core::convert::TryInto;
use rand_utils::rand_value;
Expand Down Expand Up @@ -53,37 +53,30 @@ fn hash_elements_vs_merge() {
}

#[test]
fn hash_elements_vs_merge_in_domain() {
fn merge_vs_merge_in_domain() {
let elements = [Felt::new(rand_value()); 8];

let digests: [RpoDigest; 2] = [
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.
let domain = Felt::new(rand_value());
// ------------- merge with domain = 0 ----------------------------------------------------------

// convert the elements into a list of base field elements
let elements = Felt::as_base_elements(&elements);
// set domain to ZERO. This should not change the result.
let domain = ZERO;

// initialize state to all zeros.
let mut state = [ZERO; STATE_WIDTH];
let merge_in_domain_result = Rpo256::merge_in_domain(&digests, domain);
assert_eq!(merge_result, merge_in_domain_result);

// set the second capacity element to the domain.
state[CAPACITY_RANGE.start + 1] = domain;
// ------------- merge with domain = 1 ----------------------------------------------------------

// absorb elements into the state.
state[RATE_RANGE.start..RATE_RANGE.end].copy_from_slice(elements);
// set domain to ONE. This should change the result.
let domain = ONE;

// apply permutation to the state.
Rpo256::apply_permutation(&mut state);

// 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);
let merge_in_domain_result = Rpo256::merge_in_domain(&digests, domain);
assert_ne!(merge_result, merge_in_domain_result);
}

#[test]
Expand Down

0 comments on commit f399df5

Please sign in to comment.