Chromium Code Reviews| 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 90d55d2e10ad382bd85d372c405a483d0f1024ea..3e46b60c07ead1b86ee8bdc0e75ce32e8912179e 100644 |
| --- a/net/quic/crypto/quic_crypto_server_config.h |
| +++ b/net/quic/crypto/quic_crypto_server_config.h |
| @@ -320,6 +320,17 @@ class NET_EXPORT_PRIVATE QuicCryptoServerConfig { |
| // Smaller numbers mean higher priority. |
| uint64 priority; |
| + // source_address_token_boxer_ is used to protect the |
| + // source-address tokens that are given to clients. |
| + // Points to either source_address_token_boxer_storage or the |
| + // default boxer provided by QuicCryptoServerConfig. |
| + const CryptoSecretBoxer* source_address_token_boxer; |
| + |
| + // Holds the override source_address_token_boxer instance if the |
| + // Config is not using the default source address token boxer |
| + // instance provided by QuicCryptoServerConfig. |
| + scoped_ptr<CryptoSecretBoxer> source_address_token_boxer_storage; |
| + |
| private: |
| friend class base::RefCounted<Config>; |
| virtual ~Config(); |
| @@ -329,6 +340,10 @@ class NET_EXPORT_PRIVATE QuicCryptoServerConfig { |
| typedef std::map<ServerConfigID, scoped_refptr<Config> > ConfigMap; |
| + // Get a ref to the config with a given server config id. |
| + scoped_refptr<Config> GetConfigWithScid( |
| + base::StringPiece requested_scid) const; |
| + |
| // ConfigPrimaryTimeLessThan returns true if a->primary_time < |
| // b->primary_time. |
| static bool ConfigPrimaryTimeLessThan(const scoped_refptr<Config>& a, |
| @@ -343,6 +358,7 @@ class NET_EXPORT_PRIVATE QuicCryptoServerConfig { |
| // written to |info|. |
| void EvaluateClientHello( |
| const uint8* primary_orbit, |
| + scoped_refptr<Config> requested_config, |
| ValidateClientHelloResultCallback::Result* client_hello_state, |
| ValidateClientHelloResultCallback* done_cb) const; |
| @@ -361,16 +377,20 @@ class NET_EXPORT_PRIVATE QuicCryptoServerConfig { |
| // NewSourceAddressToken returns a fresh source address token for the given |
| // IP address. |
| - std::string NewSourceAddressToken(const IPEndPoint& ip, |
| - QuicRandom* rand, |
| - QuicWallTime now) const; |
| + std::string NewSourceAddressToken( |
| + const QuicCryptoServerConfig::Config* config, |
|
wtc
2014/04/07 18:38:24
Why isn't this parameter a const reference? I foun
ramant (doing other things)
2014/04/21 22:39:29
Done.
|
| + const IPEndPoint& ip, |
| + 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(base::StringPiece token, |
| - const IPEndPoint& ip, |
| - QuicWallTime now) const; |
| + bool ValidateSourceAddressToken( |
| + const QuicCryptoServerConfig::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; |
| @@ -410,9 +430,10 @@ class NET_EXPORT_PRIVATE QuicCryptoServerConfig { |
| // observed client nonces in order to prevent replay attacks. |
| mutable scoped_ptr<StrikeRegisterClient> strike_register_client_; |
| - // source_address_token_boxer_ is used to protect the source-address tokens |
| - // that are given to clients. |
| - CryptoSecretBoxer source_address_token_boxer_; |
| + // Default source_address_token_boxer_ used to protect the |
| + // source-address tokens that are given to clients. Individual |
| + // configs may use boxers with alternate secrets. |
| + CryptoSecretBoxer default_source_address_token_boxer_; |
| // server_nonce_boxer_ is used to encrypt and validate suggested server |
| // nonces. |