#libsecp256k1 #ecdsa #bitcoin #secp256k1 #cryptography #crypto

无std sapio-secp256k1

Rust封装库,用于Pieter Wuille的libsecp256k1。实现了SECG椭圆曲线组secp256k1的ECDSA和BIP 340签名以及相关工具。Sapio的扩展版本。

5个版本 (重大更改)

0.28.1 2024年1月16日
0.22.4 2022年5月22日
0.21.6 2022年2月21日
0.20.1 2021年3月22日
0.5.3 2022年5月22日

#800 in 神奇豆

Download history 638/week @ 2024-03-11 497/week @ 2024-03-18 355/week @ 2024-03-25 438/week @ 2024-04-01 408/week @ 2024-04-08 99/week @ 2024-04-15 66/week @ 2024-04-22 70/week @ 2024-04-29 55/week @ 2024-05-06 74/week @ 2024-05-13 69/week @ 2024-05-20 100/week @ 2024-05-27 49/week @ 2024-06-03 86/week @ 2024-06-10 85/week @ 2024-06-17 81/week @ 2024-06-24

每月下载量:308
17 个crate中使用(通过sapio-bitcoin

CC0 协议

305KB
5.5K SLoC

Rust Secp256k1

Crate Info CC0 1.0 Universal Licensed CI Status API Docs Rustc Version 1.48.0+

rust-secp256k1libsecp256k1 的封装,一个C库,实现了使用 SECG 曲线 secp256k1 的各种加密功能。

此库

  • 公开了所有 libsecp256k1 函数的类型安全Rust绑定
  • 实现了密钥生成
  • 通过RFC6979实现了确定性nonce生成
  • 实现了许多单元测试,增加了 libsecp256k1 中已有的单元测试
  • 没有分配(除了单元测试)以提高效率和在独立实现中的使用

贡献

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

  • 任何重大更改都必须在 CHANGELOG.md 中有相应的条目
  • 请不要添加新的依赖关系。
  • 请勿在Rust中实现加密,除非是散列函数。加密贡献应向上游提交到libsecp256k1。
  • 此库应始终与 Rust 1.48.0 上的任何功能组合编译。

Githooks

为了帮助开发者在大规模集成(CI)之前捕获错误,我们提供了一些githooks。如果您尚未在本地配置githooks,可以通过在仓库根目录中运行以下命令使用此仓库中的githooks:

git config --local core.hooksPath githooks/

或者,您可以在 .git/hooks 目录中添加指向我们提供的任何 githooks 的符号链接。

基准测试

我们使用一个自定义的 Rust 编译器配置来条件性地保护基准代码。要运行基准测试,请使用: RUSTFLAGS='--cfg=bench' cargo +nightly bench --features=recovery

关于 non_secure_erase 的说明

此软件包的密钥类型(SecretKeyKeypairSharedSecretScalarDisplaySecret)有一个名为 non_secure_erase 的方法,该方法 尝试 覆写包含的密钥。此方法提供以帮助其他库构建安全的密钥擦除。然而,此库不对使用 non_secure_erase 的安全性做出任何保证。特别是,编译器没有密钥的概念,并且在大多数情况下可以任意移动或复制值。有关更多信息,请参阅 zeroize 文档。

模糊测试

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

请注意,cargo hfuzz 不会 自动设置此配置标志。在 0.27.0 和更早版本中,我们使用了 --cfg=fuzzing,honggfuzz 会设置它,但我们更改了这一点,因为没有方法可以覆盖它。

依赖关系

~5.5MB
~53K SLoC