Skip to content
4 changes: 2 additions & 2 deletions CMakeLists.txt
Original file line number Diff line number Diff line change
Expand Up @@ -47,9 +47,9 @@ set(CMAKE_C_STANDARD_REQUIRED ON)
set(CMAKE_POSITION_INDEPENDENT_CODE ON)
set(CMAKE_C_VISIBILITY_PRESET hidden)
set(OQS_VERSION_MAJOR 0)
set(OQS_VERSION_MINOR 15)
set(OQS_VERSION_MINOR 16)
set(OQS_VERSION_PATCH 0)
set(OQS_VERSION_PRE_RELEASE "")
set(OQS_VERSION_PRE_RELEASE "-rc1")
set(OQS_VERSION_TEXT "${OQS_VERSION_MAJOR}.${OQS_VERSION_MINOR}.${OQS_VERSION_PATCH}${OQS_VERSION_PRE_RELEASE}")
set(OQS_COMPILE_BUILD_TARGET "${CMAKE_SYSTEM_PROCESSOR}-${CMAKE_HOST_SYSTEM}")
set(OQS_MINIMAL_GCC_VERSION "7.1.0")
Expand Down
322 changes: 228 additions & 94 deletions RELEASE.md
Original file line number Diff line number Diff line change
@@ -1,99 +1,233 @@
# liboqs version 0.15.0
# liboqs version 0.16.0-rc1

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: https://openquantumsafe.org/ and on Github at https://github.com/open-quantum-safe/.
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: <https://openquantumsafe.org/> and on Github at
<https://github.com/open-quantum-safe/>.

**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** 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 https://github.com/open-quantum-safe/boringssl.
- **OQS-OpenSSH**: A prototype integration of liboqs-based authentication and key exchange into Secure Shell (SSH) version 2 in our fork of OpenSSH; see https://github.com/open-quantum-safe/openssh.

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 https://github.com/open-quantum-safe/liboqs-cpp
- Go, via https://github.com/open-quantum-safe/liboqs-go
- Java, via https://github.com/open-quantum-safe/liboqs-java
- Python 3, via https://github.com/open-quantum-safe/liboqs-python
- Rust, via https://github.com/open-quantum-safe/liboqs-rust

# Release notes
liboqs 0.15.0 was released on Friday, Nov 14, 2025.

## Deprecation notice
liboqs 0.15.0 is the last version to officially support SPHINCS+. SPHINCS+ will be removed in the 0.16.0 release and replaced by SLH-DSA. liboqs 0.15.0 also removes support for Dilithium.

## Security issues
None reported

