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 589 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
624 const char* data; | 624 const char* data; |
625 int length; | 625 int length; |
626 if (!pickle.ReadData(pickle_iter, &data, &length)) | 626 if (!pickle.ReadData(pickle_iter, &data, &length)) |
627 return NULL; | 627 return NULL; |
628 | 628 |
629 return CreateFromBytes(data, length); | 629 return CreateFromBytes(data, length); |
630 } | 630 } |
631 | 631 |
632 // static | 632 // static |
633 X509Certificate* X509Certificate::CreateSelfSigned( | 633 X509Certificate* X509Certificate::CreateSelfSigned( |
634 base::RSAPrivateKey* key, | 634 crypto::RSAPrivateKey* key, |
635 const std::string& subject, | 635 const std::string& subject, |
636 uint32 serial_number, | 636 uint32 serial_number, |
637 base::TimeDelta valid_duration) { | 637 base::TimeDelta valid_duration) { |
638 DCHECK(key); | 638 DCHECK(key); |
639 | 639 |
640 // Create info about public key. | 640 // Create info about public key. |
641 CERTSubjectPublicKeyInfo* spki = | 641 CERTSubjectPublicKeyInfo* spki = |
642 SECKEY_CreateSubjectPublicKeyInfo(key->public_key()); | 642 SECKEY_CreateSubjectPublicKeyInfo(key->public_key()); |
643 if (!spki) | 643 if (!spki) |
644 return NULL; | 644 return NULL; |
(...skipping 233 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
878 return a->derCert.len == b->derCert.len && | 878 return a->derCert.len == b->derCert.len && |
879 memcmp(a->derCert.data, b->derCert.data, a->derCert.len) == 0; | 879 memcmp(a->derCert.data, b->derCert.data, a->derCert.len) == 0; |
880 } | 880 } |
881 | 881 |
882 // static | 882 // static |
883 X509Certificate::OSCertHandle X509Certificate::CreateOSCertHandleFromBytes( | 883 X509Certificate::OSCertHandle X509Certificate::CreateOSCertHandleFromBytes( |
884 const char* data, int length) { | 884 const char* data, int length) { |
885 if (length < 0) | 885 if (length < 0) |
886 return NULL; | 886 return NULL; |
887 | 887 |
888 base::EnsureNSSInit(); | 888 crypto::EnsureNSSInit(); |
889 | 889 |
890 if (!NSS_IsInitialized()) | 890 if (!NSS_IsInitialized()) |
891 return NULL; | 891 return NULL; |
892 | 892 |
893 SECItem der_cert; | 893 SECItem der_cert; |
894 der_cert.data = reinterpret_cast<unsigned char*>(const_cast<char*>(data)); | 894 der_cert.data = reinterpret_cast<unsigned char*>(const_cast<char*>(data)); |
895 der_cert.len = length; | 895 der_cert.len = length; |
896 der_cert.type = siDERCertBuffer; | 896 der_cert.type = siDERCertBuffer; |
897 | 897 |
898 // Parse into a certificate structure. | 898 // Parse into a certificate structure. |
899 return CERT_NewTempCertificate(CERT_GetDefaultCertDB(), &der_cert, NULL, | 899 return CERT_NewTempCertificate(CERT_GetDefaultCertDB(), &der_cert, NULL, |
900 PR_FALSE, PR_TRUE); | 900 PR_FALSE, PR_TRUE); |
901 } | 901 } |
902 | 902 |
903 // static | 903 // static |
904 X509Certificate::OSCertHandles X509Certificate::CreateOSCertHandlesFromBytes( | 904 X509Certificate::OSCertHandles X509Certificate::CreateOSCertHandlesFromBytes( |
905 const char* data, int length, Format format) { | 905 const char* data, int length, Format format) { |
906 OSCertHandles results; | 906 OSCertHandles results; |
907 if (length < 0) | 907 if (length < 0) |
908 return results; | 908 return results; |
909 | 909 |
910 base::EnsureNSSInit(); | 910 crypto::EnsureNSSInit(); |
911 | 911 |
912 if (!NSS_IsInitialized()) | 912 if (!NSS_IsInitialized()) |
913 return results; | 913 return results; |
914 | 914 |
915 switch (format) { | 915 switch (format) { |
916 case FORMAT_SINGLE_CERTIFICATE: { | 916 case FORMAT_SINGLE_CERTIFICATE: { |
917 OSCertHandle handle = CreateOSCertHandleFromBytes(data, length); | 917 OSCertHandle handle = CreateOSCertHandleFromBytes(data, length); |
918 if (handle) | 918 if (handle) |
919 results.push_back(handle); | 919 results.push_back(handle); |
920 break; | 920 break; |
(...skipping 37 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
958 DCHECK(0 != cert->derCert.len); | 958 DCHECK(0 != cert->derCert.len); |
959 | 959 |
960 SECStatus rv = HASH_HashBuf(HASH_AlgSHA1, sha1.data, | 960 SECStatus rv = HASH_HashBuf(HASH_AlgSHA1, sha1.data, |
961 cert->derCert.data, cert->derCert.len); | 961 cert->derCert.data, cert->derCert.len); |
962 DCHECK(rv == SECSuccess); | 962 DCHECK(rv == SECSuccess); |
963 | 963 |
964 return sha1; | 964 return sha1; |
965 } | 965 } |
966 | 966 |
967 } // namespace net | 967 } // namespace net |
OLD | NEW |