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

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

Issue 2236973002: Landing Recent QUIC changes until 4AM, Aug 7, 2016 UTC-4 (Closed) Base URL: https://chromium.googlesource.com/chromium/src.git@master
Patch Set: flip quic_sequencer_buffer_retire_block_in_time to true Created 4 years, 4 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 #include "net/quic/core/crypto/quic_crypto_server_config.h" 5 #include "net/quic/core/crypto/quic_crypto_server_config.h"
6 6
7 #include <stdlib.h> 7 #include <stdlib.h>
8 8
9 #include <algorithm> 9 #include <algorithm>
10 #include <memory> 10 #include <memory>
(...skipping 549 matching lines...) Expand 10 before | Expand all | Expand 10 after
560 const IPEndPoint& client_address, 560 const IPEndPoint& client_address,
561 QuicVersion version, 561 QuicVersion version,
562 const QuicVersionVector& supported_versions, 562 const QuicVersionVector& supported_versions,
563 bool use_stateless_rejects, 563 bool use_stateless_rejects,
564 QuicConnectionId server_designated_connection_id, 564 QuicConnectionId server_designated_connection_id,
565 const QuicClock* clock, 565 const QuicClock* clock,
566 QuicRandom* rand, 566 QuicRandom* rand,
567 QuicCompressedCertsCache* compressed_certs_cache, 567 QuicCompressedCertsCache* compressed_certs_cache,
568 QuicCryptoNegotiatedParameters* params, 568 QuicCryptoNegotiatedParameters* params,
569 QuicCryptoProof* crypto_proof, 569 QuicCryptoProof* crypto_proof,
570 QuicByteCount total_framing_overhead,
571 QuicByteCount chlo_packet_size,
570 CryptoHandshakeMessage* out, 572 CryptoHandshakeMessage* out,
571 DiversificationNonce* out_diversification_nonce, 573 DiversificationNonce* out_diversification_nonce,
572 string* error_details) const { 574 string* error_details) const {
573 DCHECK(error_details); 575 DCHECK(error_details);
574 576
575 const CryptoHandshakeMessage& client_hello = 577 const CryptoHandshakeMessage& client_hello =
576 validate_chlo_result.client_hello; 578 validate_chlo_result.client_hello;
577 const ClientHelloInfo& info = validate_chlo_result.info; 579 const ClientHelloInfo& info = validate_chlo_result.info;
578 580
579 QuicErrorCode valid = CryptoUtils::ValidateClientHello( 581 QuicErrorCode valid = CryptoUtils::ValidateClientHello(
(...skipping 54 matching lines...) Expand 10 before | Expand all | Expand 10 after
634 StringPiece cert_sct; 636 StringPiece cert_sct;
635 if (client_hello.GetStringPiece(kCertificateSCTTag, &cert_sct) && 637 if (client_hello.GetStringPiece(kCertificateSCTTag, &cert_sct) &&
636 cert_sct.empty()) { 638 cert_sct.empty()) {
637 params->sct_supported_by_client = true; 639 params->sct_supported_by_client = true;
638 } 640 }
639 641
640 if (!info.reject_reasons.empty() || !requested_config.get()) { 642 if (!info.reject_reasons.empty() || !requested_config.get()) {
641 BuildRejection(version, *primary_config, client_hello, info, 643 BuildRejection(version, *primary_config, client_hello, info,
642 validate_chlo_result.cached_network_params, 644 validate_chlo_result.cached_network_params,
643 use_stateless_rejects, server_designated_connection_id, rand, 645 use_stateless_rejects, server_designated_connection_id, rand,
644 compressed_certs_cache, params, *crypto_proof, out); 646 compressed_certs_cache, params, *crypto_proof,
647 total_framing_overhead, chlo_packet_size, out);
645 return QUIC_NO_ERROR; 648 return QUIC_NO_ERROR;
646 } 649 }
647 650
648 if (reject_only) { 651 if (reject_only) {
649 return QUIC_NO_ERROR; 652 return QUIC_NO_ERROR;
650 } 653 }
651 654
652 const QuicTag* their_aeads; 655 const QuicTag* their_aeads;
653 const QuicTag* their_key_exchanges; 656 const QuicTag* their_key_exchanges;
654 size_t num_their_aeads, num_their_key_exchanges; 657 size_t num_their_aeads, num_their_key_exchanges;
(...skipping 780 matching lines...) Expand 10 before | Expand all | Expand 10 after
1435 const Config& config, 1438 const Config& config,
1436 const CryptoHandshakeMessage& client_hello, 1439 const CryptoHandshakeMessage& client_hello,
1437 const ClientHelloInfo& info, 1440 const ClientHelloInfo& info,
1438 const CachedNetworkParameters& cached_network_params, 1441 const CachedNetworkParameters& cached_network_params,
1439 bool use_stateless_rejects, 1442 bool use_stateless_rejects,
1440 QuicConnectionId server_designated_connection_id, 1443 QuicConnectionId server_designated_connection_id,
1441 QuicRandom* rand, 1444 QuicRandom* rand,
1442 QuicCompressedCertsCache* compressed_certs_cache, 1445 QuicCompressedCertsCache* compressed_certs_cache,
1443 QuicCryptoNegotiatedParameters* params, 1446 QuicCryptoNegotiatedParameters* params,
1444 const QuicCryptoProof& crypto_proof, 1447 const QuicCryptoProof& crypto_proof,
1448 QuicByteCount total_framing_overhead,
1449 QuicByteCount chlo_packet_size,
1445 CryptoHandshakeMessage* out) const { 1450 CryptoHandshakeMessage* out) const {
1446 if (FLAGS_enable_quic_stateless_reject_support && use_stateless_rejects) { 1451 if (FLAGS_enable_quic_stateless_reject_support && use_stateless_rejects) {
1447 DVLOG(1) << "QUIC Crypto server config returning stateless reject " 1452 DVLOG(1) << "QUIC Crypto server config returning stateless reject "
1448 << "with server-designated connection ID " 1453 << "with server-designated connection ID "
1449 << server_designated_connection_id; 1454 << server_designated_connection_id;
1450 out->set_tag(kSREJ); 1455 out->set_tag(kSREJ);
1451 out->SetValue(kRCID, server_designated_connection_id); 1456 out->SetValue(kRCID, server_designated_connection_id);
1452 } else { 1457 } else {
1453 out->set_tag(kREJ); 1458 out->set_tag(kREJ);
1454 } 1459 }
(...skipping 24 matching lines...) Expand all
1479 StringPiece client_cached_cert_hashes; 1484 StringPiece client_cached_cert_hashes;
1480 if (client_hello.GetStringPiece(kCCRT, &client_cached_cert_hashes)) { 1485 if (client_hello.GetStringPiece(kCCRT, &client_cached_cert_hashes)) {
1481 params->client_cached_cert_hashes = client_cached_cert_hashes.as_string(); 1486 params->client_cached_cert_hashes = client_cached_cert_hashes.as_string();
1482 } 1487 }
1483 1488
1484 const string compressed = 1489 const string compressed =
1485 CompressChain(compressed_certs_cache, crypto_proof.chain, 1490 CompressChain(compressed_certs_cache, crypto_proof.chain,
1486 params->client_common_set_hashes, 1491 params->client_common_set_hashes,
1487 params->client_cached_cert_hashes, config.common_cert_sets); 1492 params->client_cached_cert_hashes, config.common_cert_sets);
1488 1493
1494 DCHECK_GT(chlo_packet_size, client_hello.size());
1489 // kREJOverheadBytes is a very rough estimate of how much of a REJ 1495 // kREJOverheadBytes is a very rough estimate of how much of a REJ
1490 // message is taken up by things other than the certificates. 1496 // message is taken up by things other than the certificates.
1491 // STK: 56 bytes 1497 // STK: 56 bytes
1492 // SNO: 56 bytes 1498 // SNO: 56 bytes
1493 // SCFG 1499 // SCFG
1494 // SCID: 16 bytes 1500 // SCID: 16 bytes
1495 // PUBS: 38 bytes 1501 // PUBS: 38 bytes
1496 const size_t kREJOverheadBytes = 166; 1502 const size_t kREJOverheadBytes = 166;
1497 // max_unverified_size is the number of bytes that the certificate chain, 1503 // max_unverified_size is the number of bytes that the certificate chain,
1498 // signature, and (optionally) signed certificate timestamp can consume before 1504 // signature, and (optionally) signed certificate timestamp can consume before
1499 // we will demand a valid source-address token. 1505 // we will demand a valid source-address token.
1500 const size_t max_unverified_size = 1506 const size_t old_max_unverified_size =
1501 client_hello.size() * chlo_multiplier_ - kREJOverheadBytes; 1507 client_hello.size() * chlo_multiplier_ - kREJOverheadBytes;
1508 const size_t new_max_unverified_size =
1509 chlo_multiplier_ * (chlo_packet_size - total_framing_overhead) -
1510 kREJOverheadBytes;
1511 const size_t max_unverified_size = FLAGS_quic_use_chlo_packet_size
1512 ? new_max_unverified_size
1513 : old_max_unverified_size;
1502 static_assert(kClientHelloMinimumSize * kMultiplier >= kREJOverheadBytes, 1514 static_assert(kClientHelloMinimumSize * kMultiplier >= kREJOverheadBytes,
1503 "overhead calculation may underflow"); 1515 "overhead calculation may underflow");
1504 bool should_return_sct = 1516 bool should_return_sct =
1505 params->sct_supported_by_client && enable_serving_sct_; 1517 params->sct_supported_by_client && enable_serving_sct_;
1506 const size_t sct_size = should_return_sct ? crypto_proof.cert_sct.size() : 0; 1518 const size_t sct_size = should_return_sct ? crypto_proof.cert_sct.size() : 0;
1507 if (info.valid_source_address_token || 1519 if (info.valid_source_address_token ||
1508 crypto_proof.signature.size() + compressed.size() + sct_size < 1520 crypto_proof.signature.size() + compressed.size() + sct_size <
1509 max_unverified_size) { 1521 max_unverified_size) {
1510 out->SetStringPiece(kCertificateTag, compressed); 1522 out->SetStringPiece(kCertificateTag, compressed);
1511 out->SetStringPiece(kPROF, crypto_proof.signature); 1523 out->SetStringPiece(kPROF, crypto_proof.signature);
(...skipping 525 matching lines...) Expand 10 before | Expand all | Expand 10 after
2037 priority(0), 2049 priority(0),
2038 source_address_token_boxer(nullptr) {} 2050 source_address_token_boxer(nullptr) {}
2039 2051
2040 QuicCryptoServerConfig::Config::~Config() { 2052 QuicCryptoServerConfig::Config::~Config() {
2041 STLDeleteElements(&key_exchanges); 2053 STLDeleteElements(&key_exchanges);
2042 } 2054 }
2043 2055
2044 QuicCryptoProof::QuicCryptoProof() {} 2056 QuicCryptoProof::QuicCryptoProof() {}
2045 QuicCryptoProof::~QuicCryptoProof() {} 2057 QuicCryptoProof::~QuicCryptoProof() {}
2046 } // namespace net 2058 } // namespace net
OLDNEW
« no previous file with comments | « net/quic/core/crypto/quic_crypto_server_config.h ('k') | net/quic/core/quic_buffered_packet_store_test.cc » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698