arnaucube
arnaucube/miden-cryptoPublic Self-hosted repository
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}