2个版本

0.1.1 2023年2月4日
0.1.0 2023年1月28日

#1455 in 编码


用于 bevis-strobe

MIT 许可证

30KB
755

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 *
}

依赖关系

~145–395KB