2 个版本
0.1.1 | 2022年8月13日 |
---|---|
0.1.0 | 2022年8月7日 |
#5 in #algorand
22KB
344 行
sumhash
此存储库包含 Algorand 项目设计的子集求和哈希函数的 Rust 实现。
参考实现是用 Go 编写的,可以在 go-sumhash
仓库中找到。您还可以参考 spec
以查看哈希函数的正式描述。
此实现并非 Go 仓库的直接移植,因为官方实现不会导致 Rust 的惯用用法。在此库中,我们实现了一个可以包装在 CoreWrapper 中的 Sumhash512Core 内核。如果您对直接移植参考实现的早期版本感兴趣,请查看 legacyport
分支。
此库有一个 AlgorandSumhash512Core
类型别名,它简化了 Sumhash512Core 的默认配置,该配置使用 Algorand 区块链状态证明的官方种子。AlgorandSumhash512Core 使用查找表作为默认的底层压缩器设置,而不是矩阵。
此库 尚未 经过审计或准备好用于生产使用,也不是官方实现。
使用
使用 Algorand 实例配置
use sumhash::sumhash512core::AlgorandSumhash512Core;
use digest::{core_api::CoreWrapper, FixedOutput, Update};
fn main() {
let mut h = CoreWrapper::<AlgorandSumhash512Core>::default();
h.update("hello world".as_bytes());
let output = h.finalize_fixed();
println!("Result: {}", hex::encode(&output));
}
提供自己的种子的通用版本。
use sumhash::sumhash512core::Sumhash512Core;
use digest::{core_api::CoreWrapper, FixedOutput, Update};
fn main() {
let mut salt = [0; 64];
salt[0] = 0x13;
salt[1] = 0x37;
let mut h = CoreWrapper::from_core(Sumhash512Core::new_with_salt(salt));
h.update("hello world".as_bytes());
let output = h.finalize_fixed();
println!("Result: {}", hex::encode(&output));
}
Cargo
构建
运行 cargo build
。
测试
从 go-sumhash
移植并通过的所有现有测试。这些测试依赖于使用 Shake256
生成随机矩阵,此库也尊重输入和预期精确输出匹配,从而增加了正确性的信心。
运行 cargo test
running 5 tests
test sumhash512core::test::sumhash512_salt ... ok
test sumhash512core::test::sumhash512 ... ok
test sumhash512core::test::sumhash512_reset ... ok
test sumhash512core::test::test_vector ... ok
test compress::test::compression ... ok
test result: ok. 5 passed; 0 failed; 0 ignored; 0 measured; 0 filtered out; finished in 0.59s
Doc-tests sumhash
running 2 tests
test src/lib.rs - (line 37) ... ok
test src/lib.rs - (line 26) ... ok
test result: ok. 2 passed; 0 failed; 0 ignored; 0 measured; 0 filtered out; finished in 0.21s
基准测试
计划添加基准测试。
许可协议
在 MIT 许可协议 下许可。
贡献
请参阅 CONTRIBUTING.md。
依赖关系
~2MB
~19K SLoC