ML-DSA certificates through EST
Certificates with ML-DSA-44, 65 or 87 subject keys (FIPS 204, encoded per RFC 9881), issued through standard EST from a request made by a stock OpenSSL 3.5 client. The issued certificate verifies. The test →
Every cryptographic operation in trstctl enters through a single package and runs on a backend registered behind it. A build-time linter fails the build on a crypto import anywhere else. Adding or swapping an algorithm is one contained change, and the post-quantum migration is the first one run end to end.
This page lists what ships today, the test that proves it, and what trstctl does not claim yet. The second list is the point.
Each one is in the repository with a test behind it, and ships in every edition. Nothing here needs a license.
Certificates with ML-DSA-44, 65 or 87 subject keys (FIPS 204, encoded per RFC 9881), issued through standard EST from a request made by a stock OpenSSL 3.5 client. The issued certificate verifies. The test →
Enroll a host with an ML-DSA key and the agent generates it on the host. Renewals keep that algorithm; nothing silently falls back.
The signer generates, seals and reloads ML-DSA, SLH-DSA and ML-KEM keys in locked, zeroed memory, across restarts. The control plane never holds them.
Every scanned key is rated, the quantum-vulnerable ones are flagged, and each is mapped to its FIPS 203, 204 or 205 replacement. Campaigns carry owners, deadlines, dependency-ordered readiness and signed closure you can verify offline. Find it before you renew it →
Post-quantum support and proof-carrying succession attach in every build, including the free core. There is nothing to unlock.
Each move to a new signing algorithm is a record that both the old key and the new key sign over one commitment, with an epoch counter against replay and a break-glass requirement for any move to a weaker class. Records go to a transparency log with signed checkpoints and verify offline. API only today.
Anyone can add an algorithm once. The claim worth checking is that every future migration is a contained change, and that is only believable if the limits are written down. These are, here and in the limitations page.
The transitions of the next decade, ML-DSA, ML-KEM and SLH-DSA today, whatever follows a lattice break, a mandated national algorithm for a sovereign customer, each register behind the boundary. The enrollment protocols, the policy engine, the inventory and the console do not change.
When a primitive breaks, the surface to audit and replace is one tree, not every call site that ever needed a signature. The linter is what keeps a second crypto path from growing.
Signing lives in a separate process with no HTTP server and no database driver, reached over a Unix socket or mTLS. The control plane can request a signature. It cannot produce one.
Inventory the cryptography you have, enroll one host with an ML-DSA key, and verify the certificate with the OpenSSL you already run.