| OLD | NEW |
| 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/crypto/quic_crypto_client_config.h" | 5 #include "net/quic/crypto/quic_crypto_client_config.h" |
| 6 | 6 |
| 7 #include "net/quic/crypto/proof_verifier.h" | 7 #include "net/quic/crypto/proof_verifier.h" |
| 8 #include "net/quic/quic_server_id.h" | 8 #include "net/quic/quic_server_id.h" |
| 9 #include "net/quic/test_tools/mock_random.h" | 9 #include "net/quic/test_tools/mock_random.h" |
| 10 #include "net/quic/test_tools/quic_test_utils.h" | 10 #include "net/quic/test_tools/quic_test_utils.h" |
| (...skipping 41 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 52 EXPECT_EQ(state.certs(), other.certs()); | 52 EXPECT_EQ(state.certs(), other.certs()); |
| 53 EXPECT_EQ(1u, other.generation_counter()); | 53 EXPECT_EQ(1u, other.generation_counter()); |
| 54 } | 54 } |
| 55 | 55 |
| 56 TEST(QuicCryptoClientConfigTest, InchoateChlo) { | 56 TEST(QuicCryptoClientConfigTest, InchoateChlo) { |
| 57 QuicCryptoClientConfig::CachedState state; | 57 QuicCryptoClientConfig::CachedState state; |
| 58 QuicCryptoClientConfig config; | 58 QuicCryptoClientConfig config; |
| 59 QuicCryptoNegotiatedParameters params; | 59 QuicCryptoNegotiatedParameters params; |
| 60 CryptoHandshakeMessage msg; | 60 CryptoHandshakeMessage msg; |
| 61 QuicServerId server_id("www.google.com", 80, false, PRIVACY_MODE_DISABLED); | 61 QuicServerId server_id("www.google.com", 80, false, PRIVACY_MODE_DISABLED); |
| 62 config.FillInchoateClientHello(server_id, QuicVersionMax(), &state, | 62 config.FillInchoateClientHello( |
| 63 ¶ms, &msg); | 63 server_id, QuicVersionMax(), &state, ¶ms, &msg); |
| 64 | 64 |
| 65 QuicTag cver; | 65 QuicTag cver; |
| 66 EXPECT_EQ(QUIC_NO_ERROR, msg.GetUint32(kVER, &cver)); | 66 EXPECT_EQ(QUIC_NO_ERROR, msg.GetUint32(kVER, &cver)); |
| 67 EXPECT_EQ(QuicVersionToQuicTag(QuicVersionMax()), cver); | 67 EXPECT_EQ(QuicVersionToQuicTag(QuicVersionMax()), cver); |
| 68 } | 68 } |
| 69 | 69 |
| 70 TEST(QuicCryptoClientConfigTest, PreferAesGcm) { | 70 TEST(QuicCryptoClientConfigTest, PreferAesGcm) { |
| 71 QuicCryptoClientConfig config; | 71 QuicCryptoClientConfig config; |
| 72 config.SetDefaults(); | 72 config.SetDefaults(); |
| 73 if (config.aead.size() > 1) | 73 if (config.aead.size() > 1) |
| 74 EXPECT_NE(kAESG, config.aead[0]); | 74 EXPECT_NE(kAESG, config.aead[0]); |
| 75 config.PreferAesGcm(); | 75 config.PreferAesGcm(); |
| 76 EXPECT_EQ(kAESG, config.aead[0]); | 76 EXPECT_EQ(kAESG, config.aead[0]); |
| 77 } | 77 } |
| 78 | 78 |
| 79 TEST(QuicCryptoClientConfigTest, InchoateChloSecure) { | 79 TEST(QuicCryptoClientConfigTest, InchoateChloSecure) { |
| 80 QuicCryptoClientConfig::CachedState state; | 80 QuicCryptoClientConfig::CachedState state; |
| 81 QuicCryptoClientConfig config; | 81 QuicCryptoClientConfig config; |
| 82 QuicCryptoNegotiatedParameters params; | 82 QuicCryptoNegotiatedParameters params; |
| 83 CryptoHandshakeMessage msg; | 83 CryptoHandshakeMessage msg; |
| 84 QuicServerId server_id("www.google.com", 443, true, PRIVACY_MODE_DISABLED); | 84 QuicServerId server_id("www.google.com", 443, true, PRIVACY_MODE_DISABLED); |
| 85 config.FillInchoateClientHello(server_id, QuicVersionMax(), &state, | 85 config.FillInchoateClientHello( |
| 86 ¶ms, &msg); | 86 server_id, QuicVersionMax(), &state, ¶ms, &msg); |
| 87 | 87 |
| 88 QuicTag pdmd; | 88 QuicTag pdmd; |
| 89 EXPECT_EQ(QUIC_NO_ERROR, msg.GetUint32(kPDMD, &pdmd)); | 89 EXPECT_EQ(QUIC_NO_ERROR, msg.GetUint32(kPDMD, &pdmd)); |
| 90 EXPECT_EQ(kX509, pdmd); | 90 EXPECT_EQ(kX509, pdmd); |
| 91 } | 91 } |
| 92 | 92 |
| 93 TEST(QuicCryptoClientConfigTest, InchoateChloSecureNoEcdsa) { | 93 TEST(QuicCryptoClientConfigTest, InchoateChloSecureNoEcdsa) { |
| 94 QuicCryptoClientConfig::CachedState state; | 94 QuicCryptoClientConfig::CachedState state; |
| 95 QuicCryptoClientConfig config; | 95 QuicCryptoClientConfig config; |
| 96 config.DisableEcdsa(); | 96 config.DisableEcdsa(); |
| 97 QuicCryptoNegotiatedParameters params; | 97 QuicCryptoNegotiatedParameters params; |
| 98 CryptoHandshakeMessage msg; | 98 CryptoHandshakeMessage msg; |
| 99 QuicServerId server_id("www.google.com", 443, true, PRIVACY_MODE_DISABLED); | 99 QuicServerId server_id("www.google.com", 443, true, PRIVACY_MODE_DISABLED); |
| 100 config.FillInchoateClientHello(server_id, QuicVersionMax(), &state, | 100 config.FillInchoateClientHello( |
| 101 ¶ms, &msg); | 101 server_id, QuicVersionMax(), &state, ¶ms, &msg); |
| 102 | 102 |
| 103 QuicTag pdmd; | 103 QuicTag pdmd; |
| 104 EXPECT_EQ(QUIC_NO_ERROR, msg.GetUint32(kPDMD, &pdmd)); | 104 EXPECT_EQ(QUIC_NO_ERROR, msg.GetUint32(kPDMD, &pdmd)); |
| 105 EXPECT_EQ(kX59R, pdmd); | 105 EXPECT_EQ(kX59R, pdmd); |
| 106 } | 106 } |
| 107 | 107 |
| 108 TEST(QuicCryptoClientConfigTest, FillClientHello) { | 108 TEST(QuicCryptoClientConfigTest, FillClientHello) { |
| 109 QuicCryptoClientConfig::CachedState state; | 109 QuicCryptoClientConfig::CachedState state; |
| 110 QuicCryptoClientConfig config; | 110 QuicCryptoClientConfig config; |
| 111 QuicCryptoNegotiatedParameters params; | 111 QuicCryptoNegotiatedParameters params; |
| (...skipping 37 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 149 } | 149 } |
| 150 CryptoHandshakeMessage msg; | 150 CryptoHandshakeMessage msg; |
| 151 msg.set_tag(kSHLO); | 151 msg.set_tag(kSHLO); |
| 152 msg.SetVector(kVER, supported_version_tags); | 152 msg.SetVector(kVER, supported_version_tags); |
| 153 | 153 |
| 154 QuicCryptoClientConfig::CachedState cached; | 154 QuicCryptoClientConfig::CachedState cached; |
| 155 QuicCryptoNegotiatedParameters out_params; | 155 QuicCryptoNegotiatedParameters out_params; |
| 156 string error; | 156 string error; |
| 157 QuicCryptoClientConfig config; | 157 QuicCryptoClientConfig config; |
| 158 EXPECT_EQ(QUIC_VERSION_NEGOTIATION_MISMATCH, | 158 EXPECT_EQ(QUIC_VERSION_NEGOTIATION_MISMATCH, |
| 159 config.ProcessServerHello(msg, 0, supported_versions, | 159 config.ProcessServerHello( |
| 160 &cached, &out_params, &error)); | 160 msg, 0, supported_versions, &cached, &out_params, &error)); |
| 161 EXPECT_EQ("Downgrade attack detected", error); | 161 EXPECT_EQ("Downgrade attack detected", error); |
| 162 } | 162 } |
| 163 | 163 |
| 164 TEST(QuicCryptoClientConfigTest, InitializeFrom) { | 164 TEST(QuicCryptoClientConfigTest, InitializeFrom) { |
| 165 QuicCryptoClientConfig config; | 165 QuicCryptoClientConfig config; |
| 166 QuicServerId canonical_server_id("www.google.com", 80, false, | 166 QuicServerId canonical_server_id( |
| 167 PRIVACY_MODE_DISABLED); | 167 "www.google.com", 80, false, PRIVACY_MODE_DISABLED); |
| 168 QuicCryptoClientConfig::CachedState* state = | 168 QuicCryptoClientConfig::CachedState* state = |
| 169 config.LookupOrCreate(canonical_server_id); | 169 config.LookupOrCreate(canonical_server_id); |
| 170 // TODO(rch): Populate other fields of |state|. | 170 // TODO(rch): Populate other fields of |state|. |
| 171 state->set_source_address_token("TOKEN"); | 171 state->set_source_address_token("TOKEN"); |
| 172 state->SetProofValid(); | 172 state->SetProofValid(); |
| 173 | 173 |
| 174 QuicServerId other_server_id("mail.google.com", 80, false, | 174 QuicServerId other_server_id( |
| 175 PRIVACY_MODE_DISABLED); | 175 "mail.google.com", 80, false, PRIVACY_MODE_DISABLED); |
| 176 config.InitializeFrom(other_server_id, canonical_server_id, &config); | 176 config.InitializeFrom(other_server_id, canonical_server_id, &config); |
| 177 QuicCryptoClientConfig::CachedState* other = | 177 QuicCryptoClientConfig::CachedState* other = |
| 178 config.LookupOrCreate(other_server_id); | 178 config.LookupOrCreate(other_server_id); |
| 179 | 179 |
| 180 EXPECT_EQ(state->server_config(), other->server_config()); | 180 EXPECT_EQ(state->server_config(), other->server_config()); |
| 181 EXPECT_EQ(state->source_address_token(), other->source_address_token()); | 181 EXPECT_EQ(state->source_address_token(), other->source_address_token()); |
| 182 EXPECT_EQ(state->certs(), other->certs()); | 182 EXPECT_EQ(state->certs(), other->certs()); |
| 183 EXPECT_EQ(1u, other->generation_counter()); | 183 EXPECT_EQ(1u, other->generation_counter()); |
| 184 } | 184 } |
| 185 | 185 |
| 186 TEST(QuicCryptoClientConfigTest, Canonical) { | 186 TEST(QuicCryptoClientConfigTest, Canonical) { |
| 187 QuicCryptoClientConfig config; | 187 QuicCryptoClientConfig config; |
| 188 config.AddCanonicalSuffix(".google.com"); | 188 config.AddCanonicalSuffix(".google.com"); |
| 189 QuicServerId canonical_id1("www.google.com", 80, false, | 189 QuicServerId canonical_id1( |
| 190 PRIVACY_MODE_DISABLED); | 190 "www.google.com", 80, false, PRIVACY_MODE_DISABLED); |
| 191 QuicServerId canonical_id2("mail.google.com", 80, false, | 191 QuicServerId canonical_id2( |
| 192 PRIVACY_MODE_DISABLED); | 192 "mail.google.com", 80, false, PRIVACY_MODE_DISABLED); |
| 193 QuicCryptoClientConfig::CachedState* state = | 193 QuicCryptoClientConfig::CachedState* state = |
| 194 config.LookupOrCreate(canonical_id1); | 194 config.LookupOrCreate(canonical_id1); |
| 195 // TODO(rch): Populate other fields of |state|. | 195 // TODO(rch): Populate other fields of |state|. |
| 196 state->set_source_address_token("TOKEN"); | 196 state->set_source_address_token("TOKEN"); |
| 197 state->SetProofValid(); | 197 state->SetProofValid(); |
| 198 | 198 |
| 199 QuicCryptoClientConfig::CachedState* other = | 199 QuicCryptoClientConfig::CachedState* other = |
| 200 config.LookupOrCreate(canonical_id2); | 200 config.LookupOrCreate(canonical_id2); |
| 201 | 201 |
| 202 EXPECT_TRUE(state->IsEmpty()); | 202 EXPECT_TRUE(state->IsEmpty()); |
| 203 EXPECT_EQ(state->server_config(), other->server_config()); | 203 EXPECT_EQ(state->server_config(), other->server_config()); |
| 204 EXPECT_EQ(state->source_address_token(), other->source_address_token()); | 204 EXPECT_EQ(state->source_address_token(), other->source_address_token()); |
| 205 EXPECT_EQ(state->certs(), other->certs()); | 205 EXPECT_EQ(state->certs(), other->certs()); |
| 206 EXPECT_EQ(1u, other->generation_counter()); | 206 EXPECT_EQ(1u, other->generation_counter()); |
| 207 | 207 |
| 208 QuicServerId different_id("mail.google.org", 80, false, | 208 QuicServerId different_id( |
| 209 PRIVACY_MODE_DISABLED); | 209 "mail.google.org", 80, false, PRIVACY_MODE_DISABLED); |
| 210 EXPECT_TRUE(config.LookupOrCreate(different_id)->IsEmpty()); | 210 EXPECT_TRUE(config.LookupOrCreate(different_id)->IsEmpty()); |
| 211 } | 211 } |
| 212 | 212 |
| 213 TEST(QuicCryptoClientConfigTest, CanonicalNotUsedIfNotValid) { | 213 TEST(QuicCryptoClientConfigTest, CanonicalNotUsedIfNotValid) { |
| 214 QuicCryptoClientConfig config; | 214 QuicCryptoClientConfig config; |
| 215 config.AddCanonicalSuffix(".google.com"); | 215 config.AddCanonicalSuffix(".google.com"); |
| 216 QuicServerId canonical_id1("www.google.com", 80, false, | 216 QuicServerId canonical_id1( |
| 217 PRIVACY_MODE_DISABLED); | 217 "www.google.com", 80, false, PRIVACY_MODE_DISABLED); |
| 218 QuicServerId canonical_id2("mail.google.com", 80, false, | 218 QuicServerId canonical_id2( |
| 219 PRIVACY_MODE_DISABLED); | 219 "mail.google.com", 80, false, PRIVACY_MODE_DISABLED); |
| 220 QuicCryptoClientConfig::CachedState* state = | 220 QuicCryptoClientConfig::CachedState* state = |
| 221 config.LookupOrCreate(canonical_id1); | 221 config.LookupOrCreate(canonical_id1); |
| 222 // TODO(rch): Populate other fields of |state|. | 222 // TODO(rch): Populate other fields of |state|. |
| 223 state->set_source_address_token("TOKEN"); | 223 state->set_source_address_token("TOKEN"); |
| 224 | 224 |
| 225 // Do not set the proof as valid, and check that it is not used | 225 // Do not set the proof as valid, and check that it is not used |
| 226 // as a canonical entry. | 226 // as a canonical entry. |
| 227 EXPECT_TRUE(config.LookupOrCreate(canonical_id2)->IsEmpty()); | 227 EXPECT_TRUE(config.LookupOrCreate(canonical_id2)->IsEmpty()); |
| 228 } | 228 } |
| 229 | 229 |
| (...skipping 25 matching lines...) Expand all Loading... |
| 255 EXPECT_EQ(state, cleared_cache); | 255 EXPECT_EQ(state, cleared_cache); |
| 256 EXPECT_FALSE(cleared_cache->proof_valid()); | 256 EXPECT_FALSE(cleared_cache->proof_valid()); |
| 257 EXPECT_TRUE(cleared_cache->server_config().empty()); | 257 EXPECT_TRUE(cleared_cache->server_config().empty()); |
| 258 EXPECT_TRUE(cleared_cache->certs().empty()); | 258 EXPECT_TRUE(cleared_cache->certs().empty()); |
| 259 EXPECT_TRUE(cleared_cache->signature().empty()); | 259 EXPECT_TRUE(cleared_cache->signature().empty()); |
| 260 EXPECT_EQ(2u, cleared_cache->generation_counter()); | 260 EXPECT_EQ(2u, cleared_cache->generation_counter()); |
| 261 } | 261 } |
| 262 | 262 |
| 263 } // namespace test | 263 } // namespace test |
| 264 } // namespace net | 264 } // namespace net |
| OLD | NEW |