arnaucube
arnaucube/miden-cryptoPublic Self-hosted repository
miden-crypto/crypto/src/hash/mod.rs
crypto/src/hash/mod.rsRaw
 1use crate::StarkField;
 2pub use winterfell::crypto::hashers::Rp64_256 as Hasher;
 3pub use winterfell::crypto::{ElementHasher, Hasher as HashFn};
 4
 5// TYPE ALIASES
 6// ================================================================================================
 7
 8pub type Digest = <Hasher as HashFn>::Digest;
 9
10// HELPER FUNCTIONS
11// ================================================================================================
12
13#[inline(always)]
14fn _exp_acc<B: StarkField, const N: usize, const M: usize>(base: [B; N], tail: [B; N]) -> [B; N] {
15    let mut result = base;
16    for _ in 0..M {
17        result.iter_mut().for_each(|r| *r = r.square());
18    }
19    result.iter_mut().zip(tail).for_each(|(r, t)| *r *= t);
20    result
21}
22
23#[inline(always)]
24pub fn merge(values: &[Digest; 2]) -> Digest {
25    Hasher::merge(values)
26}