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

无需std koibumi-secp256k1

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

1个不稳定版本

0.0.0 2024年6月25日

#8 in #libsecp256k1


11个crate中使用(通过koibumi-core

CC0许可证

305KB
5.5K SLoC

Rust Secp256k1

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

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

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

模糊测试

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

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

依赖项

~5.5MB
~52K SLoC