#poseidon-hash #zero-knowledge-proofs #zero-knowledge #scalar-field #cryptography #crypto

无std dusk-poseidon

Bls12-381标量域上Poseidon哈希算法的实现

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.12021年3月31日

#102 in 算法

Download history 158/week @ 2024-05-03 52/week @ 2024-05-10 92/week @ 2024-05-17 48/week @ 2024-05-24 39/week @ 2024-05-31 42/week @ 2024-06-07 47/week @ 2024-06-14 42/week @ 2024-06-21 9/week @ 2024-06-28 7/week @ 2024-07-05 41/week @ 2024-07-12 38/week @ 2024-07-19 303/week @ 2024-07-26 60/week @ 2024-08-02 171/week @ 2024-08-09 171/week @ 2024-08-16

722 每月下载量
用于14 个crate(12个直接使用)

MPL-2.0 许可证

67KB
754

Build Status Repository Documentation

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