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