merkle is a lightweight Rust implementation of a Merkle tree.
std::hash::Hasher
compatibility#[derive(Hashable)]
support for simple structDocumentation is available.
test_sip.rs
: algorithm implementation example for std sip hasher, u64 hash itemstest_xor128.rs
: custom hash example xor128test_cmh.rs
: custom merkle hasher implementation examplecrypto_bitcoin_mt.rs
: bitcoin merkle tree using crypto libcrypto_chaincore_mt.rs
: chain core merkle tree using crypto libring_bitcoin_mt.rs
: bitcoin merkle tree using ring lib``` extern crate crypto; extern crate merkle_light;
use std::fmt; use std::hash::Hasher; use std::iter::FromIterator; use crypto::sha3::{Sha3, Sha3Mode}; use crypto::digest::Digest; use merklelight::hash::{Algorithm, Hashable}; use merklelight::merkle::MerkleTree;
pub struct ExampleAlgorithm(Sha3);
impl ExampleAlgorithm { pub fn new() -> ExampleAlgorithm { ExampleAlgorithm(Sha3::new(Sha3Mode::Sha3_256)) } }
impl Default for ExampleAlgorithm { fn default() -> ExampleAlgorithm { ExampleAlgorithm::new() } }
impl Hasher for ExampleAlgorithm { #[inline] fn write(&mut self, msg: &[u8]) { self.0.input(msg) }
#[inline]
fn finish(&self) -> u64 {
unimplemented!()
}
}
impl Hashable
impl Algorithm<[u8; 32]> for ExampleAlgorithm { #[inline] fn hash(&mut self) -> [u8; 32] { let mut h = [0u8; 32]; self.0.result(&mut h); h }
#[inline]
fn reset(&mut self) {
self.0.reset();
}
}
fn main() { let mut h1 = [0u8; 32]; let mut h2 = [0u8; 32]; let mut h3 = [0u8; 32]; h1[0] = 0x11; h2[0] = 0x22; h3[0] = 0x33;
let t: MerkleTree<[u8; 32], ExampleAlgorithm> = MerkleTree::from_iter(vec![h1, h2, h3]);
println!("{:?}", t.root());
} ```
Please report bugs either as pull requests or as issues in the issue tracker. merkle has a full disclosure vulnerability policy. Please do NOT attempt to report any security vulnerability in this code privately to anybody.
See LICENSE.