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}