1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
|
//! This library provides modular components to build and verify binary Merkle trees
//! with pluggable hash functions.
//!
//! ## Example: Merkle Tree with File Inputs and Proof Verification
//!
//! ```rust
//! use mt_rs::hasher::SHA256Hasher;
//! use mt_rs::merkletree::MerkleTree;
//! use mt_rs::proof::{DefaultProofer, Proofer};
//! use std::fs;
//!
//! let hasher = SHA256Hasher::new();
//!
//! let files = [
//! fs::read("tests/pics/cubbit.png.enc.0").expect("file 0 not found"),
//! fs::read("tests/pics/cubbit.png.enc.1").expect("file 1 not found"),
//! fs::read("tests/pics/cubbit.png.enc.2").expect("file 2 not found"),
//! ];
//!
//! let tree = MerkleTree::new(hasher.clone(), files.clone());
//!
//! assert_eq!(tree.height(), 3);
//! assert_eq!(tree.len(), 4);
//! assert_eq!(
//! tree.root().hash(),
//! "a08c44656fb3f561619b8747a0d1dabe97126d9ed6e0cafbd7ce08ebe12d55ca"
//! );
//!
//! let proofer = DefaultProofer::new(&hasher, tree.leaves().clone());
//!
//! let proof = proofer.generate(0).expect("proof generation failed");
//!
//! assert!(proofer.verify(
//! &proof,
//! &files[0],
//! "a08c44656fb3f561619b8747a0d1dabe97126d9ed6e0cafbd7ce08ebe12d55ca",
//! &hasher
//! ));
//!
//! assert!(!proofer.verify(
//! &proof,
//! &files[0],
//! "a08c44656fb3f561619b87_NOT_VALID_HASH_9ed6e0cafbd7ce08ebe12d55ca",
//! &hasher
//! ));
//!
//! let proof = proofer.generate(1).expect("proof generation failed");
//!
//! assert!(proofer.verify(
//! &proof,
//! &files[1],
//! "a08c44656fb3f561619b8747a0d1dabe97126d9ed6e0cafbd7ce08ebe12d55ca",
//! &hasher
//! ));
//!
//! ```
pub mod hasher;
pub mod merkletree;
pub mod node;
pub mod proof;
|