5个版本 (3个重大更新)
0.4.0 | 2022年6月21日 |
---|---|
0.3.1 | 2017年12月13日 |
0.3.0 | 2017年11月30日 |
0.2.0 | 2017年11月25日 |
0.1.0 | 2017年11月22日 |
#746 in 加密学
每月891次下载
用于 merkle_light_derive
42KB
815 行
merkle
merkle 是一个轻量级的Rust实现,用于默克尔树。
功能
- 外部依赖无关
core::hash::Hasher
兼容性- 标准类型哈希实现
#[derive(Hashable)]
支持简单的结构体- 可定制的默克尔叶/节点哈希算法
- 支持自定义哈希类型(例如 [u8; 16], [u64; 4], [u128; 2], 结构体)
- 可定制的哈希算法
- 线性内存布局,无节点在堆上
- 可从迭代器、对象或哈希构建
- 支持证书透明度风格的默克尔哈希
- 包含SPV
文档
文档可在此处找到。
示例
test_sip.rs
:std sip哈希器的算法实现示例,u64哈希项test_xor128.rs
:自定义哈希示例 xor128test_cmh.rs
:自定义默克尔哈希器实现示例crypto_bitcoin_mt.rs
:使用crypto库的bitcoin默克尔树crypto_chaincore_mt.rs
:使用crypto库的chain core默克尔树ring_bitcoin_mt.rs
:使用ring库的bitcoin默克尔树
快速开始
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 merkle_light::hash::{Algorithm, Hashable};
use merkle_light::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 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());
}
错误报告
请通过拉取请求或问题跟踪器中的问题报告错误。《merkle》具有完整的披露漏洞政策。请勿尝试将任何安全漏洞私下告知任何人。
许可证
请参阅LICENSE。
依赖项
~0–4MB
~86K SLoC