8个不稳定版本 (3个破坏性)
使用旧的Rust 2015
0.4.1 | 2017年1月17日 |
---|---|
0.4.0 | 2017年1月17日 |
0.3.0 | 2016年8月21日 |
0.2.2 | 2016年8月21日 |
0.1.1 | 2016年8月16日 |
#54 in #merkle
16KB
320 行
ObjectHash for Rust
一种跨多种编码(JSON、Protobufs等)工作的内容散列算法。
此crate提供了一个由Ben Laurie最初创建的算法的Rust实现。
它好吗?
它是“生产就绪™”吗?
不是! ObjectHash是一个实验性算法,并且可能会更改。请现在不要依赖它。
此外,这是一个加密性质的项目,并且尚未经过专家审查。
自行承担风险。
安装
您需要选择一个支持的加密库,用作ObjectHash的后端。以下后端库受支持
- ring:一个基于BoringSSL的加密原语的快速、安全、小型Rust加密库
请确保添加加密后端crate,否则objecthash
crate将无法工作!
用法
ObjectHash可以用于计算深层嵌套结构的内容散列。预期用途是首先将数据反序列化为嵌套结构,然后对其内容执行ObjectHash摘要。这样,无论数据的序列化方式如何,都可以计算相同的内容散列,这使得数据可以在格式之间进行转码,而无需重新计算内容散列。
此crate定义了一个名为ObjectHash的trait
pub trait ObjectHash {
fn objecthash<H: ObjectHasher>(&self, hasher: &mut H);
}
为以下类型提供了内置的ObjectHash trait实现
Vec<T:ObjectHash>
HashMap<K:ObjectHash, V:ObjectHash>
str
String
- 整数
i8
i16
i32
i64
u8
u16
u32
u64
isize
usize
要计算某些数据的ObjectHash摘要,请调用以下
let digest: Vec<u8> = objecthash::digest(42);
本函数将使用SHA-256算法计算给定值的摘要,前提是给定值的类型实现了ObjectHash特质。
宏定义
objecthash_struct!
宏旨在简化在结构体上实现ObjectHash特质,通过它们的键和值生成字典类型的哈希。
impl ObjectHash for MyStruct {
#[inline]
fn objecthash<H: ObjectHasher>(&self, hasher: &mut H) {
objecthash_struct!(
hasher,
"foo" => self.foo,
"bar" => self.bar,
"baz" => self.baz
)
}
}
待办事项
- 更多类型
- 更多测试向量
- 支持红字处理
贡献
- 在Github上Fork此仓库
- 进行更改并发送拉取请求
- 如果您的更改看起来不错,我们将合并它们
版权
版权(c)2016-2017 Tony Arcieri。Apache 2.0许可证下分发。有关更多信息,请参阅LICENSE文件。
依赖关系
~0.6–9MB
~125K SLoC