| OLD | NEW |
| 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 <stddef.h> | 8 #include <stddef.h> |
| 9 #include <stdint.h> | 9 #include <stdint.h> |
| 10 | 10 |
| (...skipping 87 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 98 ClientHelloInfo info; | 98 ClientHelloInfo info; |
| 99 QuicErrorCode error_code; | 99 QuicErrorCode error_code; |
| 100 std::string error_details; | 100 std::string error_details; |
| 101 | 101 |
| 102 // Populated if the CHLO STK contained a CachedNetworkParameters proto. | 102 // Populated if the CHLO STK contained a CachedNetworkParameters proto. |
| 103 CachedNetworkParameters cached_network_params; | 103 CachedNetworkParameters cached_network_params; |
| 104 }; | 104 }; |
| 105 | 105 |
| 106 ValidateClientHelloResultCallback(); | 106 ValidateClientHelloResultCallback(); |
| 107 virtual ~ValidateClientHelloResultCallback(); | 107 virtual ~ValidateClientHelloResultCallback(); |
| 108 void Run(std::unique_ptr<Result> result, | 108 virtual void Run(std::unique_ptr<Result> result, |
| 109 std::unique_ptr<ProofSource::Details> details); | 109 std::unique_ptr<ProofSource::Details> details) = 0; |
| 110 | |
| 111 protected: | |
| 112 virtual void RunImpl(std::unique_ptr<Result> result, | |
| 113 std::unique_ptr<ProofSource::Details> details) = 0; | |
| 114 | 110 |
| 115 private: | 111 private: |
| 116 DISALLOW_COPY_AND_ASSIGN(ValidateClientHelloResultCallback); | 112 DISALLOW_COPY_AND_ASSIGN(ValidateClientHelloResultCallback); |
| 117 }; | 113 }; |
| 118 | 114 |
| 119 // Callback used to receive the results of a call to | 115 // Callback used to receive the results of a call to |
| 120 // BuildServerConfigUpdateMessage. | 116 // BuildServerConfigUpdateMessage. |
| 121 class BuildServerConfigUpdateMessageResultCallback { | 117 class BuildServerConfigUpdateMessageResultCallback { |
| 122 public: | 118 public: |
| 123 BuildServerConfigUpdateMessageResultCallback() = default; | 119 BuildServerConfigUpdateMessageResultCallback() = default; |
| (...skipping 110 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 234 // certificate selection. | 230 // certificate selection. |
| 235 // version: protocol version used for this connection. | 231 // version: protocol version used for this connection. |
| 236 // clock: used to validate client nonces and ephemeral keys. | 232 // clock: used to validate client nonces and ephemeral keys. |
| 237 // crypto_proof: output structure containing the crypto proof used in reply to | 233 // crypto_proof: output structure containing the crypto proof used in reply to |
| 238 // a proof demand. | 234 // a proof demand. |
| 239 // done_cb: single-use callback that accepts an opaque | 235 // done_cb: single-use callback that accepts an opaque |
| 240 // ValidatedClientHelloMsg token that holds information about | 236 // ValidatedClientHelloMsg token that holds information about |
| 241 // the client hello. The callback will always be called exactly | 237 // the client hello. The callback will always be called exactly |
| 242 // once, either under the current call stack, or after the | 238 // once, either under the current call stack, or after the |
| 243 // completion of an asynchronous operation. | 239 // completion of an asynchronous operation. |
| 244 void ValidateClientHello(const CryptoHandshakeMessage& client_hello, | 240 void ValidateClientHello( |
| 245 const IPAddress& client_ip, | 241 const CryptoHandshakeMessage& client_hello, |
| 246 const IPAddress& server_ip, | 242 const IPAddress& client_ip, |
| 247 QuicVersion version, | 243 const IPAddress& server_ip, |
| 248 const QuicClock* clock, | 244 QuicVersion version, |
| 249 QuicCryptoProof* crypto_proof, | 245 const QuicClock* clock, |
| 250 ValidateClientHelloResultCallback* done_cb) const; | 246 QuicCryptoProof* crypto_proof, |
| 247 std::unique_ptr<ValidateClientHelloResultCallback> done_cb) const; |
| 251 | 248 |
| 252 // ProcessClientHello processes |client_hello| and decides whether to accept | 249 // ProcessClientHello processes |client_hello| and decides whether to accept |
| 253 // or reject the connection. If the connection is to be accepted, |out| is | 250 // or reject the connection. If the connection is to be accepted, |out| is |
| 254 // set to the contents of the ServerHello, |out_params| is completed and | 251 // set to the contents of the ServerHello, |out_params| is completed and |
| 255 // QUIC_NO_ERROR is returned. Otherwise |out| is set to be a REJ or SREJ | 252 // QUIC_NO_ERROR is returned. Otherwise |out| is set to be a REJ or SREJ |
| 256 // message and QUIC_NO_ERROR is returned. | 253 // message and QUIC_NO_ERROR is returned. |
| 257 // | 254 // |
| 258 // validate_chlo_result: Output from the asynchronous call to | 255 // validate_chlo_result: Output from the asynchronous call to |
| 259 // ValidateClientHello. Contains the client hello message and | 256 // ValidateClientHello. Contains the client hello message and |
| 260 // information about it. | 257 // information about it. |
| (...skipping 150 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 411 // nonces from. Setting a larger value allows for clients to delay follow-up | 408 // nonces from. Setting a larger value allows for clients to delay follow-up |
| 412 // client hellos for longer and still use server nonces as proofs of | 409 // client hellos for longer and still use server nonces as proofs of |
| 413 // uniqueness. | 410 // uniqueness. |
| 414 void set_server_nonce_strike_register_window_secs(uint32_t window_secs); | 411 void set_server_nonce_strike_register_window_secs(uint32_t window_secs); |
| 415 | 412 |
| 416 // set_enable_serving_sct enables or disables serving signed cert timestamp | 413 // set_enable_serving_sct enables or disables serving signed cert timestamp |
| 417 // (RFC6962) in server hello. | 414 // (RFC6962) in server hello. |
| 418 void set_enable_serving_sct(bool enable_serving_sct); | 415 void set_enable_serving_sct(bool enable_serving_sct); |
| 419 | 416 |
| 420 // Set and take ownership of the callback to invoke on primary config changes. | 417 // Set and take ownership of the callback to invoke on primary config changes. |
| 421 void AcquirePrimaryConfigChangedCb(PrimaryConfigChangedCallback* cb); | 418 void AcquirePrimaryConfigChangedCb( |
| 419 std::unique_ptr<PrimaryConfigChangedCallback> cb); |
| 422 | 420 |
| 423 // Returns the number of configs this object owns. | 421 // Returns the number of configs this object owns. |
| 424 int NumberOfConfigs() const; | 422 int NumberOfConfigs() const; |
| 425 | 423 |
| 426 private: | 424 private: |
| 427 friend class test::QuicCryptoServerConfigPeer; | 425 friend class test::QuicCryptoServerConfigPeer; |
| 428 friend struct QuicCryptoProof; | 426 friend struct QuicCryptoProof; |
| 429 | 427 |
| 430 // Config represents a server config: a collection of preferences and | 428 // Config represents a server config: a collection of preferences and |
| 431 // Diffie-Hellman public values. | 429 // Diffie-Hellman public values. |
| (...skipping 81 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 513 // written to |info|. | 511 // written to |info|. |
| 514 void EvaluateClientHello( | 512 void EvaluateClientHello( |
| 515 const IPAddress& server_ip, | 513 const IPAddress& server_ip, |
| 516 QuicVersion version, | 514 QuicVersion version, |
| 517 const uint8_t* primary_orbit, | 515 const uint8_t* primary_orbit, |
| 518 scoped_refptr<Config> requested_config, | 516 scoped_refptr<Config> requested_config, |
| 519 scoped_refptr<Config> primary_config, | 517 scoped_refptr<Config> primary_config, |
| 520 QuicCryptoProof* crypto_proof, | 518 QuicCryptoProof* crypto_proof, |
| 521 std::unique_ptr<ValidateClientHelloResultCallback::Result> | 519 std::unique_ptr<ValidateClientHelloResultCallback::Result> |
| 522 client_hello_state, | 520 client_hello_state, |
| 523 ValidateClientHelloResultCallback* done_cb) const; | 521 std::unique_ptr<ValidateClientHelloResultCallback> done_cb) const; |
| 524 | 522 |
| 525 // Callback class for bridging between EvaluateClientHello and | 523 // Callback class for bridging between EvaluateClientHello and |
| 526 // EvaluateClientHelloAfterGetProof | 524 // EvaluateClientHelloAfterGetProof |
| 527 friend class EvaluateClientHelloCallback; | 525 friend class EvaluateClientHelloCallback; |
| 528 | 526 |
| 529 // Continuation of EvaluateClientHello after the call to | 527 // Continuation of EvaluateClientHello after the call to |
| 530 // ProofSource::GetProof. |found_error| indicates whether an error was | 528 // ProofSource::GetProof. |found_error| indicates whether an error was |
| 531 // detected in EvaluateClientHello, and |get_proof_failed| indicates whether | 529 // detected in EvaluateClientHello, and |get_proof_failed| indicates whether |
| 532 // GetProof failed. If GetProof was not run, then |get_proof_failed| will be | 530 // GetProof failed. If GetProof was not run, then |get_proof_failed| will be |
| 533 // set to false. | 531 // set to false. |
| 534 void EvaluateClientHelloAfterGetProof( | 532 void EvaluateClientHelloAfterGetProof( |
| 535 bool found_error, | 533 bool found_error, |
| 536 const IPAddress& server_ip, | 534 const IPAddress& server_ip, |
| 537 QuicVersion version, | 535 QuicVersion version, |
| 538 const uint8_t* primary_orbit, | 536 const uint8_t* primary_orbit, |
| 539 scoped_refptr<Config> requested_config, | 537 scoped_refptr<Config> requested_config, |
| 540 scoped_refptr<Config> primary_config, | 538 scoped_refptr<Config> primary_config, |
| 541 QuicCryptoProof* crypto_proof, | 539 QuicCryptoProof* crypto_proof, |
| 542 std::unique_ptr<ProofSource::Details> proof_source_details, | 540 std::unique_ptr<ProofSource::Details> proof_source_details, |
| 543 bool get_proof_failed, | 541 bool get_proof_failed, |
| 544 std::unique_ptr<ValidateClientHelloResultCallback::Result> | 542 std::unique_ptr<ValidateClientHelloResultCallback::Result> |
| 545 client_hello_state, | 543 client_hello_state, |
| 546 ValidateClientHelloResultCallback* done_cb) const; | 544 std::unique_ptr<ValidateClientHelloResultCallback> done_cb) const; |
| 547 | 545 |
| 548 // BuildRejection sets |out| to be a REJ message in reply to |client_hello|. | 546 // BuildRejection sets |out| to be a REJ message in reply to |client_hello|. |
| 549 void BuildRejection(QuicVersion version, | 547 void BuildRejection(QuicVersion version, |
| 550 QuicWallTime now, | 548 QuicWallTime now, |
| 551 const Config& config, | 549 const Config& config, |
| 552 const CryptoHandshakeMessage& client_hello, | 550 const CryptoHandshakeMessage& client_hello, |
| 553 const ClientHelloInfo& info, | 551 const ClientHelloInfo& info, |
| 554 const CachedNetworkParameters& cached_network_params, | 552 const CachedNetworkParameters& cached_network_params, |
| 555 bool use_stateless_rejects, | 553 bool use_stateless_rejects, |
| 556 QuicConnectionId server_designated_connection_id, | 554 QuicConnectionId server_designated_connection_id, |
| (...skipping 126 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 683 const QuicVersion version_; | 681 const QuicVersion version_; |
| 684 QuicCompressedCertsCache* compressed_certs_cache_; | 682 QuicCompressedCertsCache* compressed_certs_cache_; |
| 685 const CommonCertSets* common_cert_sets_; | 683 const CommonCertSets* common_cert_sets_; |
| 686 const std::string client_common_set_hashes_; | 684 const std::string client_common_set_hashes_; |
| 687 const std::string client_cached_cert_hashes_; | 685 const std::string client_cached_cert_hashes_; |
| 688 const bool sct_supported_by_client_; | 686 const bool sct_supported_by_client_; |
| 689 CryptoHandshakeMessage message_; | 687 CryptoHandshakeMessage message_; |
| 690 std::unique_ptr<BuildServerConfigUpdateMessageResultCallback> cb_; | 688 std::unique_ptr<BuildServerConfigUpdateMessageResultCallback> cb_; |
| 691 }; | 689 }; |
| 692 | 690 |
| 693 // Invoked by BuildServerConfigUpdateMessageProofSourceCallback::RunImpl once | 691 // Invoked by BuildServerConfigUpdateMessageProofSourceCallback::Run once |
| 694 // the proof has been acquired. Finishes building the server config update | 692 // the proof has been acquired. Finishes building the server config update |
| 695 // message and invokes |cb|. | 693 // message and invokes |cb|. |
| 696 void FinishBuildServerConfigUpdateMessage( | 694 void FinishBuildServerConfigUpdateMessage( |
| 697 QuicVersion version, | 695 QuicVersion version, |
| 698 QuicCompressedCertsCache* compressed_certs_cache, | 696 QuicCompressedCertsCache* compressed_certs_cache, |
| 699 const CommonCertSets* common_cert_sets, | 697 const CommonCertSets* common_cert_sets, |
| 700 const std::string& client_common_set_hashes, | 698 const std::string& client_common_set_hashes, |
| 701 const std::string& client_cached_cert_hashes, | 699 const std::string& client_cached_cert_hashes, |
| 702 bool sct_supported_by_client, | 700 bool sct_supported_by_client, |
| 703 bool ok, | 701 bool ok, |
| (...skipping 87 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 791 std::string cert_sct; | 789 std::string cert_sct; |
| 792 // The server config that is used for this proof (and the rest of the | 790 // The server config that is used for this proof (and the rest of the |
| 793 // request). | 791 // request). |
| 794 scoped_refptr<QuicCryptoServerConfig::Config> config; | 792 scoped_refptr<QuicCryptoServerConfig::Config> config; |
| 795 std::string primary_scid; | 793 std::string primary_scid; |
| 796 }; | 794 }; |
| 797 | 795 |
| 798 } // namespace net | 796 } // namespace net |
| 799 | 797 |
| 800 #endif // NET_QUIC_CRYPTO_QUIC_CRYPTO_SERVER_CONFIG_H_ | 798 #endif // NET_QUIC_CRYPTO_QUIC_CRYPTO_SERVER_CONFIG_H_ |
| OLD | NEW |