2 个版本
0.2.2 | 2024 年 6 月 17 日 |
---|---|
0.2.0 | 2024 年 6 月 3 日 |
#8 在 #arpa
在 7 个 crate(6 个直接) 中使用
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 381
和 BN254
。默认情况下,它们都启用,但您可以使用 bls12_381
和 bn254
功能选择您想要使用的。
当将依赖项添加到您的 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