40个版本 (22个重大更新)
0.40.0 | 2024年8月14日 |
---|---|
0.39.0 | 2024年5月8日 |
0.38.0 | 2024年4月24日 |
0.37.0 | 2024年3月27日 |
0.20.0-pre.1 | 2021年3月31日 |
#102 in 算法
722 每月下载量
用于14 个crate(12个直接使用)
67KB
754 行
Dusk-Poseidon
Poseidon哈希算法的参考实现。
参考:Starkad和Poseidon:用于零知识证明系统的新的哈希函数
创建此存储库是为了有一个独特的库,该库包含执行bls12-381椭圆曲线域上Poseidon哈希所需的工具和函数。
哈希使用Hades设计作为其内部置换,并使用SAFE框架构建海绵。
该库提供了Poseidon的两种哈希技术
- 在
BlsScalar
上操作的标准哈希功能。 - 构建输出哈希值的电路的'gadget'哈希功能。
示例
use rand::rngs::StdRng;
use rand::SeedableRng;
use dusk_poseidon::{Domain, Hash};
use dusk_bls12_381::BlsScalar;
use ff::Field;
// generate random input
let mut rng = StdRng::seed_from_u64(0xbeef);
let mut input = [BlsScalar::zero(); 42];
for scalar in input.iter_mut() {
*scalar = BlsScalar::random(&mut rng);
}
// digest the input all at once
let hash = Hash::digest(Domain::Other, &input);
// update the input gradually
let mut hasher = Hash::new(Domain::Other);
hasher.update(&input[..3]);
hasher.update(&input[3..]);
assert_eq!(hash, hasher.finalize());
// create a hash used for merkle tree hashing with arity = 4
let merkle_hash = Hash::digest(Domain::Merkle4, &input[..4]);
// which is different when another domain is used
assert_ne!(merkle_hash, Hash::digest(Domain::Other, &input[..4]));
基准测试
有针对哈希、加密和解密的原生形式的基准测试,操作在Scalar
上,以及用于零知识电路证明生成和验证的基准测试。
要在您的机器上运行所有基准测试,请在存储库中运行
cargo bench --features=zk,encryption
。
许可证
此代码根据Mozilla公共许可证版本2.0(MPL-2.0)许可。有关更多信息,请参阅LICENSE。
关于
由dusk团队设计的实现。
贡献
- 如果您想为此存储库/项目做出贡献,请参阅CONTRIBUTING.md。
- 如果您想报告一个错误或请求添加新功能,请在此存储库中创建一个问题。
依赖项
~4MB
~91K SLoC