| OLD | NEW | 
|    1 // Copyright (c) 2011 The Chromium Authors. All rights reserved. |    1 // Copyright (c) 2011 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 <openssl/asn1.h> |    7 #include <openssl/asn1.h> | 
|    8 #include <openssl/crypto.h> |    8 #include <openssl/crypto.h> | 
|    9 #include <openssl/obj_mac.h> |    9 #include <openssl/obj_mac.h> | 
|   10 #include <openssl/pem.h> |   10 #include <openssl/pem.h> | 
| (...skipping 367 matching lines...) Expand 10 before | Expand all | Expand 10 after  Loading... | 
|  378     default: { |  378     default: { | 
|  379       NOTREACHED() << "Certificate format " << format << " unimplemented"; |  379       NOTREACHED() << "Certificate format " << format << " unimplemented"; | 
|  380       break; |  380       break; | 
|  381     } |  381     } | 
|  382   } |  382   } | 
|  383  |  383  | 
|  384   return results; |  384   return results; | 
|  385 } |  385 } | 
|  386  |  386  | 
|  387 // static |  387 // static | 
|  388 X509Certificate* X509Certificate::CreateFromPickle(const Pickle& pickle, |  | 
|  389                                                    void** pickle_iter) { |  | 
|  390   const char* data; |  | 
|  391   int length; |  | 
|  392   if (!pickle.ReadData(pickle_iter, &data, &length)) |  | 
|  393     return NULL; |  | 
|  394  |  | 
|  395   return CreateFromBytes(data, length); |  | 
|  396 } |  | 
|  397  |  | 
|  398 // static |  | 
|  399 X509Certificate* X509Certificate::CreateSelfSigned( |  388 X509Certificate* X509Certificate::CreateSelfSigned( | 
|  400     crypto::RSAPrivateKey* key, |  389     crypto::RSAPrivateKey* key, | 
|  401     const std::string& subject, |  390     const std::string& subject, | 
|  402     uint32 serial_number, |  391     uint32 serial_number, | 
|  403     base::TimeDelta valid_duration) { |  392     base::TimeDelta valid_duration) { | 
|  404   // TODO(port): Implement. |  393   // TODO(port): Implement. | 
|  405   return NULL; |  394   return NULL; | 
|  406 } |  395 } | 
|  407  |  396  | 
|  408 void X509Certificate::Persist(Pickle* pickle) { |  | 
|  409   DERCache der_cache; |  | 
|  410   if (!GetDERAndCacheIfNeeded(cert_handle_, &der_cache)) |  | 
|  411       return; |  | 
|  412  |  | 
|  413   pickle->WriteData(reinterpret_cast<const char*>(der_cache.data), |  | 
|  414                     der_cache.data_length); |  | 
|  415 } |  | 
|  416  |  | 
|  417 void X509Certificate::GetDNSNames(std::vector<std::string>* dns_names) const { |  397 void X509Certificate::GetDNSNames(std::vector<std::string>* dns_names) const { | 
|  418   dns_names->clear(); |  398   dns_names->clear(); | 
|  419  |  399  | 
|  420   ParseSubjectAltNames(cert_handle_, dns_names); |  400   ParseSubjectAltNames(cert_handle_, dns_names); | 
|  421  |  401  | 
|  422   if (dns_names->empty()) |  402   if (dns_names->empty()) | 
|  423     dns_names->push_back(subject_.common_name); |  403     dns_names->push_back(subject_.common_name); | 
|  424 } |  404 } | 
|  425  |  405  | 
|  426 // static |  406 // static | 
| (...skipping 99 matching lines...) Expand 10 before | Expand all | Expand 10 after  Loading... | 
|  526   // DER data. Encoding it from OSCertHandle is an expensive operation, so we |  506   // DER data. Encoding it from OSCertHandle is an expensive operation, so we | 
|  527   // cache the DER (if not already cached via X509_set_ex_data). |  507   // cache the DER (if not already cached via X509_set_ex_data). | 
|  528   DERCache der_cache_a, der_cache_b; |  508   DERCache der_cache_a, der_cache_b; | 
|  529  |  509  | 
|  530   return GetDERAndCacheIfNeeded(a, &der_cache_a) && |  510   return GetDERAndCacheIfNeeded(a, &der_cache_a) && | 
|  531       GetDERAndCacheIfNeeded(b, &der_cache_b) && |  511       GetDERAndCacheIfNeeded(b, &der_cache_b) && | 
|  532       der_cache_a.data_length == der_cache_b.data_length && |  512       der_cache_a.data_length == der_cache_b.data_length && | 
|  533       memcmp(der_cache_a.data, der_cache_b.data, der_cache_a.data_length) == 0; |  513       memcmp(der_cache_a.data, der_cache_b.data, der_cache_a.data_length) == 0; | 
|  534 } |  514 } | 
|  535  |  515  | 
 |  516 // static | 
 |  517 X509Certificate::OSCertHandle | 
 |  518 X509Certificate::ReadCertHandleFromPickle(const Pickle& pickle, | 
 |  519                                           void** pickle_iter) { | 
 |  520   const char* data; | 
 |  521   int length; | 
 |  522   if (!pickle.ReadData(pickle_iter, &data, &length)) | 
 |  523     return NULL; | 
 |  524  | 
 |  525   return CreateOSCertHandleFromBytes(data, length); | 
 |  526 } | 
 |  527  | 
 |  528 // static | 
 |  529 bool X509Certificate::WriteCertHandleToPickle(OSCertHandle cert_handle, | 
 |  530                                               Pickle* pickle) { | 
 |  531   DERCache der_cache; | 
 |  532   if (!GetDERAndCacheIfNeeded(cert_handle, &der_cache)) | 
 |  533     return false; | 
 |  534  | 
 |  535   return pickle->WriteData( | 
 |  536       reinterpret_cast<const char*>(der_cache.data), | 
 |  537       der_cache.data_length); | 
 |  538 } | 
 |  539  | 
|  536 } // namespace net |  540 } // namespace net | 
| OLD | NEW |