net: implement the beginnings of HSTS pinning
(Based on a patch by Chris Evans.)
Doesn't yet actually get the information from the HSTS header, but all the
infrastructure is in place.
BUG=none
TEST=none
Review URL: http://codereview.chromium.org/6835033
git-svn-id: svn://svn.chromium.org/chrome/trunk/src@81584 0039d316-1c4b-4281-b951-d872f2087c98
diff --git a/net/base/transport_security_state_unittest.cc b/net/base/transport_security_state_unittest.cc
index 9823072..d2db7f9e 100644
--- a/net/base/transport_security_state_unittest.cc
+++ b/net/base/transport_security_state_unittest.cc
@@ -501,4 +501,37 @@
EXPECT_FALSE(state->IsEnabledForHost(&domain_state, kLongName, true));
}
+TEST_F(TransportSecurityStateTest, PublicKeyHashes) {
+ scoped_refptr<TransportSecurityState> state(
+ new TransportSecurityState);
+
+ TransportSecurityState::DomainState domain_state;
+ EXPECT_FALSE(state->IsEnabledForHost(&domain_state, "example.com", false));
+ std::vector<SHA1Fingerprint> hashes;
+ EXPECT_TRUE(domain_state.IsChainOfPublicKeysPermitted(hashes));
+
+ SHA1Fingerprint hash;
+ memset(hash.data, '1', sizeof(hash.data));
+ domain_state.public_key_hashes.push_back(hash);
+
+ EXPECT_FALSE(domain_state.IsChainOfPublicKeysPermitted(hashes));
+ hashes.push_back(hash);
+ EXPECT_TRUE(domain_state.IsChainOfPublicKeysPermitted(hashes));
+ hashes[0].data[0] = '2';
+ EXPECT_FALSE(domain_state.IsChainOfPublicKeysPermitted(hashes));
+
+ const base::Time current_time(base::Time::Now());
+ const base::Time expiry = current_time + base::TimeDelta::FromSeconds(1000);
+ domain_state.expiry = expiry;
+ state->EnableHost("example.com", domain_state);
+ std::string ser;
+ EXPECT_TRUE(state->Serialise(&ser));
+ bool dirty;
+ EXPECT_TRUE(state->Deserialise(ser, &dirty));
+ EXPECT_TRUE(state->IsEnabledForHost(&domain_state, "example.com", false));
+ EXPECT_EQ(1u, domain_state.public_key_hashes.size());
+ EXPECT_TRUE(0 == memcmp(domain_state.public_key_hashes[0].data, hash.data,
+ sizeof(hash.data)));
+}
+
} // namespace net