Crate mt_rs

Crate mt_rs 

Source
Expand description

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

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",
));

Modules§

fs
Provides the module used for filesystem operations made by this library.
hasher
Provides hashing abstractions and implementations including SHA256 and a default dummy hasher.
merkletree
Provides the MerkleTree structure and associated methods for creating and interacting with binary Merkle trees using custom hashers.
node
Contains node definitions for Merkle trees, including leaf and internal node structures.
proof
Merkle tree proof and verification implementation