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