#libsecp256k1 #ecdsa #bitcoin #secp256k1 #crypto

no-std cashweb-secp256k1

Rust 对 Pieter Wuille 的 libsecp256k1 库的绑定。实现了 SECG 椭圆曲线组 secp256k1 的 ECDSA 和相关实用工具。

3 个不稳定版本

使用旧的 Rust 2015

0.20.0 2020 年 12 月 31 日
0.19.1 2021 年 1 月 2 日
0.19.0 2020 年 12 月 31 日
0.17.3 2020 年 7 月 1 日
0.17.2 2020 年 7 月 1 日

#libsecp256k1 中排名 6

Download history 24/week @ 2024-03-15 23/week @ 2024-03-22 39/week @ 2024-03-29 26/week @ 2024-04-05 22/week @ 2024-04-12 22/week @ 2024-04-19 19/week @ 2024-04-26 17/week @ 2024-05-03 18/week @ 2024-05-10 20/week @ 2024-05-17 15/week @ 2024-05-24 13/week @ 2024-05-31 14/week @ 2024-06-07 19/week @ 2024-06-14 22/week @ 2024-06-21 9/week @ 2024-06-28

每月下载量 66
用于 7 个crate(6 个直接使用)

使用 CC0 许可证

160KB
3.5K SLoC

Build Status

完整文档

cashweb-rust-secp256k1

cashweb-secp256k1 是围绕 Pieter Wuille 的 libsecp256k1 C 库的一个包装,该库用于使用 SECG 曲线 secp256k1 生成 ECDSA 签名。此库

  • 公开了所有 libsecp256k1 函数的类型安全 Rust 绑定
  • 实现密钥生成
  • 通过 RFC6979 实现确定性随机数生成
  • 实现许多单元测试,增加了 libsecp256k1 中已有的单元测试
  • 为了效率和用于独立实现,不进行任何分配(除了单元测试)

贡献

欢迎对这个库的贡献。以下是一些指南

  • 任何重大更改都必须在 CHANGELOG.md 中伴随一条记录
  • 请不要添加新的依赖项。
  • 请勿在 Rust 中实现任何加密,除可能为哈希函数外。加密贡献应直接向上游 libsecp256k1 指导。
  • 此库应始终在 Rust 1.29 上编译。

关于 Rust 1.29 支持的说明

构建依赖项 cc 可能需要 Rust 编译器的更新版本。为确保使用 Rust 1.29.0 编译,请使用以下命令将版本锁定在 Cargo.lock 中:cargo update -p cc --precise 1.0.41。如果您在一个库中使用 secp256k1,为了确保 CI 中可以编译,您需要首先生成一个 lockfile。例如,对于 Travis CI

before_script:
  - if [ "$TRAVIS_RUST_VERSION" == "1.29.0" ]; then
    cargo generate-lockfile --verbose && cargo update -p cc --precise "1.0.41" --verbose;
    fi

模糊测试

如果您想对该库进行模糊测试,或者对其进行依赖的任何库进行模糊测试,您可能需要禁用实际加密功能,因为模糊测试工具无法伪造签名,因此不会测试许多有趣的代码路径。为了使用一个简单损坏但模糊测试工具可访问的签名方案,请在您的 RUSTFLAGS 变量中使用 --cfg=rust_secp_fuzz 进行编译。

依赖项

~0.5–1.2MB
~21K SLoC