mirror of
https://repo.dactyloidae.xyz/Dactyloidae/UXP.git
synced 2026-09-27 02:47:31 +09:00
Update NSS to 3.41
This commit is contained in:
parent
d5f6e64f43
commit
5f0986e66f
540 changed files with 49568 additions and 10631 deletions
|
|
@ -9,11 +9,11 @@
|
|||
#include "sslerr.h"
|
||||
#include "sslproto.h"
|
||||
|
||||
// This is internal, just to get TLS_1_3_DRAFT_VERSION.
|
||||
// This is internal, just to get DTLS_1_3_DRAFT_VERSION.
|
||||
#include "ssl3prot.h"
|
||||
|
||||
#include "gtest_utils.h"
|
||||
#include "scoped_ptrs.h"
|
||||
#include "nss_scoped_ptrs.h"
|
||||
#include "tls_connect.h"
|
||||
#include "tls_filter.h"
|
||||
#include "tls_parser.h"
|
||||
|
|
@ -76,7 +76,7 @@ class CorrectMessageSeqAfterHrrFilter : public TlsRecordFilter {
|
|||
PacketFilter::Action FilterRecord(const TlsRecordHeader& header,
|
||||
const DataBuffer& record, size_t* offset,
|
||||
DataBuffer* output) {
|
||||
if (filtered_packets() > 0 || header.content_type() != content_handshake) {
|
||||
if (filtered_packets() > 0 || header.content_type() != ssl_ct_handshake) {
|
||||
return KEEP;
|
||||
}
|
||||
|
||||
|
|
@ -718,6 +718,86 @@ TEST_F(TlsConnectStreamTls13, RetryStatelessDamageSecondClientHello) {
|
|||
client_->CheckErrorCode(SSL_ERROR_BAD_MAC_READ);
|
||||
}
|
||||
|
||||
// Stream because SSL_SendSessionTicket only supports that.
|
||||
TEST_F(TlsConnectStreamTls13, SecondClientHelloSendSameTicket) {
|
||||
// This simulates the scenario described at:
|
||||
// https://bugzilla.mozilla.org/show_bug.cgi?id=1481271#c7
|
||||
//
|
||||
// Here two connections are interleaved. Tickets are issued on one
|
||||
// connection. A HelloRetryRequest is triggered on the second connection,
|
||||
// meaning that there are two ClientHellos. We need to check that both
|
||||
// ClientHellos have the same ticket, even if a new ticket is issued on the
|
||||
// other connection in the meantime.
|
||||
//
|
||||
// Connection 1: <handshake>
|
||||
// Connection 1: S->C: NST=X
|
||||
// Connection 2: C->S: CH [PSK_ID=X]
|
||||
// Connection 1: S->C: NST=Y
|
||||
// Connection 2: S->C: HRR
|
||||
// Connection 2: C->S: CH [PSK_ID=Y]
|
||||
|
||||
// Connection 1, send a ticket after handshake is complete.
|
||||
ConfigureSessionCache(RESUME_TICKET, RESUME_TICKET);
|
||||
|
||||
Connect();
|
||||
|
||||
// Set this token so that RetryHelloWithToken() will check that this
|
||||
// is the token that it receives in the HelloRetryRequest callback.
|
||||
EXPECT_EQ(SECSuccess,
|
||||
SSL_SendSessionTicket(server_->ssl_fd(), kApplicationToken,
|
||||
sizeof(kApplicationToken)));
|
||||
SendReceive(50);
|
||||
|
||||
// Connection 2, trigger HRR.
|
||||
auto client2 =
|
||||
std::make_shared<TlsAgent>(client_->name(), TlsAgent::CLIENT, variant_);
|
||||
auto server2 =
|
||||
std::make_shared<TlsAgent>(server_->name(), TlsAgent::SERVER, variant_);
|
||||
|
||||
client2->SetPeer(server2);
|
||||
server2->SetPeer(client2);
|
||||
|
||||
client_.swap(client2);
|
||||
server_.swap(server2);
|
||||
|
||||
ConfigureSessionCache(RESUME_TICKET, RESUME_TICKET);
|
||||
|
||||
ConfigureVersion(SSL_LIBRARY_VERSION_TLS_1_3);
|
||||
|
||||
client_->StartConnect();
|
||||
server_->StartConnect();
|
||||
|
||||
size_t cb_called = 0;
|
||||
EXPECT_EQ(SECSuccess,
|
||||
SSL_HelloRetryRequestCallback(server_->ssl_fd(),
|
||||
RetryHelloWithToken, &cb_called));
|
||||
client_->Handshake(); // Send ClientHello.
|
||||
server_->Handshake(); // Process ClientHello, send HelloRetryRequest.
|
||||
|
||||
EXPECT_EQ(1U, cb_called) << "callback should be called once here";
|
||||
|
||||
// Connection 1, send another ticket.
|
||||
client_.swap(client2);
|
||||
server_.swap(server2);
|
||||
|
||||
// If the client uses this token, RetryHelloWithToken() will fail the test.
|
||||
const uint8_t kAnotherApplicationToken[] = {0x92, 0x44, 0x01};
|
||||
EXPECT_EQ(SECSuccess,
|
||||
SSL_SendSessionTicket(server_->ssl_fd(), kAnotherApplicationToken,
|
||||
sizeof(kAnotherApplicationToken)));
|
||||
SendReceive(60);
|
||||
|
||||
// Connection 2, continue the handshake.
|
||||
// The client should use kApplicationToken, not kAnotherApplicationToken.
|
||||
client_.swap(client2);
|
||||
server_.swap(server2);
|
||||
|
||||
client_->Handshake();
|
||||
server_->Handshake();
|
||||
|
||||
EXPECT_EQ(2U, cb_called) << "callback should be called twice here";
|
||||
}
|
||||
|
||||
// Read the cipher suite from the HRR and disable it on the identified agent.
|
||||
static void DisableSuiteFromHrr(
|
||||
std::shared_ptr<TlsAgent>& agent,
|
||||
|
|
@ -844,10 +924,10 @@ TEST_F(TlsConnectStreamTls13, RetryWithDifferentCipherSuite) {
|
|||
TLS_CHACHA20_POLY1305_SHA256);
|
||||
|
||||
client_->ExpectSendAlert(kTlsAlertIllegalParameter);
|
||||
server_->ExpectSendAlert(kTlsAlertBadRecordMac);
|
||||
server_->ExpectSendAlert(kTlsAlertUnexpectedMessage);
|
||||
ConnectExpectFail();
|
||||
EXPECT_EQ(SSL_ERROR_RX_MALFORMED_SERVER_HELLO, client_->error_code());
|
||||
EXPECT_EQ(SSL_ERROR_BAD_MAC_READ, server_->error_code());
|
||||
EXPECT_EQ(SSL_ERROR_RX_UNEXPECTED_RECORD_TYPE, server_->error_code());
|
||||
}
|
||||
|
||||
// This tests that the second attempt at sending a ClientHello (after receiving
|
||||
|
|
@ -1007,14 +1087,17 @@ class HelloRetryRequestAgentTest : public TlsAgentTestClient {
|
|||
// Now the supported version.
|
||||
i = hrr_data.Write(i, ssl_tls13_supported_versions_xtn, 2);
|
||||
i = hrr_data.Write(i, 2, 2);
|
||||
i = hrr_data.Write(i, 0x7f00 | TLS_1_3_DRAFT_VERSION, 2);
|
||||
i = hrr_data.Write(i, (variant_ == ssl_variant_datagram)
|
||||
? (0x7f00 | DTLS_1_3_DRAFT_VERSION)
|
||||
: SSL_LIBRARY_VERSION_TLS_1_3,
|
||||
2);
|
||||
if (len) {
|
||||
hrr_data.Write(i, body, len);
|
||||
}
|
||||
DataBuffer hrr;
|
||||
MakeHandshakeMessage(kTlsHandshakeServerHello, hrr_data.data(),
|
||||
hrr_data.len(), &hrr, seq_num);
|
||||
MakeRecord(kTlsHandshakeType, SSL_LIBRARY_VERSION_TLS_1_3, hrr.data(),
|
||||
MakeRecord(ssl_ct_handshake, SSL_LIBRARY_VERSION_TLS_1_3, hrr.data(),
|
||||
hrr.len(), hrr_record, seq_num);
|
||||
}
|
||||
|
||||
|
|
|
|||
Loading…
Add table
Add a link
Reference in a new issue