Deploying the post-quantum packages
Side-channel claim limit. Nothing on this page claims constant-time behaviour or side-channel resistance for any target: the side-channel harness covers nothing (finding A48) and no measurement exists. The Rust and C cores are designed for constant time and unmeasured; managed runtimes (JIT, GC, bounds checks) make no timing claim. Where this page names constant-time or side-channel techniques, in prose or in code, they are design intent or recommendations, not measured properties.
This page replaces the 3.0.0-era “Post-Quantum Cryptography Production Deployment Guide” (container images, Kubernetes manifests, Grafana dashboards, a metamui/pqc:3.0.0 image, hardware-security-module integration). None of that exists in the 1.0.0 release candidate: the candidate is a set of libraries, one per language target, and nothing else. What a deployment inherits from them is below.
What the libraries fix, and what the application must decide
- Profiles are explicit. The library never chooses an algorithm or a parameter set; the application names one (
ml-kem-768,ml-dsa-65,falcon-512.r3-padded, …) and a family name is refused. Choosing is a deployment decision the library does not make; the Algorithm Selector and the algorithm pages carry the standards’ parameters. - Context strings are part of the protocol. ML-DSA, SLH-DSA, HAETAE and AIMer sign and verify under a context of at most 255 bytes; a signature made under one context does not verify under another. A deployment fixes its context strings and treats them as protocol constants.
- Two KEM rejection behaviours. ML-KEM and SMAUG-T decapsulate a bad ciphertext to a pseudorandom secret (implicit rejection); NTRU+ fails explicitly and returns no secret. A protocol written for one must not be pointed at the other without handling the difference, and key confirmation, where needed, is the protocol’s job.
- Raw standard encodings. Keys, ciphertexts and signatures are the FIPS 203/204/205, Round-3 and KpqC byte encodings with no envelope; versioning, framing and storage formats are the application’s.
- Randomness comes from the operating system. There is no seeded or deterministic public entry point; a deployment that needs reproducibility for testing uses the test suites’ vectors, not production entry points.
- One version per release line,
1.0.0-rc.7today; pin it in every manifest.
What is not provided
- No container image, service, daemon, CLI, HSM integration or monitoring artefact.
- No hardware-accelerated path: the public release is portable code only, and no performance figure is published for any target beyond the Rust benchmark evidence on one host.
- No constant-time or side-channel property (A48, unmeasured), no independent audit, no CMVP or CAVP certificate.
- No commercial support: support is best effort through GitHub issues (
SUPPORT.md); security reports go to security@metamui.id, never to a public issue.
Related
This page carries no code; the executed examples are on the Quick Start.