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

MIT 许可证

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