Index: net/base/x509_util_mac.cc |
diff --git a/net/base/x509_util_mac.cc b/net/base/x509_util_mac.cc |
deleted file mode 100644 |
index a53b5ac37ab70712d496665a5df595babb860eb2..0000000000000000000000000000000000000000 |
--- a/net/base/x509_util_mac.cc |
+++ /dev/null |
@@ -1,231 +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_mac.h" |
- |
-#include "base/logging.h" |
-#include "third_party/apple_apsl/cssmapplePriv.h" |
- |
-namespace net { |
- |
-namespace x509_util { |
- |
-namespace { |
- |
-// Creates a SecPolicyRef for the given OID, with optional value. |
-OSStatus CreatePolicy(const CSSM_OID* policy_oid, |
- void* option_data, |
- size_t option_length, |
- SecPolicyRef* policy) { |
- SecPolicySearchRef search; |
- OSStatus err = SecPolicySearchCreate(CSSM_CERT_X_509v3, policy_oid, NULL, |
- &search); |
- if (err) |
- return err; |
- err = SecPolicySearchCopyNext(search, policy); |
- CFRelease(search); |
- if (err) |
- return err; |
- |
- if (option_data) { |
- CSSM_DATA options_data = { |
- option_length, |
- reinterpret_cast<uint8_t*>(option_data) |
- }; |
- err = SecPolicySetValue(*policy, &options_data); |
- if (err) { |
- CFRelease(*policy); |
- return err; |
- } |
- } |
- return noErr; |
-} |
- |
-} // namespace |
- |
- |
-OSStatus CreateSSLClientPolicy(SecPolicyRef* policy) { |
- CSSM_APPLE_TP_SSL_OPTIONS tp_ssl_options; |
- memset(&tp_ssl_options, 0, sizeof(tp_ssl_options)); |
- tp_ssl_options.Version = CSSM_APPLE_TP_SSL_OPTS_VERSION; |
- tp_ssl_options.Flags |= CSSM_APPLE_TP_SSL_CLIENT; |
- |
- return CreatePolicy(&CSSMOID_APPLE_TP_SSL, &tp_ssl_options, |
- sizeof(tp_ssl_options), policy); |
-} |
- |
-OSStatus CreateSSLServerPolicy(const std::string& hostname, |
- SecPolicyRef* policy) { |
- CSSM_APPLE_TP_SSL_OPTIONS tp_ssl_options; |
- memset(&tp_ssl_options, 0, sizeof(tp_ssl_options)); |
- tp_ssl_options.Version = CSSM_APPLE_TP_SSL_OPTS_VERSION; |
- if (!hostname.empty()) { |
- tp_ssl_options.ServerName = hostname.data(); |
- tp_ssl_options.ServerNameLen = hostname.size(); |
- } |
- |
- return CreatePolicy(&CSSMOID_APPLE_TP_SSL, &tp_ssl_options, |
- sizeof(tp_ssl_options), policy); |
-} |
- |
-OSStatus CreateBasicX509Policy(SecPolicyRef* policy) { |
- return CreatePolicy(&CSSMOID_APPLE_X509_BASIC, NULL, 0, policy); |
-} |
- |
-OSStatus CreateRevocationPolicies(bool enable_revocation_checking, |
- bool enable_ev_checking, |
- CFMutableArrayRef policies) { |
- OSStatus status = noErr; |
- |
- // In order to bypass the system revocation checking settings, the |
- // SecTrustRef must have at least one revocation policy associated with it. |
- // Since it is not known prior to verification whether the Apple TP will |
- // consider a certificate as an EV candidate, the default policy used is a |
- // CRL policy, since it does not communicate over the network. |
- // If the TP believes the leaf is an EV cert, it will explicitly add an |
- // OCSP policy to perform the online checking, and if it doesn't believe |
- // that the leaf is EV, then the default CRL policy will effectively no-op. |
- // This behaviour is used to implement EV-only revocation checking. |
- if (enable_ev_checking || enable_revocation_checking) { |
- CSSM_APPLE_TP_CRL_OPTIONS tp_crl_options; |
- memset(&tp_crl_options, 0, sizeof(tp_crl_options)); |
- tp_crl_options.Version = CSSM_APPLE_TP_CRL_OPTS_VERSION; |
- // Only allow network CRL fetches if the caller explicitly requests |
- // online revocation checking. Note that, as of OS X 10.7.2, the system |
- // will set force this flag on according to system policies, so |
- // online revocation checks cannot be completely disabled. |
- if (enable_revocation_checking) |
- tp_crl_options.CrlFlags = CSSM_TP_ACTION_FETCH_CRL_FROM_NET; |
- |
- SecPolicyRef crl_policy; |
- status = CreatePolicy(&CSSMOID_APPLE_TP_REVOCATION_CRL, &tp_crl_options, |
- sizeof(tp_crl_options), &crl_policy); |
- if (status) |
- return status; |
- CFArrayAppendValue(policies, crl_policy); |
- CFRelease(crl_policy); |
- } |
- |
- // If revocation checking is explicitly enabled, then add an OCSP policy |
- // and allow network access. If both revocation checking and EV checking |
- // are disabled, then the added OCSP policy will be prevented from |
- // accessing the network. This is done because the TP will force an OCSP |
- // policy to be present when it believes the certificate is EV. If network |
- // fetching was not explicitly disabled, then it would be as if |
- // enable_ev_checking was always set to true. |
- if (enable_revocation_checking || !enable_ev_checking) { |
- CSSM_APPLE_TP_OCSP_OPTIONS tp_ocsp_options; |
- memset(&tp_ocsp_options, 0, sizeof(tp_ocsp_options)); |
- tp_ocsp_options.Version = CSSM_APPLE_TP_OCSP_OPTS_VERSION; |
- |
- if (enable_revocation_checking) { |
- // The default for the OCSP policy is to fetch responses via the network, |
- // unlike the CRL policy default. The policy is further modified to |
- // prefer OCSP over CRLs, if both are specified on the certificate. This |
- // is because an OCSP response is both sufficient and typically |
- // significantly smaller than the CRL counterpart. |
- tp_ocsp_options.Flags = CSSM_TP_ACTION_OCSP_SUFFICIENT; |
- } else { |
- // Effectively disable OCSP checking by making it impossible to get an |
- // OCSP response. Even if the Apple TP forces OCSP, no checking will |
- // be able to succeed. If this happens, the Apple TP will report an error |
- // that OCSP was unavailable, but this will be handled and suppressed in |
- // X509Certificate::Verify(). |
- tp_ocsp_options.Flags = CSSM_TP_ACTION_OCSP_DISABLE_NET | |
- CSSM_TP_ACTION_OCSP_CACHE_READ_DISABLE; |
- } |
- |
- SecPolicyRef ocsp_policy; |
- status = CreatePolicy(&CSSMOID_APPLE_TP_REVOCATION_OCSP, &tp_ocsp_options, |
- sizeof(tp_ocsp_options), &ocsp_policy); |
- if (status) |
- return status; |
- CFArrayAppendValue(policies, ocsp_policy); |
- CFRelease(ocsp_policy); |
- } |
- |
- return status; |
-} |
- |
-CSSMFieldValue::CSSMFieldValue() |
- : cl_handle_(CSSM_INVALID_HANDLE), |
- oid_(NULL), |
- field_(NULL) { |
-} |
-CSSMFieldValue::CSSMFieldValue(CSSM_CL_HANDLE cl_handle, |
- const CSSM_OID* oid, |
- CSSM_DATA_PTR field) |
- : cl_handle_(cl_handle), |
- oid_(const_cast<CSSM_OID_PTR>(oid)), |
- field_(field) { |
-} |
- |
-CSSMFieldValue::~CSSMFieldValue() { |
- Reset(CSSM_INVALID_HANDLE, NULL, NULL); |
-} |
- |
-void CSSMFieldValue::Reset(CSSM_CL_HANDLE cl_handle, |
- CSSM_OID_PTR oid, |
- CSSM_DATA_PTR field) { |
- if (cl_handle_ && oid_ && field_) |
- CSSM_CL_FreeFieldValue(cl_handle_, oid_, field_); |
- cl_handle_ = cl_handle; |
- oid_ = oid; |
- field_ = field; |
-} |
- |
-CSSMCachedCertificate::CSSMCachedCertificate() |
- : cl_handle_(CSSM_INVALID_HANDLE), |
- cached_cert_handle_(CSSM_INVALID_HANDLE) { |
-} |
-CSSMCachedCertificate::~CSSMCachedCertificate() { |
- if (cl_handle_ && cached_cert_handle_) |
- CSSM_CL_CertAbortCache(cl_handle_, cached_cert_handle_); |
-} |
- |
-OSStatus CSSMCachedCertificate::Init(SecCertificateRef os_cert_handle) { |
- DCHECK(!cl_handle_ && !cached_cert_handle_); |
- DCHECK(os_cert_handle); |
- CSSM_DATA cert_data; |
- OSStatus status = SecCertificateGetData(os_cert_handle, &cert_data); |
- if (status) |
- return status; |
- status = SecCertificateGetCLHandle(os_cert_handle, &cl_handle_); |
- if (status) { |
- DCHECK(!cl_handle_); |
- return status; |
- } |
- |
- status = CSSM_CL_CertCache(cl_handle_, &cert_data, &cached_cert_handle_); |
- if (status) |
- DCHECK(!cached_cert_handle_); |
- return status; |
-} |
- |
-OSStatus CSSMCachedCertificate::GetField(const CSSM_OID* field_oid, |
- CSSMFieldValue* field) const { |
- DCHECK(cl_handle_); |
- DCHECK(cached_cert_handle_); |
- |
- CSSM_OID_PTR oid = const_cast<CSSM_OID_PTR>(field_oid); |
- CSSM_DATA_PTR field_ptr = NULL; |
- CSSM_HANDLE results_handle = CSSM_INVALID_HANDLE; |
- uint32 field_value_count = 0; |
- CSSM_RETURN status = CSSM_CL_CertGetFirstCachedFieldValue( |
- cl_handle_, cached_cert_handle_, oid, &results_handle, |
- &field_value_count, &field_ptr); |
- if (status) |
- return status; |
- |
- // Note: |field_value_count| may be > 1, indicating that more than one |
- // value is present. This may happen with extensions, but for current |
- // usages, only the first value is returned. |
- CSSM_CL_CertAbortQuery(cl_handle_, results_handle); |
- field->Reset(cl_handle_, oid, field_ptr); |
- return CSSM_OK; |
-} |
- |
-} // namespace x509_util |
- |
-} // namespace net |