2个版本
0.4.1 | 2023年5月16日 |
---|---|
0.4.0 | 2023年2月9日 |
#1935 in 加密学
每月 57 次下载
用于 2 crates
45KB
1K SLoC
优化arkworks
域实现
专用域实现,优于arkworks中提供的通用、Montgomery算术、域实现。目前仅添加了一个域。请贡献实现!PRs受欢迎!
素域p=18446744069414584321
use ark_ff_optimized::fp64::Fp;
一个神奇的素数,模数为p=2^64−2^32+1
。此域具有一些良好的属性(1)两个32位值的乘积不会溢出域模数(2)检查四个16位值是否构成有效的域元素可以高效完成。此域用于Polygon Miden和Polygon Zero。实现来源于EcGFp5:一个专用椭圆曲线和Facebook的Winterfell仓库。
基准测试 |
通用 |
专用 (此仓库) |
---|---|---|
乘积和的大小2 |
18.04ns |
7.34 ns (🚀 2.46倍更快) |
逆 |
556.74ns |
283.87 ns (🚀 1.96倍更快) |
勒让德对于 QR |
1.12我们 |
596.15 ns (🚀 1.88倍更快) |
朴素乘积和2 |
15.41ns |
8.68 ns (🚀 1.78倍更快) |
反序列化压缩 |
8.82ns |
4.99 纳秒 (🚀 1.77倍更快) |
反序列化压缩未检查 |
8.80ns |
4.97 纳秒 (🚀 1.77倍更快) |
反序列化未压缩 |
8.86ns |
5.16 纳秒 (🚀 1.72倍更快) |
反序列化未压缩未检查 |
8.81ns |
5.15 纳秒 (🚀 1.71倍更快) |
平方根对于 QR |
4.43我们 |
2.77 微秒 (🚀 1.60倍更快) |
乘法 |
6.15ns |
4.03 纳秒 (🚀 1.53倍更快) |
从BigInt |
5.32ns |
4.30 纳秒 (✅ 1.24倍更快) |
序列化未压缩 |
4.72ns |
3.95 纳秒 (✅ 1.20倍更快) |
到BigInt |
4.72ns |
3.92 纳秒 (✅ 1.20倍更快) |
序列化压缩 |
4.72ns |
3.96 纳秒 (✅ 1.19倍更快) |
平方 |
5.60ns |
4.88 纳秒 (✅ 1.15倍更快) |
减法 |
4.09ns |
3.77 纳秒 (✅ 1.09倍更快) |
加法 |
4.11ns |
3.79 纳秒 (✅ 1.08倍更快) |
取反 |
4.21ns |
3.90 纳秒 (✅ 1.08倍更快) |
双精度 |
4.13ns |
4.32 纳秒 (❌ 1.04倍更慢) |
在M1 Max上进行了基准测试。Markdown由criterion-table生成。更详细的基准测试信息在这里
依赖
~3.5MB
~80K SLoC