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

Side by Side Diff: chrome/browser/net/transport_security_persister_unittest.cc

Issue 10545166: Support SHA-256 in public key pins for HTTPS. (Closed) Base URL: svn://svn.chromium.org/chrome/trunk/src/
Patch Set: Created 8 years, 4 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 | Annotate | Revision Log
OLDNEW
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
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
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 }
OLDNEW
« no previous file with comments | « chrome/browser/net/transport_security_persister.cc ('k') | chrome/browser/ui/webui/net_internals/net_internals_ui.cc » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698