miden_crypto/hash/
mod.rs

1//! Cryptographic hash functions used by the Miden protocol.
2
3use crate::{Felt, Word, ZERO};
4
5/// Blake3 hash function.
6pub mod blake;
7
8/// Keccak hash function.
9pub mod keccak;
10
11/// SHA-2 hash functions (SHA-256 and SHA-512).
12pub mod sha2;
13
14/// Poseidon2 hash function.
15pub mod poseidon2 {
16    pub use p3_goldilocks::Poseidon2Goldilocks;
17
18    pub use super::algebraic_sponge::poseidon2::{
19        Poseidon2, Poseidon2Challenger, Poseidon2Compression, Poseidon2Hasher,
20        Poseidon2Permutation256,
21    };
22}
23
24/// Rescue Prime Optimized (RPO) hash function.
25pub mod rpo {
26    pub use super::algebraic_sponge::rescue::rpo::{
27        Rpo256, RpoChallenger, RpoCompression, RpoHasher, RpoPermutation256,
28    };
29}
30
31/// Rescue Prime Extended (RPX) hash function.
32pub mod rpx {
33    pub use super::algebraic_sponge::rescue::rpx::{
34        Rpx256, RpxChallenger, RpxCompression, RpxHasher, RpxPermutation256,
35    };
36}
37
38mod algebraic_sponge;
39
40// TRAITS
41// ================================================================================================
42
43/// Extension trait for hashers to provide iterator-based hashing.
44pub trait HasherExt {
45    /// The digest type produced by this hasher.
46    type Digest;
47
48    /// Hashes an iterator of byte slices.
49    ///
50    /// This method allows for more efficient hashing by avoiding the need to
51    /// allocate a contiguous buffer when the input data is already available
52    /// as discrete slices.
53    fn hash_iter<'a>(slices: impl Iterator<Item = &'a [u8]>) -> Self::Digest;
54}