diff --git a/.gitignore b/.gitignore index 1ffcd24..917f125 100644 --- a/.gitignore +++ b/.gitignore @@ -171,3 +171,5 @@ /nspr-4.36.0-2.el8_2.src.rpm /thunderbird-140.3.0esr.processed-source.tar.xz /thunderbird-langpacks-140.3.0esr-20250912.tar.xz +/thunderbird-140.4.0esr.processed-source.tar.xz +/thunderbird-langpacks-140.4.0esr-20251013.tar.xz diff --git a/build-ffvpx.patch b/build-ffvpx.patch deleted file mode 100644 index 09e60bb..0000000 --- a/build-ffvpx.patch +++ /dev/null @@ -1,24 +0,0 @@ -diff -up thunderbird-128.0/media/ffvpx/libavcodec/av1dec.c.build-ffvpx thunderbird-128.0/media/ffvpx/libavcodec/av1dec.c ---- thunderbird-128.0/media/ffvpx/libavcodec/av1dec.c.build-ffvpx 2024-06-24 22:43:40.000000000 +0200 -+++ thunderbird-128.0/media/ffvpx/libavcodec/av1dec.c 2024-07-10 11:20:23.200948767 +0200 -@@ -887,7 +887,7 @@ static av_cold int av1_decode_init(AVCod - ff_cbs_fragment_reset(&s->current_obu); - } - -- s->dovi.logctx = avctx; -+ s->dovi.logctx = (AVContext *) avctx; - s->dovi.dv_profile = 10; // default for AV1 - sd = ff_get_coded_side_data(avctx, AV_PKT_DATA_DOVI_CONF); - if (sd && sd->size > 0) -diff -up thunderbird-128.0/media/ffvpx/libavcodec/libdav1d.c.build-ffvpx thunderbird-128.0/media/ffvpx/libavcodec/libdav1d.c ---- thunderbird-128.0/media/ffvpx/libavcodec/libdav1d.c.build-ffvpx 2024-07-10 12:46:57.005539959 +0200 -+++ thunderbird-128.0/media/ffvpx/libavcodec/libdav1d.c 2024-07-10 12:47:19.067507705 +0200 -@@ -289,7 +289,7 @@ static av_cold int libdav1d_init(AVCodec - c->delay = res > 1 ? res : 0; - #endif - -- dav1d->dovi.logctx = c; -+ dav1d->dovi.logctx = (AVContext *) c; - dav1d->dovi.dv_profile = 10; // default for AV1 - sd = ff_get_coded_side_data(c, AV_PKT_DATA_DOVI_CONF); - if (sd && sd->size > 0) diff --git a/firefox-system-nss-replace-xyber-with-mlkem.patch b/firefox-system-nss-replace-xyber-with-mlkem.patch deleted file mode 100644 index 655c3f5..0000000 --- a/firefox-system-nss-replace-xyber-with-mlkem.patch +++ /dev/null @@ -1,507 +0,0 @@ -diff --git a/modules/libpref/init/StaticPrefList.yaml b/modules/libpref/init/StaticPrefList.yaml -index 031ed0344d..4c652235d2 100644 ---- a/modules/libpref/init/StaticPrefList.yaml -+++ b/modules/libpref/init/StaticPrefList.yaml -@@ -13380,7 +13380,7 @@ - mirror: always - rust: true - --# Whether to send a Xyber768 key share in HTTP/3 TLS handshakes. -+# Whether to send an mlkem768x25519 key share in HTTP/3 TLS handshakes. - # Has no effect unless security.tls.enable_kyber is true. - - name: network.http.http3.enable_kyber - type: RelaxedAtomicBool -diff --git a/netwerk/socket/neqo_glue/src/lib.rs b/netwerk/socket/neqo_glue/src/lib.rs -index 9d1fa68ed2..216a95553c 100644 ---- a/netwerk/socket/neqo_glue/src/lib.rs -+++ b/netwerk/socket/neqo_glue/src/lib.rs -@@ -202,7 +202,7 @@ impl NeqoHttp3Conn { - { - // These operations are infallible when conn.state == State::Init. - let _ = conn.set_groups(&[ -- neqo_crypto::TLS_GRP_KEM_XYBER768D00, -+ neqo_crypto::TLS_GRP_KEM_MLKEM768X25519, - neqo_crypto::TLS_GRP_EC_X25519, - neqo_crypto::TLS_GRP_EC_SECP256R1, - neqo_crypto::TLS_GRP_EC_SECP384R1, -diff --git a/netwerk/test/unit/test_http3_kyber.js b/netwerk/test/unit/test_http3_kyber.js -index 4b3f1cbc50..e3b77cce9b 100644 ---- a/netwerk/test/unit/test_http3_kyber.js -+++ b/netwerk/test/unit/test_http3_kyber.js -@@ -62,7 +62,11 @@ function makeChan(uri) { - - add_task(async function test_kyber_success() { - let listener = new Http3Listener(); -- listener.expectedKeaGroup = "xyber768d00"; -+ // Bug 1918532: change this from x25519 to mlkem768x25519. -+ // neqo_glue currently tries to negotiate xyber768d00, which is -+ // disabled by NSS policy. As such we expect to receive x25519 -+ // here. -+ listener.expectedKeaGroup = "x25519"; - let chan = makeChan("https://foo.example.com"); - await chanPromise(chan, listener); - }); -diff --git a/security/manager/ssl/NSSSocketControl.cpp b/security/manager/ssl/NSSSocketControl.cpp -index 64c999701a..c7abe78da8 100644 ---- a/security/manager/ssl/NSSSocketControl.cpp -+++ b/security/manager/ssl/NSSSocketControl.cpp -@@ -39,7 +39,7 @@ NSSSocketControl::NSSSocketControl(const nsCString& aHostName, int32_t aPort, - mIsFullHandshake(false), - mNotedTimeUntilReady(false), - mEchExtensionStatus(EchExtensionStatus::kNotPresent), -- mSentXyberShare(false), -+ mSentMlkemShare(false), - mHasTls13HandshakeSecrets(false), - mIsShortWritePending(false), - mShortWritePendingByte(0), -diff --git a/security/manager/ssl/NSSSocketControl.h b/security/manager/ssl/NSSSocketControl.h -index 9afae1926c..2701b7346e 100644 ---- a/security/manager/ssl/NSSSocketControl.h -+++ b/security/manager/ssl/NSSSocketControl.h -@@ -117,14 +117,14 @@ class NSSSocketControl final : public CommonSocketControl { - return mEchExtensionStatus; - } - -- void WillSendXyberShare() { -+ void WillSendMlkemShare() { - COMMON_SOCKET_CONTROL_ASSERT_ON_OWNING_THREAD(); -- mSentXyberShare = true; -+ mSentMlkemShare = true; - } - -- bool SentXyberShare() { -+ bool SentMlkemShare() { - COMMON_SOCKET_CONTROL_ASSERT_ON_OWNING_THREAD(); -- return mSentXyberShare; -+ return mSentMlkemShare; - } - - void SetHasTls13HandshakeSecrets() { -@@ -307,7 +307,7 @@ class NSSSocketControl final : public CommonSocketControl { - bool mIsFullHandshake; - bool mNotedTimeUntilReady; - EchExtensionStatus mEchExtensionStatus; // Currently only used for telemetry. -- bool mSentXyberShare; -+ bool mSentMlkemShare; - bool mHasTls13HandshakeSecrets; - - // True when SSL layer has indicated an "SSL short write", i.e. need -diff --git a/security/manager/ssl/metrics.yaml b/security/manager/ssl/metrics.yaml -index e25ab6a7e5..ce0177b384 100644 ---- a/security/manager/ssl/metrics.yaml -+++ b/security/manager/ssl/metrics.yaml -@@ -68,7 +68,7 @@ tls: - xyber_intolerance_reason: - type: labeled_counter - description: > -- The error that was returned from a failed TLS 1.3 handshake in which the client sent a Xyber key share (see tlsIntoleranceTelemetryBucket() in nsNSSIOLayer.cpp). -+ The error that was returned from a failed TLS 1.3 handshake in which the client sent a mlkem768x25519 key share (see tlsIntoleranceTelemetryBucket() in nsNSSIOLayer.cpp). - data_sensitivity: - - technical - bugs: -diff --git a/security/manager/ssl/nsNSSCallbacks.cpp b/security/manager/ssl/nsNSSCallbacks.cpp -index c3a23213c5..cb37603782 100644 ---- a/security/manager/ssl/nsNSSCallbacks.cpp -+++ b/security/manager/ssl/nsNSSCallbacks.cpp -@@ -656,8 +656,8 @@ nsCString getKeaGroupName(uint32_t aKeaGroup) { - case ssl_grp_ec_curve25519: - groupName = "x25519"_ns; - break; -- case ssl_grp_kem_xyber768d00: -- groupName = "xyber768d00"_ns; -+ case ssl_grp_kem_mlkem768x25519: -+ groupName = "mlkem768x25519"_ns; - break; - case ssl_grp_ffdhe_2048: - groupName = "FF 2048"_ns; -@@ -1045,7 +1045,6 @@ void HandshakeCallback(PRFileDesc* fd, void* client_data) { - channelInfo.keaKeyBits); - break; - case ssl_kea_ecdh_hybrid: -- // Bug 1874963: Add probes for Xyber768d00 - break; - default: - MOZ_CRASH("impossible KEA"); -@@ -1146,7 +1145,8 @@ void SecretCallback(PRFileDesc* fd, PRUint16 epoch, SSLSecretDirection dir, - if (epoch == 2 && dir == ssl_secret_read) { - // |secret| is the server_handshake_traffic_secret. Set a flag to indicate - // that the Server Hello has been processed successfully. We use this when -- // deciding whether to retry a connection in which a Xyber share was sent. -+ // deciding whether to retry a connection in which an mlkem768x25519 share -+ // was sent. - infoObject->SetHasTls13HandshakeSecrets(); - } - } -diff --git a/security/manager/ssl/nsNSSComponent.cpp b/security/manager/ssl/nsNSSComponent.cpp -index 5f3792fd52..1fff6de2d6 100644 ---- a/security/manager/ssl/nsNSSComponent.cpp -+++ b/security/manager/ssl/nsNSSComponent.cpp -@@ -1084,9 +1084,9 @@ void SetDeprecatedTLS1CipherPrefs() { - // static - void SetKyberPolicy() { - if (StaticPrefs::security_tls_enable_kyber()) { -- NSS_SetAlgorithmPolicy(SEC_OID_XYBER768D00, NSS_USE_ALG_IN_SSL_KX, 0); -+ NSS_SetAlgorithmPolicy(SEC_OID_MLKEM768X25519, NSS_USE_ALG_IN_SSL_KX, 0); - } else { -- NSS_SetAlgorithmPolicy(SEC_OID_XYBER768D00, 0, NSS_USE_ALG_IN_SSL_KX); -+ NSS_SetAlgorithmPolicy(SEC_OID_MLKEM768X25519, 0, NSS_USE_ALG_IN_SSL_KX); - } - } - -diff --git a/security/manager/ssl/nsNSSIOLayer.cpp b/security/manager/ssl/nsNSSIOLayer.cpp -index c31f3064ee..24ca99d0f4 100644 ---- a/security/manager/ssl/nsNSSIOLayer.cpp -+++ b/security/manager/ssl/nsNSSIOLayer.cpp -@@ -448,14 +448,15 @@ bool retryDueToTLSIntolerance(PRErrorCode err, NSSSocketControl* socketInfo) { - } - - if (!socketInfo->IsPreliminaryHandshakeDone() && -- !socketInfo->HasTls13HandshakeSecrets() && socketInfo->SentXyberShare()) { -+ !socketInfo->HasTls13HandshakeSecrets() && socketInfo->SentMlkemShare()) { - nsAutoCString errorName; - const char* prErrorName = PR_ErrorToName(err); - if (prErrorName) { - errorName.AppendASCII(prErrorName); - } - mozilla::glean::tls::xyber_intolerance_reason.Get(errorName).Add(1); -- // Don't record version intolerance if we sent Xyber, just force a retry. -+ // Don't record version intolerance if we sent mlkem768x25519, just force a -+ // retry. - return true; - } - -@@ -1561,7 +1562,7 @@ static nsresult nsSSLIOLayerSetOptions(PRFileDesc* fd, bool forSTARTTLS, - !(infoObject->GetProviderFlags() & - (nsISocketProvider::BE_CONSERVATIVE | nsISocketProvider::IS_RETRY))) { - const SSLNamedGroup namedGroups[] = { -- ssl_grp_kem_xyber768d00, ssl_grp_ec_curve25519, ssl_grp_ec_secp256r1, -+ ssl_grp_kem_mlkem768x25519, ssl_grp_ec_curve25519, ssl_grp_ec_secp256r1, - ssl_grp_ec_secp384r1, ssl_grp_ec_secp521r1, ssl_grp_ffdhe_2048, - ssl_grp_ffdhe_3072}; - if (SECSuccess != SSL_NamedGroupConfig(fd, namedGroups, -@@ -1573,12 +1574,12 @@ static nsresult nsSSLIOLayerSetOptions(PRFileDesc* fd, bool forSTARTTLS, - if (SECSuccess != SSL_SendAdditionalKeyShares(fd, 2)) { - return NS_ERROR_FAILURE; - } -- infoObject->WillSendXyberShare(); -+ infoObject->WillSendMlkemShare(); - } else { - const SSLNamedGroup namedGroups[] = { - ssl_grp_ec_curve25519, ssl_grp_ec_secp256r1, ssl_grp_ec_secp384r1, - ssl_grp_ec_secp521r1, ssl_grp_ffdhe_2048, ssl_grp_ffdhe_3072}; -- // Skip the |ssl_grp_kem_xyber768d00| entry. -+ // Skip the |ssl_grp_kem_mlkem768x25519| entry. - if (SECSuccess != SSL_NamedGroupConfig(fd, namedGroups, - mozilla::ArrayLength(namedGroups))) { - return NS_ERROR_FAILURE; -diff --git a/security/manager/ssl/tests/unit/test_faulty_server.js b/security/manager/ssl/tests/unit/test_faulty_server.js -index f617908e28..7e476a9688 100644 ---- a/security/manager/ssl/tests/unit/test_faulty_server.js -+++ b/security/manager/ssl/tests/unit/test_faulty_server.js -@@ -72,28 +72,28 @@ add_task( - { - skip_if: () => AppConstants.MOZ_SYSTEM_NSS, - }, -- async function testRetryXyber() { -- const retryDomain = "xyber-net-interrupt.example.com"; -+ async function testRetryMlkem768x25519() { -+ const retryDomain = "mlkem768x25519-net-interrupt.example.com"; - - Services.prefs.setBoolPref("security.tls.enable_kyber", true); - Services.prefs.setCharPref("network.dns.localDomains", [retryDomain]); - Services.prefs.setIntPref("network.http.speculative-parallel-limit", 0); - -- // Get the number of xyber / x25519 callbacks prior to making the request -- // ssl_grp_kem_xyber768d00 = 25497 -+ // Get the number of mlkem768x25519 and x25519 callbacks prior to making the request -+ // ssl_grp_kem_mlkem768x25519 = 4588 - // ssl_grp_ec_curve25519 = 29 -- let countOfXyber = handlerCount("/callback/25497"); -+ let countOfMlkem = handlerCount("/callback/4588"); - let countOfX25519 = handlerCount("/callback/29"); - let chan = makeChan(`https://${retryDomain}:8443`); - let [, buf] = await channelOpenPromise(chan, CL_ALLOW_UNKNOWN_CL); - ok(buf); -- // The server will make a xyber768d00 callback for the initial request, and -+ // The server will make a mlkem768x25519 callback for the initial request, and - // then an x25519 callback for the retry. Both callback counts should - // increment by one. - equal( -- handlerCount("/callback/25497"), -- countOfXyber + 1, -- "negotiated xyber768d00" -+ handlerCount("/callback/4588"), -+ countOfMlkem + 1, -+ "negotiated mlkem768x25519" - ); - equal(handlerCount("/callback/29"), countOfX25519 + 1, "negotiated x25519"); - if (!mozinfo.socketprocess_networking) { -@@ -111,27 +111,28 @@ add_task( - { - skip_if: () => AppConstants.MOZ_SYSTEM_NSS, - }, -- async function testNoRetryXyber() { -- const retryDomain = "xyber-alert-after-server-hello.example.com"; -+ async function testNoRetryMlkem768x25519() { -+ const retryDomain = "mlkem768x25519-alert-after-server-hello.example.com"; - - Services.prefs.setBoolPref("security.tls.enable_kyber", true); - Services.prefs.setCharPref("network.dns.localDomains", [retryDomain]); - Services.prefs.setIntPref("network.http.speculative-parallel-limit", 0); - -- // Get the number of xyber / x25519 / p256 callbacks prior to making the request -- // ssl_grp_kem_xyber768d00 = 25497 -+ // Get the number of mlkem768x25519 and x25519 callbacks prior to making -+ // the request -+ // ssl_grp_kem_mlkem768x25519 = 4588 - // ssl_grp_ec_curve25519 = 29 -- let countOfXyber = handlerCount("/callback/25497"); -+ let countOfMlkem = handlerCount("/callback/4588"); - let countOfX25519 = handlerCount("/callback/29"); - let chan = makeChan(`https://${retryDomain}:8443`); - let [req] = await channelOpenPromise(chan, CL_EXPECT_FAILURE); - equal(req.status, 0x805a2f4d); // psm::GetXPCOMFromNSSError(SSL_ERROR_HANDSHAKE_FAILED) -- // The server will make a xyber768d00 callback for the initial request and -+ // The server will make a mlkem768x25519 callback for the initial request and - // the client should not retry. - equal( -- handlerCount("/callback/25497"), -- countOfXyber + 1, -- "negotiated xyber768d00" -+ handlerCount("/callback/4588"), -+ countOfMlkem + 1, -+ "negotiated mlkem768x25519" - ); - equal( - handlerCount("/callback/29"), -diff --git a/security/manager/ssl/tests/unit/tlsserver/cmd/FaultyServer.cpp b/security/manager/ssl/tests/unit/tlsserver/cmd/FaultyServer.cpp -index 4764ed921d..ba48016f58 100644 ---- a/security/manager/ssl/tests/unit/tlsserver/cmd/FaultyServer.cpp -+++ b/security/manager/ssl/tests/unit/tlsserver/cmd/FaultyServer.cpp -@@ -21,7 +21,7 @@ enum FaultType { - None = 0, - ZeroRtt, - UnknownSNI, -- Xyber, -+ Mlkem768x25519, - }; - - struct FaultyServerHost { -@@ -38,9 +38,10 @@ const char* kHostZeroRttAlertVersion = - const char* kHostZeroRttAlertUnexpected = "0rtt-alert-unexpected.example.com"; - const char* kHostZeroRttAlertDowngrade = "0rtt-alert-downgrade.example.com"; - --const char* kHostXyberNetInterrupt = "xyber-net-interrupt.example.com"; --const char* kHostXyberAlertAfterServerHello = -- "xyber-alert-after-server-hello.example.com"; -+const char* kHostMlkem768x25519NetInterrupt = -+ "mlkem768x25519-net-interrupt.example.com"; -+const char* kHostMlkem768x25519AlertAfterServerHello = -+ "mlkem768x25519-alert-after-server-hello.example.com"; - - const char* kCertWildcard = "default-ee"; - -@@ -55,8 +56,8 @@ const FaultyServerHost sFaultyServerHosts[]{ - {kHostZeroRttAlertVersion, kCertWildcard, ZeroRtt}, - {kHostZeroRttAlertUnexpected, kCertWildcard, ZeroRtt}, - {kHostZeroRttAlertDowngrade, kCertWildcard, ZeroRtt}, -- {kHostXyberNetInterrupt, kCertWildcard, Xyber}, -- {kHostXyberAlertAfterServerHello, kCertWildcard, Xyber}, -+ {kHostMlkem768x25519NetInterrupt, kCertWildcard, Mlkem768x25519}, -+ {kHostMlkem768x25519AlertAfterServerHello, kCertWildcard, Mlkem768x25519}, - {nullptr, nullptr}, - }; - -@@ -168,21 +169,22 @@ SECStatus FailingWriteCallback(PRFileDesc* fd, PRUint16 epoch, - return SECFailure; - } - --void SecretCallbackFailXyber(PRFileDesc* fd, PRUint16 epoch, -- SSLSecretDirection dir, PK11SymKey* secret, -- void* arg) { -- fprintf(stderr, "Xyber handler epoch=%d dir=%d\n", epoch, (uint32_t)dir); -+void SecretCallbackFailMlkem768x25519(PRFileDesc* fd, PRUint16 epoch, -+ SSLSecretDirection dir, -+ PK11SymKey* secret, void* arg) { -+ fprintf(stderr, "Mlkem768x25519 handler epoch=%d dir=%d\n", epoch, -+ (uint32_t)dir); - FaultyServerHost* host = static_cast(arg); - - if (epoch == 2 && dir == ssl_secret_write) { - sslSocket* ss = ssl_FindSocket(fd); - if (!ss) { -- fprintf(stderr, "Xyber handler, no ss!\n"); -+ fprintf(stderr, "Mlkem768x25519 handler, no ss!\n"); - return; - } - - if (!ss->sec.keaGroup) { -- fprintf(stderr, "Xyber handler, no ss->sec.keaGroup!\n"); -+ fprintf(stderr, "Mlkem768x25519 handler, no ss->sec.keaGroup!\n"); - return; - } - -@@ -190,17 +192,18 @@ void SecretCallbackFailXyber(PRFileDesc* fd, PRUint16 epoch, - SprintfLiteral(path, "/callback/%u", ss->sec.keaGroup->name); - DoCallback(path); - -- if (ss->sec.keaGroup->name != ssl_grp_kem_xyber768d00) { -+ if (ss->sec.keaGroup->name != ssl_grp_kem_mlkem768x25519) { - return; - } - -- fprintf(stderr, "Xyber handler, configuring alert\n"); -- if (strcmp(host->mHostName, kHostXyberNetInterrupt) == 0) { -+ fprintf(stderr, "Mlkem768x25519 handler, configuring alert\n"); -+ if (strcmp(host->mHostName, kHostMlkem768x25519NetInterrupt) == 0) { - // Install a record write callback that causes the next write to fail. - // The client will see this as a PR_END_OF_FILE / NS_ERROR_NET_INTERRUPT - // error. - ss->recordWriteCallback = FailingWriteCallback; -- } else if (!strcmp(host->mHostName, kHostXyberAlertAfterServerHello)) { -+ } else if (!strcmp(host->mHostName, -+ kHostMlkem768x25519AlertAfterServerHello)) { - SSL3_SendAlert(ss, alert_fatal, close_notify); - } - } -@@ -219,17 +222,17 @@ int32_t DoSNISocketConfig(PRFileDesc* aFd, const SECItem* aSrvNameArr, - fprintf(stderr, "found pre-defined host '%s'\n", host->mHostName); - } - -- const SSLNamedGroup xyberTestNamedGroups[] = {ssl_grp_kem_xyber768d00, -+ const SSLNamedGroup mlkemTestNamedGroups[] = {ssl_grp_kem_mlkem768x25519, - ssl_grp_ec_curve25519}; - - switch (host->mFaultType) { - case ZeroRtt: - SSL_SecretCallback(aFd, &SecretCallbackFailZeroRtt, (void*)host); - break; -- case Xyber: -- SSL_SecretCallback(aFd, &SecretCallbackFailXyber, (void*)host); -- SSL_NamedGroupConfig(aFd, xyberTestNamedGroups, -- mozilla::ArrayLength(xyberTestNamedGroups)); -+ case Mlkem768x25519: -+ SSL_SecretCallback(aFd, &SecretCallbackFailMlkem768x25519, (void*)host); -+ SSL_NamedGroupConfig(aFd, mlkemTestNamedGroups, -+ mozilla::ArrayLength(mlkemTestNamedGroups)); - break; - case None: - break; -diff --git a/security/manager/ssl/tests/unit/tlsserver/lib/TLSServer.cpp b/security/manager/ssl/tests/unit/tlsserver/lib/TLSServer.cpp -index e4aeda0e82..401b982346 100644 ---- a/security/manager/ssl/tests/unit/tlsserver/lib/TLSServer.cpp -+++ b/security/manager/ssl/tests/unit/tlsserver/lib/TLSServer.cpp -@@ -553,8 +553,6 @@ int StartServer(int argc, char* argv[], SSLSNISocketConfig sniSocketConfig, - return 1; - } - -- NSS_SetAlgorithmPolicy(SEC_OID_XYBER768D00, NSS_USE_ALG_IN_SSL_KX, 0); -- - if (SSL_ConfigServerSessionIDCache(0, 0, 0, nullptr) != SECSuccess) { - PrintPRError("SSL_ConfigServerSessionIDCache failed"); - return 1; -diff --git a/third_party/rust/neqo-crypto/.cargo-checksum.json b/third_party/rust/neqo-crypto/.cargo-checksum.json -index 188160d135..bea265565f 100644 ---- a/third_party/rust/neqo-crypto/.cargo-checksum.json -+++ b/third_party/rust/neqo-crypto/.cargo-checksum.json -@@ -1 +1 @@ --{"files":{"Cargo.toml":"fa915d4cac0a051c77107dd6f74514915fe2924fe3eecaad10e995062767fbbb","bindings/bindings.toml":"56921b753535f899b8095df3e8af04b1dc2213c4808dfb39734a3c554454d01d","bindings/nspr_err.h":"2d5205d017b536c2d838bcf9bc4ec79f96dd50e7bb9b73892328781f1ee6629d","bindings/nspr_error.h":"e41c03c77b8c22046f8618832c9569fbcc7b26d8b9bbc35eea7168f35e346889","bindings/nspr_io.h":"085b289849ef0e77f88512a27b4d9bdc28252bd4d39c6a17303204e46ef45f72","bindings/nspr_time.h":"2e637fd338a5cf0fd3fb0070a47f474a34c2a7f4447f31b6875f5a9928d0a261","bindings/nss_ciphers.h":"95ec6344a607558b3c5ba8510f463b6295f3a2fb3f538a01410531045a5f62d1","bindings/nss_init.h":"ef49045063782fb612aff459172cc6a89340f15005808608ade5320ca9974310","bindings/nss_p11.h":"0b81e64fe6db49b2ecff94edd850be111ef99ec11220e88ceb1c67be90143a78","bindings/nss_secerr.h":"713e8368bdae5159af7893cfa517dabfe5103cede051dee9c9557c850a2defc6","bindings/nss_ssl.h":"af222fb957b989e392e762fa2125c82608a0053aff4fb97e556691646c88c335","bindings/nss_sslerr.h":"24b97f092183d8486f774cdaef5030d0249221c78343570d83a4ee5b594210ae","bindings/nss_sslopt.h":"b7807eb7abdad14db6ad7bc51048a46b065a0ea65a4508c95a12ce90e59d1eea","build.rs":"6c3e94359395cce5cb29bc0063ff930ffcd7edd50c040cb459acce6c80aa4ef4","min_version.txt":"7e98f86c69cddb4f65cf96a6de1f4297e3ce224a4c4628609e29042b6c4dcfb9","src/aead.rs":"fc42bc20b84d2e5ccfd56271ae2d2db082e55586ea2926470c102da177f22296","src/aead_null.rs":"3a553f21126c9ca0116c2be81e5a777011b33c159fd88c4f384614bbdb06bb2e","src/agent.rs":"0ef7b488480d12c01a122050e82809bc784443ef6277d75fce21d706fbf5eaaf","src/agentio.rs":"415f70b95312d3ee6d74ba6f28094246101ab6d535aa9df880c38d8bb5a9279e","src/auth.rs":"ced1a18f691894984244088020ea25dc1ee678603317f0c7dfc8b8842fa750b4","src/cert.rs":"8942cb3ce25a61f92b6ffc30fb286052ed6f56eeda3be12fd46ea76ceba6c1cf","src/constants.rs":"f5c779db128a8b0607841ca18c376971017eb327e102e5e6959a7d8effe4b3a6","src/ech.rs":"9d322fcc01c0886f1dfe9bb6273cb9f88a746452ac9a802761b1816a05930c1f","src/err.rs":"ae979f334604aba89640c4491262641910033f0bd790d58671f649f5039b291c","src/exp.rs":"cec59d61fc95914f9703d2fb6490a8507af993c9db710dde894f2f8fd38123c7","src/ext.rs":"cbf7d9f5ecabf4b8c9efd6c334637ab1596ec5266d38ab8d2d6ceae305283deb","src/hkdf.rs":"ef32f20e30a9bd7f094199536d19c87c4231b7fbbe4a9c54c70e84ca9c6575be","src/hp.rs":"644f1bed67f1c6189a67c8d02ab3358aaa7f63af4b913dd7395becbc01a84291","src/lib.rs":"1f2c171e76f353c99cebe66f9812d3021ab2914eb015fed6a07409b7cfa426e6","src/min_version.rs":"89b7ef6f9d2301db4f689f4d963b58375d577f705b92003a804048441e00cfd1","src/p11.rs":"704c5f164c4f195c8051c5bf1e69a912c34b613a8cf6bed5f577dc5674eea34e","src/prio.rs":"e5e169296c0ac69919c59fb6c1f8bd6bf079452eaa13d75da0edd41d435d3f6f","src/replay.rs":"96b7af8eff9e14313e79303092018b12e8834f780c96b8e247c497fdc680c696","src/result.rs":"0587cbb6aace71a7f9765ef7c01dcd9f73a49dcc6331e1d8fe4de2aef6ca65b6","src/secrets.rs":"4ffaa66f25df47dadf042063bff5953effa7bf2f4920cafe827757d6a659cb58","src/selfencrypt.rs":"b7cc1c896c7661c37461fc3a8bcbfdf2589433b907fa5f968ae4f6907704b441","src/ssl.rs":"c83baa5518b81dd06f2e4072ea3c2d666ccdeb8b1ff6e3746eea9f1af47023a6","src/time.rs":"c71a01ff8aa2c0e97fb16ad620df4ed6b7cc1819ff93f46634e2f1c9551627ec","tests/aead.rs":"e36ae77802df1ea6d17cfd1bd2178a3706089577d6fd1554ca86e748b8b235b9","tests/agent.rs":"824735f88e487a3748200844e9481e81a72163ad74d82faa9aa16594d9b9bb25","tests/ext.rs":"1b047d23d9b224ad06eb65d8f3a7b351e263774e404c79bbcbe8f43790e29c18","tests/handshake.rs":"e892a2839b31414be16e96cdf3b1a65978716094700c1a4989229f7edbf578a0","tests/hkdf.rs":"1d2098dc8398395864baf13e4886cfd1da6d36118727c3b264f457ee3da6b048","tests/hp.rs":"b24fec53771c169be788772532d2617a5349196cf87d6444dc74214f7c73e92c","tests/init.rs":"616313cb38eac44b8c71a1d23a52a7d7b4c7c07d4c20dc9ea6600c3317f92613","tests/selfencrypt.rs":"8d10840b41629bf449a6b3a551377315e8a05ca26c6b041548748196652c5909"},"package":null} -\ No newline at end of file -+{"files":{"Cargo.toml":"fa915d4cac0a051c77107dd6f74514915fe2924fe3eecaad10e995062767fbbb","bindings/bindings.toml":"56921b753535f899b8095df3e8af04b1dc2213c4808dfb39734a3c554454d01d","bindings/nspr_err.h":"2d5205d017b536c2d838bcf9bc4ec79f96dd50e7bb9b73892328781f1ee6629d","bindings/nspr_error.h":"e41c03c77b8c22046f8618832c9569fbcc7b26d8b9bbc35eea7168f35e346889","bindings/nspr_io.h":"085b289849ef0e77f88512a27b4d9bdc28252bd4d39c6a17303204e46ef45f72","bindings/nspr_time.h":"2e637fd338a5cf0fd3fb0070a47f474a34c2a7f4447f31b6875f5a9928d0a261","bindings/nss_ciphers.h":"95ec6344a607558b3c5ba8510f463b6295f3a2fb3f538a01410531045a5f62d1","bindings/nss_init.h":"ef49045063782fb612aff459172cc6a89340f15005808608ade5320ca9974310","bindings/nss_p11.h":"0b81e64fe6db49b2ecff94edd850be111ef99ec11220e88ceb1c67be90143a78","bindings/nss_secerr.h":"713e8368bdae5159af7893cfa517dabfe5103cede051dee9c9557c850a2defc6","bindings/nss_ssl.h":"af222fb957b989e392e762fa2125c82608a0053aff4fb97e556691646c88c335","bindings/nss_sslerr.h":"24b97f092183d8486f774cdaef5030d0249221c78343570d83a4ee5b594210ae","bindings/nss_sslopt.h":"b7807eb7abdad14db6ad7bc51048a46b065a0ea65a4508c95a12ce90e59d1eea","build.rs":"6c3e94359395cce5cb29bc0063ff930ffcd7edd50c040cb459acce6c80aa4ef4","min_version.txt":"7e98f86c69cddb4f65cf96a6de1f4297e3ce224a4c4628609e29042b6c4dcfb9","src/aead.rs":"fc42bc20b84d2e5ccfd56271ae2d2db082e55586ea2926470c102da177f22296","src/aead_null.rs":"3a553f21126c9ca0116c2be81e5a777011b33c159fd88c4f384614bbdb06bb2e","src/agent.rs":"0ef7b488480d12c01a122050e82809bc784443ef6277d75fce21d706fbf5eaaf","src/agentio.rs":"415f70b95312d3ee6d74ba6f28094246101ab6d535aa9df880c38d8bb5a9279e","src/auth.rs":"ced1a18f691894984244088020ea25dc1ee678603317f0c7dfc8b8842fa750b4","src/cert.rs":"8942cb3ce25a61f92b6ffc30fb286052ed6f56eeda3be12fd46ea76ceba6c1cf","src/constants.rs":"78df03f9209ff36279b75f88f6d3d15fed4a0fdd1f6edc8ea8100ed9ae34320f","src/ech.rs":"9d322fcc01c0886f1dfe9bb6273cb9f88a746452ac9a802761b1816a05930c1f","src/err.rs":"ae979f334604aba89640c4491262641910033f0bd790d58671f649f5039b291c","src/exp.rs":"cec59d61fc95914f9703d2fb6490a8507af993c9db710dde894f2f8fd38123c7","src/ext.rs":"cbf7d9f5ecabf4b8c9efd6c334637ab1596ec5266d38ab8d2d6ceae305283deb","src/hkdf.rs":"ef32f20e30a9bd7f094199536d19c87c4231b7fbbe4a9c54c70e84ca9c6575be","src/hp.rs":"644f1bed67f1c6189a67c8d02ab3358aaa7f63af4b913dd7395becbc01a84291","src/lib.rs":"f0d0b14c7330fa4040166953c4a428918ce78967fe500bfeaa5f2c10b64567b3","src/min_version.rs":"89b7ef6f9d2301db4f689f4d963b58375d577f705b92003a804048441e00cfd1","src/p11.rs":"704c5f164c4f195c8051c5bf1e69a912c34b613a8cf6bed5f577dc5674eea34e","src/prio.rs":"e5e169296c0ac69919c59fb6c1f8bd6bf079452eaa13d75da0edd41d435d3f6f","src/replay.rs":"96b7af8eff9e14313e79303092018b12e8834f780c96b8e247c497fdc680c696","src/result.rs":"0587cbb6aace71a7f9765ef7c01dcd9f73a49dcc6331e1d8fe4de2aef6ca65b6","src/secrets.rs":"4ffaa66f25df47dadf042063bff5953effa7bf2f4920cafe827757d6a659cb58","src/selfencrypt.rs":"b7cc1c896c7661c37461fc3a8bcbfdf2589433b907fa5f968ae4f6907704b441","src/ssl.rs":"c83baa5518b81dd06f2e4072ea3c2d666ccdeb8b1ff6e3746eea9f1af47023a6","src/time.rs":"c71a01ff8aa2c0e97fb16ad620df4ed6b7cc1819ff93f46634e2f1c9551627ec","tests/aead.rs":"e36ae77802df1ea6d17cfd1bd2178a3706089577d6fd1554ca86e748b8b235b9","tests/agent.rs":"824735f88e487a3748200844e9481e81a72163ad74d82faa9aa16594d9b9bb25","tests/ext.rs":"1b047d23d9b224ad06eb65d8f3a7b351e263774e404c79bbcbe8f43790e29c18","tests/handshake.rs":"e892a2839b31414be16e96cdf3b1a65978716094700c1a4989229f7edbf578a0","tests/hkdf.rs":"1d2098dc8398395864baf13e4886cfd1da6d36118727c3b264f457ee3da6b048","tests/hp.rs":"b24fec53771c169be788772532d2617a5349196cf87d6444dc74214f7c73e92c","tests/init.rs":"616313cb38eac44b8c71a1d23a52a7d7b4c7c07d4c20dc9ea6600c3317f92613","tests/selfencrypt.rs":"8d10840b41629bf449a6b3a551377315e8a05ca26c6b041548748196652c5909"},"package":null} -diff --git a/third_party/rust/neqo-crypto/src/constants.rs b/third_party/rust/neqo-crypto/src/constants.rs -index daef3d3c56..7e6823fd01 100644 ---- a/third_party/rust/neqo-crypto/src/constants.rs -+++ b/third_party/rust/neqo-crypto/src/constants.rs -@@ -62,7 +62,7 @@ remap_enum! { - TLS_GRP_EC_SECP384R1 = ssl_grp_ec_secp384r1, - TLS_GRP_EC_SECP521R1 = ssl_grp_ec_secp521r1, - TLS_GRP_EC_X25519 = ssl_grp_ec_curve25519, -- TLS_GRP_KEM_XYBER768D00 = ssl_grp_kem_xyber768d00, -+ TLS_GRP_KEM_MLKEM768X25519 = ssl_grp_kem_mlkem768x25519, - } - } - -diff --git a/third_party/rust/neqo-crypto/src/lib.rs b/third_party/rust/neqo-crypto/src/lib.rs -index 9b8a478294..cb94d1f32b 100644 ---- a/third_party/rust/neqo-crypto/src/lib.rs -+++ b/third_party/rust/neqo-crypto/src/lib.rs -@@ -122,13 +122,6 @@ pub fn init() -> Res<()> { - - secstatus_to_res(unsafe { nss::NSS_NoDB_Init(null()) })?; - secstatus_to_res(unsafe { nss::NSS_SetDomesticPolicy() })?; -- secstatus_to_res(unsafe { -- p11::NSS_SetAlgorithmPolicy( -- p11::SECOidTag::SEC_OID_XYBER768D00, -- p11::NSS_USE_ALG_IN_SSL_KX, -- 0, -- ) -- })?; - - Ok(NssLoaded::NoDb) - }); -diff --git a/third_party/rust/neqo-transport/.cargo-checksum.json b/third_party/rust/neqo-transport/.cargo-checksum.json -index 79d2126b4a..a67d56971b 100644 ---- a/third_party/rust/neqo-transport/.cargo-checksum.json -+++ b/third_party/rust/neqo-transport/.cargo-checksum.json -@@ -1 +1 @@ --{"files":{"Cargo.toml":"2c18e43bca0b6e963cd3c169ed4b1dbf21de7e420b71be1d9cf1bf1bfcaa8d01","benches/range_tracker.rs":"590dd1f81c92e89ce28af1efdda583d85240438bd9c4c68767286d22a299ad4b","benches/rx_stream_orderer.rs":"53a008357703251a18100521a12d8fa9443c5601ddc3cbd1b3c2899074da4c4f","benches/transfer.rs":"94eb0ec1a0a7d0a4863ddc1c6d006521e52c1f2e7f03c69428b18f7eb827d33f","build.rs":"78ec79c93bf13c3a40ceef8bba1ea2eada61c8f2dfc15ea7bf117958d367949c","src/ackrate.rs":"4bb882e1069a0707dc85338b75327e2910c93ee5f36575767a0d58c4c41c9d4f","src/addr_valid.rs":"03c0b2ff85254179c5d425b12acfdcc6b1ea5735aeb0f604b9b3603451b3ef0a","src/cc/classic_cc.rs":"bd4999f21b6b7d754c8694345f40d0e99c1c3caba3d23a90bd9eb12798ef4979","src/cc/cubic.rs":"24c6913cc6346e5361007221c26e8096ece51583431fc3ab9c99e4ce4b0a9f5d","src/cc/mod.rs":"8031ed3d37bf780dd1364114149b1a1327656e7f481768548ad77db7006daf60","src/cc/new_reno.rs":"25d0921005688e0f0666efd0a4931b4f8cd44363587d98e5b6404818c5d05dd4","src/cc/tests/cubic.rs":"25ee2c60549bb8b3c1e9a915f148928a26b3f1c51e5f7fe6b646a437f520954c","src/cc/tests/mod.rs":"44f8df551e742ae1037cd1cdb85b2c1334c2e5ab3c23ed63d856dbc6b8743afc","src/cc/tests/new_reno.rs":"3cd7373063a3afecb6dfae7894edf959641d87d3de55d4abfa7742cd115fa358","src/cid.rs":"9686a3070c593cfca846d7549863728e31211b304b9fa876220f79bff5e24173","src/connection/dump.rs":"bd4fb55785fe42f5c94f7bcc14ccf4ae377d28b691fb55dbf1139ae9412b0ea9","src/connection/idle.rs":"6f588bab950620df322033abea5f8a731f5b6d88cbe68694b69ab8acea0745ae","src/connection/mod.rs":"72ab734a8d368b2f2d430899a65f5a8c64a21d797a0c3e6d3e53666ef8e0e740","src/connection/params.rs":"38e0b47c8cc5fbe602e3174d7a70df410829bc240b42f21cebd10818e606ef7c","src/connection/saved.rs":"97eb19792be3c4d721057021a43ea50a52f89a3cfa583d3d3dcf5d9144b332f5","src/connection/state.rs":"b1d4bdda3479e7957d1949a969281ecd8a3d88f4fbaff6dcf7ebbb576759339c","src/connection/test_internal.rs":"f3ebfe97b25c9c716d41406066295e5aff4e96a3051ef4e2b5fb258282bbc14c","src/connection/tests/ackrate.rs":"4a2b835575850ae4a14209d3e51883ecb1e69afb44ef91b5e13a5e6cb7174fab","src/connection/tests/cc.rs":"d9a0f00a8f439c4ea8d4b6fa689fbde8bd283256afdd68ec4a27f6638b729704","src/connection/tests/close.rs":"5f245fd134bc0759ef0c83a6d53e0a8d5a8e58dcdf203c750ec9121940272461","src/connection/tests/datagram.rs":"7d89e5293d5b50c7a54c9b48949c2c4c8ef5dc08f3e7e5f51654586578d65602","src/connection/tests/ecn.rs":"3ff05893154fb6a895fe4453db7cc54684ba3bdf268a36b69c36c4070768d7b4","src/connection/tests/handshake.rs":"67a6f090ed89ef6c63129f7e662dc1cfff3f291711a866dff3d779caa40e51c7","src/connection/tests/idle.rs":"2d588bd6570172ca08974931273b6c4645af3edca9ccac78499d7d2d5ecec86c","src/connection/tests/keys.rs":"7c58b255e9732711e13f2a3e1daa13ac9481d8c919a32ca62e70c850845a6b38","src/connection/tests/migration.rs":"40d4feba9957de7eef7391009996016af1a3052fabc7659680b64796cf9fb8bf","src/connection/tests/mod.rs":"43b7745e9722333f7bc851c70ccdfdd1dc4da3991a4b821fac677664719e760f","src/connection/tests/null.rs":"38f76a4ea15e6b11634d4374cb0f2a68bd250e5d35831edfce0fa48deeaa420d","src/connection/tests/priority.rs":"dd3504f52d3fce7a96441624bc1c82c733e6bb556b9b79d24d0f4fb4efaf5a9e","src/connection/tests/recovery.rs":"7f28767f3cca2ff60e3dcfa803e12ef043486a222f54681a8faf2ea2fee564a1","src/connection/tests/resumption.rs":"1a0de0993cd325224fc79a3c094d22636d5b122ab1123d16265d4fafb23574bd","src/connection/tests/stream.rs":"3a6b23be63e1901ea479749d8132db86959279329121fe5d51b34c3fef4d4d05","src/connection/tests/vn.rs":"92f61cfe4ccbb88f4f7c14f0e791bdece5368012922714d3dbd6a75bedb1b5a1","src/connection/tests/zerortt.rs":"139f25b992ee6f7e3cc31448f81e511386bb3b0e6691180c7f616b70c4864883","src/crypto.rs":"a0ff9053a13350e34aec02241eb2ae3e86d9f5af21065d5b8d71b7b229e00ced","src/ecn.rs":"2e54e0a57842070a80da61315b601085876351ef0272eaf65b8a59e32ecc4db8","src/events.rs":"3cdd7d5496b2745626db4ceb863b5a91ae943090a43a5816a1f9bcf873fba2be","src/fc.rs":"c8d10909912b6770e644aaec02cff6f89f557d5f40a246aa86654cf88c91d26e","src/frame.rs":"4262717662f155e62bb29c9f0cac295bbae96076eb2d92c27052a35f979aa196","src/lib.rs":"a8ab9b2204d50a3b6f6c1250ed0d47daafaef00c040b93dfa3c60195eeb07624","src/pace.rs":"86a674ac4d086148ea297214910458c3705918bd627b996ba8bbb12f2c4bf99e","src/packet/mod.rs":"16385a097363d3af6452c6dcb7f14fbd86e410dd42fa59435c5beea1699f77e9","src/packet/retry.rs":"d5f999485f21b388a7383cd011fc6e96109c1a9fb5aef79b19017df6844271ff","src/path.rs":"6a49a8a1cad609873f2cacca6489ba1a7a18cf238f7b8f6df2d0b0923edde3fd","src/qlog.rs":"07ea3a3e31ebf3819d40ff0dc4e4a88861db59f761542e9bc2e9e773eb555242","src/quic_datagrams.rs":"3d33ecb9e6e80c77b812e8260fc807352300fb2305a29b797259ae34c52b67c5","src/recovery/mod.rs":"4b1e45db1793785cda67fe804d1e6bc99b5f1a3ed3ff0f82e8164bc0aab11f8e","src/recovery/sent.rs":"959b70ed80b1061acf36bdd007f2b1baefbc8647c3a315d6fbd317884757beca","src/recovery/token.rs":"c1e4190c6733afd2bf5e60060d8ba3ab9fb136e02252e2480b281871a54d6066","src/recv_stream.rs":"f21ae0bb786901bb7d726a94cb3352607b0057128beaa331808137f2f57a330b","src/rtt.rs":"4635dc0c401b78a1fd9d34da6f9bf7f6e7f5be3a57ed9716e0efc8f0f94f1e47","src/send_stream.rs":"5b12a5543dd55d0d506eb64f828883b9761722a1558f16ecb90ce5a43587a2ff","src/sender.rs":"043be47e97d050532f12a564e78605cff7ff23e07639ea06059ebd85e0748f2f","src/server.rs":"3ededa0afd5e6b6888fc5ac9ce48e35e12974c338c7985f2b840e9dc76af0062","src/stats.rs":"257ab1242ea2e6bfac0900e6c4bdad794bc67b666930323d24e022e46b9be82b","src/stream_id.rs":"fd07cbb81709a54bdb0659f676ef851cd145c004b817044ede5b21e54fdb60e4","src/streams.rs":"f2e393dc73cc85c8339cb94daf6a09d3bde4d33d820fd6623ddd6b3d727d5fd5","src/tparams.rs":"592f29c9e2d2a63ff68b024ce23274896ed8ae83192b76b91f5e2991246682cd","src/tracking.rs":"c8581318cd7be3ca94ef4482341cfc1fdb70f934966c63a69335cb0bf5bd292a","src/version.rs":"182484ed9ecc2e17cab73cc61914a86a2d206936cab313825ae76fd37eeade77","tests/common/mod.rs":"7f9437d5efc38f4b9cabfece575e9168580e78e8638f46e538de58607f46ebb8","tests/conn_vectors.rs":"997702f4d8b8fa3b987b33077a0eb325e968b25b61fb4703532f8d97e1d4c98c","tests/connection.rs":"1c14853d61dad5f228a3e1a0becebb0c6826405de59ff601f43d5cb2fdb3f8ea","tests/network.rs":"04921aa5af583e842e6d2176a898fbfea747e831bbe292b5ef8441eaf546b93a","tests/retry.rs":"ace4a0baa36f7218c9942abc2b45b58f8c2dbd2b6004b469751e41b50f6f99d0","tests/server.rs":"9724460d7ac2f9d6af94baf6b3cf950900ae489412edc55d62609bacfcf02b09"},"package":null} -\ No newline at end of file -+{"files":{"Cargo.toml":"2c18e43bca0b6e963cd3c169ed4b1dbf21de7e420b71be1d9cf1bf1bfcaa8d01","benches/range_tracker.rs":"590dd1f81c92e89ce28af1efdda583d85240438bd9c4c68767286d22a299ad4b","benches/rx_stream_orderer.rs":"53a008357703251a18100521a12d8fa9443c5601ddc3cbd1b3c2899074da4c4f","benches/transfer.rs":"94eb0ec1a0a7d0a4863ddc1c6d006521e52c1f2e7f03c69428b18f7eb827d33f","build.rs":"78ec79c93bf13c3a40ceef8bba1ea2eada61c8f2dfc15ea7bf117958d367949c","src/ackrate.rs":"4bb882e1069a0707dc85338b75327e2910c93ee5f36575767a0d58c4c41c9d4f","src/addr_valid.rs":"03c0b2ff85254179c5d425b12acfdcc6b1ea5735aeb0f604b9b3603451b3ef0a","src/cc/classic_cc.rs":"bd4999f21b6b7d754c8694345f40d0e99c1c3caba3d23a90bd9eb12798ef4979","src/cc/cubic.rs":"24c6913cc6346e5361007221c26e8096ece51583431fc3ab9c99e4ce4b0a9f5d","src/cc/mod.rs":"8031ed3d37bf780dd1364114149b1a1327656e7f481768548ad77db7006daf60","src/cc/new_reno.rs":"25d0921005688e0f0666efd0a4931b4f8cd44363587d98e5b6404818c5d05dd4","src/cc/tests/cubic.rs":"25ee2c60549bb8b3c1e9a915f148928a26b3f1c51e5f7fe6b646a437f520954c","src/cc/tests/mod.rs":"44f8df551e742ae1037cd1cdb85b2c1334c2e5ab3c23ed63d856dbc6b8743afc","src/cc/tests/new_reno.rs":"3cd7373063a3afecb6dfae7894edf959641d87d3de55d4abfa7742cd115fa358","src/cid.rs":"9686a3070c593cfca846d7549863728e31211b304b9fa876220f79bff5e24173","src/connection/dump.rs":"bd4fb55785fe42f5c94f7bcc14ccf4ae377d28b691fb55dbf1139ae9412b0ea9","src/connection/idle.rs":"6f588bab950620df322033abea5f8a731f5b6d88cbe68694b69ab8acea0745ae","src/connection/mod.rs":"72ab734a8d368b2f2d430899a65f5a8c64a21d797a0c3e6d3e53666ef8e0e740","src/connection/params.rs":"38e0b47c8cc5fbe602e3174d7a70df410829bc240b42f21cebd10818e606ef7c","src/connection/saved.rs":"97eb19792be3c4d721057021a43ea50a52f89a3cfa583d3d3dcf5d9144b332f5","src/connection/state.rs":"b1d4bdda3479e7957d1949a969281ecd8a3d88f4fbaff6dcf7ebbb576759339c","src/connection/test_internal.rs":"f3ebfe97b25c9c716d41406066295e5aff4e96a3051ef4e2b5fb258282bbc14c","src/connection/tests/ackrate.rs":"4a2b835575850ae4a14209d3e51883ecb1e69afb44ef91b5e13a5e6cb7174fab","src/connection/tests/cc.rs":"d9a0f00a8f439c4ea8d4b6fa689fbde8bd283256afdd68ec4a27f6638b729704","src/connection/tests/close.rs":"5f245fd134bc0759ef0c83a6d53e0a8d5a8e58dcdf203c750ec9121940272461","src/connection/tests/datagram.rs":"7d89e5293d5b50c7a54c9b48949c2c4c8ef5dc08f3e7e5f51654586578d65602","src/connection/tests/ecn.rs":"3ff05893154fb6a895fe4453db7cc54684ba3bdf268a36b69c36c4070768d7b4","src/connection/tests/handshake.rs":"67a6f090ed89ef6c63129f7e662dc1cfff3f291711a866dff3d779caa40e51c7","src/connection/tests/idle.rs":"2d588bd6570172ca08974931273b6c4645af3edca9ccac78499d7d2d5ecec86c","src/connection/tests/keys.rs":"7c58b255e9732711e13f2a3e1daa13ac9481d8c919a32ca62e70c850845a6b38","src/connection/tests/migration.rs":"40d4feba9957de7eef7391009996016af1a3052fabc7659680b64796cf9fb8bf","src/connection/tests/mod.rs":"43b7745e9722333f7bc851c70ccdfdd1dc4da3991a4b821fac677664719e760f","src/connection/tests/null.rs":"38f76a4ea15e6b11634d4374cb0f2a68bd250e5d35831edfce0fa48deeaa420d","src/connection/tests/priority.rs":"dd3504f52d3fce7a96441624bc1c82c733e6bb556b9b79d24d0f4fb4efaf5a9e","src/connection/tests/recovery.rs":"7f28767f3cca2ff60e3dcfa803e12ef043486a222f54681a8faf2ea2fee564a1","src/connection/tests/resumption.rs":"1a0de0993cd325224fc79a3c094d22636d5b122ab1123d16265d4fafb23574bd","src/connection/tests/stream.rs":"3a6b23be63e1901ea479749d8132db86959279329121fe5d51b34c3fef4d4d05","src/connection/tests/vn.rs":"92f61cfe4ccbb88f4f7c14f0e791bdece5368012922714d3dbd6a75bedb1b5a1","src/connection/tests/zerortt.rs":"139f25b992ee6f7e3cc31448f81e511386bb3b0e6691180c7f616b70c4864883","src/crypto.rs":"033db48824fa541db728b43f25d5852d4c4de735c35d89151336649dd8d2429a","src/ecn.rs":"2e54e0a57842070a80da61315b601085876351ef0272eaf65b8a59e32ecc4db8","src/events.rs":"3cdd7d5496b2745626db4ceb863b5a91ae943090a43a5816a1f9bcf873fba2be","src/fc.rs":"c8d10909912b6770e644aaec02cff6f89f557d5f40a246aa86654cf88c91d26e","src/frame.rs":"4262717662f155e62bb29c9f0cac295bbae96076eb2d92c27052a35f979aa196","src/lib.rs":"a8ab9b2204d50a3b6f6c1250ed0d47daafaef00c040b93dfa3c60195eeb07624","src/pace.rs":"86a674ac4d086148ea297214910458c3705918bd627b996ba8bbb12f2c4bf99e","src/packet/mod.rs":"16385a097363d3af6452c6dcb7f14fbd86e410dd42fa59435c5beea1699f77e9","src/packet/retry.rs":"d5f999485f21b388a7383cd011fc6e96109c1a9fb5aef79b19017df6844271ff","src/path.rs":"6a49a8a1cad609873f2cacca6489ba1a7a18cf238f7b8f6df2d0b0923edde3fd","src/qlog.rs":"07ea3a3e31ebf3819d40ff0dc4e4a88861db59f761542e9bc2e9e773eb555242","src/quic_datagrams.rs":"3d33ecb9e6e80c77b812e8260fc807352300fb2305a29b797259ae34c52b67c5","src/recovery/mod.rs":"4b1e45db1793785cda67fe804d1e6bc99b5f1a3ed3ff0f82e8164bc0aab11f8e","src/recovery/sent.rs":"959b70ed80b1061acf36bdd007f2b1baefbc8647c3a315d6fbd317884757beca","src/recovery/token.rs":"c1e4190c6733afd2bf5e60060d8ba3ab9fb136e02252e2480b281871a54d6066","src/recv_stream.rs":"f21ae0bb786901bb7d726a94cb3352607b0057128beaa331808137f2f57a330b","src/rtt.rs":"4635dc0c401b78a1fd9d34da6f9bf7f6e7f5be3a57ed9716e0efc8f0f94f1e47","src/send_stream.rs":"5b12a5543dd55d0d506eb64f828883b9761722a1558f16ecb90ce5a43587a2ff","src/sender.rs":"043be47e97d050532f12a564e78605cff7ff23e07639ea06059ebd85e0748f2f","src/server.rs":"3ededa0afd5e6b6888fc5ac9ce48e35e12974c338c7985f2b840e9dc76af0062","src/stats.rs":"257ab1242ea2e6bfac0900e6c4bdad794bc67b666930323d24e022e46b9be82b","src/stream_id.rs":"fd07cbb81709a54bdb0659f676ef851cd145c004b817044ede5b21e54fdb60e4","src/streams.rs":"f2e393dc73cc85c8339cb94daf6a09d3bde4d33d820fd6623ddd6b3d727d5fd5","src/tparams.rs":"592f29c9e2d2a63ff68b024ce23274896ed8ae83192b76b91f5e2991246682cd","src/tracking.rs":"c8581318cd7be3ca94ef4482341cfc1fdb70f934966c63a69335cb0bf5bd292a","src/version.rs":"182484ed9ecc2e17cab73cc61914a86a2d206936cab313825ae76fd37eeade77","tests/common/mod.rs":"7f9437d5efc38f4b9cabfece575e9168580e78e8638f46e538de58607f46ebb8","tests/conn_vectors.rs":"997702f4d8b8fa3b987b33077a0eb325e968b25b61fb4703532f8d97e1d4c98c","tests/connection.rs":"c6755968255fb68795d9f1ae4ece73d7b674d8616d3512757309efd2c42c39d1","tests/network.rs":"04921aa5af583e842e6d2176a898fbfea747e831bbe292b5ef8441eaf546b93a","tests/retry.rs":"ace4a0baa36f7218c9942abc2b45b58f8c2dbd2b6004b469751e41b50f6f99d0","tests/server.rs":"9724460d7ac2f9d6af94baf6b3cf950900ae489412edc55d62609bacfcf02b09"},"package":null} -diff --git a/third_party/rust/neqo-transport/src/crypto.rs b/third_party/rust/neqo-transport/src/crypto.rs -index aca76b8bb9..3bfe7057bc 100644 ---- a/third_party/rust/neqo-transport/src/crypto.rs -+++ b/third_party/rust/neqo-transport/src/crypto.rs -@@ -21,7 +21,7 @@ use neqo_crypto::{ - TLS_AES_128_GCM_SHA256, TLS_AES_256_GCM_SHA384, TLS_CHACHA20_POLY1305_SHA256, TLS_CT_HANDSHAKE, - TLS_EPOCH_APPLICATION_DATA, TLS_EPOCH_HANDSHAKE, TLS_EPOCH_INITIAL, TLS_EPOCH_ZERO_RTT, - TLS_GRP_EC_SECP256R1, TLS_GRP_EC_SECP384R1, TLS_GRP_EC_SECP521R1, TLS_GRP_EC_X25519, -- TLS_GRP_KEM_XYBER768D00, TLS_VERSION_1_3, -+ TLS_GRP_KEM_MLKEM768X25519, TLS_VERSION_1_3, - }; - - use crate::{ -@@ -78,9 +78,10 @@ impl Crypto { - ])?; - match &mut agent { - Agent::Server(c) => { -- // Clients do not send xyber shares by default, but servers should accept them. -+ // Clients do not send mlkem768x25519 shares by default, but servers should accept -+ // them. - c.set_groups(&[ -- TLS_GRP_KEM_XYBER768D00, -+ TLS_GRP_KEM_MLKEM768X25519, - TLS_GRP_EC_X25519, - TLS_GRP_EC_SECP256R1, - TLS_GRP_EC_SECP384R1, -diff --git a/third_party/rust/neqo-transport/tests/connection.rs b/third_party/rust/neqo-transport/tests/connection.rs -index 35167d0abd..7f9304e9c8 100644 ---- a/third_party/rust/neqo-transport/tests/connection.rs -+++ b/third_party/rust/neqo-transport/tests/connection.rs -@@ -279,12 +279,12 @@ fn overflow_crypto() { - } - - #[test] --fn test_handshake_xyber() { -+fn handshake_mlkem768x25519() { - let mut client = default_client(); - let mut server = default_server(); - - client -- .set_groups(&[neqo_crypto::TLS_GRP_KEM_XYBER768D00]) -+ .set_groups(&[neqo_crypto::TLS_GRP_KEM_MLKEM768X25519]) - .ok(); - client.send_additional_key_shares(0).ok(); - -@@ -293,10 +293,10 @@ fn test_handshake_xyber() { - assert_eq!(*server.state(), State::Confirmed); - assert_eq!( - client.tls_info().unwrap().key_exchange(), -- neqo_crypto::TLS_GRP_KEM_XYBER768D00 -+ neqo_crypto::TLS_GRP_KEM_MLKEM768X25519 - ); - assert_eq!( - server.tls_info().unwrap().key_exchange(), -- neqo_crypto::TLS_GRP_KEM_XYBER768D00 -+ neqo_crypto::TLS_GRP_KEM_MLKEM768X25519 - ); - } diff --git a/process-official-tarball b/process-official-tarball index 3b5d317..e17ae69 100755 --- a/process-official-tarball +++ b/process-official-tarball @@ -18,6 +18,7 @@ rm -vf ./process-tarball-dir/*/mobile/android/android-components/components/brow rm -vf ./process-tarball-dir/*/mobile/android/android-components/components/feature/addons/src/main/res/values-ur/strings.xml rm -vf ./process-tarball-dir/*/third_party/webkit/PerformanceTests/Speedometer3/resources/editors/dist/assets/codemirror-521de7ab.js rm -vf ./process-tarball-dir/*/third_party/python/pip/pip-24.0.dist-info/AUTHORS.txt +rm -vf ./process-tarball-dir/*/dom/locks/test/crashtests/1908240.js rm -vf ./process-tarball-dir/*/comm/third_party/rust/idna/tests/IdnaTestV2.txt rm -vr ./process-tarball-dir/*/comm/third_party/rust/wast/tests/parse-fail/confusing* rm -vr ./process-tarball-dir/*/third_party/rust/wast/tests/parse-fail/confusing* diff --git a/sources b/sources index 1d1859b..757789b 100644 --- a/sources +++ b/sources @@ -2,5 +2,5 @@ SHA512 (nss-3.112.0-1.el9_4.src.rpm) = 6386239e79f8095b05270b3c8b76ac9203b0df196 SHA512 (cbindgen-vendor.tar.xz) = 2b8db32c0bca2fa27304ee4fd3a5cc38bc43a11500b23842747813d221e55719c51cf4c0e027e41857f58ce1e283ce97b69c2c7d1eae93ecbb08c2f729e2bf55 SHA512 (nss-3.112.0-4.el8_2.src.rpm) = 59cca3df7a0ec6a731f4a36f8f560d496d240da0c16650f047ae686e683b883dc2630aedbe46a8b2cb21662c15f03f1efbe99da42055cc3a5418da4839e28da2 SHA512 (nspr-4.36.0-2.el8_2.src.rpm) = fcc720afd2453a5110975fac9dd06f636491234780b62cbfcc235a485b4935e97c4f438292c686d27d9dc86b56f43399c024bee4fffcdff5f27c62d105310645 -SHA512 (thunderbird-140.3.0esr.processed-source.tar.xz) = d1cef0e1464798f25d2a69b401edd82340b756cd308eb41fb2f19365537ddac4c6a1ce02221991bff285f69201ccc1e434b1e03500d9a07ad3437a189a0f0daf -SHA512 (thunderbird-langpacks-140.3.0esr-20250912.tar.xz) = 773627206021f1a5405d208d3b06fbb43e889665badc9f33649a4b8e4e491b528b9112c2a019171bc0e91c84b42544e5db159a7ae1cf5f56d707df19e301848f +SHA512 (thunderbird-140.4.0esr.processed-source.tar.xz) = 7b0a530bcd52169b05fb584bbc5a26de1ffb33908ded1ca17ac789f1c1320f573cb800f7a2c6ad8b42fb9b2e44e9d2dce8ebc2850d8bf2674fe7dd89f11b556e +SHA512 (thunderbird-langpacks-140.4.0esr-20251013.tar.xz) = aae8ca2e5d4c0740e22df069f748d02ec6a185ac973ebfef8c5dc966e2bf73aa9d228302f29eaf92ab4bdbacfc1380be43c2d20765f9193b2d96e43127ff86f9 diff --git a/thunderbird-adapt-ml-dsa-support-to-rhel-nss.patch b/thunderbird-adapt-ml-dsa-support-to-rhel-nss.patch new file mode 100644 index 0000000..4349476 --- /dev/null +++ b/thunderbird-adapt-ml-dsa-support-to-rhel-nss.patch @@ -0,0 +1,31 @@ +diff --git a/security/nss/lib/mozpkix/lib/pkixnss.cpp b/security/nss/lib/mozpkix/lib/pkixnss.cpp +index 31aa1ddd67..6eb367eae4 100644 +--- a/security/nss/lib/mozpkix/lib/pkixnss.cpp ++++ b/security/nss/lib/mozpkix/lib/pkixnss.cpp +@@ -323,13 +323,21 @@ VerifyMLDSASignedDataNSS(Input data, + SECItem dataItem(UnsafeMapInputToSECItem(data)); + CK_MECHANISM_TYPE mechanism; + +- switch (pubk->u.mldsa.paramSet) { +- case SEC_OID_ML_DSA_44: +- case SEC_OID_ML_DSA_65: +- case SEC_OID_ML_DSA_87: ++ switch (SEC_GetSignatureAlgorithmOidTag(pubk->keyType, pubk->u.mldsa.params)) { ++ case CKP_ML_DSA_44: ++ hashPolicyTag = SEC_OID_UNKNOWN; ++ mechanism = CKM_ML_DSA; ++ signaturePolicyTag = SEC_OID_PRIVATE_3; ++ break; ++ case CKP_ML_DSA_65: ++ hashPolicyTag = SEC_OID_UNKNOWN; + mechanism = CKM_ML_DSA; +- signaturePolicyTag = pubk->u.mldsa.paramSet; ++ signaturePolicyTag = SEC_OID_PRIVATE_4; ++ break; ++ case CKP_ML_DSA_87: + hashPolicyTag = SEC_OID_UNKNOWN; ++ mechanism = CKM_ML_DSA; ++ signaturePolicyTag = SEC_OID_PRIVATE_5; + break; + default: + return Result::ERROR_UNSUPPORTED_KEYALG; diff --git a/thunderbird-add-ml-dsa-certificate-support-to-certviewer.patch b/thunderbird-add-ml-dsa-certificate-support-to-certviewer.patch new file mode 100644 index 0000000..a61d2b3 --- /dev/null +++ b/thunderbird-add-ml-dsa-certificate-support-to-certviewer.patch @@ -0,0 +1,323 @@ +diff --git a/toolkit/components/certviewer/content/certDecoder.mjs b/toolkit/components/certviewer/content/certDecoder.mjs +--- a/toolkit/components/certviewer/content/certDecoder.mjs ++++ b/toolkit/components/certviewer/content/certDecoder.mjs +@@ -5,10 +5,11 @@ + import { + Certificate, + ECNamedCurves, + ECPublicKey, + RSAPublicKey, ++ MLDSAPublicKey, + } from "./vendor/pkijs.js"; + + const getTimeZone = () => { + let timeZone = new Date().toString().match(/\(([A-Za-z\s].*)\)/); + if (timeZone === null) { +@@ -45,10 +46,19 @@ + x, // x coordinate + y, // y coordinate + xy: `04:${x}:${y}`, // 04 (uncompressed) public key + }; + } ++ if (publicKey instanceof MLDSAPublicKey) { ++ let keyHex = publicKey.rhoT1.valueBlock.valueHex; ++ let keyBytes = new Uint8Array(keyHex); ++ return { ++ kty: publicKey.alg, ++ keysize: keyBytes.length, ++ rhoT1: hashify(keyHex), ++ }; ++ } + return { kty: "Unknown" }; + }; + + const getX509Ext = (extensions, v) => { + for (var extension in extensions) { +@@ -1132,10 +1142,13 @@ + "2.16.840.1.101.3.4.3.2": "DSA with SHA-256", + "1.2.840.10045.4.1": "ECDSA with SHA-1", + "1.2.840.10045.4.3.2": "ECDSA with SHA-256", + "1.2.840.10045.4.3.3": "ECDSA with SHA-384", + "1.2.840.10045.4.3.4": "ECDSA with SHA-512", ++ "2.16.840.1.101.3.4.3.17": "ML-DSA-44", ++ "2.16.840.1.101.3.4.3.18": "ML-DSA-65", ++ "2.16.840.1.101.3.4.3.19": "ML-DSA-87", + }, + + aia: { + "1.3.6.1.5.5.7.48.1": "Online Certificate Status Protocol (OCSP)", + "1.3.6.1.5.5.7.48.2": "CA Issuers", +diff --git a/toolkit/components/certviewer/content/certviewer.mjs b/toolkit/components/certviewer/content/certviewer.mjs +--- a/toolkit/components/certviewer/content/certviewer.mjs ++++ b/toolkit/components/certviewer/content/certviewer.mjs +@@ -74,10 +74,23 @@ + } + } + return result ? result : false; + }; + ++const getMLDSASecurityLevel = signatureName => { ++ switch (signatureName) { ++ case "ML-DSA-44": ++ return "Level 2 (NIST)"; ++ case "ML-DSA-65": ++ return "Level 3 (NIST)"; ++ case "ML-DSA-87": ++ return "Level 5 (NIST)"; ++ default: ++ return null; ++ } ++}; ++ + export const adjustCertInformation = cert => { + let certItems = []; + let tabName = cert?.subject?.cn || ""; + if (cert && !tabName) { + // No common name, use the value of the last item in the cert's entries. +@@ -173,10 +186,15 @@ + createEntryItem("key-size", cert.subjectPublicKeyInfo.keysize), + createEntryItem("curve", cert.subjectPublicKeyInfo.crv), + createEntryItem("public-value", cert.subjectPublicKeyInfo.xy, true), + createEntryItem("exponent", cert.subjectPublicKeyInfo.e), + createEntryItem("modulus", cert.subjectPublicKeyInfo.n, true), ++ createEntryItem( ++ "mldsa-public-value", ++ cert.subjectPublicKeyInfo.rhoT1, ++ true ++ ), + ].filter(elem => elem != null); + } + return items; + }, + certItems, +@@ -190,14 +208,23 @@ + createEntryItem("serial-number", cert.serialNumber, true), + createEntryItem( + "signature-algorithm", + cert.signature ? cert.signature.name : null + ), ++ ]; ++ ++ const secLvl = getMLDSASecurityLevel(cert.signature?.name); ++ if (secLvl) { ++ items.push(createEntryItem("security-level", secLvl)); ++ } ++ ++ items.push( + createEntryItem("version", cert.version), +- createEntryItem("download", cert.files ? cert.files.pem : null), +- ].filter(elem => elem != null); +- return items; ++ createEntryItem("download", cert.files ? cert.files.pem : null) ++ ); ++ ++ return items.filter(elem => elem != null); + }, + certItems, + "miscellaneous", + false + ); +diff --git a/toolkit/components/certviewer/content/vendor/pkijs.js b/toolkit/components/certviewer/content/vendor/pkijs.js +--- a/toolkit/components/certviewer/content/vendor/pkijs.js ++++ b/toolkit/components/certviewer/content/vendor/pkijs.js +@@ -8609,10 +8609,90 @@ + this.publicExponent = new Integer({ valueHex: stringToArrayBuffer(fromBase64(json.e, true)).slice(0, 3) }); + } + } + RSAPublicKey.CLASS_NAME = "RSAPublicKey"; + ++/* @see https://www.ietf.org/archive/id/draft-ietf-lamps-dilithium-certificates-11.html */ ++const RHO_T1 = "rhoT1"; ++const ALG = "alg"; ++const CLEAR_PROPS_MLDSA = [RHO_T1, ALG]; ++const MLDSA_MIN_LENGTH = 32; ++class MLDSAPublicKey extends PkiObject { ++ constructor(parameters = {}) { ++ super(); ++ ++ this.rhoT1 = getParametersValue(parameters, RHO_T1, MLDSAPublicKey.defaultValues(RHO_T1)); ++ this.alg = getParametersValue(parameters, ALG, MLDSAPublicKey.defaultValues(ALG)); ++ ++ if (parameters.json) { ++ this.fromJSON(parameters.json); ++ } ++ ++ if (parameters.schema) { ++ this.fromSchema(parameters.schema); ++ } ++ } ++ ++ static defaultValues(memberName) { ++ switch (memberName) { ++ case RHO_T1: ++ return new BitString(); ++ case ALG: ++ return ""; ++ default: ++ return super.defaultValues(memberName); ++ } ++ } ++ ++ static schema(parameters = {}) { ++ const names = getParametersValue(parameters, "names", {}); ++ return new BitString({ name: names.rhoT1 || RHO_T1 }); ++ } ++ ++ fromSchema(schema) { ++ clearProps(schema, CLEAR_PROPS_MLDSA); ++ ++ const asn1 = compareSchema(schema, schema, MLDSAPublicKey.schema({ ++ names: { rhoT1: RHO_T1 } ++ })); ++ ++ AsnError.assertSchema(asn1, this.className); ++ ++ const bitString = asn1.result.rhoT1; ++ const length = bitString.valueBlock.valueHexView.length; ++ ++ if (length < MLDSA_MIN_LENGTH || (length - MLDSA_MIN_LENGTH) % 320 !== 0) { ++ throw new Error(`Invalid ML-DSA key length: ${length} bytes`); ++ } ++ ++ this.rhoT1 = bitString; ++ } ++ ++ toSchema() { ++ return this.rhoT1; ++ } ++ ++ toJSON() { ++ return { ++ rhoT1: Convert.ToBase64Url(this.rhoT1.valueBlock.valueHexView), ++ alg: this.alg ++ }; ++ } ++ ++ fromJSON(json) { ++ ParameterError.assert("json", json, "rhoT1"); ++ const rawBuffer = stringToArrayBuffer(fromBase64(json.rhoT1, true)); ++ ++ if (rawBuffer.byteLength < MLDSA_MIN_LENGTH || (rawBuffer.byteLength - MLDSA_MIN_LENGTH) % 320 !== 0) { ++ throw new Error(`Invalid ML-DSA key length: ${rawBuffer.byteLength} bytes`); ++ } ++ ++ this.rhoT1 = new BitString({ valueHex: rawBuffer }); ++ } ++} ++MLDSAPublicKey.CLASS_NAME = "MLDSAPublicKey"; ++ + const ALGORITHM$1 = "algorithm"; + const SUBJECT_PUBLIC_KEY = "subjectPublicKey"; + const CLEAR_PROPS$1a = [ALGORITHM$1, SUBJECT_PUBLIC_KEY]; + class PublicKeyInfo extends PkiObject { + constructor(parameters = {}) { +@@ -8657,10 +8737,22 @@ + catch (ex) { + } + } + } + break; ++ case "2.16.840.1.101.3.4.3.17": ++ /* Already a bitstring */ ++ this._parsedKey = new MLDSAPublicKey({ rhoT1: this.subjectPublicKey, alg: "ML-DSA-44" }); ++ break; ++ case "2.16.840.1.101.3.4.3.18": ++ /* Already a bitstring */ ++ this._parsedKey = new MLDSAPublicKey({ rhoT1: this.subjectPublicKey, alg: "ML-DSA-65" }); ++ break; ++ case "2.16.840.1.101.3.4.3.19": ++ /* Already a bitstring */ ++ this._parsedKey = new MLDSAPublicKey({ rhoT1: this.subjectPublicKey, alg: "ML-DSA-87" }); ++ break; + } + this._parsedKey || (this._parsedKey = null); + } + return this._parsedKey || undefined; + } +@@ -8724,10 +8816,19 @@ + jwk.kty = "EC"; + break; + case "1.2.840.113549.1.1.1": + jwk.kty = "RSA"; + break; ++ case "2.16.840.1.101.3.4.3.17": ++ jwk.kty = "ML-DSA-44"; ++ break; ++ case "2.16.840.1.101.3.4.3.18": ++ jwk.kty = "ML-DSA-65"; ++ break; ++ case "2.16.840.1.101.3.4.3.19": ++ jwk.kty = "ML-DSA-87"; ++ break; + } + const publicKeyJWK = this.parsedKey.toJSON(); + Object.assign(jwk, publicKeyJWK); + return jwk; + } +@@ -8746,10 +8847,31 @@ + this.algorithm = new AlgorithmIdentifier({ + algorithmId: "1.2.840.113549.1.1.1", + algorithmParams: new Null() + }); + break; ++ case "ML-DSA-44": ++ this.parsedKey = new MLDSAPublicKey({ json }); ++ this.algorithm = new AlgorithmIdentifier({ ++ algorithmId: "2.16.840.1.101.3.4.3.17", ++ algorithmParams: new Null() ++ }); ++ break; ++ case "ML-DSA-65": ++ this.parsedKey = new MLDSAPublicKey({ json }); ++ this.algorithm = new AlgorithmIdentifier({ ++ algorithmId: "2.16.840.1.101.3.4.3.18", ++ algorithmParams: new Null() ++ }); ++ break; ++ case "ML-DSA-87": ++ this.parsedKey = new MLDSAPublicKey({ json }); ++ this.algorithm = new AlgorithmIdentifier({ ++ algorithmId: "2.16.840.1.101.3.4.3.19", ++ algorithmParams: new Null() ++ }); ++ break; + default: + throw new Error(`Invalid value for "kty" parameter: ${json.kty}`); + } + this.subjectPublicKey = new BitString({ valueHex: this.parsedKey.toSchema().toBER(false) }); + } +@@ -24078,6 +24200,6 @@ + } + } + + initCryptoEngine(); + +-export { AbstractCryptoEngine, AccessDescription, Accuracy, AlgorithmIdentifier, AltName, ArgumentError, AsnError, AttCertValidityPeriod, Attribute, AttributeCertificateInfoV1, AttributeCertificateInfoV2, AttributeCertificateV1, AttributeCertificateV2, AttributeTypeAndValue, AuthenticatedSafe, AuthorityKeyIdentifier, BasicConstraints, BasicOCSPResponse, CAVersion, CRLBag, CRLDistributionPoints, CertBag, CertID, Certificate, CertificateChainValidationEngine, CertificatePolicies, CertificateRevocationList, CertificateSet, CertificateTemplate, CertificationRequest, ChainValidationCode, ChainValidationError, ContentInfo, CryptoEngine, DigestInfo, DistributionPoint, ECCCMSSharedInfo, ECNamedCurves, ECPrivateKey, ECPublicKey, EncapsulatedContentInfo, EncryptedContentInfo, EncryptedData, EnvelopedData, ExtKeyUsage, Extension, ExtensionValueFactory, Extensions, GeneralName, GeneralNames, GeneralSubtree, HASHED_MESSAGE, HASH_ALGORITHM, Holder, InfoAccess, IssuerAndSerialNumber, IssuerSerial, IssuingDistributionPoint, KEKIdentifier, KEKRecipientInfo, KeyAgreeRecipientIdentifier, KeyAgreeRecipientInfo, KeyBag, KeyTransRecipientInfo, MICROS, MILLIS, MacData, MessageImprint, NameConstraints, OCSPRequest, OCSPResponse, ObjectDigestInfo, OriginatorIdentifierOrKey, OriginatorInfo, OriginatorPublicKey, OtherCertificateFormat, OtherKeyAttribute, OtherPrimeInfo, OtherRecipientInfo, OtherRevocationInfoFormat, PBES2Params, PBKDF2Params, PFX, PKCS8ShroudedKeyBag, PKIStatus, PKIStatusInfo, POLICY_IDENTIFIER, POLICY_QUALIFIERS, ParameterError, PasswordRecipientinfo, PkiObject, PolicyConstraints, PolicyInformation, PolicyMapping, PolicyMappings, PolicyQualifierInfo, PrivateKeyInfo, PrivateKeyUsagePeriod, PublicKeyInfo, QCStatement, QCStatements, RDN, RSAESOAEPParams, RSAPrivateKey, RSAPublicKey, RSASSAPSSParams, RecipientEncryptedKey, RecipientEncryptedKeys, RecipientIdentifier, RecipientInfo, RecipientKeyIdentifier, RelativeDistinguishedNames, Request, ResponseBytes, ResponseData, RevocationInfoChoices, RevokedCertificate, SECONDS, SafeBag, SafeBagValueFactory, SafeContents, SecretBag, Signature, SignedAndUnsignedAttributes, SignedCertificateTimestamp, SignedCertificateTimestampList, SignedData, SignedDataVerifyError, SignerInfo, SingleResponse, SubjectDirectoryAttributes, TBSRequest, TSTInfo, TYPE$4 as TYPE, TYPE_AND_VALUES, Time, TimeStampReq, TimeStampResp, TimeType, V2Form, VALUE$5 as VALUE, VALUE_BEFORE_DECODE, checkCA, createCMSECDSASignature, createECDSASignatureFromCMS, engine, getAlgorithmByOID, getAlgorithmParameters, getCrypto, getEngine, getHashAlgorithm, getOIDByAlgorithm, getRandomValues, id_AnyPolicy, id_AuthorityInfoAccess, id_AuthorityKeyIdentifier, id_BaseCRLNumber, id_BasicConstraints, id_CRLBag_X509CRL, id_CRLDistributionPoints, id_CRLNumber, id_CRLReason, id_CertBag_AttributeCertificate, id_CertBag_SDSICertificate, id_CertBag_X509Certificate, id_CertificateIssuer, id_CertificatePolicies, id_ContentType_Data, id_ContentType_EncryptedData, id_ContentType_EnvelopedData, id_ContentType_SignedData, id_ExtKeyUsage, id_FreshestCRL, id_InhibitAnyPolicy, id_InvalidityDate, id_IssuerAltName, id_IssuingDistributionPoint, id_KeyUsage, id_MicrosoftAppPolicies, id_MicrosoftCaVersion, id_MicrosoftCertTemplateV1, id_MicrosoftCertTemplateV2, id_MicrosoftPrevCaCertHash, id_NameConstraints, id_PKIX_OCSP_Basic, id_PolicyConstraints, id_PolicyMappings, id_PrivateKeyUsagePeriod, id_QCStatements, id_SignedCertificateTimestampList, id_SubjectAltName, id_SubjectDirectoryAttributes, id_SubjectInfoAccess, id_SubjectKeyIdentifier, id_ad, id_ad_caIssuers, id_ad_ocsp, id_eContentType_TSTInfo, id_pkix, id_sha1, id_sha256, id_sha384, id_sha512, kdf, setEngine, stringPrep, verifySCTsForCertificate }; ++export { AbstractCryptoEngine, AccessDescription, Accuracy, AlgorithmIdentifier, AltName, ArgumentError, AsnError, AttCertValidityPeriod, Attribute, AttributeCertificateInfoV1, AttributeCertificateInfoV2, AttributeCertificateV1, AttributeCertificateV2, AttributeTypeAndValue, AuthenticatedSafe, AuthorityKeyIdentifier, BasicConstraints, BasicOCSPResponse, CAVersion, CRLBag, CRLDistributionPoints, CertBag, CertID, Certificate, CertificateChainValidationEngine, CertificatePolicies, CertificateRevocationList, CertificateSet, CertificateTemplate, CertificationRequest, ChainValidationCode, ChainValidationError, ContentInfo, CryptoEngine, DigestInfo, DistributionPoint, ECCCMSSharedInfo, ECNamedCurves, ECPrivateKey, ECPublicKey, EncapsulatedContentInfo, EncryptedContentInfo, EncryptedData, EnvelopedData, ExtKeyUsage, Extension, ExtensionValueFactory, Extensions, GeneralName, GeneralNames, GeneralSubtree, HASHED_MESSAGE, HASH_ALGORITHM, Holder, InfoAccess, IssuerAndSerialNumber, IssuerSerial, IssuingDistributionPoint, KEKIdentifier, KEKRecipientInfo, KeyAgreeRecipientIdentifier, KeyAgreeRecipientInfo, KeyBag, KeyTransRecipientInfo, MICROS, MILLIS, MacData, MessageImprint, NameConstraints, OCSPRequest, OCSPResponse, ObjectDigestInfo, OriginatorIdentifierOrKey, OriginatorInfo, OriginatorPublicKey, OtherCertificateFormat, OtherKeyAttribute, OtherPrimeInfo, OtherRecipientInfo, OtherRevocationInfoFormat, PBES2Params, PBKDF2Params, PFX, PKCS8ShroudedKeyBag, PKIStatus, PKIStatusInfo, POLICY_IDENTIFIER, POLICY_QUALIFIERS, ParameterError, PasswordRecipientinfo, PkiObject, PolicyConstraints, PolicyInformation, PolicyMapping, PolicyMappings, PolicyQualifierInfo, PrivateKeyInfo, PrivateKeyUsagePeriod, PublicKeyInfo, QCStatement, QCStatements, RDN, RSAESOAEPParams, RSAPrivateKey, RSAPublicKey, RSASSAPSSParams, RecipientEncryptedKey, RecipientEncryptedKeys, RecipientIdentifier, RecipientInfo, RecipientKeyIdentifier, RelativeDistinguishedNames, Request, ResponseBytes, ResponseData, RevocationInfoChoices, RevokedCertificate, SECONDS, SafeBag, SafeBagValueFactory, SafeContents, SecretBag, Signature, SignedAndUnsignedAttributes, SignedCertificateTimestamp, SignedCertificateTimestampList, SignedData, SignedDataVerifyError, SignerInfo, SingleResponse, SubjectDirectoryAttributes, TBSRequest, TSTInfo, TYPE$4 as TYPE, TYPE_AND_VALUES, Time, TimeStampReq, TimeStampResp, TimeType, V2Form, VALUE$5 as VALUE, VALUE_BEFORE_DECODE, checkCA, createCMSECDSASignature, createECDSASignatureFromCMS, engine, getAlgorithmByOID, getAlgorithmParameters, getCrypto, getEngine, getHashAlgorithm, getOIDByAlgorithm, getRandomValues, id_AnyPolicy, id_AuthorityInfoAccess, id_AuthorityKeyIdentifier, id_BaseCRLNumber, id_BasicConstraints, id_CRLBag_X509CRL, id_CRLDistributionPoints, id_CRLNumber, id_CRLReason, id_CertBag_AttributeCertificate, id_CertBag_SDSICertificate, id_CertBag_X509Certificate, id_CertificateIssuer, id_CertificatePolicies, id_ContentType_Data, id_ContentType_EncryptedData, id_ContentType_EnvelopedData, id_ContentType_SignedData, id_ExtKeyUsage, id_FreshestCRL, id_InhibitAnyPolicy, id_InvalidityDate, id_IssuerAltName, id_IssuingDistributionPoint, id_KeyUsage, id_MicrosoftAppPolicies, id_MicrosoftCaVersion, id_MicrosoftCertTemplateV1, id_MicrosoftCertTemplateV2, id_MicrosoftPrevCaCertHash, id_NameConstraints, id_PKIX_OCSP_Basic, id_PolicyConstraints, id_PolicyMappings, id_PrivateKeyUsagePeriod, id_QCStatements, id_SignedCertificateTimestampList, id_SubjectAltName, id_SubjectDirectoryAttributes, id_SubjectInfoAccess, id_SubjectKeyIdentifier, id_ad, id_ad_caIssuers, id_ad_ocsp, id_eContentType_TSTInfo, id_pkix, id_sha1, id_sha256, id_sha384, id_sha512, kdf, setEngine, stringPrep, verifySCTsForCertificate, MLDSAPublicKey }; +diff --git a/toolkit/locales/en-US/toolkit/about/certviewer.ftl b/toolkit/locales/en-US/toolkit/about/certviewer.ftl +--- a/toolkit/locales/en-US/toolkit/about/certviewer.ftl ++++ b/toolkit/locales/en-US/toolkit/about/certviewer.ftl +@@ -45,20 +45,22 @@ + certificate-viewer-organization = Organization + certificate-viewer-organizational-unit = Organizational Unit + certificate-viewer-policy = Policy + certificate-viewer-protocol = Protocol + certificate-viewer-public-value = Public Value ++certificate-viewer-mldsa-public-value = Public Value + certificate-viewer-purposes = Purposes + certificate-viewer-qualifier = Qualifier + certificate-viewer-qualifiers = Qualifiers + certificate-viewer-required = Required + certificate-viewer-unsupported = <unsupported> + # Inc. means Incorporated, e.g GitHub is incorporated in Delaware + certificate-viewer-inc-state-province = Inc. State/Province + certificate-viewer-state-province = State/Province + certificate-viewer-sha-1 = SHA-1 + certificate-viewer-sha-256 = SHA-256 ++certificate-viewer-security-level = Security Level + certificate-viewer-serial-number = Serial Number + certificate-viewer-signature-algorithm = Signature Algorithm + certificate-viewer-signature-scheme = Signature Scheme + certificate-viewer-timestamp = Timestamp + certificate-viewer-value = Value + diff --git a/thunderbird-enable-ml-dsa-in-manager-ssl.patch b/thunderbird-enable-ml-dsa-in-manager-ssl.patch new file mode 100644 index 0000000..f130b7f --- /dev/null +++ b/thunderbird-enable-ml-dsa-in-manager-ssl.patch @@ -0,0 +1,48 @@ +diff --git a/security/manager/ssl/nsNSSCallbacks.cpp b/security/manager/ssl/nsNSSCallbacks.cpp +index 2dc48c9f4c..0a7b84d787 100644 +--- a/security/manager/ssl/nsNSSCallbacks.cpp ++++ b/security/manager/ssl/nsNSSCallbacks.cpp +@@ -722,6 +722,15 @@ nsCString getSignatureName(uint32_t aSignatureScheme) { + case ssl_sig_rsa_pkcs1_sha1md5: + signatureName = "RSA-PKCS1-SHA1MD5"_ns; + break; ++ case ssl_sig_mldsa44: ++ signatureName = "ML-DSA-44"_ns; ++ break; ++ case ssl_sig_mldsa65: ++ signatureName = "ML-DSA-65"_ns; ++ break; ++ case ssl_sig_mldsa87: ++ signatureName = "ML-DSA-87"_ns; ++ break; + // All other groups are not enabled in Firefox. See sEnabledSignatureSchemes + // in nsNSSIOLayer.cpp. + default: +@@ -1061,6 +1070,13 @@ void HandshakeCallback(PRFileDesc* fd, void* client_data) { + glean::ssl::auth_ecdsa_curve_full.AccumulateSingleSample( + ECCCurve(channelInfo.authKeyBits)); + break; ++ case ssl_auth_mldsa44: ++ case ssl_auth_mldsa65: ++ case ssl_auth_mldsa87: ++ /* TODO: add auth_mldsa_key_size_full in ssl/metrics.yaml ++ glean::ssl::auth_mldsa_key_size_full.AccumulateSingleSample( ++ NonECCKeySize(channelInfo.authKeyBits)); */ ++ break; + default: + MOZ_CRASH("impossible auth algorithm"); + break; +diff --git a/security/manager/ssl/nsNSSIOLayer.cpp b/security/manager/ssl/nsNSSIOLayer.cpp +index b1a5f5c2df..7443011b13 100644 +--- a/security/manager/ssl/nsNSSIOLayer.cpp ++++ b/security/manager/ssl/nsNSSIOLayer.cpp +@@ -1300,6 +1300,9 @@ static PRFileDesc* nsSSLIOLayerImportFD(PRFileDesc* fd, + // Please change getSignatureName in nsNSSCallbacks.cpp when changing the list + // here. See NOTE at SSL_SignatureSchemePrefSet call site. + static const SSLSignatureScheme sEnabledSignatureSchemes[] = { ++ ssl_sig_mldsa87, ++ ssl_sig_mldsa65, ++ ssl_sig_mldsa44, + ssl_sig_ecdsa_secp256r1_sha256, + ssl_sig_ecdsa_secp384r1_sha384, + ssl_sig_ecdsa_secp521r1_sha512, diff --git a/thunderbird-enable-ml-dsa-signature-verification-for-certificate-chain-validation.patch b/thunderbird-enable-ml-dsa-signature-verification-for-certificate-chain-validation.patch new file mode 100644 index 0000000..a14a70e --- /dev/null +++ b/thunderbird-enable-ml-dsa-signature-verification-for-certificate-chain-validation.patch @@ -0,0 +1,239 @@ +diff --git a/security/nss/lib/mozpkix/include/pkix/pkixder.h b/security/nss/lib/mozpkix/include/pkix/pkixder.h +index ac1ec24393..40eb5027af 100644 +--- a/security/nss/lib/mozpkix/include/pkix/pkixder.h ++++ b/security/nss/lib/mozpkix/include/pkix/pkixder.h +@@ -488,7 +488,7 @@ inline Result OptionalExtensions(Reader& input, uint8_t tag, + Result DigestAlgorithmIdentifier(Reader& input, + /*out*/ DigestAlgorithm& algorithm); + +-enum class PublicKeyAlgorithm { RSA_PKCS1, RSA_PSS, ECDSA }; ++enum class PublicKeyAlgorithm { RSA_PKCS1, RSA_PSS, ECDSA, MLDSA }; + + Result SignatureAlgorithmIdentifierValue( + Reader& input, +diff --git a/security/nss/lib/mozpkix/include/pkix/pkixnss.h b/security/nss/lib/mozpkix/include/pkix/pkixnss.h +index 6711959e71..b87e88a599 100644 +--- a/security/nss/lib/mozpkix/include/pkix/pkixnss.h ++++ b/security/nss/lib/mozpkix/include/pkix/pkixnss.h +@@ -50,6 +50,13 @@ Result VerifyECDSASignedDataNSS(Input data, DigestAlgorithm digestAlgorithm, + Input signature, Input subjectPublicKeyInfo, + void* pkcs11PinArg); + ++// Verifies the ML-DSA signature on the given data using the given ML-DSA ++// public key ++Result VerifyMLDSASignedDataNSS(Input data, ++ Input signature, ++ Input subjectPublicKeyInfo, ++ void* pkcs11PinArg); ++ + // Computes the digest of the given data using the given digest algorithm. + // + // item contains the data to hash. +diff --git a/security/nss/lib/mozpkix/include/pkix/pkixtypes.h b/security/nss/lib/mozpkix/include/pkix/pkixtypes.h +index 6a07d6e885..f24bd546e4 100644 +--- a/security/nss/lib/mozpkix/include/pkix/pkixtypes.h ++++ b/security/nss/lib/mozpkix/include/pkix/pkixtypes.h +@@ -334,6 +334,10 @@ class TrustDomain { + Input signature, + Input subjectPublicKeyInfo) = 0; + ++ virtual Result VerifyMLDSASignedData(Input data, ++ Input signature, ++ Input subjectPublicKeyInfo) = 0; ++ + // Check that the validity duration is acceptable. + // + // Return Success if the validity duration is acceptable, +diff --git a/security/nss/lib/mozpkix/lib/pkixc.cpp b/security/nss/lib/mozpkix/lib/pkixc.cpp +index 5dea13c43e..f797a3b3a1 100644 +--- a/security/nss/lib/mozpkix/lib/pkixc.cpp ++++ b/security/nss/lib/mozpkix/lib/pkixc.cpp +@@ -143,6 +143,15 @@ class CodeSigningTrustDomain final : public TrustDomain { + subjectPublicKeyInfo, nullptr); + } + ++ virtual Result VerifyMLDSASignedData(Input data, ++ Input signature, ++ Input subjectPublicKeyInfo) override { ++ return VerifyMLDSASignedDataNSS(data, ++ signature, ++ subjectPublicKeyInfo, ++ nullptr); ++ } ++ + virtual Result CheckValidityIsAcceptable(Time notBefore, Time notAfter, + EndEntityOrCA endEntityOrCA, + KeyPurposeId keyPurpose) override { +diff --git a/security/nss/lib/mozpkix/lib/pkixcheck.cpp b/security/nss/lib/mozpkix/lib/pkixcheck.cpp +index 8b7e1bf73e..4ce73f3944 100644 +--- a/security/nss/lib/mozpkix/lib/pkixcheck.cpp ++++ b/security/nss/lib/mozpkix/lib/pkixcheck.cpp +@@ -118,6 +118,9 @@ CheckSignatureAlgorithm(TrustDomain& trustDomain, + // for any curve that we support, the chances of us encountering a curve + // during path building is too low to be worth bothering with. + break; ++ ++ case der::PublicKeyAlgorithm::MLDSA: ++ break; + MOZILLA_PKIX_UNREACHABLE_DEFAULT_ENUM + } + +@@ -248,6 +251,24 @@ CheckSubjectPublicKeyInfoContents(Reader& input, TrustDomain& trustDomain, + 0x2a, 0x86, 0x48, 0xce, 0x3d, 0x02, 0x01 + }; + ++ // Params for pure ML-DSA-44 signature ++ // python DottedOIDToCode.py id-ml-dsa-44 2.16.840.1.101.3.4.3.17 ++ static const uint8_t id_ml_dsa_44[] = { ++ 0x60, 0x86, 0x48, 0x01, 0x65, 0x03, 0x04, 0x03, 0x11 ++ }; ++ ++ // Params for pure ML-DSA-65 signature ++ // python DottedOIDToCode.py id-ml-dsa-65 2.16.840.1.101.3.4.3.18 ++ static const uint8_t id_ml_dsa_65[] = { ++ 0x60, 0x86, 0x48, 0x01, 0x65, 0x03, 0x04, 0x03, 0x12 ++ }; ++ ++ // Params for pure ML-DSA-87 signature ++ // python DottedOIDToCode.py id-ml-dsa-87 2.16.840.1.101.3.4.3.19 ++ static const uint8_t id_ml_dsa_87[] = { ++ 0x60, 0x86, 0x48, 0x01, 0x65, 0x03, 0x04, 0x03, 0x13 ++ }; ++ + if (algorithmOID.MatchRest(id_ecPublicKey)) { + // An id-ecPublicKey AlgorithmIdentifier has a parameter that identifes + // the curve being used. Although RFC 5480 specifies multiple forms, we +@@ -361,6 +382,30 @@ CheckSubjectPublicKeyInfoContents(Reader& input, TrustDomain& trustDomain, + if (rv != Success) { + return rv; + } ++ } else if (algorithmOID.MatchRest(id_ml_dsa_44) || ++ algorithmOID.MatchRest(id_ml_dsa_65) || ++ algorithmOID.MatchRest(id_ml_dsa_87)) { ++ ++ /* ++ * The ML-DSA AlgorithmIdentifier is expected to contain only the OID, ++ * with no parameters field present. According to the Internet-Draft ++ * https://www.ietf.org/archive/id/draft-ietf-lamps-dilithium-certificates-11.html ++ * (Section 3), the AlgorithmIdentifier for ML-DSA variants must omit the `parameters` ++ * field entirely. ++ * In DER encoding, the absence of the parameters field means that after parsing the ++ * OID, no additional bytes should remain. Calling `der::End(algorithm)` confirms that ++ * this constraint is satisfied and that the structure is correctly encoded. ++ */ ++ rv = der::End(algorithm); ++ if (rv != Success) { ++ return rv; ++ } ++ ++ Input rawPublicKey; ++ rv = subjectPublicKeyReader.SkipToEnd(rawPublicKey); ++ if (rv != Success) { ++ return rv; ++ } + } else { + return Result::ERROR_UNSUPPORTED_KEYALG; + } +diff --git a/security/nss/lib/mozpkix/lib/pkixder.cpp b/security/nss/lib/mozpkix/lib/pkixder.cpp +index 59454c7d3c..4ff45ed566 100644 +--- a/security/nss/lib/mozpkix/lib/pkixder.cpp ++++ b/security/nss/lib/mozpkix/lib/pkixder.cpp +@@ -211,6 +211,24 @@ SignatureAlgorithmIdentifierValue(Reader& input, + 0x00, 0xa2, 0x03, 0x02, 0x01, 0x40 + }; + ++ // Params for pure ML-DSA-44 signature ++ // python DottedOIDToCode.py id-ml-dsa-44 2.16.840.1.101.3.4.3.17 ++ static const uint8_t id_ml_dsa_44[] = { ++ 0x60, 0x86, 0x48, 0x01, 0x65, 0x03, 0x04, 0x03, 0x11 ++ }; ++ ++ // Params for pure ML-DSA-65 signature ++ // python DottedOIDToCode.py id-ml-dsa-65 2.16.840.1.101.3.4.3.18 ++ static const uint8_t id_ml_dsa_65[] = { ++ 0x60, 0x86, 0x48, 0x01, 0x65, 0x03, 0x04, 0x03, 0x12 ++ }; ++ ++ // Params for pure ML-DSA-87 signature ++ // python DottedOIDToCode.py id-ml-dsa-87 2.16.840.1.101.3.4.3.19 ++ static const uint8_t id_ml_dsa_87[] = { ++ 0x60, 0x86, 0x48, 0x01, 0x65, 0x03, 0x04, 0x03, 0x13 ++ }; ++ + // Matching is attempted based on a rough estimate of the commonality of the + // algorithm, to minimize the number of MatchRest calls. + if (algorithmID.MatchRest(sha256WithRSAEncryption)) { +@@ -252,6 +270,10 @@ SignatureAlgorithmIdentifierValue(Reader& input, + } else { + return Result::ERROR_CERT_SIGNATURE_ALGORITHM_DISABLED; + } ++ } else if (algorithmID.MatchRest(id_ml_dsa_44) || ++ algorithmID.MatchRest(id_ml_dsa_65) || ++ algorithmID.MatchRest(id_ml_dsa_87)) { ++ publicKeyAlgorithm = PublicKeyAlgorithm::MLDSA; + } else { + return Result::ERROR_CERT_SIGNATURE_ALGORITHM_DISABLED; + } +diff --git a/security/nss/lib/mozpkix/lib/pkixnss.cpp b/security/nss/lib/mozpkix/lib/pkixnss.cpp +index 606ef708d8..31aa1ddd67 100644 +--- a/security/nss/lib/mozpkix/lib/pkixnss.cpp ++++ b/security/nss/lib/mozpkix/lib/pkixnss.cpp +@@ -303,6 +303,44 @@ DigestBufNSS(Input item, + return Success; + } + ++Result ++VerifyMLDSASignedDataNSS(Input data, ++ Input signature, ++ Input subjectPublicKeyInfo, ++ void* pkcs11PinArg) ++{ ++ ScopedSECKEYPublicKey publicKey; ++ SECKEYPublicKey *pubk = NULL; ++ SECOidTag signaturePolicyTag, hashPolicyTag; ++ Result rv = SubjectPublicKeyInfoToSECKEYPublicKey(subjectPublicKeyInfo, ++ publicKey); ++ if (rv != Success) { ++ return rv; ++ } ++ ++ pubk = publicKey.get(); ++ SECItem signatureItem(UnsafeMapInputToSECItem(signature)); ++ SECItem dataItem(UnsafeMapInputToSECItem(data)); ++ CK_MECHANISM_TYPE mechanism; ++ ++ switch (pubk->u.mldsa.paramSet) { ++ case SEC_OID_ML_DSA_44: ++ case SEC_OID_ML_DSA_65: ++ case SEC_OID_ML_DSA_87: ++ mechanism = CKM_ML_DSA; ++ signaturePolicyTag = pubk->u.mldsa.paramSet; ++ hashPolicyTag = SEC_OID_UNKNOWN; ++ break; ++ default: ++ return Result::ERROR_UNSUPPORTED_KEYALG; ++ break; ++ } ++ ++ SECOidTag policyTags[2] = {signaturePolicyTag, hashPolicyTag}; ++ return VerifySignedData(pubk, mechanism, nullptr, &signatureItem, ++ &dataItem, policyTags, pkcs11PinArg); ++} ++ + Result + MapPRErrorCodeToResult(PRErrorCode error) + { +diff --git a/security/nss/lib/mozpkix/lib/pkixverify.cpp b/security/nss/lib/mozpkix/lib/pkixverify.cpp +index 8cb58bf7de..ff132d89df 100644 +--- a/security/nss/lib/mozpkix/lib/pkixverify.cpp ++++ b/security/nss/lib/mozpkix/lib/pkixverify.cpp +@@ -53,6 +53,9 @@ VerifySignedData(TrustDomain& trustDomain, + case der::PublicKeyAlgorithm::RSA_PSS: + return trustDomain.VerifyRSAPSSSignedData(signedData.data, + digestAlgorithm, signedData.signature, signerSubjectPublicKeyInfo); ++ case der::PublicKeyAlgorithm::MLDSA: ++ return trustDomain.VerifyMLDSASignedData(signedData.data, ++ signedData.signature, signerSubjectPublicKeyInfo); + MOZILLA_PKIX_UNREACHABLE_DEFAULT_ENUM + } + } diff --git a/thunderbird-integrate-ml-dsa-signature-verification-for-pkix-certificate-chain-validation.patch b/thunderbird-integrate-ml-dsa-signature-verification-for-pkix-certificate-chain-validation.patch new file mode 100644 index 0000000..beb641e --- /dev/null +++ b/thunderbird-integrate-ml-dsa-signature-verification-for-pkix-certificate-chain-validation.patch @@ -0,0 +1,244 @@ +diff --git a/netwerk/protocol/http/WebTransportCertificateVerifier.cpp b/netwerk/protocol/http/WebTransportCertificateVerifier.cpp +index cc77864..1e978ef 100644 +--- a/netwerk/protocol/http/WebTransportCertificateVerifier.cpp ++++ b/netwerk/protocol/http/WebTransportCertificateVerifier.cpp +@@ -53,6 +53,11 @@ class ServerCertHashesTrustDomain : public mozilla::pkix::TrustDomain { + mozilla::pkix::Input signature, + mozilla::pkix::Input subjectPublicKeyInfo) override; + ++ virtual mozilla::pkix::Result VerifyMLDSASignedData( ++ mozilla::pkix::Input data, ++ mozilla::pkix::Input signature, ++ mozilla::pkix::Input subjectPublicKeyInfo) override; ++ + virtual mozilla::pkix::Result DigestBuf( + mozilla::pkix::Input item, mozilla::pkix::DigestAlgorithm digestAlg, + /*out*/ uint8_t* digestBuf, size_t digestBufLen) override; +@@ -151,6 +156,15 @@ mozilla::pkix::Result ServerCertHashesTrustDomain::VerifyECDSASignedData( + return mozilla::pkix::Result::FATAL_ERROR_LIBRARY_FAILURE; + } + ++mozilla::pkix::Result ServerCertHashesTrustDomain::VerifyMLDSASignedData( ++ mozilla::pkix::Input data, ++ mozilla::pkix::Input signature, ++ mozilla::pkix::Input subjectPublicKeyInfo) { ++ MOZ_ASSERT_UNREACHABLE("not expecting this to be called"); ++ ++ return mozilla::pkix::Result::FATAL_ERROR_LIBRARY_FAILURE; ++} ++ + mozilla::pkix::Result ServerCertHashesTrustDomain::DigestBuf( + mozilla::pkix::Input item, mozilla::pkix::DigestAlgorithm digestAlg, + /*out*/ uint8_t* digestBuf, size_t digestBufLen) { +diff --git a/security/certverifier/CertVerifier.cpp b/security/certverifier/CertVerifier.cpp +index ca33077..cb96f58 100644 +--- a/security/certverifier/CertVerifier.cpp ++++ b/security/certverifier/CertVerifier.cpp +@@ -1048,10 +1048,14 @@ void HashSignatureParams(pkix::Input data, pkix::Input signature, + sizeof(publicKeyAlgorithm)))) { + return; + } +- if (NS_FAILED( ++ // Digest algorithm is expected to be null since ML-DSA is not an hash and ++ // sign algorithm. Skip digestAlgorithm for ML-DSA. ++ if (publicKeyAlgorithm != der::PublicKeyAlgorithm::MLDSA) { ++ if (NS_FAILED( + digest.Update(reinterpret_cast(&digestAlgorithm), + sizeof(digestAlgorithm)))) { +- return; ++ return; ++ } + } + nsTArray result; + if (NS_FAILED(digest.End(result))) { +@@ -1064,12 +1068,19 @@ Result VerifySignedDataWithCache( + der::PublicKeyAlgorithm publicKeyAlg, + mozilla::glean::impl::DenominatorMetric telemetryDenominator, + mozilla::glean::impl::NumeratorMetric telemetryNumerator, Input data, +- DigestAlgorithm digestAlgorithm, Input signature, ++ std::optional digestAlgorithm, Input signature, + Input subjectPublicKeyInfo, SignatureCache* signatureCache, void* pinArg) { + telemetryDenominator.Add(1); + Maybe> sha512Hash; ++ ++ // Currently, it is only acceptable for `digestAlgorithm` to be null when the ++ // public key algorithm is pure ML-DSA. Fail immediately otherwise. ++ if ((publicKeyAlg != der::PublicKeyAlgorithm::MLDSA) && !digestAlgorithm) { ++ return Result::ERROR_INVALID_ALGORITHM; ++ } ++ + HashSignatureParams(data, signature, subjectPublicKeyInfo, publicKeyAlg, +- digestAlgorithm, sha512Hash); ++ digestAlgorithm.value_or(pkix::DigestAlgorithm::sha512), sha512Hash); + // If hashing the signature parameters succeeded, see if this signature is in + // the signature cache. + if (sha512Hash.isSome() && +@@ -1080,16 +1091,23 @@ Result VerifySignedDataWithCache( + Result result; + switch (publicKeyAlg) { + case der::PublicKeyAlgorithm::ECDSA: +- result = VerifyECDSASignedDataNSS(data, digestAlgorithm, signature, +- subjectPublicKeyInfo, pinArg); ++ result = VerifyECDSASignedDataNSS(data, digestAlgorithm.value(), ++ signature, subjectPublicKeyInfo, ++ pinArg); + break; + case der::PublicKeyAlgorithm::RSA_PKCS1: +- result = VerifyRSAPKCS1SignedDataNSS(data, digestAlgorithm, signature, +- subjectPublicKeyInfo, pinArg); ++ result = VerifyRSAPKCS1SignedDataNSS(data, digestAlgorithm.value(), ++ signature, subjectPublicKeyInfo, ++ pinArg); + break; + case der::PublicKeyAlgorithm::RSA_PSS: +- result = VerifyRSAPSSSignedDataNSS(data, digestAlgorithm, signature, +- subjectPublicKeyInfo, pinArg); ++ result = VerifyRSAPSSSignedDataNSS(data, digestAlgorithm.value(), ++ signature, subjectPublicKeyInfo, ++ pinArg); ++ break; ++ case der::PublicKeyAlgorithm::MLDSA: ++ result = VerifyMLDSASignedDataNSS(data, signature, subjectPublicKeyInfo, ++ pinArg); + break; + default: + MOZ_ASSERT_UNREACHABLE("unhandled public key algorithm"); +diff --git a/security/certverifier/CertVerifier.h b/security/certverifier/CertVerifier.h +index 6432547..f9a0365 100644 +--- a/security/certverifier/CertVerifier.h ++++ b/security/certverifier/CertVerifier.h +@@ -331,7 +331,7 @@ mozilla::pkix::Result VerifySignedDataWithCache( + mozilla::pkix::der::PublicKeyAlgorithm publicKeyAlg, + mozilla::glean::impl::DenominatorMetric telemetryDenominator, + mozilla::glean::impl::NumeratorMetric telemetryNumerator, +- mozilla::pkix::Input data, mozilla::pkix::DigestAlgorithm digestAlgorithm, ++ mozilla::pkix::Input data, std::optional digestAlgorithm, + mozilla::pkix::Input signature, mozilla::pkix::Input subjectPublicKeyInfo, + SignatureCache* signatureCache, void* pinArg); + +diff --git a/security/certverifier/NSSCertDBTrustDomain.cpp b/security/certverifier/NSSCertDBTrustDomain.cpp +index 77c17c1..741892f 100644 +--- a/security/certverifier/NSSCertDBTrustDomain.cpp ++++ b/security/certverifier/NSSCertDBTrustDomain.cpp +@@ -1541,6 +1541,17 @@ Result NSSCertDBTrustDomain::VerifyECDSASignedData( + signature, subjectPublicKeyInfo, mSignatureCache, mPinArg); + } + ++Result NSSCertDBTrustDomain::VerifyMLDSASignedData(Input data, ++ Input signature, ++ Input subjectPublicKeyInfo) ++{ ++ return VerifySignedDataWithCache( ++ der::PublicKeyAlgorithm::MLDSA, ++ mozilla::glean::cert_signature_cache::total, ++ mozilla::glean::cert_signature_cache::hits, data, std::nullopt, ++ signature, subjectPublicKeyInfo, mSignatureCache, mPinArg); ++} ++ + Result NSSCertDBTrustDomain::CheckValidityIsAcceptable( + Time notBefore, Time notAfter, EndEntityOrCA endEntityOrCA, + KeyPurposeId keyPurpose) { +diff --git a/security/certverifier/NSSCertDBTrustDomain.h b/security/certverifier/NSSCertDBTrustDomain.h +index fc210f3..8d17a4f 100644 +--- a/security/certverifier/NSSCertDBTrustDomain.h ++++ b/security/certverifier/NSSCertDBTrustDomain.h +@@ -197,6 +197,11 @@ class NSSCertDBTrustDomain : public mozilla::pkix::TrustDomain { + mozilla::pkix::Input signature, + mozilla::pkix::Input subjectPublicKeyInfo) override; + ++ virtual Result VerifyMLDSASignedData( ++ mozilla::pkix::Input data, ++ mozilla::pkix::Input signature, ++ mozilla::pkix::Input subjectPublicKeyInfo) override; ++ + virtual Result DigestBuf(mozilla::pkix::Input item, + mozilla::pkix::DigestAlgorithm digestAlg, + /*out*/ uint8_t* digestBuf, +diff --git a/security/ct/CTLogVerifier.cpp b/security/ct/CTLogVerifier.cpp +index d5e665a..4712137 100644 +--- a/security/ct/CTLogVerifier.cpp ++++ b/security/ct/CTLogVerifier.cpp +@@ -99,6 +99,10 @@ class SignatureParamsTrustDomain final : public TrustDomain { + return pkix::Result::FATAL_ERROR_LIBRARY_FAILURE; + } + ++ pkix::Result VerifyMLDSASignedData(Input, Input, Input) override { ++ return pkix::Result::FATAL_ERROR_LIBRARY_FAILURE; ++ } ++ + pkix::Result CheckValidityIsAcceptable(Time, Time, EndEntityOrCA, + KeyPurposeId) override { + return pkix::Result::FATAL_ERROR_LIBRARY_FAILURE; +diff --git a/security/ct/tests/gtest/CTTestUtils.cpp b/security/ct/tests/gtest/CTTestUtils.cpp +index 6a25307..03d19f7 100644 +--- a/security/ct/tests/gtest/CTTestUtils.cpp ++++ b/security/ct/tests/gtest/CTTestUtils.cpp +@@ -807,6 +807,15 @@ class OCSPExtensionTrustDomain : public TrustDomain { + subjectPublicKeyInfo, nullptr); + } + ++ pkix::Result VerifyMLDSASignedData(Input data, ++ Input signature, ++ Input subjectPublicKeyInfo) override { ++ return VerifyMLDSASignedDataNSS(data, ++ signature, ++ subjectPublicKeyInfo, ++ nullptr); ++ } ++ + pkix::Result CheckValidityIsAcceptable(Time, Time, EndEntityOrCA, + KeyPurposeId) override { + ADD_FAILURE(); +diff --git a/security/manager/ssl/AppTrustDomain.cpp b/security/manager/ssl/AppTrustDomain.cpp +index ab49d7e..36e7e19 100644 +--- a/security/manager/ssl/AppTrustDomain.cpp ++++ b/security/manager/ssl/AppTrustDomain.cpp +@@ -322,6 +322,16 @@ pkix::Result AppTrustDomain::VerifyECDSASignedData( + subjectPublicKeyInfo, nullptr); + } + ++pkix::Result AppTrustDomain::VerifyMLDSASignedData(Input data, ++ Input signature, ++ Input subjectPublicKeyInfo) ++{ ++ return VerifyMLDSASignedDataNSS(data, ++ signature, ++ subjectPublicKeyInfo, ++ nullptr); ++} ++ + pkix::Result AppTrustDomain::CheckValidityIsAcceptable( + Time /*notBefore*/, Time /*notAfter*/, EndEntityOrCA /*endEntityOrCA*/, + KeyPurposeId /*keyPurpose*/) { +diff --git a/security/manager/ssl/AppTrustDomain.h b/security/manager/ssl/AppTrustDomain.h +index 4b0212e..083d5fb 100644 +--- a/security/manager/ssl/AppTrustDomain.h ++++ b/security/manager/ssl/AppTrustDomain.h +@@ -80,6 +80,10 @@ class AppTrustDomain final : public mozilla::pkix::TrustDomain { + mozilla::pkix::DigestAlgorithm digestAlg, + /*out*/ uint8_t* digestBuf, + size_t digestBufLen) override; ++ virtual Result VerifyMLDSASignedData( ++ mozilla::pkix::Input data, ++ mozilla::pkix::Input signature, ++ mozilla::pkix::Input subjectPublicKeyInfo) override; + + private: + nsTArray> mTrustedRoots; +diff --git a/security/manager/ssl/TLSClientAuthCertSelection.cpp b/security/manager/ssl/TLSClientAuthCertSelection.cpp +index 3a84b15..8450076 100644 +--- a/security/manager/ssl/TLSClientAuthCertSelection.cpp ++++ b/security/manager/ssl/TLSClientAuthCertSelection.cpp +@@ -217,6 +217,12 @@ class ClientAuthCertNonverifyingTrustDomain final : public TrustDomain { + pkix::Input subjectPublicKeyInfo) override { + return pkix::Success; + } ++ virtual mozilla::pkix::Result VerifyMLDSASignedData( ++ pkix::Input data, ++ pkix::Input signature, ++ pkix::Input subjectPublicKeyInfo) override { ++ return pkix::Success; ++ } + virtual mozilla::pkix::Result CheckValidityIsAcceptable( + pkix::Time notBefore, pkix::Time notAfter, + pkix::EndEntityOrCA endEntityOrCA, diff --git a/thunderbird-system-nss-replace-xyber-with-mlkem.patch b/thunderbird-system-nss-replace-xyber-with-mlkem.patch deleted file mode 100644 index 26db8ba..0000000 --- a/thunderbird-system-nss-replace-xyber-with-mlkem.patch +++ /dev/null @@ -1,105 +0,0 @@ -diff --git a/comm/third_party/rust/neqo-crypto/.cargo-checksum.json b/comm/third_party/rust/neqo-crypto/.cargo-checksum.json -index 188160d135..bea265565f 100644 ---- a/comm/third_party/rust/neqo-crypto/.cargo-checksum.json -+++ b/comm/third_party/rust/neqo-crypto/.cargo-checksum.json -@@ -1 +1 @@ --{"files":{"Cargo.toml":"fa915d4cac0a051c77107dd6f74514915fe2924fe3eecaad10e995062767fbbb","bindings/bindings.toml":"56921b753535f899b8095df3e8af04b1dc2213c4808dfb39734a3c554454d01d","bindings/nspr_err.h":"2d5205d017b536c2d838bcf9bc4ec79f96dd50e7bb9b73892328781f1ee6629d","bindings/nspr_error.h":"e41c03c77b8c22046f8618832c9569fbcc7b26d8b9bbc35eea7168f35e346889","bindings/nspr_io.h":"085b289849ef0e77f88512a27b4d9bdc28252bd4d39c6a17303204e46ef45f72","bindings/nspr_time.h":"2e637fd338a5cf0fd3fb0070a47f474a34c2a7f4447f31b6875f5a9928d0a261","bindings/nss_ciphers.h":"95ec6344a607558b3c5ba8510f463b6295f3a2fb3f538a01410531045a5f62d1","bindings/nss_init.h":"ef49045063782fb612aff459172cc6a89340f15005808608ade5320ca9974310","bindings/nss_p11.h":"0b81e64fe6db49b2ecff94edd850be111ef99ec11220e88ceb1c67be90143a78","bindings/nss_secerr.h":"713e8368bdae5159af7893cfa517dabfe5103cede051dee9c9557c850a2defc6","bindings/nss_ssl.h":"af222fb957b989e392e762fa2125c82608a0053aff4fb97e556691646c88c335","bindings/nss_sslerr.h":"24b97f092183d8486f774cdaef5030d0249221c78343570d83a4ee5b594210ae","bindings/nss_sslopt.h":"b7807eb7abdad14db6ad7bc51048a46b065a0ea65a4508c95a12ce90e59d1eea","build.rs":"6c3e94359395cce5cb29bc0063ff930ffcd7edd50c040cb459acce6c80aa4ef4","min_version.txt":"7e98f86c69cddb4f65cf96a6de1f4297e3ce224a4c4628609e29042b6c4dcfb9","src/aead.rs":"fc42bc20b84d2e5ccfd56271ae2d2db082e55586ea2926470c102da177f22296","src/aead_null.rs":"3a553f21126c9ca0116c2be81e5a777011b33c159fd88c4f384614bbdb06bb2e","src/agent.rs":"0ef7b488480d12c01a122050e82809bc784443ef6277d75fce21d706fbf5eaaf","src/agentio.rs":"415f70b95312d3ee6d74ba6f28094246101ab6d535aa9df880c38d8bb5a9279e","src/auth.rs":"ced1a18f691894984244088020ea25dc1ee678603317f0c7dfc8b8842fa750b4","src/cert.rs":"8942cb3ce25a61f92b6ffc30fb286052ed6f56eeda3be12fd46ea76ceba6c1cf","src/constants.rs":"f5c779db128a8b0607841ca18c376971017eb327e102e5e6959a7d8effe4b3a6","src/ech.rs":"9d322fcc01c0886f1dfe9bb6273cb9f88a746452ac9a802761b1816a05930c1f","src/err.rs":"ae979f334604aba89640c4491262641910033f0bd790d58671f649f5039b291c","src/exp.rs":"cec59d61fc95914f9703d2fb6490a8507af993c9db710dde894f2f8fd38123c7","src/ext.rs":"cbf7d9f5ecabf4b8c9efd6c334637ab1596ec5266d38ab8d2d6ceae305283deb","src/hkdf.rs":"ef32f20e30a9bd7f094199536d19c87c4231b7fbbe4a9c54c70e84ca9c6575be","src/hp.rs":"644f1bed67f1c6189a67c8d02ab3358aaa7f63af4b913dd7395becbc01a84291","src/lib.rs":"1f2c171e76f353c99cebe66f9812d3021ab2914eb015fed6a07409b7cfa426e6","src/min_version.rs":"89b7ef6f9d2301db4f689f4d963b58375d577f705b92003a804048441e00cfd1","src/p11.rs":"704c5f164c4f195c8051c5bf1e69a912c34b613a8cf6bed5f577dc5674eea34e","src/prio.rs":"e5e169296c0ac69919c59fb6c1f8bd6bf079452eaa13d75da0edd41d435d3f6f","src/replay.rs":"96b7af8eff9e14313e79303092018b12e8834f780c96b8e247c497fdc680c696","src/result.rs":"0587cbb6aace71a7f9765ef7c01dcd9f73a49dcc6331e1d8fe4de2aef6ca65b6","src/secrets.rs":"4ffaa66f25df47dadf042063bff5953effa7bf2f4920cafe827757d6a659cb58","src/selfencrypt.rs":"b7cc1c896c7661c37461fc3a8bcbfdf2589433b907fa5f968ae4f6907704b441","src/ssl.rs":"c83baa5518b81dd06f2e4072ea3c2d666ccdeb8b1ff6e3746eea9f1af47023a6","src/time.rs":"c71a01ff8aa2c0e97fb16ad620df4ed6b7cc1819ff93f46634e2f1c9551627ec","tests/aead.rs":"e36ae77802df1ea6d17cfd1bd2178a3706089577d6fd1554ca86e748b8b235b9","tests/agent.rs":"824735f88e487a3748200844e9481e81a72163ad74d82faa9aa16594d9b9bb25","tests/ext.rs":"1b047d23d9b224ad06eb65d8f3a7b351e263774e404c79bbcbe8f43790e29c18","tests/handshake.rs":"e892a2839b31414be16e96cdf3b1a65978716094700c1a4989229f7edbf578a0","tests/hkdf.rs":"1d2098dc8398395864baf13e4886cfd1da6d36118727c3b264f457ee3da6b048","tests/hp.rs":"b24fec53771c169be788772532d2617a5349196cf87d6444dc74214f7c73e92c","tests/init.rs":"616313cb38eac44b8c71a1d23a52a7d7b4c7c07d4c20dc9ea6600c3317f92613","tests/selfencrypt.rs":"8d10840b41629bf449a6b3a551377315e8a05ca26c6b041548748196652c5909"},"package":null} -\ No newline at end of file -+{"files":{"Cargo.toml":"fa915d4cac0a051c77107dd6f74514915fe2924fe3eecaad10e995062767fbbb","bindings/bindings.toml":"56921b753535f899b8095df3e8af04b1dc2213c4808dfb39734a3c554454d01d","bindings/nspr_err.h":"2d5205d017b536c2d838bcf9bc4ec79f96dd50e7bb9b73892328781f1ee6629d","bindings/nspr_error.h":"e41c03c77b8c22046f8618832c9569fbcc7b26d8b9bbc35eea7168f35e346889","bindings/nspr_io.h":"085b289849ef0e77f88512a27b4d9bdc28252bd4d39c6a17303204e46ef45f72","bindings/nspr_time.h":"2e637fd338a5cf0fd3fb0070a47f474a34c2a7f4447f31b6875f5a9928d0a261","bindings/nss_ciphers.h":"95ec6344a607558b3c5ba8510f463b6295f3a2fb3f538a01410531045a5f62d1","bindings/nss_init.h":"ef49045063782fb612aff459172cc6a89340f15005808608ade5320ca9974310","bindings/nss_p11.h":"0b81e64fe6db49b2ecff94edd850be111ef99ec11220e88ceb1c67be90143a78","bindings/nss_secerr.h":"713e8368bdae5159af7893cfa517dabfe5103cede051dee9c9557c850a2defc6","bindings/nss_ssl.h":"af222fb957b989e392e762fa2125c82608a0053aff4fb97e556691646c88c335","bindings/nss_sslerr.h":"24b97f092183d8486f774cdaef5030d0249221c78343570d83a4ee5b594210ae","bindings/nss_sslopt.h":"b7807eb7abdad14db6ad7bc51048a46b065a0ea65a4508c95a12ce90e59d1eea","build.rs":"6c3e94359395cce5cb29bc0063ff930ffcd7edd50c040cb459acce6c80aa4ef4","min_version.txt":"7e98f86c69cddb4f65cf96a6de1f4297e3ce224a4c4628609e29042b6c4dcfb9","src/aead.rs":"fc42bc20b84d2e5ccfd56271ae2d2db082e55586ea2926470c102da177f22296","src/aead_null.rs":"3a553f21126c9ca0116c2be81e5a777011b33c159fd88c4f384614bbdb06bb2e","src/agent.rs":"0ef7b488480d12c01a122050e82809bc784443ef6277d75fce21d706fbf5eaaf","src/agentio.rs":"415f70b95312d3ee6d74ba6f28094246101ab6d535aa9df880c38d8bb5a9279e","src/auth.rs":"ced1a18f691894984244088020ea25dc1ee678603317f0c7dfc8b8842fa750b4","src/cert.rs":"8942cb3ce25a61f92b6ffc30fb286052ed6f56eeda3be12fd46ea76ceba6c1cf","src/constants.rs":"78df03f9209ff36279b75f88f6d3d15fed4a0fdd1f6edc8ea8100ed9ae34320f","src/ech.rs":"9d322fcc01c0886f1dfe9bb6273cb9f88a746452ac9a802761b1816a05930c1f","src/err.rs":"ae979f334604aba89640c4491262641910033f0bd790d58671f649f5039b291c","src/exp.rs":"cec59d61fc95914f9703d2fb6490a8507af993c9db710dde894f2f8fd38123c7","src/ext.rs":"cbf7d9f5ecabf4b8c9efd6c334637ab1596ec5266d38ab8d2d6ceae305283deb","src/hkdf.rs":"ef32f20e30a9bd7f094199536d19c87c4231b7fbbe4a9c54c70e84ca9c6575be","src/hp.rs":"644f1bed67f1c6189a67c8d02ab3358aaa7f63af4b913dd7395becbc01a84291","src/lib.rs":"f0d0b14c7330fa4040166953c4a428918ce78967fe500bfeaa5f2c10b64567b3","src/min_version.rs":"89b7ef6f9d2301db4f689f4d963b58375d577f705b92003a804048441e00cfd1","src/p11.rs":"704c5f164c4f195c8051c5bf1e69a912c34b613a8cf6bed5f577dc5674eea34e","src/prio.rs":"e5e169296c0ac69919c59fb6c1f8bd6bf079452eaa13d75da0edd41d435d3f6f","src/replay.rs":"96b7af8eff9e14313e79303092018b12e8834f780c96b8e247c497fdc680c696","src/result.rs":"0587cbb6aace71a7f9765ef7c01dcd9f73a49dcc6331e1d8fe4de2aef6ca65b6","src/secrets.rs":"4ffaa66f25df47dadf042063bff5953effa7bf2f4920cafe827757d6a659cb58","src/selfencrypt.rs":"b7cc1c896c7661c37461fc3a8bcbfdf2589433b907fa5f968ae4f6907704b441","src/ssl.rs":"c83baa5518b81dd06f2e4072ea3c2d666ccdeb8b1ff6e3746eea9f1af47023a6","src/time.rs":"c71a01ff8aa2c0e97fb16ad620df4ed6b7cc1819ff93f46634e2f1c9551627ec","tests/aead.rs":"e36ae77802df1ea6d17cfd1bd2178a3706089577d6fd1554ca86e748b8b235b9","tests/agent.rs":"824735f88e487a3748200844e9481e81a72163ad74d82faa9aa16594d9b9bb25","tests/ext.rs":"1b047d23d9b224ad06eb65d8f3a7b351e263774e404c79bbcbe8f43790e29c18","tests/handshake.rs":"e892a2839b31414be16e96cdf3b1a65978716094700c1a4989229f7edbf578a0","tests/hkdf.rs":"1d2098dc8398395864baf13e4886cfd1da6d36118727c3b264f457ee3da6b048","tests/hp.rs":"b24fec53771c169be788772532d2617a5349196cf87d6444dc74214f7c73e92c","tests/init.rs":"616313cb38eac44b8c71a1d23a52a7d7b4c7c07d4c20dc9ea6600c3317f92613","tests/selfencrypt.rs":"8d10840b41629bf449a6b3a551377315e8a05ca26c6b041548748196652c5909"},"package":null} -diff --git a/comm/third_party/rust/neqo-crypto/src/constants.rs b/comm/third_party/rust/neqo-crypto/src/constants.rs -index daef3d3c56..7e6823fd01 100644 ---- a/comm/third_party/rust/neqo-crypto/src/constants.rs -+++ b/comm/third_party/rust/neqo-crypto/src/constants.rs -@@ -62,7 +62,7 @@ remap_enum! { - TLS_GRP_EC_SECP384R1 = ssl_grp_ec_secp384r1, - TLS_GRP_EC_SECP521R1 = ssl_grp_ec_secp521r1, - TLS_GRP_EC_X25519 = ssl_grp_ec_curve25519, -- TLS_GRP_KEM_XYBER768D00 = ssl_grp_kem_xyber768d00, -+ TLS_GRP_KEM_MLKEM768X25519 = ssl_grp_kem_mlkem768x25519, - } - } - -diff --git a/comm/third_party/rust/neqo-crypto/src/lib.rs b/comm/third_party/rust/neqo-crypto/src/lib.rs -index 9b8a478294..cb94d1f32b 100644 ---- a/comm/third_party/rust/neqo-crypto/src/lib.rs -+++ b/comm/third_party/rust/neqo-crypto/src/lib.rs -@@ -122,13 +122,6 @@ pub fn init() -> Res<()> { - - secstatus_to_res(unsafe { nss::NSS_NoDB_Init(null()) })?; - secstatus_to_res(unsafe { nss::NSS_SetDomesticPolicy() })?; -- secstatus_to_res(unsafe { -- p11::NSS_SetAlgorithmPolicy( -- p11::SECOidTag::SEC_OID_XYBER768D00, -- p11::NSS_USE_ALG_IN_SSL_KX, -- 0, -- ) -- })?; - - Ok(NssLoaded::NoDb) - }); -diff --git a/comm/third_party/rust/neqo-transport/.cargo-checksum.json b/comm/third_party/rust/neqo-transport/.cargo-checksum.json -index 79d2126b4a..a67d56971b 100644 ---- a/comm/third_party/rust/neqo-transport/.cargo-checksum.json -+++ b/comm/third_party/rust/neqo-transport/.cargo-checksum.json -@@ -1 +1 @@ --{"files":{"Cargo.toml":"2c18e43bca0b6e963cd3c169ed4b1dbf21de7e420b71be1d9cf1bf1bfcaa8d01","benches/range_tracker.rs":"590dd1f81c92e89ce28af1efdda583d85240438bd9c4c68767286d22a299ad4b","benches/rx_stream_orderer.rs":"53a008357703251a18100521a12d8fa9443c5601ddc3cbd1b3c2899074da4c4f","benches/transfer.rs":"94eb0ec1a0a7d0a4863ddc1c6d006521e52c1f2e7f03c69428b18f7eb827d33f","build.rs":"78ec79c93bf13c3a40ceef8bba1ea2eada61c8f2dfc15ea7bf117958d367949c","src/ackrate.rs":"4bb882e1069a0707dc85338b75327e2910c93ee5f36575767a0d58c4c41c9d4f","src/addr_valid.rs":"03c0b2ff85254179c5d425b12acfdcc6b1ea5735aeb0f604b9b3603451b3ef0a","src/cc/classic_cc.rs":"bd4999f21b6b7d754c8694345f40d0e99c1c3caba3d23a90bd9eb12798ef4979","src/cc/cubic.rs":"24c6913cc6346e5361007221c26e8096ece51583431fc3ab9c99e4ce4b0a9f5d","src/cc/mod.rs":"8031ed3d37bf780dd1364114149b1a1327656e7f481768548ad77db7006daf60","src/cc/new_reno.rs":"25d0921005688e0f0666efd0a4931b4f8cd44363587d98e5b6404818c5d05dd4","src/cc/tests/cubic.rs":"25ee2c60549bb8b3c1e9a915f148928a26b3f1c51e5f7fe6b646a437f520954c","src/cc/tests/mod.rs":"44f8df551e742ae1037cd1cdb85b2c1334c2e5ab3c23ed63d856dbc6b8743afc","src/cc/tests/new_reno.rs":"3cd7373063a3afecb6dfae7894edf959641d87d3de55d4abfa7742cd115fa358","src/cid.rs":"9686a3070c593cfca846d7549863728e31211b304b9fa876220f79bff5e24173","src/connection/dump.rs":"bd4fb55785fe42f5c94f7bcc14ccf4ae377d28b691fb55dbf1139ae9412b0ea9","src/connection/idle.rs":"6f588bab950620df322033abea5f8a731f5b6d88cbe68694b69ab8acea0745ae","src/connection/mod.rs":"72ab734a8d368b2f2d430899a65f5a8c64a21d797a0c3e6d3e53666ef8e0e740","src/connection/params.rs":"38e0b47c8cc5fbe602e3174d7a70df410829bc240b42f21cebd10818e606ef7c","src/connection/saved.rs":"97eb19792be3c4d721057021a43ea50a52f89a3cfa583d3d3dcf5d9144b332f5","src/connection/state.rs":"b1d4bdda3479e7957d1949a969281ecd8a3d88f4fbaff6dcf7ebbb576759339c","src/connection/test_internal.rs":"f3ebfe97b25c9c716d41406066295e5aff4e96a3051ef4e2b5fb258282bbc14c","src/connection/tests/ackrate.rs":"4a2b835575850ae4a14209d3e51883ecb1e69afb44ef91b5e13a5e6cb7174fab","src/connection/tests/cc.rs":"d9a0f00a8f439c4ea8d4b6fa689fbde8bd283256afdd68ec4a27f6638b729704","src/connection/tests/close.rs":"5f245fd134bc0759ef0c83a6d53e0a8d5a8e58dcdf203c750ec9121940272461","src/connection/tests/datagram.rs":"7d89e5293d5b50c7a54c9b48949c2c4c8ef5dc08f3e7e5f51654586578d65602","src/connection/tests/ecn.rs":"3ff05893154fb6a895fe4453db7cc54684ba3bdf268a36b69c36c4070768d7b4","src/connection/tests/handshake.rs":"67a6f090ed89ef6c63129f7e662dc1cfff3f291711a866dff3d779caa40e51c7","src/connection/tests/idle.rs":"2d588bd6570172ca08974931273b6c4645af3edca9ccac78499d7d2d5ecec86c","src/connection/tests/keys.rs":"7c58b255e9732711e13f2a3e1daa13ac9481d8c919a32ca62e70c850845a6b38","src/connection/tests/migration.rs":"40d4feba9957de7eef7391009996016af1a3052fabc7659680b64796cf9fb8bf","src/connection/tests/mod.rs":"43b7745e9722333f7bc851c70ccdfdd1dc4da3991a4b821fac677664719e760f","src/connection/tests/null.rs":"38f76a4ea15e6b11634d4374cb0f2a68bd250e5d35831edfce0fa48deeaa420d","src/connection/tests/priority.rs":"dd3504f52d3fce7a96441624bc1c82c733e6bb556b9b79d24d0f4fb4efaf5a9e","src/connection/tests/recovery.rs":"7f28767f3cca2ff60e3dcfa803e12ef043486a222f54681a8faf2ea2fee564a1","src/connection/tests/resumption.rs":"1a0de0993cd325224fc79a3c094d22636d5b122ab1123d16265d4fafb23574bd","src/connection/tests/stream.rs":"3a6b23be63e1901ea479749d8132db86959279329121fe5d51b34c3fef4d4d05","src/connection/tests/vn.rs":"92f61cfe4ccbb88f4f7c14f0e791bdece5368012922714d3dbd6a75bedb1b5a1","src/connection/tests/zerortt.rs":"139f25b992ee6f7e3cc31448f81e511386bb3b0e6691180c7f616b70c4864883","src/crypto.rs":"a0ff9053a13350e34aec02241eb2ae3e86d9f5af21065d5b8d71b7b229e00ced","src/ecn.rs":"2e54e0a57842070a80da61315b601085876351ef0272eaf65b8a59e32ecc4db8","src/events.rs":"3cdd7d5496b2745626db4ceb863b5a91ae943090a43a5816a1f9bcf873fba2be","src/fc.rs":"c8d10909912b6770e644aaec02cff6f89f557d5f40a246aa86654cf88c91d26e","src/frame.rs":"4262717662f155e62bb29c9f0cac295bbae96076eb2d92c27052a35f979aa196","src/lib.rs":"a8ab9b2204d50a3b6f6c1250ed0d47daafaef00c040b93dfa3c60195eeb07624","src/pace.rs":"86a674ac4d086148ea297214910458c3705918bd627b996ba8bbb12f2c4bf99e","src/packet/mod.rs":"16385a097363d3af6452c6dcb7f14fbd86e410dd42fa59435c5beea1699f77e9","src/packet/retry.rs":"d5f999485f21b388a7383cd011fc6e96109c1a9fb5aef79b19017df6844271ff","src/path.rs":"6a49a8a1cad609873f2cacca6489ba1a7a18cf238f7b8f6df2d0b0923edde3fd","src/qlog.rs":"07ea3a3e31ebf3819d40ff0dc4e4a88861db59f761542e9bc2e9e773eb555242","src/quic_datagrams.rs":"3d33ecb9e6e80c77b812e8260fc807352300fb2305a29b797259ae34c52b67c5","src/recovery/mod.rs":"4b1e45db1793785cda67fe804d1e6bc99b5f1a3ed3ff0f82e8164bc0aab11f8e","src/recovery/sent.rs":"959b70ed80b1061acf36bdd007f2b1baefbc8647c3a315d6fbd317884757beca","src/recovery/token.rs":"c1e4190c6733afd2bf5e60060d8ba3ab9fb136e02252e2480b281871a54d6066","src/recv_stream.rs":"f21ae0bb786901bb7d726a94cb3352607b0057128beaa331808137f2f57a330b","src/rtt.rs":"4635dc0c401b78a1fd9d34da6f9bf7f6e7f5be3a57ed9716e0efc8f0f94f1e47","src/send_stream.rs":"5b12a5543dd55d0d506eb64f828883b9761722a1558f16ecb90ce5a43587a2ff","src/sender.rs":"043be47e97d050532f12a564e78605cff7ff23e07639ea06059ebd85e0748f2f","src/server.rs":"3ededa0afd5e6b6888fc5ac9ce48e35e12974c338c7985f2b840e9dc76af0062","src/stats.rs":"257ab1242ea2e6bfac0900e6c4bdad794bc67b666930323d24e022e46b9be82b","src/stream_id.rs":"fd07cbb81709a54bdb0659f676ef851cd145c004b817044ede5b21e54fdb60e4","src/streams.rs":"f2e393dc73cc85c8339cb94daf6a09d3bde4d33d820fd6623ddd6b3d727d5fd5","src/tparams.rs":"592f29c9e2d2a63ff68b024ce23274896ed8ae83192b76b91f5e2991246682cd","src/tracking.rs":"c8581318cd7be3ca94ef4482341cfc1fdb70f934966c63a69335cb0bf5bd292a","src/version.rs":"182484ed9ecc2e17cab73cc61914a86a2d206936cab313825ae76fd37eeade77","tests/common/mod.rs":"7f9437d5efc38f4b9cabfece575e9168580e78e8638f46e538de58607f46ebb8","tests/conn_vectors.rs":"997702f4d8b8fa3b987b33077a0eb325e968b25b61fb4703532f8d97e1d4c98c","tests/connection.rs":"1c14853d61dad5f228a3e1a0becebb0c6826405de59ff601f43d5cb2fdb3f8ea","tests/network.rs":"04921aa5af583e842e6d2176a898fbfea747e831bbe292b5ef8441eaf546b93a","tests/retry.rs":"ace4a0baa36f7218c9942abc2b45b58f8c2dbd2b6004b469751e41b50f6f99d0","tests/server.rs":"9724460d7ac2f9d6af94baf6b3cf950900ae489412edc55d62609bacfcf02b09"},"package":null} -\ No newline at end of file -+{"files":{"Cargo.toml":"2c18e43bca0b6e963cd3c169ed4b1dbf21de7e420b71be1d9cf1bf1bfcaa8d01","benches/range_tracker.rs":"590dd1f81c92e89ce28af1efdda583d85240438bd9c4c68767286d22a299ad4b","benches/rx_stream_orderer.rs":"53a008357703251a18100521a12d8fa9443c5601ddc3cbd1b3c2899074da4c4f","benches/transfer.rs":"94eb0ec1a0a7d0a4863ddc1c6d006521e52c1f2e7f03c69428b18f7eb827d33f","build.rs":"78ec79c93bf13c3a40ceef8bba1ea2eada61c8f2dfc15ea7bf117958d367949c","src/ackrate.rs":"4bb882e1069a0707dc85338b75327e2910c93ee5f36575767a0d58c4c41c9d4f","src/addr_valid.rs":"03c0b2ff85254179c5d425b12acfdcc6b1ea5735aeb0f604b9b3603451b3ef0a","src/cc/classic_cc.rs":"bd4999f21b6b7d754c8694345f40d0e99c1c3caba3d23a90bd9eb12798ef4979","src/cc/cubic.rs":"24c6913cc6346e5361007221c26e8096ece51583431fc3ab9c99e4ce4b0a9f5d","src/cc/mod.rs":"8031ed3d37bf780dd1364114149b1a1327656e7f481768548ad77db7006daf60","src/cc/new_reno.rs":"25d0921005688e0f0666efd0a4931b4f8cd44363587d98e5b6404818c5d05dd4","src/cc/tests/cubic.rs":"25ee2c60549bb8b3c1e9a915f148928a26b3f1c51e5f7fe6b646a437f520954c","src/cc/tests/mod.rs":"44f8df551e742ae1037cd1cdb85b2c1334c2e5ab3c23ed63d856dbc6b8743afc","src/cc/tests/new_reno.rs":"3cd7373063a3afecb6dfae7894edf959641d87d3de55d4abfa7742cd115fa358","src/cid.rs":"9686a3070c593cfca846d7549863728e31211b304b9fa876220f79bff5e24173","src/connection/dump.rs":"bd4fb55785fe42f5c94f7bcc14ccf4ae377d28b691fb55dbf1139ae9412b0ea9","src/connection/idle.rs":"6f588bab950620df322033abea5f8a731f5b6d88cbe68694b69ab8acea0745ae","src/connection/mod.rs":"72ab734a8d368b2f2d430899a65f5a8c64a21d797a0c3e6d3e53666ef8e0e740","src/connection/params.rs":"38e0b47c8cc5fbe602e3174d7a70df410829bc240b42f21cebd10818e606ef7c","src/connection/saved.rs":"97eb19792be3c4d721057021a43ea50a52f89a3cfa583d3d3dcf5d9144b332f5","src/connection/state.rs":"b1d4bdda3479e7957d1949a969281ecd8a3d88f4fbaff6dcf7ebbb576759339c","src/connection/test_internal.rs":"f3ebfe97b25c9c716d41406066295e5aff4e96a3051ef4e2b5fb258282bbc14c","src/connection/tests/ackrate.rs":"4a2b835575850ae4a14209d3e51883ecb1e69afb44ef91b5e13a5e6cb7174fab","src/connection/tests/cc.rs":"d9a0f00a8f439c4ea8d4b6fa689fbde8bd283256afdd68ec4a27f6638b729704","src/connection/tests/close.rs":"5f245fd134bc0759ef0c83a6d53e0a8d5a8e58dcdf203c750ec9121940272461","src/connection/tests/datagram.rs":"7d89e5293d5b50c7a54c9b48949c2c4c8ef5dc08f3e7e5f51654586578d65602","src/connection/tests/ecn.rs":"3ff05893154fb6a895fe4453db7cc54684ba3bdf268a36b69c36c4070768d7b4","src/connection/tests/handshake.rs":"67a6f090ed89ef6c63129f7e662dc1cfff3f291711a866dff3d779caa40e51c7","src/connection/tests/idle.rs":"2d588bd6570172ca08974931273b6c4645af3edca9ccac78499d7d2d5ecec86c","src/connection/tests/keys.rs":"7c58b255e9732711e13f2a3e1daa13ac9481d8c919a32ca62e70c850845a6b38","src/connection/tests/migration.rs":"40d4feba9957de7eef7391009996016af1a3052fabc7659680b64796cf9fb8bf","src/connection/tests/mod.rs":"43b7745e9722333f7bc851c70ccdfdd1dc4da3991a4b821fac677664719e760f","src/connection/tests/null.rs":"38f76a4ea15e6b11634d4374cb0f2a68bd250e5d35831edfce0fa48deeaa420d","src/connection/tests/priority.rs":"dd3504f52d3fce7a96441624bc1c82c733e6bb556b9b79d24d0f4fb4efaf5a9e","src/connection/tests/recovery.rs":"7f28767f3cca2ff60e3dcfa803e12ef043486a222f54681a8faf2ea2fee564a1","src/connection/tests/resumption.rs":"1a0de0993cd325224fc79a3c094d22636d5b122ab1123d16265d4fafb23574bd","src/connection/tests/stream.rs":"3a6b23be63e1901ea479749d8132db86959279329121fe5d51b34c3fef4d4d05","src/connection/tests/vn.rs":"92f61cfe4ccbb88f4f7c14f0e791bdece5368012922714d3dbd6a75bedb1b5a1","src/connection/tests/zerortt.rs":"139f25b992ee6f7e3cc31448f81e511386bb3b0e6691180c7f616b70c4864883","src/crypto.rs":"033db48824fa541db728b43f25d5852d4c4de735c35d89151336649dd8d2429a","src/ecn.rs":"2e54e0a57842070a80da61315b601085876351ef0272eaf65b8a59e32ecc4db8","src/events.rs":"3cdd7d5496b2745626db4ceb863b5a91ae943090a43a5816a1f9bcf873fba2be","src/fc.rs":"c8d10909912b6770e644aaec02cff6f89f557d5f40a246aa86654cf88c91d26e","src/frame.rs":"4262717662f155e62bb29c9f0cac295bbae96076eb2d92c27052a35f979aa196","src/lib.rs":"a8ab9b2204d50a3b6f6c1250ed0d47daafaef00c040b93dfa3c60195eeb07624","src/pace.rs":"86a674ac4d086148ea297214910458c3705918bd627b996ba8bbb12f2c4bf99e","src/packet/mod.rs":"16385a097363d3af6452c6dcb7f14fbd86e410dd42fa59435c5beea1699f77e9","src/packet/retry.rs":"d5f999485f21b388a7383cd011fc6e96109c1a9fb5aef79b19017df6844271ff","src/path.rs":"6a49a8a1cad609873f2cacca6489ba1a7a18cf238f7b8f6df2d0b0923edde3fd","src/qlog.rs":"07ea3a3e31ebf3819d40ff0dc4e4a88861db59f761542e9bc2e9e773eb555242","src/quic_datagrams.rs":"3d33ecb9e6e80c77b812e8260fc807352300fb2305a29b797259ae34c52b67c5","src/recovery/mod.rs":"4b1e45db1793785cda67fe804d1e6bc99b5f1a3ed3ff0f82e8164bc0aab11f8e","src/recovery/sent.rs":"959b70ed80b1061acf36bdd007f2b1baefbc8647c3a315d6fbd317884757beca","src/recovery/token.rs":"c1e4190c6733afd2bf5e60060d8ba3ab9fb136e02252e2480b281871a54d6066","src/recv_stream.rs":"f21ae0bb786901bb7d726a94cb3352607b0057128beaa331808137f2f57a330b","src/rtt.rs":"4635dc0c401b78a1fd9d34da6f9bf7f6e7f5be3a57ed9716e0efc8f0f94f1e47","src/send_stream.rs":"5b12a5543dd55d0d506eb64f828883b9761722a1558f16ecb90ce5a43587a2ff","src/sender.rs":"043be47e97d050532f12a564e78605cff7ff23e07639ea06059ebd85e0748f2f","src/server.rs":"3ededa0afd5e6b6888fc5ac9ce48e35e12974c338c7985f2b840e9dc76af0062","src/stats.rs":"257ab1242ea2e6bfac0900e6c4bdad794bc67b666930323d24e022e46b9be82b","src/stream_id.rs":"fd07cbb81709a54bdb0659f676ef851cd145c004b817044ede5b21e54fdb60e4","src/streams.rs":"f2e393dc73cc85c8339cb94daf6a09d3bde4d33d820fd6623ddd6b3d727d5fd5","src/tparams.rs":"592f29c9e2d2a63ff68b024ce23274896ed8ae83192b76b91f5e2991246682cd","src/tracking.rs":"c8581318cd7be3ca94ef4482341cfc1fdb70f934966c63a69335cb0bf5bd292a","src/version.rs":"182484ed9ecc2e17cab73cc61914a86a2d206936cab313825ae76fd37eeade77","tests/common/mod.rs":"7f9437d5efc38f4b9cabfece575e9168580e78e8638f46e538de58607f46ebb8","tests/conn_vectors.rs":"997702f4d8b8fa3b987b33077a0eb325e968b25b61fb4703532f8d97e1d4c98c","tests/connection.rs":"c6755968255fb68795d9f1ae4ece73d7b674d8616d3512757309efd2c42c39d1","tests/network.rs":"04921aa5af583e842e6d2176a898fbfea747e831bbe292b5ef8441eaf546b93a","tests/retry.rs":"ace4a0baa36f7218c9942abc2b45b58f8c2dbd2b6004b469751e41b50f6f99d0","tests/server.rs":"9724460d7ac2f9d6af94baf6b3cf950900ae489412edc55d62609bacfcf02b09"},"package":null} -diff --git a/comm/third_party/rust/neqo-transport/src/crypto.rs b/comm/third_party/rust/neqo-transport/src/crypto.rs -index aca76b8bb9..3bfe7057bc 100644 ---- a/comm/third_party/rust/neqo-transport/src/crypto.rs -+++ b/comm/third_party/rust/neqo-transport/src/crypto.rs -@@ -21,7 +21,7 @@ use neqo_crypto::{ - TLS_AES_128_GCM_SHA256, TLS_AES_256_GCM_SHA384, TLS_CHACHA20_POLY1305_SHA256, TLS_CT_HANDSHAKE, - TLS_EPOCH_APPLICATION_DATA, TLS_EPOCH_HANDSHAKE, TLS_EPOCH_INITIAL, TLS_EPOCH_ZERO_RTT, - TLS_GRP_EC_SECP256R1, TLS_GRP_EC_SECP384R1, TLS_GRP_EC_SECP521R1, TLS_GRP_EC_X25519, -- TLS_GRP_KEM_XYBER768D00, TLS_VERSION_1_3, -+ TLS_GRP_KEM_MLKEM768X25519, TLS_VERSION_1_3, - }; - - use crate::{ -@@ -78,9 +78,10 @@ impl Crypto { - ])?; - match &mut agent { - Agent::Server(c) => { -- // Clients do not send xyber shares by default, but servers should accept them. -+ // Clients do not send mlkem768x25519 shares by default, but servers should accept -+ // them. - c.set_groups(&[ -- TLS_GRP_KEM_XYBER768D00, -+ TLS_GRP_KEM_MLKEM768X25519, - TLS_GRP_EC_X25519, - TLS_GRP_EC_SECP256R1, - TLS_GRP_EC_SECP384R1, -diff --git a/comm/third_party/rust/neqo-transport/tests/connection.rs b/comm/third_party/rust/neqo-transport/tests/connection.rs -index 35167d0abd..7f9304e9c8 100644 ---- a/comm/third_party/rust/neqo-transport/tests/connection.rs -+++ b/comm/third_party/rust/neqo-transport/tests/connection.rs -@@ -279,12 +279,12 @@ fn overflow_crypto() { - } - - #[test] --fn test_handshake_xyber() { -+fn handshake_mlkem768x25519() { - let mut client = default_client(); - let mut server = default_server(); - - client -- .set_groups(&[neqo_crypto::TLS_GRP_KEM_XYBER768D00]) -+ .set_groups(&[neqo_crypto::TLS_GRP_KEM_MLKEM768X25519]) - .ok(); - client.send_additional_key_shares(0).ok(); - -@@ -293,10 +293,10 @@ fn test_handshake_xyber() { - assert_eq!(*server.state(), State::Confirmed); - assert_eq!( - client.tls_info().unwrap().key_exchange(), -- neqo_crypto::TLS_GRP_KEM_XYBER768D00 -+ neqo_crypto::TLS_GRP_KEM_MLKEM768X25519 - ); - assert_eq!( - server.tls_info().unwrap().key_exchange(), -- neqo_crypto::TLS_GRP_KEM_XYBER768D00 -+ neqo_crypto::TLS_GRP_KEM_MLKEM768X25519 - ); - } diff --git a/thunderbird.spec b/thunderbird.spec index e0640dc..8eed637 100644 --- a/thunderbird.spec +++ b/thunderbird.spec @@ -137,8 +137,8 @@ end} Summary: Mozilla Thunderbird mail/newsgroup client Name: thunderbird -Version: 140.3.0 -Release: 1%{?dist} +Version: 140.4.0 +Release: 2%{?dist} URL: http://www.mozilla.org/projects/thunderbird/ License: MPLv1.1 or GPLv2+ or LGPLv2+ @@ -165,7 +165,7 @@ ExcludeArch: %{ix86} #Source0: https://archive.mozilla.org/pub/thunderbird/releases/%%{version}%%{?pre_version}/source/thunderbird-%%{version}%%{?pre_version}.processed-source.tar.xz Source0: thunderbird-%{version}%{?pre_version}%{?buildnum}.processed-source.tar.xz %if %{with langpacks} -Source1: thunderbird-langpacks-%{version}%{?pre_version}-20250912.tar.xz +Source1: thunderbird-langpacks-%{version}%{?pre_version}-20251013.tar.xz %endif Source2: cbindgen-vendor.tar.xz Source3: process-official-tarball @@ -192,14 +192,9 @@ Patch05: build-rhel7-lower-node-min-version.patch Patch06: build-ppc64-abiv2.patch Patch07: build-rhel7-nasm-dwarf.patch Patch09: disable-openpgp-in-thunderbird.patch -Patch10: build-ffvpx.patch # Due to some failed rpminspect unicode test we had to remove some test files from the tarball # To remove the files checksum from .cargo-checksums we need to add this patch Patch11: rust-file-removal.patch -# Patch a few and third_party/rust/neqo-crypto/ like in Firefox. -Patch12: firefox-system-nss-replace-xyber-with-mlkem.patch -# Thunderbird has a copy of third_party/rust/neqo-crypto/ in comm/third_party/rust/neqo-crypto/ -Patch13: thunderbird-system-nss-replace-xyber-with-mlkem.patch Patch14: build-cargo-lock-version.patch Patch15: build-system-nss.patch Patch16: build-tb-system-nss.patch @@ -1082,12 +1077,7 @@ echo "--------------------------------------------" %if !%{?use_openssl_for_librnp} %patch -P9 -p1 -b .disable-openpgp-in-thunderbird %endif -#patch -P10 -p1 -b .build-ffvpx %patch -P11 -p1 -b .rust-file-removal -%if 0%{?rhel} == 10 -#patch -P12 -p1 -b .firefox-system-nss-replace-xyber-with-mlkem -#patch -P13 -p1 -b .thunderbird-system-nss-replace-xyber-with-mlkem -%endif %patch -P14 -p1 -b .cargo-lock-version %patch -P15 -p1 -b .build-system-nss %patch -P16 -p1 -b .tb-build-system-nss @@ -1174,7 +1164,10 @@ echo "ac_add_options --with-librnp-backend=openssl" >> .mozconfig echo "ac_add_options --disable-webrtc" >> .mozconfig echo "ac_add_options --disable-lto" >> .mozconfig %endif -echo "ac_add_options --disable-lto" >> .mozconfig + +%if 0%{?rhel} < 10 + echo "ac_add_options --disable-lto" >> .mozconfig +%endif # AV1 requires newer nasm that was rebased in 8.4 %if 0%{?rhel} == 7 || (0%{?rhel} == 8 && %{rhel_minor_version} < 4) @@ -1369,7 +1362,7 @@ MOZ_LINK_FLAGS="-Wl,--no-keep-memory -Wl,--reduce-memory-overheads" # __global_ldflags that normally sets this. MOZ_LINK_FLAGS="$MOZ_LINK_FLAGS -L%{_libdir}" %endif -%ifarch %{ix86} %{s390x} +%ifarch %{ix86} s390x export RUSTFLAGS="-Cdebuginfo=0" echo 'export RUSTFLAGS="-Cdebuginfo=0"' >> .mozconfig %endif @@ -1392,6 +1385,8 @@ echo "export CXX=g++" >> .mozconfig echo "export AR=\"gcc-ar\"" >> .mozconfig echo "export NM=\"gcc-nm\"" >> .mozconfig echo "export RANLIB=\"gcc-ranlib\"" >> .mozconfig +#Workaround for rust SIGABRT/SIGSEGV +echo "export MALLOC_MMAP_MAX_=0" >> .mozconfig MOZ_SMP_FLAGS=-j1 # On x86_64 architectures, Mozilla can build up to 4 jobs at once in parallel, @@ -1680,6 +1675,9 @@ gtk-update-icon-cache %{_datadir}/icons/hicolor &>/dev/null || : #=============================================================================== %changelog +* Mon Oct 13 2025 Jan Horak - 140.4.0-2 +- Update to 140.4.0 ESR + * Fri Sep 12 2025 Jan Horak - 140.3.0-1 - Update to 140.3.0 ESR