Open-Source Post-Quantum Libraries: liboqs, OpenSSL, BoringSSL, Go and Java Maturity

Updated | 4 min read | QUANTUM (QNT) community

Two very different kinds of library

Post-quantum code comes in two flavors. The first is mainstream TLS libraries that added the NIST-standardized algorithms (ML-KEM, ML-DSA, SLH-DSA) and ship them to millions of users. The second is research and prototyping toolkits such as the Open Quantum Safe project. Mixing them up is the most common mistake builders make.

Open Quantum Safe: liboqs and oqs-provider

liboqs is an open source C library of quantum-safe algorithms under the MIT license, with a common API and test and benchmark tools. Its README states in capital letters that the maintainers do not currently recommend relying on it in a production environment or to protect sensitive data, because it is volunteer-maintained, not commercially supported, and lacks the auditing needed for high-security use. It also recommends hybrid cryptography for early deployments. The README lists ML-KEM, HQC, FrodoKEM, Classic McEliece and others for key exchange; ML-DSA, SLH-DSA, Falcon, MAYO, UOV and others for signatures; and LMS and XMSS as stateful signatures. It assigns support tiers: ML-KEM is Tier 1 (Core), ML-DSA and the stateful schemes are Tier 2, and many others are Tier 3 (Community).

oqs-provider plugs liboqs into OpenSSL 3 as a provider, which makes it handy for trying exotic algorithms in a lab. Its README carries the same production warning. It also says that on OpenSSL 3.5 and later, algorithms OpenSSL already implements natively (pure ML-KEM, ML-DSA, SLH-DSA and hybrids such as X25519MLKEM768) are disabled in the provider at runtime, and that using the standardized families through the provider is discouraged on any OpenSSL version because of differences in key representation. Enabling too many algorithms can also crash older OpenSSL builds.

Maturity table

This table mixes vendor claims with my reading of the sources. It describes key agreement and signatures separately because signatures lag.

LibraryKey agreementSignaturesMy honest label
OpenSSL 3.5 and laterHybrid on by default (X25519MLKEM768)ML-DSA and SLH-DSA added in 3.5.0Mainstream for key agreement; signatures new, test in your own PKI
BoringSSLSupportedML-DSA-44/65/87 listed by CloudflareUsed by Chromium; API is not stable, so track upstream
AWS-LCX25519MLKEM768, SecP256r1MLKEM768, SecP384r1MLKEM1024SupportedMainstream; Rust users reach it through aws-lc-rs
GoDefault from Go 1.24Internal in 1.26; public crypto/mldsa proposed for 1.27Key agreement mainstream; signatures not yet public API
Java (OpenJDK)Default from JDK 27 (JEP 527)ML-DSA APIs since 24, not yet in javax.net.ssl TLSKey agreement arriving; plan on provider code for now
rustlsDefault since 0.23.27Unstable, behind a feature flagKey agreement mainstream
Node.jsDefault in 24.5.0 and 22.20.0ML-DSA in 24.5.0 and laterInherits OpenSSL 3.5
liboqs and oqs-providerMany algorithmsMany algorithmsResearch and interoperability testing only

The Go, Java, Node and rustls entries come from Cloudflare's support table, which itself says listings are for reference only and that maintainers are responsible for their own software.

How to choose

  1. Use the platform you already ship. Upgrade the TLS library and runtime rather than adding a new dependency. This gives you hybrid key agreement with almost no code.
  2. Use liboqs in a lab. Good for benchmarking sizes, trying a candidate like Falcon before its standard is final, or interoperability tests. Do not protect real secrets with it.
  3. Prefer standardized names. The liboqs README says the ML-KEM, ML-DSA and SLH-DSA names are stable. Pre-standard names like Kyber and Dilithium variants should not appear in production configs.
  4. Pin and monitor. Pin library versions, subscribe to security advisories, and keep a test that prints the negotiated group on every deploy.

What is still experimental

Post-quantum signatures in TLS and X.509 are the least settled area. Cloudflare's 2025 post estimated that post-quantum certificates would be unlikely to be broadly trusted or available before 2027, and that swapping to ML-DSA-44 would add about 15 kB to a handshake. It also warned against deploying MAYO or SNOVA now. Falcon (FN-DSA) saves bytes but is described as dangerous to implement when signing on the fly. See the signature comparison and NIST standards status.

Finally, remember that no library fixes a protocol that exposes public keys carelessly; see exposed public keys for the blockchain version of that lesson.

Sources and further reading

Reported as of 2026-10-09. Library versions, defaults and standards status change often, so check the primary documents and test on your own stack before relying on anything here. Nothing here is financial advice or a security audit. The QNT memecoin is independent of Quantinuum Ltd, the real company, and of every project, library, lab and chain named on this page.

Frequently asked questions

Is liboqs safe to use in production?

Its own README says it does not recommend relying on it in production or to protect sensitive data. Use it for research, prototypes and interoperability tests.

What should I use for production post-quantum key exchange?

The support built into current mainstream libraries, such as OpenSSL 3.5 and later, BoringSSL, AWS-LC, Go 1.24 and later, or rustls, in hybrid mode.

Can I use oqs-provider with OpenSSL 3.5?

It works, but its README says native algorithms such as ML-KEM and ML-DSA are disabled in the provider on 3.5 and later, so it mainly adds the other candidates.

Are post-quantum signatures ready for TLS certificates?

Not broadly. Library support is arriving, but public web PKI support was reported as unlikely before 2027.

Share on X

Keep reading

All Quantum computing guides | Back to top | Search the site

Main pages: Quantum computing explained | Quantum and crypto | Companies | Quantum news | Glossary

QUANTUM (QNT) is the quantum sector memecoin on Solana. See the live chart, buys and burnt supply or read the token facts. Questions? Join the Telegram.