diff --git a/quic/core/crypto/quic_crypto_server_config.cc b/quic/core/crypto/quic_crypto_server_config.cc
index aa45e33..56de827 100644
--- a/quic/core/crypto/quic_crypto_server_config.cc
+++ b/quic/core/crypto/quic_crypto_server_config.cc
@@ -518,8 +518,7 @@
     signed_config->proof.signature = "";
     signed_config->proof.leaf_cert_scts = "";
     EvaluateClientHello(server_address, version, requested_config,
-                        primary_config, signed_config, result,
-                        std::move(done_cb));
+                        primary_config, result, std::move(done_cb));
   } else {
     done_cb->Run(result, /* details = */ nullptr);
   }
@@ -1250,68 +1249,14 @@
   }
 }
 
-class QuicCryptoServerConfig::EvaluateClientHelloCallback
-    : public ProofSource::Callback {
- public:
-  EvaluateClientHelloCallback(
-      const QuicCryptoServerConfig& config,
-      const QuicIpAddress& server_ip,
-      QuicTransportVersion version,
-      QuicReferenceCountedPointer<QuicCryptoServerConfig::Config>
-          requested_config,
-      QuicReferenceCountedPointer<QuicCryptoServerConfig::Config>
-          primary_config,
-      QuicReferenceCountedPointer<QuicSignedServerConfig> signed_config,
-      QuicReferenceCountedPointer<ValidateClientHelloResultCallback::Result>
-          client_hello_state,
-      std::unique_ptr<ValidateClientHelloResultCallback> done_cb)
-      : config_(config),
-        server_ip_(server_ip),
-        version_(version),
-        requested_config_(std::move(requested_config)),
-        primary_config_(std::move(primary_config)),
-        signed_config_(signed_config),
-        client_hello_state_(std::move(client_hello_state)),
-        done_cb_(std::move(done_cb)) {}
-
-  void Run(bool ok,
-           const QuicReferenceCountedPointer<ProofSource::Chain>& chain,
-           const QuicCryptoProof& proof,
-           std::unique_ptr<ProofSource::Details> details) override {
-    if (ok) {
-      signed_config_->chain = chain;
-      signed_config_->proof = proof;
-    }
-    config_.EvaluateClientHelloAfterGetProof(
-        server_ip_, version_, requested_config_, primary_config_,
-        signed_config_, std::move(details), !ok, client_hello_state_,
-        std::move(done_cb_));
-  }
-
- private:
-  const QuicCryptoServerConfig& config_;
-  const QuicIpAddress& server_ip_;
-  const QuicTransportVersion version_;
-  const QuicReferenceCountedPointer<QuicCryptoServerConfig::Config>
-      requested_config_;
-  const QuicReferenceCountedPointer<QuicCryptoServerConfig::Config>
-      primary_config_;
-  QuicReferenceCountedPointer<QuicSignedServerConfig> signed_config_;
-  QuicReferenceCountedPointer<ValidateClientHelloResultCallback::Result>
-      client_hello_state_;
-  std::unique_ptr<ValidateClientHelloResultCallback> done_cb_;
-};
-
 void QuicCryptoServerConfig::EvaluateClientHello(
     const QuicSocketAddress& server_address,
     QuicTransportVersion version,
     QuicReferenceCountedPointer<Config> requested_config,
     QuicReferenceCountedPointer<Config> primary_config,
-    QuicReferenceCountedPointer<QuicSignedServerConfig> signed_config,
     QuicReferenceCountedPointer<ValidateClientHelloResultCallback::Result>
         client_hello_state,
     std::unique_ptr<ValidateClientHelloResultCallback> done_cb) const {
-  DCHECK(!signed_config->chain);
 
   ValidateClientHelloHelper helper(client_hello_state, &done_cb);
 
@@ -1388,27 +1333,6 @@
   } else if (!ValidateExpectedLeafCertificate(client_hello, chain->certs)) {
     info->reject_reasons.push_back(INVALID_EXPECTED_LEAF_CERTIFICATE);
   }
