3个稳定版本

1.1.1 2024年5月18日
1.1.0 2024年5月17日
1.0.0 2024年5月16日

#822 in 密码学

Download history 220/week @ 2024-05-11 252/week @ 2024-05-18 4/week @ 2024-05-25 4/week @ 2024-06-01 1/week @ 2024-06-08 54/week @ 2024-07-27

54 每月下载次数
用于 pg_ecdsa_verify

MIT 协议

25KB
404

ecdsa_verify:ECDSA签名验证的Rust crate

CI Crates.io

ecdsa_verify是一个纯Rust crate,用于验证ECDSA(椭圆曲线数字签名算法)签名。这个crate提供了处理椭圆曲线操作和验证签名与给定消息哈希和公钥的功能。

为什么只进行验证?

通过限制范围到验证,扩展保持简单且易于实现和审计。由于验证只涉及公钥而没有私钥,它本质上对旁路攻击具有安全性,并且比签名生成算法更容易正确实现。

典型用例是客户端需要与服务器进行身份验证,其中服务器上只存储公钥。在这种情况下,服务器端只需要签名验证算法。

这就是为什么ecdsa_verifycrate只实现了ECDSA签名验证算法。

功能

  • 支持secp256k1secp256r1椭圆曲线。
  • 在雅可比坐标系中实现椭圆曲线操作。
  • 提供验证ECDSA签名的方法。

安装

将以下内容添加到您的Cargo.toml

[dependencies]
ecdsa_verify = "1.1"

使用方法

use ecdsa_verify::{verify, Point3D, EcdsaSignature, secp256r1};
use num_bigint::BigInt;
use num_traits::Zero;

fn main() {
    let message_hash = hex::decode("48c08394455a5007945a9025c58be18f1795db8a6f8c12e70a00c1cdd6d3df78").unwrap();
    let sig = EcdsaSignature {
        r: BigInt::parse_bytes(b"7679932563960414347091205306595575529033945270189659289643076129390605281494", 10).unwrap(),
        s: BigInt::parse_bytes(b"47844299635965077418200610260443789525430653377570372618360888620298576429143", 10).unwrap(),
    };
    let public_key = Point3D {
        x: BigInt::parse_bytes(b"57742645121064378973436687487225580113493928349340781038880342836084265852815", 10).unwrap(),
        y: BigInt::parse_bytes(b"99327750397910171089097863507426920114029443958399733106031194020330646322282", 10).unwrap(),
        z: BigInt::zero(),
    };
    let curve = secp256r1();
    let is_valid = verify(&message_hash, &sig, &public_key, &curve);
    println!("Signature valid: {}", is_valid);
}

基准测试

要基准测试扩展,请确保您正在使用Rust Nightly工具链,然后使用以下命令

要运行基准测试,请执行

cargo bench

基准测试结果

基准测试在Intel Core i9-14900K上运行。结果如下

$ cargo bench

     Running benches/ecdsa_verify.rs (target/release/deps/ecdsa_verify-f2c7ac91fb3e2e9c)

test bench_verify ... bench:     864,913 ns/iter (+/- 13,821)

许可证

本项目受MIT许可证许可。有关详细信息,请参阅LICENSE文件。

致谢

贡献

欢迎提交错误修复、优化和简化,但不再添加新功能。请打开一个问题或提交一个拉取请求。

依赖关系

~1MB
~21K SLoC