#curve #address #kit #stealth #addresses #generate #elliptic-curve

stealth_address_kit

Stealth Address Kit:用于生成匿名地址的 Rust 库

5 个不稳定版本

0.3.1 2024年6月28日
0.3.0 2024年6月28日
0.2.0 2024年6月18日
0.2.0-beta2024年5月27日
0.1.0 2024年5月21日

#3#匿名

每月下载量 41

MIT 许可证

47KB
814

Stealth Address Kit

Stealth Address Kit 利用 arkworks-rs 套件库提供了匿名地址的稳健实现。

支持的曲线

目前支持以下曲线

  1. ark_bn254
  2. ark_bls_12_381
  3. ark_bls_12_377
  4. secp256k1
  5. secp256r1
  6. pallas
  7. vesta
  8. bw6_761
  9. baby_jub_jub

性能基准

请参阅性能基准,比较支持曲线之间的性能。

使用示例

以下是一个使用 Stealth Address Kit 与 ark_bn254 曲线示例

use stealth_address_kit::StealthAddressOnCurve;
use ark_bn254::Bn254;

fn main() {
    let (spending_key, spending_public_key) = Bn254::random_keypair();
    let (viewing_key, viewing_public_key) = Bn254::random_keypair();

    // Generate ephemeral keypair
    let (ephemeral_private_key, ephemeral_public_key) = Bn254::random_keypair();

    let (stealth_address, view_tag) = Bn254::generate_stealth_address(viewing_public_key, spending_public_key, ephemeral_private_key);

    let stealth_private_key_opt = Bn254::generate_stealth_private_key(ephemeral_public_key, viewing_key, spending_key, view_tag);

    if stealth_private_key_opt.is_none() {
        panic!("View tags did not match");
    }

    let derived_stealth_address = Bn254::derive_public_key(&stealth_private_key_opt.unwrap());
    assert_eq!(derived_stealth_address, stealth_address);
}

添加新的曲线

要添加对新的曲线的支持,请按照以下步骤操作

  1. 将曲线添加到 Cargo.toml 文件中作为功能。
  2. src 目录中创建一个新的模块,模块名称为曲线名称,后缀为 _impl.rs
  3. 为该曲线实现 StealthAddressOnCurve 特性。
  4. 定义宏 define_curve_ffi
  5. 将曲线添加到 lib.rs 文件中的 mod 声明中,并在需要时重新导出。
  6. 更新 README 以包含新的曲线。
  7. 将曲线添加到夜间版本的工作流程中。
  8. 将曲线添加到基准测试中。

构建和测试

构建

要构建项目,请使用以下命令

cargo build --release --features <bn254/bls12_381/bls12_377/secp256k1/secp256r1/etc>

测试

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

cargo test --release --features <bn254/bls12_381/bls12_377/secp256k1/secp256r1/etc>

性能基准

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

make bench

这将运行所有支持曲线的基准测试,并将结果输出到 benchmarks 目录。

FFI API

公开的 FFI API 支持所有曲线,以曲线名称为前缀。在构建库时请确保启用了正确的功能。

预编译库

预编译库在夜间版本中可用。

致谢

本项目灵感来源于 ERC-5564 EIP 和 Nerolation 的 原型设计

依赖项

~5.5MB
~101K SLoC