<!--- git log HEAD...0.14.0 --->
## Significant changes
- **Integrated SLH-DSA implementation from [pq-code-package/slhdsa-c](https://github.com/pq-code-package/slhdsa-c/)**
- SLH-DSA ACVP tests ([#2237](https://github.com/open-quantum-safe/liboqs/pull/2237))
- Integrate SLH-DSA-C Library ([#2175](https://github.com/open-quantum-safe/liboqs/pull/2175))
- Added NTRU back ([#2176](https://github.com/open-quantum-safe/liboqs/pull/2176))
- Removed all Dilithium implementations ([#2275](https://github.com/open-quantum-safe/liboqs/pull/2275))
- Replaced SPHINCS+ with SLH-DSA for CMake build option `OQS_ALGS_ENABLED=STD` ([#2290](https://github.com/open-quantum-safe/liboqs/pull/2290))
- Updated CROSS to version 2.2 ([#2247](https://github.com/open-quantum-safe/liboqs/pull/2247))
- Included DeriveEncapsulation functionality ([#2221](https://github.com/open-quantum-safe/liboqs/pull/2221))
- Integrated ML-KEM implementation from ICICLE-PQC ([#2216](https://github.com/open-quantum-safe/liboqs/pull/2216))

## Bug fixes
- Fixed erroneously disabled LMS variants with build flag `OQS_ENABLE_SIG_STFL_LMS` ([#2310](https://github.com/open-quantum-safe/liboqs/pull/2310))
- Fixed incorrect import in OV-III-pkc_skc ([#2299](https://github.com/open-quantum-safe/liboqs/pull/2299))
- Fixed incorrect actual signature length in signature full-cycle speed test ([#2293](https://github.com/open-quantum-safe/liboqs/pull/2293))
- Fixed ICICLE ML-KEM integration ([#2288](https://github.com/open-quantum-safe/liboqs/pull/2293))
- Disabled strict aliasing on SPHINCS+-SHAKE ([#2264](https://github.com/open-quantum-safe/liboqs/pull/2264))
- Fixed typo in `test_kem.c` ([#2281](https://github.com/open-quantum-safe/liboqs/pull/2281))
- Fixed uninitialized `length_encaps_seed` for NTRU implementations ([#2266](https://github.com/open-quantum-safe/liboqs/pull/2266))
<!-- NOTES: #2258 was overwritten by #2288 and thus omitted from release notes for the sake of clarity -->
<!-- - Patched ICICLE ML-KEM for deterministic encapsulation ([#2258](https://github.com/open-quantum-safe/liboqs/pull/2258)) -->
- Changed 64 bit add to 32 bit add to wrap on 32 bit counter for AES-CTR AES-NI implementation ([#2252](https://github.com/open-quantum-safe/liboqs/pull/2252))
- Improved random number generator security ([#2225](https://github.com/open-quantum-safe/liboqs/pull/2225))
- Avoided invalid compiler options for MSVC ([#2239](https://github.com/open-quantum-safe/liboqs/pull/2239))
- Added Classic McEliece sanitization patch ([#2218](https://github.com/open-quantum-safe/liboqs/pull/2218))

## Miscellaneous
- Deprecated `noregress` scripts ([#2295](https://github.com/open-quantum-safe/liboqs/pull/2295))
- Updated no-pass explanation for constant-time testing ([#2294](https://github.com/open-quantum-safe/liboqs/pull/2294))
- Fixed weekly test failures in GitHub Action ([#2285](https://github.com/open-quantum-safe/liboqs/pull/2294))
- Improved algorithm support readability in README.md ([#2286](https://github.com/open-quantum-safe/liboqs/pull/2286))
- Re-enabled all ACVP tests ([#2283](https://github.com/open-quantum-safe/liboqs/pull/2283))
- Moved continuous benchmarking to weekly tests ([#2276](https://github.com/open-quantum-safe/liboqs/pull/2276))
- Linked to contribution wishlist from CONTRIBUTING.md ([#2273](https://github.com/open-quantum-safe/liboqs/pull/2273))
- Added content:read permission to scorecard workflow ([#2261](https://github.com/open-quantum-safe/liboqs/pull/2261))
- Added guidance and questions on generative AI use ([#2269](https://github.com/open-quantum-safe/liboqs/pull/2269))
- Moved `linux_arm_emulated` to extended tests ([#2236](https://github.com/open-quantum-safe/liboqs/pull/2236))
- Fixed pluralization in docs: "key encapsulation mechanisms (KEMs)" ([#2255](https://github.com/open-quantum-safe/liboqs/pull/2255))
- Fixed permissions for poutine_analysis job ([#2246](https://github.com/open-quantum-safe/liboqs/pull/2246))
- Disabled testing on Travis CI ([#2248](https://github.com/open-quantum-safe/liboqs/pull/2248))
- Upgraded Jinja to 3.1.6 ([#2214](https://github.com/open-quantum-safe/liboqs/pull/2214))
- Updated license info for ML-KEM ([#2250](https://github.com/open-quantum-safe/liboqs/pull/2250))
- Fixed typos across codebase ([#2244](https://github.com/open-quantum-safe/liboqs/pull/2244))
- Restructured basic checks ([#2233](https://github.com/open-quantum-safe/liboqs/pull/2233))
- Fixed code scanning workflow ([#2217](https://github.com/open-quantum-safe/liboqs/pull/2217))
- Changed Nix install action to verified ([#2212](https://github.com/open-quantum-safe/liboqs/pull/2212))
- Removed `armel` comment ([#2231](https://github.com/open-quantum-safe/liboqs/pull/2231))
- Removed `armel` support from `PLATFORMS.md` ([#2232](https://github.com/open-quantum-safe/liboqs/pull/2232))
- Added Poutine SASL ([#2213](https://github.com/open-quantum-safe/liboqs/pull/2213))
- Updated nixpkgs from 24.05 to 25.05 ([#2187](https://github.com/open-quantum-safe/liboqs/pull/2187))
- Added Custom Timeout to CI ([#2189](https://github.com/open-quantum-safe/liboqs/pull/2189))
- Updated ACVP to 1.1.0.40 ([#2172](https://github.com/open-quantum-safe/liboqs/pull/2172))
- Switched to dev mode for 0.14.1 ([#2199](https://github.com/open-quantum-safe/liboqs/pull/2199))

## New contributors
- Ganyu (Bruce) Xu (@xuganyu96)
- Ethan Li (@lir2002)
- @nonam3e (associated with Ingonyama)
- Saito Masataka (@saitomst)
- @max-p-log-p
- Vibhav Tiwari (@vibhav950)
- Dmitry (@mdqst)
- Rodrigo Martín (@RodriM11)
- @sukrucildirr
- Kitsios Konstantinos (@kitsiosk)

<!-- TODO: include full changelog statement at full release -->
- **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
<https://github.com/open-quantum-safe/boringssl>.
- **OQS-OpenSSH**: A prototype integration of liboqs-based authentication and
key exchange into Secure Shell (SSH) version 2 in our fork of OpenSSH; see
<https://github.com/open-quantum-safe/openssh>.

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 <https://github.com/open-quantum-safe/liboqs-cpp>
- Go, via <https://github.com/open-quantum-safe/liboqs-go>
- Java, via <https://github.com/open-quantum-safe/liboqs-java>
- Python 3, via <https://github.com/open-quantum-safe/liboqs-python>
- Rust, via <https://github.com/open-quantum-safe/liboqs-rust>

## Release notes

liboqs 0.16.0-rc1 was released on Wednesday, June 24, 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>_<aes|shake>`), and the salted variant of FrodoKEM
was added under the prior names (`KEM_frodokem_<640|976|1344>_<aes|shake>`).

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) <!-- 8f08fd8 has
no external effect and is ignored -->
- 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)
<!-- - Update mlkem-native to v1.1.0 -->
<!-- [#2376](https://github.com/open-quantum-safe/liboqs/pull/2376) -->
- 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)
4 changes: 2 additions & 2 deletions SECURITY.md
Original file line number Diff line number Diff line change
Expand Up @@ -8,8 +8,8 @@ Using any code prior to 0.12.0 is strongly discouraged due to a [known security

| Version | Supported |
| ------- | ------------------ |
| 0.15.0 | :white_check_mark: |
| < 0.15 | :x: |
| 0.16.0 | :white_check_mark: |
| < 0.16 | :x: |

## Reporting a Vulnerability

Expand Down
Loading