Discard 0-RTT keys after installing 1-RTT keys. Client side only. Protected by FLAGS_quic_reloadable_flag_quic_postpond_discarding_zero_rtt_keys. PiperOrigin-RevId: 333074291 Change-Id: Ia8abcdde84579c0c8a01d262e476d56ea2e754da
diff --git a/quic/core/tls_client_handshaker.cc b/quic/core/tls_client_handshaker.cc index 9c316a7..ba3f9d4 100644 --- a/quic/core/tls_client_handshaker.cc +++ b/quic/core/tls_client_handshaker.cc
@@ -386,10 +386,16 @@ if (level == ENCRYPTION_FORWARD_SECURE || level == ENCRYPTION_ZERO_RTT) { encryption_established_ = true; } - if (level == ENCRYPTION_FORWARD_SECURE) { + const bool postpone_discarding_zero_rtt_keys = + GetQuicReloadableFlag(quic_postpone_discarding_zero_rtt_keys); + if (!postpone_discarding_zero_rtt_keys && + level == ENCRYPTION_FORWARD_SECURE) { handshaker_delegate()->DiscardOldEncryptionKey(ENCRYPTION_ZERO_RTT); } TlsHandshaker::SetWriteSecret(level, cipher, write_secret); + if (postpone_discarding_zero_rtt_keys && level == ENCRYPTION_FORWARD_SECURE) { + handshaker_delegate()->DiscardOldEncryptionKey(ENCRYPTION_ZERO_RTT); + } } void TlsClientHandshaker::OnHandshakeConfirmed() {