diff options
Diffstat (limited to 'net/base/x509_util_ios.cc')
-rw-r--r-- | net/base/x509_util_ios.cc | 141 |
1 files changed, 0 insertions, 141 deletions
diff --git a/net/base/x509_util_ios.cc b/net/base/x509_util_ios.cc deleted file mode 100644 index 66fc2aa..0000000 --- a/net/base/x509_util_ios.cc +++ /dev/null @@ -1,141 +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_util_ios.h" - -#include <cert.h> -#include <CommonCrypto/CommonDigest.h> -#include <nss.h> -#include <prtypes.h> - -#include "base/mac/scoped_cftyperef.h" -#include "crypto/nss_util.h" -#include "net/base/x509_certificate.h" -#include "net/base/x509_util_nss.h" - -using base::mac::ScopedCFTypeRef; - -namespace net { -namespace x509_util_ios { - -namespace { - -// Creates an NSS certificate handle from |data|, which is |length| bytes in -// size. -CERTCertificate* CreateNSSCertHandleFromBytes(const char* data, - int length) { - 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, NULL, - PR_FALSE, PR_TRUE); -} - -} // namespace - -CERTCertificate* CreateNSSCertHandleFromOSHandle( - SecCertificateRef cert_handle) { - ScopedCFTypeRef<CFDataRef> cert_data(SecCertificateCopyData(cert_handle)); - return CreateNSSCertHandleFromBytes( - reinterpret_cast<const char*>(CFDataGetBytePtr(cert_data)), - CFDataGetLength(cert_data)); -} - -SecCertificateRef CreateOSCertHandleFromNSSHandle( - CERTCertificate* nss_cert_handle) { - return X509Certificate::CreateOSCertHandleFromBytes( - reinterpret_cast<const char*>(nss_cert_handle->derCert.data), - nss_cert_handle->derCert.len); -} - -X509Certificate* CreateCertFromNSSHandles( - CERTCertificate* cert_handle, - const std::vector<CERTCertificate*>& intermediates) { - ScopedCFTypeRef<SecCertificateRef> os_server_cert( - CreateOSCertHandleFromNSSHandle(cert_handle)); - if (!os_server_cert) - return NULL; - std::vector<SecCertificateRef> os_intermediates; - for (size_t i = 0; i < intermediates.size(); ++i) { - SecCertificateRef intermediate = - CreateOSCertHandleFromNSSHandle(intermediates[i]); - if (!intermediate) - break; - os_intermediates.push_back(intermediate); - } - - X509Certificate* cert = NULL; - if (intermediates.size() == os_intermediates.size()) { - cert = X509Certificate::CreateFromHandle(os_server_cert, - os_intermediates); - } - - for (size_t i = 0; i < os_intermediates.size(); ++i) - CFRelease(os_intermediates[i]); - return cert; -} - -SHA1HashValue CalculateFingerprintNSS(CERTCertificate* cert) { - DCHECK(cert->derCert.data); - DCHECK_NE(0U, cert->derCert.len); - SHA1HashValue sha1; - memset(sha1.data, 0, sizeof(sha1.data)); - CC_SHA1(cert->derCert.data, cert->derCert.len, sha1.data); - return sha1; -} - -// NSSCertificate implementation. - -NSSCertificate::NSSCertificate(SecCertificateRef cert_handle) { - nss_cert_handle_ = CreateNSSCertHandleFromOSHandle(cert_handle); - DLOG_IF(INFO, cert_handle && !nss_cert_handle_) - << "Could not convert SecCertificateRef to CERTCertificate*"; -} - -NSSCertificate::~NSSCertificate() { - CERT_DestroyCertificate(nss_cert_handle_); -} - -CERTCertificate* NSSCertificate::cert_handle() const { - return nss_cert_handle_; -} - -// NSSCertChain implementation - -NSSCertChain::NSSCertChain(X509Certificate* certificate) { - DCHECK(certificate); - certs_.push_back(CreateNSSCertHandleFromOSHandle( - certificate->os_cert_handle())); - const X509Certificate::OSCertHandles& cert_intermediates = - certificate->GetIntermediateCertificates(); - for (size_t i = 0; i < cert_intermediates.size(); ++i) - certs_.push_back(CreateNSSCertHandleFromOSHandle(cert_intermediates[i])); -} - -NSSCertChain::~NSSCertChain() { - for (size_t i = 0; i < certs_.size(); ++i) - CERT_DestroyCertificate(certs_[i]); -} - -CERTCertificate* NSSCertChain::cert_handle() const { - return certs_.empty() ? NULL : certs_.front(); -} - -const std::vector<CERTCertificate*>& NSSCertChain::cert_chain() const { - return certs_; -} - -} // namespace x509_util_ios -} // namespace net |