From c97f558c45b4f40b352cb6a0edf3aa9f4b0474f2 Mon Sep 17 00:00:00 2001 From: Santo Cariotti Date: Mon, 16 Jun 2025 16:34:48 +0200 Subject: Move proof tests and fix lifetime --- src/proof.rs | 51 ++++++++++++++++++++++++++++++++++++++++++--------- 1 file changed, 42 insertions(+), 9 deletions(-) (limited to 'src/proof.rs') diff --git a/src/proof.rs b/src/proof.rs index 8f338d7..d2d1c0f 100644 --- a/src/proof.rs +++ b/src/proof.rs @@ -58,21 +58,18 @@ pub trait Proofer { T: AsRef<[u8]>; } -pub struct DefaultProofer { - hasher: Box, +pub struct DefaultProofer<'a> { + hasher: &'a dyn Hasher, leaves: Vec, } -impl DefaultProofer { - pub fn new(hasher: H, leaves: Vec) -> Self { - Self { - hasher: Box::new(hasher), - leaves, - } +impl<'a> DefaultProofer<'a> { + pub fn new(hasher: &'a dyn Hasher, leaves: Vec) -> Self { + Self { hasher, leaves } } } -impl Proofer for DefaultProofer { +impl Proofer for DefaultProofer<'_> { fn generate(&self, index: usize) -> Option { if index >= self.leaves.len() { return None; @@ -148,3 +145,39 @@ impl Proofer for DefaultProofer { current_hash == root_hash } } + +#[cfg(test)] +mod tests { + use crate::{hasher::*, merkletree::MerkleTree}; + + use super::*; + + #[test] + fn test_proof_generation_and_verification_dummy() { + let hasher = DummyHasher; + let data = vec!["a", "b", "c", "d"]; + let tree = MerkleTree::new(hasher.clone(), data.clone()); + let proofer = DefaultProofer::new(&hasher, tree.leaves()); + + for (index, item) in data.iter().enumerate() { + let proof = proofer.generate(index).unwrap(); + + assert!(proofer.verify(&proof, item, tree.root().hash(), &hasher)); + } + } + + #[test] + #[cfg(feature = "sha256")] + fn test_proof_generation_and_verification_sha256() { + let hasher = SHA256Hasher::new(); + let data = vec!["a", "b", "c", "d"]; + let tree = MerkleTree::new(hasher.clone(), data.clone()); + let proofer = DefaultProofer::new(&hasher, tree.leaves().clone()); + + for (index, item) in data.iter().enumerate() { + let proof = proofer.generate(index).unwrap(); + + assert!(proofer.verify(&proof, item, tree.root().hash(), &hasher)); + } + } +} -- cgit v1.2.3-71-g8e6c