85个发布版本
0.29.0 | 2024年4月2日 |
---|---|
0.28.2 | 2024年1月31日 |
0.28.0 |
|
0.27.0 | 2023年3月17日 |
0.1.2 | 2015年5月4日 |
在加密学类别中排名第7
每月下载量779,602次
在1,802个crate(350个直接使用)中使用
5MB
43K SLoC
rust-secp256k1
是一个围绕libsecp256k1的封装库,libsecp256k1是一个使用SECG曲线secp256k1实现各种加密函数的C库。
本库
- 提供了对所有
libsecp256k1
函数的类型安全Rust绑定 - 实现密钥生成
- 通过RFC6979实现确定性nonce生成
- 实现了许多单元测试,增加了在
libsecp256k1
中已有的测试 - 为了效率和用于独立实现而不会进行任何分配(除了单元测试)
贡献
欢迎对该库做出贡献。以下是一些指南
- 任何破坏性的更改都必须在CHANGELOG.md中有相应的条目
- 请不要添加新的依赖项。
- 除了散列函数外,不应在Rust中实现加密。加密贡献应向上游libsecp256k1提交。
- 该库应始终与Rust 1.56.1的任何功能组合编译。
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会设置它,但我们更改了它,因为没有方法可以覆盖它。