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

Side by Side Diff: net/cert/multi_threaded_cert_verifier.h

Issue 1892033002: Cert - protobufs to serialize and deserialize CertVerifierCache. (Closed) Base URL: https://chromium.googlesource.com/chromium/src.git@master
Patch Set: delete scoped_ptr and use unique_ptr Created 4 years, 7 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
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 #ifndef NET_CERT_MULTI_THREADED_CERT_VERIFIER_H_ 5 #ifndef NET_CERT_MULTI_THREADED_CERT_VERIFIER_H_
6 #define NET_CERT_MULTI_THREADED_CERT_VERIFIER_H_ 6 #define NET_CERT_MULTI_THREADED_CERT_VERIFIER_H_
7 7
8 #include <stddef.h> 8 #include <stddef.h>
9 #include <stdint.h> 9 #include <stdint.h>
10 10
(...skipping 52 matching lines...) Expand 10 before | Expand all | Expand 10 after
63 const std::string& ocsp_response, 63 const std::string& ocsp_response,
64 int flags, 64 int flags,
65 CRLSet* crl_set, 65 CRLSet* crl_set,
66 CertVerifyResult* verify_result, 66 CertVerifyResult* verify_result,
67 const CompletionCallback& callback, 67 const CompletionCallback& callback,
68 std::unique_ptr<Request>* out_req, 68 std::unique_ptr<Request>* out_req,
69 const BoundNetLog& net_log) override; 69 const BoundNetLog& net_log) override;
70 70
71 bool SupportsOCSPStapling() override; 71 bool SupportsOCSPStapling() override;
72 72
73 // Adds explicitly-specified data to CertVerifierCache. Returns true if
74 // |cache_| is updated.
Ryan Sleevi 2016/04/29 23:33:21 This is not a helpful comment, because it provides
ramant (doing other things) 2016/04/30 22:58:11 Many many thanks for the above comments. Done.
75 bool AddCertResult(std::string& hostname,
76 int flags,
77 std::vector<SHA1HashValue>& hash_values,
78 base::Time start_time,
79 int error,
80 const CertVerifyResult& result,
81 base::Time verification_time,
82 base::Time expiration_time);
83
73 private: 84 private:
74 struct JobToRequestParamsComparator; 85 struct JobToRequestParamsComparator;
86 friend class CertVerifierCacheIterator;
87 friend class CertVerifierCachePersisterTest;
75 friend class CertVerifierRequest; 88 friend class CertVerifierRequest;
76 friend class CertVerifierJob; 89 friend class CertVerifierJob;
77 friend class MultiThreadedCertVerifierTest; 90 friend class MultiThreadedCertVerifierTest;
78 FRIEND_TEST_ALL_PREFIXES(MultiThreadedCertVerifierTest, CacheHit); 91 FRIEND_TEST_ALL_PREFIXES(MultiThreadedCertVerifierTest, CacheHit);
79 FRIEND_TEST_ALL_PREFIXES(MultiThreadedCertVerifierTest, DifferentCACerts); 92 FRIEND_TEST_ALL_PREFIXES(MultiThreadedCertVerifierTest, DifferentCACerts);
80 FRIEND_TEST_ALL_PREFIXES(MultiThreadedCertVerifierTest, InflightJoin); 93 FRIEND_TEST_ALL_PREFIXES(MultiThreadedCertVerifierTest, InflightJoin);
81 FRIEND_TEST_ALL_PREFIXES(MultiThreadedCertVerifierTest, MultipleInflightJoin); 94 FRIEND_TEST_ALL_PREFIXES(MultiThreadedCertVerifierTest, MultipleInflightJoin);
82 FRIEND_TEST_ALL_PREFIXES(MultiThreadedCertVerifierTest, CancelRequest); 95 FRIEND_TEST_ALL_PREFIXES(MultiThreadedCertVerifierTest, CancelRequest);
83 FRIEND_TEST_ALL_PREFIXES(MultiThreadedCertVerifierTest, 96 FRIEND_TEST_ALL_PREFIXES(MultiThreadedCertVerifierTest,
84 RequestParamsComparators); 97 RequestParamsComparators);
85 FRIEND_TEST_ALL_PREFIXES(MultiThreadedCertVerifierTest, 98 FRIEND_TEST_ALL_PREFIXES(MultiThreadedCertVerifierTest,
86 CertTrustAnchorProvider); 99 CertTrustAnchorProvider);
100 FRIEND_TEST_ALL_PREFIXES(CertVerifierCachePersisterTest, PersistCache);
101 FRIEND_TEST_ALL_PREFIXES(CertVerifierCachePersisterTest,
102 PersistCacheExpiredEntry);
Ryan Sleevi 2016/04/29 23:33:21 This (and line 87) improperly creates the circular
ramant (doing other things) 2016/04/30 22:58:11 Done.
87 103
88 // Input parameters of a certificate verification request. 104 // Input parameters of a certificate verification request.
89 struct NET_EXPORT_PRIVATE RequestParams { 105 struct NET_EXPORT_PRIVATE RequestParams {
90 RequestParams(const SHA1HashValue& cert_fingerprint_arg, 106 RequestParams(const SHA1HashValue& cert_fingerprint_arg,
91 const SHA1HashValue& ca_fingerprint_arg, 107 const SHA1HashValue& ca_fingerprint_arg,
92 const std::string& hostname_arg, 108 const std::string& hostname_arg,
93 const std::string& ocsp_response_arg, 109 const std::string& ocsp_response_arg,
94 int flags_arg, 110 int flags_arg,
95 const CertificateList& additional_trust_anchors); 111 const CertificateList& additional_trust_anchors);
96 RequestParams(const RequestParams& other); 112 RequestParams(const RequestParams& other);
113 RequestParams(std::string& hostname_arg,
114 int flags_arg,
115 std::vector<SHA1HashValue>& hash_values_arg,
Ryan Sleevi 2016/04/29 23:33:21 Don't pass by non-const reference. I realize you d
ramant (doing other things) 2016/04/30 22:58:11 Done.
116 base::Time start_time_arg);
97 ~RequestParams(); 117 ~RequestParams();
98 118
99 bool operator<(const RequestParams& other) const; 119 bool operator<(const RequestParams& other) const;
100 120
101 std::string hostname; 121 std::string hostname;
102 int flags; 122 int flags;
103 std::vector<SHA1HashValue> hash_values; 123 std::vector<SHA1HashValue> hash_values;
104 // The time when verification started. 124 // The time when verification started.
105 // Note: This uses base::Time, rather than base::TimeTicks, to 125 // Note: This uses base::Time, rather than base::TimeTicks, to
106 // account for system clock changes. 126 // account for system clock changes.
107 base::Time start_time; 127 base::Time start_time;
108 }; 128 };
109 129
110 // CachedResult contains the result of a certificate verification. 130 // CachedResult contains the result of a certificate verification.
111 struct NET_EXPORT_PRIVATE CachedResult { 131 struct NET_EXPORT_PRIVATE CachedResult {
112 CachedResult(); 132 CachedResult();
133 CachedResult(int error_arg, CertVerifyResult result_arg);
113 ~CachedResult(); 134 ~CachedResult();
114 135
115 int error; // The return value of CertVerifier::Verify. 136 int error; // The return value of CertVerifier::Verify.
116 CertVerifyResult result; // The output of CertVerifier::Verify. 137 CertVerifyResult result; // The output of CertVerifier::Verify.
117 }; 138 };
118 139
119 // Rather than having a single validity point along a monotonically increasing 140 // Rather than having a single validity point along a monotonically increasing
120 // timeline, certificate verification is based on falling within a range of 141 // timeline, certificate verification is based on falling within a range of
121 // the certificate's NotBefore and NotAfter and based on what the current 142 // the certificate's NotBefore and NotAfter and based on what the current
122 // system clock says (which may advance forwards or backwards as users correct 143 // system clock says (which may advance forwards or backwards as users correct
123 // clock skew). CacheValidityPeriod and CacheExpirationFunctor are helpers to 144 // clock skew). CacheValidityPeriod and CacheExpirationFunctor are helpers to
124 // ensure that expiration is measured both by the 'general' case (now + cache 145 // ensure that expiration is measured both by the 'general' case (now + cache
125 // TTL) and by whether or not significant enough clock skew was introduced 146 // TTL) and by whether or not significant enough clock skew was introduced
126 // since the last verification. 147 // since the last verification.
127 struct CacheValidityPeriod { 148 struct NET_EXPORT_PRIVATE CacheValidityPeriod {
Ryan Sleevi 2016/04/29 23:33:21 Why?
ramant (doing other things) 2016/04/30 22:58:11 Deleted them. Changed the tests to test the interf
128 explicit CacheValidityPeriod(const base::Time& now); 149 explicit CacheValidityPeriod(const base::Time& now);
129 CacheValidityPeriod(const base::Time& now, const base::Time& expiration); 150 CacheValidityPeriod(const base::Time& now, const base::Time& expiration);
130 151
131 base::Time verification_time; 152 base::Time verification_time;
132 base::Time expiration_time; 153 base::Time expiration_time;
133 }; 154 };
134 155
135 struct CacheExpirationFunctor { 156 struct NET_EXPORT_PRIVATE CacheExpirationFunctor {
Ryan Sleevi 2016/04/29 23:33:21 Why?
ramant (doing other things) 2016/04/30 22:58:11 Deleted them. Changed the tests to test the interf
136 // Returns true iff |now| is within the validity period of |expiration|. 157 // Returns true iff |now| is within the validity period of |expiration|.
137 bool operator()(const CacheValidityPeriod& now, 158 bool operator()(const CacheValidityPeriod& now,
138 const CacheValidityPeriod& expiration) const; 159 const CacheValidityPeriod& expiration) const;
139 }; 160 };
140 161
141 struct JobComparator { 162 struct JobComparator {
142 bool operator()(const CertVerifierJob* job1, 163 bool operator()(const CertVerifierJob* job1,
143 const CertVerifierJob* job2) const; 164 const CertVerifierJob* job2) const;
144 }; 165 };
145 166
146 using JobSet = std::set<CertVerifierJob*, JobComparator>; 167 using JobSet = std::set<CertVerifierJob*, JobComparator>;
147 168
148 typedef ExpiringCache<RequestParams, CachedResult, CacheValidityPeriod, 169 typedef ExpiringCache<RequestParams,
149 CacheExpirationFunctor> CertVerifierCache; 170 CachedResult,
171 CacheValidityPeriod,
172 CacheExpirationFunctor>
173 CertVerifierCache;
150 174
151 // Saves |result| into the cache, keyed by |key|. 175 // Saves |result| into the cache, keyed by |key|.
152 void SaveResultToCache(const RequestParams& key, const CachedResult& result); 176 void SaveResultToCache(const RequestParams& key, const CachedResult& result);
153 177
154 // CertDatabase::Observer methods: 178 // CertDatabase::Observer methods:
155 void OnCACertChanged(const X509Certificate* cert) override; 179 void OnCACertChanged(const X509Certificate* cert) override;
156 180
157 // Returns an inflight job for |key|. If there is no such job then returns 181 // Returns an inflight job for |key|. If there is no such job then returns
158 // null. 182 // null.
159 CertVerifierJob* FindJob(const RequestParams& key); 183 CertVerifierJob* FindJob(const RequestParams& key);
(...skipping 19 matching lines...) Expand all
179 uint64_t cache_hits_; 203 uint64_t cache_hits_;
180 uint64_t inflight_joins_; 204 uint64_t inflight_joins_;
181 205
182 scoped_refptr<CertVerifyProc> verify_proc_; 206 scoped_refptr<CertVerifyProc> verify_proc_;
183 207
184 CertTrustAnchorProvider* trust_anchor_provider_; 208 CertTrustAnchorProvider* trust_anchor_provider_;
185 209
186 DISALLOW_COPY_AND_ASSIGN(MultiThreadedCertVerifier); 210 DISALLOW_COPY_AND_ASSIGN(MultiThreadedCertVerifier);
187 }; 211 };
188 212
213 class NET_EXPORT_PRIVATE CertVerifierCacheIterator {
Ryan Sleevi 2016/04/29 23:33:21 I suggested several times that this be a member.
ramant (doing other things) 2016/04/30 22:58:11 Sincere apologies. Undid this change. Was trying
214 public:
215 explicit CertVerifierCacheIterator(const MultiThreadedCertVerifier& verifier);
216 ~CertVerifierCacheIterator();
217
218 bool HasNext() const { return iterator_.HasNext(); }
219 void Advance() { iterator_.Advance(); }
220
221 const std::string& hostname() const { return iterator_.key().hostname; }
222 int flags() const { return iterator_.key().flags; }
223 const std::vector<SHA1HashValue>& hash_values() const {
224 return iterator_.key().hash_values;
225 }
226 const base::Time& start_time() const { return iterator_.key().start_time; }
227 int error() const { return iterator_.value().error; }
228 const CertVerifyResult& result() const { return iterator_.value().result; }
229 const base::Time& verification_time() const {
230 return iterator_.expiration().verification_time;
231 }
232 const base::Time& expiration_time() const {
233 return iterator_.expiration().expiration_time;
234 }
235
236 private:
237 MultiThreadedCertVerifier::CertVerifierCache::Iterator iterator_;
238
239 DISALLOW_COPY_AND_ASSIGN(CertVerifierCacheIterator);
240 };
241
189 } // namespace net 242 } // namespace net
190 243
191 #endif // NET_CERT_MULTI_THREADED_CERT_VERIFIER_H_ 244 #endif // NET_CERT_MULTI_THREADED_CERT_VERIFIER_H_
OLDNEW

Powered by Google App Engine
This is Rietveld 408576698