2个不稳定版本

0.8.0 2021年1月14日
0.7.0 2019年12月6日
0.6.2 2019年4月3日
0.6.1 2019年3月29日
0.2.0 2017年7月3日

密码学类别中排名第2302

Download history 1/week @ 2023-12-17 3/week @ 2024-01-07 1/week @ 2024-01-14 8/week @ 2024-01-21 13/week @ 2024-02-18 22/week @ 2024-02-25 15/week @ 2024-03-03 23/week @ 2024-03-10 11/week @ 2024-03-17 17/week @ 2024-03-24 104/week @ 2024-03-31

每月下载量157
4个crate中使用(直接使用2个)

CC0许可

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.rsmain.rs 文件中,以启用 Rust 的夜间仅用基准测试功能。

警告

此实现尚未准备好用于生产使用

虽然我预计 1.0 版本将与当前代码基本相同,但目前对证明没有稳定性保证,因此它们尚未部署。

依赖项

~2.6–3.5MB
~79K SLoC