4 个版本
使用旧的 Rust 2015
0.1.4 | 2018 年 12 月 4 日 |
---|---|
0.1.3 | 2018 年 12 月 2 日 |
0.1.2 | 2018 年 11 月 8 日 |
0.1.1 | 2018 年 11 月 8 日 |
#13 in #one-time
25KB
277 代码行
winternitz
winternitz 是一个小的 crate,实现了一个抗量子单次签名方案,即 LDWM 的 LDWM_SHA256_M20_W8
变体(但不是 MTS),如 https://tools.ietf.org/html/draft-mcgrew-hash-sigs-02 中所述。
使用方法
每个私钥只能用来签名一条消息。使用单个密钥签名多条消息可能会泄露您的私钥数据。
extern crate rand;
extern crate winternitz;
use rand::{thread_rng, RngCore};
fn main() {
// Fill up the space of a new private key with entropy.
let mut privkey = [0; winternitz::PRIVKEY_SIZE];
thread_rng().fill_bytes(&mut privkey);
// Generate your public key from your private key.
let mut pubkey = [0; winternitz::PUBKEY_SIZE];
winternitz::derive_pubkey(&privkey, &mut pubkey).unwrap();
// Sign a message.
let msg = b"squeamish ossifrage";
let mut sig = [0; winternitz::SIG_SIZE];
winternitz::sign(&privkey, msg, &mut sig).unwrap();
// Verify a signature.
assert!(winternitz::verify(&pubkey, msg, &sig).unwrap());
}
依赖项
~4MB
~53K SLoC