18个不稳定版本 (8个破坏性)
0.9.0 | 2024年5月9日 |
---|---|
0.8.3 | 2024年3月15日 |
0.8.1 | 2024年2月21日 |
0.7.0 | 2023年10月23日 |
0.2.0 | 2021年8月24日 |
#257 in 加密学
9,349 每月下载量
用于 16 个crate (2直接)
1MB
15K SLoC
Winterfell STARK验证器
此crate包含一个STARK验证器的实现,该验证器可以验证由prover crate生成的证明。
用法
要验证一个证明,您可以使用verifier::verify()
函数,该函数具有以下签名
pub fn verify<AIR, HashFn, RandCoin>(
proof: Proof,
pub_inputs: AIR::PublicInputs,
acceptable_options: &AcceptableOptions,
) -> Result<(), VerifierError>
where
AIR: Air,
HashFn: ElementHasher<BaseField = AIR::BaseField>,
RandCoin: RandomCoin<BaseField = AIR::BaseField, Hasher = HashFn>,
其中
AIR
是实现了针对您计算Air
特质的类型(有关更多信息,请参阅air crate)。HashFn
是定义在证明生成过程中由prover使用的哈希函数的类型。RandCoin
是定义在证明生成过程中绘制随机值的方法的类型。proof
是prover生成的证明,证明计算针对某些公共输入执行正确。pub_inputs
是prover执行计算所使用的公共输入集。acceptable_options
定义了验证器可以接受的安全参数集。
例如,如果我们有一个实现了Air
特质的FibAir
结构,它描述了斐波那契数列的计算(有关具体实现,请参阅examples crate),我们可以验证prover正确地计算了序列的第1,048,576项,如下所示
let min_sec = AcceptableOptions::MinConjecturedSecurity(95);
let fib_result = BaseElement::new(226333832811148522147755045522163790995);
match verifier::verify::<FibAir, Blake3, DefaultRandomCoin<Blake3>>(proof, fib_result, &min_sec) {
Ok(_) => println!("Proof verified!"),
Err(err) => println!("Failed to verify proof: {}", err),
}
其中,226333832811148522147755045522163790995
是当序列在128位模数2128 - 45 * 240的128位字段中计算时,斐波那契数列的第1,048,576项。
性能
证明验证非常快,几乎与被验证计算复杂性无关。在绝大多数情况下,证明可以在现代中端笔记本电脑CPU上(使用单个核心)在3 - 5毫秒内验证。
然而有一个例外:如果一个计算需要大量的 sequence
断言(参见 air crate 以获取更多信息),验证时间可能会超过5毫秒。但是要使影响明显,断言的值数量需要达到数万。即使对于数十万的 sequence
断言,验证时间也不应超过50毫秒。
crate功能
此crate可以使用以下功能进行编译
std
- 默认启用,并依赖于Rust标准库。no_std
- 不依赖于Rust标准库,并支持编译到WebAssembly。
要使用 no_std
编译,通过 --no-default-features
标志禁用默认功能。
许可证
本项目受 MIT许可。
依赖关系
~3MB
~58K SLoC