2 个版本

0.2.2 2024 年 6 月 17 日
0.2.0 2024 年 6 月 3 日

#8#arpa


7 个 crate(6 个直接) 中使用

MIT/Apache

115KB
2.5K SLoC

BLS 阈值加密签名

此库提供了(盲)阈值密码学的原语。目前支持的曲线是 BN254(alt_bn128) 和 BLS12-381。

正在进行中:现在不要期待任何稳定的 API

群功能

src/group.rs 包含了与素域标量和椭圆曲线上点一起工作的泛型 trait 的定义。以下 Element trait 允许获取具有拉格朗日插值的泛型多项式实现,适用于标量和点。

pub trait Element<RHS = Self>: Clone + fmt::Display + fmt::Debug + Eq {
    /// new MUST return the zero element of the group.
    fn new() -> Self;
    fn one() -> Self;
    fn add(&mut self, s2: &Self);
    fn mul(&mut self, mul: &RHS);
    fn pick<R: RngCore>(&mut self, rng: &mut R);
    fn zero() -> Self {
        Self::new()
    }
}

src/bls12381.rs 中实现了这些 trait 的 BLS12-381 曲线。

多项式功能

src/poly.rs 包含了适合用于秘密共享方案和 dkg 协议的多项式实现。它可以评估份额并插值私人和公共份额到它们对应的多项式。

以下(来自 测试)显示了如何插值一组私份额

use crate::bls12381::Scalar as Sc;
fn interpolation() {
    let degree = 4;
    let threshold = degree + 1;
    let poly = Poly::<Sc, Sc>::new(degree);
    let shares = (0..threshold)
        .map(|i| poly.eval(i as u64))
        .collect::<Vec<Share<Sc>>>();
    let recovered = Poly::<Sc, Sc>::recover(threshold as usize, shares);
    let expected = poly.c[0];
    let computed = recovered.c[0];
    assert_eq!(expected, computed);
}

曲线实现

目前有两个曲线可用,分别是 BLS12 381BN254。默认情况下,它们都启用,但您可以使用 bls12_381bn254 功能选择您想要使用的。

当将依赖项添加到您的 Cargo.toml 文件时,您可以像这样使用它们。

# Only bls12_381
threshold = { version = "0.1", default-features = false, features = ["bls12_381"] }
# Only bn254
threshold = { version = "0.1", default-features = false, features = ["bn254"] }
# Both
threshold = { version = "0.1" }

依赖项

~13–25MB
~378K SLoC