/* * Copyright (c) 2008-2013 Apple Inc. All Rights Reserved. * * @APPLE_LICENSE_HEADER_START@ * * This file contains Original Code and/or Modifications of Original Code * as defined in and that are subject to the Apple Public Source License * Version 2.0 (the 'License'). You may not use this file except in * compliance with the License. Please obtain a copy of the License at * http://www.opensource.apple.com/apsl/ and read it before using this * file. * * The Original Code and all software distributed under the License are * distributed on an 'AS IS' basis, WITHOUT WARRANTY OF ANY KIND, EITHER * EXPRESS OR IMPLIED, AND APPLE HEREBY DISCLAIMS ALL SUCH WARRANTIES, * INCLUDING WITHOUT LIMITATION, ANY WARRANTIES OF MERCHANTABILITY, * FITNESS FOR A PARTICULAR PURPOSE, QUIET ENJOYMENT OR NON-INFRINGEMENT. * Please see the License for the specific language governing rights and * limitations under the License. * * @APPLE_LICENSE_HEADER_END@ */ /*! @header SecTrustPriv The functions and data types in SecTrustPriv implement trust computation and allow the user to apply trust decisions to the trust configuration. */ #ifndef _SECURITY_SECTRUSTPRIV_H_ #define _SECURITY_SECTRUSTPRIV_H_ #include <Security/SecTrust.h> #include <CoreFoundation/CFData.h> #include <CoreFoundation/CFDictionary.h> __BEGIN_DECLS typedef enum { useNetworkDefault, // default policy: network fetch enabled only for SSL useNetworkDisabled, // explicitly disable network use for any policy useNetworkEnabled // explicitly enable network use for any policy } SecNetworkPolicy; /* Constants used as keys in property lists. See SecTrustCopySummaryPropertiesAtIndex for more information. */ extern CFTypeRef kSecPropertyKeyType; extern CFTypeRef kSecPropertyKeyLabel; extern CFTypeRef kSecPropertyKeyLocalizedLabel; extern CFTypeRef kSecPropertyKeyValue; extern CFTypeRef kSecPropertyTypeWarning; extern CFTypeRef kSecPropertyTypeSuccess; extern CFTypeRef kSecPropertyTypeSection; extern CFTypeRef kSecPropertyTypeData; extern CFTypeRef kSecPropertyTypeString; extern CFTypeRef kSecPropertyTypeURL; extern CFTypeRef kSecPropertyTypeDate; /* Constants used as keys in the dictionary returned by SecTrustCopyInfo. */ extern CFTypeRef kSecTrustInfoExtendedValidationKey; extern CFTypeRef kSecTrustInfoCompanyNameKey; extern CFTypeRef kSecTrustInfoRevocationKey; extern CFTypeRef kSecTrustInfoRevocationValidUntilKey; /*! @function SecTrustCopySummaryPropertiesAtIndex @abstract Return a property array for the certificate. @param trust A reference to the trust object to evaluate. @param ix The index of the requested certificate. Indices run from 0 (leaf) to the anchor (or last certificate found if no anchor was found). @result A property array. It is the caller's responsibility to CFRelease the returned array when it is no longer needed. This function returns a short summary description of the certificate in question. The property at index 0 of the array might also include general information about the entire chain's validity in the context of this trust evaluation. @discussion Returns a property array for this trust certificate. A property array is an array of CFDictionaryRefs. Each dictionary (we call it a property for short) has the following keys: kSecPropertyKeyType This key's value determines how this property should be displayed. Its associated value is one of the following: kSecPropertyTypeWarning The kSecPropertyKeyLocalizedLabel and kSecPropertyKeyLabel keys are not set. The kSecPropertyKeyValue is a CFStringRef which should be displayed in yellow with a warning triangle. kSecPropertyTypeError The kSecPropertyKeyLocalizedLabel and kSecPropertyKeyLabel keys are not set. The kSecPropertyKeyValue is a CFStringRef which should be displayed in red with an error X. kSecPropertyTypeSuccess The kSecPropertyKeyLocalizedLabel and kSecPropertyKeyLabel keys are not set. The kSecPropertyKeyValue is a CFStringRef which should be displayed in green with a checkmark in front of it. kSecPropertyTypeTitle The kSecPropertyKeyLocalizedLabel and kSecPropertyKeyLabel keys are not set. The kSecPropertyKeyValue is a CFStringRef which should be displayed in a larger bold font. kSecPropertyTypeSection The optional kSecPropertyKeyLocalizedLabel is a CFStringRef with the name of the next section to display. The value of the kSecPropertyKeyValue key is a CFArrayRef which is a property array as defined here. kSecPropertyTypeData The optional kSecPropertyKeyLocalizedLabel is a CFStringRef containing the localized label for the value for the kSecPropertyKeyValue. The type of this value is a CFDataRef. Its contents should be displayed as: "bytes length_of_data : hexdump_of_data". Ideally the UI will only show one line of hex dump data and have a disclosure arrow to see the remainder. kSecPropertyTypeString The optional kSecPropertyKeyLocalizedLabel is a CFStringRef containing the localized label for the value for the kSecPropertyKeyValue. The type of this value is a CFStringRef. It's contents should be displayed in the normal font. kSecPropertyTypeURL The optional kSecPropertyKeyLocalizedLabel is a CFStringRef containing the localized label for the value for the kSecPropertyKeyValue. The type of this value is a CFURLRef. It's contents should be displayed as a hyperlink. kSecPropertyTypeDate The optional kSecPropertyKeyLocalizedLabel is a CFStringRef containing the localized label for the value for the kSecPropertyKeyValue. The type of this value is a CFDateRef. It's contents should be displayed in human readable form (probably in the current timezone). kSecPropertyKeyLocalizedLabel Human readable localized label for a given property. kSecPropertyKeyValue See description of kSecPropertyKeyType to determine what the value for this key is. kSecPropertyKeyLabel Non localized key (label) for this value. This is only present for properties with fixed label names. @param certificate A reference to the certificate to evaluate. @result A property array. It is the caller's responsability to CFRelease the returned array when it is no longer needed. */ CFArrayRef SecTrustCopySummaryPropertiesAtIndex(SecTrustRef trust, CFIndex ix); /*! @function SecTrustCopyDetailedPropertiesAtIndex @abstract Return a property array for the certificate. @param trust A reference to the trust object to evaluate. @param ix The index of the requested certificate. Indices run from 0 (leaf) to the anchor (or last certificate found if no anchor was found). @result A property array. It is the caller's responsibility to CFRelease the returned array when it is no longer needed. See SecTrustCopySummaryPropertiesAtIndex on how to intepret this array. Unlike that function call this function returns a detailed description of the certificate in question. */ CFArrayRef SecTrustCopyDetailedPropertiesAtIndex(SecTrustRef trust, CFIndex ix); /*! @function SecTrustCopyProperties @abstract Return a property array for this trust evaluation. @param trust A reference to the trust object to evaluate. @result A property array. It is the caller's responsibility to CFRelease the returned array when it is no longer needed. See SecTrustCopySummaryPropertiesAtIndex for a detailed description of this array. Unlike that function, this function returns a short text string suitable for display in a sheet explaining to the user why this certificate chain is not trusted for this operation. This function may return NULL if the certificate chain was trusted. */ CFArrayRef SecTrustCopyProperties(SecTrustRef trust); /*! @function SecTrustCopyInfo @abstract Return a dictionary with additional information about the evaluated certificate chain for use by clients. @param trust A reference to an evaluated trust object. @discussion Returns a dictionary for this trust evaluation. This dictionary may have the following keys: kSecTrustInfoExtendedValidationKey this key will be present and have a value of kCFBooleanTrue if this chain was validated for EV. kSecTrustInfoCompanyNameKey Company name field of subject of leaf certificate, this field is meant to be displayed to the user if the kSecTrustInfoExtendedValidationKey is present. kSecTrustInfoRevocationKey this key will be present iff this chain had its revocation checked. The value will be a kCFBooleanTrue if revocation checking was successful and none of the certificates in the chain were revoked. The value will be kCFBooleanFalse if no current revocation status could be obtained for one or more certificates in the chain due to connection problems or timeouts etc. This is a hint to a client to retry revocation checking at a later time. kSecTrustInfoRevocationValidUntilKey this key will be present iff kSecTrustInfoRevocationKey has a value of kCFBooleanTrue. The value will be a CFDateRef representing the earliest date at which the revocation info for one of the certificates in this chain might change. @result A dictionary with various fields that can be displayed to the user, or NULL if no additional info is available or the trust has not yet been validated. The caller is responsible for calling CFRelease on the value returned when it is no longer needed. */ CFDictionaryRef SecTrustCopyInfo(SecTrustRef trust); /* For debugging purposes. */ CFArrayRef SecTrustGetDetails(SecTrustRef trust); /* For debugging purposes. */ CFStringRef SecTrustCopyFailureDescription(SecTrustRef trust); /*! @function SecTrustSetPolicies @abstract Set the trust policies against which the trust should be verified. @param trust A reference to a trust object. @param policies An array of one or more policies. You may pass a SecPolicyRef to represent a single policy. @result A result code. See "Security Error Codes" (SecBase.h). @discussion This function does not invalidate the trust, but should do so in the future. */ OSStatus SecTrustSetPolicies(SecTrustRef trust, CFTypeRef policies) __OSX_AVAILABLE_STARTING(__MAC_10_3, __IPHONE_6_0); OSStatus SecTrustGetOTAPKIAssetVersionNumber(int* versionNumber); OSStatus SecTrustOTAPKIGetUpdatedAsset(int* didUpdateAsset); __END_DECLS #endif /* !_SECURITY_SECTRUSTPRIV_H_ */