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

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

Issue 2907743003: Change CryptoHandshakeMessage::GetTaglist to tag a QuicTagVector* (Closed)
Patch Set: Created 3 years, 7 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_client_config.h" 5 #include "net/quic/core/crypto/quic_crypto_client_config.h"
6 6
7 #include <algorithm> 7 #include <algorithm>
8 #include <memory> 8 #include <memory>
9 9
10 #include "base/metrics/histogram_macros.h" 10 #include "base/metrics/histogram_macros.h"
(...skipping 509 matching lines...) Expand 10 before | Expand all | Expand 10 after
520 520
521 QuicStringPiece scid; 521 QuicStringPiece scid;
522 if (!scfg->GetStringPiece(kSCID, &scid)) { 522 if (!scfg->GetStringPiece(kSCID, &scid)) {
523 *error_details = "SCFG missing SCID"; 523 *error_details = "SCFG missing SCID";
524 return QUIC_INVALID_CRYPTO_MESSAGE_PARAMETER; 524 return QUIC_INVALID_CRYPTO_MESSAGE_PARAMETER;
525 } 525 }
526 out->SetStringPiece(kSCID, scid); 526 out->SetStringPiece(kSCID, scid);
527 527
528 out->SetStringPiece(kCertificateSCTTag, ""); 528 out->SetStringPiece(kCertificateSCTTag, "");
529 529
530 const QuicTag* their_aeads; 530 QuicTagVector their_aeads;
531 const QuicTag* their_key_exchanges; 531 QuicTagVector their_key_exchanges;
532 size_t num_their_aeads, num_their_key_exchanges; 532 if (scfg->GetTaglist(kAEAD, &their_aeads) != QUIC_NO_ERROR ||
533 if (scfg->GetTaglist(kAEAD, &their_aeads, &num_their_aeads) != 533 scfg->GetTaglist(kKEXS, &their_key_exchanges) != QUIC_NO_ERROR) {
534 QUIC_NO_ERROR ||
535 scfg->GetTaglist(kKEXS, &their_key_exchanges, &num_their_key_exchanges) !=
536 QUIC_NO_ERROR) {
537 *error_details = "Missing AEAD or KEXS"; 534 *error_details = "Missing AEAD or KEXS";
538 return QUIC_INVALID_CRYPTO_MESSAGE_PARAMETER; 535 return QUIC_INVALID_CRYPTO_MESSAGE_PARAMETER;
539 } 536 }
540 537
541 // AEAD: the work loads on the client and server are symmetric. Since the 538 // AEAD: the work loads on the client and server are symmetric. Since the
542 // client is more likely to be CPU-constrained, break the tie by favoring 539 // client is more likely to be CPU-constrained, break the tie by favoring
543 // the client's preference. 540 // the client's preference.
544 // Key exchange: the client does more work than the server, so favor the 541 // Key exchange: the client does more work than the server, so favor the
545 // client's preference. 542 // client's preference.
546 size_t key_exchange_index; 543 size_t key_exchange_index;
547 if (!FindMutualQuicTag(aead, their_aeads, num_their_aeads, &out_params->aead, 544 if (!FindMutualQuicTag(aead, their_aeads.data(), their_aeads.size(),
548 nullptr) || 545 &out_params->aead, nullptr) ||
549 !FindMutualQuicTag(kexs, their_key_exchanges, num_their_key_exchanges, 546 !FindMutualQuicTag(kexs, their_key_exchanges.data(),
550 &out_params->key_exchange, &key_exchange_index)) { 547 their_key_exchanges.size(), &out_params->key_exchange,
548 &key_exchange_index)) {
551 *error_details = "Unsupported AEAD or KEXS"; 549 *error_details = "Unsupported AEAD or KEXS";
552 return QUIC_CRYPTO_NO_SUPPORT; 550 return QUIC_CRYPTO_NO_SUPPORT;
553 } 551 }
554 out->SetVector(kAEAD, QuicTagVector{out_params->aead}); 552 out->SetVector(kAEAD, QuicTagVector{out_params->aead});
555 out->SetVector(kKEXS, QuicTagVector{out_params->key_exchange}); 553 out->SetVector(kKEXS, QuicTagVector{out_params->key_exchange});
556 554
557 if (!tb_key_params.empty() && 555 if (!tb_key_params.empty() &&
558 server_id.privacy_mode() == PRIVACY_MODE_DISABLED) { 556 server_id.privacy_mode() == PRIVACY_MODE_DISABLED) {
559 const QuicTag* their_tbkps; 557 QuicTagVector their_tbkps;
560 size_t num_their_tbkps; 558 switch (scfg->GetTaglist(kTBKP, &their_tbkps)) {
561 switch (scfg->GetTaglist(kTBKP, &their_tbkps, &num_their_tbkps)) {
562 case QUIC_CRYPTO_MESSAGE_PARAMETER_NOT_FOUND: 559 case QUIC_CRYPTO_MESSAGE_PARAMETER_NOT_FOUND:
563 break; 560 break;
564 case QUIC_NO_ERROR: 561 case QUIC_NO_ERROR:
565 if (FindMutualQuicTag(tb_key_params, their_tbkps, num_their_tbkps, 562 if (FindMutualQuicTag(tb_key_params, their_tbkps.data(),
563 their_tbkps.size(),
566 &out_params->token_binding_key_param, nullptr)) { 564 &out_params->token_binding_key_param, nullptr)) {
567 out->SetVector(kTBKP, 565 out->SetVector(kTBKP,
568 QuicTagVector{out_params->token_binding_key_param}); 566 QuicTagVector{out_params->token_binding_key_param});
569 } 567 }
570 break; 568 break;
571 default: 569 default:
572 *error_details = "Invalid TBKP"; 570 *error_details = "Invalid TBKP";
573 return QUIC_INVALID_CRYPTO_MESSAGE_PARAMETER; 571 return QUIC_INVALID_CRYPTO_MESSAGE_PARAMETER;
574 } 572 }
575 } 573 }
(...skipping 417 matching lines...) Expand 10 before | Expand all | Expand 10 after
993 } 991 }
994 992
995 // Update canonical version to point at the "most recent" entry. 993 // Update canonical version to point at the "most recent" entry.
996 canonical_server_map_[suffix_server_id] = server_id; 994 canonical_server_map_[suffix_server_id] = server_id;
997 995
998 server_state->InitializeFrom(*canonical_state); 996 server_state->InitializeFrom(*canonical_state);
999 return true; 997 return true;
1000 } 998 }
1001 999
1002 } // namespace net 1000 } // namespace net
OLDNEW

Powered by Google App Engine
This is Rietveld 408576698