#elliptic-curve #halo2 #bls12-381 #ecosystem #bn256 #elements #field

halo2curves

为halo2库提供椭圆曲线实现和包装

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

Download history 1621/week @ 2024-04-27 2205/week @ 2024-05-04 2863/week @ 2024-05-11 2350/week @ 2024-05-18 2474/week @ 2024-05-25 3530/week @ 2024-06-01 3942/week @ 2024-06-08 3164/week @ 2024-06-15 3078/week @ 2024-06-22 3233/week @ 2024-06-29 2663/week @ 2024-07-06 2522/week @ 2024-07-13 2071/week @ 2024-07-20 2868/week @ 2024-07-27 3131/week @ 2024-08-03 1892/week @ 2024-08-10

每月下载量10,373
用于9个crate(6个直接使用)

MIT/Apache

420KB
11K SLoC

为ZkCrypto traits收集的椭圆曲线集合

crates.io version docs.rs availability Build status

该库提供了各种halo2友好的椭圆曲线的高效和灵活实现,最初实现了BN256曲线,使用了来自zkcrypto生态系统的特性,

实现最初是从matterlabs/pairingzkcrypto/bls12-381迁移过来的,但已扩展和优化以覆盖更广泛的曲线和用例。自其初始发布以来,该库已扩展到包括其他曲线,以及以下功能

  • secp256k1secp256r1plutoerisgrumpkin曲线,增强了其在各种密码协议中的可用性。
  • 汇编优化,显著提高了性能。
  • 与曲线点和字段元素序列化和反序列化相关的各种功能。
  • 针对特定曲线的优化和基准测试能力。

控制并行性

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

附加功能

  1. 序列化/反序列化推导:该库支持Serde的SerializeDeserialize特质,以便对字段和组元素进行序列化,从而更容易将曲线操作集成到依赖序列化的工作流程中。

  2. 散列到曲线:对于bn256::G1grumpkin::G1曲线,实现了hash_to_curve,使得更高效的哈希和签名方案成为可能。

  3. 查找表:为bn256::Fr提供了一个预计算的查找表,加速从u16到montgomery表示的转换。

结构

库的最高级目录组织如下

  • benches:包含基准测试。
  • script:包含实用脚本。
  • src:包含库的源代码,进一步细分为支持每个曲线的模块(bn256grumpkinsecp256k1secp256r1secq256k1pastaplutoeris)和附加功能(derivetests)。

依赖项

~4.5MB
~99K SLoC