OLD | NEW |
1 // Copyright (c) 2012 The Chromium Authors. All rights reserved. | 1 // Copyright (c) 2012 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 "chrome/browser/net/transport_security_persister.h" | 5 #include "chrome/browser/net/transport_security_persister.h" |
6 | 6 |
7 #include <map> | 7 #include <map> |
8 #include <string> | 8 #include <string> |
9 | 9 |
10 #include "base/file_path.h" | 10 #include "base/file_path.h" |
(...skipping 78 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
89 TransportSecurityState::DomainState::MODE_FORCE_HTTPS); | 89 TransportSecurityState::DomainState::MODE_FORCE_HTTPS); |
90 EXPECT_TRUE(state_.GetDomainState("foo.bar.baz.yahoo.com", true, | 90 EXPECT_TRUE(state_.GetDomainState("foo.bar.baz.yahoo.com", true, |
91 &domain_state)); | 91 &domain_state)); |
92 EXPECT_EQ(domain_state.upgrade_mode, | 92 EXPECT_EQ(domain_state.upgrade_mode, |
93 TransportSecurityState::DomainState::MODE_FORCE_HTTPS); | 93 TransportSecurityState::DomainState::MODE_FORCE_HTTPS); |
94 EXPECT_FALSE(state_.GetDomainState("com", true, &domain_state)); | 94 EXPECT_FALSE(state_.GetDomainState("com", true, &domain_state)); |
95 } | 95 } |
96 | 96 |
97 TEST_F(TransportSecurityPersisterTest, SerializeData3) { | 97 TEST_F(TransportSecurityPersisterTest, SerializeData3) { |
98 // Add an entry. | 98 // Add an entry. |
99 net::SHA1Fingerprint fp1; | 99 net::HashValue fp1; |
100 memset(fp1.data, 0, sizeof(fp1.data)); | 100 fp1.tag = net::HASH_VALUE_SHA1; |
101 net::SHA1Fingerprint fp2; | 101 memset(fp1.data(), 0, fp1.size()); |
102 memset(fp2.data, 1, sizeof(fp2.data)); | 102 net::HashValue fp2; |
| 103 fp2.tag = net::HASH_VALUE_SHA1; |
| 104 memset(fp2.data(), 1, fp2.size()); |
103 TransportSecurityState::DomainState example_state; | 105 TransportSecurityState::DomainState example_state; |
104 example_state.upgrade_expiry = | 106 example_state.upgrade_expiry = |
105 base::Time::Now() + base::TimeDelta::FromSeconds(1000); | 107 base::Time::Now() + base::TimeDelta::FromSeconds(1000); |
106 example_state.upgrade_mode = | 108 example_state.upgrade_mode = |
107 TransportSecurityState::DomainState::MODE_FORCE_HTTPS; | 109 TransportSecurityState::DomainState::MODE_FORCE_HTTPS; |
108 example_state.dynamic_spki_hashes_expiry = example_state.upgrade_expiry; | 110 example_state.dynamic_spki_hashes_expiry = example_state.upgrade_expiry; |
109 example_state.dynamic_spki_hashes.push_back(fp1); | 111 example_state.dynamic_spki_hashes.push_back(fp1); |
110 example_state.dynamic_spki_hashes.push_back(fp2); | 112 example_state.dynamic_spki_hashes.push_back(fp2); |
111 state_.EnableHost("www.example.com", example_state); | 113 state_.EnableHost("www.example.com", example_state); |
112 | 114 |
113 // Add another entry. | 115 // Add another entry. |
114 memset(fp1.data, 2, sizeof(fp1.data)); | 116 memset(fp1.data(), 2, fp1.size()); |
115 memset(fp2.data, 3, sizeof(fp2.data)); | 117 memset(fp2.data(), 3, fp2.size()); |
116 example_state.upgrade_expiry = | 118 example_state.upgrade_expiry = |
117 base::Time::Now() + base::TimeDelta::FromSeconds(3000); | 119 base::Time::Now() + base::TimeDelta::FromSeconds(3000); |
118 example_state.upgrade_mode = | 120 example_state.upgrade_mode = |
119 TransportSecurityState::DomainState::MODE_DEFAULT; | 121 TransportSecurityState::DomainState::MODE_DEFAULT; |
120 example_state.dynamic_spki_hashes_expiry = example_state.upgrade_expiry; | 122 example_state.dynamic_spki_hashes_expiry = example_state.upgrade_expiry; |
121 example_state.dynamic_spki_hashes.push_back(fp1); | 123 example_state.dynamic_spki_hashes.push_back(fp1); |
122 example_state.dynamic_spki_hashes.push_back(fp2); | 124 example_state.dynamic_spki_hashes.push_back(fp2); |
123 state_.EnableHost("www.example.net", example_state); | 125 state_.EnableHost("www.example.net", example_state); |
124 | 126 |
125 // Save a copy of everything. | 127 // Save a copy of everything. |
(...skipping 48 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
174 "}"; | 176 "}"; |
175 bool dirty; | 177 bool dirty; |
176 EXPECT_TRUE(persister_->LoadEntries(output, &dirty)); | 178 EXPECT_TRUE(persister_->LoadEntries(output, &dirty)); |
177 EXPECT_TRUE(dirty); | 179 EXPECT_TRUE(dirty); |
178 } | 180 } |
179 | 181 |
180 TEST_F(TransportSecurityPersisterTest, PublicKeyHashes) { | 182 TEST_F(TransportSecurityPersisterTest, PublicKeyHashes) { |
181 TransportSecurityState::DomainState domain_state; | 183 TransportSecurityState::DomainState domain_state; |
182 static const char kTestDomain[] = "example.com"; | 184 static const char kTestDomain[] = "example.com"; |
183 EXPECT_FALSE(state_.GetDomainState(kTestDomain, false, &domain_state)); | 185 EXPECT_FALSE(state_.GetDomainState(kTestDomain, false, &domain_state)); |
184 net::FingerprintVector hashes; | 186 net::HashValueVector hashes; |
185 EXPECT_TRUE(domain_state.IsChainOfPublicKeysPermitted(hashes)); | 187 EXPECT_TRUE(domain_state.IsChainOfPublicKeysPermitted(hashes)); |
186 | 188 |
187 net::SHA1Fingerprint hash; | 189 net::HashValue hash; |
188 memset(hash.data, '1', sizeof(hash.data)); | 190 hash.tag = net::HASH_VALUE_SHA1; |
| 191 memset(hash.data(), '1', hash.size()); |
189 domain_state.static_spki_hashes.push_back(hash); | 192 domain_state.static_spki_hashes.push_back(hash); |
190 | 193 |
191 EXPECT_FALSE(domain_state.IsChainOfPublicKeysPermitted(hashes)); | 194 EXPECT_FALSE(domain_state.IsChainOfPublicKeysPermitted(hashes)); |
192 hashes.push_back(hash); | 195 hashes.push_back(hash); |
193 EXPECT_TRUE(domain_state.IsChainOfPublicKeysPermitted(hashes)); | 196 EXPECT_TRUE(domain_state.IsChainOfPublicKeysPermitted(hashes)); |
194 hashes[0].data[0] = '2'; | 197 hashes[0].data()[0] = '2'; |
195 EXPECT_FALSE(domain_state.IsChainOfPublicKeysPermitted(hashes)); | 198 EXPECT_FALSE(domain_state.IsChainOfPublicKeysPermitted(hashes)); |
196 | 199 |
197 const base::Time current_time(base::Time::Now()); | 200 const base::Time current_time(base::Time::Now()); |
198 const base::Time expiry = current_time + base::TimeDelta::FromSeconds(1000); | 201 const base::Time expiry = current_time + base::TimeDelta::FromSeconds(1000); |
199 domain_state.upgrade_expiry = expiry; | 202 domain_state.upgrade_expiry = expiry; |
200 state_.EnableHost(kTestDomain, domain_state); | 203 state_.EnableHost(kTestDomain, domain_state); |
201 std::string ser; | 204 std::string ser; |
202 EXPECT_TRUE(persister_->SerializeData(&ser)); | 205 EXPECT_TRUE(persister_->SerializeData(&ser)); |
203 bool dirty; | 206 bool dirty; |
204 EXPECT_TRUE(persister_->LoadEntries(ser, &dirty)); | 207 EXPECT_TRUE(persister_->LoadEntries(ser, &dirty)); |
205 EXPECT_TRUE(state_.GetDomainState(kTestDomain, false, &domain_state)); | 208 EXPECT_TRUE(state_.GetDomainState(kTestDomain, false, &domain_state)); |
206 EXPECT_EQ(1u, domain_state.static_spki_hashes.size()); | 209 EXPECT_EQ(1u, domain_state.static_spki_hashes.size()); |
207 EXPECT_EQ(0, memcmp(domain_state.static_spki_hashes[0].data, hash.data, | 210 EXPECT_EQ(hash.tag, domain_state.static_spki_hashes[0].tag); |
208 sizeof(hash.data))); | 211 EXPECT_EQ(0, memcmp(domain_state.static_spki_hashes[0].data(), hash.data(), |
| 212 hash.size())); |
209 } | 213 } |
210 | 214 |
211 TEST_F(TransportSecurityPersisterTest, ForcePreloads) { | 215 TEST_F(TransportSecurityPersisterTest, ForcePreloads) { |
212 // The static state for docs.google.com, defined in | 216 // The static state for docs.google.com, defined in |
213 // net/base/transport_security_state_static.h, has pins and mode strict. | 217 // net/base/transport_security_state_static.h, has pins and mode strict. |
214 // This new policy overrides that with no pins and a weaker mode. We apply | 218 // This new policy overrides that with no pins and a weaker mode. We apply |
215 // this new policy with |DeserializeFromCommandLine| and expect that the | 219 // this new policy with |DeserializeFromCommandLine| and expect that the |
216 // new policy is in effect, overriding the static policy. | 220 // new policy is in effect, overriding the static policy. |
217 std::string preload("{" | 221 std::string preload("{" |
218 "\"4AGT3lHihuMSd5rUj7B4u6At0jlSH3HFePovjPR+oLE=\": {" | 222 "\"4AGT3lHihuMSd5rUj7B4u6At0jlSH3HFePovjPR+oLE=\": {" |
219 "\"created\": 0.0," | 223 "\"created\": 0.0," |
220 "\"expiry\": 2000000000.0," | 224 "\"expiry\": 2000000000.0," |
221 "\"include_subdomains\": false," | 225 "\"include_subdomains\": false," |
222 "\"mode\": \"pinning-only\"" | 226 "\"mode\": \"pinning-only\"" |
223 "}}"); | 227 "}}"); |
224 | 228 |
225 EXPECT_TRUE(persister_->DeserializeFromCommandLine(preload)); | 229 EXPECT_TRUE(persister_->DeserializeFromCommandLine(preload)); |
226 | 230 |
227 TransportSecurityState::DomainState domain_state; | 231 TransportSecurityState::DomainState domain_state; |
228 EXPECT_TRUE(state_.GetDomainState("docs.google.com", true, &domain_state)); | 232 EXPECT_TRUE(state_.GetDomainState("docs.google.com", true, &domain_state)); |
229 EXPECT_FALSE(domain_state.HasPins()); | 233 EXPECT_FALSE(domain_state.HasPins()); |
230 EXPECT_FALSE(domain_state.ShouldRedirectHTTPToHTTPS()); | 234 EXPECT_FALSE(domain_state.ShouldRedirectHTTPToHTTPS()); |
231 } | 235 } |
OLD | NEW |