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

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

Issue 2397513002: Conversion of a QUIC method to an async signature and resulting fallout. No functional change inten… (Closed)
Patch Set: Add NET_EXPORT_PRIVATE Created 4 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
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 <stddef.h> 8 #include <stddef.h>
9 #include <stdint.h> 9 #include <stdint.h>
10 10
(...skipping 98 matching lines...) Expand 10 before | Expand all | Expand 10 after
109 109
110 ValidateClientHelloResultCallback(); 110 ValidateClientHelloResultCallback();
111 virtual void Run(scoped_refptr<Result> result, 111 virtual void Run(scoped_refptr<Result> result,
112 std::unique_ptr<ProofSource::Details> details) = 0; 112 std::unique_ptr<ProofSource::Details> details) = 0;
113 virtual ~ValidateClientHelloResultCallback(); 113 virtual ~ValidateClientHelloResultCallback();
114 114
115 private: 115 private:
116 DISALLOW_COPY_AND_ASSIGN(ValidateClientHelloResultCallback); 116 DISALLOW_COPY_AND_ASSIGN(ValidateClientHelloResultCallback);
117 }; 117 };
118 118
119 // Callback used to accept the result of the ProcessClientHello method.
120 class NET_EXPORT_PRIVATE ProcessClientHelloResultCallback {
121 public:
122 ProcessClientHelloResultCallback();
123 virtual ~ProcessClientHelloResultCallback();
124 virtual void Run(
125 QuicErrorCode error,
126 const std::string& error_details,
127 std::unique_ptr<CryptoHandshakeMessage> message,
128 std::unique_ptr<DiversificationNonce> diversification_nonce) = 0;
129
130 private:
131 DISALLOW_COPY_AND_ASSIGN(ProcessClientHelloResultCallback);
132 };
133
119 // Callback used to receive the results of a call to 134 // Callback used to receive the results of a call to
120 // BuildServerConfigUpdateMessage. 135 // BuildServerConfigUpdateMessage.
121 class BuildServerConfigUpdateMessageResultCallback { 136 class BuildServerConfigUpdateMessageResultCallback {
122 public: 137 public:
123 BuildServerConfigUpdateMessageResultCallback() = default; 138 BuildServerConfigUpdateMessageResultCallback() = default;
124 virtual ~BuildServerConfigUpdateMessageResultCallback() {} 139 virtual ~BuildServerConfigUpdateMessageResultCallback() {}
125 virtual void Run(bool ok, const CryptoHandshakeMessage& message) = 0; 140 virtual void Run(bool ok, const CryptoHandshakeMessage& message) = 0;
126 141
127 private: 142 private:
128 DISALLOW_COPY_AND_ASSIGN(BuildServerConfigUpdateMessageResultCallback); 143 DISALLOW_COPY_AND_ASSIGN(BuildServerConfigUpdateMessageResultCallback);
(...skipping 97 matching lines...) Expand 10 before | Expand all | Expand 10 after
226 241
227 // SetSourceAddressTokenKeys sets the keys to be tried, in order, when 242 // SetSourceAddressTokenKeys sets the keys to be tried, in order, when
228 // decrypting a source address token. Note that these keys are used *without* 243 // decrypting a source address token. Note that these keys are used *without*
229 // passing them through a KDF, in contradistinction to the 244 // passing them through a KDF, in contradistinction to the
230 // |source_address_token_secret| argument to the constructor. 245 // |source_address_token_secret| argument to the constructor.
231 void SetSourceAddressTokenKeys(const std::vector<std::string>& keys); 246 void SetSourceAddressTokenKeys(const std::vector<std::string>& keys);
232 247
233 // Get the server config ids for all known configs. 248 // Get the server config ids for all known configs.
234 void GetConfigIds(std::vector<std::string>* scids) const; 249 void GetConfigIds(std::vector<std::string>* scids) const;
235 250
236 // Checks |client_hello| for gross errors and determines whether it 251 // Checks |client_hello| for gross errors and determines whether it can be
237 // can be shown to be fresh (i.e. not a replay). The result of the 252 // shown to be fresh (i.e. not a replay). The result of the validation step
238 // validation step must be interpreted by calling 253 // must be interpreted by calling QuicCryptoServerConfig::ProcessClientHello
239 // QuicCryptoServerConfig::ProcessClientHello from the done_cb. 254 // from the done_cb.
240 // 255 //
241 // ValidateClientHello may invoke the done_cb before unrolling the 256 // ValidateClientHello may invoke the done_cb before unrolling the
242 // stack if it is able to assess the validity of the client_nonce 257 // stack if it is able to assess the validity of the client_nonce
243 // without asynchronous operations. 258 // without asynchronous operations.
244 // 259 //
245 // client_hello: the incoming client hello message. 260 // client_hello: the incoming client hello message.
246 // client_ip: the IP address of the client, which is used to generate and 261 // client_ip: the IP address of the client, which is used to generate and
247 // validate source-address tokens. 262 // validate source-address tokens.
248 // server_ip: the IP address of the server. The IP address may be used for 263 // server_ip: the IP address of the server. The IP address may be used for
249 // certificate selection. 264 // certificate selection.
250 // version: protocol version used for this connection. 265 // version: protocol version used for this connection.
251 // clock: used to validate client nonces and ephemeral keys. 266 // clock: used to validate client nonces and ephemeral keys.
252 // crypto_proof: output structure containing the crypto proof used in reply to 267 // crypto_proof: in/out parameter to which will be written the crypto proof
253 // a proof demand. 268 // used in reply to a proof demand. The pointed-to-object must
269 // live until the callback is invoked.
254 // done_cb: single-use callback that accepts an opaque 270 // done_cb: single-use callback that accepts an opaque
255 // ValidatedClientHelloMsg token that holds information about 271 // ValidatedClientHelloMsg token that holds information about
256 // the client hello. The callback will always be called exactly 272 // the client hello. The callback will always be called exactly
257 // once, either under the current call stack, or after the 273 // once, either under the current call stack, or after the
258 // completion of an asynchronous operation. 274 // completion of an asynchronous operation.
259 void ValidateClientHello( 275 void ValidateClientHello(
260 const CryptoHandshakeMessage& client_hello, 276 const CryptoHandshakeMessage& client_hello,
261 const IPAddress& client_ip, 277 const IPAddress& client_ip,
262 const IPAddress& server_ip, 278 const IPAddress& server_ip,
263 QuicVersion version, 279 QuicVersion version,
264 const QuicClock* clock, 280 const QuicClock* clock,
265 QuicCryptoProof* crypto_proof, 281 QuicCryptoProof* crypto_proof,
266 std::unique_ptr<ValidateClientHelloResultCallback> done_cb) const; 282 std::unique_ptr<ValidateClientHelloResultCallback> done_cb) const;
267 283
268 // ProcessClientHello processes |client_hello| and decides whether to accept 284 // ProcessClientHello processes |client_hello| and decides whether to accept
269 // or reject the connection. If the connection is to be accepted, |out| is 285 // or reject the connection. If the connection is to be accepted, |done_cb| is
270 // set to the contents of the ServerHello, |out_params| is completed and 286 // invoked with the contents of the ServerHello and QUIC_NO_ERROR. Otherwise
271 // QUIC_NO_ERROR is returned. Otherwise |out| is set to be a REJ or SREJ 287 // |done_cb| is called with a REJ or SREJ message and QUIC_NO_ERROR.
272 // message and QUIC_NO_ERROR is returned.
273 // 288 //
274 // validate_chlo_result: Output from the asynchronous call to 289 // validate_chlo_result: Output from the asynchronous call to
275 // ValidateClientHello. Contains the client hello message and 290 // ValidateClientHello. Contains the client hello message and
276 // information about it. 291 // information about it.
277 // reject_only: Only generate rejections, not server hello messages. 292 // reject_only: Only generate rejections, not server hello messages.
278 // connection_id: the ConnectionId for the connection, which is used in key 293 // connection_id: the ConnectionId for the connection, which is used in key
279 // derivation. 294 // derivation.
280 // server_ip: the IP address of the server. The IP address may be used for 295 // server_ip: the IP address of the server. The IP address may be used for
281 // certificate selection. 296 // certificate selection.
282 // client_address: the IP address and port of the client. The IP address is 297 // client_address: the IP address and port of the client. The IP address is
283 // used to generate and validate source-address tokens. 298 // used to generate and validate source-address tokens.
284 // version: version of the QUIC protocol in use for this connection 299 // version: version of the QUIC protocol in use for this connection
285 // supported_versions: versions of the QUIC protocol that this server 300 // supported_versions: versions of the QUIC protocol that this server
286 // supports. 301 // supports.
287 // clock: used to validate client nonces and ephemeral keys. 302 // clock: used to validate client nonces and ephemeral keys.
288 // rand: an entropy source 303 // rand: an entropy source
289 // compressed_certs_cache: the cache that caches a set of most recently used 304 // compressed_certs_cache: the cache that caches a set of most recently used
290 // certs. Owned by QuicDispatcher. 305 // certs. Owned by QuicDispatcher.
291 // params: the state of the handshake. This may be updated with a server 306 // params: the state of the handshake. This may be updated with a server
292 // nonce when we send a rejection. After a successful handshake, this will 307 // nonce when we send a rejection.
293 // contain the state of the connection.
294 // crypto_proof: output structure containing the crypto proof used in reply to 308 // crypto_proof: output structure containing the crypto proof used in reply to
295 // a proof demand. 309 // a proof demand.
296 // total_framing_overhead: the total per-packet overhead for a stream frame 310 // total_framing_overhead: the total per-packet overhead for a stream frame
297 // chlo_packet_size: the size, in bytes, of the CHLO packet 311 // chlo_packet_size: the size, in bytes, of the CHLO packet
298 // out: the resulting handshake message (either REJ or SHLO) 312 // done_cb: the callback invoked on completion
299 // out_diversification_nonce: If the resulting handshake message is SHLO and 313 void ProcessClientHello(
300 // the version is greater than QUIC_VERSION_32 then this contains a
301 // 32-byte value that should be included in the public header of
302 // initially encrypted packets.
303 // error_details: used to store a std::string describing any error.
304 QuicErrorCode ProcessClientHello(
305 scoped_refptr<ValidateClientHelloResultCallback::Result> 314 scoped_refptr<ValidateClientHelloResultCallback::Result>
306 validate_chlo_result, 315 validate_chlo_result,
307 bool reject_only, 316 bool reject_only,
308 QuicConnectionId connection_id, 317 QuicConnectionId connection_id,
309 const IPAddress& server_ip, 318 const IPAddress& server_ip,
310 const IPEndPoint& client_address, 319 const IPEndPoint& client_address,
311 QuicVersion version, 320 QuicVersion version,
312 const QuicVersionVector& supported_versions, 321 const QuicVersionVector& supported_versions,
313 bool use_stateless_rejects, 322 bool use_stateless_rejects,
314 QuicConnectionId server_designated_connection_id, 323 QuicConnectionId server_designated_connection_id,
315 const QuicClock* clock, 324 const QuicClock* clock,
316 QuicRandom* rand, 325 QuicRandom* rand,
317 QuicCompressedCertsCache* compressed_certs_cache, 326 QuicCompressedCertsCache* compressed_certs_cache,
318 QuicCryptoNegotiatedParameters* params, 327 QuicCryptoNegotiatedParameters* params,
319 QuicCryptoProof* crypto_proof, 328 QuicCryptoProof* crypto_proof,
320 QuicByteCount total_framing_overhead, 329 QuicByteCount total_framing_overhead,
321 QuicByteCount chlo_packet_size, 330 QuicByteCount chlo_packet_size,
322 CryptoHandshakeMessage* out, 331 std::unique_ptr<ProcessClientHelloResultCallback> done_cb) const;
323 DiversificationNonce* out_diversification_nonce,
324 std::string* error_details) const;
325 332
326 // BuildServerConfigUpdateMessage sets |out| to be a SCUP message containing 333 // BuildServerConfigUpdateMessage sets |out| to be a SCUP message containing
327 // the current primary config, an up to date source-address token, and cert 334 // the current primary config, an up to date source-address token, and cert
328 // chain and proof in the case of secure QUIC. Returns true if successfully 335 // chain and proof in the case of secure QUIC. Returns true if successfully
329 // filled |out|. 336 // filled |out|.
330 // 337 //
331 // |cached_network_params| is optional, and can be nullptr. 338 // |cached_network_params| is optional, and can be nullptr.
332 // 339 //
333 // TODO(gredner): remove this when --FLAGS_enable_async_get_proof is removed. 340 // TODO(gredner): remove this when --FLAGS_enable_async_get_proof is removed.
334 bool BuildServerConfigUpdateMessage( 341 bool BuildServerConfigUpdateMessage(
(...skipping 228 matching lines...) Expand 10 before | Expand all | Expand 10 after
563 const uint8_t* primary_orbit, 570 const uint8_t* primary_orbit,
564 scoped_refptr<Config> requested_config, 571 scoped_refptr<Config> requested_config,
565 scoped_refptr<Config> primary_config, 572 scoped_refptr<Config> primary_config,
566 QuicCryptoProof* crypto_proof, 573 QuicCryptoProof* crypto_proof,
567 std::unique_ptr<ProofSource::Details> proof_source_details, 574 std::unique_ptr<ProofSource::Details> proof_source_details,
568 bool get_proof_failed, 575 bool get_proof_failed,
569 scoped_refptr<ValidateClientHelloResultCallback::Result> 576 scoped_refptr<ValidateClientHelloResultCallback::Result>
570 client_hello_state, 577 client_hello_state,
571 std::unique_ptr<ValidateClientHelloResultCallback> done_cb) const; 578 std::unique_ptr<ValidateClientHelloResultCallback> done_cb) const;
572 579
580 // Portion of ProcessClientHello which executes after GetProof.
581 void ProcessClientHelloAfterGetProof(
582 const ValidateClientHelloResultCallback::Result& validate_chlo_result,
583 bool reject_only,
584 QuicConnectionId connection_id,
585 const IPEndPoint& client_address,
586 QuicVersion version,
587 const QuicVersionVector& supported_versions,
588 bool use_stateless_rejects,
589 QuicConnectionId server_designated_connection_id,
590 const QuicClock* clock,
591 QuicRandom* rand,
592 QuicCompressedCertsCache* compressed_certs_cache,
593 QuicCryptoNegotiatedParameters* params,
594 QuicCryptoProof* crypto_proof,
595 QuicByteCount total_framing_overhead,
596 QuicByteCount chlo_packet_size,
597 const scoped_refptr<Config>& requested_config,
598 const scoped_refptr<Config>& primary_config,
599 std::unique_ptr<ProcessClientHelloResultCallback> done_cb) const;
600
573 // BuildRejection sets |out| to be a REJ message in reply to |client_hello|. 601 // BuildRejection sets |out| to be a REJ message in reply to |client_hello|.
574 void BuildRejection(QuicVersion version, 602 void BuildRejection(QuicVersion version,
575 QuicWallTime now, 603 QuicWallTime now,
576 const Config& config, 604 const Config& config,
577 const CryptoHandshakeMessage& client_hello, 605 const CryptoHandshakeMessage& client_hello,
578 const ClientHelloInfo& info, 606 const ClientHelloInfo& info,
579 const CachedNetworkParameters& cached_network_params, 607 const CachedNetworkParameters& cached_network_params,
580 bool use_stateless_rejects, 608 bool use_stateless_rejects,
581 QuicConnectionId server_designated_connection_id, 609 QuicConnectionId server_designated_connection_id,
582 QuicRandom* rand, 610 QuicRandom* rand,
(...skipping 236 matching lines...) Expand 10 before | Expand all | Expand 10 after
819 std::string cert_sct; 847 std::string cert_sct;
820 // The server config that is used for this proof (and the rest of the 848 // The server config that is used for this proof (and the rest of the
821 // request). 849 // request).
822 scoped_refptr<QuicCryptoServerConfig::Config> config; 850 scoped_refptr<QuicCryptoServerConfig::Config> config;
823 std::string primary_scid; 851 std::string primary_scid;
824 }; 852 };
825 853
826 } // namespace net 854 } // namespace net
827 855
828 #endif // NET_QUIC_CRYPTO_QUIC_CRYPTO_SERVER_CONFIG_H_ 856 #endif // NET_QUIC_CRYPTO_QUIC_CRYPTO_SERVER_CONFIG_H_
OLDNEW
« no previous file with comments | « net/quic/core/crypto/crypto_server_test.cc ('k') | net/quic/core/crypto/quic_crypto_server_config.cc » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698