| Index: net/quic/crypto/quic_crypto_server_config.h
|
| diff --git a/net/quic/crypto/quic_crypto_server_config.h b/net/quic/crypto/quic_crypto_server_config.h
|
| index 566e60d562832654eb9932ddabc8bd32c8b723c1..3ece064376fcc557ff57a46cbe6968c85e5c8017 100644
|
| --- a/net/quic/crypto/quic_crypto_server_config.h
|
| +++ b/net/quic/crypto/quic_crypto_server_config.h
|
| @@ -40,6 +40,32 @@ namespace test {
|
| class QuicCryptoServerConfigPeer;
|
| } // namespace test
|
|
|
| +enum HandshakeFailureReason {
|
| + HANDSHAKE_OK = 0,
|
| +
|
| + // Failure reasons for an invalid client nonce.
|
| + // TODO(rtenneti): Implement capturing of error from strike register.
|
| + CLIENT_NONCE_UNKNOWN_FAILURE = 100,
|
| + CLIENT_NONCE_INVALID_FAILURE,
|
| +
|
| + // Failure reasons for an invalid server nonce.
|
| + SERVER_NONCE_INVALID_FAILURE = 200,
|
| + SERVER_NONCE_DECRYPTION_FAILURE,
|
| + SERVER_NONCE_NOT_UNIQUE_FAILURE,
|
| +
|
| + // Failure reasons for an invalid server config.
|
| + SERVER_CONFIG_INCHOATE_HELLO_FAILURE = 300,
|
| + SERVER_CONFIG_UNKNOWN_CONFIG_FAILURE,
|
| +
|
| + // Failure reasons for an invalid source adddress token.
|
| + SOURCE_ADDRESS_TOKEN_INVALID_FAILURE = 400,
|
| + SOURCE_ADDRESS_TOKEN_DECRYPTION_FAILURE,
|
| + SOURCE_ADDRESS_TOKEN_PARSE_FAILURE,
|
| + SOURCE_ADDRESS_TOKEN_DIFFERENT_IP_ADDRESS_FAILURE,
|
| + SOURCE_ADDRESS_TOKEN_CLOCK_SKEW_FAILURE,
|
| + SOURCE_ADDRESS_TOKEN_EXPIRED_FAILURE,
|
| +};
|
| +
|
| // Hook that allows application code to subscribe to primary config changes.
|
| class PrimaryConfigChangedCallback {
|
| public:
|
| @@ -385,13 +411,13 @@ class NET_EXPORT_PRIVATE QuicCryptoServerConfig {
|
| QuicRandom* rand,
|
| QuicWallTime now) const;
|
|
|
| - // ValidateSourceAddressToken returns true if the source address token in
|
| - // |token| is a valid and timely token for the IP address |ip| given that the
|
| - // current time is |now|.
|
| - bool ValidateSourceAddressToken(const Config& config,
|
| - base::StringPiece token,
|
| - const IPEndPoint& ip,
|
| - QuicWallTime now) const;
|
| + // ValidateSourceAddressToken returns HANDSHAKE_OK if the source address token
|
| + // in |token| is a valid and timely token for the IP address |ip| given that
|
| + // the current time is |now|. Otherwise it returns the reason for failure.
|
| + HandshakeFailureReason ValidateSourceAddressToken(const Config& config,
|
| + base::StringPiece token,
|
| + const IPEndPoint& ip,
|
| + QuicWallTime now) const;
|
|
|
| // NewServerNonce generates and encrypts a random nonce.
|
| std::string NewServerNonce(QuicRandom* rand, QuicWallTime now) const;
|
| @@ -399,10 +425,11 @@ class NET_EXPORT_PRIVATE QuicCryptoServerConfig {
|
| // ValidateServerNonce decrypts |token| and verifies that it hasn't been
|
| // previously used and is recent enough that it is plausible that it was part
|
| // of a very recently provided rejection ("recent" will be on the order of
|
| - // 10-30 seconds). If so, it records that it has been used and returns true.
|
| - // Otherwise it returns false.
|
| - bool ValidateServerNonce(base::StringPiece echoed_server_nonce,
|
| - QuicWallTime now) const;
|
| + // 10-30 seconds). If so, it records that it has been used and returns
|
| + // HANDSHAKE_OK. Otherwise it returns the reason for failure.
|
| + HandshakeFailureReason ValidateServerNonce(
|
| + base::StringPiece echoed_server_nonce,
|
| + QuicWallTime now) const;
|
|
|
| // replay_protection_ controls whether the server enforces that handshakes
|
| // aren't replays.
|
|
|