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 809 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
820 "NONP", (string(1, 'X') + nonce_hex_).c_str(), | 820 "NONP", (string(1, 'X') + nonce_hex_).c_str(), |
821 "SNO\0", (string(1, 'X') + nonce_hex_).c_str(), | 821 "SNO\0", (string(1, 'X') + nonce_hex_).c_str(), |
822 "XLCT", XlctHexString().c_str(), | 822 "XLCT", XlctHexString().c_str(), |
823 "VER\0", client_version_string_.c_str(), | 823 "VER\0", client_version_string_.c_str(), |
824 "$padding", static_cast<int>(kClientHelloMinimumSize), | 824 "$padding", static_cast<int>(kClientHelloMinimumSize), |
825 nullptr); | 825 nullptr); |
826 // clang-format on | 826 // clang-format on |
827 ShouldSucceed(msg); | 827 ShouldSucceed(msg); |
828 CheckRejectTag(); | 828 CheckRejectTag(); |
829 | 829 |
830 if (client_version_ <= QUIC_VERSION_32) { | 830 const HandshakeFailureReason kRejectReasons[] = { |
831 const HandshakeFailureReason kRejectReasons[] = { | 831 SOURCE_ADDRESS_TOKEN_DECRYPTION_FAILURE, CLIENT_NONCE_INVALID_FAILURE}; |
832 SOURCE_ADDRESS_TOKEN_DECRYPTION_FAILURE, CLIENT_NONCE_INVALID_FAILURE, | 832 CheckRejectReasons(kRejectReasons, arraysize(kRejectReasons)); |
833 SERVER_NONCE_DECRYPTION_FAILURE}; | |
834 CheckRejectReasons(kRejectReasons, arraysize(kRejectReasons)); | |
835 } else { | |
836 const HandshakeFailureReason kRejectReasons[] = { | |
837 SOURCE_ADDRESS_TOKEN_DECRYPTION_FAILURE, CLIENT_NONCE_INVALID_FAILURE}; | |
838 CheckRejectReasons(kRejectReasons, arraysize(kRejectReasons)); | |
839 }; | |
840 } | 833 } |
841 | 834 |
842 TEST_P(CryptoServerTest, NoServerNonce) { | 835 TEST_P(CryptoServerTest, NoServerNonce) { |
843 // When no server nonce is present and no strike register is configured, | 836 // When no server nonce is present and no strike register is configured, |
844 // the CHLO should be rejected. | 837 // the CHLO should be rejected. |
845 // clang-format off | 838 // clang-format off |
846 CryptoHandshakeMessage msg = CryptoTestUtils::Message( | 839 CryptoHandshakeMessage msg = CryptoTestUtils::Message( |
847 "CHLO", | 840 "CHLO", |
848 "PDMD", "X509", | 841 "PDMD", "X509", |
849 "AEAD", "AESG", | 842 "AEAD", "AESG", |
850 "KEXS", "C255", | 843 "KEXS", "C255", |
851 "SCID", scid_hex_.c_str(), | 844 "SCID", scid_hex_.c_str(), |
852 "#004b5453", srct_hex_.c_str(), | 845 "#004b5453", srct_hex_.c_str(), |
853 "PUBS", pub_hex_.c_str(), | 846 "PUBS", pub_hex_.c_str(), |
854 "NONC", nonce_hex_.c_str(), | 847 "NONC", nonce_hex_.c_str(), |
855 "NONP", nonce_hex_.c_str(), | 848 "NONP", nonce_hex_.c_str(), |
856 "XLCT", XlctHexString().c_str(), | 849 "XLCT", XlctHexString().c_str(), |
857 "VER\0", client_version_string_.c_str(), | 850 "VER\0", client_version_string_.c_str(), |
858 "$padding", static_cast<int>(kClientHelloMinimumSize), | 851 "$padding", static_cast<int>(kClientHelloMinimumSize), |
859 nullptr); | 852 nullptr); |
860 // clang-format on | 853 // clang-format on |
861 | 854 |
862 ShouldSucceed(msg); | 855 ShouldSucceed(msg); |
863 | 856 |
864 if (client_version_ <= QUIC_VERSION_32) { | 857 // Even without a server nonce, this ClientHello should be accepted in |
865 CheckRejectTag(); | 858 // version 33. |
866 const HandshakeFailureReason kRejectReasons[] = { | 859 ASSERT_EQ(kSHLO, out_.tag()); |
867 SERVER_NONCE_REQUIRED_FAILURE}; | 860 CheckServerHello(out_); |
868 CheckRejectReasons(kRejectReasons, arraysize(kRejectReasons)); | |
869 } else { | |
870 // Even without a server nonce, this ClientHello should be accepted in | |
871 // version 33. | |
872 ASSERT_EQ(kSHLO, out_.tag()); | |
873 CheckServerHello(out_); | |
874 } | |
875 } | 861 } |
876 | 862 |
877 TEST_P(CryptoServerTest, ProofForSuppliedServerConfig) { | 863 TEST_P(CryptoServerTest, ProofForSuppliedServerConfig) { |
878 client_address_ = IPEndPoint(Loopback6(), 1234); | 864 client_address_ = IPEndPoint(Loopback6(), 1234); |
879 // clang-format off | 865 // clang-format off |
880 CryptoHandshakeMessage msg = CryptoTestUtils::Message( | 866 CryptoHandshakeMessage msg = CryptoTestUtils::Message( |
881 "CHLO", | 867 "CHLO", |
882 "AEAD", "AESG", | 868 "AEAD", "AESG", |
883 "KEXS", "C255", | 869 "KEXS", "C255", |
884 "PDMD", "X509", | 870 "PDMD", "X509", |
(...skipping 380 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
1265 "PUBS", pub_hex_.c_str(), | 1251 "PUBS", pub_hex_.c_str(), |
1266 "NONC", nonce_hex_.c_str(), | 1252 "NONC", nonce_hex_.c_str(), |
1267 "VER\0", client_version_string_.c_str(), | 1253 "VER\0", client_version_string_.c_str(), |
1268 "XLCT", XlctHexString().c_str(), | 1254 "XLCT", XlctHexString().c_str(), |
1269 "$padding", static_cast<int>(kClientHelloMinimumSize), | 1255 "$padding", static_cast<int>(kClientHelloMinimumSize), |
1270 nullptr); | 1256 nullptr); |
1271 // clang-format on | 1257 // clang-format on |
1272 | 1258 |
1273 ShouldSucceed(msg); | 1259 ShouldSucceed(msg); |
1274 | 1260 |
1275 if (client_version_ <= QUIC_VERSION_32) { | 1261 ASSERT_EQ(kSHLO, out_.tag()); |
1276 // clang-format off | 1262 CheckServerHello(out_); |
1277 const HandshakeFailureReason kRejectReasons[] = { | |
1278 SERVER_NONCE_REQUIRED_FAILURE | |
1279 }; | |
1280 // clang-format on | |
1281 CheckRejectReasons(kRejectReasons, arraysize(kRejectReasons)); | |
1282 EXPECT_EQ(0, strike_register_client_->PendingVerifications()); | |
1283 } else { | |
1284 // version 33. | |
1285 ASSERT_EQ(kSHLO, out_.tag()); | |
1286 CheckServerHello(out_); | |
1287 } | |
1288 } | 1263 } |
1289 | 1264 |
1290 } // namespace test | 1265 } // namespace test |
1291 } // namespace net | 1266 } // namespace net |
OLD | NEW |