1 个不稳定版本
0.1.0 | 2023年2月4日 |
---|
#7 in #fiat-shamir
在bevis中使用
14KB
310 行
Bevis;无需烦恼的Fiat-Shamir
bevis (be- + vis) 在斯堪的纳维亚语中意为“证据”,旨在通过消除Fiat-Shamir中重复和容易出错的实现细节,使在Rust中实现公共货币论证变得容易得多。Bevis旨在最小化依赖项(serde和rand_core)和运行时开销,主要由一系列类型、特性和过程宏组成。
以下是一个使用Bevis和curve25519-dalek实现Schnorr的简化示例。
use serde::{Serialize, Deserialize};
#[derive(Serialize, Deserialize)]
struct Comm {
v: RistrettoPoint,
}
#[derive(Serialize, Deserialize)]
struct Resp {
z: Scalar
}
#[derive(Serialize, Deserialize)]
struct Pf {
a: Msg<Comm>,
z: Resp,
}
fn verify<T: Transcript>(ts: &mut T, pk: &RistrettoPoint, pf: Pf) -> bool {
// add the public key
ts.append(pk);
// receive first round msg
let a = ts.recv(pf.a);
// get a challenge (transcript impl. RngCore and CryptoRng)
let c = Scalar::random(ts);
// check
c * pk + pf.a == pf.z *
}
依赖项
~1.5MB
~35K SLoC