Chromium Code Reviews
chromiumcodereview-hr@appspot.gserviceaccount.com (chromiumcodereview-hr) | Please choose your nickname with Settings | Help | Chromium Project | Gerrit Changes | Sign out
(505)

Side by Side Diff: net/quic/crypto/quic_crypto_server_config.h

Issue 623003002: QUIC: if client provides an STK which includes CachedNetworkParams, then (Closed) Base URL: https://chromium.googlesource.com/chromium/src.git@master
Patch Set: Created 6 years, 2 months ago
Use n/p to move between diff chunks; N/P to move between comments. Draft comments are only viewable by you.
Jump to:
View unified diff | Download patch
« no previous file with comments | « no previous file | net/quic/crypto/quic_crypto_server_config.cc » ('j') | no next file with comments »
Toggle Intra-line Diffs ('i') | Expand Comments ('e') | Collapse Comments ('c') | Show Comments Hide Comments ('s')
OLDNEW
1 // Copyright 2013 The Chromium Authors. All rights reserved. 1 // Copyright 2013 The Chromium Authors. All rights reserved.
2 // Use of this source code is governed by a BSD-style license that can be 2 // Use of this source code is governed by a BSD-style license that can be
3 // found in the LICENSE file. 3 // found in the LICENSE file.
4 4
5 #ifndef NET_QUIC_CRYPTO_QUIC_CRYPTO_SERVER_CONFIG_H_ 5 #ifndef NET_QUIC_CRYPTO_QUIC_CRYPTO_SERVER_CONFIG_H_
6 #define NET_QUIC_CRYPTO_QUIC_CRYPTO_SERVER_CONFIG_H_ 6 #define NET_QUIC_CRYPTO_QUIC_CRYPTO_SERVER_CONFIG_H_
7 7
8 #include <map> 8 #include <map>
9 #include <string> 9 #include <string>
10 #include <vector> 10 #include <vector>
(...skipping 18 matching lines...) Expand all
29 class KeyExchange; 29 class KeyExchange;
30 class ProofSource; 30 class ProofSource;
31 class QuicClock; 31 class QuicClock;
32 class QuicDecrypter; 32 class QuicDecrypter;
33 class QuicEncrypter; 33 class QuicEncrypter;
34 class QuicRandom; 34 class QuicRandom;
35 class QuicServerConfigProtobuf; 35 class QuicServerConfigProtobuf;
36 class StrikeRegister; 36 class StrikeRegister;
37 class StrikeRegisterClient; 37 class StrikeRegisterClient;
38 38
39 struct ClientHelloInfo; 39 // ClientHelloInfo contains information about a client hello message that is
40 // only kept for as long as it's being processed.
41 struct ClientHelloInfo {
42 ClientHelloInfo(const IPEndPoint& in_client_ip, QuicWallTime in_now);
43 ~ClientHelloInfo();
44
45 // Inputs to EvaluateClientHello.
46 const IPEndPoint client_ip;
47 const QuicWallTime now;
48
49 // Outputs from EvaluateClientHello.
50 bool valid_source_address_token;
51 bool client_nonce_well_formed;
52 bool unique;
53 base::StringPiece sni;
54 base::StringPiece client_nonce;
55 base::StringPiece server_nonce;
56 base::StringPiece user_agent_id;
57
58 // Errors from EvaluateClientHello.
59 std::vector<uint32> reject_reasons;
60 COMPILE_ASSERT(sizeof(QuicTag) == sizeof(uint32), header_out_of_sync);
61 };
40 62
41 namespace test { 63 namespace test {
42 class QuicCryptoServerConfigPeer; 64 class QuicCryptoServerConfigPeer;
43 } // namespace test 65 } // namespace test
44 66
45 // Hook that allows application code to subscribe to primary config changes. 67 // Hook that allows application code to subscribe to primary config changes.
46 class PrimaryConfigChangedCallback { 68 class PrimaryConfigChangedCallback {
47 public: 69 public:
48 PrimaryConfigChangedCallback(); 70 PrimaryConfigChangedCallback();
49 virtual ~PrimaryConfigChangedCallback(); 71 virtual ~PrimaryConfigChangedCallback();
50 virtual void Run(const std::string& scid) = 0; 72 virtual void Run(const std::string& scid) = 0;
51 73
52 private: 74 private:
53 DISALLOW_COPY_AND_ASSIGN(PrimaryConfigChangedCallback); 75 DISALLOW_COPY_AND_ASSIGN(PrimaryConfigChangedCallback);
54 }; 76 };
55 77
56 // Callback used to accept the result of the |client_hello| validation step. 78 // Callback used to accept the result of the |client_hello| validation step.
57 class NET_EXPORT_PRIVATE ValidateClientHelloResultCallback { 79 class NET_EXPORT_PRIVATE ValidateClientHelloResultCallback {
58 public: 80 public:
59 // Opaque token that holds information about the client_hello and 81 // Opaque token that holds information about the client_hello and
60 // its validity. Can be interpreted by calling ProcessClientHello. 82 // its validity. Can be interpreted by calling ProcessClientHello.
61 struct Result; 83 struct Result {
84 Result(const CryptoHandshakeMessage& in_client_hello,
85 IPEndPoint in_client_ip,
86 QuicWallTime in_now);
87 ~Result();
88
89 CryptoHandshakeMessage client_hello;
90 ClientHelloInfo info;
91 QuicErrorCode error_code;
92 std::string error_details;
93
94 // Populated if the CHLO STK contained a CachedNetworkParameters proto.
95 CachedNetworkParameters cached_network_params;
96 };
62 97
63 ValidateClientHelloResultCallback(); 98 ValidateClientHelloResultCallback();
64 virtual ~ValidateClientHelloResultCallback(); 99 virtual ~ValidateClientHelloResultCallback();
65 void Run(const Result* result); 100 void Run(const Result* result);
66 101
67 protected: 102 protected:
68 virtual void RunImpl(const CryptoHandshakeMessage& client_hello, 103 virtual void RunImpl(const CryptoHandshakeMessage& client_hello,
69 const Result& result) = 0; 104 const Result& result) = 0;
70 105
71 private: 106 private:
(...skipping 307 matching lines...) Expand 10 before | Expand all | Expand 10 after
379 const uint8* primary_orbit, 414 const uint8* primary_orbit,
380 scoped_refptr<Config> requested_config, 415 scoped_refptr<Config> requested_config,
381 ValidateClientHelloResultCallback::Result* client_hello_state, 416 ValidateClientHelloResultCallback::Result* client_hello_state,
382 ValidateClientHelloResultCallback* done_cb) const; 417 ValidateClientHelloResultCallback* done_cb) const;
383 418
384 // BuildRejection sets |out| to be a REJ message in reply to |client_hello|. 419 // BuildRejection sets |out| to be a REJ message in reply to |client_hello|.
385 void BuildRejection( 420 void BuildRejection(
386 const Config& config, 421 const Config& config,
387 const CryptoHandshakeMessage& client_hello, 422 const CryptoHandshakeMessage& client_hello,
388 const ClientHelloInfo& info, 423 const ClientHelloInfo& info,
424 const CachedNetworkParameters& cached_network_params,
389 QuicRandom* rand, 425 QuicRandom* rand,
390 QuicCryptoNegotiatedParameters *params, 426 QuicCryptoNegotiatedParameters *params,
391 CryptoHandshakeMessage* out) const; 427 CryptoHandshakeMessage* out) const;
392 428
393 // ParseConfigProtobuf parses the given config protobuf and returns a 429 // ParseConfigProtobuf parses the given config protobuf and returns a
394 // scoped_refptr<Config> if successful. The caller adopts the reference to the 430 // scoped_refptr<Config> if successful. The caller adopts the reference to the
395 // Config. On error, ParseConfigProtobuf returns nullptr. 431 // Config. On error, ParseConfigProtobuf returns nullptr.
396 scoped_refptr<Config> ParseConfigProtobuf(QuicServerConfigProtobuf* protobuf); 432 scoped_refptr<Config> ParseConfigProtobuf(QuicServerConfigProtobuf* protobuf);
397 433
398 // NewSourceAddressToken returns a fresh source address token for the given 434 // NewSourceAddressToken returns a fresh source address token for the given
399 // IP address. |cached_network_params| is optional, and can be nullptr. 435 // IP address. |cached_network_params| is optional, and can be nullptr.
400 std::string NewSourceAddressToken( 436 std::string NewSourceAddressToken(
401 const Config& config, 437 const Config& config,
402 const IPEndPoint& ip, 438 const IPEndPoint& ip,
403 QuicRandom* rand, 439 QuicRandom* rand,
404 QuicWallTime now, 440 QuicWallTime now,
405 const CachedNetworkParameters* cached_network_params) const; 441 const CachedNetworkParameters* cached_network_params) const;
406 442
407 // ValidateSourceAddressToken returns HANDSHAKE_OK if the source address token 443 // ValidateSourceAddressToken returns HANDSHAKE_OK if the source address token
408 // in |token| is a valid and timely token for the IP address |ip| given that 444 // in |token| is a valid and timely token for the IP address |ip| given that
409 // the current time is |now|. Otherwise it returns the reason for failure. 445 // the current time is |now|. Otherwise it returns the reason for failure.
410 HandshakeFailureReason ValidateSourceAddressToken(const Config& config, 446 // |cached_network_params| is populated if |token| contains a
411 base::StringPiece token, 447 // CachedNetworkParameters proto.
412 const IPEndPoint& ip, 448 HandshakeFailureReason ValidateSourceAddressToken(
413 QuicWallTime now) const; 449 const Config& config,
450 base::StringPiece token,
451 const IPEndPoint& ip,
452 QuicWallTime now,
453 CachedNetworkParameters* cached_network_params) const;
414 454
415 // NewServerNonce generates and encrypts a random nonce. 455 // NewServerNonce generates and encrypts a random nonce.
416 std::string NewServerNonce(QuicRandom* rand, QuicWallTime now) const; 456 std::string NewServerNonce(QuicRandom* rand, QuicWallTime now) const;
417 457
418 // ValidateServerNonce decrypts |token| and verifies that it hasn't been 458 // ValidateServerNonce decrypts |token| and verifies that it hasn't been
419 // previously used and is recent enough that it is plausible that it was part 459 // previously used and is recent enough that it is plausible that it was part
420 // of a very recently provided rejection ("recent" will be on the order of 460 // of a very recently provided rejection ("recent" will be on the order of
421 // 10-30 seconds). If so, it records that it has been used and returns 461 // 10-30 seconds). If so, it records that it has been used and returns
422 // HANDSHAKE_OK. Otherwise it returns the reason for failure. 462 // HANDSHAKE_OK. Otherwise it returns the reason for failure.
423 HandshakeFailureReason ValidateServerNonce( 463 HandshakeFailureReason ValidateServerNonce(
(...skipping 64 matching lines...) Expand 10 before | Expand all | Expand 10 after
488 uint32 source_address_token_lifetime_secs_; 528 uint32 source_address_token_lifetime_secs_;
489 uint32 server_nonce_strike_register_max_entries_; 529 uint32 server_nonce_strike_register_max_entries_;
490 uint32 server_nonce_strike_register_window_secs_; 530 uint32 server_nonce_strike_register_window_secs_;
491 531
492 DISALLOW_COPY_AND_ASSIGN(QuicCryptoServerConfig); 532 DISALLOW_COPY_AND_ASSIGN(QuicCryptoServerConfig);
493 }; 533 };
494 534
495 } // namespace net 535 } // namespace net
496 536
497 #endif // NET_QUIC_CRYPTO_QUIC_CRYPTO_SERVER_CONFIG_H_ 537 #endif // NET_QUIC_CRYPTO_QUIC_CRYPTO_SERVER_CONFIG_H_
OLDNEW
« no previous file with comments | « no previous file | net/quic/crypto/quic_crypto_server_config.cc » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698