#ecdsa #libsecp256k1 #elliptic-curve #bitcoin #crypto

无std secp256k1

Rust封装库,用于Pieter Wuille的libsecp256k1。实现了SECG椭圆曲线组secp256k1和相关的ECDSA和BIP 340签名。

85个发布版本

0.29.0 2024年4月2日
0.28.2 2024年1月31日
0.28.0 2023年10月9日
0.27.0 2023年3月17日
0.1.2 2015年5月4日

加密学类别中排名第7

Download history 156153/week @ 2024-05-01 164999/week @ 2024-05-08 173379/week @ 2024-05-15 175459/week @ 2024-05-22 187509/week @ 2024-05-29 164636/week @ 2024-06-05 170549/week @ 2024-06-12 163811/week @ 2024-06-19 159550/week @ 2024-06-26 159341/week @ 2024-07-03 163953/week @ 2024-07-10 180205/week @ 2024-07-17 177828/week @ 2024-07-24 185358/week @ 2024-07-31 198838/week @ 2024-08-07 185534/week @ 2024-08-14

每月下载量779,602
1,802个crate(350个直接使用)中使用

CC0许可证

5MB
43K SLoC

C 35K SLoC // 0.0% comments Rust 6.5K SLoC // 0.0% comments GNU Style Assembly 753 SLoC // 0.1% comments Shell 392 SLoC // 0.2% comments Automake 225 SLoC // 0.1% comments Python 74 SLoC // 0.2% comments M4 60 SLoC // 0.1% comments

Rust Secp256k1

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

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的说明

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

模糊测试

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

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

依赖项