| Index: net/cert/x509_certificate_mac.cc
|
| diff --git a/net/cert/x509_certificate_mac.cc b/net/cert/x509_certificate_mac.cc
|
| index fd9aaca69b32e12ba135e85857d395c06145cc8c..2f8ce438afd3c8213ba3063f513be54b71596a38 100644
|
| --- a/net/cert/x509_certificate_mac.cc
|
| +++ b/net/cert/x509_certificate_mac.cc
|
| @@ -25,7 +25,6 @@
|
| #include "crypto/cssm_init.h"
|
| #include "crypto/mac_security_services_lock.h"
|
| #include "crypto/nss_util.h"
|
| -#include "crypto/rsa_private_key.h"
|
| #include "net/cert/x509_util_mac.h"
|
|
|
| using base::ScopedCFTypeRef;
|
| @@ -326,144 +325,6 @@ bool X509Certificate::IsIssuedByEncoded(
|
| return false;
|
| }
|
|
|
| -// static
|
| -X509Certificate* X509Certificate::CreateSelfSigned(
|
| - crypto::RSAPrivateKey* key,
|
| - const std::string& subject,
|
| - uint32 serial_number,
|
| - base::TimeDelta valid_duration) {
|
| - DCHECK(key);
|
| - DCHECK(!subject.empty());
|
| -
|
| - if (valid_duration.InSeconds() > kuint32max) {
|
| - LOG(ERROR) << "valid_duration too big " << valid_duration.InSeconds();
|
| - valid_duration = base::TimeDelta::FromSeconds(kuint32max);
|
| - }
|
| -
|
| - // There is a comment in
|
| - // http://www.opensource.apple.com/source/security_certtool/security_certtool-31828/src/CertTool.cpp
|
| - // that serial_numbers being passed into CSSM_TP_SubmitCredRequest can't have
|
| - // their high bit set. We will continue though and mask it out below.
|
| - if (serial_number & 0x80000000)
|
| - LOG(ERROR) << "serial_number has high bit set " << serial_number;
|
| -
|
| - // NSS is used to parse the subject string into a set of
|
| - // CSSM_OID/string pairs. There doesn't appear to be a system routine for
|
| - // parsing Distinguished Name strings.
|
| - crypto::EnsureNSSInit();
|
| -
|
| - CSSMOIDStringVector subject_name_oids;
|
| - ScopedCertName subject_name(
|
| - CERT_AsciiToName(const_cast<char*>(subject.c_str())));
|
| - if (!CERTNameToCSSMOIDVector(subject_name, &subject_name_oids)) {
|
| - DLOG(ERROR) << "Unable to generate CSSMOIDMap from " << subject;
|
| - return NULL;
|
| - }
|
| -
|
| - // Convert the map of oid/string pairs into an array of
|
| - // CSSM_APPLE_TP_NAME_OIDs.
|
| - std::vector<CSSM_APPLE_TP_NAME_OID> cssm_subject_names;
|
| - for (CSSMOIDStringVector::iterator iter = subject_name_oids.begin();
|
| - iter != subject_name_oids.end(); ++iter) {
|
| - CSSM_APPLE_TP_NAME_OID cssm_subject_name;
|
| - cssm_subject_name.oid = iter->oid_;
|
| - cssm_subject_name.string = iter->string_.c_str();
|
| - cssm_subject_names.push_back(cssm_subject_name);
|
| - }
|
| -
|
| - if (cssm_subject_names.empty()) {
|
| - DLOG(ERROR) << "cssm_subject_names.size() == 0. Input: " << subject;
|
| - return NULL;
|
| - }
|
| -
|
| - // Set up a certificate request.
|
| - CSSM_APPLE_TP_CERT_REQUEST certReq;
|
| - memset(&certReq, 0, sizeof(certReq));
|
| - certReq.cspHand = crypto::GetSharedCSPHandle();
|
| - certReq.clHand = crypto::GetSharedCLHandle();
|
| - // See comment about serial numbers above.
|
| - certReq.serialNumber = serial_number & 0x7fffffff;
|
| - certReq.numSubjectNames = cssm_subject_names.size();
|
| - certReq.subjectNames = &cssm_subject_names[0];
|
| - certReq.numIssuerNames = 0; // Root.
|
| - certReq.issuerNames = NULL;
|
| - certReq.issuerNameX509 = NULL;
|
| - certReq.certPublicKey = key->public_key();
|
| - certReq.issuerPrivateKey = key->key();
|
| - // These are the Apple defaults.
|
| - certReq.signatureAlg = CSSM_ALGID_SHA1WithRSA;
|
| - certReq.signatureOid = CSSMOID_SHA1WithRSA;
|
| - certReq.notBefore = 0;
|
| - certReq.notAfter = static_cast<uint32>(valid_duration.InSeconds());
|
| - certReq.numExtensions = 0;
|
| - certReq.extensions = NULL;
|
| - certReq.challengeString = NULL;
|
| -
|
| - CSSM_TP_REQUEST_SET reqSet;
|
| - reqSet.NumberOfRequests = 1;
|
| - reqSet.Requests = &certReq;
|
| -
|
| - CSSM_FIELD policyId;
|
| - memset(&policyId, 0, sizeof(policyId));
|
| - policyId.FieldOid = CSSMOID_APPLE_TP_LOCAL_CERT_GEN;
|
| -
|
| - CSSM_TP_CALLERAUTH_CONTEXT callerAuthContext;
|
| - memset(&callerAuthContext, 0, sizeof(callerAuthContext));
|
| - callerAuthContext.Policy.NumberOfPolicyIds = 1;
|
| - callerAuthContext.Policy.PolicyIds = &policyId;
|
| -
|
| - CSSM_TP_HANDLE tp_handle = crypto::GetSharedTPHandle();
|
| - CSSM_DATA refId;
|
| - memset(&refId, 0, sizeof(refId));
|
| - sint32 estTime;
|
| - CSSM_RETURN crtn = CSSM_TP_SubmitCredRequest(tp_handle, NULL,
|
| - CSSM_TP_AUTHORITY_REQUEST_CERTISSUE, &reqSet, &callerAuthContext,
|
| - &estTime, &refId);
|
| - if (crtn) {
|
| - DLOG(ERROR) << "CSSM_TP_SubmitCredRequest failed " << crtn;
|
| - return NULL;
|
| - }
|
| -
|
| - CSSM_BOOL confirmRequired;
|
| - CSSM_TP_RESULT_SET* resultSet = NULL;
|
| - crtn = CSSM_TP_RetrieveCredResult(tp_handle, &refId, NULL, &estTime,
|
| - &confirmRequired, &resultSet);
|
| - ScopedEncodedCertResults scopedResults(resultSet);
|
| - crypto::CSSMFree(refId.Data);
|
| - if (crtn) {
|
| - DLOG(ERROR) << "CSSM_TP_RetrieveCredResult failed " << crtn;
|
| - return NULL;
|
| - }
|
| -
|
| - if (confirmRequired) {
|
| - // Potential leak here of resultSet. |confirmRequired| should never be
|
| - // true.
|
| - DLOG(ERROR) << "CSSM_TP_RetrieveCredResult required confirmation";
|
| - return NULL;
|
| - }
|
| -
|
| - if (resultSet->NumberOfResults != 1) {
|
| - DLOG(ERROR) << "Unexpected number of results: "
|
| - << resultSet->NumberOfResults;
|
| - return NULL;
|
| - }
|
| -
|
| - CSSM_ENCODED_CERT* encCert =
|
| - reinterpret_cast<CSSM_ENCODED_CERT*>(resultSet->Results);
|
| - ScopedCFTypeRef<SecCertificateRef> scoped_cert;
|
| - SecCertificateRef certificate_ref = NULL;
|
| - OSStatus os_status =
|
| - SecCertificateCreateFromData(&encCert->CertBlob, encCert->CertType,
|
| - encCert->CertEncoding, &certificate_ref);
|
| - if (os_status != 0) {
|
| - OSSTATUS_DLOG(ERROR, os_status) << "SecCertificateCreateFromData failed";
|
| - return NULL;
|
| - }
|
| - scoped_cert.reset(certificate_ref);
|
| -
|
| - return CreateFromHandle(scoped_cert, X509Certificate::OSCertHandles());
|
| -}
|
| -
|
| void X509Certificate::GetSubjectAltName(
|
| std::vector<std::string>* dns_names,
|
| std::vector<std::string>* ip_addrs) const {
|
|
|