+++ /dev/null
-/*
- * Copyright (c) 2004,2011,2014 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 SecManifest
- The functions and data types in SecManifest implement file, directory, and
- data signing.
-*/
-
-#ifndef _SECURITY_SECMANIFEST_H_
-#define _SECURITY_SECMANIFEST_H_
-
-#include <Security/SecTrust.h>
-#include <Security/SecIdentity.h>
-#include <Security/SecBase.h>
-
-
-#if defined(__cplusplus)
-extern "C" {
-#endif
-
-enum {
- errSecManifestNotSupported = -22040, /* The specified object can't be placed in a manifest */
- errSecManifestNoSigners = -22041, /* There must be at least one signer for a manifest */
- errSecManifestCMSFailure = -22042, /* A problem occurred with CMS */
- errSecManifestIsNotEmpty = -20043, /* The manifest was not empty before create from external representation */
- errSecManifestDidNotVerify = -20044, /* The manifest did not verify */
- errSecManifestDamaged = -20045, /* The manifest was damaged */
- errSecManifestNotEqual = -20046, /* The manifests were not equal */
- errSecManifestBadResult = -20057, /* A manifest callback returned an invalid result */
- errSecManifestNoPolicy = -20058, /* Couldn't find the default policy */
- errSecManifestInvalidException = -20059, /* Exception list members must be CFStrings */
- errSecManifestNoSignersFound = -20060, /* No signers were found in the manifest */
-};
-
-typedef UInt32 SecManifestCompareOptions;
-enum {kSecManifestVerifyOwnerAndGroup = 0x1};
-
-/*!
- @typedef SecManifestRef
- @abstract A pointer to an opaque manifest structure
-*/
-typedef struct OpaqueSecManifestRef *SecManifestRef;
-
-/*!
- @function SecManifestGetVersion
- @abstract Determines the version of the SecManifest API installed on the
- user's system.
- @param version On return, a pointer to the version number of the SecManifest
- API installed on the system.
- @result A result code.
-*/
-OSStatus SecManifestGetVersion(UInt32 *version);
-
-/*!
- @function SecManifestCreate
- @abstract Creates a new manifest object for signing.
- @param manifest On return, a porinter to a manifest reference. The memory
- that manifest occupies must be released by calling
- SecManifestRelease when you are finished with it.
- @result A result code.
-*/
-OSStatus SecManifestCreate(SecManifestRef *manifest);
-
-/*!
- @function SecManifestRelease
- @abstract Destroys a manifest object
- @param manifest The manifest to destroy.
-*/
-
-void SecManifestRelease(SecManifestRef manifest);
-
-typedef enum _SecManifestTrustCallbackResult
-{
- kSecManifestDoNotVerify,
- kSecManifestSignerVerified,
- kSecManifestContinue,
- kSecManifestFailed
-} SecManifestTrustCallbackResult;
-
-typedef SecManifestTrustCallbackResult(*SecManifestTrustSetupCallback)
- (SecTrustRef trustRef, void* setupContext);
-typedef SecManifestTrustCallbackResult(*SecManifestTrustEvaluateCallback)
- (SecTrustRef trustRef, SecTrustResultType result,
- void *evaluateContext);
-
-/*!
- @function SecManifestVerifySignature
- @abstract Verifies a signature created with SecManifestCreateSignature,
- @param data The signature to verify.
- @param setupCallback Called before trust is verified for a signer. This
- allows the user to modify the SecTrustRef if needed
- (see the SecTrust documentation).
- @param setupContext User defined.
- @param evaluateCallback Called after SecTrustEvaluate has been called for a
- signer if the result was not trusted. This allows
- the developer to query the user as to whether or not
- to trust the signer.
- @param evaluateContext User defined.
- @param manifest Optional return of the verified manifest
-*/
-
-OSStatus SecManifestVerifySignature(CFDataRef data,
- SecManifestTrustSetupCallback setupCallback,
- void* setupContext,
- SecManifestTrustEvaluateCallback evaluateCallback,
- void* evaluateContext,
- SecManifestRef *manifest);
-
-/*!
- @function SecManifestVerifySignature
- @abstract Verifies a signature created with SecManifestCreateSignature,
- @param data The signature to verify.
- @param setupCallback Called before trust is verified for a signer. This
- allows the user to modify the SecTrustRef if needed
- (see the SecTrust documentation).
- @param setupContext User defined.
- @param evaluateCallback Called after SecTrustEvaluate has been called for a
- signer if the result was not trusted. This allows
- the developer to query the user as to whether or not
- to trust the signer.
- @param evaluateContext User defined.
- @param policyRef A SecPolicyRef used to evaluate the signature. Pass NULL to use the default policy
- @param manifest Optional return of the verified manifest
-*/
-OSStatus SecManifestVerifySignatureWithPolicy(CFDataRef data,
- SecManifestTrustSetupCallback setupCallback,
- void* setupContext,
- SecManifestTrustEvaluateCallback evaluateCallback,
- void* evaluateContext,
- SecPolicyRef policyRef,
- SecManifestRef *manifest);
-/*!
- @function SecManifestCreateSignature
- @abstract Creates a signature.
- @param manifest The manifest from which to create the signature.
- @param options Reserved for future use.
- @param data On return, the external representation. The memory that data
- occupies must be released by calling CFRelease when finished
- with it.
- @result A result code.
-*/
-OSStatus SecManifestCreateSignature(SecManifestRef manifest,
- UInt32 options,
- CFDataRef *data);
-
-/*!
- @function SecManifestAddObject
- @abstract Adds data to be signed or verified to the manifest object.
- @param manifest The manifest object.
- @param object The object to add.
- @param exceptionList If data points to a directory, this contains an
- optional list of CFStrings, relative to object, that will
- not be included in the manifest.
- @result A result code.
- @discussion object may either be a CFURL that points to a file URL, or a
- SecManifestData, which points to arbitrary data.
-*/
-OSStatus SecManifestAddObject(SecManifestRef manifest,
- CFTypeRef object,
- CFArrayRef exceptionList);
-
-/*!
- @function SecManifestCompare
- @abstraact Compare one manifest to another.
- @param manifest1 A manifest to be compared for equality.
- @param manifest2 A manifest to be compared for equality.
- @param verifyOwnerAndGroup If true, owner and group ID's will be checked as
- part of the verification process.
- @result A result code.
-*/
-OSStatus SecManifestCompare(SecManifestRef manifest1,
- SecManifestRef manifest2,
- SecManifestCompareOptions options);
-
-/*!
- @function SecManifestAddSigner
- @abstract Add an identity to the list of identities that will sign the
- manifest.
- @param manifest The manifest to sign.
- @param identity The identity to be used to sign the manifest.
- @result A result code.
- @discussion Multiple signers are supported. The actual signing does not
- take place until SecManifestCreateExternalRepresentation is
- called.
-*/
-OSStatus SecManifestAddSigner(SecManifestRef manifest,
- SecIdentityRef identity);
-
-#if defined(__cplusplus)
-}
-#endif
-
-#endif /* ! _SECURITY_SECMANIFEST_H_ */
-