1个不稳定版本
0.0.0 | 2024年6月25日 |
---|
#8 in #libsecp256k1
在11个crate中使用(通过koibumi-core)
305KB
5.5K SLoC
koibumi-secp256k1
crate是从secp256k1
crate分叉而来,重新引入了ecdh::SharedSecret::new_with_hash()
方法。
rust-secp256k1
是C库libsecp256k1的包装,该库使用SECG曲线secp256k1实现了各种加密函数。
此库
- 公开了所有
libsecp256k1
函数的安全Rust绑定 - 实现密钥生成
- 通过RFC6979实现确定性随机数生成
- 实现了许多单元测试,增加了
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会设置,但我们更改了它,因为没有方法可以覆盖它。
依赖项
~5.5MB
~52K SLoC