summaryrefslogtreecommitdiffstats
path: root/src/lib.rs
blob: 961242748a75ccb74c2c3ed8ff9b5c185849e1ee (plain)
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
//! 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(), 3);
//! 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"
//! ));
//!
//! assert!(!proofer.verify(
//!     &proof,
//!     &files[0],
//!     "a08c44656fb3f561619b87_NOT_VALID_HASH_9ed6e0cafbd7ce08ebe12d55ca"
//! ));
//!
//! let proof = proofer.generate(1).expect("proof generation failed");
//!
//! assert!(proofer.verify(
//!     &proof,
//!     &files[1],
//!     "a08c44656fb3f561619b8747a0d1dabe97126d9ed6e0cafbd7ce08ebe12d55ca",
//! ));
//!
//! ```
pub mod fs;
pub mod hasher;
pub mod merkletree;
pub mod node;
pub mod proof;