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