GnuTLS NEWS -- History of user-visible changes.                -*- outline -*-
Bug numbers referenced in this log correspond to bug numbers at our issue tracker,
available at https://gitlab.com/gnutls/gnutls/issues
Copyright (C) 2000-2016 Free Software Foundation, Inc.
Copyright (C) 2013-2019 Nikos Mavrogiannopoulos
See the end for copying conditions.

* Version 3.8.13 (released 2026-04-29)

** libgnutls: Add more checks to DTLS reassembly
   Previously, gnutls didn't check that DTLS fragments claimed
   a consistent message_length value.
   Additionally, a crucial array size check was missing,
   enabling an attacker to cause a heap overwrite.
   Reject fragments with mismatching length and add a missing boundary check.
   Independently reported by
   Haruto Kimura (Stella), Oscar Reparaz and Zou Dikai.
   [GNUTLS-SA-2026-04-29-1, CVSS: high] [CVE-2026-33846]

** libgnutls: Fix qsort comparator in DTLS reassembly
   The comparator function used for ordering DTLS packets
   by sequence numbers did not follow qsort comparator contracts
   in case of packets with duplicate sequence numbers,
   which could lead to unstable ordering or undefined behaviour.
   Return 0 in such cases makes the sorting stable.
   Additionally, discard packets with same sequence numbers
   and differing handshake type,
   so that they don't end up being sorted in the first place.
   Reported by Joshua Rogers of AISLE Research Team.
   [GNUTLS-SA-2026-04-29-2, CVSS: high] [CVE-2026-42009]

** libgnutls: Fix crashing on an underflow with a DTLS datagram
   A remotely triggerable underflow in the DTLS reassembly code led to
   a heap overrun.
   Prevent the underflow from happening.
   Reported by Joshua Rogers of AISLE Research Team.
   [GNUTLS-SA-2026-04-29-3, CVSS: high] [CVE-2026-33845]

** libgnutls: Fix RSA-PSK identity truncation
   Servers configured with RSA-PSK have wrongfully matched usernames with NUL
   character in them to ones truncated to NUL character,
   which could lead to an authentication bypass.
   Fix the check to perform comparison up to the full username length.
   Reported by Joshua Rogers of AISLE Research Team.
   [GNUTLS-SA-2026-04-29-4, CVSS: high] [CVE-2026-42010]

** libgnutls: Fix case-sensitivity of domain name comparison in name constraints
   Domain name comparison during name constraints processing
   was case-sensitive, violating RFC 5280 section 7.2.
   For excluded name constraints, this could lead to
   incorrectly accepting domain names that should've been rejected.
   DNS name comparison and the domain part of email names
   now perform case-insensitive comparison.
   Independently reported by Oleh Konko (1seal) and
   Joshua Rogers of AISLE Research Team.
   [GNUTLS-SA-2026-04-29-5, CVSS: high] [CVE-2026-3833]

** libgnutls: Fix intersecting empty constraints
   Permitted name constraints were wrongfully ignored
   when prior CAs only had excluded name constraints,
   resulting in a name constraint bypass.
   Reported by Haruto Kimura (Stella).
   [GNUTLS-SA-2026-04-29-6, CVSS: medium] [CVE-2026-42011]

** libgnutls: Suppress CN fallback in presence of URI and SRV SAN
   Certificates containing URI or SRV Subject Alternative Names
   no longer fall back to checking DNS hostnames against Common Name
   to avoid potential misuse of such certificates
   beyond their original purpose.
   Reported by Oleh Konko (1seal).
   [GNUTLS-SA-2026-04-27-7, CVSS: medium] [CVE-2026-42012]

** libgnutls: Suppress CN fallback for oversized SAN
   Validation of certificates with oversized Subject Alternative Names
   no longer falls back to checking DNS hostnames against Common Name.
   Independently reported by Haruto Kimura (Stella) and
   Joshua Rogers of AISLE Research Team.
   [GNUTLS-SA-2026-04-27-8, CVSS: medium] [CVE-2026-42013]

** libgnutls: Fix use-after-free in gnutls_pkcs11_token_set_pin
   Changing the Security Officer PIN with gnutls_pkcs11_token_set_pin()
   with oldpin == NULL for a token lacking a protected authentication path
   led to a use-after-free.
   Reported by Luigino Camastra and Joshua Rogers of AISLE Research Team.
   [GNUTLS-SA-2026-04-29-9, CVSS: medium] [CVE-2026-42014]

** libgnutls: Fix overread in RSA key exchange with PKCS#11 keys
   For a server using an RSA key backed by a PKCS#11 token,
   a client sending an extremely short premaster secret
   during an RSA key exchange could trigger a short heap overread.
   Reported by Joshua Rogers of AISLE Research Team.
   [GNUTLS-SA-2026-04-29-10, CVSS: medium] [CVE-2026-5260]

** libgnutls: Fix off-by-one in PKCS#12 bag element bounds check
   Appending to a PKCS#12 bag that already contained 32 elements
   could write past the bag's internal array.
   Reported by Zou Dikai.
   [GNUTLS-SA-2026-04-29-11, CVSS: low] [CVE-2026-42015]

** libgnutls: Fix multi-entry OCSP response revocation bypass
   When validating a certificate against a multi-entry OCSP response,
   the revocation status was always checked for the first entry
   instead of the entry matching the certificate,
   which could lead to accepting revoked certificates.
   Independently reported by Oleh Konko (1seal) and
   Joshua Rogers of AISLE Research Team.
   [GNUTLS-SA-2026-04-29-12, CVSS: low] [CVE-2026-3832]

** libgnutls: Fix timing side-channel in PKCS#7 padding removal
   The PKCS#7 padding check performed during decryption was not constant-time,
   potentially leaking information about the padding bytes
   through timing differences.
   Rewritten to remove padding in a branch-free manner.
   Reported by Doria Tang of Stony Brook University.
   [GNUTLS-SA-2026-04-29-13, CVSS: low] [CVE-2026-5419]

