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 |
|
#800 in 神奇豆
每月下载量:308
在 17 个crate中使用(通过sapio-bitcoin)
305KB
5.5K SLoC
rust-secp256k1
是 libsecp256k1 的封装,一个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
的说明
此软件包的密钥类型(SecretKey
、Keypair
、SharedSecret
、Scalar
和 DisplaySecret
)有一个名为 non_secure_erase
的方法,该方法 尝试 覆写包含的密钥。此方法提供以帮助其他库构建安全的密钥擦除。然而,此库不对使用 non_secure_erase
的安全性做出任何保证。特别是,编译器没有密钥的概念,并且在大多数情况下可以任意移动或复制值。有关更多信息,请参阅 zeroize
文档。
模糊测试
如果您想对此库或依赖于它的任何库进行模糊测试,您可能希望禁用实际加密,因为模糊器无法伪造签名,因此不会测试许多有趣的代码路径。要使用一个简单但模糊器可访问的签名方案,请在您的 RUSTFLAGS
变量中使用 --cfg=secp256k1_fuzz
进行编译。
请注意,cargo hfuzz
不会 自动设置此配置标志。在 0.27.0 和更早版本中,我们使用了 --cfg=fuzzing
,honggfuzz 会设置它,但我们更改了这一点,因为没有方法可以覆盖它。
依赖关系
~5.5MB
~53K SLoC