Index: net/base/x509_certificate_nss.cc |
diff --git a/net/base/x509_certificate_nss.cc b/net/base/x509_certificate_nss.cc |
deleted file mode 100644 |
index 2fe571db63b9835183925a7e2e2a4ec95a3d5c47..0000000000000000000000000000000000000000 |
--- a/net/base/x509_certificate_nss.cc |
+++ /dev/null |
@@ -1,306 +0,0 @@ |
-// Copyright (c) 2012 The Chromium Authors. All rights reserved. |
-// Use of this source code is governed by a BSD-style license that can be |
-// found in the LICENSE file. |
- |
-#include "net/base/x509_certificate.h" |
- |
-#include <cert.h> |
-#include <cryptohi.h> |
-#include <keyhi.h> |
-#include <nss.h> |
-#include <pk11pub.h> |
-#include <prtime.h> |
-#include <seccomon.h> |
-#include <secder.h> |
-#include <sechash.h> |
- |
-#include "base/logging.h" |
-#include "base/memory/scoped_ptr.h" |
-#include "base/pickle.h" |
-#include "base/time.h" |
-#include "crypto/nss_util.h" |
-#include "crypto/rsa_private_key.h" |
-#include "crypto/scoped_nss_types.h" |
-#include "net/base/x509_util_nss.h" |
- |
-namespace net { |
- |
-void X509Certificate::Initialize() { |
- x509_util::ParsePrincipal(&cert_handle_->subject, &subject_); |
- x509_util::ParsePrincipal(&cert_handle_->issuer, &issuer_); |
- |
- x509_util::ParseDate(&cert_handle_->validity.notBefore, &valid_start_); |
- x509_util::ParseDate(&cert_handle_->validity.notAfter, &valid_expiry_); |
- |
- fingerprint_ = CalculateFingerprint(cert_handle_); |
- ca_fingerprint_ = CalculateCAFingerprint(intermediate_ca_certs_); |
- |
- serial_number_ = x509_util::ParseSerialNumber(cert_handle_); |
-} |
- |
-// static |
-X509Certificate* X509Certificate::CreateFromBytesWithNickname( |
- const char* data, |
- int length, |
- const char* nickname) { |
- OSCertHandle cert_handle = CreateOSCertHandleFromBytesWithNickname(data, |
- length, |
- nickname); |
- if (!cert_handle) |
- return NULL; |
- |
- X509Certificate* cert = CreateFromHandle(cert_handle, OSCertHandles()); |
- FreeOSCertHandle(cert_handle); |
- |
- if (nickname) |
- cert->default_nickname_ = nickname; |
- |
- return cert; |
-} |
- |
-std::string X509Certificate::GetDefaultNickname(CertType type) const { |
- if (!default_nickname_.empty()) |
- return default_nickname_; |
- |
- std::string result; |
- if (type == USER_CERT && cert_handle_->slot) { |
- // Find the private key for this certificate and see if it has a |
- // nickname. If there is a private key, and it has a nickname, then |
- // we return that nickname. |
- SECKEYPrivateKey* private_key = PK11_FindPrivateKeyFromCert( |
- cert_handle_->slot, |
- cert_handle_, |
- NULL); // wincx |
- if (private_key) { |
- char* private_key_nickname = PK11_GetPrivateKeyNickname(private_key); |
- if (private_key_nickname) { |
- result = private_key_nickname; |
- PORT_Free(private_key_nickname); |
- SECKEY_DestroyPrivateKey(private_key); |
- return result; |
- } |
- SECKEY_DestroyPrivateKey(private_key); |
- } |
- } |
- |
- switch (type) { |
- case CA_CERT: { |
- char* nickname = CERT_MakeCANickname(cert_handle_); |
- result = nickname; |
- PORT_Free(nickname); |
- break; |
- } |
- case USER_CERT: { |
- // Create a nickname for a user certificate. |
- // We use the scheme used by Firefox: |
- // --> <subject's common name>'s <issuer's common name> ID. |
- // TODO(gspencer): internationalize this: it's wrong to |
- // hard code English. |
- |
- std::string username, ca_name; |
- char* temp_username = CERT_GetCommonName( |
- &cert_handle_->subject); |
- char* temp_ca_name = CERT_GetCommonName(&cert_handle_->issuer); |
- if (temp_username) { |
- username = temp_username; |
- PORT_Free(temp_username); |
- } |
- if (temp_ca_name) { |
- ca_name = temp_ca_name; |
- PORT_Free(temp_ca_name); |
- } |
- result = username + "'s " + ca_name + " ID"; |
- break; |
- } |
- case SERVER_CERT: |
- result = subject_.GetDisplayName(); |
- break; |
- case UNKNOWN_CERT: |
- default: |
- break; |
- } |
- return result; |
-} |
- |
-// static |
-X509Certificate* X509Certificate::CreateSelfSigned( |
- crypto::RSAPrivateKey* key, |
- const std::string& subject, |
- uint32 serial_number, |
- base::TimeDelta valid_duration) { |
- DCHECK(key); |
- base::Time not_valid_before = base::Time::Now(); |
- base::Time not_valid_after = not_valid_before + valid_duration; |
- CERTCertificate* cert = x509_util::CreateSelfSignedCert(key->public_key(), |
- key->key(), |
- subject, |
- serial_number, |
- not_valid_before, |
- not_valid_after); |
- if (!cert) |
- return NULL; |
- |
- X509Certificate* x509_cert = X509Certificate::CreateFromHandle( |
- cert, X509Certificate::OSCertHandles()); |
- CERT_DestroyCertificate(cert); |
- return x509_cert; |
-} |
- |
-void X509Certificate::GetSubjectAltName( |
- std::vector<std::string>* dns_names, |
- std::vector<std::string>* ip_addrs) const { |
- x509_util::GetSubjectAltName(cert_handle_, dns_names, ip_addrs); |
-} |
- |
-bool X509Certificate::VerifyNameMatch(const std::string& hostname) const { |
- return CERT_VerifyCertName(cert_handle_, hostname.c_str()) == SECSuccess; |
-} |
- |
-bool X509Certificate::IsIssuedByEncoded( |
- const std::vector<std::string>& valid_issuers) { |
- // Get certificate chain as scoped list of CERTCertificate objects. |
- std::vector<CERTCertificate*> cert_chain; |
- cert_chain.push_back(cert_handle_); |
- for (size_t n = 0; n < intermediate_ca_certs_.size(); ++n) { |
- cert_chain.push_back(intermediate_ca_certs_[n]); |
- } |
- // Convert encoded issuers to scoped CERTName* list. |
- std::vector<CERTName*> issuers; |
- crypto::ScopedPLArenaPool arena(PORT_NewArena(DER_DEFAULT_CHUNKSIZE)); |
- if (!x509_util::GetIssuersFromEncodedList(valid_issuers, |
- arena.get(), |
- &issuers)) { |
- return false; |
- } |
- return x509_util::IsCertificateIssuedBy(cert_chain, issuers); |
-} |
- |
-// static |
-bool X509Certificate::GetDEREncoded(X509Certificate::OSCertHandle cert_handle, |
- std::string* encoded) { |
- if (!cert_handle->derCert.len) |
- return false; |
- encoded->assign(reinterpret_cast<char*>(cert_handle->derCert.data), |
- cert_handle->derCert.len); |
- return true; |
-} |
- |
-// static |
-bool X509Certificate::IsSameOSCert(X509Certificate::OSCertHandle a, |
- X509Certificate::OSCertHandle b) { |
- DCHECK(a && b); |
- if (a == b) |
- return true; |
- return a->derCert.len == b->derCert.len && |
- memcmp(a->derCert.data, b->derCert.data, a->derCert.len) == 0; |
-} |
- |
-// static |
-X509Certificate::OSCertHandle X509Certificate::CreateOSCertHandleFromBytes( |
- const char* data, int length) { |
- return CreateOSCertHandleFromBytesWithNickname(data, length, NULL); |
-} |
- |
-// static |
-X509Certificate::OSCertHandle |
-X509Certificate::CreateOSCertHandleFromBytesWithNickname( |
- const char* data, |
- int length, |
- const char* nickname) { |
- if (length < 0) |
- return NULL; |
- |
- crypto::EnsureNSSInit(); |
- |
- if (!NSS_IsInitialized()) |
- return NULL; |
- |
- SECItem der_cert; |
- der_cert.data = reinterpret_cast<unsigned char*>(const_cast<char*>(data)); |
- der_cert.len = length; |
- der_cert.type = siDERCertBuffer; |
- |
- // Parse into a certificate structure. |
- return CERT_NewTempCertificate(CERT_GetDefaultCertDB(), &der_cert, |
- const_cast<char*>(nickname), |
- PR_FALSE, PR_TRUE); |
-} |
- |
-// static |
-X509Certificate::OSCertHandles X509Certificate::CreateOSCertHandlesFromBytes( |
- const char* data, |
- int length, |
- Format format) { |
- return x509_util::CreateOSCertHandlesFromBytes(data, length, format); |
-} |
- |
-// static |
-X509Certificate::OSCertHandle X509Certificate::DupOSCertHandle( |
- OSCertHandle cert_handle) { |
- return CERT_DupCertificate(cert_handle); |
-} |
- |
-// static |
-void X509Certificate::FreeOSCertHandle(OSCertHandle cert_handle) { |
- CERT_DestroyCertificate(cert_handle); |
-} |
- |
-// static |
-SHA1HashValue X509Certificate::CalculateFingerprint( |
- OSCertHandle cert) { |
- SHA1HashValue sha1; |
- memset(sha1.data, 0, sizeof(sha1.data)); |
- |
- DCHECK(NULL != cert->derCert.data); |
- DCHECK_NE(0U, cert->derCert.len); |
- |
- SECStatus rv = HASH_HashBuf(HASH_AlgSHA1, sha1.data, |
- cert->derCert.data, cert->derCert.len); |
- DCHECK_EQ(SECSuccess, rv); |
- |
- return sha1; |
-} |
- |
-// static |
-SHA1HashValue X509Certificate::CalculateCAFingerprint( |
- const OSCertHandles& intermediates) { |
- SHA1HashValue sha1; |
- memset(sha1.data, 0, sizeof(sha1.data)); |
- |
- HASHContext* sha1_ctx = HASH_Create(HASH_AlgSHA1); |
- if (!sha1_ctx) |
- return sha1; |
- HASH_Begin(sha1_ctx); |
- for (size_t i = 0; i < intermediates.size(); ++i) { |
- CERTCertificate* ca_cert = intermediates[i]; |
- HASH_Update(sha1_ctx, ca_cert->derCert.data, ca_cert->derCert.len); |
- } |
- unsigned int result_len; |
- HASH_End(sha1_ctx, sha1.data, &result_len, HASH_ResultLenContext(sha1_ctx)); |
- HASH_Destroy(sha1_ctx); |
- |
- return sha1; |
-} |
- |
-// static |
-X509Certificate::OSCertHandle |
-X509Certificate::ReadOSCertHandleFromPickle(PickleIterator* pickle_iter) { |
- return x509_util::ReadOSCertHandleFromPickle(pickle_iter); |
-} |
- |
-// static |
-bool X509Certificate::WriteOSCertHandleToPickle(OSCertHandle cert_handle, |
- Pickle* pickle) { |
- return pickle->WriteData( |
- reinterpret_cast<const char*>(cert_handle->derCert.data), |
- cert_handle->derCert.len); |
-} |
- |
-// static |
-void X509Certificate::GetPublicKeyInfo(OSCertHandle cert_handle, |
- size_t* size_bits, |
- PublicKeyType* type) { |
- x509_util::GetPublicKeyInfo(cert_handle, size_bits, type); |
-} |
- |
-} // namespace net |