miden-crypto/crypto/src/merkle/mod.rs
crypto/src/merkle/mod.rsRaw
1pub mod merkle_path_set;
2pub mod merkle_tree;
3
4use winterfell::crypto::Hasher as HashFn;
5
6pub use winterfell::crypto::hashers::Rp64_256 as Hasher;
7pub use winterfell::math::{
8 fields::{f64::BaseElement as Felt, QuadExtension},
9 ExtensionOf, FieldElement, StarkField,
10};
11
12// TYPE ALIASES
13// ================================================================================================
14
15pub type Word = [Felt; 4];
16pub type Digest = <Hasher as HashFn>::Digest;
17
18// PASS-THROUGH FUNCTIONS
19// ================================================================================================
20
21/// Returns a hash of two digests. This method is intended for use in construction of Merkle trees.
22#[inline(always)]
23pub fn merge(values: &[Digest; 2]) -> Digest {
24 Hasher::merge(values)
25}
26
27// ERRORS
28// ================================================================================================
29
30#[derive(Clone, Debug)]
31pub enum MerkleError {
32 DepthTooSmall,
33 DepthTooBig(u32),
34 NumLeavesNotPowerOfTwo(usize),
35 InvalidIndex(u32, u64),
36 InvalidDepth(u32, u32),
37 InvalidPath(Vec<Word>),
38 NodeNotInSet(u64),
39}