--- /dev/null
+/*
+ * Copyright (c) 2006 Apple Computer, 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 SecRequirement
+ SecRequirementPriv is the private counter-part to SecRequirement. Its contents are not
+ official API, and are subject to change without notice.
+*/
+#ifndef _H_SECREQUIREMENTPRIV
+#define _H_SECREQUIREMENTPRIV
+
+#include <Security/SecRequirement.h>
+
+#ifdef __cplusplus
+extern "C" {
+#endif
+
+
+/*!
+ @function SecRequirementsCreateFromRequirements
+ Take a dictionary of requirement objects and package them up as a requirement set.
+
+ @param requirements A dictionary of requirements to combine into a set.
+ Dictionary keys are CFNumbers representing the index keys. Values are SecRequirementRefs.
+ NULL requirements are not allowed in the dictionary.
+ @param flags Optional flags. Pass kSecCSDefaultFlags for standard behavior.
+ @param requirementSet Upon success, receives a CFData object
+ @result Upon success, noErr. Upon error, an OSStatus value documented in
+ CSCommon.h or certain other Security framework headers.
+*/
+OSStatus SecRequirementsCreateFromRequirements(CFDictionaryRef requirements, SecCSFlags flags,
+ CFDataRef *requirementSet);
+
+
+/*!
+ @function SecRequirementsCopyRequirements
+ Create a SecRequirement object from binary form obtained from a file.
+ This call is functionally equivalent to reading the entire contents of a file
+ into a CFDataRef and then calling SecRequirementCreateWithData with that.
+
+ @param requirementSet A CFData containing a requirement set.
+ @param flags Optional flags. Pass kSecCSDefaultFlags for standard behavior.
+ @param requirements Upon success, a dictionary containing each requirement contained
+ in requirementSet. The keys are CFNumbers indicating the requirement type.
+ @result Upon success, noErr. Upon error, an OSStatus value documented in
+ CSCommon.h or certain other Security framework headers.
+*/
+OSStatus SecRequirementsCopyRequirements(CFDataRef requirementSet, SecCSFlags flags,
+ CFDictionaryRef *requirements);
+
+
+/*!
+ @function SecRequirementsCreateWithString
+ Create a SecRequirement object or requirement set based on the string provided.
+
+ @param text A CFString containing the text form of a (single) Code Requirement.
+ @param flags Optional flags. Pass kSecCSDefaultFlags to accept any supported input form.
+ Pass a combination of individual flags to select what forms to accept; other forms will result
+ in an error.
+ @param result Upon success, a CoreFoundation object of some kind representing
+ the result of parsing text. Depending on the input string and flags, the result
+ can be a SecRequirementRef (for a single requirement) or a CFDataRef for a requirement set.
+ @param errors An optional pointer to a CFErrorRef variable. If the call fails
+ (and something other than noErr is returned), and this argument is non-NULL,
+ a CFErrorRef is stored there further describing the nature and circumstances
+ of the failure. The caller must CFRelease() this error object when done with it.
+ @result Upon success, noErr. Upon error, an OSStatus value documented in
+ CSCommon.h or certain other Security framework headers.
+*/
+enum {
+ kSecCSParseRequirement = 0x0001, // accept single requirements
+ kSecCSParseRequirementSet = 0x0002, // accept requirement sets
+};
+
+OSStatus SecRequirementsCreateWithString(CFStringRef text, SecCSFlags flags,
+ CFTypeRef *result, CFErrorRef *errors);
+
+
+/*!
+ @function SecRequirementsCopyString
+ Converts a requirement object of some kind into text form.
+ This is the effective inverse of SecRequirementsCreateWithString.
+
+ This function can process individual requirements (SecRequirementRefs)
+ and requirement sets (represented as CFDataRefs).
+
+ Repeated application of this function may produce text that differs in
+ formatting, may contain different source comments, and may perform its
+ validation functions in different order. However, it is guaranteed that
+ recompiling the text using SecRequirementCreateWithString will produce a
+ SecRequirement object that behaves identically to the one you start with.
+
+ @param requirements A SecRequirementRef, or a CFDataRef containing a valid requirement set.
+ @param flags Optional flags. Pass kSecCSDefaultFlags for standard behavior.
+ @param text On successful return, contains a reference to a CFString object
+ containing a text representation of the requirement.
+ @result Upon success, noErr. Upon error, an OSStatus value documented in
+ CSCommon.h or certain other Security framework headers.
+*/
+OSStatus SecRequirementsCopyString(CFTypeRef input, SecCSFlags flags, CFStringRef *text);
+
+
+/*!
+ @function SecRequirementCreateWithResource
+ Create a SecRequirement object from binary form obtained from a file.
+ This call is functionally equivalent to reading the entire contents of a file
+ into a CFDataRef and then calling SecRequirementCreateWithData with that.
+
+ @param resource A CFURL identifying a file containing a (binary) requirement blob.
+ @param flags Optional flags. Pass kSecCSDefaultFlags for standard behavior.
+ @param requirement On successful return, contains a reference to a SecRequirement
+ object that behaves identically to the one the data blob was obtained from.
+ @result Upon success, noErr. Upon error, an OSStatus value documented in
+ CSCommon.h or certain other Security framework headers.
+*/
+OSStatus SecRequirementCreateWithResource(CFURLRef resource, SecCSFlags flags,
+ SecRequirementRef *requirement);
+
+
+/*!
+ @function SecRequirementCreateGroup
+ Create a SecRequirement object that represents membership in a developer-defined
+ application group. Group membership is defined by an entry in the code's
+ Info.plist, and sealed to a particular signing authority.
+
+ This is not an API-track function. Don't call it if you don't already do.
+
+ @param groupName A CFString containing the name of the desired application group.
+ @param anchor A reference to a digital certificate representing the signing
+ authority that asserts group membership. If NULL, indicates Apple's authority.
+ @param flags Optional flags. Pass kSecCSDefaultFlags for standard behavior.
+ @param requirement On successful return, contains a reference to a SecRequirement
+ object that requires group membership to pass validation.
+ @result Upon success, noErr. Upon error, an OSStatus value documented in
+ CSCommon.h or certain other Security framework headers.
+*/
+OSStatus SecRequirementCreateGroup(CFStringRef groupName, SecCertificateRef anchor,
+ SecCSFlags flags, SecRequirementRef *requirement);
+
+
+
+/*!
+ @function SecRequirementEvaluate
+ Explicitly evaluate a SecRequirementRef against context provided in the call.
+ This allows evaluation of a code requirement outside the context of a code signature.
+
+ @param requirement A valid SecRequirement object.
+ @param certificateChain A CFArray of SecCertificate objects describing the certificate
+ chain of the object being validated. This must be a full chain terminating in an anchor
+ certificate that is cryptographically valid.
+ @param context An optional CFDictionary containing additional context made available
+ to the requirement program's evaluation. NULL is equivalent to an empty dictionary.
+ @param flags Optional flags. Pass kSecCSDefaultFlags for standard behavior.
+ @result Upon success, noErr. Failure to pass the check returns errSecCSReqFailed.
+ All other returns indicate errors as documented in CSCommon.h or certain other
+ Security framework headers.
+
+ @constant kSecRequirementKeyInfoPlist A context key providing an CFDictionary denoting
+ an Info.plist. If this key is missing, all references to Info.plist contents will fail.
+ @constant kSecRequirementKeyEntitlements A context key providing an CFDictionary describing
+ an entitlement dictionary. If this key is missing, all references to entitlements will fail.
+ @constant kSecRequirementKeyIdentifier A context key providing the signing identifier as a CFString.
+*/
+extern CFStringRef kSecRequirementKeyInfoPlist;
+extern CFStringRef kSecRequirementKeyEntitlements;
+extern CFStringRef kSecRequirementKeyIdentifier;
+
+OSStatus SecRequirementEvaluate(SecRequirementRef requirement,
+ CFArrayRef certificateChain, CFDictionaryRef context,
+ SecCSFlags flags);
+
+
+#ifdef __cplusplus
+}
+#endif
+
+#endif //_H_SECREQUIREMENTPRIV