8 releases
0.3.5 | Apr 21, 2023 |
---|---|
0.3.4 | Apr 21, 2023 |
0.2.0 | Apr 19, 2023 |
0.1.0 | Jan 31, 2022 |
#458 in Cryptography
29 downloads per month
29KB
695 lines
blake3-lamport-signatures
Lamport, as well as Lamport-Merkle, signatures implemented using the blake3
cryptographic hash function. This is an incredibly inefficient digital
signature protocol and shouldn't be used under almost all circumstances, its
main benefit being its simplicity and flexibility.
Lamport keypairs should only be used to sign one message, while you can specify a number of messages to support in a Lamport-Merkle keypair.
use blake3_lamport_signatures::lamport;
let private_key = lamport::PrivateKey::generate()?;
let public_key = private_key.public_key();
let message = b"Yeah, I said it";
let signature = private_key.sign(message);
assert!(public_key.verify(message, &signature));
use blake3_lamport_signatures::merkle;
// generate a Merkle-Lamport private key capable of signing 100 messages
let mut private_key = merkle::PrivateKey::generate(100);
let public_key = private_key.public_key();
let message = b"And I'll say it again!";
let signature = private_key.sign(message);
assert!(public_key.verify(message, &signature);
Communication
There is a natural two-party verified communication protocol associated with
lamport signatures. Alice and Bob start with preshared PublicKey
s, and each
time they send a message, they include the PublicKey
for the next message.
Acknowledgements
Leslie Lamport is a really cool dude.
Dependencies
~3.5MB
~79K SLoC