3个稳定版本
1.1.1 | 2024年5月18日 |
---|---|
1.1.0 | 2024年5月17日 |
1.0.0 | 2024年5月16日 |
#822 in 密码学
54 每月下载次数
用于 pg_ecdsa_verify
25KB
404 行
ecdsa_verify
:ECDSA签名验证的Rust crate
ecdsa_verify
是一个纯Rust crate,用于验证ECDSA(椭圆曲线数字签名算法)签名。这个crate提供了处理椭圆曲线操作和验证签名与给定消息哈希和公钥的功能。
为什么只进行验证?
通过限制范围到验证,扩展保持简单且易于实现和审计。由于验证只涉及公钥而没有私钥,它本质上对旁路攻击具有安全性,并且比签名生成算法更容易正确实现。
典型用例是客户端需要与服务器进行身份验证,其中服务器上只存储公钥。在这种情况下,服务器端只需要签名验证算法。
这就是为什么ecdsa_verify
crate只实现了ECDSA签名验证算法。
功能
- 支持
secp256k1
和secp256r1
椭圆曲线。 - 在雅可比坐标系中实现椭圆曲线操作。
- 提供验证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文件。
致谢
- 基于Star Bank的starkbank-ecdsa Python库的第2.2.0版本。
贡献
欢迎提交错误修复、优化和简化,但不再添加新功能。请打开一个问题或提交一个拉取请求。
依赖关系
~1MB
~21K SLoC