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}