Skip to main content

miden_objects/decoded/primitives/
merkle.rs

1pub use proto::primitives::DecodedMerklePath as MerklePath;
2
3use crate::decoded::VerificationError;
4use crate::{Verify, proto};
5
6#[cfg(test)]
7mod tests;
8
9impl Verify for MerklePath {
10    type Verified = miden_protocol::crypto::merkle::MerklePath;
11    type Error = core::convert::Infallible;
12    fn verify(self) -> Result<Self::Verified, Self::Error> {
13        Ok(Self::Verified::new(self.siblings.into_inner()))
14    }
15}
16
17pub use proto::primitives::DecodedSparseMerklePath as SparseMerklePath;
18
19impl Verify for SparseMerklePath {
20    type Verified = miden_protocol::crypto::merkle::SparseMerklePath;
21    type Error = miden_protocol::crypto::merkle::MerkleError;
22    fn verify(self) -> Result<Self::Verified, Self::Error> {
23        Self::Verified::from_parts(self.empty_nodes_mask, self.siblings.into_inner())
24    }
25}
26
27pub use proto::primitives::DecodedMmrDelta as MmrDelta;
28
29impl Verify for MmrDelta {
30    type Verified = miden_protocol::crypto::merkle::mmr::MmrDelta;
31    type Error = VerificationError;
32    fn verify(self) -> Result<Self::Verified, Self::Error> {
33        let forest = miden_protocol::crypto::merkle::mmr::Forest::new(self.forest.try_into()?)?;
34        Ok(Self::Verified {
35            forest,
36            data: self.update_data.into_inner(),
37        })
38    }
39}