2个版本
0.1.1 | 2021年3月25日 |
---|---|
0.1.0 | 2021年3月25日 |
#1844 in 加密
46KB
800 代码行
Ed448-Rust
这是根据 RFC8032 实现的埃德沃斯曲线数字签名算法 (EdDSA),仅支持ed448。
这是一个用于ed448签名/验证的EdDSA。
这是直接从RFC中的Python代码移植过来的,因此具有相同的警告
注意:此代码不打算用于生产。尽管它应该 对每个输入都产生正确的结果,但它运行缓慢,没有 尝试避免旁路攻击。
用法
use core::convert::TryFrom;
use rand_core::OsRng;
use ed448_rust::{PrivateKey, PublicKey};
fn main () {
// Generate a new random private key
let private_key = PrivateKey::new(&mut OsRng);
// Store the key
let pkey_stored = private_key.as_bytes();
// Load a stored key before using it, or generating the public key
let private_key = PrivateKey::try_from(pkey_stored).unwrap();
// Extract associated public key
let public_key = PublicKey::from(&private_key);
// Store the public key
let pubkey_stored = public_key.as_byte();
// Sign a message without context
let signature = private_key.sign(b"Message to sign", None).unwrap();
// Sign a message with a context
let signature_ctx = private_key.sign(b"Message to sign", Some(&[0x01, 0xA6])).unwrap();
// Sign a pre-hashed message without context
let signature_ph = private_key.sign_ph(b"Message to sign", None).unwrap();
// Verify the signature without context
assert!(public_key.verify(b"Message to sign", &signature, None).is_ok());
// Verify the signature with context
assert!(public_key.verify(b"Message to sign", &signature_ctx, Some(&[0x01, 0xA6])).is_ok());
// Verify the signature with the pre-hash and without context
assert!(public_key.verify_ph(b"Message to sign", &signature_ph, None).is_ok());
}
许可证
依赖项
~2MB
~22K SLoC