miden_crypto/hash/
mod.rs

1//! Cryptographic hash functions used by the Miden protocol.
2
3use super::{CubeExtension, Felt, FieldElement, StarkField, Word, ZERO};
4
5/// Blake3 hash function.
6pub mod blake;
7
8/// Keccak hash function.
9pub mod keccak;
10
11/// Poseidon2 hash function.
12pub mod poseidon2 {
13    pub use super::algebraic_sponge::poseidon2::Poseidon2;
14}
15
16/// Rescue Prime Optimized (RPO) hash function.
17pub mod rpo {
18    pub use super::algebraic_sponge::rescue::Rpo256;
19}
20
21/// Rescue Prime Extended (RPX) hash function.
22pub mod rpx {
23    pub use super::algebraic_sponge::rescue::Rpx256;
24}
25
26mod algebraic_sponge;
27
28// RE-EXPORTS
29// ================================================================================================
30
31pub use winter_crypto::{Digest, ElementHasher, Hasher};
32
33/// Extension trait for Hasher to provide iterator-based hashing.
34pub trait HasherExt: Hasher {
35    /// Hashes an iterator of byte slices.
36    ///
37    /// This method allows for more efficient hashing by avoiding the need to
38    /// allocate a contiguous buffer when the input data is already available
39    /// as discrete slices.
40    fn hash_iter<'a>(&self, slices: impl Iterator<Item = &'a [u8]>) -> Self::Digest;
41}