| 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 "net/http/transport_security_state.h" | 5 #include "net/http/transport_security_state.h" |
| 6 | 6 |
| 7 #include <algorithm> | 7 #include <algorithm> |
| 8 #include <memory> | 8 #include <memory> |
| 9 #include <utility> | 9 #include <utility> |
| 10 #include <vector> | 10 #include <vector> |
| (...skipping 50 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 61 DCHECK_EQ(HASH_VALUE_SHA256, rhs.tag); | 61 DCHECK_EQ(HASH_VALUE_SHA256, rhs.tag); |
| 62 return memcmp(lhs.data, rhs.data(), rhs.size()) < 0; | 62 return memcmp(lhs.data, rhs.data(), rhs.size()) < 0; |
| 63 } | 63 } |
| 64 | 64 |
| 65 bool operator()(const HashValue& lhs, const SHA256HashValue& rhs) const { | 65 bool operator()(const HashValue& lhs, const SHA256HashValue& rhs) const { |
| 66 DCHECK_EQ(HASH_VALUE_SHA256, lhs.tag); | 66 DCHECK_EQ(HASH_VALUE_SHA256, lhs.tag); |
| 67 return memcmp(lhs.data(), rhs.data, lhs.size()) < 0; | 67 return memcmp(lhs.data(), rhs.data, lhs.size()) < 0; |
| 68 } | 68 } |
| 69 }; | 69 }; |
| 70 | 70 |
| 71 void RecordUMAForHPKPReportFailure(const GURL& report_uri, int net_error) { | 71 void RecordUMAForHPKPReportFailure(const GURL& report_uri, |
| 72 int net_error, |
| 73 int response_code) { |
| 72 UMA_HISTOGRAM_SPARSE_SLOWLY("Net.PublicKeyPinReportSendingFailure2", | 74 UMA_HISTOGRAM_SPARSE_SLOWLY("Net.PublicKeyPinReportSendingFailure2", |
| 73 -net_error); | 75 -net_error); |
| 74 } | 76 } |
| 75 | 77 |
| 76 std::string TimeToISO8601(const base::Time& t) { | 78 std::string TimeToISO8601(const base::Time& t) { |
| 77 base::Time::Exploded exploded; | 79 base::Time::Exploded exploded; |
| 78 t.UTCExplode(&exploded); | 80 t.UTCExplode(&exploded); |
| 79 return base::StringPrintf( | 81 return base::StringPrintf( |
| 80 "%04d-%02d-%02dT%02d:%02d:%02d.%03dZ", exploded.year, exploded.month, | 82 "%04d-%02d-%02dT%02d:%02d:%02d.%03dZ", exploded.year, exploded.month, |
| 81 exploded.day_of_month, exploded.hour, exploded.minute, exploded.second, | 83 exploded.day_of_month, exploded.hour, exploded.minute, exploded.second, |
| (...skipping 736 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 818 return; | 820 return; |
| 819 } | 821 } |
| 820 | 822 |
| 821 std::string serialized_report; | 823 std::string serialized_report; |
| 822 if (!SerializeExpectStapleReport(host_port_pair, ssl_info, ocsp_response, | 824 if (!SerializeExpectStapleReport(host_port_pair, ssl_info, ocsp_response, |
| 823 &serialized_report)) { | 825 &serialized_report)) { |
| 824 return; | 826 return; |
| 825 } | 827 } |
| 826 report_sender_->Send(expect_staple_state.report_uri, | 828 report_sender_->Send(expect_staple_state.report_uri, |
| 827 "application/json; charset=utf-8", serialized_report, | 829 "application/json; charset=utf-8", serialized_report, |
| 828 base::Closure(), | 830 base::Callback<void(int)>(), |
| 829 base::Bind(RecordUMAForHPKPReportFailure)); | 831 base::Bind(RecordUMAForHPKPReportFailure)); |
| 830 } | 832 } |
| 831 | 833 |
| 832 bool TransportSecurityState::HasPublicKeyPins(const std::string& host) { | 834 bool TransportSecurityState::HasPublicKeyPins(const std::string& host) { |
| 833 PKPState dynamic_state; | 835 PKPState dynamic_state; |
| 834 if (GetDynamicPKPState(host, &dynamic_state)) | 836 if (GetDynamicPKPState(host, &dynamic_state)) |
| 835 return dynamic_state.HasPublicKeyPins(); | 837 return dynamic_state.HasPublicKeyPins(); |
| 836 | 838 |
| 837 STSState unused; | 839 STSState unused; |
| 838 PKPState static_pkp_state; | 840 PKPState static_pkp_state; |
| (...skipping 237 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 1076 // also prevents accidental loops (a.com triggers a report to b.com | 1078 // also prevents accidental loops (a.com triggers a report to b.com |
| 1077 // which triggers a report to a.com). See section 2.1.4 of RFC 7469. | 1079 // which triggers a report to a.com). See section 2.1.4 of RFC 7469. |
| 1078 if (sent_reports_cache_.Get(report_cache_key, base::TimeTicks::Now())) | 1080 if (sent_reports_cache_.Get(report_cache_key, base::TimeTicks::Now())) |
| 1079 return PKPStatus::VIOLATED; | 1081 return PKPStatus::VIOLATED; |
| 1080 sent_reports_cache_.Put( | 1082 sent_reports_cache_.Put( |
| 1081 report_cache_key, true, base::TimeTicks::Now(), | 1083 report_cache_key, true, base::TimeTicks::Now(), |
| 1082 base::TimeTicks::Now() + | 1084 base::TimeTicks::Now() + |
| 1083 base::TimeDelta::FromMinutes(kTimeToRememberHPKPReportsMins)); | 1085 base::TimeDelta::FromMinutes(kTimeToRememberHPKPReportsMins)); |
| 1084 | 1086 |
| 1085 report_sender_->Send(pkp_state.report_uri, "application/json; charset=utf-8", | 1087 report_sender_->Send(pkp_state.report_uri, "application/json; charset=utf-8", |
| 1086 serialized_report, base::Closure(), | 1088 serialized_report, base::Callback<void(int)>(), |
| 1087 base::Bind(RecordUMAForHPKPReportFailure)); | 1089 base::Bind(RecordUMAForHPKPReportFailure)); |
| 1088 return PKPStatus::VIOLATED; | 1090 return PKPStatus::VIOLATED; |
| 1089 } | 1091 } |
| 1090 | 1092 |
| 1091 bool TransportSecurityState::GetStaticExpectCTState( | 1093 bool TransportSecurityState::GetStaticExpectCTState( |
| 1092 const std::string& host, | 1094 const std::string& host, |
| 1093 ExpectCTState* expect_ct_state) const { | 1095 ExpectCTState* expect_ct_state) const { |
| 1094 DCHECK(CalledOnValidThread()); | 1096 DCHECK(CalledOnValidThread()); |
| 1095 | 1097 |
| 1096 if (!IsBuildTimely()) | 1098 if (!IsBuildTimely()) |
| (...skipping 557 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 1654 TransportSecurityState::PKPStateIterator::PKPStateIterator( | 1656 TransportSecurityState::PKPStateIterator::PKPStateIterator( |
| 1655 const TransportSecurityState& state) | 1657 const TransportSecurityState& state) |
| 1656 : iterator_(state.enabled_pkp_hosts_.begin()), | 1658 : iterator_(state.enabled_pkp_hosts_.begin()), |
| 1657 end_(state.enabled_pkp_hosts_.end()) { | 1659 end_(state.enabled_pkp_hosts_.end()) { |
| 1658 } | 1660 } |
| 1659 | 1661 |
| 1660 TransportSecurityState::PKPStateIterator::~PKPStateIterator() { | 1662 TransportSecurityState::PKPStateIterator::~PKPStateIterator() { |
| 1661 } | 1663 } |
| 1662 | 1664 |
| 1663 } // namespace | 1665 } // namespace |
| OLD | NEW |