#bls12-381 #pairing #relic #api-bindings

无std bls12_381_relic

由relic实现的BLS12-381绑定

2个版本

0.1.1 2024年6月18日
0.1.0 2024年6月14日

1675密码学

每月48 次下载

Apache-2.0 OR MIT

4MB
146K SLoC

C 99K SLoC // 0.2% comments Bitbake 23K SLoC // 0.0% comments GNU Style Assembly 21K SLoC // 0.1% comments Rust 3K SLoC // 0.0% comments Shell 289 SLoC // 0.1% comments

由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