# liboqs version 0.16.0 The **Open Quantum Safe (OQS) project** has the goal of developing and prototyping quantum-resistant cryptography. More information on OQS can be found on our website: and on Github at . **liboqs** is an open source C library for quantum-resistant cryptographic algorithms. Details about liboqs can be found in [README.md](https://github.com/open-quantum-safe/liboqs/blob/main/README.md). See in particular limitations on intended use. liboqs can be used with the following Open Quantum Safe application integrations: - **oqs-provider**: A standalone prototype [OpenSSL 3 provider](https://www.openssl.org/docs/manmaster/man7/provider.html) enabling liboqs-based quantum-safe and hybrid key authentication and exchange for TLS 1.3, X.509 certificate generation and CMS operations. - **OQS-BoringSSL**: A prototype integration of liboqs-based authentication and key exchange into TLS 1.3 in our fork of BoringSSL; see . - **OQS-OpenSSH**: A prototype integration of liboqs-based authentication and key exchange into Secure Shell (SSH) version 2 in our fork of OpenSSH; see . Several [demos](https://github.com/open-quantum-safe/oqs-demos) are available for using the above libraries in applications, including Apache, Chromium, curl, haproxy, nginx, and Wireshark. liboqs can also be used in the following programming languages via language-specific wrappers: - C++, via - Go, via - Java, via - Python 3, via - Rust, via ## Release notes liboqs 0.16.0 was released on Thursday, July 9, 2026. ### Deprecation notice SPHINCS+ was removed in 0.16.0. ### Security issues - Fixed uninitialized `encaps_derand` pointer dereference [#2460](https://github.com/open-quantum-safe/liboqs/pull/2460) - Fixed out-of-bounds read in XMSS/XMSS^MT signature verification [077e32a](https://github.com/open-quantum-safe/liboqs/commit/077e32a) [#2384](https://github.com/open-quantum-safe/liboqs/pull/2384) - Fixed Integer underflow in CROSS `crypto_sign_open()` [25d0a9e](https://github.com/open-quantum-safe/liboqs/commit/25d0a9e) - Fixed incorrect array size when calling `secure_clean` [ab0e07c](https://github.com/open-quantum-safe/liboqs/commit/ab0e07c) - Implemented optimization barrier `OQS_MEM_BLACK_BOX` and applied to `ct_select` in FrodoKEM [#2431](https://github.com/open-quantum-safe/liboqs/pull/2431) ### Significant change #### FrodoKEM algorithm change [#2192](https://github.com/open-quantum-safe/liboqs/pull/2192), [#2342](https://github.com/open-quantum-safe/liboqs/pull/2342) Existing FrodoKEM in 0.15.0 was renamed to ephemeral FrodoKEM (`KEM_efrodokem_<640|976|1344>_`), and the salted variant of FrodoKEM was added under the prior names (`KEM_frodokem_<640|976|1344>_`). Ephemeral FrodoKEM is recommended for applications where each keypair will encapsulate only a small number of shared secrets and ciphertexts. Standard (salted) FrodoKEM is recommended for applications where each keypair is expected to encapsulate large number of ciphertexts. Please consult [upstream](https://github.com/microsoft/PQCrypto-LWEKE/#frodokem-learning-with-errors-key-encapsulation) for more details. #### mldsa-native integration [#2284](https://github.com/open-quantum-safe/liboqs/pull/2284), [#2391](https://github.com/open-quantum-safe/liboqs/pull/2391), [#3445](https://github.com/open-quantum-safe/liboqs/pull/3445) mldsa-native is a secure, fast, and portable C90 implementation of the ML-DSA post-quantum signature standard. It also includes optimized builds for x86_64 and aarch64. It is now the default implementation behind `SIG_ml_dsa_<44|65|87>`. #### Updated HQC implementation [#2407](https://github.com/open-quantum-safe/liboqs/pull/2407) The HQC implementations in liboqs were updated to 20250822 spec. Its upstream switched from PQClean to the [official repo](https://gitlab.com/pqc-hqc/hqc). `KEM_hqc_<1|3|5>` is now enabled by default. #### MQOM integration and memory-optimized build flag [#2385](https://github.com/open-quantum-safe/liboqs/pull/2385), [#2367](https://github.com/open-quantum-safe/liboqs/pull/2367) MQOM is a third-round candidate in NIST's Additional Digital Signatures for the PQC Standardization Process. Portable, x86_64-optimized, and memory-optimized implementations were integrate into liboqs under `OQS_ENABLE_SIG_MQOM`. A new build flag `OQS_MEMOPT_BUILD` can now be used to switch to memory-optimized builds for algorithms that have memory-optimized implementations. #### OpenSSH implementation of NTRU Prime [#2356](https://github.com/open-quantum-safe/liboqs/pull/2356) A public-domain OpenSSH implementation of NTRUPrime761 replaced the PQClean implementation as the default backend for `KEM_ntruprime_sntrup761`. ### Bug fixes - Fixed incremental absorption bug in AVX512VL SHA3-512 [#2442](https://github.com/open-quantum-safe/liboqs/pull/2442) - Implemented fallback for when `EVP_DigestSqueeze` is unavailable [#2433](https://github.com/open-quantum-safe/liboqs/pull/2433) - Added API for detecting stateful signature support at runtime [#2434](https://github.com/open-quantum-safe/liboqs/pull/2434) - Fixed missing initialization and indexing bug in LMS [#2416](https://github.com/open-quantum-safe/liboqs/pull/2416) - Fixed erroneous MAYO_OK despite failed sample_solution() attempts in MAYO [#2403](https://github.com/open-quantum-safe/liboqs/pull/2403) - Limited pytest parallelism to prevent memory exhaustion in constrained environment [#2397](https://github.com/open-quantum-safe/liboqs/pull/2397) - Fixed cuPQC ML-KEM derand symbol names and `#if/#elif` chains [#2396](https://github.com/open-quantum-safe/liboqs/pull/2396) - Tightened Windows compiler detection [#2394](https://github.com/open-quantum-safe/liboqs/pull/2394) - Fixed mismatched macros in LMS [#2379](https://github.com/open-quantum-safe/liboqs/pull/2379) - Made fuzzers tolerant to disabled algorithms [#2359](https://github.com/open-quantum-safe/liboqs/pull/2359) - Removed inlined exponentiation in CROSS-RSDPG-1 [#2357](https://github.com/open-quantum-safe/liboqs/pull/2357) - Fixed incorrect arg register update in AVX512 Keccak [#2330](https://github.com/open-quantum-safe/liboqs/pull/2330) ### Miscellaneous - Update mlkem-native to v1.2.0 [#2470](https://github.com/open-quantum-safe/liboqs/pull/2470) - Removed legacy HQC constant-time test [#2467](https://github.com/open-quantum-safe/liboqs/pull/2467) - Download Intel SDE from alternative source [#2463](https://github.com/open-quantum-safe/liboqs/pull/2463) - Updated algorithm support information [#2441](https://github.com/open-quantum-safe/liboqs/pull/2441) - Added NIST LMS Signature verify KATs [#2435](https://github.com/open-quantum-safe/liboqs/pull/2435) - Fixed comments on SHA3-AVX512VL assembly file. Thank you Anthony Plank for reporting the issue [#2438](https://github.com/open-quantum-safe/liboqs/pull/2438) - Fixed latent warnings exposed by refreshed CI container images [#2430](https://github.com/open-quantum-safe/liboqs/pull/2430) - Added common dependencies with `include_only` in `copy_from_upstream` [#2382](https://github.com/open-quantum-safe/liboqs/pull/2382) - Documented algorithm support levels [#2413](https://github.com/open-quantum-safe/liboqs/pull/2413) - Updated Dependabot configuration [#2420](https://github.com/open-quantum-safe/liboqs/pull/2420) - Added @loganaden as codeowner for Kyber [#2421](https://github.com/open-quantum-safe/liboqs/pull/2421) - Bumped `gitpython` version for `copy_from_upstream` [#2414](https://github.com/open-quantum-safe/liboqs/pull/2414) - Updated GOVERNANCE.md and CODEOWNERS [#2410](https://github.com/open-quantum-safe/liboqs/pull/2410) - Added fuzz harness for LMS/XMSS signature verification [#2398](https://github.com/open-quantum-safe/liboqs/pull/2398) [#2412](https://github.com/open-quantum-safe/liboqs/pull/2412) - Added fuzz harness for XMSS signature verification [#2399](https://github.com/open-quantum-safe/liboqs/pull/2399) [#2400](https://github.com/open-quantum-safe/liboqs/pull/2400) - Moved compiler optimization level to CMAKE_BUILD_TYPE [#2383](https://github.com/open-quantum-safe/liboqs/pull/2383) - Updated pytest package version [#2408](https://github.com/open-quantum-safe/liboqs/pull/2408) - Demoted armhf to tier 3 supported platform [#2406](https://github.com/open-quantum-safe/liboqs/pull/2406) - Added Wycheproof tests for ML-DSA [#2378](https://github.com/open-quantum-safe/liboqs/pull/2378) - Added overflow check for OQS_MEM_calloc arguments [#2377](https://github.com/open-quantum-safe/liboqs/pull/2377) - Updated Wycheproof tests ML-KEM [#2373](https://github.com/open-quantum-safe/liboqs/pull/2373) - Updated Zephyr CI tests to recent versions [#2369](https://github.com/open-quantum-safe/liboqs/pull/2369) - Documented KAT sources and hash verification process [#2363](https://github.com/open-quantum-safe/liboqs/pull/2363) - Added support for ML-DSA pre-hash sign ACVP test vectors [#2362](https://github.com/open-quantum-safe/liboqs/pull/2362) - Added external-mu sign gen ACVP tests for ML-DSA [#2352](https://github.com/open-quantum-safe/liboqs/pull/2352) - Cached ACVP test vectors [#2354](https://github.com/open-quantum-safe/liboqs/pull/2354) - Added OQS_SIG_sign methods tests in vectors_sig [#2350](https://github.com/open-quantum-safe/liboqs/pull/2350) - Added the path to the binary include dir [#2312](https://github.com/open-quantum-safe/liboqs/pull/2312) - Removed local copies of ACVP test vectors [#2303](https://github.com/open-quantum-safe/liboqs/pull/2303) - New stylesheet for Doxygen-generated documentation [#2337](https://github.com/open-quantum-safe/liboqs/pull/2337) - Docs: List all optimized implementations [#2333](https://github.com/open-quantum-safe/liboqs/pull/2333) - Fixed README href formatting [#2323](https://github.com/open-quantum-safe/liboqs/pull/2323) - Unpined OQS_MINIMAL_BUILD alg list link from specific commit [#2326](https://github.com/open-quantum-safe/liboqs/pull/2326) ### New contributors - Vishnu Ajith (@Vishnu2707) - William Bates (@will-bates11) - Nelonn (@Nelonn) - Abhi S (@abhi-dev-engg) - Ryad Benadjila (@rben-dev) - Billy Brumley (@bbbrumley) - saanvi ratra (@Anusaa35) - Harshith Vasireddy (@ode) - Laugenbraue (@mmarock) - Sam Van de Velde (@samvandevelde) - Emil Lundberg (@emlun)