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/cert/x509_certificate.h" | 5 #include "net/cert/x509_certificate.h" |
6 | 6 |
7 #include <stdlib.h> | 7 #include <stdlib.h> |
8 | 8 |
9 #include <algorithm> | 9 #include <algorithm> |
10 #include <map> | 10 #include <map> |
(...skipping 28 matching lines...) Expand all Loading... |
39 const X509Certificate::Format kFormatDecodePriority[] = { | 39 const X509Certificate::Format kFormatDecodePriority[] = { |
40 X509Certificate::FORMAT_SINGLE_CERTIFICATE, | 40 X509Certificate::FORMAT_SINGLE_CERTIFICATE, |
41 X509Certificate::FORMAT_PKCS7 | 41 X509Certificate::FORMAT_PKCS7 |
42 }; | 42 }; |
43 | 43 |
44 // The PEM block header used for DER certificates | 44 // The PEM block header used for DER certificates |
45 const char kCertificateHeader[] = "CERTIFICATE"; | 45 const char kCertificateHeader[] = "CERTIFICATE"; |
46 // The PEM block header used for PKCS#7 data | 46 // The PEM block header used for PKCS#7 data |
47 const char kPKCS7Header[] = "PKCS7"; | 47 const char kPKCS7Header[] = "PKCS7"; |
48 | 48 |
49 #if !defined(USE_NSS) | 49 #if !defined(USE_NSS_CERTS) |
50 // A thread-safe cache for OS certificate handles. | 50 // A thread-safe cache for OS certificate handles. |
51 // | 51 // |
52 // Within each of the supported underlying crypto libraries, a certificate | 52 // Within each of the supported underlying crypto libraries, a certificate |
53 // handle is represented as a ref-counted object that contains the parsed | 53 // handle is represented as a ref-counted object that contains the parsed |
54 // data for the certificate. In addition, the underlying OS handle may also | 54 // data for the certificate. In addition, the underlying OS handle may also |
55 // contain a copy of the original ASN.1 DER used to constructed the handle. | 55 // contain a copy of the original ASN.1 DER used to constructed the handle. |
56 // | 56 // |
57 // In order to reduce the memory usage when multiple SSL connections exist, | 57 // In order to reduce the memory usage when multiple SSL connections exist, |
58 // with each connection storing the server's identity certificate plus any | 58 // with each connection storing the server's identity certificate plus any |
59 // intermediates supplied, the certificate handles are cached. Any two | 59 // intermediates supplied, the certificate handles are cached. Any two |
(...skipping 120 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
180 return; // A hash collision where the winning cert is still around. | 180 return; // A hash collision where the winning cert is still around. |
181 | 181 |
182 if (--pos->second.ref_count == 0) { | 182 if (--pos->second.ref_count == 0) { |
183 // The last reference to |cert_handle| has been removed, so release the | 183 // The last reference to |cert_handle| has been removed, so release the |
184 // Entry's OS handle and remove the Entry. The caller still holds a | 184 // Entry's OS handle and remove the Entry. The caller still holds a |
185 // reference to |cert_handle| and is responsible for freeing it. | 185 // reference to |cert_handle| and is responsible for freeing it. |
186 X509Certificate::FreeOSCertHandle(pos->second.cert_handle); | 186 X509Certificate::FreeOSCertHandle(pos->second.cert_handle); |
187 cache_.erase(pos); | 187 cache_.erase(pos); |
188 } | 188 } |
189 } | 189 } |
190 #endif // !defined(USE_NSS) | 190 #endif // !defined(USE_NSS_CERTS) |
191 | 191 |
192 // See X509CertificateCache::InsertOrUpdate. NSS has a built-in cache, so there | 192 // See X509CertificateCache::InsertOrUpdate. NSS has a built-in cache, so there |
193 // is no point in wrapping another cache around it. | 193 // is no point in wrapping another cache around it. |
194 void InsertOrUpdateCache(X509Certificate::OSCertHandle* cert_handle) { | 194 void InsertOrUpdateCache(X509Certificate::OSCertHandle* cert_handle) { |
195 #if !defined(USE_NSS) | 195 #if !defined(USE_NSS_CERTS) |
196 g_x509_certificate_cache.Pointer()->InsertOrUpdate(cert_handle); | 196 g_x509_certificate_cache.Pointer()->InsertOrUpdate(cert_handle); |
197 #endif | 197 #endif |
198 } | 198 } |
199 | 199 |
200 // See X509CertificateCache::Remove. | 200 // See X509CertificateCache::Remove. |
201 void RemoveFromCache(X509Certificate::OSCertHandle cert_handle) { | 201 void RemoveFromCache(X509Certificate::OSCertHandle cert_handle) { |
202 #if !defined(USE_NSS) | 202 #if !defined(USE_NSS_CERTS) |
203 g_x509_certificate_cache.Pointer()->Remove(cert_handle); | 203 g_x509_certificate_cache.Pointer()->Remove(cert_handle); |
204 #endif | 204 #endif |
205 } | 205 } |
206 | 206 |
207 // Utility to split |src| on the first occurrence of |c|, if any. |right| will | 207 // Utility to split |src| on the first occurrence of |c|, if any. |right| will |
208 // either be empty if |c| was not found, or will contain the remainder of the | 208 // either be empty if |c| was not found, or will contain the remainder of the |
209 // string including the split character itself. | 209 // string including the split character itself. |
210 void SplitOnChar(const base::StringPiece& src, | 210 void SplitOnChar(const base::StringPiece& src, |
211 char c, | 211 char c, |
212 base::StringPiece* left, | 212 base::StringPiece* left, |
(...skipping 543 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
756 RemoveFromCache(cert_handle_); | 756 RemoveFromCache(cert_handle_); |
757 FreeOSCertHandle(cert_handle_); | 757 FreeOSCertHandle(cert_handle_); |
758 } | 758 } |
759 for (size_t i = 0; i < intermediate_ca_certs_.size(); ++i) { | 759 for (size_t i = 0; i < intermediate_ca_certs_.size(); ++i) { |
760 RemoveFromCache(intermediate_ca_certs_[i]); | 760 RemoveFromCache(intermediate_ca_certs_[i]); |
761 FreeOSCertHandle(intermediate_ca_certs_[i]); | 761 FreeOSCertHandle(intermediate_ca_certs_[i]); |
762 } | 762 } |
763 } | 763 } |
764 | 764 |
765 } // namespace net | 765 } // namespace net |
OLD | NEW |