| 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 <cert.h> | 7 #include <cert.h> |
| 8 #include <cryptohi.h> | 8 #include <cryptohi.h> |
| 9 #include <keyhi.h> | 9 #include <keyhi.h> |
| 10 #include <nss.h> | 10 #include <nss.h> |
| 11 #include <pk11pub.h> | 11 #include <pk11pub.h> |
| 12 #include <prerror.h> | 12 #include <prerror.h> |
| 13 #include <prtime.h> | 13 #include <prtime.h> |
| 14 #include <secder.h> | 14 #include <secder.h> |
| 15 #include <secerr.h> | 15 #include <secerr.h> |
| 16 #include <sechash.h> | 16 #include <sechash.h> |
| 17 #include <sslerr.h> | 17 #include <sslerr.h> |
| 18 | 18 |
| 19 #include "base/crypto/rsa_private_key.h" | |
| 20 #include "base/logging.h" | 19 #include "base/logging.h" |
| 21 #include "base/memory/scoped_ptr.h" | 20 #include "base/memory/scoped_ptr.h" |
| 22 #include "base/pickle.h" | 21 #include "base/pickle.h" |
| 23 #include "base/time.h" | 22 #include "base/time.h" |
| 24 #include "base/nss_util.h" | 23 #include "crypto/nss_util.h" |
| 24 #include "crypto/rsa_private_key.h" |
| 25 #include "net/base/cert_status_flags.h" | 25 #include "net/base/cert_status_flags.h" |
| 26 #include "net/base/cert_verify_result.h" | 26 #include "net/base/cert_verify_result.h" |
| 27 #include "net/base/ev_root_ca_metadata.h" | 27 #include "net/base/ev_root_ca_metadata.h" |
| 28 #include "net/base/net_errors.h" | 28 #include "net/base/net_errors.h" |
| 29 | 29 |
| 30 namespace net { | 30 namespace net { |
| 31 | 31 |
| 32 namespace { | 32 namespace { |
| 33 | 33 |
| 34 class ScopedCERTCertificatePolicies { | 34 class ScopedCERTCertificatePolicies { |
| (...skipping 601 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 636 const char* data; | 636 const char* data; |
| 637 int length; | 637 int length; |
| 638 if (!pickle.ReadData(pickle_iter, &data, &length)) | 638 if (!pickle.ReadData(pickle_iter, &data, &length)) |
| 639 return NULL; | 639 return NULL; |
| 640 | 640 |
| 641 return CreateFromBytes(data, length); | 641 return CreateFromBytes(data, length); |
| 642 } | 642 } |
| 643 | 643 |
| 644 // static | 644 // static |
| 645 X509Certificate* X509Certificate::CreateSelfSigned( | 645 X509Certificate* X509Certificate::CreateSelfSigned( |
| 646 base::RSAPrivateKey* key, | 646 crypto::RSAPrivateKey* key, |
| 647 const std::string& subject, | 647 const std::string& subject, |
| 648 uint32 serial_number, | 648 uint32 serial_number, |
| 649 base::TimeDelta valid_duration) { | 649 base::TimeDelta valid_duration) { |
| 650 DCHECK(key); | 650 DCHECK(key); |
| 651 | 651 |
| 652 // Create info about public key. | 652 // Create info about public key. |
| 653 CERTSubjectPublicKeyInfo* spki = | 653 CERTSubjectPublicKeyInfo* spki = |
| 654 SECKEY_CreateSubjectPublicKeyInfo(key->public_key()); | 654 SECKEY_CreateSubjectPublicKeyInfo(key->public_key()); |
| 655 if (!spki) | 655 if (!spki) |
| 656 return NULL; | 656 return NULL; |
| (...skipping 239 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 896 return a->derCert.len == b->derCert.len && | 896 return a->derCert.len == b->derCert.len && |
| 897 memcmp(a->derCert.data, b->derCert.data, a->derCert.len) == 0; | 897 memcmp(a->derCert.data, b->derCert.data, a->derCert.len) == 0; |
| 898 } | 898 } |
| 899 | 899 |
| 900 // static | 900 // static |
| 901 X509Certificate::OSCertHandle X509Certificate::CreateOSCertHandleFromBytes( | 901 X509Certificate::OSCertHandle X509Certificate::CreateOSCertHandleFromBytes( |
| 902 const char* data, int length) { | 902 const char* data, int length) { |
| 903 if (length < 0) | 903 if (length < 0) |
| 904 return NULL; | 904 return NULL; |
| 905 | 905 |
| 906 base::EnsureNSSInit(); | 906 crypto::EnsureNSSInit(); |
| 907 | 907 |
| 908 if (!NSS_IsInitialized()) | 908 if (!NSS_IsInitialized()) |
| 909 return NULL; | 909 return NULL; |
| 910 | 910 |
| 911 SECItem der_cert; | 911 SECItem der_cert; |
| 912 der_cert.data = reinterpret_cast<unsigned char*>(const_cast<char*>(data)); | 912 der_cert.data = reinterpret_cast<unsigned char*>(const_cast<char*>(data)); |
| 913 der_cert.len = length; | 913 der_cert.len = length; |
| 914 der_cert.type = siDERCertBuffer; | 914 der_cert.type = siDERCertBuffer; |
| 915 | 915 |
| 916 // Parse into a certificate structure. | 916 // Parse into a certificate structure. |
| 917 return CERT_NewTempCertificate(CERT_GetDefaultCertDB(), &der_cert, NULL, | 917 return CERT_NewTempCertificate(CERT_GetDefaultCertDB(), &der_cert, NULL, |
| 918 PR_FALSE, PR_TRUE); | 918 PR_FALSE, PR_TRUE); |
| 919 } | 919 } |
| 920 | 920 |
| 921 // static | 921 // static |
| 922 X509Certificate::OSCertHandles X509Certificate::CreateOSCertHandlesFromBytes( | 922 X509Certificate::OSCertHandles X509Certificate::CreateOSCertHandlesFromBytes( |
| 923 const char* data, int length, Format format) { | 923 const char* data, int length, Format format) { |
| 924 OSCertHandles results; | 924 OSCertHandles results; |
| 925 if (length < 0) | 925 if (length < 0) |
| 926 return results; | 926 return results; |
| 927 | 927 |
| 928 base::EnsureNSSInit(); | 928 crypto::EnsureNSSInit(); |
| 929 | 929 |
| 930 if (!NSS_IsInitialized()) | 930 if (!NSS_IsInitialized()) |
| 931 return results; | 931 return results; |
| 932 | 932 |
| 933 switch (format) { | 933 switch (format) { |
| 934 case FORMAT_SINGLE_CERTIFICATE: { | 934 case FORMAT_SINGLE_CERTIFICATE: { |
| 935 OSCertHandle handle = CreateOSCertHandleFromBytes(data, length); | 935 OSCertHandle handle = CreateOSCertHandleFromBytes(data, length); |
| 936 if (handle) | 936 if (handle) |
| 937 results.push_back(handle); | 937 results.push_back(handle); |
| 938 break; | 938 break; |
| (...skipping 37 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 976 DCHECK(0 != cert->derCert.len); | 976 DCHECK(0 != cert->derCert.len); |
| 977 | 977 |
| 978 SECStatus rv = HASH_HashBuf(HASH_AlgSHA1, sha1.data, | 978 SECStatus rv = HASH_HashBuf(HASH_AlgSHA1, sha1.data, |
| 979 cert->derCert.data, cert->derCert.len); | 979 cert->derCert.data, cert->derCert.len); |
| 980 DCHECK(rv == SECSuccess); | 980 DCHECK(rv == SECSuccess); |
| 981 | 981 |
| 982 return sha1; | 982 return sha1; |
| 983 } | 983 } |
| 984 | 984 |
| 985 } // namespace net | 985 } // namespace net |
| OLD | NEW |