Bug#1141816: trixie-pu: package wolfssl/5.7.2-0.1+deb13u2

Bastian Germann <[email protected]>
Newsgroups gmane.linux.debian.devel.release
Message-ID <178368708500.3627.948756790179356567.reportbug__10323.7822580681$1783687311$gmane$org@duagon-BXN3S64.localdomain>
Package: release.debian.org
Severity: normal
Tags: trixie
X-Debbugs-Cc: [email protected], [email protected]
Control: affects -1 + src:wolfssl
User: [email protected]
Usertags: pu


[ Reason ]
Forwarding from the Maintainer:
I would like to patch some of the CVEs for wolfssl in Trixie.
The prepared security updates fix some of the recent wolfSSL CVEs
(tracked in #1140765 and #1140815).

This is an alternative to #1136309 which has not been confirmed yet
and would fix CVE-2026-5194 as well.

[ Impact ]
The user is vulnerable to
CVE-2026-5194
CVE-2026-55962
CVE-2026-55967
CVE-2026-6092
CVE-2026-6094
CVE-2026-6329
CVE-2026-6331
CVE-2026-6678
CVE-2026-6681
CVE-2026-6731
CVE-2026-6325
CVE-2026-55961
CVE-2026-7511
CVE-2026-6450
CVE-2026-55960

[ Tests ]
As I am forwarding this, I have only checked the debdiff to compile on
trixie. The Maintainer may add his test approach.

[ Risks ]
As these are proper CVE fix backports there is much less risk than in
#1136309 which imports a newer upstream version.

[ Checklist ]
  [x] *all* changes are documented in the d/changelog
  [x] I reviewed all changes and I approve them
  [x] attach debdiff against the package in stable
  [x] the issue is verified as fixed in unstable

[ Changes ]
  * CVE-2026-5194: require certificate signature OID to match issuer key OID.
  * CVE-2026-55960: validate negotiated certificate type for raw public keys.
  * CVE-2026-55961: reject degenerate certs-only PKCS#7 in PKCS7_verify.
  * CVE-2026-55962: require client cert on outstanding TLS 1.3 post-handshake auth.
  * CVE-2026-55967: reject AES-GCM cumulative size overflow in streaming update.
  * CVE-2026-6092: enforce Encrypt-then-MAC on the TLS resumption path.
  * CVE-2026-6094: bound encrypted content size in PKCS7 EnvelopedData.
  * CVE-2026-6325: bound index in SetSuitesHashSigAlgo to prevent OOB write.
  * CVE-2026-6329: reject PKCS#12 MAC length mismatch.
  * CVE-2026-6331: require exact HMAC tag length in EVP_DigestVerifyFinal.
  * CVE-2026-6450: reject CRLs with unrecognized critical extensions.
  * CVE-2026-6678: fix integer underflow in wc_PKCS7_DecryptOri.
  * CVE-2026-6681: respect caller output buffer size in PKCS7 decode.
  * CVE-2026-6731: apply DNS name constraints to Subject CN when no SAN.
  * CVE-2026-7511: report the verifying cert as the PKCS#7 signer.
wolfssl_5.7.2-0.1+deb13u2.debdiff (text/plain, 49.2 KB)
diff -Nru wolfssl-5.7.2/debian/changelog wolfssl-5.7.2/debian/changelog
--- wolfssl-5.7.2/debian/changelog	2025-08-10 15:17:47.000000000 +0200
+++ wolfssl-5.7.2/debian/changelog	2026-07-05 23:43:31.000000000 +0200
@@ -1,3 +1,30 @@
+wolfssl (5.7.2-0.1+deb13u2) trixie-security; urgency=high
+
+  * Backport upstream security fixes. (See #1140765, #1140815)
+  * CVE-2026-5194: require certificate signature OID to match issuer key
+    OID.
+  * CVE-2026-55960: validate negotiated certificate type for raw public
+    keys.
+  * CVE-2026-55961: reject degenerate certs-only PKCS#7 in PKCS7_verify.
+  * CVE-2026-55962: require client cert on outstanding TLS 1.3 post-
+    handshake auth.
+  * CVE-2026-55967: reject AES-GCM cumulative size overflow in streaming
+    update.
+  * CVE-2026-6092: enforce Encrypt-then-MAC on the TLS resumption path.
+  * CVE-2026-6094: bound encrypted content size in PKCS7 EnvelopedData.
+  * CVE-2026-6325: bound index in SetSuitesHashSigAlgo to prevent OOB
+    write.
+  * CVE-2026-6329: reject PKCS#12 MAC length mismatch.
+  * CVE-2026-6331: require exact HMAC tag length in
+    EVP_DigestVerifyFinal.
+  * CVE-2026-6450: reject CRLs with unrecognized critical extensions.
+  * CVE-2026-6678: fix integer underflow in wc_PKCS7_DecryptOri.
+  * CVE-2026-6681: respect caller output buffer size in PKCS7 decode.
+  * CVE-2026-6731: apply DNS name constraints to Subject CN when no SAN.
+  * CVE-2026-7511: report the verifying cert as the PKCS#7 signer.
+
+ -- Jacob Barthelmeh <[email protected]>  Sun, 05 Jul 2026 15:43:31 -0600
+
 wolfssl (5.7.2-0.1+deb13u1) trixie; urgency=medium
 
   * Fix CVE-2025-7394: weak/predictable random numbers. (Closes: #1109549)
diff -Nru wolfssl-5.7.2/debian/patches/CVE-2026-5194-digest-sizes.patch wolfssl-5.7.2/debian/patches/CVE-2026-5194-digest-sizes.patch
--- wolfssl-5.7.2/debian/patches/CVE-2026-5194-digest-sizes.patch	1970-01-01 01:00:00.000000000 +0100
+++ wolfssl-5.7.2/debian/patches/CVE-2026-5194-digest-sizes.patch	2026-07-05 23:43:31.000000000 +0200
@@ -0,0 +1,382 @@
+Description: CVE-2026-5194 - enforce minimum/maximum digest sizes in signature ops
+ Companion to CVE-2026-5194.patch (asn.c signature-OID match). Backports the
+ wolfcrypt-level digest-size enforcement half of upstream commit abce5be9: adds
+ WC_MIN_DIGEST_SIZE (hash.h) and rejects too-small/too-large hash inputs in the
+ ECC and DSA sign/verify primitives, the Ed25519ph/Ed448ph prehash length,
+ wc_SignatureVerifyHash and the PKCS7 ECDSA verify path. The upstream internal.c
+ EccVerify guard is omitted: it is redundant (EccVerify calls the now-guarded
+ wc_ecc_verify_hash) and its context mis-binds to Ed25519Sign on 5.7.2. The
+ enum->define header refactor, kernel module port, dilithium (not built) and
+ test-only hunks are likewise omitted.
+Origin: upstream, https://github.com/wolfSSL/wolfssl/commit/abce5be989ccd0665e2b9445abb856886975dfd1
+Bug-Debian: https://security-tracker.debian.org/tracker/CVE-2026-5194
+Author: wolfSSL
+Forwarded: not-needed
+Index: wolfssl-5.7.2/wolfcrypt/src/dsa.c
+===================================================================
+--- wolfssl-5.7.2.orig/wolfcrypt/src/dsa.c
++++ wolfssl-5.7.2/wolfcrypt/src/dsa.c
+@@ -34,6 +34,7 @@
+ #include <wolfssl/wolfcrypt/logging.h>
+ #include <wolfssl/wolfcrypt/sha.h>
+ #include <wolfssl/wolfcrypt/dsa.h>
++#include <wolfssl/wolfcrypt/hash.h>
+ 
+ #ifdef NO_INLINE
+     #include <wolfssl/wolfcrypt/misc.h>
+@@ -680,6 +681,12 @@ int wc_DsaSign_ex(const byte* digest, wo
+     if (digest == NULL || out == NULL || key == NULL || rng == NULL)
+         return BAD_FUNC_ARG;
+ 
++    if ((digestSz > WC_MAX_DIGEST_SIZE) ||
++        (digestSz < WC_MIN_DIGEST_SIZE))
++    {
++        return BAD_LENGTH_E;
++    }
++
+     SAVE_VECTOR_REGISTERS(return _svr_ret;);
+ 
+     do {
+@@ -1013,6 +1020,16 @@ int wc_DsaVerify_ex(const byte* digest,
+     if (digest == NULL || sig == NULL || key == NULL || answer == NULL)
+         return BAD_FUNC_ARG;
+ 
++    /* Note the min allowed digestSz here is WC_SHA_DIGEST_SIZE, not
++     * WC_MIN_DIGEST_SIZE, to allow verify-only legacy DSA operations, as
++     * expressly allowed under FIPS 186-5, FIPS 140-3, and SP 800-131A.
++     */
++    if ((digestSz > WC_MAX_DIGEST_SIZE) ||
++        (digestSz < WC_SHA_DIGEST_SIZE))
++    {
++        return BAD_LENGTH_E;
++    }
++
+     do {
+ #ifdef WOLFSSL_SMALL_STACK
+         w = (mp_int *)XMALLOC(sizeof *w, key->heap, DYNAMIC_TYPE_TMP_BUFFER);
+Index: wolfssl-5.7.2/wolfcrypt/src/ecc.c
+===================================================================
+--- wolfssl-5.7.2.orig/wolfcrypt/src/ecc.c
++++ wolfssl-5.7.2/wolfcrypt/src/ecc.c
+@@ -6726,6 +6726,11 @@ int wc_ecc_sign_hash(const byte* in, wor
+     if (in == NULL || out == NULL || outlen == NULL || key == NULL) {
+         return ECC_BAD_ARG_E;
+     }
++    if ((inlen > WC_MAX_DIGEST_SIZE) ||
++        (inlen < WC_MIN_DIGEST_SIZE))
++    {
++        return BAD_LENGTH_E;
++    }
+ 
+ #ifdef WOLF_CRYPTO_CB
+     #ifndef WOLF_CRYPTO_CB_FIND
+@@ -7224,6 +7229,11 @@ int wc_ecc_sign_hash_ex(const byte* in,
+    if (in == NULL || r == NULL || s == NULL || key == NULL || rng == NULL) {
+        return ECC_BAD_ARG_E;
+    }
++   if ((inlen > WC_MAX_DIGEST_SIZE) ||
++       (inlen < WC_MIN_DIGEST_SIZE))
++   {
++       return BAD_LENGTH_E;
++   }
+ 
+    /* is this a private key? */
+    if (key->type != ECC_PRIVATEKEY && key->type != ECC_PRIVATEKEY_ONLY) {
+@@ -8466,6 +8476,12 @@ int wc_ecc_verify_hash(const byte* sig,
+         return ECC_BAD_ARG_E;
+     }
+ 
++    /* Check hash length */
++    if ((hashlen > WC_MAX_DIGEST_SIZE) ||
++        (hashlen < WC_MIN_DIGEST_SIZE)) {
++        return BAD_LENGTH_E;
++    }
++
+ #ifdef WOLF_CRYPTO_CB
+     #ifndef WOLF_CRYPTO_CB_FIND
+     if (key->devId != INVALID_DEVID)
+@@ -9073,6 +9089,12 @@ int wc_ecc_verify_hash_ex(mp_int *r, mp_
+    if (r == NULL || s == NULL || hash == NULL || res == NULL || key == NULL)
+        return ECC_BAD_ARG_E;
+ 
++    /* Check hash length */
++    if ((hashlen > WC_MAX_DIGEST_SIZE) ||
++        (hashlen < WC_MIN_DIGEST_SIZE)) {
++        return BAD_LENGTH_E;
++    }
++
+    /* default to invalid signature */
+    *res = 0;
+ 
+Index: wolfssl-5.7.2/wolfcrypt/src/ed25519.c
+===================================================================
+--- wolfssl-5.7.2.orig/wolfcrypt/src/ed25519.c
++++ wolfssl-5.7.2/wolfcrypt/src/ed25519.c
+@@ -396,6 +396,12 @@ int wc_ed25519_sign_msg_ex(const byte* i
+         return BAD_FUNC_ARG;
+     }
+ 
++    if ((type == Ed25519ph) &&
++        (inLen != WC_SHA512_DIGEST_SIZE))
++    {
++        return BAD_LENGTH_E;
++    }
++
+ #ifdef WOLF_CRYPTO_CB
+     if (key->devId != INVALID_DEVID) {
+         ret = wc_CryptoCb_Ed25519Sign(in, inLen, out, outLen, key, type,
+@@ -854,6 +860,12 @@ int wc_ed25519_verify_msg_ex(const byte*
+                                          (context == NULL && contextLen != 0))
+         return BAD_FUNC_ARG;
+ 
++    if ((type == Ed25519ph) &&
++        (msgLen != WC_SHA512_DIGEST_SIZE))
++    {
++        return BAD_LENGTH_E;
++    }
++
+ #ifdef WOLF_CRYPTO_CB
+     if (key->devId != INVALID_DEVID) {
+         ret = wc_CryptoCb_Ed25519Verify(sig, sigLen, msg, msgLen, res, key,
+Index: wolfssl-5.7.2/wolfcrypt/src/ed448.c
+===================================================================
+--- wolfssl-5.7.2.orig/wolfcrypt/src/ed448.c
++++ wolfssl-5.7.2/wolfcrypt/src/ed448.c
+@@ -374,6 +374,11 @@ int wc_ed448_sign_msg_ex(const byte* in,
+         ret = BAD_FUNC_ARG;
+     }
+ 
++    if ((ret == 0) && (type == Ed448ph) && (inLen != ED448_PREHASH_SIZE))
++    {
++        ret = BAD_LENGTH_E;
++    }
++
+     /* check and set up out length */
+     if ((ret == 0) && (*outLen < ED448_SIG_SIZE)) {
+         *outLen = ED448_SIG_SIZE;
+@@ -799,6 +804,12 @@ int wc_ed448_verify_msg_ex(const byte* s
+     if (key == NULL)
+         return BAD_FUNC_ARG;
+ 
++    if ((type == Ed448ph) &&
++        (msgLen != ED448_PREHASH_SIZE))
++    {
++        return BAD_LENGTH_E;
++    }
++
+ #ifdef WOLFSSL_ED448_PERSISTENT_SHA
+     sha = &key->sha;
+ #else
+Index: wolfssl-5.7.2/wolfcrypt/src/hash.c
+===================================================================
+--- wolfssl-5.7.2.orig/wolfcrypt/src/hash.c
++++ wolfssl-5.7.2/wolfcrypt/src/hash.c
+@@ -405,6 +405,12 @@ int wc_HashGetDigestSize(enum wc_HashTyp
+         #endif
+             break;
+         case WC_HASH_TYPE_BLAKE2B:
++        #if defined(HAVE_BLAKE2B)
++            dig_size = BLAKE2B_OUTBYTES;
++        #else
++            dig_size = HASH_TYPE_E;
++        #endif
++            break;
+         case WC_HASH_TYPE_BLAKE2S:
+         #if defined(HAVE_BLAKE2) || defined(HAVE_BLAKE2S)
+             dig_size = BLAKE2S_OUTBYTES;
+@@ -524,6 +530,12 @@ int wc_HashGetBlockSize(enum wc_HashType
+         #endif
+             break;
+         case WC_HASH_TYPE_BLAKE2B:
++        #if defined(HAVE_BLAKE2B)
++            block_size = BLAKE2B_BLOCKBYTES;
++        #else
++            block_size = HASH_TYPE_E;
++        #endif
++            break;
+         case WC_HASH_TYPE_BLAKE2S:
+         #if defined(HAVE_BLAKE2) || defined(HAVE_BLAKE2S)
+             block_size = BLAKE2S_BLOCKBYTES;
+Index: wolfssl-5.7.2/wolfcrypt/src/pkcs7.c
+===================================================================
+--- wolfssl-5.7.2.orig/wolfcrypt/src/pkcs7.c
++++ wolfssl-5.7.2/wolfcrypt/src/pkcs7.c
+@@ -4107,6 +4107,12 @@ static int wc_PKCS7_EcdsaVerify(PKCS7* p
+     if (pkcs7 == NULL || sig == NULL)
+         return BAD_FUNC_ARG;
+ 
++    /* Check hash length */
++    if ((hashSz > WC_MAX_DIGEST_SIZE) ||
++        (hashSz < WC_MIN_DIGEST_SIZE)) {
++        return BAD_LENGTH_E;
++    }
++
+ #ifdef WOLFSSL_SMALL_STACK
+     digest = (byte*)XMALLOC(MAX_PKCS7_DIGEST_SZ, pkcs7->heap,
+                             DYNAMIC_TYPE_TMP_BUFFER);
+Index: wolfssl-5.7.2/wolfcrypt/src/signature.c
+===================================================================
+--- wolfssl-5.7.2.orig/wolfcrypt/src/signature.c
++++ wolfssl-5.7.2/wolfcrypt/src/signature.c
+@@ -151,6 +151,35 @@ int wc_SignatureVerifyHash(
+         WOLFSSL_MSG("wc_SignatureVerify: Invalid hash type/len");
+         return ret;
+     }
++
++#if !defined(NO_RSA) && !defined(WOLFSSL_RSA_PUBLIC_ONLY)
++    /* For WC_SIGNATURE_TYPE_RSA_W_ENC, we need to extract the actual size of
++     * the ASN.1-encoded hash.
++     */
++    if (sig_type == WC_SIGNATURE_TYPE_RSA_W_ENC) {
++        int hash_dec_len;
++        word32 idx = 0;
++        if (GetSequence(hash_data, &idx, &hash_dec_len, hash_len) < 0)
++            return ASN_PARSE_E;
++        /* skip the AlgorithmIdentifier */
++        if (GetSequence(hash_data, &idx, &hash_dec_len, hash_len) < 0)
++            return ASN_PARSE_E;
++        idx += (word32)hash_dec_len;
++        /* now sitting at the OCTET STRING containing the digest */
++        if (GetOctetString(hash_data, &idx, &hash_dec_len, hash_len) < 0)
++            return ASN_PARSE_E;
++        if (hash_dec_len != ret)
++            return BAD_LENGTH_E;
++    }
++    else
++#endif
++    {
++        if (hash_len != (word32)ret) {
++            WOLFSSL_MSG("wc_SignatureVerify: Invalid hash size");
++            return BAD_LENGTH_E;
++        }
++    }
++
+     ret = 0;
+ 
+     /* Verify signature using hash */
+Index: wolfssl-5.7.2/wolfssl/wolfcrypt/hash.h
+===================================================================
+--- wolfssl-5.7.2.orig/wolfssl/wolfcrypt/hash.h
++++ wolfssl-5.7.2/wolfssl/wolfcrypt/hash.h
+@@ -156,6 +156,87 @@ typedef union {
+     #define WC_MAX_BLOCK_SIZE  128
+ #endif
+ 
++#if defined(WC_HASH_CUSTOM_MAX_DIGEST_SIZE) && \
++    defined(WC_HASH_CUSTOM_MIN_DIGEST_SIZE)
++    #if WC_HASH_CUSTOM_MAX_DIGEST_SIZE < \
++        WC_HASH_CUSTOM_MIN_DIGEST_SIZE
++        #error HASH_CUSTOM_MAX_DIGEST_SIZE < WC_HASH_CUSTOM_MIN_DIGEST_SIZE
++    #endif
++#endif
++#ifdef WC_HASH_CUSTOM_MAX_DIGEST_SIZE
++    #undef WC_MAX_DIGEST_SIZE
++    #define WC_MAX_DIGEST_SIZE WC_HASH_CUSTOM_MAX_DIGEST_SIZE
++#endif
++#ifdef WC_HASH_CUSTOM_MAX_BLOCK_SIZE
++    #undef WC_MAX_BLOCK_SIZE
++    #define WC_MAX_BLOCK_SIZE WC_HASH_CUSTOM_MAX_BLOCK_SIZE
++#endif
++
++/* wolfssl 5.7.2 md2.h/md4.h predate the WC_-prefixed digest-size names used by
++ * the cascade below (they define only MD2_DIGEST_SIZE/MD4_DIGEST_SIZE). Provide
++ * the WC_-prefixed aliases so the upstream enforcement compiles unchanged. */
++#if defined(WOLFSSL_MD2) && !defined(WC_MD2_DIGEST_SIZE)
++    #define WC_MD2_DIGEST_SIZE 16
++#endif
++#if !defined(NO_MD4) && !defined(WC_MD4_DIGEST_SIZE)
++    #define WC_MD4_DIGEST_SIZE 16
++#endif
++#if defined(WC_HASH_CUSTOM_MIN_DIGEST_SIZE)
++    #if defined(WC_FIPS_186_5_PLUS) && \
++            (WC_HASH_CUSTOM_MIN_DIGEST_SIZE < 224 / 8)
++        #error FIPS 186-5 requires a minimum hash size >= SHA-224.
++    #elif defined(WC_FIPS_186_4) && \
++            (WC_HASH_CUSTOM_MIN_DIGEST_SIZE < 160 / 8)
++        #error FIPS 186-4 requires a minimum hash size >= SHA-1.
++    #elif (WC_HASH_CUSTOM_MIN_DIGEST_SIZE < 128 / 8)
++        #error WC_HASH_CUSTOM_MIN_DIGEST_SIZE is too small.
++    #endif
++    /* Let the user override the minimum digest size */
++    #define WC_MIN_DIGEST_SIZE WC_HASH_CUSTOM_MIN_DIGEST_SIZE
++#elif defined(WOLFSSL_MD2) && !defined(WC_FIPS_186_4_PLUS)
++    #define WC_MIN_DIGEST_SIZE WC_MD2_DIGEST_SIZE /* 16 */
++#elif !defined(NO_MD4) && !defined(WC_FIPS_186_4_PLUS)
++    #define WC_MIN_DIGEST_SIZE WC_MD4_DIGEST_SIZE /* 16 */
++#elif !defined(NO_MD5) && !defined(WC_FIPS_186_4_PLUS)
++    #define WC_MIN_DIGEST_SIZE WC_MD5_DIGEST_SIZE /* 16 */
++#elif !defined(NO_SHA) && !defined(WC_FIPS_186_5_PLUS)
++    #define WC_MIN_DIGEST_SIZE WC_SHA_DIGEST_SIZE /* 20 */
++#elif defined(WOLFSSL_SHA224)
++    #define WC_MIN_DIGEST_SIZE WC_SHA224_DIGEST_SIZE
++#elif !defined(HAVE_FIPS) && !defined(HAVE_SELFTEST) && \
++    defined(WOLFSSL_SHA512) && !defined(WOLFSSL_NOSHA512_224)
++    #define WC_MIN_DIGEST_SIZE WC_SHA512_224_DIGEST_SIZE
++#elif defined(WOLFSSL_SHA3) && !defined(WOLFSSL_NOSHA3_224)
++    #define WC_MIN_DIGEST_SIZE WC_SHA3_224_DIGEST_SIZE
++#elif !defined(NO_SHA256)
++    #define WC_MIN_DIGEST_SIZE WC_SHA256_DIGEST_SIZE
++#elif !defined(HAVE_FIPS) && !defined(HAVE_SELFTEST) && \
++    defined(WOLFSSL_SHA512) && !defined(WOLFSSL_NOSHA512_256)
++    #define WC_MIN_DIGEST_SIZE WC_SHA512_256_DIGEST_SIZE
++#elif defined(WOLFSSL_SHA3) && !defined(WOLFSSL_NOSHA3_256)
++    #define WC_MIN_DIGEST_SIZE WC_SHA3_256_DIGEST_SIZE
++#elif defined(HAVE_BLAKE2S)
++    #define WC_MIN_DIGEST_SIZE BLAKE2S_OUTBYTES /* 32 */
++#elif defined(WOLFSSL_SM3)
++    #define WC_MIN_DIGEST_SIZE WC_SM3_DIGEST_SIZE /* 32 */
++#elif defined(WOLFSSL_SHA384)
++    #define WC_MIN_DIGEST_SIZE WC_SHA384_DIGEST_SIZE
++#elif defined(WOLFSSL_SHA3) && !defined(WOLFSSL_NOSHA3_384)
++    #define WC_MIN_DIGEST_SIZE WC_SHA3_384_DIGEST_SIZE
++#elif defined(WOLFSSL_SHA512)
++    #define WC_MIN_DIGEST_SIZE WC_SHA512_DIGEST_SIZE
++#elif defined(WOLFSSL_SHA3) && !defined(WOLFSSL_NOSHA3_512)
++    #define WC_MIN_DIGEST_SIZE WC_SHA3_512_DIGEST_SIZE
++#elif defined(HAVE_BLAKE2B)
++    #define WC_MIN_DIGEST_SIZE BLAKE2B_OUTBYTES /* 64 */
++#elif defined(WOLFSSL_SHAKE128) || defined(WOLFSSL_SHAKE256)
++    #error SHAKE enabled without SHA-3.
++    #define WC_MIN_DIGEST_SIZE 64
++#else
++    #error No builtin hashes enabled and no WC_HASH_CUSTOM_MIN_DIGEST_SIZE.
++    #define WC_MIN_DIGEST_SIZE 64
++#endif
++
+ #if !defined(NO_ASN) || !defined(NO_DH) || defined(HAVE_ECC)
+ WOLFSSL_API int wc_HashGetOID(enum wc_HashType hash_type);
+ WOLFSSL_API enum wc_HashType wc_OidGetHash(int oid);
+Index: wolfssl-5.7.2/wolfssl/wolfcrypt/settings.h
+===================================================================
+--- wolfssl-5.7.2.orig/wolfssl/wolfcrypt/settings.h
++++ wolfssl-5.7.2/wolfssl/wolfcrypt/settings.h
+@@ -460,6 +460,29 @@
+     #define SIZEOF_LONG_LONG 8
+ #endif
+ 
++#if defined(HAVE_FIPS) && !defined(WC_FIPS_186_5) && !defined(WC_FIPS_186_4)
++    #if FIPS_VERSION3_GE(7,0,0)
++        #ifndef WC_FIPS_186_5
++            #define WC_FIPS_186_5
++        #endif
++    #else
++        #ifndef WC_FIPS_186_4
++            #define WC_FIPS_186_4
++        #endif
++    #endif
++#endif
++#if defined(WC_FIPS_186_4) && defined(WC_FIPS_186_5)
++    #error Conflicting FIPS 186 settings.
++#endif
++#if (defined(WC_FIPS_186_4) || defined(WC_FIPS_186_5)) && \
++        !defined(WC_FIPS_186_4_PLUS)
++    #define WC_FIPS_186_4_PLUS
++#endif
++#if defined(WC_FIPS_186_5) && !defined(WC_FIPS_186_5_PLUS)
++    #define WC_FIPS_186_5_PLUS
++#endif
++
++
+ #ifdef HAVE_NETX
+     #ifdef NEED_THREADX_TYPES
+         #include <types.h>
diff -Nru wolfssl-5.7.2/debian/patches/CVE-2026-5194.patch wolfssl-5.7.2/debian/patches/CVE-2026-5194.patch
--- wolfssl-5.7.2/debian/patches/CVE-2026-5194.patch	1970-01-01 01:00:00.000000000 +0100
+++ wolfssl-5.7.2/debian/patches/CVE-2026-5194.patch	2026-07-05 23:33:37.000000000 +0200
@@ -0,0 +1,142 @@
+Description: CVE-2026-5194 - require certificate signature OID to match issuer key OID
+Origin: upstream, https://github.com/wolfSSL/wolfssl/commit/abce5be989ccd0665e2b9445abb856886975dfd1
+Bug-Debian: https://security-tracker.debian.org/tracker/CVE-2026-5194
+Forwarded: not-needed
+Author: wolfSSL
+Last-Update: 2026-06-29
+
+Index: wolfssl-5.7.2/wolfcrypt/src/asn.c
+===================================================================
+--- wolfssl-5.7.2.orig/wolfcrypt/src/asn.c
++++ wolfssl-5.7.2/wolfcrypt/src/asn.c
+@@ -16545,6 +16545,118 @@ static int HashForSignature(const byte*
+ }
+ #endif /* !NO_ASN_CRYPT && !NO_HASH_WRAPPER */
+ 
++/* The certificate's signatureAlgorithm (sigOID) must match the issuer's
++ * key type (keyOID). sigOID picks the pre-hash; keyOID picks the
++ * verifier. They need to agree or the verifier gets the wrong input. */
++static int SigOidMatchesKeyOid(word32 sigOID, word32 keyOID)
++{
++    switch (keyOID) {
++    #ifndef NO_RSA
++        case RSAk:
++            switch (sigOID) {
++                case CTC_MD2wRSA:
++                case CTC_MD5wRSA:
++                case CTC_SHAwRSA:
++                case CTC_SHA224wRSA:
++                case CTC_SHA256wRSA:
++                case CTC_SHA384wRSA:
++                case CTC_SHA512wRSA:
++                case CTC_SHA3_224wRSA:
++                case CTC_SHA3_256wRSA:
++                case CTC_SHA3_384wRSA:
++                case CTC_SHA3_512wRSA:
++                case CTC_RSASSAPSS:
++                    return 1;
++            }
++            return 0;
++        #ifdef WC_RSA_PSS
++        case RSAPSSk:
++            return (sigOID == CTC_RSASSAPSS);
++        #endif
++    #endif
++    #if !defined(NO_DSA) && !defined(HAVE_SELFTEST)
++        case DSAk:
++            switch (sigOID) {
++                case CTC_SHAwDSA:
++                case CTC_SHA256wDSA:
++                    return 1;
++            }
++            return 0;
++    #endif
++    #if defined(HAVE_ECC) && defined(HAVE_ECC_VERIFY)
++        case ECDSAk:
++        #if defined(WOLFSSL_SM2) && defined(WOLFSSL_SM3)
++        case SM2k:
++        #endif
++            switch (sigOID) {
++                case CTC_SHAwECDSA:
++                case CTC_SHA224wECDSA:
++                case CTC_SHA256wECDSA:
++                case CTC_SHA384wECDSA:
++                case CTC_SHA512wECDSA:
++                case CTC_SHA3_224wECDSA:
++                case CTC_SHA3_256wECDSA:
++                case CTC_SHA3_384wECDSA:
++                case CTC_SHA3_512wECDSA:
++            #if defined(WOLFSSL_SM2) && defined(WOLFSSL_SM3)
++                case CTC_SM3wSM2:
++            #endif
++                    return 1;
++            }
++            return 0;
++    #endif
++    #if defined(HAVE_ED25519) && defined(HAVE_ED25519_KEY_IMPORT)
++        case ED25519k:
++            return (sigOID == CTC_ED25519);
++    #endif
++    #if defined(HAVE_ED448) && defined(HAVE_ED448_KEY_IMPORT)
++        case ED448k:
++            return (sigOID == CTC_ED448);
++    #endif
++    #if defined(HAVE_FALCON)
++        case FALCON_LEVEL1k:
++            return (sigOID == CTC_FALCON_LEVEL1);
++        case FALCON_LEVEL5k:
++            return (sigOID == CTC_FALCON_LEVEL5);
++    #endif
++    #if defined(HAVE_DILITHIUM) && !defined(WOLFSSL_DILITHIUM_NO_VERIFY) && \
++        !defined(WOLFSSL_DILITHIUM_NO_ASN1)
++        #ifdef WOLFSSL_DILITHIUM_FIPS204_DRAFT
++        case DILITHIUM_LEVEL2k:
++            return (sigOID == CTC_DILITHIUM_LEVEL2);
++        case DILITHIUM_LEVEL3k:
++            return (sigOID == CTC_DILITHIUM_LEVEL3);
++        case DILITHIUM_LEVEL5k:
++            return (sigOID == CTC_DILITHIUM_LEVEL5);
++        #endif
++        case ML_DSA_LEVEL2k:
++            return (sigOID == CTC_ML_DSA_LEVEL2);
++        case ML_DSA_LEVEL3k:
++            return (sigOID == CTC_ML_DSA_LEVEL3);
++        case ML_DSA_LEVEL5k:
++            return (sigOID == CTC_ML_DSA_LEVEL5);
++    #endif
++    #if defined(HAVE_SPHINCS)
++        case SPHINCS_FAST_LEVEL1k:
++            return (sigOID == CTC_SPHINCS_FAST_LEVEL1);
++        case SPHINCS_FAST_LEVEL3k:
++            return (sigOID == CTC_SPHINCS_FAST_LEVEL3);
++        case SPHINCS_FAST_LEVEL5k:
++            return (sigOID == CTC_SPHINCS_FAST_LEVEL5);
++        case SPHINCS_SMALL_LEVEL1k:
++            return (sigOID == CTC_SPHINCS_SMALL_LEVEL1);
++        case SPHINCS_SMALL_LEVEL3k:
++            return (sigOID == CTC_SPHINCS_SMALL_LEVEL3);
++        case SPHINCS_SMALL_LEVEL5k:
++            return (sigOID == CTC_SPHINCS_SMALL_LEVEL5);
++    #endif
++    }
++
++    /* Default to reject unknown key types */
++    (void)sigOID;
++    return 0;
++}
++
+ /* Return codes: 0=Success, Negative (see error-crypt.h), ASN_SIG_CONFIRM_E */
+ static int ConfirmSignature(SignatureCtx* sigCtx,
+     const byte* buf, word32 bufSz,
+@@ -16610,6 +16722,11 @@ static int ConfirmSignature(SignatureCtx
+ 
+         case SIG_STATE_HASH:
+         {
++            if (!SigOidMatchesKeyOid(sigOID, keyOID)) {
++                WOLFSSL_MSG("sigOID incompatible with issuer keyOID");
++                ERROR_OUT(ASN_SIG_OID_E, exit_cs);
++            }
++
+         #if !defined(NO_RSA) && defined(WC_RSA_PSS)
+             if (sigOID == RSAPSSk) {
+                 word32 fakeSigOID = 0;
diff -Nru wolfssl-5.7.2/debian/patches/CVE-2026-55960.patch wolfssl-5.7.2/debian/patches/CVE-2026-55960.patch
--- wolfssl-5.7.2/debian/patches/CVE-2026-55960.patch	1970-01-01 01:00:00.000000000 +0100
+++ wolfssl-5.7.2/debian/patches/CVE-2026-55960.patch	2026-07-05 23:40:41.000000000 +0200
@@ -0,0 +1,61 @@
+Description: CVE-2026-55960 - validate negotiated certificate type for raw public keys
+Origin: upstream, https://github.com/wolfSSL/wolfssl/commit/c929798460656431bdeeffbf701a74521f403f36
+Bug-Debian: https://security-tracker.debian.org/tracker/CVE-2026-55960
+Author: wolfSSL
+Forwarded: not-needed
+---
+Index: wolfssl-5.7.2/src/internal.c
+===================================================================
+--- wolfssl-5.7.2.orig/src/internal.c
++++ wolfssl-5.7.2/src/internal.c
+@@ -14146,31 +14146,29 @@ PRAGMA_GCC_DIAG_POP
+     ret = ParseCertRelative(args->dCert, certType, verify, SSL_CM(ssl), extraSigners);
+ 
+ #if defined(HAVE_RPK)
+-    /* if cert type has negotiated with peer, confirm the cert received has
+-     * the same type.
+-     */
+-    if (ret == 0 ) {
+-        if (ssl->options.side ==  WOLFSSL_CLIENT_END) {
+-            if (ssl->options.rpkState.received_ServerCertTypeCnt == 1) {
++    /* Confirm the received certificate's form (X.509 vs raw public key) matches
++     * the type negotiated with the peer. A raw public key (RFC 7250) has no
++     * chain, so ParseCertRelative() accepts it without any trust verification;
++     * it must only be accepted when RPK was negotiated for this peer. When no
++     * type was negotiated the default is X.509 (RFC 7250/8446), so an
++     * un-negotiated bare key is rejected. The negotiated type is the received
++     * server cert type (client) or the selected client cert type (server). */
++    if (ret == 0) {
++        cType = WOLFSSL_CERT_TYPE_X509;
++        if (ssl->options.side == WOLFSSL_CLIENT_END) {
++            if (ssl->options.rpkState.received_ServerCertTypeCnt == 1)
+                 cType = ssl->options.rpkState.received_ServerCertTypes[0];
+-                if ((cType == WOLFSSL_CERT_TYPE_RPK && !args->dCert->isRPK) ||
+-                    (cType == WOLFSSL_CERT_TYPE_X509 && args->dCert->isRPK)) {
+-                    /* cert type mismatch */
+-                    WOLFSSL_MSG("unsupported certificate type received");
+-                    ret = UNSUPPORTED_CERTIFICATE;
+-                }
+-            }
+         }
+         else if (ssl->options.side == WOLFSSL_SERVER_END) {
+-            if (ssl->options.rpkState.received_ClientCertTypeCnt == 1) {
++            if (ssl->options.rpkState.sending_ClientCertTypeCnt == 1)
+                 cType = ssl->options.rpkState.sending_ClientCertTypes[0];
+-                if ((cType == WOLFSSL_CERT_TYPE_RPK && !args->dCert->isRPK) ||
+-                    (cType == WOLFSSL_CERT_TYPE_X509 && args->dCert->isRPK)) {
+-                    /* cert type mismatch */
+-                    WOLFSSL_MSG("unsupported certificate type received");
+-                    ret = UNSUPPORTED_CERTIFICATE;
+-                }
+-            }
++        }
++
++        if ((cType == WOLFSSL_CERT_TYPE_RPK && !args->dCert->isRPK) ||
++            (cType != WOLFSSL_CERT_TYPE_RPK && args->dCert->isRPK)) {
++            /* cert type mismatch - includes an un-negotiated raw public key */
++            WOLFSSL_MSG("unsupported certificate type received");
++            ret = UNSUPPORTED_CERTIFICATE;
+         }
+     }
+ #endif /* HAVE_RPK */
diff -Nru wolfssl-5.7.2/debian/patches/CVE-2026-55961.patch wolfssl-5.7.2/debian/patches/CVE-2026-55961.patch
--- wolfssl-5.7.2/debian/patches/CVE-2026-55961.patch	1970-01-01 01:00:00.000000000 +0100
+++ wolfssl-5.7.2/debian/patches/CVE-2026-55961.patch	2026-07-05 23:37:14.000000000 +0200
@@ -0,0 +1,31 @@
+Description: CVE-2026-55961 - reject degenerate certs-only PKCS#7 in wolfSSL_PKCS7_verify
+Origin: upstream, https://github.com/wolfSSL/wolfssl/commit/d382439c7c63c07294cf4fcece0aa56a35399d15
+Bug-Debian: https://security-tracker.debian.org/tracker/CVE-2026-55961
+Forwarded: not-needed
+Author: wolfSSL
+Last-Update: 2026-06-29
+
+Index: wolfssl-5.7.2/src/ssl_p7p12.c
+===================================================================
+--- wolfssl-5.7.2.orig/src/ssl_p7p12.c
++++ wolfssl-5.7.2/src/ssl_p7p12.c
+@@ -806,6 +806,19 @@ int wolfSSL_PKCS7_verify(PKCS7* pkcs7, W
+     if (ret != 0)
+         return WOLFSSL_FAILURE;
+ 
++    /* Reject a degenerate (certs-only) PKCS#7 with no verified signer. Such an
++     * object has empty signerInfos, so wc_PKCS7_VerifySignedData() succeeds
++     * without authenticating the content. pkcs7.verifyCert is only set once a
++     * signer's signature has actually been verified, so a NULL value here means
++     * the content carries no valid signature and must not be reported as
++     * verified - regardless of PKCS7_NOVERIFY, which only suppresses signer
++     * certificate chain validation, not the requirement that a signature exist.
++     */
++    if (p7->pkcs7.verifyCert == NULL) {
++        WOLFSSL_MSG("PKCS7 has no verified signer (degenerate/certs-only)");
++        return WOLFSSL_FAILURE;
++    }
++
+     if ((flags & PKCS7_NOVERIFY) != PKCS7_NOVERIFY) {
+         /* Verify signer certificates */
+         if (store == NULL || store->cm == NULL) {
diff -Nru wolfssl-5.7.2/debian/patches/CVE-2026-55962.patch wolfssl-5.7.2/debian/patches/CVE-2026-55962.patch
--- wolfssl-5.7.2/debian/patches/CVE-2026-55962.patch	1970-01-01 01:00:00.000000000 +0100
+++ wolfssl-5.7.2/debian/patches/CVE-2026-55962.patch	2026-07-05 23:33:37.000000000 +0200
@@ -0,0 +1,44 @@
+Description: CVE-2026-55962 - require client cert on outstanding TLS1.3 post-handshake auth
+Origin: upstream, https://github.com/wolfSSL/wolfssl/commit/f23544f09476d420becdfabd781eec0dd1a9c597
+Bug-Debian: https://security-tracker.debian.org/tracker/CVE-2026-55962
+Forwarded: not-needed
+Author: wolfSSL
+Last-Update: 2026-06-29
+
+Index: wolfssl-5.7.2/src/tls13.c
+===================================================================
+--- wolfssl-5.7.2.orig/src/tls13.c
++++ wolfssl-5.7.2/src/tls13.c
+@@ -10649,7 +10649,10 @@ int DoTls13Finished(WOLFSSL* ssl, const
+ #endif
+         if (
+         #ifdef WOLFSSL_POST_HANDSHAKE_AUTH
+-            !ssl->options.verifyPostHandshake &&
++            /* Exempt only the initial handshake; a pending post-handshake
++             * CertificateRequest (certReqCtx != NULL) still requires a peer
++             * certificate and a valid CertificateVerify. */
++            (!ssl->options.verifyPostHandshake || ssl->certReqCtx != NULL) &&
+         #endif
+             (!ssl->options.havePeerCert || !ssl->options.havePeerVerify)) {
+             ret = NO_PEER_CERT; /* NO_PEER_VERIFY */
+@@ -12228,7 +12231,19 @@ static int SanityCheckTls13MsgReceived(W
+                  */
+                 if (ssl->options.verifyPeer &&
+                 #ifdef WOLFSSL_POST_HANDSHAKE_AUTH
+-                    !ssl->options.verifyPostHandshake &&
++                    /* The post-handshake-auth exemption is only valid during
++                     * the initial handshake. On the server, once a
++                     * post-handshake CertificateRequest is outstanding
++                     * (certReqCtx != NULL), a Certificate is required again.
++                     * Scoped to the server: certReqCtx means something
++                     * different on the client (a received request) and the
++                     * client does not process an inbound Finished in that
++                     * state. Whether an empty Certificate is then accepted
++                     * follows the verify mode (FAIL_IF_NO_PEER_CERT), exactly
++                     * as for first-handshake client authentication. */
++                    (!ssl->options.verifyPostHandshake ||
++                     (ssl->options.side == WOLFSSL_SERVER_END &&
++                      ssl->certReqCtx != NULL)) &&
+                 #endif
+                                            !ssl->msgsReceived.got_certificate) {
+                     WOLFSSL_MSG("Finished received out of order - "
diff -Nru wolfssl-5.7.2/debian/patches/CVE-2026-55967.patch wolfssl-5.7.2/debian/patches/CVE-2026-55967.patch
--- wolfssl-5.7.2/debian/patches/CVE-2026-55967.patch	1970-01-01 01:00:00.000000000 +0100
+++ wolfssl-5.7.2/debian/patches/CVE-2026-55967.patch	2026-07-05 23:33:37.000000000 +0200
@@ -0,0 +1,49 @@
+Description: CVE-2026-55967 - reject AES-GCM cumulative size overflow in streaming update
+Origin: upstream, https://github.com/wolfSSL/wolfssl/commit/5def276e07e23b7b3b5842afbe526b4d3703ce13
+Bug-Debian: https://security-tracker.debian.org/tracker/CVE-2026-55967
+Forwarded: not-needed
+Author: wolfSSL
+Last-Update: 2026-06-29
+
+Index: wolfssl-5.7.2/wolfcrypt/src/aes.c
+===================================================================
+--- wolfssl-5.7.2.orig/wolfcrypt/src/aes.c
++++ wolfssl-5.7.2/wolfcrypt/src/aes.c
+@@ -10001,6 +10001,18 @@ int wc_AesGcmEncryptUpdate(Aes* aes, byt
+         ret = MISSING_IV;
+     }
+ 
++    /* Prevent overflow of aes->cSz and ->aSz.  Per NIST SP 800-38D section
++     * 5.2.1.1, the maximum allowed ciphertext limit is 2^32 - 2 blocks, but we
++     * currently pass around the cunulative sizes in bytes as word32s, so we
++     * can't currently support the maximum allowed.
++     */
++    if ((ret == 0) &&
++        (((aes->cSz > 0xffffffff - sz)) ||
++         ((aes->aSz > 0xffffffff - authInSz))))
++    {
++        ret = AES_GCM_OVERFLOW_E;
++    }
++
+     if ((ret == 0) && aes->ctrSet && (aes->aSz == 0) && (aes->cSz == 0)) {
+         aes->invokeCtr[0]++;
+         if (aes->invokeCtr[0] == 0) {
+@@ -10147,6 +10159,18 @@ int wc_AesGcmDecryptUpdate(Aes* aes, byt
+         ret = MISSING_IV;
+     }
+ 
++    /* Prevent overflow of aes->cSz and ->aSz.  Per NIST SP 800-38D section
++     * 5.2.1.1, the maximum allowed ciphertext limit is 2^32 - 2 blocks, but we
++     * currently pass around the cunulative sizes in bytes as word32s, so we
++     * can't currently support the maximum allowed.
++     */
++    if ((ret == 0) &&
++        (((aes->cSz > 0xffffffff - sz)) ||
++         ((aes->aSz > 0xffffffff - authInSz))))
++    {
++        ret = AES_GCM_OVERFLOW_E;
++    }
++
+     if (ret == 0) {
+         /* Decrypt with AAD and/or cipher text. */
+     #ifdef WOLFSSL_AESNI
diff -Nru wolfssl-5.7.2/debian/patches/CVE-2026-6092.patch wolfssl-5.7.2/debian/patches/CVE-2026-6092.patch
--- wolfssl-5.7.2/debian/patches/CVE-2026-6092.patch	1970-01-01 01:00:00.000000000 +0100
+++ wolfssl-5.7.2/debian/patches/CVE-2026-6092.patch	2026-07-05 23:33:37.000000000 +0200
@@ -0,0 +1,39 @@
+Description: CVE-2026-6092 - enforce Encrypt-then-MAC on TLS resumption path
+Origin: upstream, https://github.com/wolfSSL/wolfssl/commit/af5369636a938faf4a79d1f550d3b206c51fafec
+Bug-Debian: https://security-tracker.debian.org/tracker/CVE-2026-6092
+Forwarded: not-needed
+Author: wolfSSL
+Last-Update: 2026-06-29
+
+Index: wolfssl-5.7.2/src/internal.c
+===================================================================
+--- wolfssl-5.7.2.orig/src/internal.c
++++ wolfssl-5.7.2/src/internal.c
+@@ -37052,13 +37052,21 @@ static int DoSessionTicket(WOLFSSL* ssl,
+ 
+ #if defined(HAVE_TLS_EXTENSIONS) && defined(HAVE_ENCRYPT_THEN_MAC) && \
+     !defined(WOLFSSL_AEAD_ONLY)
+-            if (ssl->options.encThenMac && ssl->specs.cipher_type == block) {
+-                ret = TLSX_EncryptThenMac_Respond(ssl);
+-                if (ret != 0)
+-                    goto out;
++            /* Only respond to ETM here when resumption actually succeeded;
++             * HandleTlsResumption populates ssl->specs via SetCipherSpecs only
++             * on the success path. If resumption failed, resuming has been
++             * cleared and ssl->specs.cipher_type is still zero-initialized,
++             * so we must defer the ETM decision until after MatchSuite. */
++            if (ssl->options.resuming) {
++                if (ssl->options.encThenMac &&
++                                          ssl->specs.cipher_type == block) {
++                    ret = TLSX_EncryptThenMac_Respond(ssl);
++                    if (ret != 0)
++                        goto out;
++                }
++                else
++                    ssl->options.encThenMac = 0;
+             }
+-            else
+-                ssl->options.encThenMac = 0;
+ #endif
+             if (ssl->options.clientState == CLIENT_KEYEXCHANGE_COMPLETE) {
+                 WOLFSSL_LEAVE("DoClientHello", ret);
diff -Nru wolfssl-5.7.2/debian/patches/CVE-2026-6094.patch wolfssl-5.7.2/debian/patches/CVE-2026-6094.patch
--- wolfssl-5.7.2/debian/patches/CVE-2026-6094.patch	1970-01-01 01:00:00.000000000 +0100
+++ wolfssl-5.7.2/debian/patches/CVE-2026-6094.patch	2026-07-05 23:33:37.000000000 +0200
@@ -0,0 +1,23 @@
+Description: CVE-2026-6094 - bound encrypted content size in PKCS7 EnvelopedData
+Origin: upstream, https://github.com/wolfSSL/wolfssl/commit/1397268aa12e2cf3f80c3acfa9b6036b809c08ef
+Bug-Debian: https://security-tracker.debian.org/tracker/CVE-2026-6094
+Forwarded: not-needed
+Author: wolfSSL
+Last-Update: 2026-06-29
+
+Index: wolfssl-5.7.2/wolfcrypt/src/pkcs7.c
+===================================================================
+--- wolfssl-5.7.2.orig/wolfcrypt/src/pkcs7.c
++++ wolfssl-5.7.2/wolfcrypt/src/pkcs7.c
+@@ -12393,6 +12393,11 @@ WOLFSSL_API int wc_PKCS7_DecodeEnveloped
+                 }
+ 
+             } else {
++                if ((idx + (word32)encryptedContentTotalSz) > pkiMsgSz) {
++                    ret = BUFFER_E;
++                    break;
++                }
++
+                 /* cache encrypted content, no OCTET STRING */
+                 ret = PKCS7_CacheEncryptedContent(pkcs7, &pkiMsg[idx],
+                                                   (word32)encryptedContentTotalSz);
diff -Nru wolfssl-5.7.2/debian/patches/CVE-2026-6325.patch wolfssl-5.7.2/debian/patches/CVE-2026-6325.patch
--- wolfssl-5.7.2/debian/patches/CVE-2026-6325.patch	1970-01-01 01:00:00.000000000 +0100
+++ wolfssl-5.7.2/debian/patches/CVE-2026-6325.patch	2026-07-05 23:34:07.000000000 +0200
@@ -0,0 +1,28 @@
+Description: CVE-2026-6325 - bound index in SetSuitesHashSigAlgo to prevent OOB write
+Origin: upstream, https://github.com/wolfSSL/wolfssl/commit/f540bb3ddfef89db637809392522247ce3e8200c
+Bug-Debian: https://security-tracker.debian.org/tracker/CVE-2026-6325
+Author: wolfSSL
+Forwarded: not-needed
+---
+Index: wolfssl-5.7.2/src/internal.c
+===================================================================
+--- wolfssl-5.7.2.orig/src/internal.c
++++ wolfssl-5.7.2/src/internal.c
+@@ -27378,6 +27378,17 @@ int SetSuitesHashSigAlgo(Suites* suites,
+                     break;
+                 }
+             }
++            {
++                word32 needed = 2;
++#if defined(WC_RSA_PSS) && defined(WOLFSSL_TLS13)
++                if (sig_alg == rsa_pss_sa_algo)
++                    needed = 4;
++#endif
++                if ((word32)idx + needed > WOLFSSL_MAX_SIGALGO) {
++                    ret = 0;
++                    break;
++                }
++            }
+             AddSuiteHashSigAlgo(suites->hashSigAlgo, mac_alg, sig_alg, 0, &idx);
+             sig_alg = 0;
+             mac_alg = no_mac;
diff -Nru wolfssl-5.7.2/debian/patches/CVE-2026-6329.patch wolfssl-5.7.2/debian/patches/CVE-2026-6329.patch
--- wolfssl-5.7.2/debian/patches/CVE-2026-6329.patch	1970-01-01 01:00:00.000000000 +0100
+++ wolfssl-5.7.2/debian/patches/CVE-2026-6329.patch	2026-07-05 23:33:37.000000000 +0200
@@ -0,0 +1,24 @@
+Description: CVE-2026-6329 - reject PKCS#12 MAC length mismatch
+Origin: upstream, https://github.com/wolfSSL/wolfssl/commit/9c304bdc099140ad2fdc41ef2f2602af9768c8a1
+Bug-Debian: https://security-tracker.debian.org/tracker/CVE-2026-6329
+Forwarded: not-needed
+Author: wolfSSL
+Last-Update: 2026-06-29
+
+Index: wolfssl-5.7.2/wolfcrypt/src/pkcs12.c
+===================================================================
+--- wolfssl-5.7.2.orig/wolfcrypt/src/pkcs12.c
++++ wolfssl-5.7.2/wolfcrypt/src/pkcs12.c
+@@ -652,6 +652,12 @@ static int wc_PKCS12_verify(WC_PKCS12* p
+         return ret;
+     }
+ 
++    if ((word32)ret != mac->digestSz) {
++        WOLFSSL_MSG("PKCS12 MAC digest size mismatch");
++        ForceZero(digest, sizeof(digest));
++        return MAC_CMP_FAILED_E;
++    }
++
+ #ifdef WOLFSSL_DEBUG_PKCS12
+     {
+         byte* p;
diff -Nru wolfssl-5.7.2/debian/patches/CVE-2026-6331.patch wolfssl-5.7.2/debian/patches/CVE-2026-6331.patch
--- wolfssl-5.7.2/debian/patches/CVE-2026-6331.patch	1970-01-01 01:00:00.000000000 +0100
+++ wolfssl-5.7.2/debian/patches/CVE-2026-6331.patch	2026-07-05 23:33:38.000000000 +0200
@@ -0,0 +1,26 @@
+Description: CVE-2026-6331 - require exact HMAC tag length in EVP_DigestVerifyFinal
+ A zero-length or truncated tag passed to wolfSSL_EVP_DigestVerifyFinal() was
+ accepted, because the length check only rejected oversized tags and an
+ XMEMCMP() of length zero returns a match. Require the supplied tag length to
+ equal the MAC length exactly.
+Origin: upstream, https://github.com/wolfSSL/wolfssl/commit/0749f20c33516897d8c5e2ab083b855e2d17d665
+Bug-Debian: https://security-tracker.debian.org/tracker/CVE-2026-6331
+Forwarded: not-needed
+Author: wolfSSL
+Last-Update: 2026-06-29
+
+Index: wolfssl-5.7.2/wolfcrypt/src/evp.c
+===================================================================
+--- wolfssl-5.7.2.orig/wolfcrypt/src/evp.c
++++ wolfssl-5.7.2/wolfcrypt/src/evp.c
+@@ -4636,9 +4636,8 @@ int wolfSSL_EVP_DigestVerifyFinal(WOLFSS
+ 
+         hashLen = wolfssl_mac_len(ctx->hash.hmac.macType);
+ 
+-        if (siglen > hashLen)
++        if (hashLen == 0 || siglen != hashLen)
+             return WOLFSSL_FAILURE;
+-        /* May be a truncated signature. */
+     }
+ 
+     if (wolfssl_evp_digest_pk_final(ctx, digest, &hashLen) <= 0)
diff -Nru wolfssl-5.7.2/debian/patches/CVE-2026-6450.patch wolfssl-5.7.2/debian/patches/CVE-2026-6450.patch
--- wolfssl-5.7.2/debian/patches/CVE-2026-6450.patch	1970-01-01 01:00:00.000000000 +0100
+++ wolfssl-5.7.2/debian/patches/CVE-2026-6450.patch	2026-07-05 23:39:35.000000000 +0200
@@ -0,0 +1,29 @@
+Description: CVE-2026-6450 - reject CRLs with unrecognized critical extensions
+Origin: upstream, https://github.com/wolfSSL/wolfssl/commit/857141da35b67a14a580fb26ec57af1efa68a1d9
+Bug-Debian: https://security-tracker.debian.org/tracker/CVE-2026-6450
+Author: wolfSSL
+Forwarded: not-needed
+Index: wolfssl-5.7.2/wolfcrypt/src/asn.c
+===================================================================
+--- wolfssl-5.7.2.orig/wolfcrypt/src/asn.c
++++ wolfssl-5.7.2/wolfcrypt/src/asn.c
+@@ -38426,14 +38426,17 @@ static int ParseCRL_Extensions(DecodedCR
+                 }
+             #endif
+             }
++            else if (critical) {
++                WOLFSSL_MSG("Unknown critical CRL extension");
++                ret = ASN_CRIT_EXT_E;
++            }
+             /* TODO: Parse CRL Number extension */
+-            /* TODO: check criticality */
+             /* Move index on to next extension. */
+             idx += (word32)length;
+         }
+     }
+ 
+-    if (ret < 0) {
++    if (ret < 0 && ret != ASN_CRIT_EXT_E) {
+         ret = ASN_PARSE_E;
+     }
+ 
diff -Nru wolfssl-5.7.2/debian/patches/CVE-2026-6678.patch wolfssl-5.7.2/debian/patches/CVE-2026-6678.patch
--- wolfssl-5.7.2/debian/patches/CVE-2026-6678.patch	1970-01-01 01:00:00.000000000 +0100
+++ wolfssl-5.7.2/debian/patches/CVE-2026-6678.patch	2026-07-05 23:33:38.000000000 +0200
@@ -0,0 +1,34 @@
+Description: CVE-2026-6678 - fix integer underflow in wc_PKCS7_DecryptOri
+Origin: upstream, https://github.com/wolfSSL/wolfssl/commit/84fb0f694cfaac4187c0beba4298a4a8a7995235
+Bug-Debian: https://security-tracker.debian.org/tracker/CVE-2026-6678
+Forwarded: not-needed
+Author: wolfSSL
+Last-Update: 2026-06-29
+
+Index: wolfssl-5.7.2/wolfcrypt/src/pkcs7.c
+===================================================================
+--- wolfssl-5.7.2.orig/wolfcrypt/src/pkcs7.c
++++ wolfssl-5.7.2/wolfcrypt/src/pkcs7.c
+@@ -10861,9 +10861,21 @@ static int wc_PKCS7_DecryptOri(PKCS7* pk
+             XMEMCPY(oriOID, pkiMsg + *idx, oriOIDSz);
+             *idx += oriOIDSz;
+ 
++            /* Validate OID did not consume more than the SEQUENCE declared */
++            if ((*idx - tmpIdx) > (word32)seqSz) {
++                WOLFSSL_MSG("ORI oriType OID exceeds SEQUENCE boundary");
++                return ASN_PARSE_E;
++            }
++
+             /* get oriValue, increment idx */
+             oriValue = pkiMsg + *idx;
+-            oriValueSz = seqSz - (*idx - tmpIdx);
++            oriValueSz = (word32)seqSz - (*idx - tmpIdx);
++
++            /* Validate oriValue region is within input buffer */
++            if (*idx > pkiMsgSz || oriValueSz > pkiMsgSz - *idx) {
++                WOLFSSL_MSG("ORI oriValue exceeds input buffer");
++                return ASN_PARSE_E;
++            }
+             *idx += oriValueSz;
+ 
+             /* pass oriOID and oriValue to user callback, expect back
diff -Nru wolfssl-5.7.2/debian/patches/CVE-2026-6681.patch wolfssl-5.7.2/debian/patches/CVE-2026-6681.patch
--- wolfssl-5.7.2/debian/patches/CVE-2026-6681.patch	1970-01-01 01:00:00.000000000 +0100
+++ wolfssl-5.7.2/debian/patches/CVE-2026-6681.patch	2026-07-05 23:33:38.000000000 +0200
@@ -0,0 +1,34 @@
+Description: CVE-2026-6681 - respect caller output buffer size in PKCS7 decode
+Origin: upstream, https://github.com/wolfSSL/wolfssl/commit/1de4020fe4f3f911641ac0477227249d4dda2157
+Bug-Debian: https://security-tracker.debian.org/tracker/CVE-2026-6681
+Forwarded: not-needed
+Author: wolfSSL
+Last-Update: 2026-06-29
+
+Index: wolfssl-5.7.2/wolfcrypt/src/pkcs7.c
+===================================================================
+--- wolfssl-5.7.2.orig/wolfcrypt/src/pkcs7.c
++++ wolfssl-5.7.2/wolfcrypt/src/pkcs7.c
+@@ -13632,6 +13632,10 @@ authenv_atrbend:
+             }
+ 
+             /* copy plaintext to output */
++            if ((word32)encryptedContentSz > outputSz) {
++                ret = BUFFER_E;
++                break;
++            }
+             XMEMCPY(output, encryptedContent, encryptedContentSz);
+ 
+             /* free memory, zero out keys */
+@@ -14284,6 +14288,11 @@ int wc_PKCS7_DecodeEncryptedData(PKCS7*
+                 }
+ 
+                 /* copy plaintext to output */
++                if ((word32)(encryptedContentSz - padLen) > outputSz) {
++                    XFREE(encryptedContent, pkcs7->heap, DYNAMIC_TYPE_PKCS7);
++                    ret = BUFFER_E;
++                    break;
++                }
+                 XMEMCPY(output, encryptedContent, encryptedContentSz - padLen);
+ 
+                 /* get implicit[1] unprotected attributes, optional */
diff -Nru wolfssl-5.7.2/debian/patches/CVE-2026-6731.patch wolfssl-5.7.2/debian/patches/CVE-2026-6731.patch
--- wolfssl-5.7.2/debian/patches/CVE-2026-6731.patch	1970-01-01 01:00:00.000000000 +0100
+++ wolfssl-5.7.2/debian/patches/CVE-2026-6731.patch	2026-07-05 23:33:38.000000000 +0200
@@ -0,0 +1,30 @@
+Description: CVE-2026-6731 - apply DNS name constraints to Subject CN when no SAN
+Origin: upstream, https://github.com/wolfSSL/wolfssl/commit/e7b7fddacb4cc794e5dfc7693586d87a539f5aad
+Bug-Debian: https://security-tracker.debian.org/tracker/CVE-2026-6731
+Forwarded: not-needed
+Author: wolfSSL
+Last-Update: 2026-06-29
+
+Index: wolfssl-5.7.2/wolfcrypt/src/asn.c
+===================================================================
+--- wolfssl-5.7.2.orig/wolfcrypt/src/asn.c
++++ wolfssl-5.7.2/wolfcrypt/src/asn.c
+@@ -18017,9 +18017,16 @@ static int ConfirmNameConstraints(Signer
+         XMEMSET(&subjectDnsName, 0, sizeof(DNS_entry));
+         switch (nameType) {
+             case ASN_DNS_TYPE:
+-                /* Should it also consider CN in subject? It could use
+-                 * subjectDnsName too */
+                 name = cert->altNames;
++
++                /* When no SAN is present, apply DNS name constraints to the
++                 * Subject CN. */
++                if (cert->subjectCN != NULL && cert->altNames == NULL) {
++                    subjectDnsName.next = NULL;
++                    subjectDnsName.type = ASN_DNS_TYPE;
++                    subjectDnsName.len  = cert->subjectCNLen;
++                    subjectDnsName.name = cert->subjectCN;
++                }
+                 break;
+             case ASN_RFC822_TYPE:
+                 /* Shouldn't it validate E= in subject as well? */
diff -Nru wolfssl-5.7.2/debian/patches/CVE-2026-7511.patch wolfssl-5.7.2/debian/patches/CVE-2026-7511.patch
--- wolfssl-5.7.2/debian/patches/CVE-2026-7511.patch	1970-01-01 01:00:00.000000000 +0100
+++ wolfssl-5.7.2/debian/patches/CVE-2026-7511.patch	2026-07-05 23:37:14.000000000 +0200
@@ -0,0 +1,59 @@
+Description: CVE-2026-7511 - report the verifying cert as the PKCS#7 signer
+Origin: upstream, https://github.com/wolfSSL/wolfssl/commit/b7f6e77a95bfeda306b22dd34394e49c0a6c8a8c
+Bug-Debian: https://security-tracker.debian.org/tracker/CVE-2026-7511
+Forwarded: not-needed
+Author: wolfSSL
+Last-Update: 2026-06-29
+
+Index: wolfssl-5.7.2/src/ssl_p7p12.c
+===================================================================
+--- wolfssl-5.7.2.orig/src/ssl_p7p12.c
++++ wolfssl-5.7.2/src/ssl_p7p12.c
+@@ -273,24 +273,42 @@ WOLFSSL_STACK* wolfSSL_PKCS7_get0_signer
+     WOLFSSL_X509* x509 = NULL;
+     WOLFSSL_STACK* signers = NULL;
+     WOLFSSL_PKCS7* p7 = (WOLFSSL_PKCS7*)pkcs7;
++    byte* signerCert;
++    word32 signerCertSz;
+ 
+     if (p7 == NULL)
+         return NULL;
+ 
+-    /* Only PKCS#7 messages with a single cert that is the verifying certificate
+-     * is supported.
+-     */
+     if (flags & PKCS7_NOINTERN) {
+         WOLFSSL_MSG("PKCS7_NOINTERN flag not supported");
+         return NULL;
+     }
+ 
++    /* Prefer the certificate that actually verified the signature. Falling
++     * back to singleCert (cert[0]) would let an attacker that bundles a
++     * trusted cert ahead of their own attacker cert have the trusted cert
++     * reported as the signer even though it did not produce the signature.
++     *
++     * Copy the chosen pointer into a local before passing its address to
++     * wolfSSL_d2i_X509; d2i_X509 advances *in by the DER length, and if
++     * we handed it the address of the struct field directly it would
++     * permanently corrupt the field, producing a heap-OOB read on the
++     * next use (pointer advanced, singleCertSz unchanged). */
++    if (p7->pkcs7.verifyCert != NULL && p7->pkcs7.verifyCertSz > 0) {
++        signerCert   = p7->pkcs7.verifyCert;
++        signerCertSz = p7->pkcs7.verifyCertSz;
++    }
++    else {
++        signerCert   = p7->pkcs7.singleCert;
++        signerCertSz = p7->pkcs7.singleCertSz;
++    }
++
+     signers = wolfSSL_sk_X509_new_null();
+     if (signers == NULL)
+         return NULL;
+ 
+-    if (wolfSSL_d2i_X509(&x509, (const byte**)&p7->pkcs7.singleCert,
+-                         p7->pkcs7.singleCertSz) == NULL) {
++    if (wolfSSL_d2i_X509(&x509, (const byte**)&signerCert,
++                         signerCertSz) == NULL) {
+         wolfSSL_sk_X509_pop_free(signers, NULL);
+         return NULL;
+     }
diff -Nru wolfssl-5.7.2/debian/patches/series wolfssl-5.7.2/debian/patches/series
--- wolfssl-5.7.2/debian/patches/series	2025-08-10 15:17:47.000000000 +0200
+++ wolfssl-5.7.2/debian/patches/series	2026-07-05 23:43:31.000000000 +0200
@@ -5,3 +5,19 @@
 disable-crl-monitor.patch
 disable-jobserver.patch
 handle-debian-files.diff
+CVE-2026-5194.patch
+CVE-2026-55962.patch
+CVE-2026-55967.patch
+CVE-2026-6092.patch
+CVE-2026-6094.patch
+CVE-2026-6329.patch
+CVE-2026-6331.patch
+CVE-2026-6678.patch
+CVE-2026-6681.patch
+CVE-2026-6731.patch
+CVE-2026-6325.patch
+CVE-2026-55961.patch
+CVE-2026-7511.patch
+CVE-2026-6450.patch
+CVE-2026-55960.patch
+CVE-2026-5194-digest-sizes.patch
lmpx.com only provides a reader for public news (NNTP) servers. It is not affiliated with the servers or forums shown here and is not responsible for the content of articles, which is written by their respective authors.