10次发布
0.3.6 | 2024年1月12日 |
---|---|
0.3.5 | 2023年12月30日 |
0.2.0 | 2023年11月27日 |
0.1.2 | 2023年11月18日 |
#2030 in 密码学
118 每月下载
用于 sm9
5MB
5K SLoC
sm9_core
这是一个使用纯Rust编写的基于配对的密码学库。它使用来自《基于配对的密码学》和《ISO/IEC 11770》的Barreto-Naehrig (BN)曲线构造,为两个循环群提供G1和G2,具有R-配对
e: G1 × G2 → GT
安全警告
这个库,像其他实现这种构造的配对密码学库一样,不能抵御侧信道攻击。
用法
将sm9_core
crate添加到你的Cargo.toml
依赖中
[dependencies]
sm9_core = "0.3.6"
API
Fr
是Fr的一个元素G1
是BN曲线上的一点 E/Fq : y2 = x3 + bG2
是扭曲BN曲线上的一点 E'/Fq2 : y2 = x3 + b x iGt
是一个群元素(乘法表示)pairing()
是一个API,用于计算R-配对 G2 x G1 → GTfast_pairing()
是另一个API,用于计算R-配对 G2 x G1 → GT
示例
(完整示例请参见integration_test.rs
)
use hex_literal::hex;
use sm9_core::*;
let ks = Fr::from_slice(&hex!("000130E78459D78545CB54C587E02CF480CE0B66340F319F348A1D5B1F2DC5F4")).unwrap();
let r = Fr::from_slice(&hex!("00033C86 16B06704 813203DF D0096502 2ED15975 C662337A ED648835 DC4B1CBE")).unwrap();
let pub_s = G2::one() * ks;
let g = pairing(G1::one(), pub_s).pow(r);
println!(" {:#?}", g);
let r1 = g.to_slice();
let r0 = hex!(
"81377B8F DBC2839B 4FA2D0E0 F8AA6853 BBBE9E9C 4099608F 8612C607 8ACD7563"
"815AEBA2 17AD502D A0F48704 CC73CABB 3C06209B D87142E1 4CBD99E8 BCA1680F"
"30DADC5C D9E207AE E32209F6 C3CA3EC0 D800A1A4 2D33C731 53DED47C 70A39D2E"
"8EAF5D17 9A1836B3 59A9D1D9 BFC19F2E FCDB8293 28620962 BD3FDF15 F2567F58"
"A543D256 09AE9439 20679194 ED30328B B33FD156 60BDE485 C6B79A7B 32B01398"
"3F012DB0 4BA59FE8 8DB88932 1CC2373D 4C0C35E8 4F7AB1FF 33679BCA 575D6765"
"4F8624EB 435B838C CA77B2D0 347E65D5 E4696441 2A096F41 50D8C5ED E5440DDF"
"0656FCB6 63D24731 E8029218 8A2471B8 B68AA993 89926849 9D23C897 55A1A897"
"44643CEA D40F0965 F28E1CD2 895C3D11 8E4F65C9 A0E3E741 B6DD52C0 EE2D25F5"
"898D6084 8026B7EF B8FCC1B2 442ECF07 95F8A81C EE99A624 8F294C82 C90D26BD"
"6A814AAF 475F128A EF43A128 E37F8015 4AE6CB92 CAD7D150 1BAE30F7 50B3A9BD"
"1F96B08E 97997363 91131470 5BFB9A9D BB97F755 53EC90FB B2DDAE53 C8F68E42"
);
assert_eq!(r0, r1);
// test fast_pairing
let g1 = fast_pairing(G1::one(), pub_s).pow(r);
let r1 = g1.to_slice();
assert_eq!(r0, r1);
许可证
以下任一许可证下许可:
任选其一。
版权所有2023 John-Yu.
感谢
字段和组算法来自 zcash-bn 和 bls12_381,配对算法来自 GmSSL。快速配对算法来自 MIRACL,比配对()快23%。
感谢他们。
基准测试
(操作系统:windows11,CPU:i7-8700K 3.70GHz,详细信息请见 my_benchmark.rs
)
函数 | 时间 |
---|---|
配对 | 时间:[1.3884 ms 1.3970 ms 1.4092 ms] |
快速配对 | 时间:[1.0313 ms 1.0404 ms 1.0514 ms] |
预计算配对 | 时间:[874.28 µs 882.42 µs 893.08 µs] |
作者
贡献
除非你明确声明,否则根据Apache-2.0许可证定义,你提交的任何有意包含在工作中的贡献,应按上述方式双授权,不附加任何额外条款或条件。