Skip to main content

Crate falcon

Crate falcon 

Source
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

lognVariantNIST LevelPrivate KeyPublic KeySignature
9Falcon-512I1281 B897 B~666 B
10Falcon-1024V2305 B1793 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 for no_std environments (embedded, WASM). Use FalconKeyPair::generate_deterministic with 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.