OLD | NEW |
1 // Copyright 2013 The Chromium Authors. All rights reserved. | 1 // Copyright 2013 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/ssl/client_cert_store_mac.h" | 5 #include "net/ssl/client_cert_store_mac.h" |
6 | 6 |
7 #include <CommonCrypto/CommonDigest.h> | 7 #include <CommonCrypto/CommonDigest.h> |
8 #include <CoreFoundation/CFArray.h> | 8 #include <CoreFoundation/CFArray.h> |
9 #include <CoreServices/CoreServices.h> | 9 #include <CoreServices/CoreServices.h> |
10 #include <Security/SecBase.h> | 10 #include <Security/SecBase.h> |
(...skipping 96 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
107 i < chain_count; ++i) { | 107 i < chain_count; ++i) { |
108 SecCertificateRef cert = reinterpret_cast<SecCertificateRef>( | 108 SecCertificateRef cert = reinterpret_cast<SecCertificateRef>( |
109 const_cast<void*>(CFArrayGetValueAtIndex(cert_chain, i))); | 109 const_cast<void*>(CFArrayGetValueAtIndex(cert_chain, i))); |
110 intermediates.push_back(cert); | 110 intermediates.push_back(cert); |
111 } | 111 } |
112 | 112 |
113 scoped_refptr<X509Certificate> new_cert(X509Certificate::CreateFromHandle( | 113 scoped_refptr<X509Certificate> new_cert(X509Certificate::CreateFromHandle( |
114 cert_handle, intermediates)); | 114 cert_handle, intermediates)); |
115 CFRelease(cert_chain); // Also frees |intermediates|. | 115 CFRelease(cert_chain); // Also frees |intermediates|. |
116 | 116 |
117 if (!new_cert->IsIssuedByEncoded(valid_issuers)) | 117 if (!new_cert || !new_cert->IsIssuedByEncoded(valid_issuers)) |
118 return false; | 118 return false; |
119 | 119 |
120 cert->swap(new_cert); | 120 cert->swap(new_cert); |
121 return true; | 121 return true; |
122 } | 122 } |
123 | 123 |
124 // Returns true if |purpose| is listed as allowed in |usage|. This | 124 // Returns true if |purpose| is listed as allowed in |usage|. This |
125 // function also considers the "Any" purpose. If the attribute is | 125 // function also considers the "Any" purpose. If the attribute is |
126 // present and empty, we return false. | 126 // present and empty, we return false. |
127 bool ExtendedKeyUsageAllows(const CE_ExtendedKeyUsage* usage, | 127 bool ExtendedKeyUsageAllows(const CE_ExtendedKeyUsage* usage, |
(...skipping 155 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
283 | 283 |
284 SecCertificateRef cert_handle; | 284 SecCertificateRef cert_handle; |
285 err = SecIdentityCopyCertificate(identity, &cert_handle); | 285 err = SecIdentityCopyCertificate(identity, &cert_handle); |
286 if (err != noErr) | 286 if (err != noErr) |
287 continue; | 287 continue; |
288 ScopedCFTypeRef<SecCertificateRef> scoped_cert_handle(cert_handle); | 288 ScopedCFTypeRef<SecCertificateRef> scoped_cert_handle(cert_handle); |
289 | 289 |
290 scoped_refptr<X509Certificate> cert( | 290 scoped_refptr<X509Certificate> cert( |
291 X509Certificate::CreateFromHandle(cert_handle, | 291 X509Certificate::CreateFromHandle(cert_handle, |
292 X509Certificate::OSCertHandles())); | 292 X509Certificate::OSCertHandles())); |
| 293 if (!cert) |
| 294 continue; |
293 | 295 |
294 if (preferred_identity && CFEqual(preferred_identity, identity)) { | 296 if (preferred_identity && CFEqual(preferred_identity, identity)) { |
295 // Only one certificate should match. | 297 // Only one certificate should match. |
296 DCHECK(!preferred_cert.get()); | 298 DCHECK(!preferred_cert.get()); |
297 preferred_cert = cert; | 299 preferred_cert = cert; |
298 } else { | 300 } else { |
299 regular_certs.push_back(cert); | 301 regular_certs.push_back(cert); |
300 } | 302 } |
301 } | 303 } |
302 | 304 |
(...skipping 23 matching lines...) Expand all Loading... |
326 const SSLCertRequestInfo& request, | 328 const SSLCertRequestInfo& request, |
327 CertificateList* selected_certs) { | 329 CertificateList* selected_certs) { |
328 GetClientCertsImpl( | 330 GetClientCertsImpl( |
329 preferred_cert, regular_certs, request, false, selected_certs); | 331 preferred_cert, regular_certs, request, false, selected_certs); |
330 return true; | 332 return true; |
331 } | 333 } |
332 | 334 |
333 #pragma clang diagnostic pop // "-Wdeprecated-declarations" | 335 #pragma clang diagnostic pop // "-Wdeprecated-declarations" |
334 | 336 |
335 } // namespace net | 337 } // namespace net |
OLD | NEW |