-  EvaluateClientHelloAfterGetProof(
-      server_address.host(), version, requested_config, primary_config,
-      signed_config, /*proof_source_details=*/nullptr,
-      /*get_proof_failed=*/false, client_hello_state, std::move(done_cb));
-  helper.DetachCallback();
-}
-
-void QuicCryptoServerConfig::EvaluateClientHelloAfterGetProof(
-    const QuicIpAddress& server_ip,
-    QuicTransportVersion version,
-    QuicReferenceCountedPointer<Config> requested_config,
-    QuicReferenceCountedPointer<Config> primary_config,
-    QuicReferenceCountedPointer<QuicSignedServerConfig> signed_config,
-    std::unique_ptr<ProofSource::Details> proof_source_details,
-    bool get_proof_failed,
-    QuicReferenceCountedPointer<ValidateClientHelloResultCallback::Result>
-        client_hello_state,
-    std::unique_ptr<ValidateClientHelloResultCallback> done_cb) const {
-  ValidateClientHelloHelper helper(client_hello_state, &done_cb);
-  const CryptoHandshakeMessage& client_hello = client_hello_state->client_hello;
-  ClientHelloInfo* info = &(client_hello_state->info);
 
   if (info->client_nonce.size() != kNonceSize) {
     info->reject_reasons.push_back(CLIENT_NONCE_INVALID_FAILURE);
@@ -1428,7 +1352,8 @@
       info->server_nonce.empty()) {
     info->reject_reasons.push_back(SERVER_NONCE_REQUIRED_FAILURE);
   }
-  helper.ValidationComplete(QUIC_NO_ERROR, "", std::move(proof_source_details));
+  helper.ValidationComplete(QUIC_NO_ERROR, "",
+                            std::unique_ptr<ProofSource::Details>());
 }
 
 void QuicCryptoServerConfig::BuildServerConfigUpdateMessage(
diff --git a/quic/core/crypto/quic_crypto_server_config.h b/quic/core/crypto/quic_crypto_server_config.h
index fc05fb3..0d7037f 100644
--- a/quic/core/crypto/quic_crypto_server_config.h
+++ b/quic/core/crypto/quic_crypto_server_config.h
@@ -524,36 +524,14 @@
   void SelectNewPrimaryConfig(QuicWallTime now) const
       EXCLUSIVE_LOCKS_REQUIRED(configs_lock_);
 
-  // EvaluateClientHello checks |client_hello| for gross errors and determines
-  // whether it can be shown to be fresh (i.e. not a replay). The results are
-  // written to |info|.
+  // EvaluateClientHello checks |client_hello_state->client_hello| for gross
+  // errors and determines whether it is fresh (i.e. not a replay). The results
+  // are written to |client_hello_state->info|.
   void EvaluateClientHello(
       const QuicSocketAddress& server_address,
       QuicTransportVersion version,
       QuicReferenceCountedPointer<Config> requested_config,
       QuicReferenceCountedPointer<Config> primary_config,
-      QuicReferenceCountedPointer<QuicSignedServerConfig> crypto_proof,
-      QuicReferenceCountedPointer<ValidateClientHelloResultCallback::Result>
-          client_hello_state,
-      std::unique_ptr<ValidateClientHelloResultCallback> done_cb) const;
-
-  // Callback class for bridging between EvaluateClientHello and
-  // EvaluateClientHelloAfterGetProof.
-  class EvaluateClientHelloCallback;
-  friend class EvaluateClientHelloCallback;
-
-  // Continuation of EvaluateClientHello after the call to
-  // ProofSource::GetProof. |get_proof_failed| indicates whether GetProof
-  // failed.  If GetProof was not run, then |get_proof_failed| will be
-  // set to false.
-  void EvaluateClientHelloAfterGetProof(
-      const QuicIpAddress& server_ip,
-      QuicTransportVersion version,
-      QuicReferenceCountedPointer<Config> requested_config,
-      QuicReferenceCountedPointer<Config> primary_config,
-      QuicReferenceCountedPointer<QuicSignedServerConfig> crypto_proof,
-      std::unique_ptr<ProofSource::Details> proof_source_details,
-      bool get_proof_failed,
       QuicReferenceCountedPointer<ValidateClientHelloResultCallback::Result>
           client_hello_state,
       std::unique_ptr<ValidateClientHelloResultCallback> done_cb) const;
