6个版本 (重大更新)
0.7.0 | 2024年7月26日 |
---|---|
0.6.1 | 2024年2月8日 |
0.6.0 | 2024年1月10日 |
0.5.0 | 2023年12月18日 |
0.1.0 | 2023年7月4日 |
在密码学类别中排名75
每月下载量10,373
用于9个crate(6个直接使用)
420KB
11K SLoC
为ZkCrypto traits收集的椭圆曲线集合
该库提供了各种halo2友好的椭圆曲线的高效和灵活实现,最初实现了BN256曲线,使用了来自zkcrypto
生态系统的特性,
实现最初是从matterlabs/pairing和zkcrypto/bls12-381迁移过来的,但已扩展和优化以覆盖更广泛的曲线和用例。自其初始发布以来,该库已扩展到包括其他曲线,以及以下功能
secp256k1
、secp256r1
、pluto
、eris
和grumpkin
曲线,增强了其在各种密码协议中的可用性。- 汇编优化,显著提高了性能。
- 与曲线点和字段元素序列化和反序列化相关的各种功能。
- 针对特定曲线的优化和基准测试能力。
控制并行性
halo2curves
目前使用rayon进行并行计算。
可以使用环境变量RAYON_NUM_THREADS
来设置线程数。
当编译到WASM目标时,请注意,从版本1.7
开始,rayon
将自动回退(无需处理功能),以要求使用getrandom
才能正常工作。有关WASM编译的相关信息。
参见:Rayon: 使用WebAssembly 了解更多信息。
基准测试
基准测试通过Rust内置的测试框架支持。可以在不进行汇编优化的情况下运行基准测试
$ cargo test --profile bench test_field -- --nocapture
或进行汇编优化
$ cargo test --profile bench test_field --features asm -- --nocapture
附加功能
-
序列化/反序列化推导:该库支持Serde的
Serialize
和Deserialize
特质,以便对字段和组元素进行序列化,从而更容易将曲线操作集成到依赖序列化的工作流程中。 -
散列到曲线:对于
bn256::G1
和grumpkin::G1
曲线,实现了hash_to_curve
,使得更高效的哈希和签名方案成为可能。 -
查找表:为
bn256::Fr
提供了一个预计算的查找表,加速从u16
到montgomery表示的转换。
结构
库的最高级目录组织如下
benches
:包含基准测试。script
:包含实用脚本。src
:包含库的源代码,进一步细分为支持每个曲线的模块(bn256
、grumpkin
、secp256k1
、secp256r1
、secq256k1
、pasta
、pluto
、eris
)和附加功能(derive
、tests
)。
依赖项
~4.5MB
~99K SLoC