Chromium Code Reviews| 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> |
| (...skipping 931 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... | |
| 942 OSCertHandle cert_handle) { | 942 OSCertHandle cert_handle) { |
| 943 return CERT_DupCertificate(cert_handle); | 943 return CERT_DupCertificate(cert_handle); |
| 944 } | 944 } |
| 945 | 945 |
| 946 // static | 946 // static |
| 947 void X509Certificate::FreeOSCertHandle(OSCertHandle cert_handle) { | 947 void X509Certificate::FreeOSCertHandle(OSCertHandle cert_handle) { |
| 948 CERT_DestroyCertificate(cert_handle); | 948 CERT_DestroyCertificate(cert_handle); |
| 949 } | 949 } |
| 950 | 950 |
| 951 // static | 951 // static |
| 952 void X509Certificate::GetCertChainFromCert(OSCertHandle cert_handle, | |
| 953 OSCertHandles* cert_handles) { | |
| 954 CERTCertList* cert_list = | |
| 955 CERT_GetCertChainFromCert(cert_handle, PR_Now(), certUsageSSLServer); | |
|
wtc
2011/04/07 01:00:29
The certificate chain is readily available in the
| |
| 956 CERTCertListNode* node; | |
| 957 for (node = CERT_LIST_HEAD(cert_list); | |
| 958 !CERT_LIST_END(node, cert_list); | |
| 959 node = CERT_LIST_NEXT(node)) { | |
| 960 cert_handles->push_back(CERT_DupCertificate(node->cert)); | |
| 961 } | |
| 962 CERT_DestroyCertList(cert_list); | |
| 963 } | |
| 964 | |
| 965 // static | |
| 966 void X509Certificate::DestroyCertChain(OSCertHandles* cert_handles) { | |
| 967 for (OSCertHandles::iterator i(cert_handles->begin()); | |
| 968 i != cert_handles->end(); ++i) | |
| 969 CERT_DestroyCertificate(*i); | |
| 970 cert_handles->clear(); | |
| 971 } | |
| 972 | |
| 973 // static | |
| 952 SHA1Fingerprint X509Certificate::CalculateFingerprint( | 974 SHA1Fingerprint X509Certificate::CalculateFingerprint( |
| 953 OSCertHandle cert) { | 975 OSCertHandle cert) { |
| 954 SHA1Fingerprint sha1; | 976 SHA1Fingerprint sha1; |
| 955 memset(sha1.data, 0, sizeof(sha1.data)); | 977 memset(sha1.data, 0, sizeof(sha1.data)); |
| 956 | 978 |
| 957 DCHECK(NULL != cert->derCert.data); | 979 DCHECK(NULL != cert->derCert.data); |
| 958 DCHECK(0 != cert->derCert.len); | 980 DCHECK(0 != cert->derCert.len); |
| 959 | 981 |
| 960 SECStatus rv = HASH_HashBuf(HASH_AlgSHA1, sha1.data, | 982 SECStatus rv = HASH_HashBuf(HASH_AlgSHA1, sha1.data, |
| 961 cert->derCert.data, cert->derCert.len); | 983 cert->derCert.data, cert->derCert.len); |
| 962 DCHECK(rv == SECSuccess); | 984 DCHECK(rv == SECSuccess); |
| 963 | 985 |
| 964 return sha1; | 986 return sha1; |
| 965 } | 987 } |
| 966 | 988 |
| 967 } // namespace net | 989 } // namespace net |
| OLD | NEW |