| OLD | NEW |
| 1 // Copyright (c) 2013 The Chromium Authors. All rights reserved. | 1 // Copyright (c) 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 <algorithm> | 5 #include <algorithm> |
| 6 #include <cstdint> | 6 #include <cstdint> |
| 7 #include <memory> | 7 #include <memory> |
| 8 #include <ostream> | 8 #include <ostream> |
| 9 #include <vector> | 9 #include <vector> |
| 10 | 10 |
| (...skipping 131 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 142 | 142 |
| 143 char public_value[32]; | 143 char public_value[32]; |
| 144 memset(public_value, 42, sizeof(public_value)); | 144 memset(public_value, 42, sizeof(public_value)); |
| 145 | 145 |
| 146 nonce_hex_ = "#" + QuicUtils::HexEncode(GenerateNonce()); | 146 nonce_hex_ = "#" + QuicUtils::HexEncode(GenerateNonce()); |
| 147 pub_hex_ = "#" + QuicUtils::HexEncode(public_value, sizeof(public_value)); | 147 pub_hex_ = "#" + QuicUtils::HexEncode(public_value, sizeof(public_value)); |
| 148 | 148 |
| 149 // clang-format off | 149 // clang-format off |
| 150 CryptoHandshakeMessage client_hello = CryptoTestUtils::Message( | 150 CryptoHandshakeMessage client_hello = CryptoTestUtils::Message( |
| 151 "CHLO", | 151 "CHLO", |
| 152 "PDMD", "X509", |
| 152 "AEAD", "AESG", | 153 "AEAD", "AESG", |
| 153 "KEXS", "C255", | 154 "KEXS", "C255", |
| 154 "PUBS", pub_hex_.c_str(), | 155 "PUBS", pub_hex_.c_str(), |
| 155 "NONC", nonce_hex_.c_str(), | 156 "NONC", nonce_hex_.c_str(), |
| 156 "CSCT", "", | 157 "CSCT", "", |
| 157 "VER\0", client_version_string_.c_str(), | 158 "VER\0", client_version_string_.c_str(), |
| 158 "$padding", static_cast<int>(kClientHelloMinimumSize), | 159 "$padding", static_cast<int>(kClientHelloMinimumSize), |
| 159 nullptr); | 160 nullptr); |
| 160 // clang-format on | 161 // clang-format on |
| 161 ShouldSucceed(client_hello); | 162 ShouldSucceed(client_hello); |
| (...skipping 230 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 392 "#ff00", | 393 "#ff00", |
| 393 "127.0.0.1", | 394 "127.0.0.1", |
| 394 "ffee::1", | 395 "ffee::1", |
| 395 }; | 396 }; |
| 396 // clang-format on | 397 // clang-format on |
| 397 | 398 |
| 398 for (size_t i = 0; i < arraysize(kBadSNIs); i++) { | 399 for (size_t i = 0; i < arraysize(kBadSNIs); i++) { |
| 399 // clang-format off | 400 // clang-format off |
| 400 CryptoHandshakeMessage msg = CryptoTestUtils::Message( | 401 CryptoHandshakeMessage msg = CryptoTestUtils::Message( |
| 401 "CHLO", | 402 "CHLO", |
| 403 "PDMD", "X509", |
| 402 "SNI", kBadSNIs[i], | 404 "SNI", kBadSNIs[i], |
| 403 "VER\0", client_version_string_.c_str(), | 405 "VER\0", client_version_string_.c_str(), |
| 404 "$padding", static_cast<int>(kClientHelloMinimumSize), | 406 "$padding", static_cast<int>(kClientHelloMinimumSize), |
| 405 nullptr); | 407 nullptr); |
| 406 // clang-format on | 408 // clang-format on |
| 407 ShouldFailMentioning("SNI", msg); | 409 ShouldFailMentioning("SNI", msg); |
| 408 const HandshakeFailureReason kRejectReasons[] = { | 410 const HandshakeFailureReason kRejectReasons[] = { |
| 409 SERVER_CONFIG_INCHOATE_HELLO_FAILURE}; | 411 SERVER_CONFIG_INCHOATE_HELLO_FAILURE}; |
| 410 CheckRejectReasons(kRejectReasons, arraysize(kRejectReasons)); | 412 CheckRejectReasons(kRejectReasons, arraysize(kRejectReasons)); |
| 411 } | 413 } |
| (...skipping 29 matching lines...) Expand all Loading... |
| 441 CheckRejectReasons(kRejectReasons, arraysize(kRejectReasons)); | 443 CheckRejectReasons(kRejectReasons, arraysize(kRejectReasons)); |
| 442 EXPECT_EQ(client_version_ > QUIC_VERSION_29, cert_sct.size() > 0); | 444 EXPECT_EQ(client_version_ > QUIC_VERSION_29, cert_sct.size() > 0); |
| 443 } | 445 } |
| 444 | 446 |
| 445 TEST_P(CryptoServerTest, RejectTooLarge) { | 447 TEST_P(CryptoServerTest, RejectTooLarge) { |
| 446 // Check that the server replies with no certificate when a CHLO is | 448 // Check that the server replies with no certificate when a CHLO is |
| 447 // constructed with a PDMD but no SKT when the REJ would be too large. | 449 // constructed with a PDMD but no SKT when the REJ would be too large. |
| 448 // clang-format off | 450 // clang-format off |
| 449 CryptoHandshakeMessage msg = CryptoTestUtils::Message( | 451 CryptoHandshakeMessage msg = CryptoTestUtils::Message( |
| 450 "CHLO", | 452 "CHLO", |
| 453 "PDMD", "X509", |
| 451 "AEAD", "AESG", | 454 "AEAD", "AESG", |
| 452 "KEXS", "C255", | 455 "KEXS", "C255", |
| 453 "PUBS", pub_hex_.c_str(), | 456 "PUBS", pub_hex_.c_str(), |
| 454 "NONC", nonce_hex_.c_str(), | 457 "NONC", nonce_hex_.c_str(), |
| 455 "PDMD", "X509", | 458 "PDMD", "X509", |
| 456 "VER\0", client_version_string_.c_str(), | 459 "VER\0", client_version_string_.c_str(), |
| 457 "$padding", static_cast<int>(kClientHelloMinimumSize), | 460 "$padding", static_cast<int>(kClientHelloMinimumSize), |
| 458 nullptr); | 461 nullptr); |
| 459 // clang-format on | 462 // clang-format on |
| 460 | 463 |
| 461 // The REJ will be larger than the CHLO so no PROF or CRT will be sent. | 464 // The REJ will be larger than the CHLO so no PROF or CRT will be sent. |
| 462 config_.set_chlo_multiplier(1); | 465 config_.set_chlo_multiplier(1); |
| 463 | 466 |
| 464 ShouldSucceed(msg); | 467 ShouldSucceed(msg); |
| 465 StringPiece cert, proof, cert_sct; | 468 StringPiece cert, proof, cert_sct; |
| 466 EXPECT_FALSE(out_.GetStringPiece(kCertificateTag, &cert)); | 469 EXPECT_FALSE(out_.GetStringPiece(kCertificateTag, &cert)); |
| 467 EXPECT_FALSE(out_.GetStringPiece(kPROF, &proof)); | 470 EXPECT_FALSE(out_.GetStringPiece(kPROF, &proof)); |
| 468 EXPECT_FALSE(out_.GetStringPiece(kCertificateSCTTag, &cert_sct)); | 471 EXPECT_FALSE(out_.GetStringPiece(kCertificateSCTTag, &cert_sct)); |
| 469 const HandshakeFailureReason kRejectReasons[] = { | 472 const HandshakeFailureReason kRejectReasons[] = { |
| 470 SERVER_CONFIG_INCHOATE_HELLO_FAILURE}; | 473 SERVER_CONFIG_INCHOATE_HELLO_FAILURE}; |
| 471 CheckRejectReasons(kRejectReasons, arraysize(kRejectReasons)); | 474 CheckRejectReasons(kRejectReasons, arraysize(kRejectReasons)); |
| 472 } | 475 } |
| 473 | 476 |
| 474 TEST_P(CryptoServerTest, RejectTooLargeButValidSTK) { | 477 TEST_P(CryptoServerTest, RejectTooLargeButValidSTK) { |
| 475 // Check that the server replies with no certificate when a CHLO is | 478 // Check that the server replies with no certificate when a CHLO is |
| 476 // constructed with a PDMD but no SKT when the REJ would be too large. | 479 // constructed with a PDMD but no SKT when the REJ would be too large. |
| 477 // clang-format off | 480 // clang-format off |
| 478 CryptoHandshakeMessage msg = CryptoTestUtils::Message( | 481 CryptoHandshakeMessage msg = CryptoTestUtils::Message( |
| 479 "CHLO", | 482 "CHLO", |
| 483 "PDMD", "X509", |
| 480 "AEAD", "AESG", | 484 "AEAD", "AESG", |
| 481 "KEXS", "C255", | 485 "KEXS", "C255", |
| 482 "PUBS", pub_hex_.c_str(), | 486 "PUBS", pub_hex_.c_str(), |
| 483 "NONC", nonce_hex_.c_str(), | 487 "NONC", nonce_hex_.c_str(), |
| 484 "#004b5453", srct_hex_.c_str(), | 488 "#004b5453", srct_hex_.c_str(), |
| 485 "PDMD", "X509", | 489 "PDMD", "X509", |
| 486 "VER\0", client_version_string_.c_str(), | 490 "VER\0", client_version_string_.c_str(), |
| 487 "$padding", static_cast<int>(kClientHelloMinimumSize), | 491 "$padding", static_cast<int>(kClientHelloMinimumSize), |
| 488 nullptr); | 492 nullptr); |
| 489 // clang-format on | 493 // clang-format on |
| (...skipping 11 matching lines...) Expand all Loading... |
| 501 EXPECT_NE(0u, proof.size()); | 505 EXPECT_NE(0u, proof.size()); |
| 502 const HandshakeFailureReason kRejectReasons[] = { | 506 const HandshakeFailureReason kRejectReasons[] = { |
| 503 SERVER_CONFIG_INCHOATE_HELLO_FAILURE}; | 507 SERVER_CONFIG_INCHOATE_HELLO_FAILURE}; |
| 504 CheckRejectReasons(kRejectReasons, arraysize(kRejectReasons)); | 508 CheckRejectReasons(kRejectReasons, arraysize(kRejectReasons)); |
| 505 } | 509 } |
| 506 | 510 |
| 507 TEST_P(CryptoServerTest, TooSmall) { | 511 TEST_P(CryptoServerTest, TooSmall) { |
| 508 // clang-format off | 512 // clang-format off |
| 509 ShouldFailMentioning("too small", CryptoTestUtils::Message( | 513 ShouldFailMentioning("too small", CryptoTestUtils::Message( |
| 510 "CHLO", | 514 "CHLO", |
| 515 "PDMD", "X509", |
| 511 "VER\0", client_version_string_.c_str(), | 516 "VER\0", client_version_string_.c_str(), |
| 512 nullptr)); | 517 nullptr)); |
| 513 // clang-format on | 518 // clang-format on |
| 514 const HandshakeFailureReason kRejectReasons[] = { | 519 const HandshakeFailureReason kRejectReasons[] = { |
| 515 SERVER_CONFIG_INCHOATE_HELLO_FAILURE}; | 520 SERVER_CONFIG_INCHOATE_HELLO_FAILURE}; |
| 516 CheckRejectReasons(kRejectReasons, arraysize(kRejectReasons)); | 521 CheckRejectReasons(kRejectReasons, arraysize(kRejectReasons)); |
| 517 } | 522 } |
| 518 | 523 |
| 519 TEST_P(CryptoServerTest, BadSourceAddressToken) { | 524 TEST_P(CryptoServerTest, BadSourceAddressToken) { |
| 520 // Invalid source-address tokens should be ignored. | 525 // Invalid source-address tokens should be ignored. |
| 521 // clang-format off | 526 // clang-format off |
| 522 static const char* const kBadSourceAddressTokens[] = { | 527 static const char* const kBadSourceAddressTokens[] = { |
| 523 "", | 528 "", |
| 524 "foo", | 529 "foo", |
| 525 "#0000", | 530 "#0000", |
| 526 "#0000000000000000000000000000000000000000", | 531 "#0000000000000000000000000000000000000000", |
| 527 }; | 532 }; |
| 528 // clang-format on | 533 // clang-format on |
| 529 | 534 |
| 530 for (size_t i = 0; i < arraysize(kBadSourceAddressTokens); i++) { | 535 for (size_t i = 0; i < arraysize(kBadSourceAddressTokens); i++) { |
| 531 // clang-format off | 536 // clang-format off |
| 532 CryptoHandshakeMessage msg = CryptoTestUtils::Message( | 537 CryptoHandshakeMessage msg = CryptoTestUtils::Message( |
| 533 "CHLO", | 538 "CHLO", |
| 539 "PDMD", "X509", |
| 534 "STK", kBadSourceAddressTokens[i], | 540 "STK", kBadSourceAddressTokens[i], |
| 535 "VER\0", client_version_string_.c_str(), | 541 "VER\0", client_version_string_.c_str(), |
| 536 "$padding", static_cast<int>(kClientHelloMinimumSize), nullptr); | 542 "$padding", static_cast<int>(kClientHelloMinimumSize), nullptr); |
| 537 // clang-format on | 543 // clang-format on |
| 538 ShouldSucceed(msg); | 544 ShouldSucceed(msg); |
| 539 const HandshakeFailureReason kRejectReasons[] = { | 545 const HandshakeFailureReason kRejectReasons[] = { |
| 540 SERVER_CONFIG_INCHOATE_HELLO_FAILURE}; | 546 SERVER_CONFIG_INCHOATE_HELLO_FAILURE}; |
| 541 CheckRejectReasons(kRejectReasons, arraysize(kRejectReasons)); | 547 CheckRejectReasons(kRejectReasons, arraysize(kRejectReasons)); |
| 542 } | 548 } |
| 543 } | 549 } |
| 544 | 550 |
| 545 TEST_P(CryptoServerTest, BadClientNonce) { | 551 TEST_P(CryptoServerTest, BadClientNonce) { |
| 546 // clang-format off | 552 // clang-format off |
| 547 static const char* const kBadNonces[] = { | 553 static const char* const kBadNonces[] = { |
| 548 "", | 554 "", |
| 549 "#0000", | 555 "#0000", |
| 550 "#0000000000000000000000000000000000000000", | 556 "#0000000000000000000000000000000000000000", |
| 551 }; | 557 }; |
| 552 // clang-format on | 558 // clang-format on |
| 553 | 559 |
| 554 for (size_t i = 0; i < arraysize(kBadNonces); i++) { | 560 for (size_t i = 0; i < arraysize(kBadNonces); i++) { |
| 555 // Invalid nonces should be ignored, in an inchoate CHLO. | 561 // Invalid nonces should be ignored, in an inchoate CHLO. |
| 556 // clang-format off | 562 // clang-format off |
| 557 CryptoHandshakeMessage msg = CryptoTestUtils::Message( | 563 CryptoHandshakeMessage msg = CryptoTestUtils::Message( |
| 558 "CHLO", | 564 "CHLO", |
| 565 "PDMD", "X509", |
| 559 "NONC", kBadNonces[i], | 566 "NONC", kBadNonces[i], |
| 560 "VER\0", client_version_string_.c_str(), | 567 "VER\0", client_version_string_.c_str(), |
| 561 "$padding", static_cast<int>(kClientHelloMinimumSize), | 568 "$padding", static_cast<int>(kClientHelloMinimumSize), |
| 562 nullptr); | 569 nullptr); |
| 563 // clang-format on | 570 // clang-format on |
| 564 ShouldSucceed(msg); | 571 ShouldSucceed(msg); |
| 565 const HandshakeFailureReason kRejectReasons[] = { | 572 const HandshakeFailureReason kRejectReasons[] = { |
| 566 SERVER_CONFIG_INCHOATE_HELLO_FAILURE}; | 573 SERVER_CONFIG_INCHOATE_HELLO_FAILURE}; |
| 567 CheckRejectReasons(kRejectReasons, arraysize(kRejectReasons)); | 574 CheckRejectReasons(kRejectReasons, arraysize(kRejectReasons)); |
| 568 | 575 |
| 569 // Invalid nonces should result in CLIENT_NONCE_INVALID_FAILURE. | 576 // Invalid nonces should result in CLIENT_NONCE_INVALID_FAILURE. |
| 570 // clang-format off | 577 // clang-format off |
| 571 CryptoHandshakeMessage msg1 = CryptoTestUtils::Message( | 578 CryptoHandshakeMessage msg1 = CryptoTestUtils::Message( |
| 572 "CHLO", | 579 "CHLO", |
| 580 "PDMD", "X509", |
| 573 "AEAD", "AESG", | 581 "AEAD", "AESG", |
| 574 "KEXS", "C255", | 582 "KEXS", "C255", |
| 575 "SCID", scid_hex_.c_str(), | 583 "SCID", scid_hex_.c_str(), |
| 576 "#004b5453", srct_hex_.c_str(), | 584 "#004b5453", srct_hex_.c_str(), |
| 577 "PUBS", pub_hex_.c_str(), | 585 "PUBS", pub_hex_.c_str(), |
| 578 "NONC", kBadNonces[i], | 586 "NONC", kBadNonces[i], |
| 579 "NONP", kBadNonces[i], | 587 "NONP", kBadNonces[i], |
| 580 "XLCT", XlctHexString().c_str(), | 588 "XLCT", XlctHexString().c_str(), |
| 581 "VER\0", client_version_string_.c_str(), | 589 "VER\0", client_version_string_.c_str(), |
| 582 "$padding", static_cast<int>(kClientHelloMinimumSize), | 590 "$padding", static_cast<int>(kClientHelloMinimumSize), |
| 583 nullptr); | 591 nullptr); |
| 584 // clang-format on | 592 // clang-format on |
| 585 | 593 |
| 586 ShouldSucceed(msg1); | 594 ShouldSucceed(msg1); |
| 587 | 595 |
| 588 CheckRejectTag(); | 596 CheckRejectTag(); |
| 589 const HandshakeFailureReason kRejectReasons1[] = { | 597 const HandshakeFailureReason kRejectReasons1[] = { |
| 590 CLIENT_NONCE_INVALID_FAILURE}; | 598 CLIENT_NONCE_INVALID_FAILURE}; |
| 591 CheckRejectReasons(kRejectReasons1, arraysize(kRejectReasons1)); | 599 CheckRejectReasons(kRejectReasons1, arraysize(kRejectReasons1)); |
| 592 } | 600 } |
| 593 } | 601 } |
| 594 | 602 |
| 595 TEST_P(CryptoServerTest, NoClientNonce) { | 603 TEST_P(CryptoServerTest, NoClientNonce) { |
| 596 // No client nonces should result in INCHOATE_HELLO_FAILURE. | 604 // No client nonces should result in INCHOATE_HELLO_FAILURE. |
| 597 // clang-format off | 605 // clang-format off |
| 598 CryptoHandshakeMessage msg = CryptoTestUtils::Message( | 606 CryptoHandshakeMessage msg = CryptoTestUtils::Message( |
| 599 "CHLO", | 607 "CHLO", |
| 608 "PDMD", "X509", |
| 600 "VER\0", client_version_string_.c_str(), | 609 "VER\0", client_version_string_.c_str(), |
| 601 "$padding", static_cast<int>(kClientHelloMinimumSize), | 610 "$padding", static_cast<int>(kClientHelloMinimumSize), |
| 602 nullptr); | 611 nullptr); |
| 603 // clang-format on | 612 // clang-format on |
| 604 | 613 |
| 605 ShouldSucceed(msg); | 614 ShouldSucceed(msg); |
| 606 const HandshakeFailureReason kRejectReasons[] = { | 615 const HandshakeFailureReason kRejectReasons[] = { |
| 607 SERVER_CONFIG_INCHOATE_HELLO_FAILURE}; | 616 SERVER_CONFIG_INCHOATE_HELLO_FAILURE}; |
| 608 CheckRejectReasons(kRejectReasons, arraysize(kRejectReasons)); | 617 CheckRejectReasons(kRejectReasons, arraysize(kRejectReasons)); |
| 609 | 618 |
| 610 // clang-format off | 619 // clang-format off |
| 611 CryptoHandshakeMessage msg1 = CryptoTestUtils::Message( | 620 CryptoHandshakeMessage msg1 = CryptoTestUtils::Message( |
| 612 "CHLO", | 621 "CHLO", |
| 622 "PDMD", "X509", |
| 613 "AEAD", "AESG", | 623 "AEAD", "AESG", |
| 614 "KEXS", "C255", | 624 "KEXS", "C255", |
| 615 "SCID", scid_hex_.c_str(), | 625 "SCID", scid_hex_.c_str(), |
| 616 "#004b5453", srct_hex_.c_str(), | 626 "#004b5453", srct_hex_.c_str(), |
| 617 "PUBS", pub_hex_.c_str(), | 627 "PUBS", pub_hex_.c_str(), |
| 618 "XLCT", XlctHexString().c_str(), | 628 "XLCT", XlctHexString().c_str(), |
| 619 "VER\0", client_version_string_.c_str(), | 629 "VER\0", client_version_string_.c_str(), |
| 620 "$padding", static_cast<int>(kClientHelloMinimumSize), | 630 "$padding", static_cast<int>(kClientHelloMinimumSize), |
| 621 nullptr); | 631 nullptr); |
| 622 // clang-format on | 632 // clang-format on |
| (...skipping 11 matching lines...) Expand all Loading... |
| 634 return; | 644 return; |
| 635 } | 645 } |
| 636 // Set the client's preferred version to a supported version that | 646 // Set the client's preferred version to a supported version that |
| 637 // is not the "current" version (supported_versions_.front()). | 647 // is not the "current" version (supported_versions_.front()). |
| 638 string bad_version = | 648 string bad_version = |
| 639 QuicUtils::TagToString(QuicVersionToQuicTag(supported_versions_.back())); | 649 QuicUtils::TagToString(QuicVersionToQuicTag(supported_versions_.back())); |
| 640 | 650 |
| 641 // clang-format off | 651 // clang-format off |
| 642 CryptoHandshakeMessage msg = CryptoTestUtils::Message( | 652 CryptoHandshakeMessage msg = CryptoTestUtils::Message( |
| 643 "CHLO", | 653 "CHLO", |
| 654 "PDMD", "X509", |
| 644 "VER\0", bad_version.c_str(), | 655 "VER\0", bad_version.c_str(), |
| 645 "$padding", static_cast<int>(kClientHelloMinimumSize), | 656 "$padding", static_cast<int>(kClientHelloMinimumSize), |
| 646 nullptr); | 657 nullptr); |
| 647 // clang-format on | 658 // clang-format on |
| 648 ShouldFailMentioning("Downgrade", msg); | 659 ShouldFailMentioning("Downgrade", msg); |
| 649 const HandshakeFailureReason kRejectReasons[] = { | 660 const HandshakeFailureReason kRejectReasons[] = { |
| 650 SERVER_CONFIG_INCHOATE_HELLO_FAILURE}; | 661 SERVER_CONFIG_INCHOATE_HELLO_FAILURE}; |
| 651 CheckRejectReasons(kRejectReasons, arraysize(kRejectReasons)); | 662 CheckRejectReasons(kRejectReasons, arraysize(kRejectReasons)); |
| 652 } | 663 } |
| 653 | 664 |
| 654 TEST_P(CryptoServerTest, CorruptServerConfig) { | 665 TEST_P(CryptoServerTest, CorruptServerConfig) { |
| 655 // This tests corrupted server config. | 666 // This tests corrupted server config. |
| 656 // clang-format off | 667 // clang-format off |
| 657 CryptoHandshakeMessage msg = CryptoTestUtils::Message( | 668 CryptoHandshakeMessage msg = CryptoTestUtils::Message( |
| 658 "CHLO", | 669 "CHLO", |
| 670 "PDMD", "X509", |
| 659 "AEAD", "AESG", | 671 "AEAD", "AESG", |
| 660 "KEXS", "C255", | 672 "KEXS", "C255", |
| 661 "SCID", (string(1, 'X') + scid_hex_).c_str(), | 673 "SCID", (string(1, 'X') + scid_hex_).c_str(), |
| 662 "#004b5453", srct_hex_.c_str(), | 674 "#004b5453", srct_hex_.c_str(), |
| 663 "PUBS", pub_hex_.c_str(), | 675 "PUBS", pub_hex_.c_str(), |
| 664 "NONC", nonce_hex_.c_str(), | 676 "NONC", nonce_hex_.c_str(), |
| 665 "VER\0", client_version_string_.c_str(), | 677 "VER\0", client_version_string_.c_str(), |
| 666 "$padding", static_cast<int>(kClientHelloMinimumSize), | 678 "$padding", static_cast<int>(kClientHelloMinimumSize), |
| 667 nullptr); | 679 nullptr); |
| 668 // clang-format on | 680 // clang-format on |
| 669 ShouldSucceed(msg); | 681 ShouldSucceed(msg); |
| 670 CheckRejectTag(); | 682 CheckRejectTag(); |
| 671 const HandshakeFailureReason kRejectReasons[] = { | 683 const HandshakeFailureReason kRejectReasons[] = { |
| 672 SERVER_CONFIG_UNKNOWN_CONFIG_FAILURE}; | 684 SERVER_CONFIG_UNKNOWN_CONFIG_FAILURE}; |
| 673 CheckRejectReasons(kRejectReasons, arraysize(kRejectReasons)); | 685 CheckRejectReasons(kRejectReasons, arraysize(kRejectReasons)); |
| 674 } | 686 } |
| 675 | 687 |
| 676 TEST_P(CryptoServerTest, CorruptSourceAddressToken) { | 688 TEST_P(CryptoServerTest, CorruptSourceAddressToken) { |
| 677 // This tests corrupted source address token. | 689 // This tests corrupted source address token. |
| 678 // clang-format off | 690 // clang-format off |
| 679 CryptoHandshakeMessage msg = CryptoTestUtils::Message( | 691 CryptoHandshakeMessage msg = CryptoTestUtils::Message( |
| 680 "CHLO", | 692 "CHLO", |
| 693 "PDMD", "X509", |
| 681 "AEAD", "AESG", | 694 "AEAD", "AESG", |
| 682 "KEXS", "C255", | 695 "KEXS", "C255", |
| 683 "SCID", scid_hex_.c_str(), | 696 "SCID", scid_hex_.c_str(), |
| 684 "#004b5453", (string(1, 'X') + srct_hex_).c_str(), | 697 "#004b5453", (string(1, 'X') + srct_hex_).c_str(), |
| 685 "PUBS", pub_hex_.c_str(), | 698 "PUBS", pub_hex_.c_str(), |
| 686 "NONC", nonce_hex_.c_str(), | 699 "NONC", nonce_hex_.c_str(), |
| 687 "XLCT", XlctHexString().c_str(), | 700 "XLCT", XlctHexString().c_str(), |
| 688 "VER\0", client_version_string_.c_str(), | 701 "VER\0", client_version_string_.c_str(), |
| 689 "$padding", static_cast<int>(kClientHelloMinimumSize), | 702 "$padding", static_cast<int>(kClientHelloMinimumSize), |
| 690 nullptr); | 703 nullptr); |
| 691 // clang-format on | 704 // clang-format on |
| 692 ShouldSucceed(msg); | 705 ShouldSucceed(msg); |
| 693 CheckRejectTag(); | 706 CheckRejectTag(); |
| 694 const HandshakeFailureReason kRejectReasons[] = { | 707 const HandshakeFailureReason kRejectReasons[] = { |
| 695 SOURCE_ADDRESS_TOKEN_DECRYPTION_FAILURE}; | 708 SOURCE_ADDRESS_TOKEN_DECRYPTION_FAILURE}; |
| 696 CheckRejectReasons(kRejectReasons, arraysize(kRejectReasons)); | 709 CheckRejectReasons(kRejectReasons, arraysize(kRejectReasons)); |
| 697 } | 710 } |
| 698 | 711 |
| 699 TEST_P(CryptoServerTest, CorruptClientNonceAndSourceAddressToken) { | 712 TEST_P(CryptoServerTest, CorruptClientNonceAndSourceAddressToken) { |
| 700 // This test corrupts client nonce and source address token. | 713 // This test corrupts client nonce and source address token. |
| 701 // clang-format off | 714 // clang-format off |
| 702 CryptoHandshakeMessage msg = CryptoTestUtils::Message( | 715 CryptoHandshakeMessage msg = CryptoTestUtils::Message( |
| 703 "CHLO", | 716 "CHLO", |
| 717 "PDMD", "X509", |
| 704 "AEAD", "AESG", | 718 "AEAD", "AESG", |
| 705 "KEXS", "C255", | 719 "KEXS", "C255", |
| 706 "SCID", scid_hex_.c_str(), | 720 "SCID", scid_hex_.c_str(), |
| 707 "#004b5453", (string(1, 'X') + srct_hex_).c_str(), | 721 "#004b5453", (string(1, 'X') + srct_hex_).c_str(), |
| 708 "PUBS", pub_hex_.c_str(), | 722 "PUBS", pub_hex_.c_str(), |
| 709 "NONC", (string(1, 'X') + nonce_hex_).c_str(), | 723 "NONC", (string(1, 'X') + nonce_hex_).c_str(), |
| 710 "XLCT", XlctHexString().c_str(), | 724 "XLCT", XlctHexString().c_str(), |
| 711 "VER\0", client_version_string_.c_str(), | 725 "VER\0", client_version_string_.c_str(), |
| 712 "$padding", static_cast<int>(kClientHelloMinimumSize), | 726 "$padding", static_cast<int>(kClientHelloMinimumSize), |
| 713 nullptr); | 727 nullptr); |
| 714 // clang-format on | 728 // clang-format on |
| 715 ShouldSucceed(msg); | 729 ShouldSucceed(msg); |
| 716 CheckRejectTag(); | 730 CheckRejectTag(); |
| 717 const HandshakeFailureReason kRejectReasons[] = { | 731 const HandshakeFailureReason kRejectReasons[] = { |
| 718 SOURCE_ADDRESS_TOKEN_DECRYPTION_FAILURE, CLIENT_NONCE_INVALID_FAILURE}; | 732 SOURCE_ADDRESS_TOKEN_DECRYPTION_FAILURE, CLIENT_NONCE_INVALID_FAILURE}; |
| 719 CheckRejectReasons(kRejectReasons, arraysize(kRejectReasons)); | 733 CheckRejectReasons(kRejectReasons, arraysize(kRejectReasons)); |
| 720 } | 734 } |
| 721 | 735 |
| 722 TEST_P(CryptoServerTest, CorruptMultipleTags) { | 736 TEST_P(CryptoServerTest, CorruptMultipleTags) { |
| 723 // This test corrupts client nonce, server nonce and source address token. | 737 // This test corrupts client nonce, server nonce and source address token. |
| 724 // clang-format off | 738 // clang-format off |
| 725 CryptoHandshakeMessage msg = CryptoTestUtils::Message( | 739 CryptoHandshakeMessage msg = CryptoTestUtils::Message( |
| 726 "CHLO", | 740 "CHLO", |
| 741 "PDMD", "X509", |
| 727 "AEAD", "AESG", | 742 "AEAD", "AESG", |
| 728 "KEXS", "C255", | 743 "KEXS", "C255", |
| 729 "SCID", scid_hex_.c_str(), | 744 "SCID", scid_hex_.c_str(), |
| 730 "#004b5453", (string(1, 'X') + srct_hex_).c_str(), | 745 "#004b5453", (string(1, 'X') + srct_hex_).c_str(), |
| 731 "PUBS", pub_hex_.c_str(), | 746 "PUBS", pub_hex_.c_str(), |
| 732 "NONC", (string(1, 'X') + nonce_hex_).c_str(), | 747 "NONC", (string(1, 'X') + nonce_hex_).c_str(), |
| 733 "NONP", (string(1, 'X') + nonce_hex_).c_str(), | 748 "NONP", (string(1, 'X') + nonce_hex_).c_str(), |
| 734 "SNO\0", (string(1, 'X') + nonce_hex_).c_str(), | 749 "SNO\0", (string(1, 'X') + nonce_hex_).c_str(), |
| 735 "XLCT", XlctHexString().c_str(), | 750 "XLCT", XlctHexString().c_str(), |
| 736 "VER\0", client_version_string_.c_str(), | 751 "VER\0", client_version_string_.c_str(), |
| (...skipping 14 matching lines...) Expand all Loading... |
| 751 CheckRejectReasons(kRejectReasons, arraysize(kRejectReasons)); | 766 CheckRejectReasons(kRejectReasons, arraysize(kRejectReasons)); |
| 752 }; | 767 }; |
| 753 } | 768 } |
| 754 | 769 |
| 755 TEST_P(CryptoServerTest, NoServerNonce) { | 770 TEST_P(CryptoServerTest, NoServerNonce) { |
| 756 // When no server nonce is present and no strike register is configured, | 771 // When no server nonce is present and no strike register is configured, |
| 757 // the CHLO should be rejected. | 772 // the CHLO should be rejected. |
| 758 // clang-format off | 773 // clang-format off |
| 759 CryptoHandshakeMessage msg = CryptoTestUtils::Message( | 774 CryptoHandshakeMessage msg = CryptoTestUtils::Message( |
| 760 "CHLO", | 775 "CHLO", |
| 776 "PDMD", "X509", |
| 761 "AEAD", "AESG", | 777 "AEAD", "AESG", |
| 762 "KEXS", "C255", | 778 "KEXS", "C255", |
| 763 "SCID", scid_hex_.c_str(), | 779 "SCID", scid_hex_.c_str(), |
| 764 "#004b5453", srct_hex_.c_str(), | 780 "#004b5453", srct_hex_.c_str(), |
| 765 "PUBS", pub_hex_.c_str(), | 781 "PUBS", pub_hex_.c_str(), |
| 766 "NONC", nonce_hex_.c_str(), | 782 "NONC", nonce_hex_.c_str(), |
| 767 "NONP", nonce_hex_.c_str(), | 783 "NONP", nonce_hex_.c_str(), |
| 768 "XLCT", XlctHexString().c_str(), | 784 "XLCT", XlctHexString().c_str(), |
| 769 "VER\0", client_version_string_.c_str(), | 785 "VER\0", client_version_string_.c_str(), |
| 770 "$padding", static_cast<int>(kClientHelloMinimumSize), | 786 "$padding", static_cast<int>(kClientHelloMinimumSize), |
| (...skipping 58 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 829 ASSERT_TRUE(CertCompressor::DecompressChain(cert, cached_certs, | 845 ASSERT_TRUE(CertCompressor::DecompressChain(cert, cached_certs, |
| 830 common_cert_sets, &certs)); | 846 common_cert_sets, &certs)); |
| 831 | 847 |
| 832 // Check that the proof in the REJ message is valid. | 848 // Check that the proof in the REJ message is valid. |
| 833 std::unique_ptr<ProofVerifier> proof_verifier( | 849 std::unique_ptr<ProofVerifier> proof_verifier( |
| 834 CryptoTestUtils::ProofVerifierForTesting()); | 850 CryptoTestUtils::ProofVerifierForTesting()); |
| 835 std::unique_ptr<ProofVerifyContext> verify_context( | 851 std::unique_ptr<ProofVerifyContext> verify_context( |
| 836 CryptoTestUtils::ProofVerifyContextForTesting()); | 852 CryptoTestUtils::ProofVerifyContextForTesting()); |
| 837 std::unique_ptr<ProofVerifyDetails> details; | 853 std::unique_ptr<ProofVerifyDetails> details; |
| 838 string error_details; | 854 string error_details; |
| 839 DummyProofVerifierCallback callback; | 855 std::unique_ptr<ProofVerifierCallback> callback( |
| 856 new DummyProofVerifierCallback()); |
| 840 string chlo_hash; | 857 string chlo_hash; |
| 841 CryptoUtils::HashHandshakeMessage(msg, &chlo_hash); | 858 CryptoUtils::HashHandshakeMessage(msg, &chlo_hash); |
| 842 EXPECT_EQ(QUIC_SUCCESS, | 859 EXPECT_EQ(QUIC_SUCCESS, |
| 843 proof_verifier->VerifyProof( | 860 proof_verifier->VerifyProof( |
| 844 "test.example.com", 443, scfg_str.as_string(), client_version_, | 861 "test.example.com", 443, scfg_str.as_string(), client_version_, |
| 845 chlo_hash, certs, "", proof.as_string(), verify_context.get(), | 862 chlo_hash, certs, "", proof.as_string(), verify_context.get(), |
| 846 &error_details, &details, &callback)); | 863 &error_details, &details, std::move(callback))); |
| 847 } | 864 } |
| 848 | 865 |
| 849 TEST_P(CryptoServerTest, RejectInvalidXlct) { | 866 TEST_P(CryptoServerTest, RejectInvalidXlct) { |
| 850 if (client_version_ <= QUIC_VERSION_25) { | 867 if (client_version_ <= QUIC_VERSION_25) { |
| 851 // XLCT tag introduced in QUIC_VERSION_26. | 868 // XLCT tag introduced in QUIC_VERSION_26. |
| 852 return; | 869 return; |
| 853 } | 870 } |
| 854 // clang-format off | 871 // clang-format off |
| 855 CryptoHandshakeMessage msg = CryptoTestUtils::Message( | 872 CryptoHandshakeMessage msg = CryptoTestUtils::Message( |
| 856 "CHLO", | 873 "CHLO", |
| 874 "PDMD", "X509", |
| 857 "AEAD", "AESG", | 875 "AEAD", "AESG", |
| 858 "KEXS", "C255", | 876 "KEXS", "C255", |
| 859 "SCID", scid_hex_.c_str(), | 877 "SCID", scid_hex_.c_str(), |
| 860 "#004b5453", srct_hex_.c_str(), | 878 "#004b5453", srct_hex_.c_str(), |
| 861 "PUBS", pub_hex_.c_str(), | 879 "PUBS", pub_hex_.c_str(), |
| 862 "NONC", nonce_hex_.c_str(), | 880 "NONC", nonce_hex_.c_str(), |
| 863 "VER\0", client_version_string_.c_str(), | 881 "VER\0", client_version_string_.c_str(), |
| 864 "XLCT", "#0102030405060708", | 882 "XLCT", "#0102030405060708", |
| 865 "$padding", static_cast<int>(kClientHelloMinimumSize), | 883 "$padding", static_cast<int>(kClientHelloMinimumSize), |
| 866 nullptr); | 884 nullptr); |
| 867 // clang-format on | 885 // clang-format on |
| 868 // If replay protection isn't disabled, then | 886 // If replay protection isn't disabled, then |
| 869 // QuicCryptoServerConfig::EvaluateClientHello will leave info.unique as false | 887 // QuicCryptoServerConfig::EvaluateClientHello will leave info.unique as false |
| 870 // and cause ProcessClientHello to exit early (and generate a REJ message). | 888 // and cause ProcessClientHello to exit early (and generate a REJ message). |
| 871 config_.set_replay_protection(false); | 889 config_.set_replay_protection(false); |
| 872 | 890 |
| 873 ShouldSucceed(msg); | 891 ShouldSucceed(msg); |
| 874 // clang-format off | 892 // clang-format off |
| 875 const HandshakeFailureReason kRejectReasons[] = { | 893 const HandshakeFailureReason kRejectReasons[] = { |
| 876 INVALID_EXPECTED_LEAF_CERTIFICATE | 894 INVALID_EXPECTED_LEAF_CERTIFICATE |
| 877 }; | 895 }; |
| 878 // clang-format on | 896 // clang-format on |
| 879 CheckRejectReasons(kRejectReasons, arraysize(kRejectReasons)); | 897 CheckRejectReasons(kRejectReasons, arraysize(kRejectReasons)); |
| 880 } | 898 } |
| 881 | 899 |
| 882 TEST_P(CryptoServerTest, ValidXlct) { | 900 TEST_P(CryptoServerTest, ValidXlct) { |
| 883 // clang-format off | 901 // clang-format off |
| 884 CryptoHandshakeMessage msg = CryptoTestUtils::Message( | 902 CryptoHandshakeMessage msg = CryptoTestUtils::Message( |
| 885 "CHLO", | 903 "CHLO", |
| 904 "PDMD", "X509", |
| 886 "AEAD", "AESG", | 905 "AEAD", "AESG", |
| 887 "KEXS", "C255", | 906 "KEXS", "C255", |
| 888 "SCID", scid_hex_.c_str(), | 907 "SCID", scid_hex_.c_str(), |
| 889 "#004b5453", srct_hex_.c_str(), | 908 "#004b5453", srct_hex_.c_str(), |
| 890 "PUBS", pub_hex_.c_str(), | 909 "PUBS", pub_hex_.c_str(), |
| 891 "NONC", nonce_hex_.c_str(), | 910 "NONC", nonce_hex_.c_str(), |
| 892 "NONP", "123456789012345678901234567890", | 911 "NONP", "123456789012345678901234567890", |
| 893 "VER\0", client_version_string_.c_str(), | 912 "VER\0", client_version_string_.c_str(), |
| 894 "XLCT", XlctHexString().c_str(), | 913 "XLCT", XlctHexString().c_str(), |
| 895 "$padding", static_cast<int>(kClientHelloMinimumSize), | 914 "$padding", static_cast<int>(kClientHelloMinimumSize), |
| 896 nullptr); | 915 nullptr); |
| 897 // clang-format on | 916 // clang-format on |
| 898 // If replay protection isn't disabled, then | 917 // If replay protection isn't disabled, then |
| 899 // QuicCryptoServerConfig::EvaluateClientHello will leave info.unique as false | 918 // QuicCryptoServerConfig::EvaluateClientHello will leave info.unique as false |
| 900 // and cause ProcessClientHello to exit early (and generate a REJ message). | 919 // and cause ProcessClientHello to exit early (and generate a REJ message). |
| 901 config_.set_replay_protection(false); | 920 config_.set_replay_protection(false); |
| 902 | 921 |
| 903 ShouldSucceed(msg); | 922 ShouldSucceed(msg); |
| 904 EXPECT_EQ(kSHLO, out_.tag()); | 923 EXPECT_EQ(kSHLO, out_.tag()); |
| 905 } | 924 } |
| 906 | 925 |
| 907 TEST_P(CryptoServerTest, NonceInSHLO) { | 926 TEST_P(CryptoServerTest, NonceInSHLO) { |
| 908 // After QUIC_VERSION_27, the SHLO should contain a nonce. | 927 // After QUIC_VERSION_27, the SHLO should contain a nonce. |
| 909 // clang-format off | 928 // clang-format off |
| 910 CryptoHandshakeMessage msg = CryptoTestUtils::Message( | 929 CryptoHandshakeMessage msg = CryptoTestUtils::Message( |
| 911 "CHLO", | 930 "CHLO", |
| 931 "PDMD", "X509", |
| 912 "AEAD", "AESG", | 932 "AEAD", "AESG", |
| 913 "KEXS", "C255", | 933 "KEXS", "C255", |
| 914 "SCID", scid_hex_.c_str(), | 934 "SCID", scid_hex_.c_str(), |
| 915 "#004b5453", srct_hex_.c_str(), | 935 "#004b5453", srct_hex_.c_str(), |
| 916 "PUBS", pub_hex_.c_str(), | 936 "PUBS", pub_hex_.c_str(), |
| 917 "NONC", nonce_hex_.c_str(), | 937 "NONC", nonce_hex_.c_str(), |
| 918 "VER\0", client_version_string_.c_str(), | 938 "VER\0", client_version_string_.c_str(), |
| 919 "XLCT", XlctHexString().c_str(), | 939 "XLCT", XlctHexString().c_str(), |
| 920 "$padding", static_cast<int>(kClientHelloMinimumSize), | 940 "$padding", static_cast<int>(kClientHelloMinimumSize), |
| 921 nullptr); | 941 nullptr); |
| (...skipping 92 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 1014 public: | 1034 public: |
| 1015 void SetUp() override { | 1035 void SetUp() override { |
| 1016 // Deliberately don't add a config so that we can test this situation. | 1036 // Deliberately don't add a config so that we can test this situation. |
| 1017 } | 1037 } |
| 1018 }; | 1038 }; |
| 1019 | 1039 |
| 1020 TEST_P(CryptoServerTestNoConfig, DontCrash) { | 1040 TEST_P(CryptoServerTestNoConfig, DontCrash) { |
| 1021 // clang-format off | 1041 // clang-format off |
| 1022 CryptoHandshakeMessage msg = CryptoTestUtils::Message( | 1042 CryptoHandshakeMessage msg = CryptoTestUtils::Message( |
| 1023 "CHLO", | 1043 "CHLO", |
| 1044 "PDMD", "X509", |
| 1024 "VER\0", client_version_string_.c_str(), | 1045 "VER\0", client_version_string_.c_str(), |
| 1025 "$padding", static_cast<int>(kClientHelloMinimumSize), | 1046 "$padding", static_cast<int>(kClientHelloMinimumSize), |
| 1026 nullptr); | 1047 nullptr); |
| 1027 // clang-format on | 1048 // clang-format on |
| 1028 ShouldFailMentioning("No config", msg); | 1049 ShouldFailMentioning("No config", msg); |
| 1029 | 1050 |
| 1030 const HandshakeFailureReason kRejectReasons[] = { | 1051 const HandshakeFailureReason kRejectReasons[] = { |
| 1031 SERVER_CONFIG_INCHOATE_HELLO_FAILURE}; | 1052 SERVER_CONFIG_INCHOATE_HELLO_FAILURE}; |
| 1032 CheckRejectReasons(kRejectReasons, arraysize(kRejectReasons)); | 1053 CheckRejectReasons(kRejectReasons, arraysize(kRejectReasons)); |
| 1033 } | 1054 } |
| 1034 | 1055 |
| 1035 class CryptoServerTestOldVersion : public CryptoServerTest { | 1056 class CryptoServerTestOldVersion : public CryptoServerTest { |
| 1036 public: | 1057 public: |
| 1037 void SetUp() override { | 1058 void SetUp() override { |
| 1038 client_version_ = supported_versions_.back(); | 1059 client_version_ = supported_versions_.back(); |
| 1039 client_version_string_ = | 1060 client_version_string_ = |
| 1040 QuicUtils::TagToString(QuicVersionToQuicTag(client_version_)); | 1061 QuicUtils::TagToString(QuicVersionToQuicTag(client_version_)); |
| 1041 CryptoServerTest::SetUp(); | 1062 CryptoServerTest::SetUp(); |
| 1042 } | 1063 } |
| 1043 }; | 1064 }; |
| 1044 | 1065 |
| 1045 TEST_P(CryptoServerTestOldVersion, ServerIgnoresXlct) { | 1066 TEST_P(CryptoServerTestOldVersion, ServerIgnoresXlct) { |
| 1046 // clang-format off | 1067 // clang-format off |
| 1047 CryptoHandshakeMessage msg = CryptoTestUtils::Message( | 1068 CryptoHandshakeMessage msg = CryptoTestUtils::Message( |
| 1048 "CHLO", | 1069 "CHLO", |
| 1070 "PDMD", "X509", |
| 1049 "AEAD", "AESG", | 1071 "AEAD", "AESG", |
| 1050 "KEXS", "C255", | 1072 "KEXS", "C255", |
| 1051 "SCID", scid_hex_.c_str(), | 1073 "SCID", scid_hex_.c_str(), |
| 1052 "#004b5453", srct_hex_.c_str(), | 1074 "#004b5453", srct_hex_.c_str(), |
| 1053 "PUBS", pub_hex_.c_str(), | 1075 "PUBS", pub_hex_.c_str(), |
| 1054 "NONC", nonce_hex_.c_str(), | 1076 "NONC", nonce_hex_.c_str(), |
| 1055 "VER\0", client_version_string_.c_str(), | 1077 "VER\0", client_version_string_.c_str(), |
| 1056 "XLCT", "#0100000000000000", | 1078 "XLCT", "#0100000000000000", |
| 1057 "$padding", static_cast<int>(kClientHelloMinimumSize), | 1079 "$padding", static_cast<int>(kClientHelloMinimumSize), |
| 1058 nullptr); | 1080 nullptr); |
| 1059 // clang-format on | 1081 // clang-format on |
| 1060 // If replay protection isn't disabled, then | 1082 // If replay protection isn't disabled, then |
| 1061 // QuicCryptoServerConfig::EvaluateClientHello will leave info.unique as false | 1083 // QuicCryptoServerConfig::EvaluateClientHello will leave info.unique as false |
| 1062 // and cause ProcessClientHello to exit early (and generate a REJ message). | 1084 // and cause ProcessClientHello to exit early (and generate a REJ message). |
| 1063 config_.set_replay_protection(false); | 1085 config_.set_replay_protection(false); |
| 1064 | 1086 |
| 1065 ShouldSucceed(msg); | 1087 ShouldSucceed(msg); |
| 1066 EXPECT_EQ(kSHLO, out_.tag()); | 1088 EXPECT_EQ(kSHLO, out_.tag()); |
| 1067 } | 1089 } |
| 1068 | 1090 |
| 1069 TEST_P(CryptoServerTestOldVersion, XlctNotRequired) { | 1091 TEST_P(CryptoServerTestOldVersion, XlctNotRequired) { |
| 1070 // clang-format off | 1092 // clang-format off |
| 1071 CryptoHandshakeMessage msg = CryptoTestUtils::Message( | 1093 CryptoHandshakeMessage msg = CryptoTestUtils::Message( |
| 1072 "CHLO", | 1094 "CHLO", |
| 1095 "PDMD", "X509", |
| 1073 "AEAD", "AESG", | 1096 "AEAD", "AESG", |
| 1074 "KEXS", "C255", | 1097 "KEXS", "C255", |
| 1075 "SCID", scid_hex_.c_str(), | 1098 "SCID", scid_hex_.c_str(), |
| 1076 "#004b5453", srct_hex_.c_str(), | 1099 "#004b5453", srct_hex_.c_str(), |
| 1077 "PUBS", pub_hex_.c_str(), | 1100 "PUBS", pub_hex_.c_str(), |
| 1078 "NONC", nonce_hex_.c_str(), | 1101 "NONC", nonce_hex_.c_str(), |
| 1079 "VER\0", client_version_string_.c_str(), | 1102 "VER\0", client_version_string_.c_str(), |
| 1080 "$padding", static_cast<int>(kClientHelloMinimumSize), | 1103 "$padding", static_cast<int>(kClientHelloMinimumSize), |
| 1081 nullptr); | 1104 nullptr); |
| 1082 // clang-format on | 1105 // clang-format on |
| (...skipping 25 matching lines...) Expand all Loading... |
| 1108 } | 1131 } |
| 1109 | 1132 |
| 1110 DelayedVerifyStrikeRegisterClient* strike_register_client_; | 1133 DelayedVerifyStrikeRegisterClient* strike_register_client_; |
| 1111 }; | 1134 }; |
| 1112 | 1135 |
| 1113 TEST_P(AsyncStrikeServerVerificationTest, AsyncReplayProtection) { | 1136 TEST_P(AsyncStrikeServerVerificationTest, AsyncReplayProtection) { |
| 1114 // This tests async validation with a strike register works. | 1137 // This tests async validation with a strike register works. |
| 1115 // clang-format off | 1138 // clang-format off |
| 1116 CryptoHandshakeMessage msg = CryptoTestUtils::Message( | 1139 CryptoHandshakeMessage msg = CryptoTestUtils::Message( |
| 1117 "CHLO", | 1140 "CHLO", |
| 1141 "PDMD", "X509", |
| 1118 "AEAD", "AESG", | 1142 "AEAD", "AESG", |
| 1119 "KEXS", "C255", | 1143 "KEXS", "C255", |
| 1120 "SCID", scid_hex_.c_str(), | 1144 "SCID", scid_hex_.c_str(), |
| 1121 "#004b5453", srct_hex_.c_str(), | 1145 "#004b5453", srct_hex_.c_str(), |
| 1122 "PUBS", pub_hex_.c_str(), | 1146 "PUBS", pub_hex_.c_str(), |
| 1123 "NONC", nonce_hex_.c_str(), | 1147 "NONC", nonce_hex_.c_str(), |
| 1124 "VER\0", client_version_string_.c_str(), | 1148 "VER\0", client_version_string_.c_str(), |
| 1125 "$padding", static_cast<int>(kClientHelloMinimumSize), | 1149 "$padding", static_cast<int>(kClientHelloMinimumSize), |
| 1126 nullptr); | 1150 nullptr); |
| 1127 // clang-format on | 1151 // clang-format on |
| (...skipping 28 matching lines...) Expand all Loading... |
| 1156 | 1180 |
| 1157 strike_register_client_->RunPendingVerifications(); | 1181 strike_register_client_->RunPendingVerifications(); |
| 1158 ASSERT_TRUE(called); | 1182 ASSERT_TRUE(called); |
| 1159 EXPECT_EQ(0, strike_register_client_->PendingVerifications()); | 1183 EXPECT_EQ(0, strike_register_client_->PendingVerifications()); |
| 1160 // The message should be rejected now. | 1184 // The message should be rejected now. |
| 1161 CheckRejectTag(); | 1185 CheckRejectTag(); |
| 1162 } | 1186 } |
| 1163 | 1187 |
| 1164 } // namespace test | 1188 } // namespace test |
| 1165 } // namespace net | 1189 } // namespace net |
| OLD | NEW |