aszepieniec / falcon-rust

A rust implementation of the Falcon post-quantum signature scheme
MIT License
9 stars 3 forks source link
falcon post-quantum-cryptography

Falcon-Rust

Unofficial rust implementation of the Falcon post-quantum digital signature scheme.

Falcon was submitted to the NIST PQC standardization project and was selected for standardization. The final standard is still outstanding. We do anticipate slight changes between the standard and the submission, and these changes might break compatibility.

Falcon comes in two variants. Falcon512 claims at least 108 bits of security, and Falcon1024 claims at least 252 bits of security, both against quantum computers.

This implementation adheres to the specification. It was originally written following the the official python implementation, but has since deviated.

Example

let mut rng = thread_rng();
let mut msg : [u8; 5] = rng.gen();
let (sk, pk) = falcon512::keygen(rng.gen());
let sig = falcon512::sign(&msg, &sk);
assert!(falcon512::verify(&msg, &sig, &pk));

Performance

Performance is still inferior to the optimized C code accessible from rust via the foreign function interface "pqcrypto-falcon". These measurements were taken on my Intel(R) Core(TM) i7-10750H CPU @ 2.60GHz (which supports AVX2). You can make your own by running cargo bench.

Keygen Sign Verify
falcon-rust 512 419.18 ms 692.68 µs 41.668 µs
falcon-rust 1024 2.4038 s 1.3891 ms 86.385 µs
pqcrypto-falcon 512 7.5356 ms 253.44 µs 48.065 µs
pqcrypto-falcon 1024 21.454 ms 510.43 µs 94.669 µs

Features

To-do's

Contributing

Contributions are welcome! If accepted, contributions will be released under the same license.