/*
 * Copyright (c) 1999-2002,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@
 *
 * cssmtype.h -- Common Security Services Manager Common Data Types
 */

#ifndef _CSSMTYPE_H_
#define _CSSMTYPE_H_  1

#include <Security/cssmconfig.h>

/* ==========================================================================
	W A R N I N G : CDSA has been deprecated starting with 10.7.  While the
	APIs will continue to work, developers should update their code to use
	the APIs that are suggested and NOT use the CDSA APIs
   ========================================================================== */

#ifdef __cplusplus
extern "C" {
#endif

#pragma clang diagnostic push
#pragma clang diagnostic ignored "-Wdeprecated-declarations"

/* Handle types. */
	
typedef CSSM_INTPTR CSSM_HANDLE, *CSSM_HANDLE_PTR;

typedef uint64 CSSM_LONG_HANDLE, *CSSM_LONG_HANDLE_PTR;

typedef CSSM_HANDLE CSSM_MODULE_HANDLE, *CSSM_MODULE_HANDLE_PTR;

typedef CSSM_LONG_HANDLE CSSM_CC_HANDLE; /* Cryptographic Context Handle */

typedef CSSM_MODULE_HANDLE CSSM_CSP_HANDLE; /* Cryptographic Service Provider Handle */

typedef CSSM_MODULE_HANDLE CSSM_TP_HANDLE; /* Trust Policy Handle */

typedef CSSM_MODULE_HANDLE CSSM_AC_HANDLE; /* Authorization Computation Handle */

typedef CSSM_MODULE_HANDLE CSSM_CL_HANDLE; /* Certificate Library Handle */

typedef CSSM_MODULE_HANDLE CSSM_DL_HANDLE; /* Data Storage Library Handle */

typedef CSSM_MODULE_HANDLE CSSM_DB_HANDLE; /* Data Storage Database Handle */


/* invalid or NULL value for any CSSM_HANDLE type */
enum {
    CSSM_INVALID_HANDLE =				0
};


/* Data Types for Core Services */

typedef sint32 CSSM_BOOL;
enum {
	CSSM_FALSE =						0,
	CSSM_TRUE =							!CSSM_FALSE
};

/* The standard declares this as uint32 but we changed it to sint32 to match OSStatus. */
typedef sint32 CSSM_RETURN;
enum {
	CSSM_OK =							0
};

enum {
	CSSM_MODULE_STRING_SIZE =			64
};
typedef char CSSM_STRING [CSSM_MODULE_STRING_SIZE + 4];

typedef struct cssm_data {
    CSSM_SIZE Length; /* in bytes */
    uint8 *Data;
} CSSM_DATA DEPRECATED_IN_MAC_OS_X_VERSION_10_7_AND_LATER, *CSSM_DATA_PTR DEPRECATED_IN_MAC_OS_X_VERSION_10_7_AND_LATER;

typedef struct cssm_guid {
    uint32 Data1;
    uint16 Data2;
    uint16 Data3;
    uint8 Data4[8];
} CSSM_GUID DEPRECATED_IN_MAC_OS_X_VERSION_10_7_AND_LATER, *CSSM_GUID_PTR DEPRECATED_IN_MAC_OS_X_VERSION_10_7_AND_LATER;

typedef uint32 CSSM_BITMASK;
typedef CSSM_BITMASK CSSM_KEY_HIERARCHY;
enum {
	CSSM_KEY_HIERARCHY_NONE =			0,
	CSSM_KEY_HIERARCHY_INTEG =			1,
	CSSM_KEY_HIERARCHY_EXPORT =			2
};

typedef CSSM_BITMASK CSSM_PVC_MODE;
enum {
	CSSM_PVC_NONE =						0,
	CSSM_PVC_APP =						1,
	CSSM_PVC_SP =						2
};

typedef uint32 CSSM_PRIVILEGE_SCOPE;
enum {
	CSSM_PRIVILEGE_SCOPE_NONE =			0,
	CSSM_PRIVILEGE_SCOPE_PROCESS =		1,
	CSSM_PRIVILEGE_SCOPE_THREAD =		2
};

typedef struct cssm_version {
    uint32 Major;
    uint32 Minor;
} CSSM_VERSION DEPRECATED_IN_MAC_OS_X_VERSION_10_7_AND_LATER, *CSSM_VERSION_PTR DEPRECATED_IN_MAC_OS_X_VERSION_10_7_AND_LATER;

typedef uint32 CSSM_SERVICE_MASK;
enum {
	CSSM_SERVICE_CSSM =				0x1,
	CSSM_SERVICE_CSP =				0x2,
	CSSM_SERVICE_DL =				0x4,
	CSSM_SERVICE_CL =				0x8,
	CSSM_SERVICE_TP =				0x10,
	CSSM_SERVICE_AC =				0x20,
	CSSM_SERVICE_KR =				0x40
};

typedef CSSM_SERVICE_MASK CSSM_SERVICE_TYPE;

typedef struct cssm_subservice_uid {
    CSSM_GUID Guid;
    CSSM_VERSION Version;
    uint32 SubserviceId;
    CSSM_SERVICE_TYPE SubserviceType;
} CSSM_SUBSERVICE_UID DEPRECATED_IN_MAC_OS_X_VERSION_10_7_AND_LATER, *CSSM_SUBSERVICE_UID_PTR DEPRECATED_IN_MAC_OS_X_VERSION_10_7_AND_LATER;

typedef uint32 CSSM_MODULE_EVENT, *CSSM_MODULE_EVENT_PTR;
enum {
    CSSM_NOTIFY_INSERT =				1,
    CSSM_NOTIFY_REMOVE =				2,
    CSSM_NOTIFY_FAULT =					3
};

typedef CSSM_RETURN (CSSMAPI *CSSM_API_ModuleEventHandler)
    (const CSSM_GUID *ModuleGuid,
     void* AppNotifyCallbackCtx,
     uint32 SubserviceId,
     CSSM_SERVICE_TYPE ServiceType,
     CSSM_MODULE_EVENT EventType);

typedef uint32 CSSM_ATTACH_FLAGS;
enum {
	CSSM_ATTACH_READ_ONLY =			0x00000001
};

/* Non-export privilege range: (0x00000000 - 0x7FFFFFFF) */
/* Vendor specific range: (0x80000000 - 0xFFFFFFFF) */
typedef uint64 CSSM_PRIVILEGE;
typedef CSSM_PRIVILEGE CSSM_USEE_TAG;
enum {
	CSSM_USEE_LAST =					0xFF,
	CSSM_USEE_NONE =					0,
	CSSM_USEE_DOMESTIC =				1,
	CSSM_USEE_FINANCIAL =				2,
	CSSM_USEE_KRLE =					3,
	CSSM_USEE_KRENT =					4,
	CSSM_USEE_SSL =						5,
	CSSM_USEE_AUTHENTICATION =			6,
	CSSM_USEE_KEYEXCH =					7,
	CSSM_USEE_MEDICAL =					8,
	CSSM_USEE_INSURANCE =				9,
	CSSM_USEE_WEAK =					10
};

typedef uint32 CSSM_NET_ADDRESS_TYPE;
enum {
    CSSM_ADDR_NONE =					0,
    CSSM_ADDR_CUSTOM =					1,
    CSSM_ADDR_URL =						2, /* char* */
    CSSM_ADDR_SOCKADDR =				3,
    CSSM_ADDR_NAME =					4 /* char* - qualified by access method */
};

typedef struct cssm_net_address {
    CSSM_NET_ADDRESS_TYPE AddressType;
    CSSM_DATA Address;
} CSSM_NET_ADDRESS DEPRECATED_IN_MAC_OS_X_VERSION_10_7_AND_LATER, *CSSM_NET_ADDRESS_PTR DEPRECATED_IN_MAC_OS_X_VERSION_10_7_AND_LATER;

typedef uint32 CSSM_NET_PROTOCOL;
enum {
	CSSM_NET_PROTO_NONE =				0,	/* local */
	CSSM_NET_PROTO_CUSTOM =				1,	/* proprietary implementation */
	CSSM_NET_PROTO_UNSPECIFIED =		2,	/* implementation default */
	CSSM_NET_PROTO_LDAP =				3,	/* light weight directory access protocol */
	CSSM_NET_PROTO_LDAPS =				4,	/* ldap/ssl where SSL initiates the connection */
	CSSM_NET_PROTO_LDAPNS =				5,	/* ldap where ldap negotiates an SSL session */
	CSSM_NET_PROTO_X500DAP =			6,	/* x.500 Directory access protocol */
	CSSM_NET_PROTO_FTP =				7,	/* ftp for cert/crl fetch */
	CSSM_NET_PROTO_FTPS =				8,	/* ftp/ssl/tls where SSL/TLS initiates the connection */
	CSSM_NET_PROTO_OCSP =				9,	/* online certificate status protocol */
	CSSM_NET_PROTO_CMP =				10,	/* the cert request protocol in PKIX3 */
	CSSM_NET_PROTO_CMPS =				11	/* The ssl/tls derivative of CMP */
};

typedef CSSM_RETURN (CSSMAPI *CSSM_CALLBACK)
    (CSSM_DATA_PTR OutData, void *CallerCtx);

typedef struct cssm_crypto_data {
    CSSM_DATA Param;
    CSSM_CALLBACK Callback;
    void *CallerCtx;
} CSSM_CRYPTO_DATA DEPRECATED_IN_MAC_OS_X_VERSION_10_7_AND_LATER, *CSSM_CRYPTO_DATA_PTR DEPRECATED_IN_MAC_OS_X_VERSION_10_7_AND_LATER;

typedef sint32 CSSM_WORDID_TYPE;
enum {
	CSSM_WORDID__UNK_ =					-1, /* not in dictionary */
	CSSM_WORDID__NLU_ =					0, /* not yet looked up */
	CSSM_WORDID__STAR_ =				1,
	CSSM_WORDID_A =						2,
	CSSM_WORDID_ACL =					3,
	CSSM_WORDID_ALPHA =					4,
	CSSM_WORDID_B =						5,
	CSSM_WORDID_BER =					6,
	CSSM_WORDID_BINARY =				7,
	CSSM_WORDID_BIOMETRIC =				8,
	CSSM_WORDID_C =						9,
	CSSM_WORDID_CANCELED =				10,
	CSSM_WORDID_CERT =					11,
	CSSM_WORDID_COMMENT =				12,
	CSSM_WORDID_CRL =					13,
	CSSM_WORDID_CUSTOM =				14,
	CSSM_WORDID_D =						15,
	CSSM_WORDID_DATE =					16,
	CSSM_WORDID_DB_DELETE =				17,
	CSSM_WORDID_DB_EXEC_STORED_QUERY =	18,
	CSSM_WORDID_DB_INSERT =				19,
	CSSM_WORDID_DB_MODIFY =				20,
	CSSM_WORDID_DB_READ =				21,
	CSSM_WORDID_DBS_CREATE =			22,
	CSSM_WORDID_DBS_DELETE =			23,
	CSSM_WORDID_DECRYPT =				24,
	CSSM_WORDID_DELETE =				25,
	CSSM_WORDID_DELTA_CRL =				26,
	CSSM_WORDID_DER =					27,
	CSSM_WORDID_DERIVE =				28,
	CSSM_WORDID_DISPLAY =				29,
	CSSM_WORDID_DO =					30,
	CSSM_WORDID_DSA =					31,
	CSSM_WORDID_DSA_SHA1 =				32,
	CSSM_WORDID_E =						33,
	CSSM_WORDID_ELGAMAL =				34,
	CSSM_WORDID_ENCRYPT =				35,
	CSSM_WORDID_ENTRY =					36,
	CSSM_WORDID_EXPORT_CLEAR =			37,
	CSSM_WORDID_EXPORT_WRAPPED =		38,
	CSSM_WORDID_G =						39,
	CSSM_WORDID_GE =					40,
	CSSM_WORDID_GENKEY =				41,
	CSSM_WORDID_HASH =					42,
	CSSM_WORDID_HASHED_PASSWORD =		43,
	CSSM_WORDID_HASHED_SUBJECT =		44,
	CSSM_WORDID_HAVAL =					45,
	CSSM_WORDID_IBCHASH =				46,
	CSSM_WORDID_IMPORT_CLEAR =			47,
	CSSM_WORDID_IMPORT_WRAPPED =		48,
	CSSM_WORDID_INTEL =					49,
	CSSM_WORDID_ISSUER =				50,
	CSSM_WORDID_ISSUER_INFO =			51,
	CSSM_WORDID_K_OF_N =				52,
	CSSM_WORDID_KEA =					53,
	CSSM_WORDID_KEYHOLDER =				54,
	CSSM_WORDID_L =						55,
	CSSM_WORDID_LE =					56,
	CSSM_WORDID_LOGIN =					57,
	CSSM_WORDID_LOGIN_NAME =			58,
	CSSM_WORDID_MAC =					59,
	CSSM_WORDID_MD2 =					60,
	CSSM_WORDID_MD2WITHRSA =			61,
	CSSM_WORDID_MD4 =					62,
	CSSM_WORDID_MD5 =					63,
	CSSM_WORDID_MD5WITHRSA =			64,
	CSSM_WORDID_N =						65,
	CSSM_WORDID_NAME =					66,
	CSSM_WORDID_NDR =					67,
	CSSM_WORDID_NHASH =					68,
	CSSM_WORDID_NOT_AFTER =				69,
	CSSM_WORDID_NOT_BEFORE =			70,
	CSSM_WORDID_NULL =					71,
	CSSM_WORDID_NUMERIC =				72,
	CSSM_WORDID_OBJECT_HASH =			73,
	CSSM_WORDID_ONE_TIME =				74,
	CSSM_WORDID_ONLINE =				75,
	CSSM_WORDID_OWNER =					76,
	CSSM_WORDID_P =						77,
	CSSM_WORDID_PAM_NAME =				78,
	CSSM_WORDID_PASSWORD =				79,
	CSSM_WORDID_PGP =					80,
	CSSM_WORDID_PREFIX =				81,
	CSSM_WORDID_PRIVATE_KEY =			82,
	CSSM_WORDID_PROMPTED_BIOMETRIC =	83,
	CSSM_WORDID_PROMPTED_PASSWORD =		84,
	CSSM_WORDID_PROPAGATE =				85,
	CSSM_WORDID_PROTECTED_BIOMETRIC =	86,
	CSSM_WORDID_PROTECTED_PASSWORD =	87,
	CSSM_WORDID_PROTECTED_PIN =			88,
	CSSM_WORDID_PUBLIC_KEY =			89,
	CSSM_WORDID_PUBLIC_KEY_FROM_CERT =	90,
	CSSM_WORDID_Q =						91,
	CSSM_WORDID_RANGE =					92,
	CSSM_WORDID_REVAL =					93,
	CSSM_WORDID_RIPEMAC =				94,
	CSSM_WORDID_RIPEMD =				95,
	CSSM_WORDID_RIPEMD160 =				96,
	CSSM_WORDID_RSA =					97,
	CSSM_WORDID_RSA_ISO9796 =			98,
	CSSM_WORDID_RSA_PKCS =				99,
	CSSM_WORDID_RSA_PKCS_MD5 =			100,
	CSSM_WORDID_RSA_PKCS_SHA1 =			101,
	CSSM_WORDID_RSA_PKCS1 =				102,
	CSSM_WORDID_RSA_PKCS1_MD5 =			103,
	CSSM_WORDID_RSA_PKCS1_SHA1 =		104,
	CSSM_WORDID_RSA_PKCS1_SIG =			105,
	CSSM_WORDID_RSA_RAW =				106,
	CSSM_WORDID_SDSIV1 =				107,
	CSSM_WORDID_SEQUENCE =				108,
	CSSM_WORDID_SET =					109,
	CSSM_WORDID_SEXPR =					110,
	CSSM_WORDID_SHA1 =					111,
	CSSM_WORDID_SHA1WITHDSA =			112,
	CSSM_WORDID_SHA1WITHECDSA =			113,
	CSSM_WORDID_SHA1WITHRSA =			114,
	CSSM_WORDID_SIGN =					115,
	CSSM_WORDID_SIGNATURE =				116,
	CSSM_WORDID_SIGNED_NONCE =			117,
	CSSM_WORDID_SIGNED_SECRET =			118,
	CSSM_WORDID_SPKI =					119,
	CSSM_WORDID_SUBJECT =				120,
	CSSM_WORDID_SUBJECT_INFO =			121,
	CSSM_WORDID_TAG =					122,
	CSSM_WORDID_THRESHOLD =				123,
	CSSM_WORDID_TIME =					124,
	CSSM_WORDID_URI =					125,
	CSSM_WORDID_VERSION =				126,
	CSSM_WORDID_X509_ATTRIBUTE =		127,
	CSSM_WORDID_X509V1 =				128,
	CSSM_WORDID_X509V2 =				129,
	CSSM_WORDID_X509V3 =				130,
	CSSM_WORDID_X9_ATTRIBUTE =			131,
	CSSM_WORDID_VENDOR_START =			0x00010000,
	CSSM_WORDID_VENDOR_END =			0x7FFF0000
};

typedef uint32 CSSM_LIST_ELEMENT_TYPE, *CSSM_LIST_ELEMENT_TYPE_PTR;
enum {
	CSSM_LIST_ELEMENT_DATUM =			0x00,
	CSSM_LIST_ELEMENT_SUBLIST =			0x01,
	CSSM_LIST_ELEMENT_WORDID =			0x02
};

typedef uint32 CSSM_LIST_TYPE, *CSSM_LIST_TYPE_PTR;
enum {
	CSSM_LIST_TYPE_UNKNOWN =			0,
	CSSM_LIST_TYPE_CUSTOM =				1,
	CSSM_LIST_TYPE_SEXPR =				2
};

typedef struct cssm_list_element *CSSM_LIST_ELEMENT_PTR;

typedef struct cssm_list {
    CSSM_LIST_TYPE ListType;	/* type of this list */
    CSSM_LIST_ELEMENT_PTR Head;	/* head of the list */
    CSSM_LIST_ELEMENT_PTR Tail;	/* tail of the list */
} CSSM_LIST DEPRECATED_IN_MAC_OS_X_VERSION_10_7_AND_LATER, *CSSM_LIST_PTR DEPRECATED_IN_MAC_OS_X_VERSION_10_7_AND_LATER;

typedef struct cssm_list_element {
    struct cssm_list_element *NextElement;	/* next list element */
	CSSM_WORDID_TYPE WordID;	/* integer identifier associated */
								/* with a Word value */
    CSSM_LIST_ELEMENT_TYPE ElementType;
    union {
        CSSM_LIST Sublist;		/* sublist */
        CSSM_DATA Word;		/* a byte-string */
    } Element;
} CSSM_LIST_ELEMENT;

typedef struct {				/* 5-tuple definition */
	CSSM_LIST Issuer;			/* issuer, or empty if ACL */
	CSSM_LIST Subject;			/* subject */
	CSSM_BOOL Delegate;			/* permission to delegate */
	CSSM_LIST AuthorizationTag;	/* authorization field */
	CSSM_LIST ValidityPeriod;	/* validity information (dates) */
} CSSM_TUPLE DEPRECATED_IN_MAC_OS_X_VERSION_10_7_AND_LATER, *CSSM_TUPLE_PTR DEPRECATED_IN_MAC_OS_X_VERSION_10_7_AND_LATER;

typedef struct cssm_tuplegroup {
    uint32 NumberOfTuples;
    CSSM_TUPLE_PTR Tuples;
} CSSM_TUPLEGROUP DEPRECATED_IN_MAC_OS_X_VERSION_10_7_AND_LATER, *CSSM_TUPLEGROUP_PTR DEPRECATED_IN_MAC_OS_X_VERSION_10_7_AND_LATER;

typedef CSSM_WORDID_TYPE CSSM_SAMPLE_TYPE;
enum {
	CSSM_SAMPLE_TYPE_PASSWORD =				CSSM_WORDID_PASSWORD,
	CSSM_SAMPLE_TYPE_HASHED_PASSWORD =		CSSM_WORDID_HASHED_PASSWORD,
	CSSM_SAMPLE_TYPE_PROTECTED_PASSWORD =	CSSM_WORDID_PROTECTED_PASSWORD,
	CSSM_SAMPLE_TYPE_PROMPTED_PASSWORD =	CSSM_WORDID_PROMPTED_PASSWORD,
	CSSM_SAMPLE_TYPE_SIGNED_NONCE =			CSSM_WORDID_SIGNED_NONCE,
	CSSM_SAMPLE_TYPE_SIGNED_SECRET =		CSSM_WORDID_SIGNED_SECRET,
	CSSM_SAMPLE_TYPE_BIOMETRIC =			CSSM_WORDID_BIOMETRIC,
	CSSM_SAMPLE_TYPE_PROTECTED_BIOMETRIC =	CSSM_WORDID_PROTECTED_BIOMETRIC,
	CSSM_SAMPLE_TYPE_PROMPTED_BIOMETRIC =	CSSM_WORDID_PROMPTED_BIOMETRIC,
	CSSM_SAMPLE_TYPE_THRESHOLD =			CSSM_WORDID_THRESHOLD
};

typedef struct cssm_sample {
    CSSM_LIST TypedSample;
    const CSSM_SUBSERVICE_UID *Verifier;
} CSSM_SAMPLE DEPRECATED_IN_MAC_OS_X_VERSION_10_7_AND_LATER, *CSSM_SAMPLE_PTR DEPRECATED_IN_MAC_OS_X_VERSION_10_7_AND_LATER;

typedef struct cssm_samplegroup {
    uint32 NumberOfSamples;
    const CSSM_SAMPLE *Samples;
} CSSM_SAMPLEGROUP DEPRECATED_IN_MAC_OS_X_VERSION_10_7_AND_LATER, *CSSM_SAMPLEGROUP_PTR DEPRECATED_IN_MAC_OS_X_VERSION_10_7_AND_LATER;

typedef void *(CSSMAPI *CSSM_MALLOC)
    (CSSM_SIZE size,
     void *allocref);

typedef void (CSSMAPI *CSSM_FREE)
    (void *memblock,
     void *allocref);

typedef void *(CSSMAPI *CSSM_REALLOC)
    (void *memblock,
     CSSM_SIZE size,
     void *allocref);

typedef void *(CSSMAPI *CSSM_CALLOC)
    (uint32 num,
     CSSM_SIZE size,
     void *allocref);

typedef struct cssm_memory_funcs {
    CSSM_MALLOC malloc_func;
    CSSM_FREE free_func;
    CSSM_REALLOC realloc_func;
    CSSM_CALLOC calloc_func;
    void *AllocRef;
} CSSM_MEMORY_FUNCS DEPRECATED_IN_MAC_OS_X_VERSION_10_7_AND_LATER, *CSSM_MEMORY_FUNCS_PTR DEPRECATED_IN_MAC_OS_X_VERSION_10_7_AND_LATER;

typedef CSSM_MEMORY_FUNCS CSSM_API_MEMORY_FUNCS;
typedef CSSM_API_MEMORY_FUNCS *CSSM_API_MEMORY_FUNCS_PTR;

typedef CSSM_RETURN (CSSMAPI * CSSM_CHALLENGE_CALLBACK)
    (const CSSM_LIST *Challenge,
     CSSM_SAMPLEGROUP_PTR Response,
     void *CallerCtx,
     const CSSM_MEMORY_FUNCS *MemFuncs);

typedef uint32 CSSM_CERT_TYPE, *CSSM_CERT_TYPE_PTR;
enum {
    CSSM_CERT_UNKNOWN =					0x00,
    CSSM_CERT_X_509v1 =					0x01,
    CSSM_CERT_X_509v2 =					0x02,
    CSSM_CERT_X_509v3 =					0x03,
    CSSM_CERT_PGP =						0x04,
    CSSM_CERT_SPKI =					0x05,
    CSSM_CERT_SDSIv1 =					0x06,
    CSSM_CERT_Intel =					0x08,
    CSSM_CERT_X_509_ATTRIBUTE =			0x09, /* X.509 attribute cert */
    CSSM_CERT_X9_ATTRIBUTE =			0x0A, /* X9 attribute cert */
    CSSM_CERT_TUPLE =					0x0B,
    CSSM_CERT_ACL_ENTRY =				0x0C,
    CSSM_CERT_MULTIPLE =				0x7FFE,
    CSSM_CERT_LAST =					0x7FFF,
	/* Applications wishing to define their own custom certificate
	   type should define and publicly document a uint32 value greater
	   than the CSSM_CL_CUSTOM_CERT_TYPE */
	CSSM_CL_CUSTOM_CERT_TYPE =			0x08000
};

typedef uint32 CSSM_CERT_ENCODING, *CSSM_CERT_ENCODING_PTR;
enum {
    CSSM_CERT_ENCODING_UNKNOWN =		0x00,
    CSSM_CERT_ENCODING_CUSTOM =			0x01,
    CSSM_CERT_ENCODING_BER =			0x02,
    CSSM_CERT_ENCODING_DER =			0x03,
    CSSM_CERT_ENCODING_NDR =			0x04,
    CSSM_CERT_ENCODING_SEXPR =			0x05,
    CSSM_CERT_ENCODING_PGP =			0x06,
    CSSM_CERT_ENCODING_MULTIPLE =		0x7FFE,
    CSSM_CERT_ENCODING_LAST =			0x7FFF,
	/* Applications wishing to define their own custom certificate
	   encoding should create a uint32 value greater than the
	   CSSM_CL_CUSTOM_CERT_ENCODING */
	CSSM_CL_CUSTOM_CERT_ENCODING =		0x8000
};

typedef struct cssm_encoded_cert {
    CSSM_CERT_TYPE CertType;			/* type of certificate */
    CSSM_CERT_ENCODING CertEncoding;	/* encoding for this packed cert */
    CSSM_DATA CertBlob;					/* packed cert */
} CSSM_ENCODED_CERT DEPRECATED_IN_MAC_OS_X_VERSION_10_7_AND_LATER, *CSSM_ENCODED_CERT_PTR DEPRECATED_IN_MAC_OS_X_VERSION_10_7_AND_LATER;

typedef uint32 CSSM_CERT_PARSE_FORMAT, *CSSM_CERT_PARSE_FORMAT_PTR;
enum {
	CSSM_CERT_PARSE_FORMAT_NONE =			0x00,
	CSSM_CERT_PARSE_FORMAT_CUSTOM =			0x01, /* void* */
	CSSM_CERT_PARSE_FORMAT_SEXPR =			0x02, /* CSSM_LIST */
	CSSM_CERT_PARSE_FORMAT_COMPLEX =		0x03, /* void* */
	CSSM_CERT_PARSE_FORMAT_OID_NAMED =		0x04, /* CSSM_FIELDGROUP */
	CSSM_CERT_PARSE_FORMAT_TUPLE =			0x05, /* CSSM_TUPLE */
	CSSM_CERT_PARSE_FORMAT_MULTIPLE =		0x7FFE,
/* multiple forms, each cert carries a
   parse format indicator */
	CSSM_CERT_PARSE_FORMAT_LAST =			0x7FFF,
/* Applications wishing to define their
   own custom parse format should create
   a * uint32 value greater than the
   CSSM_CL_CUSTOM_CERT_PARSE_FORMAT */
	CSSM_CL_CUSTOM_CERT_PARSE_FORMAT =		0x8000
};

typedef struct cssm_parsed_cert {
    CSSM_CERT_TYPE CertType; /* certificate type */
    CSSM_CERT_PARSE_FORMAT ParsedCertFormat;
    /* struct of ParsedCert */
    void *ParsedCert; /* parsed cert (to be typecast) */
} CSSM_PARSED_CERT DEPRECATED_IN_MAC_OS_X_VERSION_10_7_AND_LATER, *CSSM_PARSED_CERT_PTR DEPRECATED_IN_MAC_OS_X_VERSION_10_7_AND_LATER;

typedef struct cssm_cert_pair {
    CSSM_ENCODED_CERT EncodedCert; /* an encoded certificate blob */
    CSSM_PARSED_CERT ParsedCert; /* equivalent parsed certificate */
} CSSM_CERT_PAIR DEPRECATED_IN_MAC_OS_X_VERSION_10_7_AND_LATER, *CSSM_CERT_PAIR_PTR DEPRECATED_IN_MAC_OS_X_VERSION_10_7_AND_LATER;

typedef uint32 CSSM_CERTGROUP_TYPE, *CSSM_CERTGROUP_TYPE_PTR;
enum {
	CSSM_CERTGROUP_DATA =				0x00,
	CSSM_CERTGROUP_ENCODED_CERT =		0x01,
	CSSM_CERTGROUP_PARSED_CERT =		0x02,
	CSSM_CERTGROUP_CERT_PAIR =			0x03
};

typedef struct cssm_certgroup {
    CSSM_CERT_TYPE CertType;
    CSSM_CERT_ENCODING CertEncoding;
    uint32 NumCerts; /* # of certificates in this list */
    union {
        CSSM_DATA_PTR CertList; /* legacy list of single type certificate blobs */
        CSSM_ENCODED_CERT_PTR EncodedCertList;
        /* list of multi-type certificate blobs */
        CSSM_PARSED_CERT_PTR ParsedCertList;
        /* list of multi-type parsed certs */
        CSSM_CERT_PAIR_PTR PairCertList;
        /*list of single or multi-type certs with two representations: blob and parsed */
    } GroupList;
    CSSM_CERTGROUP_TYPE CertGroupType;
    /* type of structure in the GroupList */
    void *Reserved; /* reserved for implementation dependent use */
} CSSM_CERTGROUP, *CSSM_CERTGROUP_PTR;

typedef struct cssm_base_certs {
    CSSM_TP_HANDLE TPHandle;
    CSSM_CL_HANDLE CLHandle;
    CSSM_CERTGROUP Certs;
} CSSM_BASE_CERTS DEPRECATED_IN_MAC_OS_X_VERSION_10_7_AND_LATER, *CSSM_BASE_CERTS_PTR DEPRECATED_IN_MAC_OS_X_VERSION_10_7_AND_LATER;

typedef struct cssm_access_credentials {
    CSSM_STRING EntryTag;
    CSSM_BASE_CERTS BaseCerts;
    CSSM_SAMPLEGROUP Samples;
    CSSM_CHALLENGE_CALLBACK Callback;
    void *CallerCtx;
} CSSM_ACCESS_CREDENTIALS DEPRECATED_IN_MAC_OS_X_VERSION_10_7_AND_LATER, *CSSM_ACCESS_CREDENTIALS_PTR DEPRECATED_IN_MAC_OS_X_VERSION_10_7_AND_LATER;

typedef sint32 CSSM_ACL_SUBJECT_TYPE;
enum {
	CSSM_ACL_SUBJECT_TYPE_ANY =					CSSM_WORDID__STAR_,
	CSSM_ACL_SUBJECT_TYPE_THRESHOLD =			CSSM_WORDID_THRESHOLD,
	CSSM_ACL_SUBJECT_TYPE_PASSWORD =			CSSM_WORDID_PASSWORD,
	CSSM_ACL_SUBJECT_TYPE_PROTECTED_PASSWORD =	CSSM_WORDID_PROTECTED_PASSWORD,
	CSSM_ACL_SUBJECT_TYPE_PROMPTED_PASSWORD =	CSSM_WORDID_PROMPTED_PASSWORD,
	CSSM_ACL_SUBJECT_TYPE_PUBLIC_KEY =			CSSM_WORDID_PUBLIC_KEY,
	CSSM_ACL_SUBJECT_TYPE_HASHED_SUBJECT =		CSSM_WORDID_HASHED_SUBJECT,
	CSSM_ACL_SUBJECT_TYPE_BIOMETRIC =			CSSM_WORDID_BIOMETRIC,
	CSSM_ACL_SUBJECT_TYPE_PROTECTED_BIOMETRIC =	CSSM_WORDID_PROTECTED_BIOMETRIC,
	CSSM_ACL_SUBJECT_TYPE_PROMPTED_BIOMETRIC =	CSSM_WORDID_PROMPTED_BIOMETRIC,
	CSSM_ACL_SUBJECT_TYPE_LOGIN_NAME =			CSSM_WORDID_LOGIN_NAME,
	CSSM_ACL_SUBJECT_TYPE_EXT_PAM_NAME =		CSSM_WORDID_PAM_NAME
};

/* Authorization tag type */
typedef sint32 CSSM_ACL_AUTHORIZATION_TAG;
enum {
	/* All vendor specific constants must be in the number range
	   starting at CSSM_ACL_AUTHORIZATION_TAG_VENDOR_DEFINED_START */
	CSSM_ACL_AUTHORIZATION_TAG_VENDOR_DEFINED_START =	0x00010000,
	/* No restrictions. Permission to perform all operations on
	   the resource or available to an ACL owner.  */
	CSSM_ACL_AUTHORIZATION_ANY =						CSSM_WORDID__STAR_,
	/* Defined authorization tag values for CSPs */
	CSSM_ACL_AUTHORIZATION_LOGIN =						CSSM_WORDID_LOGIN,
	CSSM_ACL_AUTHORIZATION_GENKEY =						CSSM_WORDID_GENKEY,
	CSSM_ACL_AUTHORIZATION_DELETE =						CSSM_WORDID_DELETE,
	CSSM_ACL_AUTHORIZATION_EXPORT_WRAPPED =				CSSM_WORDID_EXPORT_WRAPPED,
	CSSM_ACL_AUTHORIZATION_EXPORT_CLEAR =				CSSM_WORDID_EXPORT_CLEAR,
	CSSM_ACL_AUTHORIZATION_IMPORT_WRAPPED =				CSSM_WORDID_IMPORT_WRAPPED,
	CSSM_ACL_AUTHORIZATION_IMPORT_CLEAR =				CSSM_WORDID_IMPORT_CLEAR,
	CSSM_ACL_AUTHORIZATION_SIGN =						CSSM_WORDID_SIGN,
	CSSM_ACL_AUTHORIZATION_ENCRYPT =					CSSM_WORDID_ENCRYPT,
	CSSM_ACL_AUTHORIZATION_DECRYPT =					CSSM_WORDID_DECRYPT,
	CSSM_ACL_AUTHORIZATION_MAC =						CSSM_WORDID_MAC,
	CSSM_ACL_AUTHORIZATION_DERIVE =						CSSM_WORDID_DERIVE,
	/* Defined authorization tag values for DLs */
	CSSM_ACL_AUTHORIZATION_DBS_CREATE =					CSSM_WORDID_DBS_CREATE,
	CSSM_ACL_AUTHORIZATION_DBS_DELETE =					CSSM_WORDID_DBS_DELETE,
	CSSM_ACL_AUTHORIZATION_DB_READ =					CSSM_WORDID_DB_READ,
	CSSM_ACL_AUTHORIZATION_DB_INSERT =					CSSM_WORDID_DB_INSERT,
	CSSM_ACL_AUTHORIZATION_DB_MODIFY =					CSSM_WORDID_DB_MODIFY,
	CSSM_ACL_AUTHORIZATION_DB_DELETE =					CSSM_WORDID_DB_DELETE
};

typedef struct cssm_authorizationgroup {
    uint32 NumberOfAuthTags;
    CSSM_ACL_AUTHORIZATION_TAG *AuthTags;
} CSSM_AUTHORIZATIONGROUP DEPRECATED_IN_MAC_OS_X_VERSION_10_7_AND_LATER, *CSSM_AUTHORIZATIONGROUP_PTR DEPRECATED_IN_MAC_OS_X_VERSION_10_7_AND_LATER;

typedef struct cssm_acl_validity_period {
    CSSM_DATA StartDate;
    CSSM_DATA EndDate;
} CSSM_ACL_VALIDITY_PERIOD DEPRECATED_IN_MAC_OS_X_VERSION_10_7_AND_LATER, *CSSM_ACL_VALIDITY_PERIOD_PTR DEPRECATED_IN_MAC_OS_X_VERSION_10_7_AND_LATER;

typedef struct cssm_acl_entry_prototype {
    CSSM_LIST TypedSubject;
    CSSM_BOOL Delegate;
    CSSM_AUTHORIZATIONGROUP Authorization;
    CSSM_ACL_VALIDITY_PERIOD TimeRange;
    CSSM_STRING EntryTag;
} CSSM_ACL_ENTRY_PROTOTYPE DEPRECATED_IN_MAC_OS_X_VERSION_10_7_AND_LATER, *CSSM_ACL_ENTRY_PROTOTYPE_PTR DEPRECATED_IN_MAC_OS_X_VERSION_10_7_AND_LATER;

typedef struct cssm_acl_owner_prototype {
    CSSM_LIST TypedSubject;
    CSSM_BOOL Delegate;
} CSSM_ACL_OWNER_PROTOTYPE DEPRECATED_IN_MAC_OS_X_VERSION_10_7_AND_LATER, *CSSM_ACL_OWNER_PROTOTYPE_PTR DEPRECATED_IN_MAC_OS_X_VERSION_10_7_AND_LATER;

typedef CSSM_RETURN (CSSMAPI * CSSM_ACL_SUBJECT_CALLBACK)
    (const CSSM_LIST *SubjectRequest,
     CSSM_LIST_PTR SubjectResponse,
     void *CallerContext,
     const CSSM_MEMORY_FUNCS *MemFuncs);

typedef struct cssm_acl_entry_input {
    CSSM_ACL_ENTRY_PROTOTYPE Prototype;
    CSSM_ACL_SUBJECT_CALLBACK Callback;
    void *CallerContext;
} CSSM_ACL_ENTRY_INPUT DEPRECATED_IN_MAC_OS_X_VERSION_10_7_AND_LATER, *CSSM_ACL_ENTRY_INPUT_PTR DEPRECATED_IN_MAC_OS_X_VERSION_10_7_AND_LATER;

typedef struct cssm_resource_control_context {
    CSSM_ACCESS_CREDENTIALS_PTR AccessCred;
    CSSM_ACL_ENTRY_INPUT InitialAclEntry;
} CSSM_RESOURCE_CONTROL_CONTEXT DEPRECATED_IN_MAC_OS_X_VERSION_10_7_AND_LATER, *CSSM_RESOURCE_CONTROL_CONTEXT_PTR DEPRECATED_IN_MAC_OS_X_VERSION_10_7_AND_LATER;

typedef CSSM_HANDLE CSSM_ACL_HANDLE;

typedef struct cssm_acl_entry_info {
    CSSM_ACL_ENTRY_PROTOTYPE EntryPublicInfo;
    CSSM_ACL_HANDLE EntryHandle;
} CSSM_ACL_ENTRY_INFO DEPRECATED_IN_MAC_OS_X_VERSION_10_7_AND_LATER, *CSSM_ACL_ENTRY_INFO_PTR DEPRECATED_IN_MAC_OS_X_VERSION_10_7_AND_LATER;

typedef uint32 CSSM_ACL_EDIT_MODE;
enum {
	CSSM_ACL_EDIT_MODE_ADD =			1,
	CSSM_ACL_EDIT_MODE_DELETE =			2,
	CSSM_ACL_EDIT_MODE_REPLACE =		3
};

typedef struct cssm_acl_edit {
    CSSM_ACL_EDIT_MODE EditMode;
    CSSM_ACL_HANDLE OldEntryHandle;
    const CSSM_ACL_ENTRY_INPUT *NewEntry;
} CSSM_ACL_EDIT DEPRECATED_IN_MAC_OS_X_VERSION_10_7_AND_LATER, *CSSM_ACL_EDIT_PTR DEPRECATED_IN_MAC_OS_X_VERSION_10_7_AND_LATER;

#if defined(WIN32)
typedef FARPROC CSSM_PROC_ADDR;
#else
typedef void (CSSMAPI *CSSM_PROC_ADDR) ();
#endif
typedef CSSM_PROC_ADDR *CSSM_PROC_ADDR_PTR;

typedef struct cssm_func_name_addr {
    CSSM_STRING Name;
    CSSM_PROC_ADDR Address;
} CSSM_FUNC_NAME_ADDR DEPRECATED_IN_MAC_OS_X_VERSION_10_7_AND_LATER, *CSSM_FUNC_NAME_ADDR_PTR DEPRECATED_IN_MAC_OS_X_VERSION_10_7_AND_LATER;


/* Data Types for Cryptographic Services  */

typedef struct cssm_date {
    uint8 Year[4];
    uint8 Month[2];
    uint8 Day[2];
} CSSM_DATE DEPRECATED_IN_MAC_OS_X_VERSION_10_7_AND_LATER, *CSSM_DATE_PTR DEPRECATED_IN_MAC_OS_X_VERSION_10_7_AND_LATER;

typedef struct cssm_range {
    uint32 Min; /* inclusive minimum value */
    uint32 Max; /* inclusive maximum value */
} CSSM_RANGE DEPRECATED_IN_MAC_OS_X_VERSION_10_7_AND_LATER, *CSSM_RANGE_PTR DEPRECATED_IN_MAC_OS_X_VERSION_10_7_AND_LATER;

typedef struct cssm_query_size_data {
    uint32 SizeInputBlock; /* size of input data block */
    uint32 SizeOutputBlock; /* size of resulting output data block */
} CSSM_QUERY_SIZE_DATA DEPRECATED_IN_MAC_OS_X_VERSION_10_7_AND_LATER, *CSSM_QUERY_SIZE_DATA_PTR DEPRECATED_IN_MAC_OS_X_VERSION_10_7_AND_LATER;

typedef uint32 CSSM_HEADERVERSION;
enum {
	CSSM_KEYHEADER_VERSION =		2
};

typedef struct cssm_key_size {
    uint32 LogicalKeySizeInBits; /* Logical key size in bits */
    uint32 EffectiveKeySizeInBits; /* Effective key size in bits */
} CSSM_KEY_SIZE DEPRECATED_IN_MAC_OS_X_VERSION_10_7_AND_LATER, *CSSM_KEY_SIZE_PTR DEPRECATED_IN_MAC_OS_X_VERSION_10_7_AND_LATER;

typedef uint32 CSSM_KEYBLOB_TYPE;
enum {
	CSSM_KEYBLOB_RAW =				0, /* The blob is a clear, raw key */
	CSSM_KEYBLOB_REFERENCE =		2, /* The blob is a reference to a key */
	CSSM_KEYBLOB_WRAPPED =			3, /* The blob is a wrapped RAW key */
	CSSM_KEYBLOB_OTHER =			0xFFFFFFFF
};

typedef uint32 CSSM_KEYBLOB_FORMAT;
enum {
	/* Raw Format */
	CSSM_KEYBLOB_RAW_FORMAT_NONE =			0,
	/* No further conversion need to be done */
	CSSM_KEYBLOB_RAW_FORMAT_PKCS1 =			1, /* RSA PKCS1 V1.5 */
	CSSM_KEYBLOB_RAW_FORMAT_PKCS3 =			2, /* RSA PKCS3 V1.5 */
	CSSM_KEYBLOB_RAW_FORMAT_MSCAPI =		3, /* Microsoft CAPI V2.0 */
	CSSM_KEYBLOB_RAW_FORMAT_PGP =			4, /* PGP V */
	CSSM_KEYBLOB_RAW_FORMAT_FIPS186 =		5, /* US Gov. FIPS 186 - DSS V */
	CSSM_KEYBLOB_RAW_FORMAT_BSAFE =			6, /* RSA Bsafe V3.0 */
	CSSM_KEYBLOB_RAW_FORMAT_CCA =			9, /* CCA clear public key blob */
	CSSM_KEYBLOB_RAW_FORMAT_PKCS8 =			10, /* RSA PKCS8 V1.2 */
	CSSM_KEYBLOB_RAW_FORMAT_SPKI =			11, /* SPKI Specification */
	CSSM_KEYBLOB_RAW_FORMAT_OCTET_STRING =	12,
	CSSM_KEYBLOB_RAW_FORMAT_OTHER =			0xFFFFFFFF /* Other, CSP defined */
};
enum {
	/* Wrapped Format */
	CSSM_KEYBLOB_WRAPPED_FORMAT_NONE =		0,
	/* No further conversion need to be done */
	CSSM_KEYBLOB_WRAPPED_FORMAT_PKCS8 =		1, /* RSA PKCS8 V1.2 */
	CSSM_KEYBLOB_WRAPPED_FORMAT_PKCS7 =		2,
	CSSM_KEYBLOB_WRAPPED_FORMAT_MSCAPI =	3,
	CSSM_KEYBLOB_WRAPPED_FORMAT_OTHER =		0xFFFFFFFF /* Other, CSP defined */
};
enum {
	/* Reference Format */
	CSSM_KEYBLOB_REF_FORMAT_INTEGER =		0,	/* Reference is a number or handle */
	CSSM_KEYBLOB_REF_FORMAT_STRING =		1,	/* Reference is a string or label */
	CSSM_KEYBLOB_REF_FORMAT_SPKI =			2,	/* Reference is an SPKI S-expression */
												/* to be evaluated to locate the key */
	CSSM_KEYBLOB_REF_FORMAT_OTHER =			0xFFFFFFFF	/* Other, CSP defined */
};

typedef uint32 CSSM_KEYCLASS;
enum {
	CSSM_KEYCLASS_PUBLIC_KEY =		0, /* Key is public key */
	CSSM_KEYCLASS_PRIVATE_KEY =		1, /* Key is private key */
	CSSM_KEYCLASS_SESSION_KEY =		2, /* Key is session or symmetric key */
	CSSM_KEYCLASS_SECRET_PART =		3, /* Key is part of secret key */
	CSSM_KEYCLASS_OTHER =			0xFFFFFFFF /* Other */
};

typedef uint32 CSSM_KEYATTR_FLAGS;
enum {
	/* Valid only during call to an API. Will never be valid when set in a key header */
	CSSM_KEYATTR_RETURN_DEFAULT =		0x00000000,
	CSSM_KEYATTR_RETURN_DATA =			0x10000000,
	CSSM_KEYATTR_RETURN_REF =			0x20000000,
	CSSM_KEYATTR_RETURN_NONE =			0x40000000,
	/* Valid during an API call and in a key header */
	CSSM_KEYATTR_PERMANENT =			0x00000001,
	CSSM_KEYATTR_PRIVATE =				0x00000002,
	CSSM_KEYATTR_MODIFIABLE =			0x00000004,
	CSSM_KEYATTR_SENSITIVE =			0x00000008,
	CSSM_KEYATTR_EXTRACTABLE =			0x00000020,
	/* Valid only in a key header generated by a CSP, not valid during an API call */
	CSSM_KEYATTR_ALWAYS_SENSITIVE =		0x00000010,
	CSSM_KEYATTR_NEVER_EXTRACTABLE =	0x00000040
};

typedef uint32 CSSM_KEYUSE;
enum {
	CSSM_KEYUSE_ANY =					0x80000000,
	CSSM_KEYUSE_ENCRYPT =				0x00000001,
	CSSM_KEYUSE_DECRYPT =				0x00000002,
	CSSM_KEYUSE_SIGN =					0x00000004,
	CSSM_KEYUSE_VERIFY =				0x00000008,
	CSSM_KEYUSE_SIGN_RECOVER =			0x00000010,
	CSSM_KEYUSE_VERIFY_RECOVER =		0x00000020,
	CSSM_KEYUSE_WRAP =					0x00000040,
	CSSM_KEYUSE_UNWRAP =				0x00000080,
	CSSM_KEYUSE_DERIVE =				0x00000100
};

typedef uint32 CSSM_ALGORITHMS;
enum {
	CSSM_ALGID_NONE =					0,
	CSSM_ALGID_CUSTOM =					CSSM_ALGID_NONE + 1,
	CSSM_ALGID_DH =						CSSM_ALGID_NONE + 2,
	CSSM_ALGID_PH =						CSSM_ALGID_NONE + 3,
	CSSM_ALGID_KEA =					CSSM_ALGID_NONE + 4,
	CSSM_ALGID_MD2 =					CSSM_ALGID_NONE + 5,
	CSSM_ALGID_MD4 =					CSSM_ALGID_NONE + 6,
	CSSM_ALGID_MD5 =					CSSM_ALGID_NONE + 7,
	CSSM_ALGID_SHA1 =					CSSM_ALGID_NONE + 8,
	CSSM_ALGID_NHASH =					CSSM_ALGID_NONE + 9,
	CSSM_ALGID_HAVAL =					CSSM_ALGID_NONE + 10,
	CSSM_ALGID_RIPEMD =					CSSM_ALGID_NONE + 11,
	CSSM_ALGID_IBCHASH =				CSSM_ALGID_NONE + 12,
	CSSM_ALGID_RIPEMAC =				CSSM_ALGID_NONE + 13,
	CSSM_ALGID_DES =					CSSM_ALGID_NONE + 14,
	CSSM_ALGID_DESX =					CSSM_ALGID_NONE + 15,
	CSSM_ALGID_RDES =					CSSM_ALGID_NONE + 16,
	CSSM_ALGID_3DES_3KEY_EDE =			CSSM_ALGID_NONE + 17,
	CSSM_ALGID_3DES_2KEY_EDE =			CSSM_ALGID_NONE + 18,
	CSSM_ALGID_3DES_1KEY_EEE =			CSSM_ALGID_NONE + 19,
	CSSM_ALGID_3DES_3KEY =           	CSSM_ALGID_3DES_3KEY_EDE,
	CSSM_ALGID_3DES_3KEY_EEE =       	CSSM_ALGID_NONE + 20,
	CSSM_ALGID_3DES_2KEY =           	CSSM_ALGID_3DES_2KEY_EDE,
	CSSM_ALGID_3DES_2KEY_EEE =       	CSSM_ALGID_NONE + 21,
	CSSM_ALGID_3DES_1KEY =				CSSM_ALGID_3DES_3KEY_EEE,
	CSSM_ALGID_IDEA =					CSSM_ALGID_NONE + 22,
	CSSM_ALGID_RC2 =					CSSM_ALGID_NONE + 23,
	CSSM_ALGID_RC5 =					CSSM_ALGID_NONE + 24,
	CSSM_ALGID_RC4 =					CSSM_ALGID_NONE + 25,
	CSSM_ALGID_SEAL =					CSSM_ALGID_NONE + 26,
	CSSM_ALGID_CAST =					CSSM_ALGID_NONE + 27,
	CSSM_ALGID_BLOWFISH =				CSSM_ALGID_NONE + 28,
	CSSM_ALGID_SKIPJACK =				CSSM_ALGID_NONE + 29,
	CSSM_ALGID_LUCIFER =				CSSM_ALGID_NONE + 30,
	CSSM_ALGID_MADRYGA =				CSSM_ALGID_NONE + 31,
	CSSM_ALGID_FEAL =					CSSM_ALGID_NONE + 32,
	CSSM_ALGID_REDOC =					CSSM_ALGID_NONE + 33,
	CSSM_ALGID_REDOC3 =					CSSM_ALGID_NONE + 34,
	CSSM_ALGID_LOKI =					CSSM_ALGID_NONE + 35,
	CSSM_ALGID_KHUFU =					CSSM_ALGID_NONE + 36,
	CSSM_ALGID_KHAFRE =					CSSM_ALGID_NONE + 37,
	CSSM_ALGID_MMB =					CSSM_ALGID_NONE + 38,
	CSSM_ALGID_GOST =					CSSM_ALGID_NONE + 39,
	CSSM_ALGID_SAFER =					CSSM_ALGID_NONE + 40,
	CSSM_ALGID_CRAB =					CSSM_ALGID_NONE + 41,
	CSSM_ALGID_RSA =					CSSM_ALGID_NONE + 42,
	CSSM_ALGID_DSA =					CSSM_ALGID_NONE + 43,
	CSSM_ALGID_MD5WithRSA =				CSSM_ALGID_NONE + 44,
	CSSM_ALGID_MD2WithRSA =				CSSM_ALGID_NONE + 45,
	CSSM_ALGID_ElGamal =				CSSM_ALGID_NONE + 46,
	CSSM_ALGID_MD2Random =				CSSM_ALGID_NONE + 47,
	CSSM_ALGID_MD5Random =				CSSM_ALGID_NONE + 48,
	CSSM_ALGID_SHARandom =				CSSM_ALGID_NONE + 49,
	CSSM_ALGID_DESRandom =				CSSM_ALGID_NONE + 50,
	CSSM_ALGID_SHA1WithRSA =			CSSM_ALGID_NONE + 51,
	CSSM_ALGID_CDMF =					CSSM_ALGID_NONE + 52,
	CSSM_ALGID_CAST3 =					CSSM_ALGID_NONE + 53,
	CSSM_ALGID_CAST5 =					CSSM_ALGID_NONE + 54,
	CSSM_ALGID_GenericSecret =			CSSM_ALGID_NONE + 55,
	CSSM_ALGID_ConcatBaseAndKey =		CSSM_ALGID_NONE + 56,
	CSSM_ALGID_ConcatKeyAndBase =		CSSM_ALGID_NONE + 57,
	CSSM_ALGID_ConcatBaseAndData =		CSSM_ALGID_NONE + 58,
	CSSM_ALGID_ConcatDataAndBase =		CSSM_ALGID_NONE + 59,
	CSSM_ALGID_XORBaseAndData =			CSSM_ALGID_NONE + 60,
	CSSM_ALGID_ExtractFromKey =			CSSM_ALGID_NONE + 61,
	CSSM_ALGID_SSL3PreMasterGen =		CSSM_ALGID_NONE + 62,
	CSSM_ALGID_SSL3MasterDerive =		CSSM_ALGID_NONE + 63,
	CSSM_ALGID_SSL3KeyAndMacDerive =	CSSM_ALGID_NONE + 64,
	CSSM_ALGID_SSL3MD5_MAC =			CSSM_ALGID_NONE + 65,
	CSSM_ALGID_SSL3SHA1_MAC =			CSSM_ALGID_NONE + 66,
	CSSM_ALGID_PKCS5_PBKDF1_MD5 =		CSSM_ALGID_NONE + 67,
	CSSM_ALGID_PKCS5_PBKDF1_MD2 =		CSSM_ALGID_NONE + 68,
	CSSM_ALGID_PKCS5_PBKDF1_SHA1 =		CSSM_ALGID_NONE + 69,
	CSSM_ALGID_WrapLynks =				CSSM_ALGID_NONE + 70,
	CSSM_ALGID_WrapSET_OAEP =			CSSM_ALGID_NONE + 71,
	CSSM_ALGID_BATON =					CSSM_ALGID_NONE + 72,
	CSSM_ALGID_ECDSA =					CSSM_ALGID_NONE + 73,
	CSSM_ALGID_MAYFLY =					CSSM_ALGID_NONE + 74,
	CSSM_ALGID_JUNIPER =				CSSM_ALGID_NONE + 75,
	CSSM_ALGID_FASTHASH =				CSSM_ALGID_NONE + 76,
	CSSM_ALGID_3DES =					CSSM_ALGID_NONE + 77,
	CSSM_ALGID_SSL3MD5 =				CSSM_ALGID_NONE + 78,
	CSSM_ALGID_SSL3SHA1 =				CSSM_ALGID_NONE + 79,
	CSSM_ALGID_FortezzaTimestamp =		CSSM_ALGID_NONE + 80,
	CSSM_ALGID_SHA1WithDSA =			CSSM_ALGID_NONE + 81,
	CSSM_ALGID_SHA1WithECDSA =			CSSM_ALGID_NONE + 82,
	CSSM_ALGID_DSA_BSAFE =				CSSM_ALGID_NONE + 83,
	CSSM_ALGID_ECDH =					CSSM_ALGID_NONE + 84,
	CSSM_ALGID_ECMQV =					CSSM_ALGID_NONE + 85,
	CSSM_ALGID_PKCS12_SHA1_PBE =		CSSM_ALGID_NONE + 86,
	CSSM_ALGID_ECNRA =					CSSM_ALGID_NONE + 87,
	CSSM_ALGID_SHA1WithECNRA =			CSSM_ALGID_NONE + 88,
	CSSM_ALGID_ECES =					CSSM_ALGID_NONE + 89,
	CSSM_ALGID_ECAES =					CSSM_ALGID_NONE + 90,
	CSSM_ALGID_SHA1HMAC =				CSSM_ALGID_NONE + 91,
	CSSM_ALGID_FIPS186Random =			CSSM_ALGID_NONE + 92,
	CSSM_ALGID_ECC =					CSSM_ALGID_NONE + 93,
	CSSM_ALGID_MQV =					CSSM_ALGID_NONE + 94,
	CSSM_ALGID_NRA =					CSSM_ALGID_NONE + 95,
	CSSM_ALGID_IntelPlatformRandom =	CSSM_ALGID_NONE + 96,
	CSSM_ALGID_UTC =					CSSM_ALGID_NONE + 97,
	CSSM_ALGID_HAVAL3 =					CSSM_ALGID_NONE + 98,
	CSSM_ALGID_HAVAL4 =					CSSM_ALGID_NONE + 99,
	CSSM_ALGID_HAVAL5 =					CSSM_ALGID_NONE + 100,
	CSSM_ALGID_TIGER =					CSSM_ALGID_NONE + 101,
	CSSM_ALGID_MD5HMAC =				CSSM_ALGID_NONE + 102,
	CSSM_ALGID_PKCS5_PBKDF2 = 			CSSM_ALGID_NONE + 103,
	CSSM_ALGID_RUNNING_COUNTER =		CSSM_ALGID_NONE + 104,
	CSSM_ALGID_LAST =					CSSM_ALGID_NONE + 0x7FFFFFFF,
/* All algorithms IDs that are vendor specific, and not
   part of the CSSM specification should be defined relative
   to CSSM_ALGID_VENDOR_DEFINED. */
	CSSM_ALGID_VENDOR_DEFINED =			CSSM_ALGID_NONE + 0x80000000
};

typedef uint32 CSSM_ENCRYPT_MODE;
enum {
	CSSM_ALGMODE_NONE =					0,
	CSSM_ALGMODE_CUSTOM =				CSSM_ALGMODE_NONE + 1,
	CSSM_ALGMODE_ECB =					CSSM_ALGMODE_NONE + 2,
	CSSM_ALGMODE_ECBPad =				CSSM_ALGMODE_NONE + 3,
	CSSM_ALGMODE_CBC =					CSSM_ALGMODE_NONE + 4,
	CSSM_ALGMODE_CBC_IV8 =				CSSM_ALGMODE_NONE + 5,
	CSSM_ALGMODE_CBCPadIV8 =			CSSM_ALGMODE_NONE + 6,
	CSSM_ALGMODE_CFB =					CSSM_ALGMODE_NONE + 7,
	CSSM_ALGMODE_CFB_IV8 =				CSSM_ALGMODE_NONE + 8,
	CSSM_ALGMODE_CFBPadIV8 =			CSSM_ALGMODE_NONE + 9,
	CSSM_ALGMODE_OFB =					CSSM_ALGMODE_NONE + 10,
	CSSM_ALGMODE_OFB_IV8 =				CSSM_ALGMODE_NONE + 11,
	CSSM_ALGMODE_OFBPadIV8 =			CSSM_ALGMODE_NONE + 12,
	CSSM_ALGMODE_COUNTER =				CSSM_ALGMODE_NONE + 13,
	CSSM_ALGMODE_BC =					CSSM_ALGMODE_NONE + 14,
	CSSM_ALGMODE_PCBC =					CSSM_ALGMODE_NONE + 15,
	CSSM_ALGMODE_CBCC =					CSSM_ALGMODE_NONE + 16,
	CSSM_ALGMODE_OFBNLF =				CSSM_ALGMODE_NONE + 17,
	CSSM_ALGMODE_PBC =					CSSM_ALGMODE_NONE + 18,
	CSSM_ALGMODE_PFB =					CSSM_ALGMODE_NONE + 19,
	CSSM_ALGMODE_CBCPD =				CSSM_ALGMODE_NONE + 20,
	CSSM_ALGMODE_PUBLIC_KEY =			CSSM_ALGMODE_NONE + 21,
	CSSM_ALGMODE_PRIVATE_KEY =			CSSM_ALGMODE_NONE + 22,
	CSSM_ALGMODE_SHUFFLE =				CSSM_ALGMODE_NONE + 23,
	CSSM_ALGMODE_ECB64 =				CSSM_ALGMODE_NONE + 24,
	CSSM_ALGMODE_CBC64 =				CSSM_ALGMODE_NONE + 25,
	CSSM_ALGMODE_OFB64 =				CSSM_ALGMODE_NONE + 26,
	CSSM_ALGMODE_CFB32 =				CSSM_ALGMODE_NONE + 28,
	CSSM_ALGMODE_CFB16 =				CSSM_ALGMODE_NONE + 29,
	CSSM_ALGMODE_CFB8 =					CSSM_ALGMODE_NONE + 30,
	CSSM_ALGMODE_WRAP =					CSSM_ALGMODE_NONE + 31,
	CSSM_ALGMODE_PRIVATE_WRAP =			CSSM_ALGMODE_NONE + 32,
	CSSM_ALGMODE_RELAYX =				CSSM_ALGMODE_NONE + 33,
	CSSM_ALGMODE_ECB128 =				CSSM_ALGMODE_NONE + 34,
	CSSM_ALGMODE_ECB96 =				CSSM_ALGMODE_NONE + 35,
	CSSM_ALGMODE_CBC128 =				CSSM_ALGMODE_NONE + 36,
	CSSM_ALGMODE_OAEP_HASH =			CSSM_ALGMODE_NONE + 37,
	CSSM_ALGMODE_PKCS1_EME_V15 =  		CSSM_ALGMODE_NONE + 38,
	CSSM_ALGMODE_PKCS1_EME_OAEP = 		CSSM_ALGMODE_NONE + 39,
	CSSM_ALGMODE_PKCS1_EMSA_V15 = 		CSSM_ALGMODE_NONE + 40,
	CSSM_ALGMODE_ISO_9796 =       		CSSM_ALGMODE_NONE + 41,
	CSSM_ALGMODE_X9_31 =           		CSSM_ALGMODE_NONE + 42,
	CSSM_ALGMODE_LAST =            		CSSM_ALGMODE_NONE + 0x7FFFFFFF,
/* All algorithms modes that are vendor specific, and
   not part of the CSSM specification should be defined
   relative to CSSM_ALGMODE_VENDOR_DEFINED. */
	CSSM_ALGMODE_VENDOR_DEFINED =		CSSM_ALGMODE_NONE + 0x80000000
};

typedef struct cssm_keyheader {
    CSSM_HEADERVERSION HeaderVersion; /* Key header version */
    CSSM_GUID CspId; /* GUID of CSP generating the key */
    CSSM_KEYBLOB_TYPE BlobType; /* See BlobType enum */
    CSSM_KEYBLOB_FORMAT Format; /* Raw or Reference format */
    CSSM_ALGORITHMS AlgorithmId; /* Algorithm ID of key */
    CSSM_KEYCLASS KeyClass; /* Public/Private/Secret, etc. */
    uint32 LogicalKeySizeInBits; /* Logical key size in bits */
    CSSM_KEYATTR_FLAGS KeyAttr; /* Attribute flags */
    CSSM_KEYUSE KeyUsage; /* Key use flags */
    CSSM_DATE StartDate; /* Effective date of key */
    CSSM_DATE EndDate; /* Expiration date of key */
    CSSM_ALGORITHMS WrapAlgorithmId; /* == CSSM_ALGID_NONE if clear key */
    CSSM_ENCRYPT_MODE WrapMode; /* if alg supports multiple wrapping modes */
    uint32 Reserved;
} CSSM_KEYHEADER DEPRECATED_IN_MAC_OS_X_VERSION_10_7_AND_LATER, *CSSM_KEYHEADER_PTR DEPRECATED_IN_MAC_OS_X_VERSION_10_7_AND_LATER;

typedef struct cssm_key {
    CSSM_KEYHEADER KeyHeader; /* Fixed length key header */
    CSSM_DATA KeyData; /* Variable length key data */
} CSSM_KEY DEPRECATED_IN_MAC_OS_X_VERSION_10_7_AND_LATER, *CSSM_KEY_PTR DEPRECATED_IN_MAC_OS_X_VERSION_10_7_AND_LATER;

typedef CSSM_KEY CSSM_WRAP_KEY, *CSSM_WRAP_KEY_PTR;

typedef uint32 CSSM_CSPTYPE;
enum {
    CSSM_CSP_SOFTWARE =					1,
    CSSM_CSP_HARDWARE =					CSSM_CSP_SOFTWARE + 1,
    CSSM_CSP_HYBRID =					CSSM_CSP_SOFTWARE + 2
};

/* From DL. */
typedef struct cssm_dl_db_handle {
    CSSM_DL_HANDLE DLHandle;
    CSSM_DB_HANDLE DBHandle;
} CSSM_DL_DB_HANDLE DEPRECATED_IN_MAC_OS_X_VERSION_10_7_AND_LATER, *CSSM_DL_DB_HANDLE_PTR DEPRECATED_IN_MAC_OS_X_VERSION_10_7_AND_LATER;

typedef uint32 CSSM_CONTEXT_TYPE;
enum {
	CSSM_ALGCLASS_NONE =				0,
	CSSM_ALGCLASS_CUSTOM =				CSSM_ALGCLASS_NONE + 1,
	CSSM_ALGCLASS_SIGNATURE =			CSSM_ALGCLASS_NONE + 2,
	CSSM_ALGCLASS_SYMMETRIC =			CSSM_ALGCLASS_NONE + 3,
	CSSM_ALGCLASS_DIGEST =				CSSM_ALGCLASS_NONE + 4,
	CSSM_ALGCLASS_RANDOMGEN =			CSSM_ALGCLASS_NONE + 5,
	CSSM_ALGCLASS_UNIQUEGEN =			CSSM_ALGCLASS_NONE + 6,
	CSSM_ALGCLASS_MAC =					CSSM_ALGCLASS_NONE + 7,
	CSSM_ALGCLASS_ASYMMETRIC =			CSSM_ALGCLASS_NONE + 8,
	CSSM_ALGCLASS_KEYGEN =				CSSM_ALGCLASS_NONE + 9,
	CSSM_ALGCLASS_DERIVEKEY =			CSSM_ALGCLASS_NONE + 10
};

/* Attribute data type tags */
enum {
	CSSM_ATTRIBUTE_DATA_NONE =					0x00000000,
	CSSM_ATTRIBUTE_DATA_UINT32 =				0x10000000,
	CSSM_ATTRIBUTE_DATA_CSSM_DATA =				0x20000000,
	CSSM_ATTRIBUTE_DATA_CRYPTO_DATA =			0x30000000,
	CSSM_ATTRIBUTE_DATA_KEY =					0x40000000,
	CSSM_ATTRIBUTE_DATA_STRING =				0x50000000,
	CSSM_ATTRIBUTE_DATA_DATE =					0x60000000,
	CSSM_ATTRIBUTE_DATA_RANGE =					0x70000000,
	CSSM_ATTRIBUTE_DATA_ACCESS_CREDENTIALS =	0x80000000,
	CSSM_ATTRIBUTE_DATA_VERSION =				0x01000000,
	CSSM_ATTRIBUTE_DATA_DL_DB_HANDLE =			0x02000000,
	CSSM_ATTRIBUTE_DATA_KR_PROFILE =			0x03000000,
	CSSM_ATTRIBUTE_TYPE_MASK =					0xFF000000
};

typedef uint32 CSSM_ATTRIBUTE_TYPE;
enum {
    CSSM_ATTRIBUTE_NONE =				0,
    CSSM_ATTRIBUTE_CUSTOM =				CSSM_ATTRIBUTE_DATA_CSSM_DATA			| 1,
    CSSM_ATTRIBUTE_DESCRIPTION =		CSSM_ATTRIBUTE_DATA_STRING				| 2,
    CSSM_ATTRIBUTE_KEY =				CSSM_ATTRIBUTE_DATA_KEY					| 3,
    CSSM_ATTRIBUTE_INIT_VECTOR =		CSSM_ATTRIBUTE_DATA_CSSM_DATA			| 4,
    CSSM_ATTRIBUTE_SALT =				CSSM_ATTRIBUTE_DATA_CSSM_DATA			| 5,
    CSSM_ATTRIBUTE_PADDING =			CSSM_ATTRIBUTE_DATA_UINT32				| 6,
    CSSM_ATTRIBUTE_RANDOM =				CSSM_ATTRIBUTE_DATA_CSSM_DATA			| 7,
    CSSM_ATTRIBUTE_SEED =				CSSM_ATTRIBUTE_DATA_CRYPTO_DATA			| 8,
    CSSM_ATTRIBUTE_PASSPHRASE =			CSSM_ATTRIBUTE_DATA_CRYPTO_DATA			| 9,
    CSSM_ATTRIBUTE_KEY_LENGTH =			CSSM_ATTRIBUTE_DATA_UINT32				| 10,
    CSSM_ATTRIBUTE_KEY_LENGTH_RANGE =	CSSM_ATTRIBUTE_DATA_RANGE				| 11,
    CSSM_ATTRIBUTE_BLOCK_SIZE =			CSSM_ATTRIBUTE_DATA_UINT32				| 12,
    CSSM_ATTRIBUTE_OUTPUT_SIZE =		CSSM_ATTRIBUTE_DATA_UINT32				| 13,
    CSSM_ATTRIBUTE_ROUNDS =				CSSM_ATTRIBUTE_DATA_UINT32				| 14,
    CSSM_ATTRIBUTE_IV_SIZE =			CSSM_ATTRIBUTE_DATA_UINT32				| 15,
    CSSM_ATTRIBUTE_ALG_PARAMS =			CSSM_ATTRIBUTE_DATA_CSSM_DATA			| 16,
    CSSM_ATTRIBUTE_LABEL =				CSSM_ATTRIBUTE_DATA_CSSM_DATA			| 17,
    CSSM_ATTRIBUTE_KEY_TYPE =			CSSM_ATTRIBUTE_DATA_UINT32				| 18,
    CSSM_ATTRIBUTE_MODE =				CSSM_ATTRIBUTE_DATA_UINT32				| 19,
    CSSM_ATTRIBUTE_EFFECTIVE_BITS =		CSSM_ATTRIBUTE_DATA_UINT32				| 20,
    CSSM_ATTRIBUTE_START_DATE =			CSSM_ATTRIBUTE_DATA_DATE				| 21,
    CSSM_ATTRIBUTE_END_DATE =			CSSM_ATTRIBUTE_DATA_DATE				| 22,
    CSSM_ATTRIBUTE_KEYUSAGE =			CSSM_ATTRIBUTE_DATA_UINT32				| 23,
    CSSM_ATTRIBUTE_KEYATTR =			CSSM_ATTRIBUTE_DATA_UINT32				| 24,
    CSSM_ATTRIBUTE_VERSION =			CSSM_ATTRIBUTE_DATA_VERSION				| 25,
    CSSM_ATTRIBUTE_PRIME =				CSSM_ATTRIBUTE_DATA_CSSM_DATA			| 26,
    CSSM_ATTRIBUTE_BASE =				CSSM_ATTRIBUTE_DATA_CSSM_DATA			| 27,
    CSSM_ATTRIBUTE_SUBPRIME =			CSSM_ATTRIBUTE_DATA_CSSM_DATA			| 28,
    CSSM_ATTRIBUTE_ALG_ID =				CSSM_ATTRIBUTE_DATA_UINT32				| 29,
    CSSM_ATTRIBUTE_ITERATION_COUNT =	CSSM_ATTRIBUTE_DATA_UINT32				| 30,
    CSSM_ATTRIBUTE_ROUNDS_RANGE =		CSSM_ATTRIBUTE_DATA_RANGE				| 31,
	CSSM_ATTRIBUTE_KRPROFILE_LOCAL  =	CSSM_ATTRIBUTE_DATA_KR_PROFILE			| 32,
	CSSM_ATTRIBUTE_KRPROFILE_REMOTE =	CSSM_ATTRIBUTE_DATA_KR_PROFILE			| 33,
    CSSM_ATTRIBUTE_CSP_HANDLE =			CSSM_ATTRIBUTE_DATA_UINT32				| 34,
    CSSM_ATTRIBUTE_DL_DB_HANDLE =		CSSM_ATTRIBUTE_DATA_DL_DB_HANDLE		| 35,
    CSSM_ATTRIBUTE_ACCESS_CREDENTIALS =	CSSM_ATTRIBUTE_DATA_ACCESS_CREDENTIALS	| 36,
    CSSM_ATTRIBUTE_PUBLIC_KEY_FORMAT =	CSSM_ATTRIBUTE_DATA_UINT32				| 37,
    CSSM_ATTRIBUTE_PRIVATE_KEY_FORMAT =	CSSM_ATTRIBUTE_DATA_UINT32				| 38,
    CSSM_ATTRIBUTE_SYMMETRIC_KEY_FORMAT=CSSM_ATTRIBUTE_DATA_UINT32				| 39,
    CSSM_ATTRIBUTE_WRAPPED_KEY_FORMAT =	CSSM_ATTRIBUTE_DATA_UINT32				| 40
};

typedef uint32 CSSM_PADDING;
enum {
	CSSM_PADDING_NONE =					0,
	CSSM_PADDING_CUSTOM =				CSSM_PADDING_NONE + 1,
	CSSM_PADDING_ZERO =					CSSM_PADDING_NONE + 2,
	CSSM_PADDING_ONE =					CSSM_PADDING_NONE + 3,
	CSSM_PADDING_ALTERNATE =			CSSM_PADDING_NONE + 4,
	CSSM_PADDING_FF =					CSSM_PADDING_NONE + 5,
	CSSM_PADDING_PKCS5 =				CSSM_PADDING_NONE + 6,
	CSSM_PADDING_PKCS7 =				CSSM_PADDING_NONE + 7,
	CSSM_PADDING_CIPHERSTEALING =		CSSM_PADDING_NONE + 8,
	CSSM_PADDING_RANDOM =				CSSM_PADDING_NONE + 9,
	CSSM_PADDING_PKCS1 =				CSSM_PADDING_NONE + 10,
    CSSM_PADDING_SIGRAW =               CSSM_PADDING_NONE + 11,
/* All padding types that are vendor specific, and not
   part of the CSSM specification should be defined
   relative to CSSM_PADDING_VENDOR_DEFINED. */
	CSSM_PADDING_VENDOR_DEFINED =		CSSM_PADDING_NONE + 0x80000000
};

typedef CSSM_ALGORITHMS CSSM_KEY_TYPE;

typedef struct cssm_context_attribute {
    CSSM_ATTRIBUTE_TYPE AttributeType;
    uint32 AttributeLength;
    union cssm_context_attribute_value {
        char *String;
        uint32 Uint32;
        CSSM_ACCESS_CREDENTIALS_PTR AccessCredentials;
        CSSM_KEY_PTR Key;
        CSSM_DATA_PTR Data;
        CSSM_PADDING Padding;
        CSSM_DATE_PTR Date;
        CSSM_RANGE_PTR Range;
        CSSM_CRYPTO_DATA_PTR CryptoData;
        CSSM_VERSION_PTR Version;
        CSSM_DL_DB_HANDLE_PTR DLDBHandle;
        struct cssm_kr_profile *KRProfile;
    } Attribute;
} CSSM_CONTEXT_ATTRIBUTE, *CSSM_CONTEXT_ATTRIBUTE_PTR;

typedef struct cssm_context {
    CSSM_CONTEXT_TYPE ContextType;
    CSSM_ALGORITHMS AlgorithmType;
    uint32 NumberOfAttributes;
    CSSM_CONTEXT_ATTRIBUTE_PTR ContextAttributes;
    CSSM_CSP_HANDLE CSPHandle;
	CSSM_BOOL Privileged;
	uint32 /*CSSM_KR_POLICY_FLAGS*/ EncryptionProhibited;
	uint32 WorkFactor;
	uint32 Reserved;	/* reserved for future use */
} CSSM_CONTEXT DEPRECATED_IN_MAC_OS_X_VERSION_10_7_AND_LATER, *CSSM_CONTEXT_PTR DEPRECATED_IN_MAC_OS_X_VERSION_10_7_AND_LATER;

typedef uint32 CSSM_SC_FLAGS;
enum {
	CSSM_CSP_TOK_RNG =				0x00000001,
	CSSM_CSP_TOK_CLOCK_EXISTS =		0x00000040
};

typedef uint32 CSSM_CSP_READER_FLAGS;
enum {
	CSSM_CSP_RDR_TOKENPRESENT =			0x00000001,
	/* Token is present in reader/slot */
	CSSM_CSP_RDR_EXISTS =				0x00000002,
	/* Device is a reader with a
	   removable token */
	CSSM_CSP_RDR_HW =					0x00000004
	/* Slot is a hardware slot */
};

typedef uint32 CSSM_CSP_FLAGS;
enum {
	CSSM_CSP_TOK_WRITE_PROTECTED =			0x00000002,
	CSSM_CSP_TOK_LOGIN_REQUIRED =			0x00000004,
	CSSM_CSP_TOK_USER_PIN_INITIALIZED =		0x00000008,
	CSSM_CSP_TOK_PROT_AUTHENTICATION =		0x00000100,
	CSSM_CSP_TOK_USER_PIN_EXPIRED =			0x00100000,
	CSSM_CSP_TOK_SESSION_KEY_PASSWORD =		0x00200000,
	CSSM_CSP_TOK_PRIVATE_KEY_PASSWORD =		0x00400000,
	CSSM_CSP_STORES_PRIVATE_KEYS =			0x01000000,
	CSSM_CSP_STORES_PUBLIC_KEYS =			0x02000000,
	CSSM_CSP_STORES_SESSION_KEYS =			0x04000000,
	CSSM_CSP_STORES_CERTIFICATES =			0x08000000,
	CSSM_CSP_STORES_GENERIC =				0x10000000
};

typedef uint32 CSSM_PKCS_OAEP_MGF;
enum {
	CSSM_PKCS_OAEP_MGF_NONE =				0,
	CSSM_PKCS_OAEP_MGF1_SHA1 =				CSSM_PKCS_OAEP_MGF_NONE + 1,
	CSSM_PKCS_OAEP_MGF1_MD5 =				CSSM_PKCS_OAEP_MGF_NONE + 2
};

typedef uint32 CSSM_PKCS_OAEP_PSOURCE;
enum {
	CSSM_PKCS_OAEP_PSOURCE_NONE =			0,
	CSSM_PKCS_OAEP_PSOURCE_Pspecified =		CSSM_PKCS_OAEP_PSOURCE_NONE + 1
};

typedef struct cssm_pkcs1_oaep_params {
    uint32 HashAlgorithm;
    CSSM_DATA HashParams;
    CSSM_PKCS_OAEP_MGF MGF;
    CSSM_DATA MGFParams;
    CSSM_PKCS_OAEP_PSOURCE PSource;
    CSSM_DATA PSourceParams;
} CSSM_PKCS1_OAEP_PARAMS DEPRECATED_IN_MAC_OS_X_VERSION_10_7_AND_LATER, *CSSM_PKCS1_OAEP_PARAMS_PTR DEPRECATED_IN_MAC_OS_X_VERSION_10_7_AND_LATER;

typedef struct cssm_csp_operational_statistics {
    CSSM_BOOL UserAuthenticated;
    /* CSSM_TRUE if the user is logged in to the token, CSSM_FALSE otherwise. */
    CSSM_CSP_FLAGS DeviceFlags;
    uint32 TokenMaxSessionCount; /* Exported by Cryptoki modules. */
    uint32 TokenOpenedSessionCount;
    uint32 TokenMaxRWSessionCount;
    uint32 TokenOpenedRWSessionCount;
    uint32 TokenTotalPublicMem; /* Storage space statistics. */
    uint32 TokenFreePublicMem;
    uint32 TokenTotalPrivateMem;
    uint32 TokenFreePrivateMem;
} CSSM_CSP_OPERATIONAL_STATISTICS DEPRECATED_IN_MAC_OS_X_VERSION_10_7_AND_LATER, *CSSM_CSP_OPERATIONAL_STATISTICS_PTR DEPRECATED_IN_MAC_OS_X_VERSION_10_7_AND_LATER;

/* Indicates that the statistical value can not be revealed or is not
   relevant for a CSP */
enum {
	CSSM_VALUE_NOT_AVAILABLE =		-1
};

typedef struct cssm_pkcs5_pbkdf1_params {
    CSSM_DATA Passphrase;
    CSSM_DATA InitVector;
} CSSM_PKCS5_PBKDF1_PARAMS DEPRECATED_IN_MAC_OS_X_VERSION_10_7_AND_LATER, *CSSM_PKCS5_PBKDF1_PARAMS_PTR DEPRECATED_IN_MAC_OS_X_VERSION_10_7_AND_LATER;

typedef uint32 CSSM_PKCS5_PBKDF2_PRF;
enum {
	CSSM_PKCS5_PBKDF2_PRF_HMAC_SHA1 =	0
};

typedef struct cssm_pkcs5_pbkdf2_params {
	CSSM_DATA Passphrase;
	CSSM_PKCS5_PBKDF2_PRF PseudoRandomFunction;
} CSSM_PKCS5_PBKDF2_PARAMS DEPRECATED_IN_MAC_OS_X_VERSION_10_7_AND_LATER, *CSSM_PKCS5_PBKDF2_PARAMS_PTR DEPRECATED_IN_MAC_OS_X_VERSION_10_7_AND_LATER;

typedef struct cssm_kea_derive_params {
    CSSM_DATA Rb;
    CSSM_DATA Yb;
} CSSM_KEA_DERIVE_PARAMS DEPRECATED_IN_MAC_OS_X_VERSION_10_7_AND_LATER, *CSSM_KEA_DERIVE_PARAMS_PTR DEPRECATED_IN_MAC_OS_X_VERSION_10_7_AND_LATER;


/* Data Types for Trust Policy Services  */

typedef struct cssm_tp_authority_id {
    CSSM_DATA *AuthorityCert;
    CSSM_NET_ADDRESS_PTR AuthorityLocation;
} CSSM_TP_AUTHORITY_ID DEPRECATED_IN_MAC_OS_X_VERSION_10_7_AND_LATER, *CSSM_TP_AUTHORITY_ID_PTR DEPRECATED_IN_MAC_OS_X_VERSION_10_7_AND_LATER;

typedef uint32 CSSM_TP_AUTHORITY_REQUEST_TYPE, *CSSM_TP_AUTHORITY_REQUEST_TYPE_PTR;
enum {
	CSSM_TP_AUTHORITY_REQUEST_CERTISSUE =		0x01,
	CSSM_TP_AUTHORITY_REQUEST_CERTREVOKE =		0x02,
	CSSM_TP_AUTHORITY_REQUEST_CERTSUSPEND =		0x03,
	CSSM_TP_AUTHORITY_REQUEST_CERTRESUME =		0x04,
	CSSM_TP_AUTHORITY_REQUEST_CERTVERIFY =		0x05,
	CSSM_TP_AUTHORITY_REQUEST_CERTNOTARIZE =	0x06,
	CSSM_TP_AUTHORITY_REQUEST_CERTUSERECOVER =	0x07,
	CSSM_TP_AUTHORITY_REQUEST_CRLISSUE =		0x100
};

typedef CSSM_RETURN (CSSMAPI * CSSM_TP_VERIFICATION_RESULTS_CALLBACK)
	(CSSM_MODULE_HANDLE ModuleHandle,
	 void *CallerCtx,
	 CSSM_DATA_PTR VerifiedCert);

/* From CL */
typedef CSSM_DATA CSSM_OID, *CSSM_OID_PTR;

typedef struct cssm_field {
    CSSM_OID FieldOid;
    CSSM_DATA FieldValue;
} CSSM_FIELD DEPRECATED_IN_MAC_OS_X_VERSION_10_7_AND_LATER, *CSSM_FIELD_PTR DEPRECATED_IN_MAC_OS_X_VERSION_10_7_AND_LATER;

/* TP Again. */
typedef struct cssm_tp_policyinfo {
    uint32 NumberOfPolicyIds;
    CSSM_FIELD_PTR PolicyIds;
    void *PolicyControl;
} CSSM_TP_POLICYINFO DEPRECATED_IN_MAC_OS_X_VERSION_10_7_AND_LATER, *CSSM_TP_POLICYINFO_PTR DEPRECATED_IN_MAC_OS_X_VERSION_10_7_AND_LATER;

typedef uint32 CSSM_TP_SERVICES;
enum {
	/* bit masks for additional Authority services available through TP */
	CSSM_TP_KEY_ARCHIVE =				0x0001, /* archive cert & keys */
	CSSM_TP_CERT_PUBLISH =				0x0002, /* register cert in directory */
	CSSM_TP_CERT_NOTIFY_RENEW =			0x0004, /* notify at renewal time */
	CSSM_TP_CERT_DIR_UPDATE =			0x0008, /* update cert registry entry */
	CSSM_TP_CRL_DISTRIBUTE =			0x0010 /* push CRL to everyone */
};

typedef uint32 CSSM_TP_ACTION;
enum {
	CSSM_TP_ACTION_DEFAULT =			0
};

typedef uint32 CSSM_TP_STOP_ON;
enum {
    CSSM_TP_STOP_ON_POLICY =			0, /* use the pre-defined stopping criteria */
    CSSM_TP_STOP_ON_NONE =				1, /* evaluate all condition whether TRUE or FALSE */
    CSSM_TP_STOP_ON_FIRST_PASS =		2, /* stop evaluation at first TRUE */
    CSSM_TP_STOP_ON_FIRST_FAIL =		3 /* stop evaluation at first FALSE */
};

typedef char *CSSM_TIMESTRING;

/* From DL. */
typedef struct cssm_dl_db_list {
    uint32 NumHandles;
    CSSM_DL_DB_HANDLE_PTR DLDBHandle;
} CSSM_DL_DB_LIST DEPRECATED_IN_MAC_OS_X_VERSION_10_7_AND_LATER, *CSSM_DL_DB_LIST_PTR DEPRECATED_IN_MAC_OS_X_VERSION_10_7_AND_LATER;

/* TP Again. */
typedef struct cssm_tp_callerauth_context {
    CSSM_TP_POLICYINFO Policy;
    CSSM_TIMESTRING VerifyTime;
    CSSM_TP_STOP_ON VerificationAbortOn;
    CSSM_TP_VERIFICATION_RESULTS_CALLBACK CallbackWithVerifiedCert;
    uint32 NumberOfAnchorCerts;
    CSSM_DATA_PTR AnchorCerts;
    CSSM_DL_DB_LIST_PTR DBList;
    CSSM_ACCESS_CREDENTIALS_PTR CallerCredentials;
} CSSM_TP_CALLERAUTH_CONTEXT DEPRECATED_IN_MAC_OS_X_VERSION_10_7_AND_LATER, *CSSM_TP_CALLERAUTH_CONTEXT_PTR DEPRECATED_IN_MAC_OS_X_VERSION_10_7_AND_LATER;

typedef uint32 CSSM_CRL_PARSE_FORMAT, * CSSM_CRL_PARSE_FORMAT_PTR;
enum {
	CSSM_CRL_PARSE_FORMAT_NONE =		0x00,
	CSSM_CRL_PARSE_FORMAT_CUSTOM =		0x01,
	CSSM_CRL_PARSE_FORMAT_SEXPR =		0x02,
	CSSM_CRL_PARSE_FORMAT_COMPLEX =		0x03,
	CSSM_CRL_PARSE_FORMAT_OID_NAMED =	0x04,
	CSSM_CRL_PARSE_FORMAT_TUPLE =		0x05,
	CSSM_CRL_PARSE_FORMAT_MULTIPLE =	0x7FFE,
	CSSM_CRL_PARSE_FORMAT_LAST =		0x7FFF,
	/* Applications wishing to define their own custom parse
	   format should create a uint32 value greater than the
	   CSSM_CL_CUSTOM_CRL_PARSE_FORMAT */
	CSSM_CL_CUSTOM_CRL_PARSE_FORMAT =	0x8000
};

/* From CL. */
typedef uint32 CSSM_CRL_TYPE, *CSSM_CRL_TYPE_PTR;
enum {
    CSSM_CRL_TYPE_UNKNOWN =				0x00,
    CSSM_CRL_TYPE_X_509v1 =				0x01,
    CSSM_CRL_TYPE_X_509v2 =				0x02,
    CSSM_CRL_TYPE_SPKI =				0x03,
    CSSM_CRL_TYPE_MULTIPLE =			0x7FFE
};

typedef uint32 CSSM_CRL_ENCODING, *CSSM_CRL_ENCODING_PTR;
enum {
    CSSM_CRL_ENCODING_UNKNOWN =			0x00,
    CSSM_CRL_ENCODING_CUSTOM =			0x01,
    CSSM_CRL_ENCODING_BER =				0x02,
    CSSM_CRL_ENCODING_DER =				0x03,
    CSSM_CRL_ENCODING_BLOOM =			0x04,
    CSSM_CRL_ENCODING_SEXPR =			0x05,
    CSSM_CRL_ENCODING_MULTIPLE =		0x7FFE
};

typedef struct cssm_encoded_crl {
    CSSM_CRL_TYPE CrlType; /* type of CRL */
    CSSM_CRL_ENCODING CrlEncoding; /* encoding for this packed CRL */
    CSSM_DATA CrlBlob; /* packed CRL */
} CSSM_ENCODED_CRL DEPRECATED_IN_MAC_OS_X_VERSION_10_7_AND_LATER, *CSSM_ENCODED_CRL_PTR DEPRECATED_IN_MAC_OS_X_VERSION_10_7_AND_LATER;

/* TP Again. */
typedef struct cssm_parsed_crl {
    CSSM_CRL_TYPE CrlType; /* CRL type */
    CSSM_CRL_PARSE_FORMAT ParsedCrlFormat;
    /* struct of ParsedCrl */
    void *ParsedCrl; /* parsed CRL (to be typecast) */
} CSSM_PARSED_CRL DEPRECATED_IN_MAC_OS_X_VERSION_10_7_AND_LATER, *CSSM_PARSED_CRL_PTR DEPRECATED_IN_MAC_OS_X_VERSION_10_7_AND_LATER;

typedef struct cssm_crl_pair {
    CSSM_ENCODED_CRL EncodedCrl; /* an encoded CRL blob */
    CSSM_PARSED_CRL ParsedCrl; /* equivalent parsed CRL */
} CSSM_CRL_PAIR DEPRECATED_IN_MAC_OS_X_VERSION_10_7_AND_LATER, *CSSM_CRL_PAIR_PTR DEPRECATED_IN_MAC_OS_X_VERSION_10_7_AND_LATER;

typedef uint32 CSSM_CRLGROUP_TYPE, * CSSM_CRLGROUP_TYPE_PTR;
enum {
	CSSM_CRLGROUP_DATA =			0x00,
	CSSM_CRLGROUP_ENCODED_CRL =		0x01,
	CSSM_CRLGROUP_PARSED_CRL =		0x02,
	CSSM_CRLGROUP_CRL_PAIR =		0x03
};

typedef struct cssm_crlgroup {
    CSSM_CRL_TYPE CrlType;
    CSSM_CRL_ENCODING CrlEncoding;
    uint32 NumberOfCrls;
    union {
        CSSM_DATA_PTR CrlList;					/* CRL blob */
        CSSM_ENCODED_CRL_PTR EncodedCrlList;	/* CRL blob w/ separate type */
        CSSM_PARSED_CRL_PTR ParsedCrlList;		/* bushy, parsed CRL */
        CSSM_CRL_PAIR_PTR PairCrlList;
    } GroupCrlList;
    CSSM_CRLGROUP_TYPE CrlGroupType;
} CSSM_CRLGROUP, *CSSM_CRLGROUP_PTR;

typedef struct cssm_fieldgroup {
    int NumberOfFields;		/* number of fields in the array */
    CSSM_FIELD_PTR Fields;	/* array of fields */
} CSSM_FIELDGROUP DEPRECATED_IN_MAC_OS_X_VERSION_10_7_AND_LATER, *CSSM_FIELDGROUP_PTR DEPRECATED_IN_MAC_OS_X_VERSION_10_7_AND_LATER;

typedef uint32 CSSM_EVIDENCE_FORM;
enum {
	CSSM_EVIDENCE_FORM_UNSPECIFIC =		0x0,
	CSSM_EVIDENCE_FORM_CERT =			0x1,
	CSSM_EVIDENCE_FORM_CRL =			0x2,
	CSSM_EVIDENCE_FORM_CERT_ID =		0x3,
	CSSM_EVIDENCE_FORM_CRL_ID =			0x4,
	CSSM_EVIDENCE_FORM_VERIFIER_TIME =	0x5,
	CSSM_EVIDENCE_FORM_CRL_THISTIME =	0x6,
	CSSM_EVIDENCE_FORM_CRL_NEXTTIME =	0x7,
	CSSM_EVIDENCE_FORM_POLICYINFO =		0x8,
	CSSM_EVIDENCE_FORM_TUPLEGROUP =		0x9
};

typedef struct cssm_evidence {
    CSSM_EVIDENCE_FORM EvidenceForm;
    void *Evidence; /* Evidence content */
} CSSM_EVIDENCE DEPRECATED_IN_MAC_OS_X_VERSION_10_7_AND_LATER, *CSSM_EVIDENCE_PTR DEPRECATED_IN_MAC_OS_X_VERSION_10_7_AND_LATER;

typedef struct cssm_tp_verify_context {
    CSSM_TP_ACTION Action;
    CSSM_DATA ActionData;
    CSSM_CRLGROUP Crls;
    CSSM_TP_CALLERAUTH_CONTEXT_PTR Cred;
} CSSM_TP_VERIFY_CONTEXT DEPRECATED_IN_MAC_OS_X_VERSION_10_7_AND_LATER, *CSSM_TP_VERIFY_CONTEXT_PTR DEPRECATED_IN_MAC_OS_X_VERSION_10_7_AND_LATER;

typedef struct cssm_tp_verify_context_result {
    uint32 NumberOfEvidences;
    CSSM_EVIDENCE_PTR Evidence;
} CSSM_TP_VERIFY_CONTEXT_RESULT DEPRECATED_IN_MAC_OS_X_VERSION_10_7_AND_LATER, *CSSM_TP_VERIFY_CONTEXT_RESULT_PTR DEPRECATED_IN_MAC_OS_X_VERSION_10_7_AND_LATER;

typedef struct cssm_tp_request_set {
    uint32 NumberOfRequests;
    void *Requests;
} CSSM_TP_REQUEST_SET DEPRECATED_IN_MAC_OS_X_VERSION_10_7_AND_LATER, *CSSM_TP_REQUEST_SET_PTR DEPRECATED_IN_MAC_OS_X_VERSION_10_7_AND_LATER;

typedef struct cssm_tp_result_set {
    uint32 NumberOfResults;
    void *Results;
} CSSM_TP_RESULT_SET DEPRECATED_IN_MAC_OS_X_VERSION_10_7_AND_LATER, *CSSM_TP_RESULT_SET_PTR DEPRECATED_IN_MAC_OS_X_VERSION_10_7_AND_LATER;

typedef uint32 CSSM_TP_CONFIRM_STATUS, *CSSM_TP_CONFIRM_STATUS_PTR;
enum {
	CSSM_TP_CONFIRM_STATUS_UNKNOWN =	0x0,
	/* indeterminate */
	CSSM_TP_CONFIRM_ACCEPT =			0x1,
	/* accept results of executing a
	   submit-retrieve function pair */
	CSSM_TP_CONFIRM_REJECT =			0x2
	/* reject results of executing a
	   submit-retrieve function pair */
};

typedef struct cssm_tp_confirm_response {
    uint32 NumberOfResponses;
    CSSM_TP_CONFIRM_STATUS_PTR Responses;
} CSSM_TP_CONFIRM_RESPONSE DEPRECATED_IN_MAC_OS_X_VERSION_10_7_AND_LATER, *CSSM_TP_CONFIRM_RESPONSE_PTR DEPRECATED_IN_MAC_OS_X_VERSION_10_7_AND_LATER;

enum {
	CSSM_ESTIMATED_TIME_UNKNOWN =		-1
};

enum {
	CSSM_ELAPSED_TIME_UNKNOWN =			-1,
	CSSM_ELAPSED_TIME_COMPLETE =		-2
};

typedef struct cssm_tp_certissue_input {
    CSSM_SUBSERVICE_UID CSPSubserviceUid;
    CSSM_CL_HANDLE CLHandle;
    uint32 NumberOfTemplateFields;
    CSSM_FIELD_PTR SubjectCertFields;
    CSSM_TP_SERVICES MoreServiceRequests;
    uint32 NumberOfServiceControls;
    CSSM_FIELD_PTR ServiceControls;
    CSSM_ACCESS_CREDENTIALS_PTR UserCredentials;
} CSSM_TP_CERTISSUE_INPUT DEPRECATED_IN_MAC_OS_X_VERSION_10_7_AND_LATER, *CSSM_TP_CERTISSUE_INPUT_PTR DEPRECATED_IN_MAC_OS_X_VERSION_10_7_AND_LATER;

typedef uint32 CSSM_TP_CERTISSUE_STATUS;
enum {
	CSSM_TP_CERTISSUE_STATUS_UNKNOWN =		0x0,
	/* indeterminate */
	CSSM_TP_CERTISSUE_OK =					0x1,
	/* cert issued as requested */
	CSSM_TP_CERTISSUE_OKWITHCERTMODS =		0x2,
	/* cert issued but cert contents were
	   updated by the issuing authority */
	CSSM_TP_CERTISSUE_OKWITHSERVICEMODS =	0x3,
	/* cert issued but some requested backend
	   services were not performed by the
	   issuing authority */
	CSSM_TP_CERTISSUE_REJECTED =			0x4,
	/* cert was not issued due to some error
	   condition */
	CSSM_TP_CERTISSUE_NOT_AUTHORIZED =		0x5,
	/* cert was not issued, the request was
	   not authorized */
	CSSM_TP_CERTISSUE_WILL_BE_REVOKED =		0x6
	/* cert was issued, but TP has initiated
	   a revocation of the certificate */
};

typedef struct cssm_tp_certissue_output {
    CSSM_TP_CERTISSUE_STATUS IssueStatus;
    CSSM_CERTGROUP_PTR CertGroup;
    CSSM_TP_SERVICES PerformedServiceRequests;
} CSSM_TP_CERTISSUE_OUTPUT DEPRECATED_IN_MAC_OS_X_VERSION_10_7_AND_LATER, *CSSM_TP_CERTISSUE_OUTPUT_PTR DEPRECATED_IN_MAC_OS_X_VERSION_10_7_AND_LATER;

typedef uint32 CSSM_TP_CERTCHANGE_ACTION;
enum {
	CSSM_TP_CERTCHANGE_NONE =			0x0, /* no change */
	CSSM_TP_CERTCHANGE_REVOKE =			0x1, /* Revoke the certificate */
/* This action type indicates a request to revoke a single
   certificate. Notice of the revocation operation remains
   in affect until the certificate itself expires. Revocation
   should be used to permanently remove a certificate from use. */
	CSSM_TP_CERTCHANGE_HOLD =			0x2, /* Hold/suspend the certificate */
/* This action type indicates a request to suspend a
   single certificate. A suspension operation implies
   that the requester intends, at some time in the future,
   to request that the certificate be released from hold,
   making it available for use again. Placing a hold on
   a certificate does not obligate the requester to
   request a release. In practice, a certificate may
   remain on hold until the certificate itself expires.
   Revocation should be used to permanently remove a
   certificate from use. */
	CSSM_TP_CERTCHANGE_RELEASE =		0x3 /* Release the held certificate */
/* This action type indicates a request to release a
   single certificate currently on hold. A release
   operation makes a certificate available for use again.
   Revocation should be used to permanently remove a
   certificate from use. */
};

typedef uint32 CSSM_TP_CERTCHANGE_REASON;
enum {
	CSSM_TP_CERTCHANGE_REASON_UNKNOWN =					0x0,
	/* unspecified */
	CSSM_TP_CERTCHANGE_REASON_KEYCOMPROMISE =			0x1,
	/* Subject key believed to be compromised */
	CSSM_TP_CERTCHANGE_REASON_CACOMPROMISE =			0x2,
	/* CA’s key believed to be compromised */
	CSSM_TP_CERTCHANGE_REASON_CEASEOPERATION =			0x3,
	/* certificate holder ceases operation under
	   the jurisdiction of this certificate */
	CSSM_TP_CERTCHANGE_REASON_AFFILIATIONCHANGE =		0x4,
	/* certificate holder has moved from this
	   jurisdiction */
	CSSM_TP_CERTCHANGE_REASON_SUPERCEDED =				0x5,
	/* certificate holder as issued a new, superceding
	   certificate */
	CSSM_TP_CERTCHANGE_REASON_SUSPECTEDCOMPROMISE =		0x6,
	/* certificate could be compromised */
	CSSM_TP_CERTCHANGE_REASON_HOLDRELEASE =				0x7
	/* certificate holder resumes operation under the
	   jurisdiction of this certificate */
};

typedef struct cssm_tp_certchange_input {
    CSSM_TP_CERTCHANGE_ACTION Action;
    CSSM_TP_CERTCHANGE_REASON Reason;
    CSSM_CL_HANDLE CLHandle;
    CSSM_DATA_PTR Cert;
    CSSM_FIELD_PTR ChangeInfo;
    CSSM_TIMESTRING StartTime;
    CSSM_ACCESS_CREDENTIALS_PTR CallerCredentials;
} CSSM_TP_CERTCHANGE_INPUT DEPRECATED_IN_MAC_OS_X_VERSION_10_7_AND_LATER, *CSSM_TP_CERTCHANGE_INPUT_PTR DEPRECATED_IN_MAC_OS_X_VERSION_10_7_AND_LATER;

typedef uint32 CSSM_TP_CERTCHANGE_STATUS;
enum {
	CSSM_TP_CERTCHANGE_STATUS_UNKNOWN =		0x0,
	/* indeterminate */
	CSSM_TP_CERTCHANGE_OK =					0x1,
	/* cert state was successfully changed
	   beginning at the specified time */
	CSSM_TP_CERTCHANGE_OKWITHNEWTIME =		0x2,
	/* cert state was successfully changed,
	   at a modified effective time */
	CSSM_TP_CERTCHANGE_WRONGCA =			0x3,
	/* cert state was not changed, the
	   selected CA is not authorized to
	   change the cert state */
	CSSM_TP_CERTCHANGE_REJECTED =			0x4,
	/* cert state was not changed due to some
	   error condition */
	CSSM_TP_CERTCHANGE_NOT_AUTHORIZED =		0x5
	/* cert state was not changed, the
	   requester is not authorized to change
	   the cert state */
};

typedef struct cssm_tp_certchange_output {
    CSSM_TP_CERTCHANGE_STATUS ActionStatus;
    CSSM_FIELD RevokeInfo;
} CSSM_TP_CERTCHANGE_OUTPUT DEPRECATED_IN_MAC_OS_X_VERSION_10_7_AND_LATER, *CSSM_TP_CERTCHANGE_OUTPUT_PTR DEPRECATED_IN_MAC_OS_X_VERSION_10_7_AND_LATER;

typedef struct cssm_tp_certverify_input {
    CSSM_CL_HANDLE CLHandle;
    CSSM_DATA_PTR Cert;
    CSSM_TP_VERIFY_CONTEXT_PTR VerifyContext;
} CSSM_TP_CERTVERIFY_INPUT DEPRECATED_IN_MAC_OS_X_VERSION_10_7_AND_LATER, *CSSM_TP_CERTVERIFY_INPUT_PTR DEPRECATED_IN_MAC_OS_X_VERSION_10_7_AND_LATER;

typedef uint32 CSSM_TP_CERTVERIFY_STATUS;
enum {
	CSSM_TP_CERTVERIFY_UNKNOWN =					0x0,
	CSSM_TP_CERTVERIFY_VALID =						0x1,
	CSSM_TP_CERTVERIFY_INVALID =					0x2,
	CSSM_TP_CERTVERIFY_REVOKED =					0x3,
	CSSM_TP_CERTVERIFY_SUSPENDED =					0x4,
	CSSM_TP_CERTVERIFY_EXPIRED =					0x5,
	CSSM_TP_CERTVERIFY_NOT_VALID_YET =				0x6,
	CSSM_TP_CERTVERIFY_INVALID_AUTHORITY =			0x7,
	CSSM_TP_CERTVERIFY_INVALID_SIGNATURE =			0x8,
	CSSM_TP_CERTVERIFY_INVALID_CERT_VALUE =			0x9,
	CSSM_TP_CERTVERIFY_INVALID_CERTGROUP =			0xA,
	CSSM_TP_CERTVERIFY_INVALID_POLICY =				0xB,
	CSSM_TP_CERTVERIFY_INVALID_POLICY_IDS =			0xC,
	CSSM_TP_CERTVERIFY_INVALID_BASIC_CONSTRAINTS =	0xD,
	CSSM_TP_CERTVERIFY_INVALID_CRL_DIST_PT =		0xE,
	CSSM_TP_CERTVERIFY_INVALID_NAME_TREE =			0xF,
	CSSM_TP_CERTVERIFY_UNKNOWN_CRITICAL_EXT =		0x10
};

typedef struct cssm_tp_certverify_output {
    CSSM_TP_CERTVERIFY_STATUS VerifyStatus;
    uint32 NumberOfEvidence;
    CSSM_EVIDENCE_PTR Evidence;
} CSSM_TP_CERTVERIFY_OUTPUT DEPRECATED_IN_MAC_OS_X_VERSION_10_7_AND_LATER, *CSSM_TP_CERTVERIFY_OUTPUT_PTR DEPRECATED_IN_MAC_OS_X_VERSION_10_7_AND_LATER;

typedef struct cssm_tp_certnotarize_input {
    CSSM_CL_HANDLE CLHandle;
    uint32 NumberOfFields;
    CSSM_FIELD_PTR MoreFields;
    CSSM_FIELD_PTR SignScope;
    uint32 ScopeSize;
    CSSM_TP_SERVICES MoreServiceRequests;
    uint32 NumberOfServiceControls;
    CSSM_FIELD_PTR ServiceControls;
    CSSM_ACCESS_CREDENTIALS_PTR UserCredentials;
} CSSM_TP_CERTNOTARIZE_INPUT DEPRECATED_IN_MAC_OS_X_VERSION_10_7_AND_LATER, *CSSM_TP_CERTNOTARIZE_INPUT_PTR DEPRECATED_IN_MAC_OS_X_VERSION_10_7_AND_LATER;

typedef uint32 CSSM_TP_CERTNOTARIZE_STATUS;
enum {
	CSSM_TP_CERTNOTARIZE_STATUS_UNKNOWN =		0x0,
	/* indeterminate */
	CSSM_TP_CERTNOTARIZE_OK =					0x1,
	/* cert fields were added and the result was
	   notarized as requested */
	CSSM_TP_CERTNOTARIZE_OKWITHOUTFIELDS = 		0x2,
	/* non-conflicting cert fields were added,
	   conflicting cert fields were ignored,
	   and the result was notarized as requested */
	CSSM_TP_CERTNOTARIZE_OKWITHSERVICEMODS =	0x3,
	/* cert fields were added and the result was
	   notarized as requested, but some requested
	   backend services were not performed by the
	   notary */
	CSSM_TP_CERTNOTARIZE_REJECTED = 			0x4,
	/* cert was not notarized due to some error
	   condition */
	CSSM_TP_CERTNOTARIZE_NOT_AUTHORIZED =		0x5
	/* cert was not notarized, the request was
	   not authorized */
};

typedef struct cssm_tp_certnotarize_output {
    CSSM_TP_CERTNOTARIZE_STATUS NotarizeStatus;
    CSSM_CERTGROUP_PTR NotarizedCertGroup;
    CSSM_TP_SERVICES PerformedServiceRequests;
} CSSM_TP_CERTNOTARIZE_OUTPUT DEPRECATED_IN_MAC_OS_X_VERSION_10_7_AND_LATER, *CSSM_TP_CERTNOTARIZE_OUTPUT_PTR DEPRECATED_IN_MAC_OS_X_VERSION_10_7_AND_LATER;

typedef struct cssm_tp_certreclaim_input {
    CSSM_CL_HANDLE CLHandle;
    uint32 NumberOfSelectionFields;
    CSSM_FIELD_PTR SelectionFields;
    CSSM_ACCESS_CREDENTIALS_PTR UserCredentials;
} CSSM_TP_CERTRECLAIM_INPUT DEPRECATED_IN_MAC_OS_X_VERSION_10_7_AND_LATER, *CSSM_TP_CERTRECLAIM_INPUT_PTR DEPRECATED_IN_MAC_OS_X_VERSION_10_7_AND_LATER;

typedef uint32 CSSM_TP_CERTRECLAIM_STATUS;
enum {
	CSSM_TP_CERTRECLAIM_STATUS_UNKNOWN = 	0x0,
	/* indeterminate */
	CSSM_TP_CERTRECLAIM_OK =				0x1,
	/* a set of one or more certificates were
	   returned by the CA for local recovery
	   of the associated private key */
	CSSM_TP_CERTRECLAIM_NOMATCH =			0x2,
	/* no certificates owned by the requester
	   were found matching the specified
	   selection fields */
	CSSM_TP_CERTRECLAIM_REJECTED =			0x3,
	/* certificate reclamation failed due
	   to some error condition */
	CSSM_TP_CERTRECLAIM_NOT_AUTHORIZED =	0x4
	/* certificate reclamation was not
	   performed, the request was not
	   authorized */
};

typedef struct cssm_tp_certreclaim_output {
    CSSM_TP_CERTRECLAIM_STATUS ReclaimStatus;
    CSSM_CERTGROUP_PTR ReclaimedCertGroup;
    CSSM_LONG_HANDLE KeyCacheHandle;
} CSSM_TP_CERTRECLAIM_OUTPUT DEPRECATED_IN_MAC_OS_X_VERSION_10_7_AND_LATER, *CSSM_TP_CERTRECLAIM_OUTPUT_PTR DEPRECATED_IN_MAC_OS_X_VERSION_10_7_AND_LATER;

typedef struct cssm_tp_crlissue_input {
    CSSM_CL_HANDLE CLHandle;
    uint32 CrlIdentifier;
    CSSM_TIMESTRING CrlThisTime;
    CSSM_FIELD_PTR PolicyIdentifier;
    CSSM_ACCESS_CREDENTIALS_PTR CallerCredentials;
} CSSM_TP_CRLISSUE_INPUT DEPRECATED_IN_MAC_OS_X_VERSION_10_7_AND_LATER, *CSSM_TP_CRLISSUE_INPUT_PTR DEPRECATED_IN_MAC_OS_X_VERSION_10_7_AND_LATER;

typedef uint32 CSSM_TP_CRLISSUE_STATUS;
enum {
	CSSM_TP_CRLISSUE_STATUS_UNKNOWN =		0x0,
	/* indeterminate */
	CSSM_TP_CRLISSUE_OK =					0x1,
	/* a copy of the most current CRL was
	   issued as requested and the time for
	   issuing the next CRL is also returned */
	CSSM_TP_CRLISSUE_NOT_CURRENT =			0x2,
	/* either no CRL has been issued since
	   the CRL identified in the request, or
	   it is not time to issue an updated CRL.
	   no CRL has been returned, but the time
	   for issuing the next CRL is included
	   in the results */
	CSSM_TP_CRLISSUE_INVALID_DOMAIN =		0x3,
	/* CRL domain was not recognized or was
	   outside the CA jurisdiction, no CRL or
	   time for the next CRL has been
	   returned. */
	CSSM_TP_CRLISSUE_UNKNOWN_IDENTIFIER =	0x4,
	/* unrecognized CRL identifier, no CRL or
	   time for the next CRL has been
	   returned. */
	CSSM_TP_CRLISSUE_REJECTED =				0x5,
	/* CRL was not issued due to some error
	   condition, no CRL or time for the next
	   CRL has been returned. */
	CSSM_TP_CRLISSUE_NOT_AUTHORIZED =		0x6
	/* CRL was not issued, the request was
	   not authorized, no CRL or time for the
	   next CRL has been returned. */
};

typedef struct cssm_tp_crlissue_output {
    CSSM_TP_CRLISSUE_STATUS IssueStatus;
    CSSM_ENCODED_CRL_PTR Crl;
    CSSM_TIMESTRING CrlNextTime;
} CSSM_TP_CRLISSUE_OUTPUT DEPRECATED_IN_MAC_OS_X_VERSION_10_7_AND_LATER, *CSSM_TP_CRLISSUE_OUTPUT_PTR DEPRECATED_IN_MAC_OS_X_VERSION_10_7_AND_LATER;

typedef uint32 CSSM_TP_FORM_TYPE;
enum {
	CSSM_TP_FORM_TYPE_GENERIC =				0x0,
	CSSM_TP_FORM_TYPE_REGISTRATION =		0x1
};

/* Data Types for Certificate Library Services  */

typedef uint32 CSSM_CL_TEMPLATE_TYPE;
enum {
	CSSM_CL_TEMPLATE_INTERMEDIATE_CERT =	1,
	/* for X509 certificates, a fully-formed
	   encoded certificate with empty signature field */
	CSSM_CL_TEMPLATE_PKIX_CERTTEMPLATE =	2
	/* as defined in RFC2511, section 5 CertTemplate */
};

typedef uint32 CSSM_CERT_BUNDLE_TYPE;
enum {
    CSSM_CERT_BUNDLE_UNKNOWN =						0x00,
    CSSM_CERT_BUNDLE_CUSTOM =						0x01,
    CSSM_CERT_BUNDLE_PKCS7_SIGNED_DATA =			0x02,
    CSSM_CERT_BUNDLE_PKCS7_SIGNED_ENVELOPED_DATA =	0x03,
    CSSM_CERT_BUNDLE_PKCS12 =						0x04,
    CSSM_CERT_BUNDLE_PFX =							0x05,
    CSSM_CERT_BUNDLE_SPKI_SEQUENCE =				0x06,
    CSSM_CERT_BUNDLE_PGP_KEYRING =					0x07,
    CSSM_CERT_BUNDLE_LAST =							0x7FFF,
	/* Applications wishing to define their own custom certificate
	   bundle type should define and publicly document a uint32
	   value greater than CSSM_CL_CUSTOM_CERT_BUNDLE_TYPE */
	CSSM_CL_CUSTOM_CERT_BUNDLE_TYPE =				0x8000
};

typedef uint32 CSSM_CERT_BUNDLE_ENCODING;
enum {
    CSSM_CERT_BUNDLE_ENCODING_UNKNOWN =			0x00,
    CSSM_CERT_BUNDLE_ENCODING_CUSTOM =			0x01,
    CSSM_CERT_BUNDLE_ENCODING_BER =				0x02,
    CSSM_CERT_BUNDLE_ENCODING_DER =				0x03,
    CSSM_CERT_BUNDLE_ENCODING_SEXPR =			0x04,
    CSSM_CERT_BUNDLE_ENCODING_PGP =				0x05
};

typedef struct cssm_cert_bundle_header {
    CSSM_CERT_BUNDLE_TYPE BundleType;
    CSSM_CERT_BUNDLE_ENCODING BundleEncoding;
} CSSM_CERT_BUNDLE_HEADER DEPRECATED_IN_MAC_OS_X_VERSION_10_7_AND_LATER, *CSSM_CERT_BUNDLE_HEADER_PTR DEPRECATED_IN_MAC_OS_X_VERSION_10_7_AND_LATER;

typedef struct cssm_cert_bundle {
    CSSM_CERT_BUNDLE_HEADER BundleHeader;
    CSSM_DATA Bundle;
} CSSM_CERT_BUNDLE DEPRECATED_IN_MAC_OS_X_VERSION_10_7_AND_LATER, *CSSM_CERT_BUNDLE_PTR DEPRECATED_IN_MAC_OS_X_VERSION_10_7_AND_LATER;

enum {
	CSSM_FIELDVALUE_COMPLEX_DATA_TYPE =			0xFFFFFFFF
};

/* Data Types for Data Storage Library Services  */

typedef uint32 CSSM_DB_ATTRIBUTE_NAME_FORMAT, *CSSM_DB_ATTRIBUTE_NAME_FORMAT_PTR;
enum {
    CSSM_DB_ATTRIBUTE_NAME_AS_STRING =			0,
    CSSM_DB_ATTRIBUTE_NAME_AS_OID =				1,
	CSSM_DB_ATTRIBUTE_NAME_AS_INTEGER =			2
};

typedef uint32 CSSM_DB_ATTRIBUTE_FORMAT, *CSSM_DB_ATTRIBUTE_FORMAT_PTR;
enum {
    CSSM_DB_ATTRIBUTE_FORMAT_STRING =			0,
    CSSM_DB_ATTRIBUTE_FORMAT_SINT32 =			1,
    CSSM_DB_ATTRIBUTE_FORMAT_UINT32 =			2,
    CSSM_DB_ATTRIBUTE_FORMAT_BIG_NUM =			3,
    CSSM_DB_ATTRIBUTE_FORMAT_REAL =				4,
    CSSM_DB_ATTRIBUTE_FORMAT_TIME_DATE =		5,
    CSSM_DB_ATTRIBUTE_FORMAT_BLOB =				6,
    CSSM_DB_ATTRIBUTE_FORMAT_MULTI_UINT32 =		7,
    CSSM_DB_ATTRIBUTE_FORMAT_COMPLEX =			8
};

typedef struct cssm_db_attribute_info {
    CSSM_DB_ATTRIBUTE_NAME_FORMAT AttributeNameFormat;
    union cssm_db_attribute_label {
        char *AttributeName;		/* e.g., "record label" */
        CSSM_OID AttributeOID;		/* e.g., CSSMOID_RECORDLABEL */
        uint32 AttributeID;			/* e.g., FOUR_CHAR_CODE('recl') */
    } Label;
    CSSM_DB_ATTRIBUTE_FORMAT AttributeFormat;
} CSSM_DB_ATTRIBUTE_INFO, *CSSM_DB_ATTRIBUTE_INFO_PTR;

typedef struct cssm_db_attribute_data {
    CSSM_DB_ATTRIBUTE_INFO Info;
    uint32 NumberOfValues;
    CSSM_DATA_PTR Value;
} CSSM_DB_ATTRIBUTE_DATA DEPRECATED_IN_MAC_OS_X_VERSION_10_7_AND_LATER, *CSSM_DB_ATTRIBUTE_DATA_PTR DEPRECATED_IN_MAC_OS_X_VERSION_10_7_AND_LATER;

typedef uint32 CSSM_DB_RECORDTYPE;
enum {
	/* Schema Management Name Space Range Definition*/
	CSSM_DB_RECORDTYPE_SCHEMA_START =			0x00000000,
	CSSM_DB_RECORDTYPE_SCHEMA_END =				CSSM_DB_RECORDTYPE_SCHEMA_START + 4,
	/* Open Group Application Name Space Range Definition*/
	CSSM_DB_RECORDTYPE_OPEN_GROUP_START =		0x0000000A,
	CSSM_DB_RECORDTYPE_OPEN_GROUP_END =			CSSM_DB_RECORDTYPE_OPEN_GROUP_START + 8,
	/* Industry At Large Application Name Space Range Definition */
	CSSM_DB_RECORDTYPE_APP_DEFINED_START =		0x80000000,
	CSSM_DB_RECORDTYPE_APP_DEFINED_END =		0xffffffff,
	/* Record Types defined in the Schema Management Name Space */
	CSSM_DL_DB_SCHEMA_INFO =					CSSM_DB_RECORDTYPE_SCHEMA_START + 0,
	CSSM_DL_DB_SCHEMA_INDEXES =					CSSM_DB_RECORDTYPE_SCHEMA_START + 1,
	CSSM_DL_DB_SCHEMA_ATTRIBUTES =				CSSM_DB_RECORDTYPE_SCHEMA_START + 2,
	CSSM_DL_DB_SCHEMA_PARSING_MODULE =			CSSM_DB_RECORDTYPE_SCHEMA_START + 3,
	/* Record Types defined in the Open Group Application Name Space */
	CSSM_DL_DB_RECORD_ANY =						CSSM_DB_RECORDTYPE_OPEN_GROUP_START + 0,
	CSSM_DL_DB_RECORD_CERT =					CSSM_DB_RECORDTYPE_OPEN_GROUP_START + 1,
	CSSM_DL_DB_RECORD_CRL =						CSSM_DB_RECORDTYPE_OPEN_GROUP_START + 2,
	CSSM_DL_DB_RECORD_POLICY =					CSSM_DB_RECORDTYPE_OPEN_GROUP_START + 3,
	CSSM_DL_DB_RECORD_GENERIC =					CSSM_DB_RECORDTYPE_OPEN_GROUP_START + 4,
	CSSM_DL_DB_RECORD_PUBLIC_KEY =				CSSM_DB_RECORDTYPE_OPEN_GROUP_START + 5,
	CSSM_DL_DB_RECORD_PRIVATE_KEY =				CSSM_DB_RECORDTYPE_OPEN_GROUP_START + 6,
	CSSM_DL_DB_RECORD_SYMMETRIC_KEY =			CSSM_DB_RECORDTYPE_OPEN_GROUP_START + 7,
	CSSM_DL_DB_RECORD_ALL_KEYS =				CSSM_DB_RECORDTYPE_OPEN_GROUP_START + 8
};

enum {
	CSSM_DB_CERT_USE_TRUSTED =			0x00000001,	/* application-defined as trusted */
	CSSM_DB_CERT_USE_SYSTEM =			0x00000002,	/* the CSSM system cert */
	CSSM_DB_CERT_USE_OWNER =			0x00000004,	/* private key owned by system user*/
	CSSM_DB_CERT_USE_REVOKED =			0x00000008,	/* revoked cert -15913 used w CRL APIs */
	CSSM_DB_CERT_USE_SIGNING =			0x00000010,	/* use cert for signing only */
	CSSM_DB_CERT_USE_PRIVACY =			0x00000020	/* use cert for confidentiality only */
};

typedef struct cssm_db_record_attribute_info {
    CSSM_DB_RECORDTYPE DataRecordType;
    uint32 NumberOfAttributes;
    CSSM_DB_ATTRIBUTE_INFO_PTR AttributeInfo;
} CSSM_DB_RECORD_ATTRIBUTE_INFO DEPRECATED_IN_MAC_OS_X_VERSION_10_7_AND_LATER, *CSSM_DB_RECORD_ATTRIBUTE_INFO_PTR DEPRECATED_IN_MAC_OS_X_VERSION_10_7_AND_LATER;

typedef struct cssm_db_record_attribute_data {
    CSSM_DB_RECORDTYPE DataRecordType;
    uint32 SemanticInformation;
    uint32 NumberOfAttributes;
    CSSM_DB_ATTRIBUTE_DATA_PTR AttributeData;
} CSSM_DB_RECORD_ATTRIBUTE_DATA DEPRECATED_IN_MAC_OS_X_VERSION_10_7_AND_LATER, *CSSM_DB_RECORD_ATTRIBUTE_DATA_PTR DEPRECATED_IN_MAC_OS_X_VERSION_10_7_AND_LATER;

typedef struct cssm_db_parsing_module_info {
    CSSM_DB_RECORDTYPE RecordType;
    CSSM_SUBSERVICE_UID ModuleSubserviceUid;
} CSSM_DB_PARSING_MODULE_INFO DEPRECATED_IN_MAC_OS_X_VERSION_10_7_AND_LATER, *CSSM_DB_PARSING_MODULE_INFO_PTR DEPRECATED_IN_MAC_OS_X_VERSION_10_7_AND_LATER;

typedef uint32 CSSM_DB_INDEX_TYPE;
enum {
    CSSM_DB_INDEX_UNIQUE =				0,
    CSSM_DB_INDEX_NONUNIQUE =			1
};

typedef uint32 CSSM_DB_INDEXED_DATA_LOCATION;
enum {
    CSSM_DB_INDEX_ON_UNKNOWN =			0,
    CSSM_DB_INDEX_ON_ATTRIBUTE =		1,
    CSSM_DB_INDEX_ON_RECORD =			2
};

typedef struct cssm_db_index_info {
    CSSM_DB_INDEX_TYPE IndexType;
    CSSM_DB_INDEXED_DATA_LOCATION IndexedDataLocation;
    CSSM_DB_ATTRIBUTE_INFO Info;
} CSSM_DB_INDEX_INFO DEPRECATED_IN_MAC_OS_X_VERSION_10_7_AND_LATER, *CSSM_DB_INDEX_INFO_PTR DEPRECATED_IN_MAC_OS_X_VERSION_10_7_AND_LATER;

typedef struct cssm_db_unique_record {
    CSSM_DB_INDEX_INFO RecordLocator;
    CSSM_DATA RecordIdentifier;
} CSSM_DB_UNIQUE_RECORD DEPRECATED_IN_MAC_OS_X_VERSION_10_7_AND_LATER, *CSSM_DB_UNIQUE_RECORD_PTR DEPRECATED_IN_MAC_OS_X_VERSION_10_7_AND_LATER;

typedef struct cssm_db_record_index_info {
    CSSM_DB_RECORDTYPE DataRecordType;
    uint32 NumberOfIndexes;
    CSSM_DB_INDEX_INFO_PTR IndexInfo;
} CSSM_DB_RECORD_INDEX_INFO DEPRECATED_IN_MAC_OS_X_VERSION_10_7_AND_LATER, *CSSM_DB_RECORD_INDEX_INFO_PTR DEPRECATED_IN_MAC_OS_X_VERSION_10_7_AND_LATER;

typedef uint32 CSSM_DB_ACCESS_TYPE, *CSSM_DB_ACCESS_TYPE_PTR;
enum {
	CSSM_DB_ACCESS_READ =				0x00001,
	CSSM_DB_ACCESS_WRITE =				0x00002,
	CSSM_DB_ACCESS_PRIVILEGED =			0x00004 /* versus user mode */
};

typedef uint32 CSSM_DB_MODIFY_MODE;
enum {
	CSSM_DB_MODIFY_ATTRIBUTE_NONE =		0,
	CSSM_DB_MODIFY_ATTRIBUTE_ADD =		CSSM_DB_MODIFY_ATTRIBUTE_NONE + 1,
	CSSM_DB_MODIFY_ATTRIBUTE_DELETE =	CSSM_DB_MODIFY_ATTRIBUTE_NONE + 2,
	CSSM_DB_MODIFY_ATTRIBUTE_REPLACE =	CSSM_DB_MODIFY_ATTRIBUTE_NONE + 3
};

typedef struct cssm_dbinfo {
    /* meta information about each record type stored in this
    data store including meta information about record
    attributes and indexes */
    uint32 NumberOfRecordTypes;
    CSSM_DB_PARSING_MODULE_INFO_PTR DefaultParsingModules;
    CSSM_DB_RECORD_ATTRIBUTE_INFO_PTR RecordAttributeNames;
    CSSM_DB_RECORD_INDEX_INFO_PTR RecordIndexes;
    /* access restrictions for opening this data store */
    CSSM_BOOL IsLocal;
    char *AccessPath; /* URL, dir path, etc. */
    void *Reserved;
} CSSM_DBINFO DEPRECATED_IN_MAC_OS_X_VERSION_10_7_AND_LATER, *CSSM_DBINFO_PTR DEPRECATED_IN_MAC_OS_X_VERSION_10_7_AND_LATER;

typedef uint32 CSSM_DB_OPERATOR, *CSSM_DB_OPERATOR_PTR;
enum {
    CSSM_DB_EQUAL =							0,
    CSSM_DB_NOT_EQUAL =						1,
    CSSM_DB_LESS_THAN =						2,
    CSSM_DB_GREATER_THAN =					3,
    CSSM_DB_CONTAINS =						4,
    CSSM_DB_CONTAINS_INITIAL_SUBSTRING =	5,
    CSSM_DB_CONTAINS_FINAL_SUBSTRING =		6
};

typedef uint32 CSSM_DB_CONJUNCTIVE, *CSSM_DB_CONJUNCTIVE_PTR;
enum {
    CSSM_DB_NONE =						0,
    CSSM_DB_AND =						1,
    CSSM_DB_OR =						2
};

typedef struct cssm_selection_predicate {
    CSSM_DB_OPERATOR DbOperator;
    CSSM_DB_ATTRIBUTE_DATA Attribute;
} CSSM_SELECTION_PREDICATE DEPRECATED_IN_MAC_OS_X_VERSION_10_7_AND_LATER, *CSSM_SELECTION_PREDICATE_PTR DEPRECATED_IN_MAC_OS_X_VERSION_10_7_AND_LATER;

enum {
	CSSM_QUERY_TIMELIMIT_NONE =			0
};

enum {
	CSSM_QUERY_SIZELIMIT_NONE =			0
};

typedef struct cssm_query_limits {
    uint32 TimeLimit; /* in seconds */
    uint32 SizeLimit; /* max. number of records to return */
} CSSM_QUERY_LIMITS DEPRECATED_IN_MAC_OS_X_VERSION_10_7_AND_LATER, *CSSM_QUERY_LIMITS_PTR DEPRECATED_IN_MAC_OS_X_VERSION_10_7_AND_LATER;

typedef uint32 CSSM_QUERY_FLAGS;
enum {
	CSSM_QUERY_RETURN_DATA =			0x01
};

typedef struct cssm_query {
    CSSM_DB_RECORDTYPE RecordType;
    CSSM_DB_CONJUNCTIVE Conjunctive;
    uint32 NumSelectionPredicates;
    CSSM_SELECTION_PREDICATE_PTR SelectionPredicate;
    CSSM_QUERY_LIMITS QueryLimits;
    CSSM_QUERY_FLAGS QueryFlags;
} CSSM_QUERY DEPRECATED_IN_MAC_OS_X_VERSION_10_7_AND_LATER, *CSSM_QUERY_PTR DEPRECATED_IN_MAC_OS_X_VERSION_10_7_AND_LATER;

typedef uint32 CSSM_DLTYPE, *CSSM_DLTYPE_PTR;
enum {
    CSSM_DL_UNKNOWN =					0,
    CSSM_DL_CUSTOM =					1,
    CSSM_DL_LDAP =						2,
    CSSM_DL_ODBC =						3,
    CSSM_DL_PKCS11 =					4,
    CSSM_DL_FFS =						5, /* flat file system */
    CSSM_DL_MEMORY =					6,
    CSSM_DL_REMOTEDIR =					7
};

typedef void *CSSM_DL_CUSTOM_ATTRIBUTES;
typedef void *CSSM_DL_LDAP_ATTRIBUTES;
typedef void *CSSM_DL_ODBC_ATTRIBUTES;
typedef void *CSSM_DL_FFS_ATTRIBUTES;

typedef struct cssm_dl_pkcs11_attributes {
    uint32 DeviceAccessFlags;
} *CSSM_DL_PKCS11_ATTRIBUTE, *CSSM_DL_PKCS11_ATTRIBUTE_PTR;

enum {
	CSSM_DB_DATASTORES_UNKNOWN =		0xFFFFFFFF
};

typedef struct cssm_name_list {
    uint32 NumStrings;
    char **String;
} CSSM_NAME_LIST DEPRECATED_IN_MAC_OS_X_VERSION_10_7_AND_LATER, *CSSM_NAME_LIST_PTR DEPRECATED_IN_MAC_OS_X_VERSION_10_7_AND_LATER;

typedef uint32 CSSM_DB_RETRIEVAL_MODES;
enum {
	CSSM_DB_TRANSACTIONAL_MODE =		0,
	CSSM_DB_FILESYSTEMSCAN_MODE =		1
};

typedef struct cssm_db_schema_attribute_info {
    uint32 AttributeId;
    char *AttributeName;
    CSSM_OID AttributeNameID;
    CSSM_DB_ATTRIBUTE_FORMAT DataType;
} CSSM_DB_SCHEMA_ATTRIBUTE_INFO DEPRECATED_IN_MAC_OS_X_VERSION_10_7_AND_LATER, *CSSM_DB_SCHEMA_ATTRIBUTE_INFO_PTR DEPRECATED_IN_MAC_OS_X_VERSION_10_7_AND_LATER;

typedef struct cssm_db_schema_index_info {
    uint32 AttributeId;
    uint32 IndexId;
    CSSM_DB_INDEX_TYPE IndexType;
    CSSM_DB_INDEXED_DATA_LOCATION IndexedDataLocation;
} CSSM_DB_SCHEMA_INDEX_INFO DEPRECATED_IN_MAC_OS_X_VERSION_10_7_AND_LATER, *CSSM_DB_SCHEMA_INDEX_INFO_PTR DEPRECATED_IN_MAC_OS_X_VERSION_10_7_AND_LATER;

#pragma clang diagnostic pop

#ifdef __cplusplus
}
#endif

#endif /* _CSSMTYPE_H_ */
