OLD | NEW |
1 // Copyright (c) 2006-2008 The Chromium Authors. All rights reserved. | 1 // Copyright (c) 2006-2008 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/base/x509_certificate.h" | 5 #include "net/base/x509_certificate.h" |
6 | 6 |
7 #include <map> | 7 #include <map> |
8 | 8 |
9 #include "base/lazy_instance.h" | 9 #include "base/lazy_instance.h" |
10 #include "base/logging.h" | 10 #include "base/logging.h" |
(...skipping 103 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
114 | 114 |
115 bool X509Certificate::LessThan::operator()(X509Certificate* lhs, | 115 bool X509Certificate::LessThan::operator()(X509Certificate* lhs, |
116 X509Certificate* rhs) const { | 116 X509Certificate* rhs) const { |
117 if (lhs == rhs) | 117 if (lhs == rhs) |
118 return false; | 118 return false; |
119 | 119 |
120 SHA1FingerprintLessThan fingerprint_functor; | 120 SHA1FingerprintLessThan fingerprint_functor; |
121 return fingerprint_functor(lhs->fingerprint_, rhs->fingerprint_); | 121 return fingerprint_functor(lhs->fingerprint_, rhs->fingerprint_); |
122 } | 122 } |
123 | 123 |
| 124 X509Certificate::X509Certificate(const std::string& subject, |
| 125 const std::string& issuer, |
| 126 base::Time start_date, |
| 127 base::Time expiration_date) |
| 128 : subject_(subject), |
| 129 issuer_(issuer), |
| 130 valid_start_(start_date), |
| 131 valid_expiry_(expiration_date), |
| 132 cert_handle_(NULL), |
| 133 source_(SOURCE_UNUSED) { |
| 134 memset(fingerprint_.data, 0, sizeof(fingerprint_.data)); |
| 135 } |
| 136 |
124 // static | 137 // static |
125 X509Certificate* X509Certificate::CreateFromHandle( | 138 X509Certificate* X509Certificate::CreateFromHandle( |
126 OSCertHandle cert_handle, | 139 OSCertHandle cert_handle, |
127 Source source, | 140 Source source, |
128 const OSCertHandles& intermediates) { | 141 const OSCertHandles& intermediates) { |
129 DCHECK(cert_handle); | 142 DCHECK(cert_handle); |
130 DCHECK(source != SOURCE_UNUSED); | 143 DCHECK(source != SOURCE_UNUSED); |
131 | 144 |
132 // Check if we already have this certificate in memory. | 145 // Check if we already have this certificate in memory. |
133 X509CertificateCache* cache = g_x509_certificate_cache.Pointer(); | 146 X509CertificateCache* cache = g_x509_certificate_cache.Pointer(); |
(...skipping 142 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
276 it != certificates.end(); ++it) { | 289 it != certificates.end(); ++it) { |
277 X509Certificate* result = CreateFromHandle(*it, SOURCE_LONE_CERT_IMPORT, | 290 X509Certificate* result = CreateFromHandle(*it, SOURCE_LONE_CERT_IMPORT, |
278 OSCertHandles()); | 291 OSCertHandles()); |
279 results.push_back(scoped_refptr<X509Certificate>(result)); | 292 results.push_back(scoped_refptr<X509Certificate>(result)); |
280 FreeOSCertHandle(*it); | 293 FreeOSCertHandle(*it); |
281 } | 294 } |
282 | 295 |
283 return results; | 296 return results; |
284 } | 297 } |
285 | 298 |
286 X509Certificate::X509Certificate(OSCertHandle cert_handle, | |
287 Source source, | |
288 const OSCertHandles& intermediates) | |
289 : cert_handle_(DupOSCertHandle(cert_handle)), | |
290 source_(source) { | |
291 // Copy/retain the intermediate cert handles. | |
292 for (size_t i = 0; i < intermediates.size(); ++i) | |
293 intermediate_ca_certs_.push_back(DupOSCertHandle(intermediates[i])); | |
294 // Platform-specific initialization. | |
295 Initialize(); | |
296 } | |
297 | |
298 X509Certificate::X509Certificate(const std::string& subject, | |
299 const std::string& issuer, | |
300 base::Time start_date, | |
301 base::Time expiration_date) | |
302 : subject_(subject), | |
303 issuer_(issuer), | |
304 valid_start_(start_date), | |
305 valid_expiry_(expiration_date), | |
306 cert_handle_(NULL), | |
307 source_(SOURCE_UNUSED) { | |
308 memset(fingerprint_.data, 0, sizeof(fingerprint_.data)); | |
309 } | |
310 | |
311 X509Certificate::~X509Certificate() { | |
312 // We might not be in the cache, but it is safe to remove ourselves anyway. | |
313 g_x509_certificate_cache.Get().Remove(this); | |
314 if (cert_handle_) | |
315 FreeOSCertHandle(cert_handle_); | |
316 for (size_t i = 0; i < intermediate_ca_certs_.size(); ++i) | |
317 FreeOSCertHandle(intermediate_ca_certs_[i]); | |
318 } | |
319 | |
320 bool X509Certificate::HasExpired() const { | 299 bool X509Certificate::HasExpired() const { |
321 return base::Time::Now() > valid_expiry(); | 300 return base::Time::Now() > valid_expiry(); |
322 } | 301 } |
323 | 302 |
324 bool X509Certificate::Equals(const X509Certificate* other) const { | 303 bool X509Certificate::Equals(const X509Certificate* other) const { |
325 return IsSameOSCert(cert_handle_, other->cert_handle_); | 304 return IsSameOSCert(cert_handle_, other->cert_handle_); |
326 } | 305 } |
327 | 306 |
328 bool X509Certificate::HasIntermediateCertificate(OSCertHandle cert) { | 307 bool X509Certificate::HasIntermediateCertificate(OSCertHandle cert) { |
329 #if defined(OS_MACOSX) || defined(OS_WIN) || defined(USE_OPENSSL) | 308 #if defined(OS_MACOSX) || defined(OS_WIN) || defined(USE_OPENSSL) |
330 for (size_t i = 0; i < intermediate_ca_certs_.size(); ++i) { | 309 for (size_t i = 0; i < intermediate_ca_certs_.size(); ++i) { |
331 if (IsSameOSCert(cert, intermediate_ca_certs_[i])) | 310 if (IsSameOSCert(cert, intermediate_ca_certs_[i])) |
332 return true; | 311 return true; |
333 } | 312 } |
334 return false; | 313 return false; |
335 #else | 314 #else |
336 return true; | 315 return true; |
337 #endif | 316 #endif |
338 } | 317 } |
339 | 318 |
340 bool X509Certificate::HasIntermediateCertificates(const OSCertHandles& certs) { | 319 bool X509Certificate::HasIntermediateCertificates(const OSCertHandles& certs) { |
341 for (size_t i = 0; i < certs.size(); ++i) { | 320 for (size_t i = 0; i < certs.size(); ++i) { |
342 if (!HasIntermediateCertificate(certs[i])) | 321 if (!HasIntermediateCertificate(certs[i])) |
343 return false; | 322 return false; |
344 } | 323 } |
345 return true; | 324 return true; |
346 } | 325 } |
347 | 326 |
| 327 X509Certificate::X509Certificate(OSCertHandle cert_handle, |
| 328 Source source, |
| 329 const OSCertHandles& intermediates) |
| 330 : cert_handle_(DupOSCertHandle(cert_handle)), |
| 331 source_(source) { |
| 332 // Copy/retain the intermediate cert handles. |
| 333 for (size_t i = 0; i < intermediates.size(); ++i) |
| 334 intermediate_ca_certs_.push_back(DupOSCertHandle(intermediates[i])); |
| 335 // Platform-specific initialization. |
| 336 Initialize(); |
| 337 } |
| 338 |
| 339 X509Certificate::~X509Certificate() { |
| 340 // We might not be in the cache, but it is safe to remove ourselves anyway. |
| 341 g_x509_certificate_cache.Get().Remove(this); |
| 342 if (cert_handle_) |
| 343 FreeOSCertHandle(cert_handle_); |
| 344 for (size_t i = 0; i < intermediate_ca_certs_.size(); ++i) |
| 345 FreeOSCertHandle(intermediate_ca_certs_[i]); |
| 346 } |
| 347 |
348 } // namespace net | 348 } // namespace net |
OLD | NEW |