** libgnutls: Fix PSK username comparison during rehandshake
   Rehandshaking to a username with embedded NUL character could theoretically
   allow bypassing the GNUTLS_ALLOW_ID_CHANGE protection (#1808).
   Reported and fixed by Joshua Rogers of AISLE Research Team.

** libgnutls: Fix OID length check for OCSP delegated signer EKU
   The OCSP signing EKU OID was compared without verifying its length,
   allowing a shorter OID that shares the same prefix to match.
   The check now verifies the length as well (#1810).
   Reported by Joshua Rogers of AISLE Research Team.

** libgnutls: Fix AES keys persisting with pkcs11-provider
   When using the pkcs11-provider, AES keys used for cipher operations
   were created as persistent objects and accumulating.
   They are now ephemeral (#1813).

** libgnutls: Fix missing RSA key coprimality check in verify_params
   gnutls_privkey_verify_params overlooked the scenario of p and q
   not being co-prime.
   It now returns GNUTLS_E_PK_INVALID_PRIVKEY in this case (#1818).
   Reported by Kamil Frankowicz.

** libgnutls: Fix overread when parsing OpenSSL PEM private keys
   Insufficient bounds checking on the PEM header length could lead
   to short heap overreads on specially crafted inputs (#1854).
   Independently reported by Kamil Frankowicz and
   Joshua Rogers of AISLE Research Team.

** libgnutls: Fix a theoretical double-free during certificate import
   If gnutls_x509_crt_list_import_pkcs11 failed partway through,
   the trust list cleanup code would try to free already-deinitialized
   certificate entries, leading to a double-free (#1819).
   Reported by Joshua Rogers of AISLE Research Team.

** libgnutls: Fix heap overread in SCT extension parser
   The list-length validation didn't account for the 2-byte length field,
   allowing a specially crafted SCT extension to cause
   a 2-byte overread past the buffer (#1822).
   Reported by Joshua Rogers of AISLE Research Team.

** libgnutls: Zeroize shared secret derived during hybrid key exchange
   The derived shared secret was not zeroized before being freed (#1841).
   Reported by liyue.

** build: Support building with Nettle 4.0
   Nettle 4.0 was released in Feburary 2026, with API incompatibile
   changes from 3.10. The library can now compile with it, while
   Nettle 3.10 is still supported (#1791).

** libgnutls: Support deriving ML-DSA public key from an expanded private key
   RFC 9881 defines 3 private key formats for ML-DSA: "seed",
   "expandedKey" and both. It is now possible to derive a public key
   from a private key in the "expandedKey" format (#1723).

** libgnutls: Fix loading BIT STRING encoded EdDSA key from PKCS#11
   For compatibility reasons, the library supports two formats for
   EdDSA private keys: either ASN.1 BIT STRING (raw) or OCTET STRING
   (DER). Previously, loading a private key in the former format
   resulted in a failure, which is now fixed (#1749).

** libgnutls: HPKE (RFC 9180) is now supported as a technology preview
   The Hybrid Public Key Encryption (HPKE) is a flexible cryptographic
   protocol which enables to encrypt arbitrary data to a recipient, by
   combining key encapsulation mechanism (KEM) and authenticated
   encryption with additional data (AEAD). GnuTLS now includes the
   implementation contributed by David Dudas. Given this is a
   technology preview, the implementation and the API might suffer
   modification in the following period. Use --enable-hpke to turn on
   this feature (#1506).

** libgnutls: Fix TLS 1.3 client certificate selection
   For servers that send a signature_algorithms extension in CertificateRequest
   with new rsa_pss_rsae_* algorithms and without the legacy rsa_pkcs1_* ones,
   the client now properly considers RSA when selecting a certificate to send.
   This fixes TLS 1.3 interoperability with newer Java servers
   when using client certificates.
   Contributed by Romain Tartière (#1842).

** libgnutls: Fix kTLS ChaCha20-Poly1305 IV for TLS 1.2
   When using kTLS with ChaCha20-Poly1305 under TLS 1.2,
   an incorrect value was passed as the IV to the kernel,
   causing connections to fail early.

** libgnutls: Allow fetching object type metadata for PKCS#11 keys
   A new library function, gnutls_pkcs11_obj_get_pk_algorithm,
   has been added to check the public key algorithms of PKCS#11 key objects.
   Object types other than CKO_PRIVATE_KEY are currently not supported.
   Contributed by Ghadi Elie Rahme (!2074).

** API and ABI modifications:
gnutls_hpke_kem_t: New enum
gnutls_hpke_kdf_t: New enum
gnutls_hpke_aead_t: New enum
gnutls_hpke_mode_t: New enum
gnutls_hpke_role_t: New enum
gnutls_hpke_context_st: New context structure
gnutls_hpke_init: New function
gnutls_hpke_deinit: New function
gnutls_hpke_encap: New function
gnutls_hpke_seal: New function
gnutls_hpke_decap: New function
gnutls_hpke_open: New function
gnutls_hpke_derive_keypair: New function
gnutls_hpke_export: New function
gnutls_pkcs11_obj_get_pk_algorithm: New function

* Version 3.8.12 (released 2026-02-09)

** libgnutls: Fix NULL pointer dereference in PSK binder verification
   A TLS 1.3 resumption attempt with an invalid PSK binder value in ClientHello
   could lead to a denial of service attack via crashing the server.
   The updated code guards against the problematic dereference.
   Reported by Jaehun Lee.
   [Fixes: GNUTLS-SA-2026-02-09-1, CVSS: high] [CVE-2026-1584]

** libgnutls: Fix name constraint processing performance issue
   Verifying certificates with pathological amounts of name constraints
   could lead to a denial of service attack via resource exhaustion.
   Reworked processing algorithms exhibit better performance characteristics.
   Reported by Tim Scheckenbach.
   [Fixes: GNUTLS-SA-2026-02-09-2, CVSS: medium] [CVE-2025-14831]

** libgnutls: Fix multiple unexploitable overflows
   Reported by Tim Rühsen (#1783, #1786).

** libgnutls: Fall back to thread-unsafe module initialization
   Improve fallback handling for PKCS#11 modules that
   don't support thread-safe initialization (#1774).
   Also return filename from p11_kit_module_get_name() for unconfigured modules.

** libgnutls: Accept NULL as digest argument for gnutls_hash_output
   The accelerated implementation of gnutls_hash_output() now
   properly accepts NULL as the digest argument, matching the
   behavior of the reference implementation (#1769).

** srptool: Avoid a stack buffer overflow when processing large SRP groups.
   Reported and fixed by Mikhail Dmitrichenko (#1777).

** API and ABI modifications:
No changes since last version.

* Version 3.8.11 (released 2025-11-18)

** libgnutls: Fix stack overwrite in gnutls_pkcs11_token_init
   Reported by Luigino Camastra from Aisle Research. [GNUTLS-SA-2025-11-18,
   CVSS: low] [CVE-2025-9820]

** libgnutls: MAC algorithms for PSK binders is now configurable
   The previous implementation assumed HMAC-SHA256 to calculate the
   PSK binders. With the new gnutls_psk_allocate_client_credentials2()
   and gnutls_psk_allocate_server_credentials2() functions, the
   application can use other MAC algorithms such as HMAC-SHA384.

** libgnutls: Expose a new function to provide the maximum record send size
   A new function gnutls_record_get_max_send_size() has been added to
   determine the maximum size of a TLS record to be sent to the peer.

** libgnutls: Expose a new function to update keys without sending a KeyUpdate
   to the peer. A new function gnutls_handshake_update_receiving_key()
   has been added to allow updating the local receiving key without
   sending any KeyUpdate messages.

** libgnutls: PKCS#11 cryptographic provider configuration takes a token URI
   instead of a module path. To allow using a PKCS#11 module exposing
   multiple tokens, the "path" configuration keyword was replaced with
   the "url" keyword.

** libgnutls: Support crypto-auditing probe points
   crypto-auditing is a project to monitor which cryptographic
   operations are taking place in the library at run time, through
   eBPF. This adds necessary probe points for that, in public key
   cryptography and the TLS use-case. To enable this, run configure
   with --enable-crypto-auditing.

** build: The minimum version of Nettle has been updated to 3.10
   Given Nettle 3.10 is ABI compatible with 3.6 and includes several
   security relevant fixes, the library's minimum requirement of
   Nettle is updated to 3.10.

** build: The default priority file path is now constructed from sysconfdir
   Previously, the location of the default priority file was
   hard-coded to be /etc/gnutls/config. Now it takes into account of
   the --sysconfdir option given to the configure script.

** API and ABI modifications:
gnutls_psk_allocate_client_credentials2: New function
gnutls_psk_allocate_server_credentials2: New function
gnutls_record_get_max_send_size: New function
gnutls_handshake_update_receiving_key: New function
gnutls_audit_push_context: New function
gnutls_audit_pop_context: New function
gnutls_audit_current_context: New function

* Version 3.8.10 (released 2025-07-08)

** libgnutls: Fix NULL pointer dereference when 2nd Client Hello omits PSK
   Reported by Stefan Bühler. [GNUTLS-SA-2025-07-07-4, CVSS: medium]
   [CVE-2025-6395]

** libgnutls: Fix heap read buffer overrun in parsing X.509 SCTS timestamps
   Spotted by oss-fuzz and reported by OpenAI Security Research Team,
   and fix developed by Andrew Hamilton. [GNUTLS-SA-2025-07-07-1,
   CVSS: medium] [CVE-2025-32989]

** libgnutls: Fix double-free upon error when exporting otherName in SAN
   Reported by OpenAI Security Research Team. [GNUTLS-SA-2025-07-07-2,
   CVSS: low] [CVE-2025-32988]

** certtool: Fix 1-byte write buffer overrun when parsing template
   Reported by David Aitel. [GNUTLS-SA-2025-07-07-3,
   CVSS: low] [CVE-2025-32990]

** libgnutls: PKCS#11 modules can now be used to override the default
   cryptographic backend. Use the [provider] section in the system-wide config
   to specify path and pin to the module (see system-wide config Documentation).

** libgnutls: Linux kernel version 6.14 brings a Kernel TLS (kTLS) key update
   support. The library running on the aforementioned version now utilizes the
   kernel’s key update mechanism when kTLS is enabled, allowing uninterrupted
   TLS session. The --enable-ktls configure option as well as the system-wide
   kTLS configuration(see GnuTLS Documentation) are still required to enable
   this feature.

** libgnutls: liboqs support for PQC has been removed
   For maintenance purposes, support for post-quantum cryptography
   (PQC) is now only provided through leancrypto. The experimental key
   exchange algorithm, X25519Kyber768Draft00, which is based on the
   round 3 candidate of Kyber and only supported through liboqs has
   also been removed altogether.

** libgnutls: TLS certificate compression methods can now be set with
   cert-compression-alg configuration option in the gnutls priority file.

** libgnutls: All variants of ML-DSA private key formats are supported
   While the previous implementation of ML-DSA was based on
   draft-ietf-lamps-dilithium-certificates-04, this updates it to
   draft-ietf-lamps-dilithium-certificates-12 with support for all 3
   variants of private key formats: "seed", "expandedKey", and "both".

** libgnutls: ML-DSA signatures can now be used in TLS
   The ML-DSA signature algorithms, ML-DSA-44, ML-DSA-65, and
   ML-DSA-87, can now be used to digitally sign TLS handshake
   messages.

** API and ABI modifications:
GNUTLS_PKCS_MLDSA_SEED: New enum member of gnutls_pkcs_encrypt_flags_t
GNUTLS_PKCS_MLDSA_EXPANDED: New enum member of gnutls_pkcs_encrypt_flags_t

* Version 3.8.9 (released 2025-02-07)

** libgnutls: leancrypto was added as an interim option for PQC
   The library can now be built with leancrypto instead of liboqs for
   post-quantum cryptography (PQC), when configured with
   --with-leancrypto option instead of --with-liboqs.

** libgnutls: Experimental support for ML-DSA signature algorithm
   The library and certtool now support ML-DSA signature algorithm as
   defined in FIPS 204 and based on
   draft-ietf-lamps-dilithium-certificates-04. This feature is
   currently marked as experimental and can only be enabled when
   compiled with --with-leancrypto or --with-liboqs.
   Contributed by David Dudas.

** libgnutls: Support for ML-KEM-1024 key encapsulation mechanism
   The support for ML-KEM post-quantum key encapsulation mechanisms
   has been extended to cover ML-KEM-1024, in addition to ML-KEM-768.
   MLKEM1024 is only offered as SecP384r1MLKEM1024 hybrid as per
   draft-kwiatkowski-tls-ecdhe-mlkem-03.

** libgnutls: Fix potential DoS in handling certificates with numerous name
   constraints, as a follow-up of CVE-2024-12133 in libtasn1. The
   bundled copy of libtasn1 has also been updated to the latest 4.20.0
   release to complete the fix.  Reported by Bing Shi (#1553).
   [GNUTLS-SA-2025-02-07, CVSS: medium] [CVE-2024-12243]

** API and ABI modifications:
GNUTLS_PK_MLDSA44: New enum member of gnutls_pk_algorithm_t
GNUTLS_PK_MLDSA65: New enum member of gnutls_pk_algorithm_t
GNUTLS_PK_MLDSA87: New enum member of gnutls_pk_algorithm_t
GNUTLS_SIGN_MLDSA44: New enum member of gnutls_sign_algorithm_t
GNUTLS_SIGN_MLDSA65: New enum member of gnutls_sign_algorithm_t
GNUTLS_SIGN_MLDSA87: New enum member of gnutls_sign_algorithm_t

* Version 3.8.8 (released 2024-11-05)

** libgnutls: Experimental support for X25519MLKEM768 and SecP256r1MLKEM768 key exchange in TLS 1.3
   The support for post-quantum key exchanges has been extended to
   cover the final standard of ML-KEM, following
   draft-kwiatkowski-tls-ecdhe-mlkem. The minimum supported version of
   liboqs is bumped to 0.11.0.

** libgnutls: All records included in an OCSP response are now checked in TLS
   Previously, when multiple records are provided in a single OCSP
   response, only the first record was considered; now all those
   records are examined until the server certificate matches.

** libgnutls: Handling of malformed compress_certificate extension is now more standard compliant
   The server behavior of receiving a malformed compress_certificate
   extension now more strictly follows RFC 8879; return
   illegal_parameter alert instead of bad_certificate, as well as
   overlong extension data is properly rejected.

** build: More flexible library linking options for compression libraries, TPM, and liboqs support
   The configure options, --with-zstd, --with-brotli, --with-zlib,
   --with-tpm2, and --with-liboqs now take 4 states:
   yes/link/dlopen/no, to specify how the libraries are linked or
   loaded.

** API and ABI modifications:
No changes since last version.

* Version 3.8.7 (released 2024-08-15)

** libgnutls: New configure option to compile out DSA support
   The --disable-dsa configure option has been added to completely disable DSA
   algorithm support.

** libgnutls: Experimental support for X25519Kyber768Draft00 key exchange in TLS
   For testing purposes, the hybrid post-quantum key exchange defined
   in draft-tls-westerbaan-xyber768d00 has been implemented using
   liboqs. Since the algorithm is still not finalized, the support of
   this key exchange is disabled by default and can be enabled with
   the --with-liboqs configure option.

** API and ABI modifications:
GNUTLS_PK_MLKEM768: New enum member of gnutls_pk_algorithm_t

* Version 3.8.6 (released 2024-07-03)

** libgnutls: PBMAC1 is now supported as a MAC mechanism for PKCS#12
   To be compliant with FIPS 140-3, PKCS#12 files with MAC based on
   PBKDF2 (PBMAC1) is now supported, according to the specification
   proposed in draft-ietf-lamps-pkcs12-pbmac1.

** libgnutls: SHA3 extendable output functions (XOF) are now supported
   SHA3 XOF, SHAKE128 and SHAKE256, are now usable through a new
   public API gnutls_hash_squeeze.

** API and ABI modifications:
gnutls_pkcs12_generate_mac3: New function
gnutls_pkcs12_flags_t: New enum
gnutls_hash_squeeze: New function

* Version 3.8.5 (released 2024-04-04)

** libgnutls: Due to majority of usages and implementations of
   RSA decryption with PKCS#1 v1.5 padding being incorrect,
   leaving them vulnerable to Marvin attack, the RSAES-PKCS1-v1_5
   is being deprecated (encryption and decryption) and will be
   disabled in the future. A new option `allow-rsa-pkcs1-encrypt`
   has been added into the system-wide library configuration which
   allows to enable/disable the RSAES-PKCS1-v1_5. Currently, the
   RSAES-PKCS1-v1_5 is enabled by default.

** libgnutls: Added support for RIPEMD160 and PBES1-DES-SHA1 for
   backward compatibility with GCR.

** libgnutls: A couple of memory related issues have been fixed in RSA PKCS#1
   v1.5 decryption error handling and deterministic ECDSA with earlier
   versions of GMP.  These were a regression introduced in the 3.8.4
   release. See #1535 and !1827.

** build: Fixed a bug where building gnutls statically failed due
   to a duplicate definition of nettle_rsa_compute_root_tr().

** API and ABI modifications:
GNUTLS_PKCS_PBES1_DES_SHA1: New enum member of gnutls_pkcs_encrypt_flags_t

* Version 3.8.4 (released 2024-03-18)

** libgnutls: RSA-OAEP encryption scheme is now supported
   To use it with an unrestricted RSA private key, one would need to
   initialize a gnutls_x509_spki_t object with necessary parameters
   for RSA-OAEP and attach it to the private key. It is also possible
   to import restricted private keys if they are stored in PKCS#8
   format.

** libgnutls: Fix side-channel in the deterministic ECDSA.
   Reported by George Pantelakis (#1516).
   [GNUTLS-SA-2023-12-04, CVSS: medium] [CVE-2024-28834]

** libgnutls: Fixed a bug where certtool crashed when verifying a certificate
   chain with more than 16 certificates. Reported by William Woodruff (#1525)
   and yixiangzhike (#1527).
   [GNUTLS-SA-2024-01-23, CVSS: medium] [CVE-2024-28835]

** libgnutls: Compression libraries are now loaded dynamically as needed
   instead of all being loaded during gnutls library initialization.
   As a result, the library initialization should be faster.

** build: The gnutls library can now be linked with the static library
   of GMP.  Note that in order for this to work libgmp.a needs to be
   compiled with -fPIC and libhogweed in Nettle also has to be linked
   to the static library of GMP.  This can be used to prevent custom
   memory allocators from being overriden by other applications.

** API and ABI modifications:
gnutls_x509_spki_get_rsa_oaep_params: New function.
gnutls_x509_spki_set_rsa_oaep_params: New function.
GNUTLS_PK_RSA_OAEP: New enum member of gnutls_pk_algorithm_t.

* Version 3.8.3 (released 2024-01-16)

** libgnutls: Fix more timing side-channel inside RSA-PSK key exchange
   [GNUTLS-SA-2024-01-14, CVSS: medium] [CVE-2024-0553]

** libgnutls: Fix assertion failure when verifying a certificate chain with a
   cycle of cross signatures
   [GNUTLS-SA-2024-01-09, CVSS: medium] [CVE-2024-0567]

** libgnutls: Fix regression in handling Ed25519 keys stored in PKCS#11 token
   certtool was unable to handle Ed25519 keys generated on PKCS#11
   with pkcs11-tool (OpenSC). This is a regression introduced in 3.8.2.

** API and ABI modifications:
No changes since last version.

* Version 3.8.2 (released 2023-11-14)

** libgnutls: Fix timing side-channel inside RSA-PSK key exchange.
   [GNUTLS-SA-2023-10-23, CVSS: medium] [CVE-2023-5981]

** libgnutls: Add API functions to perform ECDH and DH key agreement
   The functionality has been there for a long time though they were
   not available as part of the public API.  This enables applications
   to implement custom protocols leveraging non-interactive key
   agreement with ECDH and DH.

** libgnutls: Added support for AES-GCM-SIV ciphers (RFC 8452)
   The new algorithms GNUTLS_CIPHER_AES_128_SIV_GCM and
   GNUTLS_CIPHER_AES_256_SIV_GCM have been added to be used through
   the AEAD interface.  Note that, unlike
   GNUTLS_CIPHER_AES_{128,256}_SIV_GCM, the authentication tag is
   appended to the ciphertext, not prepended.

** libgnutls: transparent KTLS support is extended to FreeBSD kernel
   The kernel TLS feature can now be enabled on FreeBSD as well as
   Linux when compiled with the --enable-ktls configure option.

** gnutls-cli: New option --starttls-name
   Depending on deployment, application protocols such as XMPP may
   require a different origin address than the external address to be
   presented prior to STARTTLS negotiation.  The --starttls-name can
   be used to specify specify the addresses separately.

** API and ABI modifications:
gnutls_pubkey_import_dh_raw: New function
gnutls_privkey_import_dh_raw: New function
gnutls_pubkey_export_dh_raw: New function
gnutls_privkey_export_dh_raw: New function
gnutls_x509_privkey_import_dh_raw: New function
gnutls_privkey_derive_secret: New function
GNUTLS_KEYGEN_DH: New enum member of gnutls_keygen_types_t
GNUTLS_CIPHER_AES_128_SIV_GCM: Added
GNUTLS_CIPHER_AES_256_SIV_GCM: Added

* Version 3.8.1 (released 2023-08-03)

** libgnutls: ClientHello extensions are randomized by default
   To make fingerprinting harder, TLS extensions in ClientHello
   messages are shuffled. As this behavior may cause compatibility
   issue with legacy applications that do not accept the last
   extension without payload, the behavior can be reverted with the
   %NO_SHUFFLE_EXTENSIONS priority keyword.

** libgnutls: Add support for RFC 9258 external PSK importer.
   This enables to deploy the same PSK across multiple TLS versions
   (TLS 1.2 and TLS 1.3) in a secure manner. To use, the application
   needs to set up a callback that formats the PSK identity using
   gnutls_psk_format_imported_identity().

** libgnutls: %GNUTLS_NO_EXTENSIONS has been renamed to
   %GNUTLS_NO_DEFAULT_EXTENSIONS.

** libgnutls: Add additional PBKDF limit checks in FIPS mode as
   defined in SP 800-132. Minimum salt length is 128 bits and
   minimum iterations bound is 1000 for PBKDF in FIPS mode.

** libgnutls: Add a mechanism to control whether to enforce extended
   master secret (RFC 7627). FIPS 140-3 mandates the use of TLS
   session hash (extended master secret, EMS) in TLS 1.2. To enforce
   this, a new priority keyword %FORCE_SESSION_HASH is added and if
   it is set and EMS is not set, the peer aborts the connection. This
   behavior is the default in FIPS mode, though it can be overridden
   through the configuration file with the "tls-session-hash" option.
   In either case non-EMS PRF is reported as a non-approved operation
   through the FIPS service indicator.

** New option --attime to specify current time.
   To make testing with different timestamp to the system easier, the
   tools doing certificate verification now provide a new option
   --attime, which takes an arbitrary time.

** API and ABI modifications:
gnutls_psk_client_credentials_function3: New typedef
gnutls_psk_server_credentials_function3: New typedef
gnutls_psk_set_server_credentials_function3: New function
gnutls_psk_set_client_credentials_function3: New function
gnutls_psk_format_imported_identity: New function
GNUTLS_PSK_KEY_EXT: New enum member of gnutls_psk_key_flags

* Version 3.8.0 (released 2023-02-09)

** libgnutls: Fix a Bleichenbacher oracle in the TLS RSA key exchange.
   Reported by Hubert Kario (#1050). Fix developed by Alexander Sosedkin.
   [GNUTLS-SA-2020-07-14, CVSS: medium] [CVE-2023-0361]

** libgnutls: C++ library is now header only. All definitions from
   gnutlsxx.c have been moved into gnutlsxx.h. Users of the C++
   interface have two options:
   1. include gnutlsxx.h in their application and link against
      the C library. (default)
   2. include gnutlsxx.h in their application, compile with
      GNUTLS_GNUTLSXX_NO_HEADERONLY macro defined and link
      against the C++ library.

** libgnutls: GNUTLS_NO_STATUS_REQUEST flag and %NO_STATUS_REQUEST
   priority modifier have been added to allow disabling of the
   status_request TLS extension in the client side.

** libgnutls: TLS heartbeat is disabled by default.
   The heartbeat extension in TLS (RFC 6520) is not widely used given
   other implementations dropped support for it. To enable back
   support for it, supply --enable-heartbeat-support to configure
   script.

** libgnutls: SRP authentication is now disabled by default.
   It is disabled because the SRP authentication in TLS is not up to
   date with the latest TLS standards and its ciphersuites are based
   on the CBC mode and SHA-1.  To enable it back, supply
   --enable-srp-authentication option to configure script.

** libgnutls: All code has been indented using "indent -ppi1 -linux".
   CI/CD has been adjusted to catch regressions.  This is implemented
   through devel/indent-gnutls, devel/indent-maybe and .gitlab-ci.yml’s
   commit-check.  You may run devel/indent-gnutls to fix any
   indentation issues if you make code modifications.

** guile: Guile-bindings removed.
   They have been extracted into a separate project to reduce complexity
   and to simplify maintenance, see <https://gitlab.com/gnutls/guile/>.

** minitasn1: Upgraded to libtasn1 version 4.19.

** API and ABI modifications:
GNUTLS_NO_STATUS_REQUEST: New flag
GNUTLS_SRTP_AEAD_AES_128_GCM: New gnutls_srtp_profile_t enum member
GNUTLS_SRTP_AEAD_AES_256_GCM: New gnutls_srtp_profile_t enum member

* Version 3.7.8 (released 2022-09-27)

** libgnutls: In FIPS140 mode, RSA signature verification is an approved
   operation if the key has modulus with known sizes (1024, 1280,
   1536, and 1792 bits), in addition to any modulus sizes larger than
   2048 bits, according to SP800-131A rev2.

** libgnutls: gnutls_session_channel_binding performs additional checks when
   GNUTLS_CB_TLS_EXPORTER is requested. According to RFC9622 4.2, the
   "tls-exporter" channel binding is only usable when the handshake is
   bound to a unique master secret (i.e., either TLS 1.3 or extended
   master secret extension is negotiated). Otherwise the function now
   returns error.

** libgnutls: usage of the following functions, which are designed to
   loosen restrictions imposed by allowlisting mode of configuration,
   has been additionally restricted. Invoking them is now only allowed
   if system-wide TLS priority string has not been initialized yet:
gnutls_digest_set_secure
gnutls_sign_set_secure
gnutls_sign_set_secure_for_certs
gnutls_protocol_set_enabled

** API and ABI modifications:
No changes since last version.

* Version 3.7.7 (released 2022-07-28)

** libgnutls: Fixed double free during verification of pkcs7 signatures.
   Reported by Jaak Ristioja (#1383). [GNUTLS-SA-2022-07-07, CVSS: medium]
   [CVE-2022-2509]

** libgnutls: gnutls_hkdf_expand now only accepts LENGTH argument less than or
   equal to 255 times hash digest size, to comply with RFC 5869 2.3.

** libgnutls: Length limit for TLS PSK usernames has been increased
   from 128 to 65535 characters (#1323).

** libgnutls: AES-GCM encryption function now limits plaintext
   length to 2^39-256 bits, according to SP800-38D 5.2.1.1.

** libgnutls: New block cipher functions have been added to transparently
   handle padding.  gnutls_cipher_encrypt3 and gnutls_cipher_decrypt3 can be
   used in combination of GNUTLS_CIPHER_PADDING_PKCS7 flag to automatically
   add/remove padding if the length of the original plaintext is not a multiple
   of the block size.

** libgnutls: New function for manual FIPS self-testing.

** API and ABI modifications:
gnutls_fips140_run_self_tests: New function
gnutls_cipher_encrypt3: New function
gnutls_cipher_decrypt3: New function
gnutls_cipher_padding_flags_t: New enum

** guile: Guile 1.8 is no longer supported

** guile: Session record port treats premature termination as EOF
   Previously, a ‘gnutls-error’ exception with the
   ‘error/premature-termination’ value would be thrown while reading from a
   session record port when the underlying session was terminated
   prematurely.  This was inconvenient since users of the port may not be
   prepared to handle such an exception.
   Reading from the session record port now returns the end-of-file object
   instead of throwing an exception, just like it would for a proper
   session termination.

** guile: Session record ports can have a ‘close’ procedure.
   The ‘session-record-port’ procedure now takes an optional second
   parameter, and a new ‘set-session-record-port-close!’ procedure is
   provided to specify a ‘close’ procedure for a session record port.
   This ‘close’ procedure lets users specify cleanup operations for when
   the port is closed, such as closing the file descriptor or port that
   backs the underlying session.

* Version 3.7.6 (released 2022-05-27)

** libgnutls: Fixed invalid write when gnutls_realloc_zero()
   is called with new_size < old_size. This bug caused heap
   corruption when gnutls_realloc_zero() has been set as gmp
   reallocfunc (!1592, #1367, #1368, #1369).

** API and ABI modifications:
No changes since last version.

* Version 3.7.5 (released 2022-05-15)

** libgnutls: The GNUTLS_NO_TICKETS_TLS12 flag and %NO_TICKETS_TLS12 priority
   modifier have been added to disable session ticket usage in TLS 1.2 because
   it does not provide forward secrecy (#477).  On the other hand, since session
   tickets in TLS 1.3 do provide forward secrecy, the PFS priority string now
   only disables session tickets in TLS 1.2.  Future backward incompatibility:
   in the next major release of GnuTLS, we plan to remove those flag and
   modifier, and make GNUTLS_NO_TICKETS and %NO_TICKETS only affect TLS 1.2.

** gnutls-cli, gnutls-serv: Channel binding for printing information
   has been changed from tls-unique to tls-exporter as tls-unique is
   not supported in TLS 1.3.

** libgnutls: Certificate sanity checks has been enhanced to make
   gnutls more RFC 5280 compliant (!1583).
   Following changes were included:
   - critical extensions are parsed when loading x509
     certificate to prohibit any random octet strings.
     Requires strict-x509 configure option to be enabled
   - garbage bits in Key Usage extension are prohibited
   - empty DirectoryStrings in Distinguished name structures
     of Issuer and Subject name are prohibited

** libgnutls: Removed 3DES from FIPS approved algorithms (#1353).
   According to the section 2 of SP800-131A Rev.2, 3DES algorithm
   will be disallowed for encryption after December 31, 2023:
   https://csrc.nist.gov/publications/detail/sp/800-131a/rev-2/final

** libgnutls: Optimized support for AES-SIV-CMAC algorithms (#1217, #1312).
   The existing AEAD API that works in a scatter-gather fashion
   (gnutls_aead_cipher_encryptv2) has been extended to support AES-SIV-CMAC.
   For further optimization, new function (gnutls_aead_cipher_set_key) has been
   added to set key on the existing AEAD handle without re-allocation.

** libgnutls: HKDF and AES-GCM algorithms are now approved in FIPS-140 mode
   when used in TLS (#1311).

** The configure arguments for Brotli and Zstandard (zstd) support
   have changed to reflect the previous help text: they are now
   --with-brotli/--with-zstd respectively (#1342).

** Detecting the Zstandard (zstd) library in configure has been
   fixed (#1343).

** API and ABI modifications:
GNUTLS_NO_TICKETS_TLS12: New flag
gnutls_aead_cipher_set_key: New function

* Version 3.7.4 (released 2022-03-17)

** libgnutls: Added support for certificate compression as defined in RFC8879
   (#1301). New API functions (gnutls_compress_certificate_get_selected_method
   and gnutls_compress_certificate_set_methods) allow client and server to set
   their preferences.

** certtool: Added option --compress-cert that allows user to specify
   compression methods for certificate compression.

** libgnutls: GnuTLS can now be compiled with --enable-strict-x509 configure
   option to enforce stricter certificate sanity checks that are compliant with
   RFC5280.

** libgnutls: Removed IA5String type from DirectoryString within issuer
   and subject name to make DirectoryString RFC5280 compliant.

** libgnutls: Added function (gnutls_record_send_file) to send file content from
   open file descriptor (!1486). The implementation is optimized if KTLS (kernel
   TLS) is enabled.

** libgnutls: Added function (gnutls_ciphersuite_get) to retrieve the name of
   current ciphersuite from TLS session (#1291).

** libgnutls: The run-time dependency on tpm2-tss is now re-implemented using
   dlopen, so GnuTLS does not indirectly link to other crypto libraries until
   TPM2 functionality is utilized (!1544).

** API and ABI modifications:
GNUTLS_COMP_BROTLI: New gnutls_compression_method_t enum member
GNUTLS_COMP_ZSTD: New gnutls_compression_method_t enum member
gnutls_compress_certificate_get_selected_method: Added
gnutls_compress_certificate_set_methods: Added
gnutls_ciphersuite_get: New function
gnutls_record_send_file: New function
libgnutlsxx: Soname bumped due to ABI breakage introduced in 3.7.1

* Version 3.7.3 (released 2022-01-17)

** libgnutls: The allowlisting configuration mode has been added to the system-wide
   settings. In this mode, all the algorithms are initially marked as insecure
   or disabled, while the applications can re-enable them either through the
   [overrides] section of the configuration file or the new API (#1172).

** The build infrastructure no longer depends on GNU AutoGen for generating
   command-line option handling, template file parsing in certtool, and
   documentation generation (#773, #774). This change also removes run-time or
   bundled dependency on the libopts library, and requires Python 3.6 or later
   to regenerate the distribution tarball.

   Note that this brings in known backward incompatibility in command-line
   tools, such as long options are now case sensitive, while previously they
   were treated in a case insensitive manner: for example --RSA is no longer a
   valid option of certtool. The existing scripts using GnuTLS tools may need
   adjustment for this change.

** libgnutls: The tpm2-tss-engine compatible private blobs can be loaded and
   used as a gnutls_privkey_t (#594). The code was originally written for the
   OpenConnect VPN project by David Woodhouse. To generate such blobs, use the
   tpm2tss-genkey tool from tpm2-tss-engine:
   https://github.com/tpm2-software/tpm2-tss-engine/#rsa-operations
   or the tpm2_encodeobject tool from unreleased tpm2-tools.

** libgnutls: The library now transparently enables Linux KTLS
   (kernel TLS) when the feature is compiled in with --enable-ktls configuration
   option (#1113). If the KTLS initialization fails it automatically falls back
   to the user space implementation.

** certtool: The certtool command can now read the Certificate Transparency
   (RFC 6962) SCT extension (#232).  New API functions are also provided to
   access and manipulate the extension values.

** certtool: The certtool command can now generate, manipulate, and evaluate
   x25519 and x448 public keys, private keys, and certificates.

** libgnutls: Disabling a hashing algorithm through "insecure-hash"
   configuration directive now also disables TLS ciphersuites that use it as a
   PRF algorithm.

** libgnutls: PKCS#12 files are now created with modern algorithms by default
   (!1499).  Previously certtool used PKCS12-3DES-SHA1 for key derivation and
   HMAC-SHA1 as an integity measure in PKCS#12.  Now it uses AES-128-CBC with
   PBKDF2 and SHA-256 for both key derivation and MAC algorithms, and the
   default PBKDF2 iteration count has been increased to 600000.

** libgnutls: PKCS#12 keys derived using GOST algorithm now uses
   HMAC_GOSTR3411_2012_512 instead of HMAC_GOSTR3411_2012_256 for integrity, to
   conform with the latest TC-26 requirements (#1225).

** libgnutls: The library now provides a means to report the status of approved
   cryptographic operations (!1465). To adhere to the FIPS140-3 IG 2.4.C., this
   complements the existing mechanism to prohibit the use of unapproved
   algorithms by making the library unusable state.

** gnutls-cli: The gnutls-cli command now provides a --list-config option to
   print the library configuration (!1508).

** libgnutls: Fixed possible race condition in
   gnutls_x509_trust_list_verify_crt2 when a single trust list object is shared
   among multiple threads (#1277). [GNUTLS-SA-2022-01-17, CVSS: low]

** API and ABI modifications:
GNUTLS_PRIVKEY_FLAG_RSA_PSS_FIXED_SALT_LENGTH: new flag in gnutls_privkey_flags_t
GNUTLS_VERIFY_RSA_PSS_FIXED_SALT_LENGTH: new flag in gnutls_certificate_verify_flags
gnutls_ecc_curve_set_enabled: Added.
gnutls_sign_set_secure: Added.
gnutls_sign_set_secure_for_certs: Added.
gnutls_digest_set_secure: Added.
gnutls_protocol_set_enabled: Added.
gnutls_fips140_context_init: New function
gnutls_fips140_context_deinit: New function
gnutls_fips140_push_context: New function
gnutls_fips140_pop_context: New function
gnutls_fips140_get_operation_state: New function
gnutls_fips140_operation_state_t: New enum
gnutls_transport_is_ktls_enabled: New function
gnutls_get_library_configuration: New function

* Version 3.7.2 (released 2021-05-29)

** libgnutls: The priority string option %DISABLE_TLS13_COMPAT_MODE was added
   to disable TLS 1.3 middlebox compatibility mode

** libgnutls: The Linux kernel AF_ALG based acceleration has been added.
   This can be enabled with --enable-afalg configure option, when libkcapi
   package is installed (#308).

** libgnutls: Fixed timing of early data exchange. Previously, the client was
   sending early data after receiving Server Hello, which not only negates the
   benefit of 0-RTT, but also works under certain assumptions hold (e.g., the
   same ciphersuite is selected in initial and resumption handshake) (#1146).

** certtool: When signing a CSR, CRL distribution point (CDP) is no longer
   copied from the signing CA by default (#1126).

** libgnutls: The GNUTLS_NO_EXPLICIT_INIT envvar has been renamed to
   GNUTLS_NO_IMPLICIT_INIT to reflect the purpose (#1178). The former is now
   deprecated and will be removed in the future releases.

** certtool: When producing certificates and certificate requests, subject DN
   components that are provided individually will now be ordered by
   assumed scale (e.g. Country before State, Organization before
   OrganizationalUnit).  This change also affects the order in which
   certtool prompts interactively.  Please rely on the template
   mechanism for automated use of certtool! (#1243)

** API and ABI modifications:
gnutls_early_cipher_get: Added
gnutls_early_prf_hash_get: Added

** guile: Writes to a session record port no longer throw an exception upon
   GNUTLS_E_AGAIN or GNUTLS_E_INTERRUPTED.

* Version 3.7.1 (released 2021-03-10)

** libgnutls: Fixed potential use-after-free in sending "key_share"
   and "pre_shared_key" extensions. When sending those extensions, the
   client may dereference a pointer no longer valid after
   realloc. This happens only when the client sends a large Client
   Hello message, e.g., when HRR is sent in a resumed session
   previously negotiated large FFDHE parameters, because the initial
   allocation of the buffer is large enough without having to call
   realloc (#1151).  [GNUTLS-SA-2021-03-10, CVSS: low]

** libgnutls: Fixed a regression in handling duplicated certs in a
   chain (#1131).

** libgnutls: Fixed sending of session ID in TLS 1.3 middlebox
   compatibility mode. In that mode the client shall always send a
   non-zero session ID to make the handshake resemble the TLS 1.2
   resumption; this was not true in the previous versions (#1074).

** libgnutls: W32 performance improvement with a new sendmsg()-like
   transport implementation (!1377).

** libgnutls: Removed dependency on the external 'fipscheck' package,
   when compiled with --enable-fips140-mode (#1101).

** libgnutls: Added padlock acceleration for AES-192-CBC (#1004).

** API and ABI modifications:
No changes since last version.

* Version 3.7.0 (released 2020-12-02)

** libgnutls: Depend on nettle 3.6 (!1322).

** libgnutls: Added a new API that provides a callback function to
   retrieve missing certificates from incomplete certificate chains
   (#202, #968, #1100).

** libgnutls: Added a new API that provides a callback function to
   output the complete path to the trusted root during certificate
   chain verification (#1012).

** libgnutls: OIDs exposed as gnutls_datum_t no longer account for the
   terminating null bytes, while the data field is null terminated.
   The affected API functions are: gnutls_ocsp_req_get_extension,
   gnutls_ocsp_resp_get_response, and gnutls_ocsp_resp_get_extension
   (#805).

