#digest #hash #signatures #merkle #blockchain

objecthash

一种跨多种编码(JSON、Protobufs等)工作的内容散列算法

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

Apache-2.0

16KB
320

ObjectHash for Rust 最新版本 构建状态 Apache 2许可证

一种跨多种编码(JSON、Protobufs等)工作的内容散列算法。

此crate提供了一个由Ben Laurie最初创建的算法的Rust实现。

它好吗?

是的。

它是“生产就绪™”吗?

DANGER: EXPERIMENTAL

不是! 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