10 个版本

0.2.0 2023年11月8日
0.1.2 2023年10月29日
0.0.6 2023年7月12日
0.0.4 2023年2月24日
0.0.2 2022年12月18日

#1368 in 魔法豆

Download history 33581/week @ 2024-04-17 32445/week @ 2024-04-24 27458/week @ 2024-05-01 29456/week @ 2024-05-08 28201/week @ 2024-05-15 24556/week @ 2024-05-22 31010/week @ 2024-05-29 30106/week @ 2024-06-05 31420/week @ 2024-06-12 28545/week @ 2024-06-19 27489/week @ 2024-06-26 24349/week @ 2024-07-03 25544/week @ 2024-07-10 27717/week @ 2024-07-17 31699/week @ 2024-07-24 45361/week @ 2024-07-31

135,802 每月下载量
用于 1,063 个 (6 个直接使用) 仓库

Apache-2.0

1.5MB
43K SLoC

Crates.io Workflow Status

light-poseidon

light-poseidon 是 Rust 编写的 Poseidon 哈希实现,为 Light Protocol 创建。

参数

该库提供了基于 BN254 曲线的预生成参数,但它可以使用任何提供的参数,只要开发者注意生成轮常数。

库提供的参数包括

  • x^5 S-boxes
  • 宽度 - 2 ≤ t ≤ 13
  • 输入 - 1 ≤ n ≤ 12
  • 8 个完整轮和部分轮,具体取决于 t[56, 57, 56, 60, 60, 63, 64, 63, 60, 66, 60, 65]

参数可以使用

cargo xtask generate-poseidon-parameters

输出类型

Poseidon 类型实现了两个特性,用于返回不同表示的计算哈希

示例

使用两个简单的字节输入(转换为字段元素)和由库提供的基于 BN254 的参数的示例,使用 PoseidonBytesHasher 特性和字节数组结果

use light_poseidon::{Poseidon, PoseidonBytesHasher, parameters::bn254_x5};
use ark_bn254::Fr;
use ark_ff::{BigInteger, PrimeField};

let mut poseidon = Poseidon::<Fr>::new_circom(2).unwrap();

let hash = poseidon.hash_bytes_be(&[&[1u8; 32], &[2u8; 32]]).unwrap();

println!("{:?}", hash);
// Should print:
// [
//     13, 84, 225, 147, 143, 138, 140, 28, 125, 235, 94, 3, 85, 242, 99, 25, 32, 123, 132,
//     254, 156, 162, 206, 27, 38, 231, 53, 200, 41, 130, 25, 144
// ]

使用 PoseidonHasher 特性和 ark_ff::PrimeField 结果

use light_poseidon::{Poseidon, PoseidonHasher, parameters::bn254_x5};
use ark_bn254::Fr;
use ark_ff::{BigInteger, PrimeField};

let mut poseidon = Poseidon::<Fr>::new_circom(2).unwrap();

let input1 = Fr::from_be_bytes_mod_order(&[1u8; 32]);
let input2 = Fr::from_be_bytes_mod_order(&[2u8; 32]);

let hash = poseidon.hash(&[input1, input2]).unwrap();

// Do something with `hash`.

实现

该实现与 原始 SageMath 实现 兼容,但也受到了以下实现的启发

性能

此存储库包含一个基准测试,用于测量给定 1 - 12 个随机 32 字节输入的 Poseidon 实现的性能。

要运行它们,请简单使用

cargo bench

这是具有以下硬件的主机上的结果

  • 第 12 代英特尔® 酷睿™ i7-1260P × 16
poseidon_bn254_x5_1     time:   [17.543 µs 18.303 µs 19.133 µs]
Found 9 outliers among 100 measurements (9.00%)
  9 (9.00%) high mild

poseidon_bn254_x5_2     time:   [25.020 µs 25.866 µs 26.830 µs]

poseidon_bn254_x5_3     time:   [36.076 µs 37.549 µs 38.894 µs]

poseidon_bn254_x5_4     time:   [50.333 µs 52.598 µs 54.806 µs]

poseidon_bn254_x5_5     time:   [64.184 µs 66.324 µs 68.706 µs]

poseidon_bn254_x5_6     time:   [87.356 µs 90.259 µs 93.437 µs]

poseidon_bn254_x5_7     time:   [120.08 µs 125.26 µs 130.23 µs]

poseidon_bn254_x5_8     time:   [134.28 µs 139.65 µs 145.71 µs]

poseidon_bn254_x5_9     time:   [161.99 µs 168.93 µs 175.94 µs]

poseidon_bn254_x5_10    time:   [208.11 µs 215.27 µs 222.99 µs]
Found 1 outliers among 100 measurements (1.00%)
  1 (1.00%) high mild

poseidon_bn254_x5_11    time:   [239.47 µs 249.05 µs 258.35 µs]

poseidon_bn254_x5_12    time:   [295.47 µs 305.80 µs 316.41 µs]

安全性

该库已由 Veridise 审计。您可以在 此处 阅读审计报告。

依赖项

~5MB
~96K SLoC