public inbox for git-commits@fedoraproject.org
help / color / mirror / Atom feed
To: git-commits@fedoraproject.org
Subject: [rpms/nss] rawhide: Revert changes on top of nss-3.127.0
Date: Thu, 27 Aug 2026 17:26:13 GMT [thread overview]
Message-ID: <178785157372.1.6580717850075813033.rpms-nss-71dc233ac9ac@fedoraproject.org> (raw)
A new commit has been pushed.
Repo : rpms/nss
Branch : rawhide
Commit : 71dc233ac9ac9760137170667f8cb4dbd9a8eb56
Author : Krenželok František <fkrenzel@redhat.com>
Date : 2026-08-26T15:35:43+02:00
Stats : +20/-2205 in 16 file(s)
URL : https://src.fedoraproject.org/rpms/nss/c/71dc233ac9ac9760137170667f8cb4dbd9a8eb56?branch=rawhide
Log:
Revert changes on top of nss-3.127.0
Reverts commits 5536897, 18d0ce9, a41856c, 96c6bcd, ee18cf1,
33ba32d, 0ce38c5, 73f7c7a, d7d7509.
---
diff --git a/nss-3.101-extend-db-dump-time.patch b/nss-3.101-extend-db-dump-time.patch
deleted file mode 100644
index 88a608b..0000000
--- a/nss-3.101-extend-db-dump-time.patch
+++ /dev/null
@@ -1,12 +0,0 @@
-diff -up ./tests/dbtests/dbtests.sh.extend ./tests/dbtests/dbtests.sh
---- ./tests/dbtests/dbtests.sh.extend 2023-11-15 13:17:50.651020458 -0800
-+++ ./tests/dbtests/dbtests.sh 2023-11-15 13:18:57.091608850 -0800
-@@ -366,7 +366,7 @@ dbtest_main()
- RARRAY=($dtime)
- TIMEARRAY=(${RARRAY[1]//./ })
- echo "${TIMEARRAY[0]} seconds"
-- test ${TIMEARRAY[0]} -lt 5
-+ test ${TIMEARRAY[0]} -lt ${NSS_DB_DUMP_TIME-5}
- ret=$?
- html_msg ${ret} 0 "certutil dump keys with explicit default trust flags"
- fi
diff --git a/nss-3.112-disable-md5.patch b/nss-3.112-disable-md5.patch
deleted file mode 100644
index f52f3f3..0000000
--- a/nss-3.112-disable-md5.patch
+++ /dev/null
@@ -1,72 +0,0 @@
-diff -up ./lib/pk11wrap/pk11pars.c.no_md ./lib/pk11wrap/pk11pars.c
---- ./lib/pk11wrap/pk11pars.c.no_md 2024-06-11 12:41:35.054654990 -0700
-+++ ./lib/pk11wrap/pk11pars.c 2024-06-11 12:46:25.347979894 -0700
-@@ -329,14 +329,11 @@ static const oidValDef curveOptList[] =
- static const oidValDef hashOptList[] = {
- /* Hashes */
- { CIPHER_NAME("MD2"), SEC_OID_MD2,
-- NSS_USE_ALG_IN_SSL_KX | NSS_USE_ALG_IN_SIGNATURE | NSS_USE_ALG_IN_SMIME |
-- NSS_USE_ALG_IN_PKCS12 },
-+ NSS_USE_ALG_IN_SMIME_LEGACY | NSS_USE_ALG_IN_PKCS12_DECRYPT },
- { CIPHER_NAME("MD4"), SEC_OID_MD4,
-- NSS_USE_ALG_IN_SSL_KX | NSS_USE_ALG_IN_SIGNATURE | NSS_USE_ALG_IN_SMIME |
-- NSS_USE_ALG_IN_PKCS12 },
-+ NSS_USE_ALG_IN_SMIME_LEGACY | NSS_USE_ALG_IN_PKCS12_DECRYPT },
- { CIPHER_NAME("MD5"), SEC_OID_MD5,
-- NSS_USE_ALG_IN_SSL_KX | NSS_USE_ALG_IN_SIGNATURE | NSS_USE_ALG_IN_SMIME |
-- NSS_USE_ALG_IN_PKCS12 },
-+ NSS_USE_ALG_IN_SMIME_LEGACY | NSS_USE_ALG_IN_PKCS12_DECRYPT },
- { CIPHER_NAME("SHA1"), SEC_OID_SHA1,
- NSS_USE_ALG_IN_SSL_KX | NSS_USE_ALG_IN_SIGNATURE | NSS_USE_ALG_IN_SMIME |
- NSS_USE_ALG_IN_PKCS12 },
-diff -up ./lib/util/secoid.c.no_md ./lib/util/secoid.c
-diff -r 699541a7793b lib/util/secoid.c
---- a/lib/util/secoid.c Tue Jun 16 23:03:22 2020 +0000
-+++ b/lib/util/secoid.c Thu Jun 25 14:33:09 2020 +0200
-@@ -2042,6 +2042,19 @@
- int i;
-
- for (i = 1; i < SEC_OID_TOTAL; i++) {
-+ switch (i) {
-+ case SEC_OID_MD2:
-+ case SEC_OID_MD4:
-+ case SEC_OID_MD5:
-+ case SEC_OID_PKCS1_MD2_WITH_RSA_ENCRYPTION:
-+ case SEC_OID_PKCS1_MD4_WITH_RSA_ENCRYPTION:
-+ case SEC_OID_PKCS1_MD5_WITH_RSA_ENCRYPTION:
-+ case SEC_OID_PKCS5_PBE_WITH_MD2_AND_DES_CBC:
-+ case SEC_OID_PKCS5_PBE_WITH_MD5_AND_DES_CBC:
-+ continue;
-+ default:
-+ break;
-+ }
- if (oids[i].desc && strstr(arg, oids[i].desc)) {
- xOids[i].notPolicyFlags = notEnable |
- (xOids[i].notPolicyFlags & ~(DEF_FLAGS));
-diff -up ./tests/tools/pkcs12policy.txt.disable_md5 ./tests/tools/pkcs12policy.txt
---- ./tests/tools/pkcs12policy.txt.disable_md5 2025-05-23 06:07:49.000000000 -0700
-+++ ./tests/tools/pkcs12policy.txt 2025-06-21 13:46:53.055812187 -0700
-@@ -95,21 +95,12 @@
- 0 17 allow_all disallow=rc2 PKCS_#12_V2_PBE_With_SHA-1_And_128_Bit_RC4 PKCS_#12_V2_PBE_With_SHA-1_And_128_Bit_RC2_CBC SHA-1 disallow rc2 (read), RC4 and RC2
- # integrity policy check the various has based controls.
- # NOTE: md4, md2, and md5 are turned off by policy by default for encrypting
--# (decrypting is fine). To be enabled, you must allow=all or allow=mdX on the
-+# (decrypting is fine). To be enabled, you must allow=mdX/pkcs12 on the
- # encryption side. These tests purposefully tests that the default fails to encrypt
- # but succeeds when decrypting.
- 27 x allow=tls allow=tls PKCS_#12_V2_PBE_With_SHA-1_And_128_Bit_RC2_CBC PKCS_#5_Password_Based_Encryption_with_MD2_and_DES-CBC SHA-256 Use default policy with multiple hashes
-- 0 0 allow=all allow=tls PKCS_#12_V2_PBE_With_SHA-1_And_128_Bit_RC2_CBC PKCS_#5_Password_Based_Encryption_with_MD2_and_DES-CBC SHA-256 Allow all encrypt, use default decrypt with multiple hashes
-- 0 0 allow=all allow=all PKCS_#12_V2_PBE_With_SHA-1_And_128_Bit_RC2_CBC PKCS_#5_Password_Based_Encryption_with_MD2_and_DES-CBC SHA-256 Allow all with multiple hashes
-- 28 x disallow=sha1_allow=md2 allow=all PKCS_#12_V2_PBE_With_SHA-1_And_128_Bit_RC2_CBC PKCS_#5_Password_Based_Encryption_with_MD2_and_DES-CBC SHA-256 Disallow sha1 on write
- 27 x disallow=md2 allow=all PKCS_#12_V2_PBE_With_SHA-1_And_128_Bit_RC2_CBC PKCS_#5_Password_Based_Encryption_with_MD2_and_DES-CBC SHA-256 Disallow md2 on write
-- 29 x disallow=sha256_allow=md2 allow=all PKCS_#12_V2_PBE_With_SHA-1_And_128_Bit_RC2_CBC PKCS_#5_Password_Based_Encryption_with_MD2_and_DES-CBC SHA-256 Disallow sha256 on write
-- 0 19 allow=all disallow=sha1 PKCS_#12_V2_PBE_With_SHA-1_And_128_Bit_RC2_CBC PKCS_#5_Password_Based_Encryption_with_MD2_and_DES-CBC SHA-256 Disallow sha1 on read
-- 0 17 allow=all disallow=md2 PKCS_#12_V2_PBE_With_SHA-1_And_128_Bit_RC2_CBC PKCS_#5_Password_Based_Encryption_with_MD2_and_DES-CBC SHA-256 Disallow md2 on read
-- 0 17 allow=all disallow=sha256 PKCS_#12_V2_PBE_With_SHA-1_And_128_Bit_RC2_CBC PKCS_#5_Password_Based_Encryption_with_MD2_and_DES-CBC SHA-256 Disallow sha256 on read
-- 0 0 allow=all disallow=md2/pkcs12-encrypt PKCS_#12_V2_PBE_With_SHA-1_And_128_Bit_RC2_CBC PKCS_#5_Password_Based_Encryption_with_MD2_and_DES-CBC SHA-256 Disallow md2 on read
-- 0 0 allow=all disallow=sha1/pkcs12-encrypt PKCS_#12_V2_PBE_With_SHA-1_And_128_Bit_RC2_CBC PKCS_#5_Password_Based_Encryption_with_MD2_and_DES-CBC SHA-256 Disallow sha1 on read
-- 0 0 allow=all disallow=sha256/pkcs12-encrypt PKCS_#12_V2_PBE_With_SHA-1_And_128_Bit_RC2_CBC PKCS_#5_Password_Based_Encryption_with_MD2_and_DES-CBC SHA-256 Disallow sha256 on read
-+ 27 x disallow=sha256_allow=md2 allow=all PKCS_#12_V2_PBE_With_SHA-1_And_128_Bit_RC2_CBC PKCS_#5_Password_Based_Encryption_with_MD2_and_DES-CBC SHA-256 Disallow sha256 on write
- 0 0 allow=all allow=all AES-128-CBC AES-128-CBC HMAC_SHA-256 Allow all with hmac
- 29 x disallow=hmac-sha256 allow=all AES-128-CBC AES-128-CBC HMAC_SHA-256 Disallow hmac on write
- 0 17 allow=all disallow=hmac-sha256 AES-128-CBC AES-128-CBC HMAC_SHA-256 Disallow hmac on read
diff --git a/nss-3.118-ml-dsa-test-call-site.patch b/nss-3.118-ml-dsa-test-call-site.patch
deleted file mode 100644
index 5143956..0000000
--- a/nss-3.118-ml-dsa-test-call-site.patch
+++ /dev/null
@@ -1,11 +0,0 @@
---- a/tests/tools/tools.sh
-+++ b/tests/tools/tools.sh
-@@ -664,7 +664,8 @@
- tools_p12_export_with_invalid_ciphers
- tools_p12_import_old_files
- tools_p12_import_pbmac1_samples
- tools_p12_import_ed25519_private_key
-+ tools_p12_ml_dsa_import
- tools_p12_ml_kem_import
- if using_sql; then
- tools_p12_import_rsa_pss_private_key
diff --git a/nss-3.118-ml-dsa-test-for-sign-verify-pkcs12.patch b/nss-3.118-ml-dsa-test-for-sign-verify-pkcs12.patch
index e4307fd..a1c5c40 100644
--- a/nss-3.118-ml-dsa-test-for-sign-verify-pkcs12.patch
+++ b/nss-3.118-ml-dsa-test-for-sign-verify-pkcs12.patch
@@ -236,35 +236,29 @@ diff --git a/cmd/certutil/keystuff.c b/cmd/certutil/keystuff.c
diff --git a/cmd/pk11importtest/pk11importtest.c b/cmd/pk11importtest/pk11importtest.c
--- a/cmd/pk11importtest/pk11importtest.c
+++ b/cmd/pk11importtest/pk11importtest.c
-@@ -217,8 +217,9 @@
+@@ -217,6 +217,7 @@
opt_NoDSA,
opt_NoDH,
opt_NoEC,
+ opt_NoMLDSA,
opt_NoMLKEM,
- opt_NoED,
- opt_NoECMont,
};
-
-@@ -231,8 +232,9 @@
+
+@@ -231,6 +232,7 @@
{ /* opt_NoDSA */ 'D', PR_FALSE, 0, PR_FALSE },
{ /* opt_NoDH */ 'h', PR_FALSE, 0, PR_FALSE },
{ /* opt_NoEC */ 'e', PR_FALSE, 0, PR_FALSE },
+ { /* opt_NoMLDSA */ 'm', PR_FALSE, 0, PR_FALSE },
{ /* opt_NoMLKEM */ 'K', PR_FALSE, 0, PR_FALSE },
- { /* opt_NoED */ 'w', PR_FALSE, 0, PR_FALSE },
- { /* opt_NoECMont */ 'g', PR_FALSE, 0, PR_FALSE },
};
-
-@@ -247,8 +249,10 @@
+
+@@ -247,6 +249,8 @@
PRBool doDSA = PR_TRUE;
PRBool doDH = PR_FALSE; /* NSS currently can't export wrapped DH keys */
PRBool doEC = PR_TRUE;
+ PRBool doMLDSA = PR_FALSE;
+ CK_ML_DSA_PARAMETER_SET_TYPE mldsaParamSet = CKP_ML_DSA_44;
PRBool doMLKEM = PR_TRUE;
- PRBool doED = PR_TRUE;
- PRBool doECMont = PR_TRUE;
PRBool noPub = PR_FALSE;
PQGParams *pqgParams = NULL;
@@ -305,6 +309,9 @@
@@ -420,7 +414,7 @@ diff --git a/tests/cert/cert.sh b/tests/cert/cert.sh
diff --git a/tests/tools/tools.sh b/tests/tools/tools.sh
--- a/tests/tools/tools.sh
+++ b/tests/tools/tools.sh
-@@ -128,7 +128,16 @@
+@@ -128,6 +128,15 @@
cp ${QADIR}/tools/pbmac1-invalid-bad-salt.p12 ${TOOLSDIR}/data
cp ${QADIR}/tools/pbmac1-invalid-no-length.p12 ${TOOLSDIR}/data
cp ${QADIR}/tools/corrupted_cert_bag.p12 ${TOOLSDIR}/data
@@ -433,14 +427,13 @@ diff --git a/tests/tools/tools.sh b/tests/tools/tools.sh
+ cp ${QADIR}/tools/openssl-ml-dsa-44.p12 ${TOOLSDIR}/data
+ cp ${QADIR}/tools/openssl-ml-dsa-65.p12 ${TOOLSDIR}/data
+ cp ${QADIR}/tools/openssl-ml-dsa-87.p12 ${TOOLSDIR}/data
- cp ${QADIR}/tools/openssl-ed25519.p12 ${TOOLSDIR}/data
cp ${QADIR}/tools/openssl-ml-kem-768-seed.p12 ${TOOLSDIR}/data
cp ${QADIR}/tools/openssl-ml-kem-768-priv.p12 ${TOOLSDIR}/data
cp ${QADIR}/tools/openssl-ml-kem-768-both.p12 ${TOOLSDIR}/data
@@ -536,6 +545,33 @@
return $ret
}
-
+
+tools_p12_ml_dsa_import()
+{
+ echo "$SCRIPTNAME: Testing ml-dsa compatibility with pkcs12 --------------"
@@ -471,3 +464,11 @@ diff --git a/tests/tools/tools.sh b/tests/tools/tools.sh
tools_p12_ml_kem_import()
{
echo "$SCRIPTNAME: Testing ml-kem compatibility with pkcs12 --------------"
+@@ -616,6 +652,7 @@
+ tools_p12_export_with_invalid_ciphers
+ tools_p12_import_old_files
+ tools_p12_import_pbmac1_samples
++ tools_p12_ml_dsa_import
+ tools_p12_ml_kem_import
+ if using_sql; then
+ tools_p12_import_rsa_pss_private_key
diff --git a/nss-3.124-add-ml-kem-key-size-mech-info.patch b/nss-3.124-add-ml-kem-key-size-mech-info.patch
deleted file mode 100644
index f80b695..0000000
--- a/nss-3.124-add-ml-kem-key-size-mech-info.patch
+++ /dev/null
@@ -1,60 +0,0 @@
-# HG changeset patch
-# User Robert Relyea <rrelyea@redhat.com>
-# Date 1781030209 25200
-# Tue Jun 09 11:36:49 2026 -0700
-# Branch NSS_3_124_BRANCH
-# Node ID 9d51dda84f46517faa8b9cf6abe4311e1ae3e2ac
-# Parent 2a7bb3310ced138c06a588fc47b9f98e3f9faa68
-nss-3.124-add-ml-kem-key-size-mech-info.patch
-
-diff --git a/lib/softoken/pkcs11.c b/lib/softoken/pkcs11.c
---- a/lib/softoken/pkcs11.c
-+++ b/lib/softoken/pkcs11.c
-@@ -35,16 +35,17 @@
- #include "secoid.h"
- #include "sftkdb.h"
- #include "utilpars.h"
- #include "ec.h"
- #include "secasn1.h"
- #include "secerr.h"
- #include "lgglue.h"
- #include "kem.h"
-+#include "kyber.h"
-
- PRBool parentForkedAfterC_Initialize;
-
- #ifndef NO_FORK_CHECK
-
- PRBool sftkForkCheckDisabled;
-
- #if defined(CHECK_FORK_PTHREAD) || defined(CHECK_FORK_MIXED)
-@@ -676,23 +677,23 @@ static const struct mechanismList mechan
- { CKM_IKE1_PRF_DERIVE, { 8, 64, CKF_DERIVE }, PR_TRUE },
- { CKM_IKE1_EXTENDED_DERIVE, { 8, 255 * 64, CKF_DERIVE }, PR_TRUE },
- { CKM_NSS_IKE_PRF_PLUS_DERIVE, { 8, 255 * 64, CKF_DERIVE }, PR_TRUE },
- { CKM_NSS_IKE_PRF_DERIVE, { 8, 64, CKF_DERIVE }, PR_TRUE },
- { CKM_NSS_IKE1_PRF_DERIVE, { 8, 64, CKF_DERIVE }, PR_TRUE },
- { CKM_NSS_IKE1_APP_B_PRF_DERIVE, { 8, 255 * 64, CKF_DERIVE }, PR_TRUE },
- /* -------------------- Kyber Operations ----------------------- */
- #ifndef NSS_DISABLE_KYBER
-- { CKM_NSS_KYBER_KEY_PAIR_GEN, { 0, 0, CKF_GENERATE_KEY_PAIR }, PR_TRUE },
-- { CKM_NSS_KYBER, { 0, 0, CKF_KEM }, PR_TRUE },
-+ { CKM_NSS_KYBER_KEY_PAIR_GEN, { KYBER768_PUBLIC_KEY_BYTES, KYBER768_PUBLIC_KEY_BYTES, CKF_GENERATE_KEY_PAIR }, PR_TRUE },
-+ { CKM_NSS_KYBER, { KYBER768_PUBLIC_KEY_BYTES, KYBER768_PUBLIC_KEY_BYTES, CKF_KEM }, PR_TRUE },
- #endif
-- { CKM_NSS_ML_KEM_KEY_PAIR_GEN, { 0, 0, CKF_GENERATE_KEY_PAIR }, PR_TRUE },
-- { CKM_NSS_ML_KEM, { 0, 0, CKF_KEM }, PR_TRUE },
-- { CKM_ML_KEM_KEY_PAIR_GEN, { 0, 0, CKF_GENERATE_KEY_PAIR }, PR_TRUE },
-- { CKM_ML_KEM, { 0, 0, CKF_KEM }, PR_TRUE },
-+ { CKM_NSS_ML_KEM_KEY_PAIR_GEN, { KYBER768_PUBLIC_KEY_BYTES, MLKEM1024_PUBLIC_KEY_BYTES, CKF_GENERATE_KEY_PAIR }, PR_TRUE },
-+ { CKM_NSS_ML_KEM, { KYBER768_PUBLIC_KEY_BYTES, MLKEM1024_PUBLIC_KEY_BYTES, CKF_KEM }, PR_TRUE },
-+ { CKM_ML_KEM_KEY_PAIR_GEN, { KYBER768_PUBLIC_KEY_BYTES, MLKEM1024_PUBLIC_KEY_BYTES, CKF_GENERATE_KEY_PAIR }, PR_TRUE },
-+ { CKM_ML_KEM, { KYBER768_PUBLIC_KEY_BYTES, MLKEM1024_PUBLIC_KEY_BYTES, CKF_KEM }, PR_TRUE },
- /* don't advertize ML_DSA support until we have it working in freebl */
- { CKM_ML_DSA_KEY_PAIR_GEN, { ML_DSA_44_PUBLICKEY_LEN, ML_DSA_87_PUBLICKEY_LEN, CKF_GENERATE }, PR_TRUE },
- { CKM_ML_DSA, { ML_DSA_44_PUBLICKEY_LEN, ML_DSA_87_PUBLICKEY_LEN, CKF_SN_VR }, PR_TRUE },
- };
- static const CK_ULONG mechanismCount = sizeof(mechanisms) / sizeof(mechanisms[0]);
-
- /* sigh global so fipstokn can read it */
- PRBool nsc_init = PR_FALSE;
diff --git a/nss-3.124-allow-hash-override-pss.patch b/nss-3.124-allow-hash-override-pss.patch
deleted file mode 100644
index 9e5443a..0000000
--- a/nss-3.124-allow-hash-override-pss.patch
+++ /dev/null
@@ -1,489 +0,0 @@
-# HG changeset patch
-# User Robert Relyea <rrelyea@redhat.com>
-# Date 1781635239 25200
-# Tue Jun 16 11:40:39 2026 -0700
-# Branch NSS_3_124_BRANCH
-# Node ID c85110e0f7ba48ef44c9b535a9c3bccf78f8416d
-# Parent 4b0e3f33a2e76a77e36b435eb3cc1eb06f14249d
-nss-3.124-allow-hash-override-pss.patch
-
-diff --git a/cmd/certutil/certutil.c b/cmd/certutil/certutil.c
---- a/cmd/certutil/certutil.c
-+++ b/cmd/certutil/certutil.c
-@@ -228,16 +228,20 @@ CertReq(SECKEYPrivateKey *privk, SECKEYP
- return SECFailure;
- }
-
- /* Change cert type to RSA-PSS, if desired. */
- if (pssCertificate) {
- /* force a PSS signature. We can do a PSS signature with an
- * RSA key, this will force us to generate a PSS signature */
- signAlgTag = SEC_OID_PKCS1_RSA_PSS_SIGNATURE;
-+ /* we are reusing an algorithm id, prevent the assert when we try
-+ * to set the parameters of that algorithm id */
-+ spki->algorithm.parameters.data = NULL;
-+ spki->algorithm.parameters.len = 0;
- /* override the SPKI algorithm id. */
- rv = SEC_CreateSignatureAlgorithmID(arena, &spki->algorithm,
- signAlgTag, hashAlgTag,
- NULL, NULL, pubk);
- if (rv != SECSuccess) {
- PORT_FreeArena(arena, PR_FALSE);
- SECKEY_DestroySubjectPublicKeyInfo(spki);
- SECU_PrintError(progName, "unable to set algorithm ID");
-diff --git a/gtests/cryptohi_gtest/cryptohi_unittest.cc b/gtests/cryptohi_gtest/cryptohi_unittest.cc
---- a/gtests/cryptohi_gtest/cryptohi_unittest.cc
-+++ b/gtests/cryptohi_gtest/cryptohi_unittest.cc
-@@ -105,17 +105,17 @@ class SignParamsTestF : public ::testing
- SECItem *saltLengthItem =
- SEC_ASN1EncodeInteger(arena_.get(), ¶ms->saltLength, saltLength);
- ASSERT_EQ(¶ms->saltLength, saltLengthItem);
- }
-
- void CheckHashAlg(SECKEYRSAPSSParams *params, SECOidTag hashAlgTag) {
- // If hash algorithm is SHA-1, it must be omitted in the parameters
- if (hashAlgTag == SEC_OID_SHA1) {
-- EXPECT_EQ(nullptr, params->hashAlg);
-+ EXPECT_EQ(nullptr, params->hashAlg) << "oid==" << SECOID_FindOIDTagDescription(SECOID_GetAlgorithmTag(params->hashAlg));
- } else {
- EXPECT_NE(nullptr, params->hashAlg);
- EXPECT_EQ(hashAlgTag, SECOID_GetAlgorithmTag(params->hashAlg));
- }
- }
-
- void CheckMaskAlg(SECKEYRSAPSSParams *params, SECOidTag hashAlgTag) {
- SECStatus rv;
-@@ -225,22 +225,16 @@ TEST_P(SignParamsTest, CreateRsaPss) {
- } else {
- srcParams = NULL;
- }
-
- SECItem *params = SEC_CreateSignatureAlgorithmParameters(
- arena_.get(), nullptr, SEC_OID_PKCS1_RSA_PSS_SIGNATURE, hashAlg,
- srcParams, privk_.get());
-
-- if (hashAlg != SEC_OID_UNKNOWN && srcHashAlg != SEC_OID_UNKNOWN &&
-- hashAlg != srcHashAlg) {
-- EXPECT_EQ(nullptr, params);
-- return;
-- }
--
- EXPECT_NE(nullptr, params);
-
- SECKEYRSAPSSParams pssParams;
- PORT_Memset(&pssParams, 0, sizeof(pssParams));
- SECStatus rv =
- SEC_QuickDERDecodeItem(arena_.get(), &pssParams,
- SEC_ASN1_GET(SECKEY_RSAPSSParamsTemplate), params);
- ASSERT_EQ(SECSuccess, rv);
-@@ -294,83 +288,100 @@ TEST_P(SignParamsTest, CreateRsaPssWithE
-
- TEST_P(SignParamsTest, CreateRsaPssWithInvalidHashAlg) {
- SECOidTag srcHashAlg = std::get<1>(GetParam());
-
- SECItem *srcParams;
- if (srcHashAlg != SEC_OID_UNKNOWN) {
- SECKEYRSAPSSParams pssParams;
- ASSERT_NO_FATAL_FAILURE(
-- CreatePssParams(&pssParams, srcHashAlg, srcHashAlg));
-+ CreatePssParams(&pssParams, SEC_OID_MD5, SEC_OID_MD5));
- srcParams = SEC_ASN1EncodeItem(arena_.get(), nullptr, &pssParams,
- SEC_ASN1_GET(SECKEY_RSAPSSParamsTemplate));
- ASSERT_NE(nullptr, srcParams);
- } else {
- srcParams = NULL;
- }
-
- SECItem *params = SEC_CreateSignatureAlgorithmParameters(
-- arena_.get(), nullptr, SEC_OID_PKCS1_RSA_PSS_SIGNATURE, SEC_OID_MD5,
-+ arena_.get(), nullptr, SEC_OID_PKCS1_RSA_PSS_SIGNATURE, srcHashAlg,
- srcParams, privk_.get());
-
-- EXPECT_EQ(nullptr, params);
-+ /* override invalid hash with valid hash */
-+ EXPECT_NE(nullptr, params);
-+ /* assert params ->hashAlg != SEC_OID_MD5 */
- }
-
- TEST_P(SignParamsSourceTest, CreateRsaPssWithInvalidHashAlg) {
- SECOidTag hashAlg = GetParam();
-
- SECItem *srcParams;
- SECKEYRSAPSSParams pssParams;
- ASSERT_NO_FATAL_FAILURE(
-- CreatePssParams(&pssParams, SEC_OID_MD5, SEC_OID_MD5));
-+ CreatePssParams(&pssParams, hashAlg, hashAlg));
- srcParams = SEC_ASN1EncodeItem(arena_.get(), nullptr, &pssParams,
- SEC_ASN1_GET(SECKEY_RSAPSSParamsTemplate));
- ASSERT_NE(nullptr, srcParams);
-
- SECItem *params = SEC_CreateSignatureAlgorithmParameters(
-- arena_.get(), nullptr, SEC_OID_PKCS1_RSA_PSS_SIGNATURE, hashAlg,
-+ arena_.get(), nullptr, SEC_OID_PKCS1_RSA_PSS_SIGNATURE, SEC_OID_MD4,
- srcParams, privk_.get());
-
- EXPECT_EQ(nullptr, params);
- }
-
- TEST_P(SignParamsSourceTest, CreateRsaPssWithInvalidSaltLength) {
- SECOidTag hashAlg = GetParam();
-
- SECItem *srcParams;
- SECKEYRSAPSSParams pssParams;
- ASSERT_NO_FATAL_FAILURE(
-- CreatePssParams(&pssParams, SEC_OID_SHA512, SEC_OID_SHA512, 100));
-+ CreatePssParams(&pssParams, SEC_OID_SHA512, SEC_OID_SHA512, 110));
- srcParams = SEC_ASN1EncodeItem(arena_.get(), nullptr, &pssParams,
- SEC_ASN1_GET(SECKEY_RSAPSSParamsTemplate));
- ASSERT_NE(nullptr, srcParams);
-
- SECItem *params = SEC_CreateSignatureAlgorithmParameters(
- arena_.get(), nullptr, SEC_OID_PKCS1_RSA_PSS_SIGNATURE, hashAlg,
- srcParams, privk_.get());
-
- EXPECT_EQ(nullptr, params);
- }
-
- TEST_P(SignParamsSourceTest, CreateRsaPssWithHashMismatch) {
- SECOidTag hashAlg = GetParam();
-
- SECItem *srcParams;
- SECKEYRSAPSSParams pssParams;
-+ if ((hashAlg == SEC_OID_UNKNOWN) || (hashAlg == SEC_OID_SHA512)) {
-+ hashAlg = SEC_OID_SHA1;
-+ }
- ASSERT_NO_FATAL_FAILURE(
-- CreatePssParams(&pssParams, SEC_OID_SHA256, SEC_OID_SHA512));
-+ CreatePssParams(&pssParams, hashAlg, SEC_OID_SHA512));
- srcParams = SEC_ASN1EncodeItem(arena_.get(), nullptr, &pssParams,
- SEC_ASN1_GET(SECKEY_RSAPSSParamsTemplate));
- ASSERT_NE(nullptr, srcParams);
-
- SECItem *params = SEC_CreateSignatureAlgorithmParameters(
-- arena_.get(), nullptr, SEC_OID_PKCS1_RSA_PSS_SIGNATURE, hashAlg,
-+ arena_.get(), nullptr, SEC_OID_PKCS1_RSA_PSS_SIGNATURE, SEC_OID_UNKNOWN,
- srcParams, privk_.get());
-
-- EXPECT_EQ(nullptr, params);
-+ EXPECT_NE(nullptr, params);
-+
-+ PORT_Memset(&pssParams, 0, sizeof(pssParams));
-+ SECStatus rv =
-+ SEC_QuickDERDecodeItem(arena_.get(), &pssParams,
-+ SEC_ASN1_GET(SECKEY_RSAPSSParamsTemplate), params);
-+ ASSERT_EQ(SECSuccess, rv);
-+ ASSERT_NO_FATAL_FAILURE(CheckHashAlg(&pssParams, hashAlg));
-+ ASSERT_NO_FATAL_FAILURE(CheckMaskAlg(&pssParams, hashAlg));
-+ ASSERT_NO_FATAL_FAILURE(CheckSaltLength(&pssParams, hashAlg));
-+
-+ // The default trailer field (1) must be omitted
-+ EXPECT_EQ(nullptr, pssParams.trailerField.data);
- }
-
- INSTANTIATE_TEST_SUITE_P(
- SignParamsTestCases, SignParamsTest,
- ::testing::Combine(::testing::Values(SEC_OID_UNKNOWN, SEC_OID_SHA1,
- SEC_OID_SHA224, SEC_OID_SHA256,
- SEC_OID_SHA384, SEC_OID_SHA512),
- ::testing::Values(SEC_OID_UNKNOWN, SEC_OID_SHA1,
-diff --git a/lib/cryptohi/seckey.c b/lib/cryptohi/seckey.c
---- a/lib/cryptohi/seckey.c
-+++ b/lib/cryptohi/seckey.c
-@@ -2876,21 +2876,23 @@ sec_DecodeRSAPSSParams(PLArenaPool *aren
- SECKEYRSAPSSParams pssParams;
- SECOidTag hashAlg;
- SECOidTag maskHashAlg;
- unsigned long saltLength;
- unsigned long trailerField;
- SECStatus rv;
-
- PORT_Memset(&pssParams, 0, sizeof(pssParams));
-- rv = SEC_QuickDERDecodeItem(arena, &pssParams,
-- SECKEY_RSAPSSParamsTemplate,
-- params);
-- if (rv != SECSuccess) {
-- return rv;
-+ if (params && (params->len != 0)) {
-+ rv = SEC_QuickDERDecodeItem(arena, &pssParams,
-+ SECKEY_RSAPSSParamsTemplate,
-+ params);
-+ if (rv != SECSuccess) {
-+ return rv;
-+ }
- }
-
- if (pssParams.hashAlg) {
- hashAlg = SECOID_GetAlgorithmTag(pssParams.hashAlg);
- } else {
- hashAlg = SEC_OID_SHA1; /* default, SHA-1 */
- }
-
-diff --git a/lib/cryptohi/secsign.c b/lib/cryptohi/secsign.c
---- a/lib/cryptohi/secsign.c
-+++ b/lib/cryptohi/secsign.c
-@@ -814,16 +814,18 @@ sec_CreateRSAPSSParameters(PLArenaPool *
- SECOidTag hashAlgTag,
- const SECItem *params,
- int modBytes)
- {
- SECKEYRSAPSSParams pssParams;
- int hashLength;
- unsigned long saltLength;
- PRBool defaultSHA1 = PR_FALSE;
-+ PRBool overWriteHash = PR_TRUE;
-+ PRBool overWriteMask = PR_TRUE;
- SECStatus rv;
-
- PORT_Memset(&pssParams, 0, sizeof(pssParams));
-
- if (params && params->data) {
- /* The parameters field should either be empty or contain
- * valid RSA-PSS parameters */
- PORT_Assert(!(params->len == 2 &&
-@@ -831,16 +833,18 @@ sec_CreateRSAPSSParameters(PLArenaPool *
- params->data[1] == 0));
- rv = SEC_QuickDERDecodeItem(arena, &pssParams,
- SECKEY_RSAPSSParamsTemplate,
- params);
- if (rv != SECSuccess) {
- return NULL;
- }
- defaultSHA1 = PR_TRUE;
-+ overWriteHash = PR_FALSE;
-+ overWriteMask = PR_FALSE;
- }
-
- if (pssParams.trailerField.data) {
- unsigned long trailerField;
-
- rv = SEC_ASN1DecodeInteger((SECItem *)&pssParams.trailerField,
- &trailerField);
- if (rv != SECSuccess) {
-@@ -851,19 +855,21 @@ sec_CreateRSAPSSParameters(PLArenaPool *
- return NULL;
- }
- }
-
- /* Determine the hash algorithm to use, based on hashAlgTag and
- * pssParams.hashAlg; there are 6 cases.
- * case:
- * 1) We have params and params.hashAlg and we have a specified hashAlgTag,
-- * make sure that hashAlgTag specified by the appication matches.
-+ * make sure that hashAlgTag specified by the appication matches, othersize we
-+ * overwrite params.hashAlg with hashAlgTag.
- * 2) We have params, but no params.hashAlg and we have a specified
-- * hashAlg, make sure the hashAlgTag matches SEC_OID_SHA1.
-+ * hashAlg, make sure the hashAlgTag matches SEC_OID_SHA1, otherwise we
-+ * overwrite params.hashAlg with hashAlgTag..
- * 3) we did not specify any parameters but we did specified
- * a hashAlgTag. Use the specified hash algtag.
- * 4) We have params and params.hashAlg and we did not specify a
- * hashAlgTag, use the hashAlg from the parameter.
- * 5) We have params, but no params.hashAlg and we did not specify a
- * hashAlgTag, use the SEC_OID_SHA1
- * 6) We did not specify any parameters, nor did we specify a
- * hashAlgTag, use the key size to select an appropriate hashAlg.
-@@ -873,36 +879,42 @@ sec_CreateRSAPSSParameters(PLArenaPool *
-
- if (pssParams.hashAlg) {
- tag = SECOID_GetAlgorithmTag(pssParams.hashAlg);
- } else if (defaultSHA1) {
- tag = SEC_OID_SHA1;
- }
-
- if (tag != SEC_OID_UNKNOWN && tag != hashAlgTag) {
-- PORT_SetError(SEC_ERROR_INVALID_ARGS);
-- return NULL;
-+ overWriteHash = PR_TRUE;
- }
- } else if (hashAlgTag == SEC_OID_UNKNOWN) {
- if (pssParams.hashAlg) {
- hashAlgTag = SECOID_GetAlgorithmTag(pssParams.hashAlg);
- } else if (defaultSHA1) {
- hashAlgTag = SEC_OID_SHA1;
- } else {
- /* Find a suitable hash algorithm based on the NIST recommendation */
- if (modBytes <= 384) { /* 128, in NIST 800-57, Part 1 */
- hashAlgTag = SEC_OID_SHA256;
- } else if (modBytes <= 960) { /* 192, NIST 800-57, Part 1 */
- hashAlgTag = SEC_OID_SHA384;
- } else {
- hashAlgTag = SEC_OID_SHA512;
- }
-+ overWriteHash = PR_TRUE;
- }
- }
-
-+ /* handle the case where the params invalidly encoded SEC_OID_SHA1. This
-+ * will force the correct encoding */
-+ if ((hashAlgTag == SEC_OID_SHA1) && pssParams.hashAlg) {
-+ overWriteHash = PR_TRUE;
-+ }
-+
- /* explicitly restrict hashAlg to SHA2 variants */
- if (hashAlgTag != SEC_OID_SHA1 && hashAlgTag != SEC_OID_SHA224 &&
- hashAlgTag != SEC_OID_SHA256 && hashAlgTag != SEC_OID_SHA384 &&
- hashAlgTag != SEC_OID_SHA512) {
- PORT_SetError(SEC_ERROR_INVALID_ALGORITHM);
- return NULL;
- }
-
-@@ -927,23 +939,24 @@ sec_CreateRSAPSSParameters(PLArenaPool *
- &pssParams.maskAlg->parameters);
- if (rv != SECSuccess) {
- return NULL;
- }
-
- /* Following the recommendation in RFC 4055, assume the hash
- * algorithm identical to pssParam.hashAlg */
- if (SECOID_GetAlgorithmTag(&maskHashAlg) != hashAlgTag) {
-- PORT_SetError(SEC_ERROR_INVALID_ALGORITHM);
-- return NULL;
-+ overWriteMask = PR_TRUE;
-+ }
-+ if (hashAlgTag == SEC_OID_SHA1) {
-+ overWriteMask = PR_TRUE;
- }
- } else if (defaultSHA1) {
- if (hashAlgTag != SEC_OID_SHA1) {
-- PORT_SetError(SEC_ERROR_INVALID_ALGORITHM);
-- return NULL;
-+ overWriteMask = PR_TRUE;
- }
- }
-
- hashLength = HASH_ResultLenByOidTag(hashAlgTag);
-
- if (modBytes < hashLength + 2) {
- PORT_SetError(SEC_ERROR_INVALID_ARGS);
- return NULL;
-@@ -961,42 +974,38 @@ sec_CreateRSAPSSParameters(PLArenaPool *
- PORT_SetError(SEC_ERROR_INVALID_ARGS);
- return NULL;
- }
- } else if (defaultSHA1) {
- saltLength = 20;
- }
-
- /* Fill in the parameters */
-- if (pssParams.hashAlg) {
-+ if (overWriteHash) {
- if (hashAlgTag == SEC_OID_SHA1) {
- /* Omit hashAlg if the the algorithm is SHA-1 (default) */
- pssParams.hashAlg = NULL;
-- }
-- } else {
-- if (hashAlgTag != SEC_OID_SHA1) {
-+ } else {
- pssParams.hashAlg = PORT_ArenaZAlloc(arena, sizeof(SECAlgorithmID));
- if (!pssParams.hashAlg) {
- return NULL;
- }
- rv = SECOID_SetAlgorithmID(arena, pssParams.hashAlg, hashAlgTag,
- NULL);
- if (rv != SECSuccess) {
- return NULL;
- }
- }
- }
-
-- if (pssParams.maskAlg) {
-+ if (overWriteMask) {
- if (hashAlgTag == SEC_OID_SHA1) {
- /* Omit maskAlg if the the algorithm is SHA-1 (default) */
- pssParams.maskAlg = NULL;
-- }
-- } else {
-- if (hashAlgTag != SEC_OID_SHA1) {
-+ } else {
- SECItem *hashAlgItem;
-
- PORT_Assert(pssParams.hashAlg != NULL);
-
- hashAlgItem = SEC_ASN1EncodeItem(arena, NULL, pssParams.hashAlg,
- SEC_ASN1_GET(SECOID_AlgorithmIDTemplate));
- if (!hashAlgItem) {
- return NULL;
-@@ -1086,17 +1095,16 @@ SEC_CreateSignatureAlgorithmParameters(P
- const SECItem *params,
- const SECKEYPrivateKey *key)
- {
- PORT_SetError(0);
- switch (signAlgTag) {
- case SEC_OID_PKCS1_RSA_PSS_SIGNATURE:
- return SEC_CreateRSAPSSParameters(arena, result,
- hashAlgTag, params, key, NULL);
--
- default:
- if (params == NULL)
- return NULL;
- if (result == NULL)
- result = SECITEM_AllocItem(arena, NULL, 0);
- if (result == NULL) {
- return NULL;
- }
-@@ -1112,16 +1120,19 @@ SEC_CreateVerifyAlgorithmParameters(PLAr
- SECOidTag signAlgTag,
- SECOidTag hashAlgTag,
- const SECItem *params,
- const SECKEYPublicKey *key)
- {
- PORT_SetError(0);
- switch (signAlgTag) {
- case SEC_OID_PKCS1_RSA_PSS_SIGNATURE:
-+ if ((hashAlgTag == SEC_OID_UNKNOWN) && ((params == NULL) || (params->len == 0))){
-+ return NULL;
-+ }
- return SEC_CreateRSAPSSParameters(arena, result,
- hashAlgTag, params, NULL, key);
-
- default:
- if (params == NULL)
- return NULL;
- if (result == NULL)
- result = SECITEM_AllocItem(arena, NULL, 0);
-diff --git a/tests/cert/cert.sh b/tests/cert/cert.sh
---- a/tests/cert/cert.sh
-+++ b/tests/cert/cert.sh
-@@ -2234,20 +2234,18 @@ EOF
- # Signature: RSA-PSS (with conflicting hash algorithm)
- CERTNAME="TestUser-rsa-pss7"
-
- CU_ACTION="Generate Cert Request for $CERTNAME"
- CU_SUBJECT="CN=$CERTNAME, E=${CERTNAME}@example.com, O=BOGUS NSS, L=Mountain View, ST=California, C=US"
- certu -R -d "${PROFILEDIR}" -f "${R_PWFILE}" -z "${R_NOISE_FILE}" --pss -o req 2>&1
-
- CU_ACTION="Sign ${CERTNAME}'s Request"
-- RETEXPECTED=255
- certu -C -c "TestCA-rsa-pss" --pss-sign -Z SHA512 -m "${CERTSERIAL}" -v 60 -d "${P_R_CADIR}" \
- -i req -o "${CERTNAME}.cert" -f "${R_PWFILE}" "$1" 2>&1
-- RETEXPECTED=0
-
- CERTSERIAL=`expr $CERTSERIAL + 1`
-
- # Subject certificate: RSA-PSS
- # Issuer certificate: RSA-PSS
- # Signature: RSA-PSS (with compatible hash algorithm)
- CERTNAME="TestUser-rsa-pss8"
-
-@@ -2345,20 +2343,18 @@ EOF
- # Signature: RSA-PSS (with conflicting hash algorithm, default parameters)
- CERTNAME="TestUser-rsa-pss11"
-
- CU_ACTION="Generate Cert Request for $CERTNAME"
- CU_SUBJECT="CN=$CERTNAME, E=${CERTNAME}@example.com, O=BOGUS NSS, L=Mountain View, ST=California, C=US"
- certu -R -d "${PROFILEDIR}" -f "${R_PWFILE}" -z "${R_NOISE_FILE}" --pss -o req 2>&1
-
- CU_ACTION="Sign ${CERTNAME}'s Request"
-- RETEXPECTED=255
- certu -C -c "TestCA-rsa-pss-sha1" --pss-sign -Z SHA256 -m "${CERTSERIAL}" -v 60 -d "${P_R_CADIR}" \
- -i req -o "${CERTNAME}.cert" -f "${R_PWFILE}" "$1" 2>&1
-- RETEXPECTED=0
- }
-
- cert_test_orphan_key_delete()
- {
- CU_ACTION="Create orphan key in serverdir"
- certu -G -k ec -q nistp256 -f "${R_PWFILE}" -z ${R_NOISE_FILE} -d ${PROFILEDIR}
- # Let's get the key ID of the first orphan key.
- # The output of certutil -K (list keys) isn't well formatted.
diff --git a/nss-3.124-annocheck.fix.patch b/nss-3.124-annocheck.fix.patch
deleted file mode 100644
index 64ae590..0000000
--- a/nss-3.124-annocheck.fix.patch
+++ /dev/null
@@ -1,170 +0,0 @@
-# HG changeset patch
-# User Robert Relyea <rrelyea@redhat.com>
-# Date 1780440795 25200
-# Tue Jun 02 15:53:15 2026 -0700
-# Branch NSS_3_124_BRANCH
-# Node ID b1208e88ea45bdc57d04ae64e6614eec7072bd7f
-# Parent 7b631ae5c0693bdb28e9ee9a4171eee2d3d62d0a
-nss-3.124-annocheck.fix.patch
-
-diff --git a/lib/freebl/arcfour-amd64-gas.s b/lib/freebl/arcfour-amd64-gas.s
---- a/lib/freebl/arcfour-amd64-gas.s
-+++ b/lib/freebl/arcfour-amd64-gas.s
-@@ -1,11 +1,35 @@
- # This Source Code Form is subject to the terms of the Mozilla Public
- # License, v. 2.0. If a copy of the MPL was not distributed with this
- # file, You can obtain one at http://mozilla.org/MPL/2.0/.
-+#
-+# none of the functions are used as a target of an indirect call, so
-+# it's safe to set IBT. If we ever need to put these at the end of a
-+# function table pointer, then we should and ENDBR64 instructions as the
-+# first instruction of each function. */
-+# reference names are in /usr/include/elf.h
-+ .section .note.gnu.property,"a"
-+ .align 8
-+ .long 1f - 0f # note_gnu_name_end - note_gnu_name
-+ .long 4f - 1f # note_gnu_descriptor_end -note_gnu_descriptor
-+ .long 5 # GNU_PROPERTY_TYPE_0
-+0: #note_gnu_name
-+ .string "GNU"
-+1: #note_gnu_end
-+ #note_gnu_descriptor
-+ .align 8
-+ .long 0xc0000002 # GNU_PROPERTY_X86_FEATURE_1_AND
-+ .long 3f - 2f #note_gnu_flags_end - note_gnu_flags
-+2: #note_gnu_flags
-+ .long 0x3 # GNU_PROPERTY_X86_FEATURE_1_IBT = 1 |
-+ # GNU_PROPERTY_X86_FEATURE_1_SHSTK = 2
-+3: #note_gnu_flags_end
-+ .align 8
-+4: #note_gnu_descriptor_end
-
- # ** ARCFOUR implementation optimized for AMD64.
- # **
- # ** The throughput achieved by this code is about 320 MBytes/sec, on
- # ** a 1.8 GHz AMD Opteron (rev C0) processor.
-
- .text
- .align 16
-diff --git a/lib/freebl/intel-aes.S b/lib/freebl/intel-aes.S
---- a/lib/freebl/intel-aes.S
-+++ b/lib/freebl/intel-aes.S
-@@ -1,12 +1,34 @@
- /* This Source Code Form is subject to the terms of the Mozilla Public
- * License, v. 2.0. If a copy of the MPL was not distributed with this
- * file, You can obtain one at http://mozilla.org/MPL/2.0/. */
--
-+/* none of the functions are used as a target of an indirect call, so
-+ * it's safe to set IBT. If we ever need to put these at the end of a
-+ * function table pointer, then we should and ENDBR64 instructions as the
-+ * first instruction of each function. */
-+# reference names are in /usr/include/elf.h
-+ .section .note.gnu.property,"a"
-+ .align 8
-+ .long 1f - 0f # note_gnu_name_end - note_gnu_name
-+ .long 4f - 1f # note_gnu_descriptor_end -note_gnu_descriptor
-+ .long 5 # GNU_PROPERTY_TYPE_0
-+0: #note_gnu_name
-+ .string "GNU"
-+1: #note_gnu_end
-+ #note_gnu_descriptor
-+ .align 8
-+ .long 0xc0000002 # GNU_PROPERTY_X86_FEATURE_1_AND
-+ .long 3f - 2f #note_gnu_flags_end - note_gnu_flags
-+2: #note_gnu_flags
-+ .long 0x3 # GNU_PROPERTY_X86_FEATURE_1_IBT = 1 |
-+ # GNU_PROPERTY_X86_FEATURE_1_SHSTK = 2
-+3: #note_gnu_flags_end
-+ .align 8
-+4: #note_gnu_descriptor_end
- .text
-
- #define IV_OFFSET 256
-
- /*
- * Warning: the length values used in this module are "unsigned int"
- * in C, which is 32-bit. When they're passed in registers, use only
- * the low 32 bits, because the top half is unspecified.
-diff --git a/lib/freebl/intel-gcm.S b/lib/freebl/intel-gcm.S
---- a/lib/freebl/intel-gcm.S
-+++ b/lib/freebl/intel-gcm.S
-@@ -1,14 +1,38 @@
- # LICENSE:
- # This submission to NSS is to be made available under the terms of the
- # Mozilla Public License, v. 2.0. You can obtain one at http:
- # //mozilla.org/MPL/2.0/.
- ################################################################################
- # Copyright(c) 2012, Intel Corp.
-+/* none of the functions are used as a target of an indirect call, so
-+ * it's safe to set IBT. If we ever need to put these at the end of a
-+ * function table pointer, then we should and ENDBR64 instructions as the
-+ * first instruction of each function. */
-+# reference names are in /usr/include/elf.h
-+ .section .note.gnu.property,"a"
-+ .align 8
-+ .long 1f - 0f # note_gnu_name_end - note_gnu_name
-+ .long 4f - 1f # note_gnu_descriptor_end -note_gnu_descriptor
-+ .long 5 # GNU_PROPERTY_TYPE_0
-+0: #note_gnu_name
-+ .string "GNU"
-+1: #note_gnu_end
-+ #note_gnu_descriptor
-+ .align 8
-+ .long 0xc0000002 # GNU_PROPERTY_X86_FEATURE_1_AND
-+ .long 3f - 2f #note_gnu_flags_end - note_gnu_flags
-+2: #note_gnu_flags
-+ .long 0x3 # GNU_PROPERTY_X86_FEATURE_1_IBT = 1 |
-+ # GNU_PROPERTY_X86_FEATURE_1_SHSTK = 2
-+3: #note_gnu_flags_end
-+ .align 8
-+4: #note_gnu_descriptor_end
-+ .text
-
- #if defined(DARWIN)
- # define cdecl(s) _##s
- #else
- # define cdecl(s) s
- #endif
-
- #ifndef DARWIN
-diff --git a/lib/freebl/mpi/mpi_amd64_common.S b/lib/freebl/mpi/mpi_amd64_common.S
---- a/lib/freebl/mpi/mpi_amd64_common.S
-+++ b/lib/freebl/mpi/mpi_amd64_common.S
-@@ -398,12 +398,37 @@ s_mpv_mul_add_vec64:
-
- .L27:
- movq %r9, %rax
- ret
-
- #ifndef DARWIN
- .size s_mpv_mul_add_vec64, .-s_mpv_mul_add_vec64
-
-+# Magic indicating IBT is allowed.
-+# none of the functions are used as a target of an indirect call, so
-+# it's safe to set IBT. If we ever need to put these at the end of a
-+# function table pointer, then we should and ENDBR64 instructions as the
-+# first instruction of each function.
-+# reference names are in /usr/include/elf.h
-+ .section .note.gnu.property,"a"
-+ .align 8
-+ .long 1f - 0f # note_gnu_name_end - note_gnu_name
-+ .long 4f - 1f # note_gnu_descriptor_end -note_gnu_descriptor
-+ .long 5 # GNU_PROPERTY_TYPE_0
-+0: #note_gnu_name
-+ .string "GNU"
-+1: #note_gnu_end
-+ #note_gnu_descriptor
-+ .align 8
-+ .long 0xc0000002 # GNU_PROPERTY_X86_FEATURE_1_AND
-+ .long 3f - 2f #note_gnu_flags_end - note_gnu_flags
-+2: #note_gnu_flags
-+ .long 0x3 # GNU_PROPERTY_X86_FEATURE_1_IBT = 1 |
-+ # GNU_PROPERTY_X86_FEATURE_1_SHSTK = 2
-+3: #note_gnu_flags_end
-+ .align 8
-+4: #note_gnu_descriptor_end
-+
- # Magic indicating no need for an executable stack
- .section .note.GNU-stack, "", @progbits
- .previous
- #endif
diff --git a/nss-3.124-fips-key-import-fix.patch b/nss-3.124-fips-key-import-fix.patch
deleted file mode 100644
index 346daa5..0000000
--- a/nss-3.124-fips-key-import-fix.patch
+++ /dev/null
@@ -1,137 +0,0 @@
-diff --git a/lib/pk11wrap/pk11skey.c b/lib/pk11wrap/pk11skey.c
---- a/lib/pk11wrap/pk11skey.c
-+++ b/lib/pk11wrap/pk11skey.c
-@@ -436,11 +436,11 @@
- }
-
- static PK11SymKey *
- pk11_ImportSymKeyWithTempl(PK11SlotInfo *slot, CK_MECHANISM_TYPE type,
- PK11Origin origin, PRBool isToken, CK_ATTRIBUTE *keyTemplate,
-- unsigned int templateCount, SECItem *key, void *wincx)
-+ unsigned int templateCount, SECItem *key, PRBool force, void *wincx)
- {
- PK11SymKey *symKey;
- SECStatus rv;
-
- symKey = pk11_CreateSymKey(slot, type, !isToken, PR_TRUE, wincx);
-@@ -461,16 +461,65 @@
- symKey->origin = origin;
-
- /* import the keys */
- rv = PK11_CreateNewObject(slot, symKey->session, keyTemplate,
- templateCount, isToken, &symKey->objectID);
-- if (rv != SECSuccess) {
-+ if (rv == SECSuccess) {
-+ return symKey;
-+ }
-+ /* we failed to create the key, if force isn't set, we just fail now */
-+ if (!force) {
-+ PK11_FreeSymKey(symKey);
-+ return NULL;
-+ }
-+ /* if force is set, we are simulating an unwrap, probably from another token, we
-+ * are probably here because we are trying to import into a FIPS token. Normally
-+ * we would want this to fail, but the application got here because they are using
-+ * unwrap, which is the correct way to do this, so try to import the key into
-+ * the FIPS token my hand */
-+ /* first generate a seed key */
-+ PK11SymKey *seedKey = PK11_KeyGen(slot, CKM_SHA256_HMAC, NULL, 256, wincx);
-+
-+ if (seedKey == NULL) {
- PK11_FreeSymKey(symKey);
- return NULL;
- }
-
-- return symKey;
-+ /* now append our key data to the seed key and truncate the seed key */
-+ CK_KEY_DERIVATION_STRING_DATA params = { 0 };
-+ CK_MECHANISM mechanism = { 0, NULL, 0 };
-+ params.pData = key->data;
-+ params.ulLen = key->len;
-+ mechanism.mechanism = CKM_CONCATENATE_DATA_AND_BASE;
-+ mechanism.pParameter = ¶ms;
-+ mechanism.ulParameterLen = sizeof(params);
-+
-+ /* derive removed the CKA_VALUE_LEN before it called us, but now we need
-+ * it back. We know there is space in the template because derive leaves
-+ * space for the CKA_VALUE_LEN attribute. Any other callers that set force
-+ * should also make sure there is space for the CKA_VALUE_LEN */
-+ CK_ULONG valueLen; /* Don't define this in the 'if' statement, because it
-+ * would go out of scope before we use it */
-+ if (!pk11_FindAttrInTemplate(keyTemplate, templateCount, CKA_VALUE_LEN)) {
-+ valueLen = (CK_ULONG)key->len;
-+ keyTemplate[templateCount].type = CKA_VALUE_LEN;
-+ keyTemplate[templateCount].pValue = (void *)&valueLen;
-+ keyTemplate[templateCount].ulValueLen = sizeof(valueLen);
-+ templateCount++;
-+ }
-+
-+ CK_RV crv = PK11_GETTAB(slot)->C_DeriveKey(symKey->session, &mechanism,
-+ seedKey->objectID, keyTemplate,
-+ templateCount,
-+ &symKey->objectID);
-+ PK11_FreeSymKey(seedKey);
-+ if (crv == CKR_OK) {
-+ return symKey;
-+ }
-+
-+ PK11_FreeSymKey(symKey);
-+ return NULL;
- }
-
- /*
- * turn key bits into an appropriate key object
- */
-@@ -504,11 +553,11 @@
- templateCount = attrs - keyTemplate;
- PR_ASSERT(templateCount + 1 <= sizeof(keyTemplate) / sizeof(CK_ATTRIBUTE));
-
- keyType = PK11_GetKeyType(type, key->len);
- symKey = pk11_ImportSymKeyWithTempl(slot, type, origin, PR_FALSE,
-- keyTemplate, templateCount, key, wincx);
-+ keyTemplate, templateCount, key, PR_FALSE, wincx);
- return symKey;
- }
- /* Import a PKCS #11 data object and return it as a key. This key is
- * only useful in a limited number of mechanisms, such as HKDF. */
- PK11SymKey *
-@@ -583,11 +632,11 @@
- templateCount = attrs - keyTemplate;
- PR_ASSERT(templateCount + 1 <= sizeof(keyTemplate) / sizeof(CK_ATTRIBUTE));
-
- keyType = PK11_GetKeyType(type, key->len);
- symKey = pk11_ImportSymKeyWithTempl(slot, type, origin, isPerm,
-- keyTemplate, templateCount, key, wincx);
-+ keyTemplate, templateCount, key, PR_FALSE, wincx);
- if (symKey && isPerm) {
- symKey->owner = PR_FALSE;
- }
- return symKey;
- }
-@@ -2667,11 +2716,11 @@
- outKey.type = siBuffer;
-
- if (PK11_DoesMechanism(slot, target)) {
- symKey = pk11_ImportSymKeyWithTempl(slot, target, PK11_OriginUnwrap,
- isPerm, keyTemplate,
-- templateCount, &outKey, wincx);
-+ templateCount, &outKey, PR_TRUE, wincx);
- } else {
- slot = PK11_GetBestSlot(target, wincx);
- if (slot == NULL) {
- PORT_SetError(SEC_ERROR_NO_MODULE);
- PORT_Free(outKey.data);
-@@ -2679,11 +2728,11 @@
- *crvp = CKR_DEVICE_ERROR;
- return NULL;
- }
- symKey = pk11_ImportSymKeyWithTempl(slot, target, PK11_OriginUnwrap,
- isPerm, keyTemplate,
-- templateCount, &outKey, wincx);
-+ templateCount, &outKey, PR_TRUE, wincx);
- PK11_FreeSlot(slot);
- }
- PORT_Free(outKey.data);
-
- if (crvp)
-
diff --git a/nss-3.124-fix-ed-key-storage.patch b/nss-3.124-fix-ed-key-storage.patch
deleted file mode 100644
index 77517fc..0000000
--- a/nss-3.124-fix-ed-key-storage.patch
+++ /dev/null
@@ -1,627 +0,0 @@
-diff --git a/cmd/lib/secutil.c b/cmd/lib/secutil.c
---- a/cmd/lib/secutil.c
-+++ b/cmd/lib/secutil.c
-@@ -1603,10 +1603,18 @@
-
- case ecKey:
- secu_PrintECPublicKey(out, pk, "EC Public Key", level + 1);
- break;
-
-+ case ecMontKey:
-+ secu_PrintECPublicKey(out, pk, "EC Montgomery Public Key", level + 1);
-+ break;
-+
-+ case edKey:
-+ secu_PrintECPublicKey(out, pk, "EC Edwards Public Key", level + 1);
-+ break;
-+
- case mldsaKey:
- SECU_PrintMLDSAPublicKey(out, pk, "ML-DSA Public Key", level + 1);
- break;
-
- case kyberKey:
-diff --git a/cmd/pk11importtest/pk11importtest.c b/cmd/pk11importtest/pk11importtest.c
---- a/cmd/pk11importtest/pk11importtest.c
-+++ b/cmd/pk11importtest/pk11importtest.c
-@@ -191,10 +191,12 @@
- " -r skip rsa test",
- " -D skip dsa test",
- " -h skip dh test",
- " -e skip ec test",
- " -K skip mk-kem test",
-+ " -w skip ed test",
-+ " -g skip ec montgomery test",
- };
- static int nUsageInfo = sizeof(usageInfo) / sizeof(char *);
-
- static void
- Usage(char *progName, FILE *outFile)
-@@ -216,10 +218,12 @@
- opt_NoRSA,
- opt_NoDSA,
- opt_NoDH,
- opt_NoEC,
- opt_NoMLKEM,
-+ opt_NoED,
-+ opt_NoECMont,
- };
-
- static secuCommandFlag options[] = {
- { /* opt_CertDir */ 'd', PR_TRUE, 0, PR_FALSE },
- { /* opt_KeySize */ 'k', PR_TRUE, 0, PR_FALSE },
-@@ -230,10 +234,12 @@
- { /* opt_NoRSA */ 'r', PR_FALSE, 0, PR_FALSE },
- { /* opt_NoDSA */ 'D', PR_FALSE, 0, PR_FALSE },
- { /* opt_NoDH */ 'h', PR_FALSE, 0, PR_FALSE },
- { /* opt_NoEC */ 'e', PR_FALSE, 0, PR_FALSE },
- { /* opt_NoMLKEM */ 'K', PR_FALSE, 0, PR_FALSE },
-+ { /* opt_NoED */ 'w', PR_FALSE, 0, PR_FALSE },
-+ { /* opt_NoECMont */ 'g', PR_FALSE, 0, PR_FALSE },
- };
-
- int
- main(int argc, char **argv)
- {
-@@ -246,10 +252,12 @@
- PRBool doRSA = PR_TRUE;
- PRBool doDSA = PR_TRUE;
- PRBool doDH = PR_FALSE; /* NSS currently can't export wrapped DH keys */
- PRBool doEC = PR_TRUE;
- PRBool doMLKEM = PR_TRUE;
-+ PRBool doED = PR_TRUE;
-+ PRBool doECMont = PR_TRUE;
- PRBool noPub = PR_FALSE;
- PQGParams *pqgParams = NULL;
- int keySize;
-
- args.numCommands = 0;
-@@ -410,10 +418,55 @@
- fprintf(stderr, "MLKEM Import Failed!\n");
- failed = PR_TRUE;
- }
- }
-
-+ if (doED) {
-+ SECKEYECParams ecParams;
-+ SECOidData *curve = SECOID_FindOIDByTag(SEC_OID_ED25519);
-+ ecParams.data = PORT_Alloc(curve->oid.len + 2);
-+ if (ecParams.data == NULL) {
-+ rv = SECFailure;
-+ goto ed_failed;
-+ }
-+ ecParams.data[0] = SEC_ASN1_OBJECT_ID;
-+ ecParams.data[1] = (unsigned char)curve->oid.len;
-+ PORT_Memcpy(&ecParams.data[2], curve->oid.data, curve->oid.len);
-+ ecParams.len = curve->oid.len + 2;
-+ rv = handleEncryptedPrivateImportTest(progName, slot, "EDDSA",
-+ CKM_EC_EDWARDS_KEY_PAIR_GEN,
-+ noPub, &ecParams, &pwArgs);
-+ PORT_Free(ecParams.data);
-+ ed_failed:
-+ if (rv != SECSuccess) {
-+ fprintf(stderr, "EDDSA Import Failed!\n");
-+ failed = PR_TRUE;
-+ }
-+ }
-+ if (doECMont) {
-+ SECKEYECParams ecParams;
-+ SECOidData *curve = SECOID_FindOIDByTag(SEC_OID_X25519);
-+ ecParams.data = PORT_Alloc(curve->oid.len + 2);
-+ if (ecParams.data == NULL) {
-+ rv = SECFailure;
-+ goto ecmont_failed;
-+ }
-+ ecParams.data[0] = SEC_ASN1_OBJECT_ID;
-+ ecParams.data[1] = (unsigned char)curve->oid.len;
-+ PORT_Memcpy(&ecParams.data[2], curve->oid.data, curve->oid.len);
-+ ecParams.len = curve->oid.len + 2;
-+ rv = handleEncryptedPrivateImportTest(progName, slot, "EC Mont",
-+ CKM_EC_MONTGOMERY_KEY_PAIR_GEN,
-+ noPub, &ecParams, &pwArgs);
-+ PORT_Free(ecParams.data);
-+ ecmont_failed:
-+ if (rv != SECSuccess) {
-+ fprintf(stderr, "EC Montgomery Import Failed!\n");
-+ failed = PR_TRUE;
-+ }
-+ }
-+
- if (pqgParams) {
- PK11_PQG_DestroyParams(pqgParams);
- }
-
- if (slot) {
-diff --git a/lib/softoken/lowkey.c b/lib/softoken/lowkey.c
---- a/lib/softoken/lowkey.c
-+++ b/lib/softoken/lowkey.c
-@@ -43,10 +43,15 @@
- { SEC_ASN1_OCTET_STRING,
- offsetof(NSSLOWKEYPrivateKeyInfo, privateKey) },
- { SEC_ASN1_OPTIONAL | SEC_ASN1_CONSTRUCTED | SEC_ASN1_CONTEXT_SPECIFIC | 0,
- offsetof(NSSLOWKEYPrivateKeyInfo, attributes),
- nsslowkey_SetOfAttributeTemplate },
-+ { SEC_ASN1_OPTIONAL | SEC_ASN1_CONSTRUCTED |
-+ SEC_ASN1_EXPLICIT | SEC_ASN1_CONTEXT_SPECIFIC |
-+ SEC_ASN1_XTRN | 1,
-+ offsetof(NSSLOWKEYPrivateKeyInfo, publicKey),
-+ SEC_ASN1_SUB(SEC_BitStringTemplate) },
- { 0 }
- };
-
- const SEC_ASN1Template nsslowkey_SubjectPublicKeyInfoTemplate[] = {
- { SEC_ASN1_SEQUENCE, 0, NULL, sizeof(NSSLOWKEYSubjectPublicKeyInfo) },
-@@ -399,10 +404,12 @@
- if (rv == SECSuccess)
- return pubk;
- }
- break;
- case NSSLOWKEYECKey:
-+ case NSSLOWKEYECEdwardsKey:
-+ case NSSLOWKEYECMontgomeryKey:
- pubk = (NSSLOWKEYPublicKey *)PORT_ArenaZAlloc(arena,
- sizeof(NSSLOWKEYPublicKey));
- if (pubk != NULL) {
- SECStatus rv;
-
-@@ -631,10 +638,12 @@
- &(privKey->u.dh.base));
- if (rv != SECSuccess)
- break;
- break;
- case NSSLOWKEYECKey:
-+ case NSSLOWKEYECEdwardsKey:
-+ case NSSLOWKEYECMontgomeryKey:
- rv = SECITEM_CopyItem(poolp, &(returnKey->u.ec.version),
- &(privKey->u.ec.version));
- if (rv != SECSuccess)
- break;
- rv = SECITEM_CopyItem(poolp, &(returnKey->u.ec.publicValue),
-diff --git a/lib/softoken/lowkeyti.h b/lib/softoken/lowkeyti.h
---- a/lib/softoken/lowkeyti.h
-+++ b/lib/softoken/lowkeyti.h
-@@ -48,10 +48,11 @@
- PLArenaPool *arena;
- SECItem version;
- SECAlgorithmID algorithm;
- SECItem privateKey;
- NSSLOWKEYAttribute **attributes;
-+ SECItem publicKey;
- };
- typedef struct NSSLOWKEYPrivateKeyInfoStr NSSLOWKEYPrivateKeyInfo;
- #define NSSLOWKEY_PRIVATE_KEY_INFO_VERSION 0 /* what we *create* */
-
- struct NSSLOWKEYSubjectPublicKeyInfoStr {
-@@ -65,12 +66,14 @@
- NSSLOWKEYNullKey = 0,
- NSSLOWKEYRSAKey = 1,
- NSSLOWKEYDSAKey = 2,
- NSSLOWKEYDHKey = 4,
- NSSLOWKEYECKey = 5,
-- NSSLOWKEYMLDSAKey = 6,
-- NSSLOWKEYMLKEMKey = 7,
-+ NSSLOWKEYECEdwardsKey = 6,
-+ NSSLOWKEYECMontgomeryKey = 7,
-+ NSSLOWKEYMLDSAKey = 8,
-+ NSSLOWKEYMLKEMKey = 9,
- } NSSLOWKEYType;
-
- /* ML KEM low structures packages a key with it's parameters.
- * The ML KEM freebl didn't define these because all the functions
- * take raw keys and param separately */
-diff --git a/lib/softoken/pkcs11.c b/lib/softoken/pkcs11.c
---- a/lib/softoken/pkcs11.c
-+++ b/lib/softoken/pkcs11.c
-@@ -2223,13 +2223,18 @@
- break;
- crv = sftk_Attribute2SSecItem(arena, &pubKey->u.dh.publicValue,
- object, CKA_VALUE);
- break;
- case CKK_EC_EDWARDS:
-+ pubKey->keyType = NSSLOWKEYECEdwardsKey;
-+ goto ec_continue;
- case CKK_EC_MONTGOMERY:
-+ pubKey->keyType = NSSLOWKEYECMontgomeryKey;
-+ goto ec_continue;
- case CKK_EC:
- pubKey->keyType = NSSLOWKEYECKey;
-+ ec_continue:
- crv = sftk_Attribute2SSecItem(arena,
- &pubKey->u.ec.ecParams.DEREncoding,
- object, CKA_EC_PARAMS);
- if (crv != CKR_OK)
- break;
-@@ -2451,13 +2456,18 @@
- itemTemplateCount++;
- /* privKey was zero'd so public value is already set to NULL, 0
- * if we don't set it explicitly */
- break;
- case CKK_EC_EDWARDS:
-+ privKey->keyType = NSSLOWKEYECEdwardsKey;
-+ goto ec_continue;
- case CKK_EC_MONTGOMERY:
-+ privKey->keyType = NSSLOWKEYECMontgomeryKey;
-+ goto ec_continue;
- case CKK_EC:
- privKey->keyType = NSSLOWKEYECKey;
-+ ec_continue:
- crv = sftk_Attribute2SSecItem(arena,
- &privKey->u.ec.ecParams.DEREncoding,
- object, CKA_EC_PARAMS);
- if (crv != CKR_OK)
- break;
-@@ -2514,10 +2524,11 @@
- case CKK_NSS_KYBER:
- #endif
- case CKK_NSS_ML_KEM:
- case CKK_ML_KEM:
- privKey->keyType = NSSLOWKEYMLKEMKey;
-+
- crv = sftk_GetULongAttribute(object, CKA_PARAMETER_SET,
- ¶mSet);
- if (crv != CKR_OK) {
- crv = sftk_GetULongAttribute(object, CKA_NSS_PARAMETER_SET,
- ¶mSet);
-diff --git a/lib/softoken/pkcs11c.c b/lib/softoken/pkcs11c.c
---- a/lib/softoken/pkcs11c.c
-+++ b/lib/softoken/pkcs11c.c
-@@ -6465,12 +6465,10 @@
- * the private key */
- seed.data = seedData;
- seed.len = sizeof(seedData);
- rv = RNG_GenerateGlobalRandomBytes(seed.data, seed.len);
- if (rv != SECSuccess) {
-- fprintf(stderr, "Generate bytes failed nbytes=%d err=%d\n",
-- seed.len, PORT_GetError());
- crv = sftk_MapCryptError(PORT_GetError());
- goto kyber_done;
- }
-
- KyberParams kyberParams = sftk_kyber_PK11ParamToInternal(genParamSet);
-@@ -6482,12 +6480,10 @@
- crv = CKR_HOST_MEMORY;
- goto kyber_done;
- }
- rv = Kyber_NewKey(kyberParams, &seed, &privKey, &pubKey);
- if (rv != SECSuccess) {
-- fprintf(stderr, "Generate Kyber_NewKey failed nbytes=%d err=%d\n",
-- seed.len, PORT_GetError());
- crv = sftk_MapCryptError(PORT_GetError());
- goto kyber_done;
- }
-
- crv = sftk_AddAttributeType(publicKey, CKA_VALUE, sftk_item_expand(&pubKey));
-@@ -6902,10 +6898,11 @@
- param = SEC_ASN1EncodeItem(NULL, NULL, &(lk->u.dsa.params),
- nsslowkey_PQGParamsTemplate);
- algorithm = SEC_OID_ANSIX9_DSA_SIGNATURE;
- break;
- case NSSLOWKEYECKey:
-+ algorithm = SEC_OID_ANSIX962_EC_PUBLIC_KEY;
- prepare_low_ec_priv_key_for_asn1(lk);
- /* Public value is encoded as a bit string so adjust length
- * to be in bits before ASN encoding and readjust
- * immediately after.
- *
-@@ -6926,12 +6923,30 @@
- SEC_PRINT("sftk_PackagePrivateKey()", "PrivateKey", lk->keyType,
- fordebug);
- #endif
-
- param = SECITEM_DupItem(&lk->u.ec.ecParams.DEREncoding);
--
-- algorithm = SEC_OID_ANSIX962_EC_PUBLIC_KEY;
-+ break;
-+ /* X25519, ED25519, X448, and ED448 encode the private key
-+ * as just and int. The public key and Curve come from the
-+ * generaly key structure */
-+ case NSSLOWKEYECEdwardsKey:
-+ algorithm = SEC_OID_ED25519;
-+ goto ec_continue;
-+ case NSSLOWKEYECMontgomeryKey:
-+ algorithm = SEC_OID_X25519;
-+ ec_continue:
-+ prepare_low_ec_priv_key_for_asn1(lk);
-+ /* if we have a public key, copy it to pki public key */
-+ if (lk->u.ec.publicValue.len) {
-+ pki->publicKey = lk->u.ec.publicValue;
-+ pki->publicKey.len <<= 3;
-+ }
-+ dummy = SEC_ASN1EncodeItem(arena, &pki->privateKey,
-+ &lk->u.ec.privateValue,
-+ SEC_ASN1_GET(SEC_OctetStringTemplate));
-+ param = NULL;
- break;
- case NSSLOWKEYMLKEMKey: {
- SECItem seed = { siBuffer, NULL, 0 };
- SECItem rawKey = { siBuffer, NULL, 0 };
- dummy = NULL;
-@@ -7258,10 +7273,12 @@
- PLArenaPool *arena;
- NSSLOWKEYPrivateKey *lpk = NULL;
- NSSLOWKEYPrivateKeyInfo *pki = NULL;
- CK_RV crv = CKR_KEY_TYPE_INCONSISTENT;
- CK_ULONG paramSet = 0;
-+ const SECOidData *oidData = NULL;
-+ SECOidTag pkiAlg = SEC_OID_UNKNOWN;
-
- arena = PORT_NewArena(2048);
- if (!arena) {
- return SECFailure;
- }
-@@ -7283,11 +7300,12 @@
- if (lpk == NULL) {
- goto loser;
- }
- lpk->arena = arena;
-
-- switch (SECOID_GetAlgorithmTag(&pki->algorithm)) {
-+ pkiAlg = SECOID_GetAlgorithmTag(&pki->algorithm);
-+ switch (pkiAlg) {
- case SEC_OID_PKCS1_RSA_ENCRYPTION:
- case SEC_OID_PKCS1_RSA_PSS_SIGNATURE:
- keyTemplate = nsslowkey_RSAPrivateKeyTemplate;
- paramTemplate = NULL;
- paramDest = NULL;
-@@ -7309,10 +7327,46 @@
- paramDest = &(lpk->u.ec.ecParams.DEREncoding);
- lpk->keyType = NSSLOWKEYECKey;
- prepare_low_ec_priv_key_for_asn1(lpk);
- prepare_low_ecparams_for_asn1(&lpk->u.ec.ecParams);
- break;
-+ case SEC_OID_X25519:
-+ lpk->keyType = NSSLOWKEYECMontgomeryKey;
-+ goto ecx_continue;
-+ case SEC_OID_ED25519:
-+ lpk->keyType = NSSLOWKEYECEdwardsKey;
-+ ecx_continue:
-+ /* we decode the whole key here rather than do the normal
-+ * later decode step */
-+ keyTemplate = NULL;
-+ paramTemplate = NULL;
-+ paramDest = NULL;
-+ oidData = SECOID_FindOIDByTag(pkiAlg);
-+ if (oidData == NULL) {
-+ goto loser;
-+ }
-+ /* CURVE is provided by the tag, not encoded in the parameters
-+ * for the x25519, x448, ed25519 and ed448 keys */
-+ if (SEC_ASN1EncodeItem(arena, &(lpk->u.ec.ecParams.DEREncoding),
-+ &oidData->oid,
-+ SEC_ASN1_GET(SEC_ObjectIDTemplate)) == NULL) {
-+ goto loser;
-+ }
-+ prepare_low_ec_priv_key_for_asn1(lpk);
-+ /* private key is a simple octet string, just decode it now */
-+ rv = SEC_QuickDERDecodeItem(arena, &(lpk->u.ec.privateValue),
-+ SEC_ASN1_GET(SEC_OctetStringTemplate),
-+ &(pki->privateKey));
-+ if (rv != SECSuccess) {
-+ goto loser;
-+ }
-+ if (pki->publicKey.len) {
-+ lpk->u.ec.publicValue = pki->publicKey;
-+ /* convert length in bits to length in bytes */
-+ lpk->u.ec.publicValue.len >>= 3;
-+ }
-+ break;
- case SEC_OID_ML_KEM_768:
- paramSet = CKP_ML_KEM_768;
- goto mlkem_next;
- case SEC_OID_ML_KEM_1024:
- paramSet = CKP_ML_KEM_1024;
-@@ -7344,30 +7398,31 @@
- case SEC_ASN1_CONSTRUCTED | SEC_ASN1_SEQUENCE:
- keyTemplate = nsslowkey_PQBothSeedAndPrivateKeyTemplate;
- break;
- default:
- keyTemplate = NULL;
-- break;
-+ PORT_SetError(SEC_ERROR_BAD_KEY);
-+ goto loser;
- }
-
- paramTemplate = NULL;
- paramDest = NULL;
- /* genpq encodes ocect, not integer, so no need to prep it */
- break;
- default:
- keyTemplate = NULL;
- paramTemplate = NULL;
- paramDest = NULL;
-- break;
-- }
--
-- if (!keyTemplate) {
-- goto loser;
-+ PORT_SetError(SEC_ERROR_BAD_KEY);
-+ goto loser;
- }
-
- /* decode the private key and any algorithm parameters */
-- rv = SEC_QuickDERDecodeItem(arena, lpk, keyTemplate, &pki->privateKey);
-+ rv = SECSuccess;
-+ if (keyTemplate) {
-+ rv = SEC_QuickDERDecodeItem(arena, lpk, keyTemplate, &pki->privateKey);
-+ }
-
- if (lpk->keyType == NSSLOWKEYECKey) {
- /* convert length in bits to length in bytes */
- lpk->u.ec.publicValue.len >>= 3;
- rv = SECITEM_CopyItem(arena,
-@@ -7560,13 +7615,19 @@
- template = dhTemplate;
- templateCount = sizeof(dhTemplate) / sizeof(CK_ATTRIBUTE);
- keyType = CKK_DH;
- break;
- #endif
-- /* what about fortezza??? */
-+ case NSSLOWKEYECEdwardsKey:
-+ keyType = CKK_EC_EDWARDS;
-+ goto ec_import_continue;
-+ case NSSLOWKEYECMontgomeryKey:
-+ keyType = CKK_EC_MONTGOMERY;
-+ goto ec_import_continue;
- case NSSLOWKEYECKey:
- keyType = CKK_EC;
-+ ec_import_continue:
- /* if we weren't passed the CKA_NSS_DB, get it
- * from the public key */
- if (!sftk_hasAttribute(key, CKA_NSS_DB)) {
- if (lpk->u.ec.publicValue.len == 0) {
- crv = CKR_KEY_TYPE_INCONSISTENT;
-diff --git a/lib/softoken/pkcs11u.c b/lib/softoken/pkcs11u.c
---- a/lib/softoken/pkcs11u.c
-+++ b/lib/softoken/pkcs11u.c
-@@ -1642,10 +1642,12 @@
- case CKK_DH:
- crv = stfk_CopyTokenAttributes(destObject, src_to, dhPrivKeyAttrs,
- dhPrivKeyAttrsCount);
- break;
- case CKK_EC:
-+ case CKK_EC_EDWARDS:
-+ case CKK_EC_MONTGOMERY:
- crv = stfk_CopyTokenAttributes(destObject, src_to, ecPrivKeyAttrs,
- ecPrivKeyAttrsCount);
- break;
- default:
- crv = CKR_DEVICE_ERROR; /* shouldn't happen unless we store more types
-@@ -1706,10 +1708,12 @@
- case CKK_DH:
- crv = stfk_CopyTokenAttributes(destObject, src_to, dhPubKeyAttrs,
- dhPubKeyAttrsCount);
- break;
- case CKK_EC:
-+ case CKK_EC_EDWARDS:
-+ case CKK_EC_MONTGOMERY:
- crv = stfk_CopyTokenAttributes(destObject, src_to, ecPubKeyAttrs,
- ecPubKeyAttrsCount);
- break;
- default:
- crv = CKR_DEVICE_ERROR; /* shouldn't happen unless we store more types
-diff --git a/lib/util/secoid.c b/lib/util/secoid.c
---- a/lib/util/secoid.c
-+++ b/lib/util/secoid.c
-@@ -640,14 +640,14 @@
- a private key, and a signature (for the two EdDSA related OIDs).
- Additional encoding information is provided below for each of these
- locations.
- */
-
--CONST_OID ed25519PublicKey[] = { 0x2B, 0x65, 0x70 };
--CONST_OID ed25519Signature[] = { 0x2B, 0x65, 0x70 };
--
- /*https://www.rfc-editor.org/rfc/rfc8410#section-3*/
-+/* 1.3.101.112 */
-+CONST_OID ed25519[] = { 0x2B, 0x65, 0x70 };
-+/* 1.3.101.110 */
- CONST_OID x25519PublicKey[] = { 0x2b, 0x65, 0x6e };
-
- /*
- * ML-DSA OIDs
- * https://csrc.nist.gov/projects/computer-security-objects-register/algorithm-registration
-@@ -1869,15 +1869,18 @@
- OD(hmac_sha3_512, SEC_OID_HMAC_SHA3_512, "HMAC SHA3-512", CKM_SHA3_512_HMAC, INVALID_CERT_EXTENSION),
-
- ODE(SEC_OID_XYBER768D00,
- "X25519+Kyber768 key exchange", CKM_INVALID_MECHANISM, INVALID_CERT_EXTENSION),
-
-- OD(ed25519Signature, SEC_OID_ED25519_SIGNATURE, "X9.62 EDDSA signature", CKM_EDDSA,
-- INVALID_CERT_EXTENSION),
-+ /* SEC_OID_ED25519_PUBLIC_KEY and SEC_OID_ED25519_SIGNATURE have the same
-+ * values, so we should only have one entry in the table, We can't
-+ * shift the values of the other entries, so just leav a dead spot here */
-+ ODE(SEC_OID_RESERVED_OLD_EDSIG, "Reserved", CKM_INVALID_MECHANISM,
-+ INVALID_CERT_EXTENSION),
-
-- OD(ed25519PublicKey, SEC_OID_ED25519_PUBLIC_KEY,
-- "X9.62 elliptic edwards curve public key", CKM_EC_EDWARDS_KEY_PAIR_GEN, INVALID_CERT_EXTENSION),
-+ OD(ed25519, SEC_OID_ED25519,
-+ "X9.62 Elliptic Edwards Curve 25519", CKM_EDDSA, INVALID_CERT_EXTENSION),
-
- OD(dhSinglePassstdDHsha1kdfscheme, SEC_OID_DHSINGLEPASS_STDDH_SHA1KDF_SCHEME,
- "Elliptic Curve Diffie-Hellman Single Pass Standard with SHA1 KDF", CKM_ECDH1_DERIVE,
- INVALID_CERT_EXTENSION),
- OD(dhSinglePassstdDHsha224kdfscheme, SEC_OID_DHSINGLEPASS_STDDH_SHA224KDF_SCHEME,
-diff --git a/lib/util/secoidt.h b/lib/util/secoidt.h
---- a/lib/util/secoidt.h
-+++ b/lib/util/secoidt.h
-@@ -512,12 +512,12 @@
- SEC_OID_HMAC_SHA3_384 = 370,
- SEC_OID_HMAC_SHA3_512 = 371,
-
- SEC_OID_XYBER768D00 = 372,
-
-- SEC_OID_ED25519_SIGNATURE = 373,
-- SEC_OID_ED25519_PUBLIC_KEY = 374,
-+ SEC_OID_RESERVED_OLD_EDSIG = 373,
-+ SEC_OID_ED25519 = 374,
-
- SEC_OID_DHSINGLEPASS_STDDH_SHA1KDF_SCHEME = 375,
- SEC_OID_DHSINGLEPASS_STDDH_SHA224KDF_SCHEME = 376,
- SEC_OID_DHSINGLEPASS_STDDH_SHA256KDF_SCHEME = 377,
- SEC_OID_DHSINGLEPASS_STDDH_SHA384KDF_SCHEME = 378,
-@@ -561,10 +561,14 @@
- #define SEC_OID_ML_DSA_65_SIGNATURE SEC_OID_ML_DSA_65
- #define SEC_OID_ML_DSA_65_PUBLIC_KEY SEC_OID_ML_DSA_65
- #define SEC_OID_ML_DSA_87_SIGNATURE SEC_OID_ML_DSA_87
- #define SEC_OID_ML_DSA_87_PUBLIC_KEY SEC_OID_ML_DSA_87
-
-+/* EDDSA have the same identifiers for public keys and signatures */
-+#define SEC_OID_ED25519_SIGNATURE SEC_OID_ED25519
-+#define SEC_OID_ED25519_PUBLIC_KEY SEC_OID_ED25519
-+
- typedef enum {
- INVALID_CERT_EXTENSION = 0,
- UNSUPPORTED_CERT_EXTENSION = 1,
- SUPPORTED_CERT_EXTENSION = 2
- } SECSupportExtenTag;
-diff --git a/tests/tools/tools.sh b/tests/tools/tools.sh
---- a/tests/tools/tools.sh
-+++ b/tests/tools/tools.sh
-@@ -126,10 +126,11 @@
- cp ${QADIR}/tools/pbmac1-valid-sha512.p12 ${TOOLSDIR}/data
- cp ${QADIR}/tools/pbmac1-invalid-bad-iter.p12 ${TOOLSDIR}/data
- cp ${QADIR}/tools/pbmac1-invalid-bad-salt.p12 ${TOOLSDIR}/data
- cp ${QADIR}/tools/pbmac1-invalid-no-length.p12 ${TOOLSDIR}/data
- cp ${QADIR}/tools/corrupted_cert_bag.p12 ${TOOLSDIR}/data
-+ cp ${QADIR}/tools/openssl-ed25519.p12 ${TOOLSDIR}/data
- cp ${QADIR}/tools/openssl-ml-kem-768-seed.p12 ${TOOLSDIR}/data
- cp ${QADIR}/tools/openssl-ml-kem-768-priv.p12 ${TOOLSDIR}/data
- cp ${QADIR}/tools/openssl-ml-kem-768-both.p12 ${TOOLSDIR}/data
- cp ${QADIR}/tools/openssl-ml-kem-1024-seed.p12 ${TOOLSDIR}/data
- cp ${QADIR}/tools/openssl-ml-kem-1024-priv.p12 ${TOOLSDIR}/data
-@@ -534,10 +535,21 @@
- check_tmpfile
-
- return $ret
- }
-
-+tools_p12_import_ed25519_private_key()
-+{
-+ echo "$SCRIPTNAME: Importing ED25519 private key from PKCS#12 file --------------"
-+ ${BINDIR}/pk12util -i ${TOOLSDIR}/data/openssl-ed25519.p12 -d ${P_R_COPYDIR} -k ${R_PWFILE} -W 'test' 2>&1
-+ ret=$?
-+ html_msg $ret 0 "Importing ED25519 private key from PKCS#12 file"
-+ check_tmpfile
-+
-+ return $ret
-+}
-+
- tools_p12_ml_kem_import()
- {
- echo "$SCRIPTNAME: Testing ml-kem compatibility with pkcs12 --------------"
- for i in 768 1024
- do
-@@ -614,10 +626,11 @@
- fi
- tools_p12_export_with_none_ciphers
- tools_p12_export_with_invalid_ciphers
- tools_p12_import_old_files
- tools_p12_import_pbmac1_samples
-+ tools_p12_import_ed25519_private_key
- tools_p12_ml_kem_import
- if using_sql; then
- tools_p12_import_rsa_pss_private_key
- tools_p12_policy
- fi
-
diff --git a/nss-3.124-fix-pub-key-import-encapsulate.patch b/nss-3.124-fix-pub-key-import-encapsulate.patch
deleted file mode 100644
index 39cccc7..0000000
--- a/nss-3.124-fix-pub-key-import-encapsulate.patch
+++ /dev/null
@@ -1,217 +0,0 @@
-# HG changeset patch
-# User Robert Relyea <rrelyea@redhat.com>
-# Date 1781029720 25200
-# Tue Jun 09 11:28:40 2026 -0700
-# Branch NSS_3_124_BRANCH
-# Node ID 1e0565f958c9e9ce4713a19eeee3541286133fb6
-# Parent d9ba1487c7c6821154edd972c88cecba1d458503
-nss-3.124-fix-pub-key-import-encapsulate.patch
-
-diff --git a/lib/pk11wrap/pk11skey.c b/lib/pk11wrap/pk11skey.c
---- a/lib/pk11wrap/pk11skey.c
-+++ b/lib/pk11wrap/pk11skey.c
-@@ -3124,33 +3124,54 @@ SECStatus
- PK11_Encapsulate(SECKEYPublicKey *pubKey, CK_MECHANISM_TYPE target,
- PK11AttrFlags attrFlags, CK_FLAGS opFlags,
- PK11SymKey **outKey, SECItem **outCiphertext)
- {
- PORT_Assert(pubKey);
- PORT_Assert(outKey);
- PORT_Assert(outCiphertext);
-
-- PK11SlotInfo *slot = pubKey->pkcs11Slot;
-
- PK11SymKey *sharedSecret = NULL;
- SECItem *ciphertext = NULL;
-
- CK_ATTRIBUTE keyTemplate[MAX_TEMPL_ATTRS];
- unsigned int templateCount;
-
-+
- CK_ATTRIBUTE *attrs;
- CK_BBOOL cktrue = CK_TRUE;
- CK_BBOOL ckfalse = CK_FALSE;
- CK_OBJECT_CLASS keyClass = CKO_SECRET_KEY;
- CK_KEY_TYPE keyType = CKK_GENERIC_SECRET;
- CK_MECHANISM_TYPE kemType = pk11_mapKemKeyType(pubKey->keyType);
- CK_MECHANISM mech = { kemType, NULL, 0 };
- CK_ULONG ciphertextLen = 0;
-- CK_RV crv;
-+ CK_RV crv = CKR_OK;
-+
-+ PK11SlotInfo *slot = pubKey->pkcs11Slot;
-+
-+ if (slot == NULL) {
-+ CK_MECHANISM_TYPE mechs[] = { kemType, target};
-+ CK_ULONG mech_count = PR_ARRAY_SIZE(mechs);
-+ slot = PK11_GetBestSlotMultiple(mechs, mech_count, NULL /*sigh*/);
-+ } else {
-+ /* should we check if the slot can do target and kemtype
-+ * here and move the public key if it can't? */
-+ slot = PK11_ReferenceSlot(slot);
-+ }
-+ if (slot == NULL) {
-+ goto loser; /* error already set */
-+ }
-+
-+ CK_OBJECT_HANDLE id = PK11_ImportPublicKey(slot, pubKey, PR_FALSE);
-+
-+ if (id == CK_INVALID_HANDLE) {
-+ goto loser; /* error already set */
-+ }
-
- /* set up the target key template */
- attrs = keyTemplate;
- PK11_SETATTRS(attrs, CKA_CLASS, &keyClass, sizeof(keyClass));
- attrs++;
-
- PK11_SETATTRS(attrs, CKA_KEY_TYPE, &keyType, sizeof(keyType));
- attrs++;
-@@ -3162,30 +3183,30 @@ PK11_Encapsulate(SECKEYPublicKey *pubKey
- PR_ASSERT(templateCount <= sizeof(keyTemplate) / sizeof(CK_ATTRIBUTE));
-
- *outKey = NULL;
- *outCiphertext = NULL;
-
- /* create a struxture for the target key */
- sharedSecret = pk11_CreateSymKey(slot, target, PR_TRUE, PR_TRUE, NULL);
- if (sharedSecret == NULL) {
-- PORT_SetError(SEC_ERROR_NO_MEMORY);
-- return SECFailure;
-+ crv = CKR_HOST_MEMORY;
-+ goto loser;
- }
- sharedSecret->origin = PK11_OriginDerive;
-
- /* this path is KEM mechanism agnostic */
- if (PK11_CheckPKCS11Version(slot, 3, 2, PR_TRUE) >= 0) {
- pk11_EnterKeyMonitor(sharedSecret);
- /* get the length the normal PKCS #11 way. This works no matter
- * what the KEM is and we don't have to try to guess the KEM length
- * from the key */
- crv = PK11_GETTAB(slot)->C_EncapsulateKey(sharedSecret->session,
- &mech,
-- pubKey->pkcs11ID,
-+ id,
- keyTemplate,
- templateCount,
- NULL,
- &ciphertextLen,
- &sharedSecret->objectID);
- pk11_ExitKeyMonitor(sharedSecret);
- if ((crv != CKR_OK) && (crv != CKR_BUFFER_TOO_SMALL) &&
- (crv != CKR_KEY_SIZE_RANGE)) {
-@@ -3197,17 +3218,17 @@ PK11_Encapsulate(SECKEYPublicKey *pubKey
- goto loser;
- }
- pk11_EnterKeyMonitor(sharedSecret);
- /* Now do the encapsulate */
- /* NOTE: the PKCS #11 order of the parameters is different from
- * the vendor interface */
- crv = PK11_GETTAB(slot)->C_EncapsulateKey(sharedSecret->session,
- &mech,
-- pubKey->pkcs11ID,
-+ id,
- keyTemplate,
- templateCount,
- ciphertext->data,
- &ciphertextLen,
- &sharedSecret->objectID);
- pk11_ExitKeyMonitor(sharedSecret);
- if (crv != CKR_OK) {
- goto loser;
-@@ -3228,21 +3249,21 @@ PK11_Encapsulate(SECKEYPublicKey *pubKey
- if (crv != CKR_OK) {
- goto loser;
- }
- KEMInterfaceFunctions = (CK_NSS_KEM_FUNCTIONS *)(KEMInterface->pFunctionList);
-
- /* the old API expected the parameter set as a parameter, the
- * pkcs11 v3.2 gets it from the key */
- kemParameterSet = PK11_ReadULongAttribute(slot,
-- pubKey->pkcs11ID,
-+ id,
- CKA_NSS_PARAMETER_SET);
- if (kemParameterSet == CK_UNAVAILABLE_INFORMATION) {
- kemParameterSet = PK11_ReadULongAttribute(slot,
-- pubKey->pkcs11ID,
-+ id,
- CKA_PARAMETER_SET);
- if (kemParameterSet == CK_UNAVAILABLE_INFORMATION) {
- crv = CKR_PUBLIC_KEY_INVALID;
- goto loser;
- }
- }
- /* The old interface only ever supported KYBER768 and MLKEM768
- * SOME versions of RHEL has MLKEM1024 support, if we want to
-@@ -3259,39 +3280,48 @@ PK11_Encapsulate(SECKEYPublicKey *pubKey
- if (ciphertext == NULL) {
- crv = CKR_HOST_MEMORY;
- goto loser;
- }
-
- pk11_EnterKeyMonitor(sharedSecret);
- crv = KEMInterfaceFunctions->C_Encapsulate(sharedSecret->session,
- &mech,
-- pubKey->pkcs11ID,
-+ id,
- keyTemplate,
- templateCount,
- &sharedSecret->objectID,
- ciphertext->data,
- &ciphertextLen);
- pk11_ExitKeyMonitor(sharedSecret);
- if (crv != CKR_OK) {
- goto loser;
- }
-
- PORT_Assert(ciphertextLen == ciphertext->len);
- }
-
-+ PK11_FreeSlot(slot);
-+
- *outKey = sharedSecret;
- *outCiphertext = ciphertext;
-
- return SECSuccess;
-
- loser:
-- PK11_FreeSymKey(sharedSecret);
-+ if (slot) {
-+ PK11_FreeSlot(slot);
-+ }
-+ if (sharedSecret) {
-+ PK11_FreeSymKey(sharedSecret);
-+ }
- SECITEM_FreeItem(ciphertext, PR_TRUE);
-- PORT_SetError(PK11_MapError(crv));
-+ if (crv != CKR_OK) {
-+ PORT_SetError(PK11_MapError(crv));
-+ }
- return SECFailure;
- }
-
- SECStatus
- PK11_Decapsulate(SECKEYPrivateKey *privKey, const SECItem *ciphertext,
- CK_MECHANISM_TYPE target, PK11AttrFlags attrFlags,
- CK_FLAGS opFlags, PK11SymKey **outKey)
- {
-@@ -3312,17 +3342,17 @@ PK11_Decapsulate(SECKEYPrivateKey *privK
- CK_OBJECT_CLASS keyClass = CKO_SECRET_KEY;
- CK_KEY_TYPE keyType = CKK_GENERIC_SECRET;
- CK_MECHANISM_TYPE kemType = pk11_mapKemKeyType(privKey->keyType);
- CK_MECHANISM mech = { kemType, NULL, 0 };
-
- CK_RV crv;
-
- *outKey = NULL;
-- sharedSecret = pk11_CreateSymKey(slot, target, PR_TRUE, PR_TRUE, NULL);
-+ sharedSecret = pk11_CreateSymKey(slot, target, PR_TRUE, PR_TRUE, privKey->wincx);
- if (sharedSecret == NULL) {
- PORT_SetError(SEC_ERROR_NO_MEMORY);
- return SECFailure;
- }
- sharedSecret->origin = PK11_OriginUnwrap;
-
- attrs = keyTemplate;
- PK11_SETATTRS(attrs, CKA_CLASS, &keyClass, sizeof(keyClass));
diff --git a/nss-3.124-ml-kem-alias-fix.patch b/nss-3.124-ml-kem-alias-fix.patch
deleted file mode 100644
index 3b1e1ca..0000000
--- a/nss-3.124-ml-kem-alias-fix.patch
+++ /dev/null
@@ -1,80 +0,0 @@
-# HG changeset patch
-# User Robert Relyea <rrelyea@redhat.com>
-# Date 1780962091 25200
-# Mon Jun 08 16:41:31 2026 -0700
-# Branch NSS_3_124_BRANCH
-# Node ID 7748a8ddfa510458e76ff41e840f78f5af55795a
-# Parent 5f6c91f6171020eea4ce9eb5bc353370d30c8df0
-nss-3.124-ml-kem-alias-fix.patch
-
-diff --git a/cmd/lib/secutil.c b/cmd/lib/secutil.c
---- a/cmd/lib/secutil.c
-+++ b/cmd/lib/secutil.c
-@@ -4303,16 +4303,18 @@ static const struct SSLNamedGroupString
- #ifndef NSS_DISABLE_KYBER
- { NAME_AND_LEN("xyber76800"), ssl_grp_kem_xyber768d00 },
- #endif
- { NAME_AND_LEN("x25519mlkem768"), ssl_grp_kem_mlkem768x25519 },
- { NAME_AND_LEN("secp256r1mlkem768"), ssl_grp_kem_secp256r1mlkem768 },
- { NAME_AND_LEN("secp384r1mlkem1024"), ssl_grp_kem_secp384r1mlkem1024 },
- // keep for compatibility
- { NAME_AND_LEN("mlkem768x25519"), ssl_grp_kem_mlkem768x25519 },
-+ { NAME_AND_LEN("mlkem768secp256r1"), ssl_grp_kem_secp256r1mlkem768 },
-+ { NAME_AND_LEN("mlkem1024secp384r1"), ssl_grp_kem_secp384r1mlkem1024 },
- };
-
- static const size_t sslNamedGroupStringLen = PR_ARRAY_SIZE(sslNamedGroupStringArray);
-
- static SSLNamedGroup
- groupNameToNamedGroup(char *name)
- {
- int len = PL_strlen(name);
-diff --git a/lib/pk11wrap/pk11pars.c b/lib/pk11wrap/pk11pars.c
---- a/lib/pk11wrap/pk11pars.c
-+++ b/lib/pk11wrap/pk11pars.c
-@@ -255,16 +255,20 @@ static const oidValDef curveOptList[] =
- { CIPHER_NAME("X25519MLKEM768"), SEC_OID_MLKEM768X25519,
- NSS_USE_ALG_IN_SSL_KX },
- { CIPHER_NAME("SECP256R1MLKEM768"), SEC_OID_SECP256R1MLKEM768,
- NSS_USE_ALG_IN_SSL_KX },
- { CIPHER_NAME("SECP384R1MLKEM1024"), SEC_OID_SECP384R1MLKEM1024,
- NSS_USE_ALG_IN_SSL_KX },
- { CIPHER_NAME("MLKEM768X25519"), SEC_OID_MLKEM768X25519,
- NSS_USE_ALG_IN_SSL_KX },
-+ { CIPHER_NAME("MLKEM768SECP256R1"), SEC_OID_SECP256R1MLKEM768,
-+ NSS_USE_ALG_IN_SSL_KX },
-+ { CIPHER_NAME("MLKEM1024SECP384R1"), SEC_OID_SECP384R1MLKEM1024,
-+ NSS_USE_ALG_IN_SSL_KX },
- /* ANSI X9.62 named elliptic curves (characteristic two field) */
- { CIPHER_NAME("C2PNB163V1"), SEC_OID_ANSIX962_EC_C2PNB163V1,
- NSS_USE_ALG_IN_SSL_KX | NSS_USE_ALG_IN_CERT_SIGNATURE },
- { CIPHER_NAME("C2PNB163V2"), SEC_OID_ANSIX962_EC_C2PNB163V2,
- NSS_USE_ALG_IN_SSL_KX | NSS_USE_ALG_IN_CERT_SIGNATURE },
- { CIPHER_NAME("C2PNB163V3"), SEC_OID_ANSIX962_EC_C2PNB163V3,
- NSS_USE_ALG_IN_SSL_KX | NSS_USE_ALG_IN_CERT_SIGNATURE },
- { CIPHER_NAME("C2PNB176V1"), SEC_OID_ANSIX962_EC_C2PNB176V1,
-@@ -467,21 +471,21 @@ static const oidValDef signOptList[] = {
- NSS_USE_ALG_IN_SSL_KX | NSS_USE_ALG_IN_SIGNATURE },
- { CIPHER_NAME("RSA-PSS"), SEC_OID_PKCS1_RSA_PSS_SIGNATURE,
- NSS_USE_ALG_IN_SSL_KX | NSS_USE_ALG_IN_SIGNATURE },
- { CIPHER_NAME("ECDSA"), SEC_OID_ANSIX962_EC_PUBLIC_KEY,
- NSS_USE_ALG_IN_SSL_KX | NSS_USE_ALG_IN_SIGNATURE },
- { CIPHER_NAME("ED25519"), SEC_OID_ED25519_PUBLIC_KEY,
- NSS_USE_ALG_IN_SIGNATURE },
- { CIPHER_NAME("ML-DSA-44"), SEC_OID_ML_DSA_44,
-- NSS_USE_ALG_IN_SIGNATURE },
-+ NSS_USE_ALG_IN_SSL_KX | NSS_USE_ALG_IN_SIGNATURE },
- { CIPHER_NAME("ML-DSA-65"), SEC_OID_ML_DSA_65,
-- NSS_USE_ALG_IN_SIGNATURE },
-+ NSS_USE_ALG_IN_SSL_KX | NSS_USE_ALG_IN_SIGNATURE },
- { CIPHER_NAME("ML-DSA-87"), SEC_OID_ML_DSA_87,
-- NSS_USE_ALG_IN_SIGNATURE },
-+ NSS_USE_ALG_IN_SSL_KX | NSS_USE_ALG_IN_SIGNATURE },
- };
-
- typedef struct {
- const oidValDef *list;
- PRUint32 entries;
- const char *description;
- PRBool allowEmpty;
- } algListsDef;
diff --git a/nss-3.124-ppc_no_init.patch b/nss-3.124-ppc_no_init.patch
deleted file mode 100644
index 036ad62..0000000
--- a/nss-3.124-ppc_no_init.patch
+++ /dev/null
@@ -1,65 +0,0 @@
-# HG changeset patch
-# User Robert Relyea <rrelyea@redhat.com>
-# Date 1780431689 25200
-# Tue Jun 02 13:21:29 2026 -0700
-# Branch NSS_3_124_BRANCH
-# Node ID c3324d6ea02d9496ced68a4c59f81af9525d89ea
-# Parent ba35abba131fe9379c69e63c9206d6a2143a3762
-nss-3.90-ppc_no_init.patch
-
-diff --git a/lib/freebl/Makefile b/lib/freebl/Makefile
---- a/lib/freebl/Makefile
-+++ b/lib/freebl/Makefile
-@@ -288,17 +288,17 @@ ifeq ($(CPU_ARCH),arm)
- DEFINES += -DMP_USE_UINT_DIGIT
- DEFINES += -DSHA_NO_LONG_LONG # avoid 64-bit arithmetic in SHA512
- MPI_SRCS += mpi_arm.c
- endif
- ifeq ($(CPU_ARCH),ppc)
- DEFINES += -DHAVE_PLATFORM_GHASH
- EXTRA_SRCS += ghash-ppc.c
- ifdef USE_64
-- DEFINES += -DNSS_NO_INIT_SUPPORT
-+# DEFINES += -DNSS_NO_INIT_SUPPORT
- PPC_ABI := $(shell $(CC) -dM -E - < /dev/null | awk '$$2 == "_CALL_ELF" {print $$3}')
- ifeq ($(PPC_ABI),2)
- ASFILES += sha512-p8.s
- ifeq ($(OS_TEST),ppc64le)
- EXTRA_SRCS += chacha20poly1305-ppc.c ppc-gcm-wrap.c
- ASFILES += chacha20-ppc64le.s ppc-gcm.s
- DEFINES += -DHAVE_PLATFORM_GCM
- endif # ppc64le
-diff --git a/lib/softoken/Makefile b/lib/softoken/Makefile
---- a/lib/softoken/Makefile
-+++ b/lib/softoken/Makefile
-@@ -18,23 +18,23 @@ include $(CORE_DEPTH)/coreconf/config.mk
-
- #######################################################################
- # (3) Include "component" configuration information. (OPTIONAL) #
- #######################################################################
-
- ifdef NSS_NO_INIT_SUPPORT
- DEFINES += -DNSS_NO_INIT_SUPPORT
- endif
--ifeq ($(OS_TARGET),Linux)
--ifeq ($(CPU_ARCH),ppc)
--ifdef USE_64
-- DEFINES += -DNSS_NO_INIT_SUPPORT
--endif # USE_64
--endif # ppc
--endif # Linux
-+#ifeq ($(OS_TARGET),Linux)
-+#ifeq ($(CPU_ARCH),ppc)
-+#ifdef USE_64
-+# DEFINES += -DNSS_NO_INIT_SUPPORT
-+#endif # USE_64
-+#endif # ppc
-+#endif # Linux
-
-
- #######################################################################
- # (4) Include "local" platform-dependent assignments (OPTIONAL). #
- #######################################################################
-
- include config.mk
-
diff --git a/nss-3.124-prefer-all-hybrid.patch b/nss-3.124-prefer-all-hybrid.patch
deleted file mode 100644
index 9a2a987..0000000
--- a/nss-3.124-prefer-all-hybrid.patch
+++ /dev/null
@@ -1,93 +0,0 @@
-# HG changeset patch
-# User Robert Relyea <rrelyea@redhat.com>
-# Date 1780514963 25200
-# Wed Jun 03 12:29:23 2026 -0700
-# Branch NSS_3_124_BRANCH
-# Node ID 6e7722343bbb64c097f476afff27db4bc0b103c2
-# Parent c821cfd68f40883d94215accb63869deeeb1d4e6
-nss-3.124-prefer-all-hybrid.patch
-
-diff --git a/gtests/ssl_gtest/ssl_dhe_unittest.cc b/gtests/ssl_gtest/ssl_dhe_unittest.cc
---- a/gtests/ssl_gtest/ssl_dhe_unittest.cc
-+++ b/gtests/ssl_gtest/ssl_dhe_unittest.cc
-@@ -36,17 +36,17 @@ TEST_P(TlsConnectTls13, SharesForBothEcd
- auto shares_capture =
- std::make_shared<TlsExtensionCapture>(client_, ssl_tls13_key_share_xtn);
- std::vector<std::shared_ptr<PacketFilter>> captures = {groups_capture,
- shares_capture};
- client_->SetFilter(std::make_shared<ChainedPacketFilter>(captures));
-
- Connect();
-
-- CheckKeys(ssl_kea_ecdh, ssl_auth_rsa_sign);
-+ CheckKeys(GetDefaultKEA(), ssl_auth_rsa_sign);
-
- bool ec, dh;
- auto track_group_type = [&ec, &dh](SSLNamedGroup group) {
- if ((group & 0xff00U) == 0x100U) {
- dh = true;
- } else {
- ec = true;
- }
-diff --git a/lib/ssl/sslsock.c b/lib/ssl/sslsock.c
---- a/lib/ssl/sslsock.c
-+++ b/lib/ssl/sslsock.c
-@@ -163,23 +163,23 @@ static const PRUint16 srtpCiphers[] = {
- ssl_grp_kem_##first##second, size, ssl_kea_ecdh_hybrid, \
- SEC_OID_##first_oid##second_oid, assumeSupported \
- }
-
- const sslNamedGroupDef ssl_named_groups[] = {
- /* Note that 256 for 25519 and x25519mlkem786 is a lie, but we only use it
- * for checking bit security and expect 256 bits there (not 255). */
- HYGROUP(mlkem768, x25519, 256, MLKEM768, X25519, PR_TRUE),
-+ HYGROUP(secp256r1, mlkem768, 256, SECP256R1, MLKEM768, PR_TRUE),
-+ HYGROUP(secp384r1, mlkem1024, 256, SECP384R1, MLKEM1024, PR_TRUE),
- { ssl_grp_ec_curve25519, 256, ssl_kea_ecdh, SEC_OID_CURVE25519, PR_TRUE },
- ECGROUP(secp256r1, 256, SECP256R1, PR_TRUE),
- ECGROUP(secp384r1, 384, SECP384R1, PR_TRUE),
- ECGROUP(secp521r1, 521, SECP521R1, PR_TRUE),
-- HYGROUP(secp256r1, mlkem768, 256, SECP256R1, MLKEM768, PR_TRUE),
-- HYGROUP(secp384r1, mlkem1024, 256, SECP384R1, MLKEM1024, PR_TRUE),
- { ssl_grp_kem_mlkem1024, 256, ssl_kea_kem, SEC_OID_ML_KEM_1024, PR_TRUE },
- { ssl_grp_kem_xyber768d00, 256, ssl_kea_ecdh_hybrid, SEC_OID_XYBER768D00, PR_FALSE },
- FFGROUP(2048),
- FFGROUP(3072),
- FFGROUP(4096),
- FFGROUP(6144),
- FFGROUP(8192),
- ECGROUP(secp192r1, 192, SECP192R1, PR_FALSE),
- ECGROUP(secp160r2, 160, SECP160R2, PR_FALSE),
-diff --git a/lib/ssl/tls13con.c b/lib/ssl/tls13con.c
---- a/lib/ssl/tls13con.c
-+++ b/lib/ssl/tls13con.c
-@@ -666,20 +666,29 @@ tls13_SetupClientHello(sslSocket *ss, ss
- if (rv != SECSuccess) {
- return SECFailure;
- }
-
- /* Select the first enabled group.
- * TODO(ekr@rtfm.com): be smarter about offering the group
- * that the other side negotiated if we are resuming. */
- PORT_Assert(PR_CLIST_IS_EMPTY(&ss->ephemeralKeyPairs));
-+ PRBool has_hybrid = PR_FALSE;
- for (i = 0; i < SSL_NAMED_GROUP_COUNT; ++i) {
- if (!ss->namedGroupPreferences[i]) {
- continue;
- }
-+ /* only send one hybrid key share no matter how many key
-+ * shares we send */
-+ if (ss->namedGroupPreferences[i]->keaType == ssl_kea_ecdh_hybrid) {
-+ if (has_hybrid) {
-+ continue; /* already have one skip*/
-+ }
-+ has_hybrid = PR_TRUE;
-+ }
- rv = tls13_AddKeyShare(ss, ss->namedGroupPreferences[i]);
- if (rv != SECSuccess) {
- return SECFailure;
- }
- if (++numShares > ss->additionalShares) {
- break;
- }
- }
diff --git a/nss-3.124-tools-test-fix.patch b/nss-3.124-tools-test-fix.patch
deleted file mode 100644
index 046b660..0000000
--- a/nss-3.124-tools-test-fix.patch
+++ /dev/null
@@ -1,31 +0,0 @@
-# HG changeset patch
-# User Robert Relyea <rrelyea@redhat.com>
-# Date 1780589779 25200
-# Thu Jun 04 09:16:19 2026 -0700
-# Branch NSS_3_124_BRANCH
-# Node ID 5f6c91f6171020eea4ce9eb5bc353370d30c8df0
-# Parent 709702f4bfbee0bed65f6abcd85bc8fc2d14ff55
-nss-3.124-tools-test-fix.patch
-
-diff --git a/tests/tools/tools.sh b/tests/tools/tools.sh
---- a/tests/tools/tools.sh
-+++ b/tests/tools/tools.sh
-@@ -518,17 +518,17 @@ tools_p12_import_old_files()
- ${BINDIR}/pk12util -i ${TOOLSDIR}/data/PKCS5WithImplicitKDF.p12 -d ${P_R_COPYDIR} -k ${R_PWFILE} -W password 2>&1
- ret=$?
- html_msg $ret 0 "Importing PKCS#12 file with and implicit KDF value"
- check_tmpfile
-
- echo "pk12util -I -l corrupted_cert_bag.p12 -W start"
- ${BINDIR}/pk12util -I -l ${TOOLSDIR}/data/corrupted_cert_bag.p12 -W start 2>&1
- ret=$?
-- html_msg $ret 17 "Listing a PKCS#12 file with corrupted certificate bag"
-+ html_msg $ret 19 "Listing a PKCS#12 file with corrupted certificate bag"
- check_tmpfile
-
- }
-
- tools_p12_import_rsa_pss_private_key()
- {
- echo "$SCRIPTNAME: Importing RSA-PSS private key from PKCS#12 file --------------"
- ${BINDIR}/pk12util -i ${TOOLSDIR}/data/TestRSAPSS.p12 -d ${P_R_COPYDIR} -k ${R_PWFILE} -W '' 2>&1
diff --git a/nss-3.90-dh-test-update.patch b/nss-3.90-dh-test-update.patch
deleted file mode 100644
index fcbeae5..0000000
--- a/nss-3.90-dh-test-update.patch
+++ /dev/null
@@ -1,90 +0,0 @@
-diff -up ./lib/freebl/fipsfreebl.c.dh_test ./lib/freebl/fipsfreebl.c
---- ./lib/freebl/fipsfreebl.c.dh_test 2024-01-18 08:34:45.936944401 -0800
-+++ ./lib/freebl/fipsfreebl.c 2024-01-18 09:20:57.555980326 -0800
-@@ -1816,38 +1816,39 @@ freebl_fips_DH_PowerUpSelfTest(void)
- {
- /* DH Known P (2048-bits) */
- static const PRUint8 dh_known_P[] = {
-- 0xc2, 0x79, 0xbb, 0x76, 0x32, 0x0d, 0x43, 0xfd,
-- 0x1b, 0x8c, 0xa2, 0x3c, 0x00, 0xdd, 0x6d, 0xef,
-- 0xf8, 0x1a, 0xd9, 0xc1, 0xa2, 0xf5, 0x73, 0x2b,
-- 0xdb, 0x1a, 0x3e, 0x84, 0x90, 0xeb, 0xe7, 0x8e,
-- 0x5f, 0x5c, 0x6b, 0xb6, 0x61, 0x89, 0xd1, 0x03,
-- 0xb0, 0x5f, 0x91, 0xe4, 0xd2, 0x82, 0x90, 0xfc,
-- 0x3c, 0x49, 0x69, 0x59, 0xc1, 0x51, 0x6a, 0x85,
-- 0x71, 0xe7, 0x5d, 0x72, 0x5a, 0x45, 0xad, 0x01,
-- 0x6f, 0x82, 0xae, 0xec, 0x91, 0x08, 0x2e, 0x7c,
-- 0x64, 0x93, 0x46, 0x1c, 0x68, 0xef, 0xc2, 0x03,
-- 0x28, 0x1d, 0x75, 0x3a, 0xeb, 0x9c, 0x46, 0xf0,
-- 0xc9, 0xdb, 0x99, 0x95, 0x13, 0x66, 0x4d, 0xd5,
-- 0x1a, 0x78, 0x92, 0x51, 0x89, 0x72, 0x28, 0x7f,
-- 0x20, 0x70, 0x41, 0x49, 0xa2, 0x86, 0xe9, 0xf9,
-- 0x78, 0x5f, 0x8d, 0x2e, 0x5d, 0xfa, 0xdb, 0x57,
-- 0xd4, 0x71, 0xdf, 0x66, 0xe3, 0x9e, 0x88, 0x70,
-- 0xa4, 0x21, 0x44, 0x6a, 0xc7, 0xae, 0x30, 0x2c,
-- 0x9c, 0x1f, 0x91, 0x57, 0xc8, 0x24, 0x34, 0x2d,
-- 0x7a, 0x4a, 0x43, 0xc2, 0x5f, 0xab, 0x64, 0x2e,
-- 0xaa, 0x28, 0x32, 0x95, 0x42, 0x7b, 0xa0, 0xcc,
-- 0xdf, 0xfd, 0x22, 0xc8, 0x56, 0x84, 0xc1, 0x62,
-- 0x15, 0xb2, 0x77, 0x86, 0x81, 0xfc, 0xa5, 0x12,
-- 0x3c, 0xca, 0x28, 0x17, 0x8f, 0x03, 0x16, 0x6e,
-- 0xb8, 0x24, 0xfa, 0x1b, 0x15, 0x02, 0xfd, 0x8b,
-- 0xb6, 0x0a, 0x1a, 0xf7, 0x47, 0x41, 0xc5, 0x2b,
-- 0x37, 0x3e, 0xa1, 0xbf, 0x68, 0xda, 0x1c, 0x55,
-- 0x44, 0xc3, 0xee, 0xa1, 0x63, 0x07, 0x11, 0x3b,
-- 0x5f, 0x00, 0x84, 0xb4, 0xc4, 0xe4, 0xa7, 0x97,
-- 0x29, 0xf8, 0xce, 0xab, 0xfc, 0x27, 0x3e, 0x34,
-- 0xe4, 0xc7, 0x81, 0x52, 0x32, 0x0e, 0x27, 0x3c,
-- 0xa6, 0x70, 0x3f, 0x4a, 0x54, 0xda, 0xdd, 0x60,
-- 0x26, 0xb3, 0x6e, 0x45, 0x26, 0x19, 0x41, 0x6f
-+ 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF,
-+ 0xAD, 0xF8, 0x54, 0x58, 0xA2, 0xBB, 0x4A, 0x9A,
-+ 0xAF, 0xDC, 0x56, 0x20, 0x27, 0x3D, 0x3C, 0xF1,
-+ 0xD8, 0xB9, 0xC5, 0x83, 0xCE, 0x2D, 0x36, 0x95,
-+ 0xA9, 0xE1, 0x36, 0x41, 0x14, 0x64, 0x33, 0xFB,
-+ 0xCC, 0x93, 0x9D, 0xCE, 0x24, 0x9B, 0x3E, 0xF9,
-+ 0x7D, 0x2F, 0xE3, 0x63, 0x63, 0x0C, 0x75, 0xD8,
-+ 0xF6, 0x81, 0xB2, 0x02, 0xAE, 0xC4, 0x61, 0x7A,
-+ 0xD3, 0xDF, 0x1E, 0xD5, 0xD5, 0xFD, 0x65, 0x61,
-+ 0x24, 0x33, 0xF5, 0x1F, 0x5F, 0x06, 0x6E, 0xD0,
-+ 0x85, 0x63, 0x65, 0x55, 0x3D, 0xED, 0x1A, 0xF3,
-+ 0xB5, 0x57, 0x13, 0x5E, 0x7F, 0x57, 0xC9, 0x35,
-+ 0x98, 0x4F, 0x0C, 0x70, 0xE0, 0xE6, 0x8B, 0x77,
-+ 0xE2, 0xA6, 0x89, 0xDA, 0xF3, 0xEF, 0xE8, 0x72,
-+ 0x1D, 0xF1, 0x58, 0xA1, 0x36, 0xAD, 0xE7, 0x35,
-+ 0x30, 0xAC, 0xCA, 0x4F, 0x48, 0x3A, 0x79, 0x7A,
-+ 0xBC, 0x0A, 0xB1, 0x82, 0xB3, 0x24, 0xFB, 0x61,
-+ 0xD1, 0x08, 0xA9, 0x4B, 0xB2, 0xC8, 0xE3, 0xFB,
-+ 0xB9, 0x6A, 0xDA, 0xB7, 0x60, 0xD7, 0xF4, 0x68,
-+ 0x1D, 0x4F, 0x42, 0xA3, 0xDE, 0x39, 0x4D, 0xF4,
-+ 0xAE, 0x56, 0xED, 0xE7, 0x63, 0x72, 0xBB, 0x19,
-+ 0x0B, 0x07, 0xA7, 0xC8, 0xEE, 0x0A, 0x6D, 0x70,
-+ 0x9E, 0x02, 0xFC, 0xE1, 0xCD, 0xF7, 0xE2, 0xEC,
-+ 0xC0, 0x34, 0x04, 0xCD, 0x28, 0x34, 0x2F, 0x61,
-+ 0x91, 0x72, 0xFE, 0x9C, 0xE9, 0x85, 0x83, 0xFF,
-+ 0x8E, 0x4F, 0x12, 0x32, 0xEE, 0xF2, 0x81, 0x83,
-+ 0xC3, 0xFE, 0x3B, 0x1B, 0x4C, 0x6F, 0xAD, 0x73,
-+ 0x3B, 0xB5, 0xFC, 0xBC, 0x2E, 0xC2, 0x20, 0x05,
-+ 0xC5, 0x8E, 0xF1, 0x83, 0x7D, 0x16, 0x83, 0xB2,
-+ 0xC6, 0xF3, 0x4A, 0x26, 0xC1, 0xB2, 0xEF, 0xFA,
-+ 0x88, 0x6B, 0x42, 0x38, 0x61, 0x28, 0x5C, 0x97,
-+ 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF
-+
- };
-
- static const PRUint8 dh_known_Y_1[] = {
-@@ -1893,10 +1894,10 @@ freebl_fips_DH_PowerUpSelfTest(void)
- };
-
- static const PRUint8 dh_known_hash_result[] = {
-- 0x93, 0xa2, 0x89, 0x1c, 0x8a, 0xc3, 0x70, 0xbf,
-- 0xa7, 0xdf, 0xb6, 0xd7, 0x82, 0xfb, 0x87, 0x81,
-- 0x09, 0x47, 0xf3, 0x9f, 0x5a, 0xbf, 0x4f, 0x3f,
-- 0x8e, 0x5e, 0x06, 0xca, 0x30, 0xa7, 0xaf, 0x10
-+ 0x40, 0xe3, 0x7a, 0x34, 0x83, 0x2d, 0x94, 0x57,
-+ 0x99, 0x3d, 0x66, 0xec, 0x54, 0xdf, 0x82, 0x4a,
-+ 0x37, 0x0d, 0xf9, 0x01, 0xb3, 0xbc, 0x54, 0xe5,
-+ 0x5e, 0x63, 0xd3, 0x46, 0x4e, 0xa3, 0xe2, 0x8a
- };
-
- /* DH variables. */
diff --git a/nss.spec b/nss.spec
index 4f669bb..f6a5343 100644
--- a/nss.spec
+++ b/nss.spec
@@ -82,7 +82,6 @@ BuildRequires: gawk
BuildRequires: psmisc
BuildRequires: perl-interpreter
BuildRequires: gcc-c++
-BuildRequires: parallel
Source0: https://ftp.mozilla.org/pub/security/nss/releases/%{nss_release_tag}/src/%{nss_nspr_archive}.tar.gz
Source1: nss-util.pc.in
@@ -130,40 +129,16 @@ Source101: nspr-config.xml
Patch4: iquote.patch
Patch12: nss-signtool-format.patch
Patch13: nss-dso-ldflags.patch
-
-# Extend db dump timeout to avoid flaky failures on slow builders
-Patch20: nss-3.101-extend-db-dump-time.patch
-# Update FIPS DH test prime to RFC 7919 FFDHE group
-Patch21: nss-3.90-dh-test-update.patch
-# Fix tools test expected exit code for corrupted PKCS#12 bag
-Patch22: nss-3.124-tools-test-fix.patch
-
-# Disallow MD2/MD4/MD5 in FIPS mode for signing and PKCS#12 write
-Patch30: nss-3.112-disable-md5.patch
-
# fedora disabled dbm by default
Patch40: nss-no-dbm-man-page.patch
-# Disable NSS_NO_INIT_SUPPORT on ppc64le (causes init failures)
-Patch41: nss-3.124-ppc_no_init.patch
-# Add missing GNU stack / noexecstack annotations to x86 assembly
-Patch42: nss-3.124-annocheck.fix.patch
# https://issues.redhat.com/browse/FC-1613
Patch50: nss-3.110-dissable_test-ssl_policy_pkix_oscp.patch
-# Fix Ed25519/Ed448 key storage and display in secutil/softoken
-Patch51: nss-3.124-fix-ed-key-storage.patch
-# FIPS-compatible symmetric key import via CKM_CONCATENATE_DATA_AND_BASE
-Patch52: nss-3.124-fips-key-import-fix.patch
-# Fix PK11_Encapsulate to import the public key before use and handle NULL slot
-Patch53: nss-3.124-fix-pub-key-import-encapsulate.patch
-# Allow PSS hash algorithm override instead of failing on mismatch
-Patch54: nss-3.124-allow-hash-override-pss.patch
# ML-DSA support patches that haven't made it to the 3.118.1 release
Patch60: nss-3.118-ml-dsa-leancrypto.patch
Patch61: nss-3.118-ml-dsa-tls.patch
-# Prefer hybrid (classical + PQC) key exchange groups in TLS 1.3
-Patch62: nss-3.124-prefer-all-hybrid.patch
+#Patch62: nss-3.118-prefer-all-hybrid.patch
Patch65: nss-3.118-ml-dsa-test-for-sign-verify-pkcs12.patch
Patch66: nss-3.118-ml-dsa-tls-test.patch
@@ -174,10 +149,6 @@ Patch68: nss-3.123-fix-mldsa-import-regeneration.patch
# replay the parent's random stream (mozbz#2056509)
Patch70: nss-3.125-drbg-reseed-after-fork.patch
-# ML-KEM: populate key size bounds and add MLKEM alias names
-Patch71: nss-3.124-add-ml-kem-key-size-mech-info.patch
-Patch72: nss-3.124-ml-kem-alias-fix.patch
-
Patch100: nspr-config-pc.patch
Patch101: nspr-gcc-atomics.patch
@@ -343,9 +314,6 @@ popd
pushd nss
%autopatch -p1 -M 99
-# GNU patch 2.8 --fuzz=0 cannot apply this one-line call-site addition due to
-# cumulative hunk offset interaction; use sed as a workaround
-sed -i 's/^ tools_p12_import_ed25519_private_key$/&\n tools_p12_ml_dsa_import/' tests/tools/tools.sh
popd
tar -xf %{SOURCE30}
@@ -398,8 +366,8 @@ popd
# Build NSS
#
-# LTO is enabled. Uncomment the line below to disable it if needed.
-#%%global _lto_cflags %%{nil}
+# This package fails its testsuite with LTO. Disable LTO for now
+#%global _lto_cflags %{nil}
#export FREEBL_NO_DEPEND=1
@@ -1318,7 +1286,7 @@ fi
https://bugzilla.mozilla.org/show_bug.cgi?id=1836925
* Mon Jun 5 2023 Frantisek Krenzelok <krenzelok.frantisek@gmail.com> - 3.90.0-1
-- Update %%patch syntax
+- Update %patch syntax
* Mon Jun 5 2023 Frantisek Krenzelok <krenzelok.frantisek@gmail.com> - 3.90.0-1
- Update NSS to 3.90.0
@@ -1327,7 +1295,7 @@ fi
- combine nss and nspr source togeather
* Fri May 5 2023 Frantisek Krenzelok <krenzelok.frantisek@gmail.com> - 3.89.0-1
-- replace %%{version} with %%{nss_version} as it version can be overiden.
+- replace %{version} with %{nss_version} as it version can be overiden.
* Fri Mar 10 2023 Frantisek Krenzelok <krenzelok.frantisek@gmail.com> - 3.89.0-1
- Update NSS to 3.89.0
reply other threads:[~2026-08-27 17:26 UTC|newest]
Thread overview: [no followups] expand[flat|nested] mbox.gz Atom feed
Reply instructions:
You may reply publicly to this message via plain-text email
using any one of the following methods:
* Save the following mbox file, import it into your mail client,
and reply-to-all from there: mbox
Avoid top-posting and favor interleaved quoting:
https://en.wikipedia.org/wiki/Posting_style#Interleaved_style
* Reply using the --to, --cc, and --in-reply-to
switches of git-send-email(1):
git send-email \
--in-reply-to=178785157372.1.6580717850075813033.rpms-nss-71dc233ac9ac@fedoraproject.org \
--to=git-commits@fedoraproject.org \
/path/to/YOUR_REPLY
https://kernel.org/pub/software/scm/git/docs/git-send-email.html
* If your mail client supports setting the In-Reply-To header
via mailto: links, try the mailto: link
Be sure your reply has a Subject: header at the top and a blank line
before the message body.
This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox