gfe-relnote: In QUIC, split HandshakerDelegateInterface::OnNewKeysAvailable to OnNewDecryptionKeyAvailable and OnNewEncryptionKeyAvailable. Refactoring only, no behavior change, not protected.

PiperOrigin-RevId: 294260261
Change-Id: Iaa1e251970b555434833432098af11fbb0d28ebc
diff --git a/quic/core/handshaker_delegate_interface.h b/quic/core/handshaker_delegate_interface.h
index 23f2cbd..7e4b125 100644
--- a/quic/core/handshaker_delegate_interface.h
+++ b/quic/core/handshaker_delegate_interface.h
@@ -17,12 +17,17 @@
  public:
   virtual ~HandshakerDelegateInterface() {}
 
-  // Called when new keys are available.
-  virtual void OnNewKeysAvailable(EncryptionLevel level,
-                                  std::unique_ptr<QuicDecrypter> decrypter,
-                                  bool set_alternative_decrypter,
-                                  bool latch_once_used,
-                                  std::unique_ptr<QuicEncrypter> encrypter) = 0;
+  // Called when new decryption key of |level| is available.
+  virtual void OnNewDecryptionKeyAvailable(
+      EncryptionLevel level,
+      std::unique_ptr<QuicDecrypter> decrypter,
+      bool set_alternative_decrypter,
+      bool latch_once_used) = 0;
+
+  // Called when new encryption key of |level| is available.
+  virtual void OnNewEncryptionKeyAvailable(
+      EncryptionLevel level,
+      std::unique_ptr<QuicEncrypter> encrypter) = 0;
 
   // Called to set default encryption level to |level|.
   virtual void SetDefaultEncryptionLevel(EncryptionLevel level) = 0;
diff --git a/quic/core/quic_crypto_client_handshaker.cc b/quic/core/quic_crypto_client_handshaker.cc
index b815dfe..c306323 100644
--- a/quic/core/quic_crypto_client_handshaker.cc
+++ b/quic/core/quic_crypto_client_handshaker.cc
@@ -327,12 +327,14 @@
       crypto_config_->pad_full_hello());
   SendHandshakeMessage(out);
   // Be prepared to decrypt with the new server write key.
-  delegate_->OnNewKeysAvailable(
+  delegate_->OnNewEncryptionKeyAvailable(
+      ENCRYPTION_ZERO_RTT,
+      std::move(crypto_negotiated_params_->initial_crypters.encrypter));
+  delegate_->OnNewDecryptionKeyAvailable(
       ENCRYPTION_ZERO_RTT,
       std::move(crypto_negotiated_params_->initial_crypters.decrypter),
       /*set_alternative_decrypter=*/true,
-      /*latch_once_used=*/true,
-      std::move(crypto_negotiated_params_->initial_crypters.encrypter));
+      /*latch_once_used=*/true);
   encryption_established_ = true;
   delegate_->SetDefaultEncryptionLevel(ENCRYPTION_ZERO_RTT);
 }
@@ -537,10 +539,12 @@
   // has been floated that the server shouldn't send packets encrypted
   // with the FORWARD_SECURE key until it receives a FORWARD_SECURE
   // packet from the client.
-  delegate_->OnNewKeysAvailable(
-      ENCRYPTION_FORWARD_SECURE, std::move(crypters->decrypter),
-      /*set_alternative_decrypter=*/true,
-      /*latch_once_used=*/false, std::move(crypters->encrypter));
+  delegate_->OnNewEncryptionKeyAvailable(ENCRYPTION_FORWARD_SECURE,
+                                         std::move(crypters->encrypter));
+  delegate_->OnNewDecryptionKeyAvailable(ENCRYPTION_FORWARD_SECURE,
+                                         std::move(crypters->decrypter),
+                                         /*set_alternative_decrypter=*/true,
+                                         /*latch_once_used=*/false);
   one_rtt_keys_available_ = true;
   delegate_->SetDefaultEncryptionLevel(ENCRYPTION_FORWARD_SECURE);
   delegate_->DiscardOldEncryptionKey(ENCRYPTION_INITIAL);
diff --git a/quic/core/quic_crypto_server_handshaker.cc b/quic/core/quic_crypto_server_handshaker.cc
index 4b2a7fa..2f1f061 100644
--- a/quic/core/quic_crypto_server_handshaker.cc
+++ b/quic/core/quic_crypto_server_handshaker.cc
@@ -200,12 +200,14 @@
   // write key.
   //
   // NOTE: the SHLO will be encrypted with the new server write key.
-  delegate_->OnNewKeysAvailable(
+  delegate_->OnNewEncryptionKeyAvailable(
+      ENCRYPTION_ZERO_RTT,
+      std::move(crypto_negotiated_params_->initial_crypters.encrypter));
+  delegate_->OnNewDecryptionKeyAvailable(
       ENCRYPTION_ZERO_RTT,
       std::move(crypto_negotiated_params_->initial_crypters.decrypter),
       /*set_alternative_decrypter=*/false,
-      /*latch_once_used=*/false,
-      std::move(crypto_negotiated_params_->initial_crypters.encrypter));
+      /*latch_once_used=*/false);
   delegate_->SetDefaultEncryptionLevel(ENCRYPTION_ZERO_RTT);
   delegate_->DiscardOldDecryptionKey(ENCRYPTION_INITIAL);
   session()->connection()->SetDiversificationNonce(*diversification_nonce);
@@ -213,12 +215,14 @@
   session()->connection()->set_fully_pad_crypto_handshake_packets(
       crypto_config_->pad_shlo());
   SendHandshakeMessage(*reply);
-  delegate_->OnNewKeysAvailable(
+  delegate_->OnNewEncryptionKeyAvailable(
+      ENCRYPTION_FORWARD_SECURE,
+      std::move(crypto_negotiated_params_->forward_secure_crypters.encrypter));
+  delegate_->OnNewDecryptionKeyAvailable(
       ENCRYPTION_FORWARD_SECURE,
       std::move(crypto_negotiated_params_->forward_secure_crypters.decrypter),
       /*set_alternative_decrypter=*/true,
-      /*latch_once_used=*/false,
-      std::move(crypto_negotiated_params_->forward_secure_crypters.encrypter));
+      /*latch_once_used=*/false);
   encryption_established_ = true;
   one_rtt_keys_available_ = true;
   delegate_->SetDefaultEncryptionLevel(ENCRYPTION_FORWARD_SECURE);
diff --git a/quic/core/quic_session.cc b/quic/core/quic_session.cc
index b63f729..f956e5e 100644
--- a/quic/core/quic_session.cc
+++ b/quic/core/quic_session.cc
@@ -1295,13 +1295,14 @@
   flow_controller_.UpdateSendWindowOffset(new_window);
 }
 
-void QuicSession::OnNewKeysAvailable(EncryptionLevel level,
-                                     std::unique_ptr<QuicDecrypter> decrypter,
-                                     bool set_alternative_decrypter,
-                                     bool latch_once_used,
-                                     std::unique_ptr<QuicEncrypter> encrypter) {
-  // Install new keys.
-  connection()->SetEncrypter(level, std::move(encrypter));
+void QuicSession::OnNewDecryptionKeyAvailable(
+    EncryptionLevel level,
+    std::unique_ptr<QuicDecrypter> decrypter,
+    bool set_alternative_decrypter,
+    bool latch_once_used) {
+  // TODO(fayang): Close connection if corresponding encryption key is not
+  // available.
+  DCHECK(connection()->framer().HasEncrypterOfEncryptionLevel(level));
   if (connection()->version().KnowsWhichDecrypterToUse()) {
     connection()->InstallDecrypter(level, std::move(decrypter));
     return;
@@ -1314,6 +1315,12 @@
   connection()->SetDecrypter(level, std::move(decrypter));
 }
 
+void QuicSession::OnNewEncryptionKeyAvailable(
+    EncryptionLevel level,
+    std::unique_ptr<QuicEncrypter> encrypter) {
+  connection()->SetEncrypter(level, std::move(encrypter));
+}
+
 void QuicSession::SetDefaultEncryptionLevel(EncryptionLevel level) {
   QUIC_DVLOG(1) << ENDPOINT << "Set default encryption level to "
                 << EncryptionLevelToString(level);
diff --git a/quic/core/quic_session.h b/quic/core/quic_session.h
index c6fae2f..57d7605 100644
--- a/quic/core/quic_session.h
+++ b/quic/core/quic_session.h
@@ -243,11 +243,13 @@
   virtual void OnConfigNegotiated();
 
   // From HandshakerDelegateInterface
-  void OnNewKeysAvailable(EncryptionLevel level,
-                          std::unique_ptr<QuicDecrypter> decrypter,
-                          bool set_alternative_decrypter,
-                          bool latch_once_used,
-                          std::unique_ptr<QuicEncrypter> encrypter) override;
+  void OnNewDecryptionKeyAvailable(EncryptionLevel level,
+                                   std::unique_ptr<QuicDecrypter> decrypter,
+                                   bool set_alternative_decrypter,
+                                   bool latch_once_used) override;
+  void OnNewEncryptionKeyAvailable(
+      EncryptionLevel level,
+      std::unique_ptr<QuicEncrypter> encrypter) override;
   void SetDefaultEncryptionLevel(EncryptionLevel level) override;
   void DiscardOldDecryptionKey(EncryptionLevel level) override;
   void DiscardOldEncryptionKey(EncryptionLevel level) override;
diff --git a/quic/core/tls_handshaker.cc b/quic/core/tls_handshaker.cc
index c5effc3..aee7133 100644
--- a/quic/core/tls_handshaker.cc
+++ b/quic/core/tls_handshaker.cc
@@ -73,10 +73,10 @@
       QuicDecrypter::CreateFromCipherSuite(
           SSL_CIPHER_get_id(SSL_get_pending_cipher(ssl())));
   CryptoUtils::SetKeyAndIV(Prf(), read_secret, decrypter.get());
-  delegate_->OnNewKeysAvailable(level, std::move(decrypter),
-                                /*set_alternative_decrypter=*/false,
-                                /*latch_once_used=*/false,
-                                std::move(encrypter));
+  delegate_->OnNewEncryptionKeyAvailable(level, std::move(encrypter));
+  delegate_->OnNewDecryptionKeyAvailable(level, std::move(decrypter),
+                                         /*set_alternative_decrypter=*/false,
+                                         /*latch_once_used=*/false);
 }
 
 void TlsHandshaker::WriteMessage(EncryptionLevel level,