| Crates.io | pqc-nostd |
| lib.rs | pqc-nostd |
| version | 0.1.0 |
| created_at | 2025-11-21 01:01:38.242118+00 |
| updated_at | 2025-11-21 01:01:38.242118+00 |
| description | PQC no_std no_alloc Kyber Dilithium embedded 100% Rust |
| homepage | https://www.pqc-combo.com/ |
| repository | https://github.com/AaronSchnacky1/pqc-nostd |
| max_upload_size | |
| id | 1942848 |
| size | 1,089,575 |
Implements only NIST-standardized and FIPS-approved algorithms:
No std, no heap allocation, no unsafe code, no legacy crypto – ever.
fips_140_3 feature gatestd in approved mode| Feature | Description | Required for FIPS |
|---|---|---|
ml-kem |
Enables ML-KEM-1024 (FIPS 203) | Yes |
ml-dsa |
Enables ML-DSA-65 (FIPS 204) | Yes |
fips_140_3 |
Approved mode – POST, CSP controls, CASTs, operational state machine | Yes |
No default features – the FIPS boundary is explicit and minimal.
use pqc_nostd::{run_post_or_panic, is_operational, FIPS_CONTEXT};
fn main() {
run_post_or_panic(); // Executes full POST – panics on any failure
assert!(is_operational());
// ML-KEM-1024 (Kyber)
let kyber_kp = pqc_nostd::kyber_generate_key_pair([0x01u8; 64]);
let (ct, ss_alice) = pqc_nostd::encapsulate(&kyber_kp.public_key(), [0x02u8; 32]);
let ss_bob = pqc_nostd::decapsulate(&kyber_kp.private_key(), &ct);
assert_eq!(ss_alice, ss_bob);
// ML-DSA-65 (Dilithium)
let dil_kp = pqc_nostd::dilithium_generate_key_pair([0x03u8; 32]);
let sig = pqc_nostd::dilithium_sign(&dil_kp.signing_key, b"msg", FIPS_CONTEXT, [0x04u8; 32]).unwrap();
assert!(pqc_nostd::dilithium_verify(&dil_kp.verification_key, b"msg", FIPS_CONTEXT, &sig).is_ok());
}