| Index: net/quic/crypto/quic_crypto_server_config.cc
|
| diff --git a/net/quic/crypto/quic_crypto_server_config.cc b/net/quic/crypto/quic_crypto_server_config.cc
|
| index fc17b739309fd974adb8f7002d34a175de701f08..f2475bad3cb131170a9bd3b3c9b46f12e32aa7f7 100644
|
| --- a/net/quic/crypto/quic_crypto_server_config.cc
|
| +++ b/net/quic/crypto/quic_crypto_server_config.cc
|
| @@ -1142,17 +1142,28 @@ void QuicCryptoServerConfig::EvaluateClientHello(
|
| base::AutoLock locked(strike_register_client_lock_);
|
|
|
| if (strike_register_client_.get() == nullptr) {
|
| - strike_register_client_.reset(new LocalStrikeRegisterClient(
|
| - strike_register_max_entries_,
|
| - static_cast<uint32_t>(info->now.ToUNIXSeconds()),
|
| - strike_register_window_secs_, primary_orbit,
|
| - strike_register_no_startup_period_
|
| - ? StrikeRegister::NO_STARTUP_PERIOD_NEEDED
|
| - : StrikeRegister::DENY_REQUESTS_AT_STARTUP));
|
| + if (!FLAGS_require_strike_register_or_server_nonce) {
|
| + strike_register_client_.reset(new LocalStrikeRegisterClient(
|
| + strike_register_max_entries_,
|
| + static_cast<uint32_t>(info->now.ToUNIXSeconds()),
|
| + strike_register_window_secs_, primary_orbit,
|
| + strike_register_no_startup_period_
|
| + ? StrikeRegister::NO_STARTUP_PERIOD_NEEDED
|
| + : StrikeRegister::DENY_REQUESTS_AT_STARTUP));
|
| + }
|
| }
|
| strike_register_client = strike_register_client_.get();
|
| }
|
|
|
| + if (!strike_register_client) {
|
| + // Either a valid server nonces or a strike register is required.
|
| + // Since neither are present, reject the handshake which will send a
|
| + // server nonce to the client.
|
| + info->reject_reasons.push_back(SERVER_NONCE_REQUIRED_FAILURE);
|
| + helper.ValidationComplete(QUIC_NO_ERROR, "");
|
| + return;
|
| + }
|
| +
|
| strike_register_client->VerifyNonceIsValidAndUnique(
|
| info->client_nonce, info->now,
|
| new VerifyNonceIsValidAndUniqueCallback(client_hello_state, done_cb));
|
|
|