#多项式 #承诺 #KZG #证明 #验证 #向量 #方案

kzg-commitment

一个简单的库,用于执行 KZG 多项式承诺方案

4 个版本

0.1.3 2024年7月15日
0.1.2 2024年7月13日
0.1.1 2024年7月13日
0.1.0 2024年7月10日

#473算法

Download history 403/week @ 2024-07-10 36/week @ 2024-07-17 13/week @ 2024-07-24

每月452 次下载
用于 verkle-tree

MIT 许可证

14KB
224

KZG 承诺库

此仓库包含 KZG 承诺的 Rust 实现,KZG 承诺是用于多项式承诺的加密原语。该库提供生成、提交和验证多项式承诺的功能。

关于实现 KZG 承诺方案 的博客文章。您可以在此找到此代码的 Python 版本 此处

功能

  • 向量到多项式:将元素向量转换为多项式形式。
  • 多项式承诺:对多项式进行承诺
  • 证明生成:从向量中生成给定点的证明。
  • 证明验证:验证生成的证明的正确性。

安装

要使用此库,请将以下内容添加到您的 Cargo.toml

kzg_commitment = "0.1.0"

使用

以下是如何使用此库的基本示例


use kzg_commitment::KZGCommitment;
use ark_bls12_381::{Fr as F};

fn main() {
    let kzg = KZGCommitment::new(50);
    let vector = vec![F::from(120), F::from(-15), F::from(60), F::from(80)];
    let polynomial = KZGCommitment::vector_to_polynomial(&vector);
    let commitment = kzg.commit_polynomial(&polynomial);
    let points = vec![(F::from(0), F::from(120)), (F::from(1), F::from(-15))];
    let proof = kzg.generate_proof(&polynomial, &random_points).unwrap();
    let verification = kzg.verify_proof(&commitment, &random_points, &proof);

    assert!(verification, "Verification failed");
}

测试

要运行测试,请使用以下命令

cargo test

示例测试

  • test_vec_to_poly:测试将向量转换为多项式并在随机点上评估它。
  • test_verify_proof_valid:测试生成和验证有效证明。
  • test_invalid_proof_generation:测试生成无效证明并确保返回正确的错误。
  • test_invalid_proof_verification:测试验证无效证明并确保返回正确的错误。

待办事项

  • 使用 BigInt 而不是 i32 作为向量
  • 添加对预计算 powers_of_tau (trusted_setup) 的支持
  • 添加更多无效证明验证测试
  • 添加基准测试

贡献

欢迎贡献!请打开一个问题或提交一个拉取请求。

许可证

本项目采用 MIT 许可证。有关详细信息,请参阅 LICENSE 文件。

鸣谢

KZG 承诺 - 更多关于 KZG 承诺的信息。

本项目受 Dankrad Feist 的博客文章《KZG 承诺》的启发。

依赖关系

~5.5MB
~99K SLoC