Expand description
§falcon — Post-Quantum Digital Signatures
Native Rust implementation of the Falcon lattice-based signature scheme, ported from the C reference by Thomas Pornin. Falcon is selected by NIST for post-quantum standardization.
§Quick Start
use falcon::safe_api::{FalconKeyPair, FalconSignature};
// Generate a Falcon-512 key pair (logn=9)
let kp = FalconKeyPair::generate(9).unwrap();
// Sign a message
let sig = kp.sign(b"Hello, post-quantum world!").unwrap();
// Verify the signature
FalconSignature::verify(sig.to_bytes(), kp.public_key(), b"Hello, post-quantum world!").unwrap();§Key Serialization
Keys can be exported to bytes for storage and reconstructed:
let kp = FalconKeyPair::generate(9).unwrap();
// Export
let private_key = kp.private_key().to_vec(); // 1281 bytes
let public_key = kp.public_key().to_vec(); // 897 bytes
// Import from both keys
let restored = FalconKeyPair::from_keys(&private_key, &public_key).unwrap();
// Or import from private key only (recomputes public key)
let restored2 = FalconKeyPair::from_private_key(&private_key).unwrap();
assert_eq!(public_key, restored2.public_key());§Signature Serialization
let kp = FalconKeyPair::generate(9).unwrap();
let sig = kp.sign(b"msg").unwrap();
// Export signature bytes (for storage, transmission, etc.)
let sig_bytes: Vec<u8> = sig.into_bytes();
// Import signature bytes
let sig2 = FalconSignature::from_bytes(sig_bytes);§Security Levels
logn | Variant | NIST Level | Private Key | Public Key | Signature |
|---|---|---|---|---|---|
| 9 | Falcon-512 | I | 1281 B | 897 B | ~666 B |
| 10 | Falcon-1024 | V | 2305 B | 1793 B | ~1280 B |
§Architecture
safe_api— High-level SDK: key generation, signing, verification, serialization. Start here.falcon— Low-level C-equivalent API for advanced use cases (streamed signing, expanded keys, custom signature formats).- Internal modules:
shake,fpr,fft,codec,rng,keygen,sign,vrfy,common— faithful ports of the C reference.
§Features
std(default) — Enables OS-level entropy via/dev/urandom.- Without
std— Compiles forno_stdenvironments (embedded, WASM). UseFalconKeyPair::generate_deterministicwith your own entropy source.
Modules§
- codec
- Encoding/decoding for Falcon keys and signatures. Ported from codec.c.
- common
- Common utilities for Falcon. Ported from common.c.
- falcon
- High-level Falcon API. Ported from falcon.c.
- fft
- FFT operations for Falcon. Ported from fft.c (non-AVX2 path).
- fpr
- Floating-point representation for Falcon (FPNATIVE mode).
- keygen
- Falcon key pair generation. Ported from keygen.c.
- rng
- PRNG for Falcon (ChaCha20-based). Ported from rng.c + inline helpers from inner.h.
- safe_
api - High-level safe Rust SDK for Falcon post-quantum digital signatures.
- shake
- SHAKE256 implementation (Keccak-f[1600]).
- sign
- Signature generation for Falcon. Ported from sign.c (non-AVX2 paths).
- vrfy
- Signature verification for Falcon. Ported from vrfy.c.