Script 'mail_helper' called by obssrc Hello community, here is the log from the commit of package gnutls for openSUSE:Factory checked in at 2025-03-26 21:17:57 ++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++ Comparing /work/SRC/openSUSE:Factory/gnutls (Old) and /work/SRC/openSUSE:Factory/.gnutls.new.2696 (New) ++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
Package is "gnutls" Wed Mar 26 21:17:57 2025 rev:161 rq:1255878 version:3.8.9 Changes: -------- --- /work/SRC/openSUSE:Factory/gnutls/gnutls.changes 2025-02-25 16:40:56.802263439 +0100 +++ /work/SRC/openSUSE:Factory/.gnutls.new.2696/gnutls.changes 2025-03-26 21:19:27.588643714 +0100 @@ -1,0 +2,13 @@ +Mon Mar 24 15:53:48 UTC 2025 - Angel Yankov <angel.yan...@suse.com> + +- FIPS: Mark SHA-1 as non-approved in the SLI for all operations. [jsc#PED-12224] + * Add gnutls-FIPS-disable-mac-sha1.patch + +------------------------------------------------------------------- +Tue Mar 18 07:56:18 UTC 2025 - Angel Yankov <angel.yan...@suse.com> + +- bsc#1237101, FIPS selfcheck fails on tumbleweed + * Match dependent library names ( nettle, gmp, hogweed ) even when they include full verison in soname + * Add gnutls-fips-sonames-check.patch + +------------------------------------------------------------------- New: ---- gnutls-FIPS-disable-mac-sha1.patch gnutls-fips-sonames-check.patch BETA DEBUG BEGIN: New:- FIPS: Mark SHA-1 as non-approved in the SLI for all operations. [jsc#PED-12224] * Add gnutls-FIPS-disable-mac-sha1.patch New: * Match dependent library names ( nettle, gmp, hogweed ) even when they include full verison in soname * Add gnutls-fips-sonames-check.patch BETA DEBUG END: ++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++ Other differences: ------------------ ++++++ gnutls.spec ++++++ --- /var/tmp/diff_new_pack.rdxgVl/_old 2025-03-26 21:19:28.368676093 +0100 +++ /var/tmp/diff_new_pack.rdxgVl/_new 2025-03-26 21:19:28.368676093 +0100 @@ -73,6 +73,10 @@ %endif Patch104: gnutls-set-cligen-python-interp.patch Patch105: gnutls-skip-pqx-test.patch +Patch106: gnutls-fips-sonames-check.patch +# PATCH-FIX-SUSE jsc#jsc#PED-12224 FIPS: Mark SHA1 as unapproved in the SLI +Patch107: gnutls-FIPS-disable-mac-sha1.patch + BuildRequires: autogen BuildRequires: automake BuildRequires: datefudge ++++++ gnutls-FIPS-disable-mac-sha1.patch ++++++ commit c4eba74d4745e3a97b443abae1431658a826d2eb Author: Angel Yankov <angel.yan...@suse.com> Date: Thu Nov 28 11:02:07 2024 +0200 SHA-1 is not allowed in FIPS-140-3 anymore after 2030. Mark it as unapproved Signed-off-by: Angel Yankov <angel.yan...@suse.com> diff --git a/lib/crypto-api.c b/lib/crypto-api.c index 0abbd7f69..f25ee0b14 100644 --- a/lib/crypto-api.c +++ b/lib/crypto-api.c @@ -33,6 +33,7 @@ #include "crypto-api.h" #include "iov.h" #include "intprops.h" +#include <gnutls/gnutls.h> typedef struct api_cipher_hd_st { cipher_hd_st ctx_enc; @@ -597,7 +598,9 @@ int gnutls_hmac_init(gnutls_hmac_hd_t *dig, gnutls_mac_algorithm_t algorithm, bool not_approved = false; /* MD5 is only allowed internally for TLS */ - if (!is_mac_algo_allowed(algorithm)) { + if (algorithm == GNUTLS_MAC_SHA1) + not_approved = true; + else if (!is_mac_algo_allowed(algorithm)) { _gnutls_switch_fips_state(GNUTLS_FIPS140_OP_ERROR); return gnutls_assert_val(GNUTLS_E_UNWANTED_ALGORITHM); } else if (!is_mac_algo_approved_in_fips(algorithm)) { @@ -757,8 +760,9 @@ int gnutls_hmac_fast(gnutls_mac_algorithm_t algorithm, const void *key, { int ret; bool not_approved = false; - - if (!is_mac_algo_allowed(algorithm)) { + if (algorithm == GNUTLS_MAC_SHA1) + not_approved = true; + else if (!is_mac_algo_allowed(algorithm)) { _gnutls_switch_fips_state(GNUTLS_FIPS140_OP_ERROR); return gnutls_assert_val(GNUTLS_E_UNWANTED_ALGORITHM); } else if (!is_mac_algo_approved_in_fips(algorithm)) { @@ -839,8 +843,9 @@ int gnutls_hash_init(gnutls_hash_hd_t *dig, gnutls_digest_algorithm_t algorithm) { int ret; bool not_approved = false; - - if (!is_mac_algo_allowed(DIG_TO_MAC(algorithm))) { + if (algorithm == GNUTLS_MAC_SHA1) + not_approved = true; + else if (!is_mac_algo_allowed(DIG_TO_MAC(algorithm))) { _gnutls_switch_fips_state(GNUTLS_FIPS140_OP_ERROR); return gnutls_assert_val(GNUTLS_E_UNWANTED_ALGORITHM); } else if (!is_mac_algo_approved_in_fips(DIG_TO_MAC(algorithm))) { @@ -957,8 +962,9 @@ int gnutls_hash_fast(gnutls_digest_algorithm_t algorithm, const void *ptext, { int ret; bool not_approved = false; - - if (!is_mac_algo_allowed(DIG_TO_MAC(algorithm))) { + if (algorithm == GNUTLS_MAC_SHA1) + not_approved = true; + else if (!is_mac_algo_allowed(DIG_TO_MAC(algorithm))) { _gnutls_switch_fips_state(GNUTLS_FIPS140_OP_ERROR); return gnutls_assert_val(GNUTLS_E_UNWANTED_ALGORITHM); } else if (!is_mac_algo_approved_in_fips(DIG_TO_MAC(algorithm))) { @@ -2174,7 +2180,9 @@ int gnutls_pbkdf2(gnutls_mac_algorithm_t mac, const gnutls_datum_t *key, bool not_approved = false; /* MD5 is only allowed internally for TLS */ - if (!is_mac_algo_allowed(mac)) { + if (mac == GNUTLS_MAC_SHA1) + not_approved = true; + else if (!is_mac_algo_allowed(mac)) { _gnutls_switch_fips_state(GNUTLS_FIPS140_OP_ERROR); return gnutls_assert_val(GNUTLS_E_UNWANTED_ALGORITHM); } else if (!is_mac_algo_hmac_approved_in_fips(mac)) { diff --git a/lib/crypto-selftests.c b/lib/crypto-selftests.c index f6505f7fe..f3b5cc870 100644 --- a/lib/crypto-selftests.c +++ b/lib/crypto-selftests.c @@ -2891,7 +2891,7 @@ int gnutls_mac_self_test(unsigned flags, gnutls_mac_algorithm_t mac) case GNUTLS_MAC_UNKNOWN: NON_FIPS_CASE(GNUTLS_MAC_MD5, test_mac, hmac_md5_vectors); FALLTHROUGH; - CASE(GNUTLS_MAC_SHA1, test_mac, hmac_sha1_vectors); + NON_FIPS_CASE(GNUTLS_MAC_SHA1, test_mac, hmac_sha1_vectors); FALLTHROUGH; CASE(GNUTLS_MAC_SHA224, test_mac, hmac_sha224_vectors); FALLTHROUGH; diff --git a/lib/fips.h b/lib/fips.h index 60a4e5f67..76b746253 100644 --- a/lib/fips.h +++ b/lib/fips.h @@ -81,7 +81,6 @@ inline static bool is_mac_algo_hmac_approved_in_fips(gnutls_mac_algorithm_t algo) { switch (algo) { - case GNUTLS_MAC_SHA1: case GNUTLS_MAC_SHA256: case GNUTLS_MAC_SHA384: case GNUTLS_MAC_SHA512: diff --git a/lib/nettle/pk.c b/lib/nettle/pk.c index 91eaffd68..da8783b95 100644 --- a/lib/nettle/pk.c +++ b/lib/nettle/pk.c @@ -2784,10 +2784,7 @@ static int _wrap_nettle_pk_verify(gnutls_pk_algorithm_t algo, if (hash_len > vdata->size) hash_len = vdata->size; - /* SHA-1 is allowed for SigVer in FIPS 140-3 in legacy - * mode */ switch (DIG_TO_MAC(sign_params->dsa_dig)) { - case GNUTLS_MAC_SHA1: case GNUTLS_MAC_SHA256: case GNUTLS_MAC_SHA384: case GNUTLS_MAC_SHA512: @@ -2857,7 +2854,7 @@ static int _wrap_nettle_pk_verify(gnutls_pk_algorithm_t algo, bits = mpz_sizeinbase(pub.n, 2); /* In FIPS 140-3, RSA key size should be larger than 2048-bit. - * In addition to this, only SHA-1 and SHA-2 are allowed + * In addition to this, only SHA-2 is allowed * for SigVer; it is checked in _pkcs1_rsa_verify_sig in * lib/pubkey.c. */ @@ -2903,7 +2900,7 @@ static int _wrap_nettle_pk_verify(gnutls_pk_algorithm_t algo, } /* RSA modulus size should be 2048-bit or larger in FIPS - * 140-3. In addition to this, only SHA-1 and SHA-2 are + * 140-3. In addition to this, only SHA-2 are * allowed for SigVer, while Nettle only supports * SHA256, SHA384, and SHA512 for RSA-PSS (see * _rsa_pss_verify_digest in this file for the details). diff --git a/lib/pubkey.c b/lib/pubkey.c index 1e5ecf31c..811e5310b 100644 --- a/lib/pubkey.c +++ b/lib/pubkey.c @@ -2516,10 +2516,7 @@ static int _pkcs1_rsa_verify_sig(gnutls_pk_algorithm_t pk, d.size = digest_size; if (pk == GNUTLS_PK_RSA) { - /* SHA-1 is allowed for SigVer in FIPS 140-3 in legacy - * mode */ switch (me->id) { - case GNUTLS_MAC_SHA1: case GNUTLS_MAC_SHA256: case GNUTLS_MAC_SHA384: case GNUTLS_MAC_SHA512: diff --git a/tests/fips-test.c b/tests/fips-test.c index 3af4df719..d3fab9dfb 100644 --- a/tests/fips-test.c +++ b/tests/fips-test.c @@ -397,11 +397,12 @@ void doit(void) } FIPS_POP_CONTEXT(ERROR); + FIPS_PUSH_CONTEXT(); ret = gnutls_hmac_init(&mh, GNUTLS_MAC_SHA1, key.data, key.size); if (ret < 0) { - fail("gnutls_hmac_init failed\n"); + fail("gnutls_hmac_init failed for sha1\n"); } - gnutls_hmac_deinit(mh, NULL); + FIPS_POP_CONTEXT(NOT_APPROVED); ret = gnutls_hmac_init(&mh, GNUTLS_MAC_MD5, key.data, key.size); if (ret != GNUTLS_E_UNWANTED_ALGORITHM) { @@ -596,7 +597,7 @@ void doit(void) } FIPS_POP_CONTEXT(NOT_APPROVED); - /* Verify a signature created with 2432-bit RSA and SHA-1; approved */ + /* Verify a signature created with 2432-bit RSA and SHA-1; not approved */ FIPS_PUSH_CONTEXT(); ret = gnutls_pubkey_verify_data2(pubkey, GNUTLS_SIGN_RSA_SHA1, GNUTLS_VERIFY_ALLOW_SIGN_WITH_SHA1, @@ -604,7 +605,7 @@ void doit(void) if (ret < 0) { fail("gnutls_pubkey_verify_data2 failed\n"); } - FIPS_POP_CONTEXT(APPROVED); + FIPS_POP_CONTEXT(NOT_APPROVED); gnutls_free(signature.data); gnutls_pubkey_deinit(pubkey); gnutls_privkey_deinit(privkey); @@ -707,7 +708,7 @@ void doit(void) } FIPS_POP_CONTEXT(NOT_APPROVED); - /* Verify a signature created with ECDSA and SHA-1; approved */ + /* Verify a signature created with ECDSA and SHA-1; not approved */ FIPS_PUSH_CONTEXT(); ret = gnutls_pubkey_verify_data2(pubkey, GNUTLS_SIGN_ECDSA_SHA1, GNUTLS_VERIFY_ALLOW_SIGN_WITH_SHA1, @@ -715,7 +716,7 @@ void doit(void) if (ret < 0) { fail("gnutls_pubkey_verify_data2 failed\n"); } - FIPS_POP_CONTEXT(APPROVED); + FIPS_POP_CONTEXT(NOT_APPROVED); gnutls_free(signature.data); /* Create a signature with ECDSA and SHA-1 (old API); not approved */ @@ -736,7 +737,7 @@ void doit(void) } hashed_data.data = hash; hashed_data.size = 20; - FIPS_POP_CONTEXT(APPROVED); + FIPS_POP_CONTEXT(NOT_APPROVED); /* Create a signature with ECDSA and SHA1 (2-pass API); not-approved */ FIPS_PUSH_CONTEXT(); diff --git a/tests/gnutls_hmac_fast.c b/tests/gnutls_hmac_fast.c index e092bdd95..b54e64569 100644 --- a/tests/gnutls_hmac_fast.c +++ b/tests/gnutls_hmac_fast.c @@ -42,6 +42,11 @@ void doit(void) if (debug) gnutls_global_set_log_level(4711); + /* enable MD5 and SHA1 usage */ + if (gnutls_fips140_mode_enabled()) { + gnutls_fips140_set_mode(GNUTLS_FIPS140_LOG, 0); + } + err = gnutls_hmac_fast(GNUTLS_MAC_SHA1, "keykeykey", 9, "abcdefgh", 8, digest); if (err < 0) @@ -59,11 +64,6 @@ void doit(void) } } - /* enable MD5 usage */ - if (gnutls_fips140_mode_enabled()) { - gnutls_fips140_set_mode(GNUTLS_FIPS140_LOG, 0); - } - err = gnutls_hmac_fast(GNUTLS_MAC_MD5, "keykeykey", 9, "abcdefgh", 8, digest); if (err < 0) diff --git a/tests/kdf-api.c b/tests/kdf-api.c index d476482fa..45c6d60de 100644 --- a/tests/kdf-api.c +++ b/tests/kdf-api.c @@ -108,7 +108,6 @@ inline static bool is_mac_algo_hmac_approved_in_fips(gnutls_mac_algorithm_t algo) { switch (algo) { - case GNUTLS_MAC_SHA1: case GNUTLS_MAC_SHA256: case GNUTLS_MAC_SHA384: case GNUTLS_MAC_SHA512: @@ -145,7 +144,7 @@ static void test_pbkdf2(gnutls_mac_algorithm_t mac, const char *ikm_hex, assert(gnutls_hex_decode2(&hex, &salt) >= 0); fips_push_context(fips_context); - assert(gnutls_pbkdf2(mac, &ikm, &salt, iter_count, buf, length) >= 0); + gnutls_pbkdf2(mac, &ikm, &salt, iter_count, buf, length); fips_pop_context(fips_context, expected_state); gnutls_free(ikm.data); gnutls_free(salt.data); ++++++ gnutls-fips-sonames-check.patch ++++++ Index: gnutls-3.8.9/lib/fips.c =================================================================== --- gnutls-3.8.9.orig/lib/fips.c +++ gnutls-3.8.9/lib/fips.c @@ -484,18 +484,18 @@ static int callback(struct dl_phdr_info const char *soname = last_component(path); struct lib_paths *paths = (struct lib_paths *)data; - if (!strcmp(soname, GNUTLS_LIBRARY_SONAME)) + if (!strncmp(soname, GNUTLS_LIBRARY_SONAME, strlen(GNUTLS_LIBRARY_SONAME))) _gnutls_str_cpy(paths->gnutls, GNUTLS_PATH_MAX, path); #ifdef NETTLE_LIBRARY_SONAME - else if (!strcmp(soname, NETTLE_LIBRARY_SONAME)) + else if (!strncmp(soname, NETTLE_LIBRARY_SONAME, strlen(NETTLE_LIBRARY_SONAME))) _gnutls_str_cpy(paths->nettle, GNUTLS_PATH_MAX, path); #endif #ifdef HOGWEED_LIBRARY_SONAME - else if (!strcmp(soname, HOGWEED_LIBRARY_SONAME)) + else if (!strncmp(soname, HOGWEED_LIBRARY_SONAME, strlen(HOGWEED_LIBRARY_SONAME))) _gnutls_str_cpy(paths->hogweed, GNUTLS_PATH_MAX, path); #endif #ifdef GMP_LIBRARY_SONAME - else if (!strcmp(soname, GMP_LIBRARY_SONAME)) + else if (!strncmp(soname, GMP_LIBRARY_SONAME, strlen(GMP_LIBRARY_SONAME))) _gnutls_str_cpy(paths->gmp, GNUTLS_PATH_MAX, path); #endif return 0;