2个版本
0.1.1 | 2024年6月18日 |
---|---|
0.1.0 | 2024年6月14日 |
1675 在 密码学
每月48 次下载
4MB
146K SLoC
由relic提供的友好配对BLS12-381曲线
relic 是一个库,实现了友好配对的曲线(以及其他许多功能)。这个crate将relic提供的算法与由pairing定义的特性行为整合。
安全说明
这个crate没有接受安全审计。使用风险自负。
许可证
这个crate是在Apache-2.0或MIT许可证下发布的。
lib.rs
:
BLS12-381来自relic
这个crate为relic提供的BLS12-381提供[pairing]-兼容的包装器。
use bls12_381_relic::{G1Projective, G2Projective, Scalar, pair};
use bls12_381_relic::{group::Group, ff::Field};
let base = G1Projective::hash_to_curve(b"my message", b"public parameters");
let secret = Scalar::random(rand::thread_rng());
let pk = G2Projective::generator() * secret;
let sigma = base * secret;
assert_eq!(pair(sigma, G2Projective::generator()), pair(base, pk));
目标是尽可能与由[pairing]定义并由bls12_381 crate实现的接口兼容。然而,有些概念在relic中没有映射。这些差异的例子包括
- [G1Affine]和[G2Affine]是它们项目对应物的瘦包装,因为relic没有为仿射表示及其关联函数提供单独的类型。
- 对于多miller-loops,没有G2中的“准备”元素变体。
附加功能
这个crate提供了多乘积和,对于群元素和标量的对来说,比单独评估标量乘法和加法更快。
use bls12_381_relic::{G1Projective, Scalar};
use bls12_381_relic::{group::Group, ff::Field};
use core::iter::Sum;
let mut rng = rand::thread_rng();
let v1 = G1Projective::random(&mut rng);
let v2 = G1Projective::random(&mut rng);
let v3 = G1Projective::random(&mut rng);
let s1 = Scalar::random(&mut rng);
let s2 = Scalar::random(&mut rng);
let s3 = Scalar::random(&mut rng);
assert_eq!(
G1Projective::sum([(v1, s1), (v2, s2), (v3, s3)].iter()),
v1 * s1 + v2 * s2 + v3 * s3
);
这个加速仅在启用了alloc
功能时才可用。
符号表示法
[pairing]对所有群使用加法表示法,这个crate遵循相同的约定。这在一些函数的名称中尤为明显。不是谈论配对乘积,而是将相同的概念称为配对和或配对和。
依赖关系
~0.7–3MB
~64K SLoC