2个不稳定版本
0.8.0 | 2021年1月14日 |
---|---|
0.7.0 | 2019年12月6日 |
0.6.2 |
|
0.6.1 |
|
0.2.0 |
|
在密码学类别中排名第2302
每月下载量157次
在4个crate中使用(直接使用2个)
65KB
971 行
zkp:Schnorr证明工具包
此crate包含一个使用ristretto255群实例化的Schnorr风格零知识证明工具包。
它提供了两个层次的API
-
一个基于宏
define_proof
的高层次、声明式API,该宏提供了一种嵌入式领域特定语言(DSL),用于在Camenisch-Stadler-like记法中指定证明语句define_proof! { vrf_proof, // Name of the module for generated implementation "VRF", // Label for the proof statement (x), // Secret variables (A, G, H), // Public variables unique to each proof (B) : // Public variables common between proofs A = (x * B), // Statements to prove G = (x * H) }
这扩展为一个包含证明、验证和批量验证实现的模块。证明使用恒定时间实现,证明通过Serde实现了(内存安全的)序列化和反序列化。
-
一个受Bellman启发的低层次、命令式API,它为Schnorr风格语句提供了一种约束系统。这允许在运行时可编程地构建证明语句。高层次宏
define_proof
扩展为对低层次API的调用。低层次API包含在toolbox
模块中。
示例
如何在库的tests
目录中使用API的示例。
目前,示例包括
-
来自CMZ'13的“具有10个隐藏属性的匿名凭证展示”证明的规范。根据后端选择,生成的实现比该论文中报告的基准数值快20到40倍。
-
使用自动生成实现的基于转写的签名和VRF构造。这包括使用Merlin博客文章中描述的在线交互式组合提供链式签名的示例。
-
使用低层次约束系统API的示例。
使用和功能
要启用define_proof
宏,按如下方式导入crate
#[macro_use]
extern crate zkp;
夜间功能
nightly
功能启用夜间特定的功能。它需要构建文档。
后端选择
zkp
提供了以下pass-through功能来选择curve25519-dalek
后端
u32_backend
u64_backend
simd_backend
转写调试
debug-transcript
功能用于开发和测试,并打印证明转写中输入的数据日志。
自动生成基准
宏 define_proof
用于为生成的证明语句构建基准测试,但由于这些语句是在客户端 crate 中生成的(宏展开发生的地方),因此需要额外一步才能启用。
要在您的 crate 中启用生成的基准测试,请执行以下操作::
- 将
bench
功能添加到您的 crate 的Cargo.toml
文件中; - 将
#[cfg_attr(feature = "bench", feature(test))]
添加到您的 crate 的lib.rs
或main.rs
文件中,以启用 Rust 的夜间仅用基准测试功能。
警告
此实现尚未准备好用于生产使用
虽然我预计 1.0 版本将与当前代码基本相同,但目前对证明没有稳定性保证,因此它们尚未部署。
依赖项
~2.6–3.5MB
~79K SLoC