oidsattr.c   [plain text]


/*
 * Copyright (c) 2000-2001,2003-2004,2008,2010 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@
 */


/*
 * oidsattr.c - Cert/CRL related OIDs.
 */

#include <Security/oidsbase.h>
#include <Security/oidsattr.h>


/* 
 * Directory name component identifiers.
 */
static const uint8_t
	OID_ObjectClass[]           		= { OID_ATTR_TYPE, 0 },
	OID_AliasedEntryName[]      		= { OID_ATTR_TYPE, 1 },
	OID_KnowledgeInformation[]  		= { OID_ATTR_TYPE, 2 },
	OID_CommonName[]            		= { OID_ATTR_TYPE, 3 },
	OID_Surname[]              			= { OID_ATTR_TYPE, 4 },
	OID_SerialNumber[]         			= { OID_ATTR_TYPE, 5 },
	OID_CountryName[]           		= { OID_ATTR_TYPE, 6 },
	OID_LocalityName[]          		= { OID_ATTR_TYPE, 7 },
	OID_StateProvinceName[]     		= { OID_ATTR_TYPE, 8 },
	OID_CollectiveStateProvinceName[] 	= { OID_ATTR_TYPE, 8, 1 },
	OID_StreetAddress[]         		= { OID_ATTR_TYPE, 9 },
	OID_CollectiveStreetAddress[]     	= { OID_ATTR_TYPE, 9, 1 },
	OID_OrganizationName[]      		= { OID_ATTR_TYPE, 10 },
	OID_CollectiveOrganizationName[]  	= { OID_ATTR_TYPE, 10, 1 },
	OID_OrganizationalUnitName[]		= { OID_ATTR_TYPE, 11 },
	OID_CollectiveOrganizationalUnitName[]
										= { OID_ATTR_TYPE, 11, 1 },
	OID_Title[]                 		= { OID_ATTR_TYPE, 12 },
	OID_Description[]           		= { OID_ATTR_TYPE, 13 },
	OID_SearchGuide[]           		= { OID_ATTR_TYPE, 14 },
	OID_BusinessCategory[]      		= { OID_ATTR_TYPE, 15 },
	OID_PostalAddress[]         		= { OID_ATTR_TYPE, 16 },
	OID_CollectivePostalAddress[]     	= { OID_ATTR_TYPE, 16, 1 },
	OID_PostalCode[]            		= { OID_ATTR_TYPE, 17 },
	OID_CollectivePostalCode[]  		= { OID_ATTR_TYPE, 17, 1 },
	OID_PostOfficeBox[]         		= { OID_ATTR_TYPE, 18 },
	OID_CollectivePostOfficeBox[]     	= { OID_ATTR_TYPE, 18, 1 },
	OID_PhysicalDeliveryOfficeName[]  	= { OID_ATTR_TYPE, 19 },
	OID_CollectivePhysicalDeliveryOfficeName[]
										= { OID_ATTR_TYPE, 19, 1 },
	OID_TelephoneNumber[]       		= { OID_ATTR_TYPE, 20 },
	OID_CollectiveTelephoneNumber[]  	= { OID_ATTR_TYPE, 20, 1 },
	OID_TelexNumber[]           		= { OID_ATTR_TYPE, 21 },
	OID_CollectiveTelexNumber[] 		= { OID_ATTR_TYPE, 21, 1 },
	OID_TelexTerminalIdentifier[]     	= { OID_ATTR_TYPE, 22 },
	OID_CollectiveTelexTerminalIdentifier[] 
										= { OID_ATTR_TYPE, 22, 1 },
	OID_FacsimileTelephoneNumber[]    	= { OID_ATTR_TYPE, 23 },
	OID_CollectiveFacsimileTelephoneNumber[]
										= { OID_ATTR_TYPE, 23, 1 },
	OID_X_121Address[]          		= { OID_ATTR_TYPE, 24 },
	OID_InternationalISDNNumber[]     	= { OID_ATTR_TYPE, 25 },
	OID_CollectiveInternationalISDNNumber[] 
										= { OID_ATTR_TYPE, 25, 1 },
	OID_RegisteredAddress[]     		= { OID_ATTR_TYPE, 26 },
	OID_DestinationIndicator[]  		= { OID_ATTR_TYPE, 27 },
	OID_PreferredDeliveryMethod[] 		= { OID_ATTR_TYPE, 28 },
	OID_PresentationAddress[]   		= { OID_ATTR_TYPE, 29 },
	OID_SupportedApplicationContext[] 	= { OID_ATTR_TYPE, 30 },
	OID_Member[]                		= { OID_ATTR_TYPE, 31 },
	OID_Owner[]                			= { OID_ATTR_TYPE, 32 },
	OID_RoleOccupant[]          		= { OID_ATTR_TYPE, 33 },
	OID_SeeAlso[]               		= { OID_ATTR_TYPE, 34 },
	OID_UserPassword[]          		= { OID_ATTR_TYPE, 35 },
	OID_UserCertificate[]       		= { OID_ATTR_TYPE, 36 },
	OID_CACertificate[]         		= { OID_ATTR_TYPE, 37 },
	OID_AuthorityRevocationList[] 		= { OID_ATTR_TYPE, 38 },
	OID_CertificateRevocationList[] 	= { OID_ATTR_TYPE, 39 },
	OID_CrossCertificatePair[]  		= { OID_ATTR_TYPE, 40 },
	OID_Name[]                  		= { OID_ATTR_TYPE, 41 },
	OID_GivenName[]             		= { OID_ATTR_TYPE, 42 },
	OID_Initials[]              		= { OID_ATTR_TYPE, 43 },
	OID_GenerationQualifier[]   		= { OID_ATTR_TYPE, 44 },
	OID_UniqueIdentifier[]     			= { OID_ATTR_TYPE, 45 },
	OID_DNQualifier[]           		= { OID_ATTR_TYPE, 46 },
	OID_EnhancedSearchGuide[]   		= { OID_ATTR_TYPE, 47 },
	OID_ProtocolInformation[]   		= { OID_ATTR_TYPE, 48 },
	OID_DistinguishedName[]     		= { OID_ATTR_TYPE, 49 },
	OID_UniqueMember[]          		= { OID_ATTR_TYPE, 50 },
	OID_HouseIdentifier[]       		= { OID_ATTR_TYPE, 51 }
;

const SecAsn1Oid
CSSMOID_ObjectClass        		= { OID_ATTR_TYPE_LENGTH+1, (uint8_t *)OID_ObjectClass},
CSSMOID_AliasedEntryName    	= { OID_ATTR_TYPE_LENGTH+1, (uint8_t *)OID_AliasedEntryName},
CSSMOID_KnowledgeInformation	= { OID_ATTR_TYPE_LENGTH+1, (uint8_t *)OID_KnowledgeInformation},
CSSMOID_CommonName          	= { OID_ATTR_TYPE_LENGTH+1, (uint8_t *)OID_CommonName},
CSSMOID_Surname             	= { OID_ATTR_TYPE_LENGTH+1, (uint8_t *)OID_Surname},
CSSMOID_SerialNumber       		= { OID_ATTR_TYPE_LENGTH+1, (uint8_t *)OID_SerialNumber},
CSSMOID_CountryName         	= { OID_ATTR_TYPE_LENGTH+1, (uint8_t *)OID_CountryName},
CSSMOID_LocalityName        	= { OID_ATTR_TYPE_LENGTH+1, (uint8_t *)OID_LocalityName},
CSSMOID_StateProvinceName   	= { OID_ATTR_TYPE_LENGTH+1, (uint8_t *)OID_StateProvinceName},
CSSMOID_CollectiveStateProvinceName
								= { OID_ATTR_TYPE_LENGTH+2, (uint8_t *)OID_CollectiveStateProvinceName},
CSSMOID_StreetAddress       	= { OID_ATTR_TYPE_LENGTH+1, (uint8_t *)OID_StreetAddress},
CSSMOID_CollectiveStreetAddress = { OID_ATTR_TYPE_LENGTH+2, (uint8_t *)OID_CollectiveStreetAddress},
CSSMOID_OrganizationName    	= { OID_ATTR_TYPE_LENGTH+1, (uint8_t *)OID_OrganizationName},
CSSMOID_CollectiveOrganizationName  
								= { OID_ATTR_TYPE_LENGTH+2, (uint8_t *)OID_CollectiveOrganizationName},
CSSMOID_OrganizationalUnitName  = { OID_ATTR_TYPE_LENGTH+1, (uint8_t *)OID_OrganizationalUnitName},
CSSMOID_CollectiveOrganizationalUnitName
								= { OID_ATTR_TYPE_LENGTH+2, (uint8_t *)OID_CollectiveOrganizationalUnitName},
CSSMOID_Title              		= { OID_ATTR_TYPE_LENGTH+1, (uint8_t *)OID_Title},
CSSMOID_Description        		= { OID_ATTR_TYPE_LENGTH+1, (uint8_t *)OID_Description},
CSSMOID_SearchGuide         	= { OID_ATTR_TYPE_LENGTH+1, (uint8_t *)OID_SearchGuide},
CSSMOID_BusinessCategory    	= { OID_ATTR_TYPE_LENGTH+1, (uint8_t *)OID_BusinessCategory},
CSSMOID_PostalAddress       	= { OID_ATTR_TYPE_LENGTH+1, (uint8_t *)OID_PostalAddress},
CSSMOID_CollectivePostalAddress = { OID_ATTR_TYPE_LENGTH+2, (uint8_t *)OID_CollectivePostalAddress},
CSSMOID_PostalCode          	= { OID_ATTR_TYPE_LENGTH+1, (uint8_t *)OID_PostalCode},
CSSMOID_CollectivePostalCode	= { OID_ATTR_TYPE_LENGTH+2, (uint8_t *)OID_CollectivePostalCode},
CSSMOID_PostOfficeBox       	= { OID_ATTR_TYPE_LENGTH+1, (uint8_t *)OID_PostOfficeBox},
CSSMOID_CollectivePostOfficeBox = { OID_ATTR_TYPE_LENGTH+2, (uint8_t *)OID_CollectivePostOfficeBox},
CSSMOID_PhysicalDeliveryOfficeName  
								= { OID_ATTR_TYPE_LENGTH+1, (uint8_t *)OID_PhysicalDeliveryOfficeName},
CSSMOID_CollectivePhysicalDeliveryOfficeName 
								= { OID_ATTR_TYPE_LENGTH+2, (uint8_t *)OID_CollectivePhysicalDeliveryOfficeName},
CSSMOID_TelephoneNumber     	= { OID_ATTR_TYPE_LENGTH+1, (uint8_t *)OID_TelephoneNumber},
CSSMOID_CollectiveTelephoneNumber   
								= { OID_ATTR_TYPE_LENGTH+2, (uint8_t *)OID_CollectiveTelephoneNumber},
CSSMOID_TelexNumber         	= { OID_ATTR_TYPE_LENGTH+1, (uint8_t *)OID_TelexNumber},
CSSMOID_CollectiveTelexNumber   = { OID_ATTR_TYPE_LENGTH+2, (uint8_t *)OID_CollectiveTelexNumber},
CSSMOID_TelexTerminalIdentifier = { OID_ATTR_TYPE_LENGTH+1, (uint8_t *)OID_TelexTerminalIdentifier},
CSSMOID_CollectiveTelexTerminalIdentifier 
								= { OID_ATTR_TYPE_LENGTH+2, (uint8_t *)OID_CollectiveTelexTerminalIdentifier},
CSSMOID_FacsimileTelephoneNumber= { OID_ATTR_TYPE_LENGTH+1, (uint8_t *)OID_FacsimileTelephoneNumber},
CSSMOID_CollectiveFacsimileTelephoneNumber
								= { OID_ATTR_TYPE_LENGTH+2, (uint8_t *)OID_CollectiveFacsimileTelephoneNumber},
CSSMOID_X_121Address        	= { OID_ATTR_TYPE_LENGTH+1, (uint8_t *)OID_X_121Address},
CSSMOID_InternationalISDNNumber = { OID_ATTR_TYPE_LENGTH+1, (uint8_t *)OID_InternationalISDNNumber},
CSSMOID_CollectiveInternationalISDNNumber 
								= { OID_ATTR_TYPE_LENGTH+2, (uint8_t *)OID_CollectiveInternationalISDNNumber},
CSSMOID_RegisteredAddress   	= { OID_ATTR_TYPE_LENGTH+1, (uint8_t *)OID_RegisteredAddress},
CSSMOID_DestinationIndicator	= { OID_ATTR_TYPE_LENGTH+1, (uint8_t *)OID_DestinationIndicator},
CSSMOID_PreferredDeliveryMethod = { OID_ATTR_TYPE_LENGTH+1, (uint8_t *)OID_PreferredDeliveryMethod},
CSSMOID_PresentationAddress 	= { OID_ATTR_TYPE_LENGTH+1, (uint8_t *)OID_PresentationAddress},
CSSMOID_SupportedApplicationContext 
								= { OID_ATTR_TYPE_LENGTH+1, (uint8_t *)OID_SupportedApplicationContext},
CSSMOID_Member              	= { OID_ATTR_TYPE_LENGTH+1, (uint8_t *)OID_Member},
CSSMOID_Owner               	= { OID_ATTR_TYPE_LENGTH+1, (uint8_t *)OID_Owner},
CSSMOID_RoleOccupant        	= { OID_ATTR_TYPE_LENGTH+1, (uint8_t *)OID_RoleOccupant},
CSSMOID_SeeAlso             	= { OID_ATTR_TYPE_LENGTH+1, (uint8_t *)OID_SeeAlso},
CSSMOID_UserPassword        	= { OID_ATTR_TYPE_LENGTH+1, (uint8_t *)OID_UserPassword},
CSSMOID_UserCertificate     	= { OID_ATTR_TYPE_LENGTH+1, (uint8_t *)OID_UserCertificate},
CSSMOID_CACertificate       	= { OID_ATTR_TYPE_LENGTH+1, (uint8_t *)OID_CACertificate},
CSSMOID_AuthorityRevocationList = { OID_ATTR_TYPE_LENGTH+1, (uint8_t *)OID_AuthorityRevocationList},
CSSMOID_CertificateRevocationList
								= { OID_ATTR_TYPE_LENGTH+1, (uint8_t *)OID_CertificateRevocationList},
CSSMOID_CrossCertificatePair	= { OID_ATTR_TYPE_LENGTH+1, (uint8_t *)OID_CrossCertificatePair},
CSSMOID_Name                	= { OID_ATTR_TYPE_LENGTH+1, (uint8_t *)OID_Name},
CSSMOID_GivenName           	= { OID_ATTR_TYPE_LENGTH+1, (uint8_t *)OID_GivenName},
CSSMOID_Initials            	= { OID_ATTR_TYPE_LENGTH+1, (uint8_t *)OID_Initials},
CSSMOID_GenerationQualifier 	= { OID_ATTR_TYPE_LENGTH+1, (uint8_t *)OID_GenerationQualifier},
CSSMOID_UniqueIdentifier    	= { OID_ATTR_TYPE_LENGTH+1, (uint8_t *)OID_UniqueIdentifier},
CSSMOID_DNQualifier         	= { OID_ATTR_TYPE_LENGTH+1, (uint8_t *)OID_DNQualifier},
CSSMOID_EnhancedSearchGuide 	= { OID_ATTR_TYPE_LENGTH+1, (uint8_t *)OID_EnhancedSearchGuide},
CSSMOID_ProtocolInformation 	= { OID_ATTR_TYPE_LENGTH+1, (uint8_t *)OID_ProtocolInformation},
CSSMOID_DistinguishedName   	= { OID_ATTR_TYPE_LENGTH+1, (uint8_t *)OID_DistinguishedName},
CSSMOID_UniqueMember        	= { OID_ATTR_TYPE_LENGTH+1, (uint8_t *)OID_UniqueMember},
CSSMOID_HouseIdentifier     	= { OID_ATTR_TYPE_LENGTH+1, (uint8_t *)OID_HouseIdentifier}
;


/* From PKCS 9 */
static const uint8_t
	OID_EmailAddress[]          = { OID_PKCS_9, 1 },
	OID_UnstructuredName[]      = { OID_PKCS_9, 2 },
	OID_ContentType[]           = { OID_PKCS_9, 3 },
	OID_MessageDigest[]         = { OID_PKCS_9, 4 },
	OID_SigningTime[]           = { OID_PKCS_9, 5 },
	OID_CounterSignature[]      = { OID_PKCS_9, 6 },
	OID_ChallengePassword[]     = { OID_PKCS_9, 7 },
	OID_UnstructuredAddress[]   = { OID_PKCS_9, 8 },
	OID_ExtendedCertificateAttributes[] = { OID_PKCS_9, 9 }
;

const SecAsn1Oid
CSSMOID_EmailAddress        = {OID_PKCS_9_LENGTH+1, (uint8_t *)OID_EmailAddress},
CSSMOID_UnstructuredName    = {OID_PKCS_9_LENGTH+1, (uint8_t *)OID_UnstructuredName},
CSSMOID_ContentType         = {OID_PKCS_9_LENGTH+1, (uint8_t *)OID_ContentType},
CSSMOID_MessageDigest       = {OID_PKCS_9_LENGTH+1, (uint8_t *)OID_MessageDigest},
CSSMOID_SigningTime         = {OID_PKCS_9_LENGTH+1, (uint8_t *)OID_SigningTime},
CSSMOID_CounterSignature    = {OID_PKCS_9_LENGTH+1, (uint8_t *)OID_CounterSignature},
CSSMOID_ChallengePassword   = {OID_PKCS_9_LENGTH+1, (uint8_t *)OID_ChallengePassword},
CSSMOID_UnstructuredAddress = {OID_PKCS_9_LENGTH+1, (uint8_t *)OID_UnstructuredAddress},
CSSMOID_ExtendedCertificateAttributes = {OID_PKCS_9_LENGTH+1, (uint8_t *)OID_ExtendedCertificateAttributes};

/* PKIX */
static const uint8_t
	OID_QT_CPS[]			= { OID_QT, 1 },
	OID_QT_UNOTICE[]		= { OID_QT, 2 },
	_OID_AD_OCSP[]			= { OID_AD_OCSP },
	OID_AD_CA_ISSUERS[]		= { OID_AD, 2 },
	OID_AD_TIME_STAMPING[]  = { OID_AD, 3 },
	OID_AD_CA_REPOSITORY[]	= { OID_AD, 5 },
	OID_PDA_DATE_OF_BIRTH[]		= { OID_PDA, 1 },
	OID_PDA_PLACE_OF_BIRTH[]	= { OID_PDA, 2 },
	OID_PDA_GENDER[]			= { OID_PDA, 3 },
	OID_PDA_COUNTRY_CITIZEN[]	= { OID_PDA, 4 },
	OID_PDA_COUNTRY_RESIDENCE[]	= { OID_PDA, 5 },
	OID_QCS_SYNTAX_V1[]			= { OID_QCS, 1 },
	OID_QCS_SYNTAX_V2[]			= { OID_QCS, 2 }
; 

/* ETSI */
static const uint8_t
	OID_ETSI_QCS_QC_COMPLICANCE[]	= { OID_ETSI_QCS, 1 },
	OID_ETSI_QCS_QC_LIMIT_VALUE[]	= { OID_ETSI_QCS, 2 },
	OID_ETSI_QCS_QC_RETENTION[]		= { OID_ETSI_QCS, 3 },
	OID_ETSI_QCS_QC_SSCD[]			= { OID_ETSI_QCS, 4 }
;

const SecAsn1Oid
CSSMOID_QT_CPS				= {OID_QT_LENGTH+1, (uint8_t *)OID_QT_CPS},
CSSMOID_QT_UNOTICE			= {OID_QT_LENGTH+1, (uint8_t *)OID_QT_UNOTICE},
CSSMOID_AD_OCSP				= {OID_AD_LENGTH+1, (uint8_t *)_OID_AD_OCSP},
CSSMOID_AD_CA_ISSUERS		= {OID_AD_LENGTH+1, (uint8_t *)OID_AD_CA_ISSUERS},
CSSMOID_AD_TIME_STAMPING	= {OID_AD_LENGTH+1, (uint8_t *)OID_AD_TIME_STAMPING},
CSSMOID_AD_CA_REPOSITORY	= {OID_AD_LENGTH+1, (uint8_t *)OID_AD_CA_REPOSITORY},
CSSMOID_PDA_DATE_OF_BIRTH	= {OID_PDA_LENGTH+1, (uint8_t *)OID_PDA_DATE_OF_BIRTH},
CSSMOID_PDA_PLACE_OF_BIRTH	= {OID_PDA_LENGTH+1, (uint8_t *)OID_PDA_PLACE_OF_BIRTH},
CSSMOID_PDA_GENDER			= {OID_PDA_LENGTH+1, (uint8_t *)OID_PDA_GENDER},
CSSMOID_PDA_COUNTRY_CITIZEN	= {OID_PDA_LENGTH+1, (uint8_t *)OID_PDA_COUNTRY_CITIZEN},
CSSMOID_PDA_COUNTRY_RESIDENCE = {OID_PDA_LENGTH+1, (uint8_t *)OID_PDA_COUNTRY_RESIDENCE},
CSSMOID_OID_QCS_SYNTAX_V1 	= {OID_QCS_LENGTH+1, (uint8_t *)OID_QCS_SYNTAX_V1},
CSSMOID_OID_QCS_SYNTAX_V2 	= {OID_QCS_LENGTH+1, (uint8_t *)OID_QCS_SYNTAX_V2}
;

const SecAsn1Oid
CSSMOID_ETSI_QCS_QC_COMPLIANCE 	= {OID_ETSI_QCS_LENGTH + 1,
								  (uint8_t *)OID_ETSI_QCS_QC_COMPLICANCE},
CSSMOID_ETSI_QCS_QC_LIMIT_VALUE = {OID_ETSI_QCS_LENGTH + 1,
								  (uint8_t *)OID_ETSI_QCS_QC_LIMIT_VALUE},
CSSMOID_ETSI_QCS_QC_RETENTION 	= {OID_ETSI_QCS_LENGTH + 1,
								  (uint8_t *)OID_ETSI_QCS_QC_COMPLICANCE},
CSSMOID_ETSI_QCS_QC_SSCD		= {OID_ETSI_QCS_LENGTH + 1,
								  (uint8_t *)OID_ETSI_QCS_QC_COMPLICANCE}
;

#define OID_PKCS12_BagTypes			OID_PKCS_12,10,1
#define OID_PKCS12_BagTypesLength	OID_PKCS_12_LENGTH+2

#define ID_PKCS9_CertTypes			OID_PKCS_9, 22
#define OID_PKCS9_CertTypesLength	OID_PKCS_9_LENGTH+1
#define ID_PKCS9_CrlTypes			OID_PKCS_9, 23
#define OID_PKCS9_CrlTypesLength	OID_PKCS_9_LENGTH+1

static const uint8_t
	OID_PKCS7_Data[] = 						{ OID_PKCS_7, 1},	
	OID_PKCS7_SignedData[] = 				{ OID_PKCS_7, 2},	
	OID_PKCS7_EnvelopedData[] = 			{ OID_PKCS_7, 3},	
	OID_PKCS7_SignedAndEnvelopedData[] = 	{ OID_PKCS_7, 4},
	OID_PKCS7_DigestedData[] =		 		{ OID_PKCS_7, 5},
	OID_PKCS7_EncryptedData[] = 			{ OID_PKCS_7, 6},
	OID_PKCS7_DataWithAttributes[] = 		{ OID_PKCS_7, 7},
	OID_PKCS7_EncryptedPrivateKeyInfo[] = 	{ OID_PKCS_7, 8},
	
	OID_PKCS9_FriendlyName[] =				{ OID_PKCS_9, 20},
	OID_PKCS9_LocalKeyId[] =				{ OID_PKCS_9, 21},
	OID_PKCS9_CertTypes[] =					{ ID_PKCS9_CertTypes },
	OID_PKCS9_CrlTypes[] =					{ ID_PKCS9_CrlTypes },
	OID_PKCS9_X509Certificate[] =			{ ID_PKCS9_CertTypes, 1 },
	OID_PKCS9_SdsiCertificate[] =			{ ID_PKCS9_CertTypes, 2 },
	OID_PKCS9_X509Crl[] =					{ ID_PKCS9_CrlTypes, 1 },
	
	OID_PKCS12_keyBag[] =					{ OID_PKCS12_BagTypes, 1},
	OID_PKCS12_shroundedKeyBag[] =			{ OID_PKCS12_BagTypes, 2},
	OID_PKCS12_certBag[] =					{ OID_PKCS12_BagTypes, 3},
	OID_PKCS12_crlBag[] =					{ OID_PKCS12_BagTypes, 4},
	OID_PKCS12_secretBag[] =				{ OID_PKCS12_BagTypes, 5},
	OID_PKCS12_safeContentsBag[] =			{ OID_PKCS12_BagTypes, 6}
;

/*
    -- ContentTypes
    {iso(1) member-body(2) us(840) rsadsi(113549) pkcs(1) pkcs-9(9) smime(16) ct(1)}
    
    -- Attributes
    {iso(1) member-body(2) us(840) rsadsi(113549) pkcs(1) pkcs-9(9) smime(16) aa(2)}
    
    -- eContentType for a time-stamp token

    id-ct-TSTInfo  OBJECT IDENTIFIER ::= { iso(1) member-body(2)
    us(840) rsadsi(113549) pkcs(1) pkcs-9(9) smime(16) ct(1) 4}

    id-aa-timeStampToken OBJECT IDENTIFIER ::= { iso(1) member-body(2)
    us(840) rsadsi(113549) pkcs(1) pkcs-9(9) smime(16) aa(2) 14 }
*/

#define ID_PKCS9_SMIME          OID_PKCS_9, 16
#define OID_PKCS9_SMIMELength   OID_PKCS_9_LENGTH+1
#define ID_PKCS9_CONTENT_TYPES  ID_PKCS9_SMIME, 1
#define OID_PKCS9_CT_Length     OID_PKCS9_SMIMELength+1
#define ID_PKCS9_ATTRIBUTES     ID_PKCS9_SMIME, 2
#define OID_PKCS9_Attrs_Length  OID_PKCS9_SMIMELength+1

static const uint8_t
	OID_ID_CT_TSTInfo[]       = { ID_PKCS9_CONTENT_TYPES, 4 },
	OID_TimeStampToken[]      = { ID_PKCS9_ATTRIBUTES, 14 };
    
const SecAsn1Oid 
CSSMOID_PKCS9_Id_Ct_TSTInfo = {OID_PKCS9_CT_Length + 1,
					  (uint8_t *)OID_ID_CT_TSTInfo },
CSSMOID_PKCS9_TimeStampToken = {OID_PKCS9_Attrs_Length + 1,
					  (uint8_t *)OID_TimeStampToken };


const SecAsn1Oid 
CSSMOID_PKCS7_Data = {OID_PKCS_7_LENGTH + 1,
					  (uint8_t *)OID_PKCS7_Data },
CSSMOID_PKCS7_SignedData = {OID_PKCS_7_LENGTH + 1,
					  (uint8_t *)OID_PKCS7_SignedData },
CSSMOID_PKCS7_EnvelopedData = {OID_PKCS_7_LENGTH + 1,
					  (uint8_t *)OID_PKCS7_EnvelopedData },
CSSMOID_PKCS7_SignedAndEnvelopedData = {OID_PKCS_7_LENGTH + 1,
					  (uint8_t *)OID_PKCS7_SignedAndEnvelopedData },
CSSMOID_PKCS7_DigestedData = {OID_PKCS_7_LENGTH + 1,
					  (uint8_t *)OID_PKCS7_DigestedData },
CSSMOID_PKCS7_EncryptedData = {OID_PKCS_7_LENGTH + 1,
					  (uint8_t *)OID_PKCS7_EncryptedData },
CSSMOID_PKCS7_DataWithAttributes = {OID_PKCS_7_LENGTH + 1,
					  (uint8_t *)OID_PKCS7_DataWithAttributes },
CSSMOID_PKCS7_EncryptedPrivateKeyInfo = {OID_PKCS_7_LENGTH + 1,
					  (uint8_t *)OID_PKCS7_EncryptedPrivateKeyInfo },
					  
CSSMOID_PKCS9_FriendlyName = {OID_PKCS_9_LENGTH + 1,
						(uint8_t *)OID_PKCS9_FriendlyName },
CSSMOID_PKCS9_LocalKeyId = {OID_PKCS_9_LENGTH + 1,
						(uint8_t *)OID_PKCS9_LocalKeyId },
CSSMOID_PKCS9_CertTypes = {OID_PKCS_9_LENGTH + 1,
						(uint8_t *)OID_PKCS9_CertTypes },
CSSMOID_PKCS9_CrlTypes = {OID_PKCS_9_LENGTH + 1,
						(uint8_t *)OID_PKCS9_CrlTypes },
CSSMOID_PKCS9_X509Certificate = {OID_PKCS9_CertTypesLength + 1,
						(uint8_t *)OID_PKCS9_X509Certificate },
CSSMOID_PKCS9_SdsiCertificate = {OID_PKCS9_CertTypesLength + 1,
						(uint8_t *)OID_PKCS9_SdsiCertificate },
CSSMOID_PKCS9_X509Crl = {OID_PKCS9_CrlTypesLength + 1,
						(uint8_t *)OID_PKCS9_X509Crl },
	

CSSMOID_PKCS12_keyBag = {OID_PKCS12_BagTypesLength + 1,
					(uint8_t *)OID_PKCS12_keyBag },
CSSMOID_PKCS12_shroudedKeyBag = {OID_PKCS12_BagTypesLength + 1,
					(uint8_t *)OID_PKCS12_shroundedKeyBag },
CSSMOID_PKCS12_certBag = {OID_PKCS12_BagTypesLength + 1,
					(uint8_t *)OID_PKCS12_certBag },
CSSMOID_PKCS12_crlBag = {OID_PKCS12_BagTypesLength + 1,
					(uint8_t *)OID_PKCS12_crlBag },
CSSMOID_PKCS12_secretBag = {OID_PKCS12_BagTypesLength + 1,
					(uint8_t *)OID_PKCS12_secretBag },
CSSMOID_PKCS12_safeContentsBag = {OID_PKCS12_BagTypesLength + 1,
					(uint8_t *)OID_PKCS12_safeContentsBag }

;

/* Kerberos PKINIT CMS ContentInfo types */

static const uint8_t
	OID_KERBv5_PKINIT_AUTH_DATA[]		= { OID_KERBv5_PKINIT, 1 },
	OID_KERBv5_PKINIT_DH_KEY_DATA[]		= { OID_KERBv5_PKINIT, 2 },
	OID_KERBv5_PKINIT_RKEY_DATA[]		= { OID_KERBv5_PKINIT, 3 };

const SecAsn1Oid 
CSSMOID_KERBv5_PKINIT_AUTH_DATA		= { OID_KERBv5_PKINIT_LEN + 1,
										(uint8_t *)OID_KERBv5_PKINIT_AUTH_DATA },
CSSMOID_KERBv5_PKINIT_DH_KEY_DATA	= { OID_KERBv5_PKINIT_LEN + 1,
										(uint8_t *)OID_KERBv5_PKINIT_DH_KEY_DATA },
CSSMOID_KERBv5_PKINIT_RKEY_DATA		= { OID_KERBv5_PKINIT_LEN + 1,
										(uint8_t *)OID_KERBv5_PKINIT_RKEY_DATA };

/*
 *	Additional OIDS for LDAP support
 */

static const uint8_t
	OID_ITU_RFCDATA_2342_UCL_DIRECTORYPILOT_ATTRIBUTES_USERID_Data[] = {OID_ITU_RFCDATA_2342_UCL_DIRECTORYPILOT_ATTRIBUTES_USERID};
	
const SecAsn1Oid
CSSMOID_UserID = {OID_ITU_RFCDATA_2342_UCL_DIRECTORYPILOT_ATTRIBUTES_USERID_LENGTH, (uint8_t *)OID_ITU_RFCDATA_2342_UCL_DIRECTORYPILOT_ATTRIBUTES_USERID_Data};

static const uint8_t
	OID_ITU_RFCDATA_2342_UCL_DIRECTORYPILOT_ATTRIBUTES_DOMAINCOMPONENT_Data[] = {OID_ITU_RFCDATA_2342_UCL_DIRECTORYPILOT_ATTRIBUTES_DOMAINCOMPONENT};

const SecAsn1Oid
CSSMOID_DomainComponent = {OID_ITU_RFCDATA_2342_UCL_DIRECTORYPILOT_ATTRIBUTES_DOMAINCOMPONENT_LENGTH, (uint8_t *)OID_ITU_RFCDATA_2342_UCL_DIRECTORYPILOT_ATTRIBUTES_DOMAINCOMPONENT_Data};
										
/* ANSI X9.62 and Certicom elliptic curve OIDs */
static const uint8_t 
	OID_X9_62[]					= { OID_ANSI_X9_62 },
	OID_X9_62_FieldType[]		= { OID_ANSI_X9_62_FIELD_TYPE },
	OID_X9_62_PubKeyType[]		= { OID_ANSI_X9_62_PUBKEY_TYPE },
	OID_X9_62_EllCurve[]		= { OID_ANSI_X9_62_ELL_CURVE },
	OID_X9_62_C_TwoCurve[]		= { OID_ANSI_X9_62_C_TWO_CURVE },
	OID_X9_62_PrimeCurve[]		= { OID_ANSI_X9_62_PRIME_CURVE },
	OID_X9_62_SigType[]			= { OID_ANSI_X9_62_SIG_TYPE },
	
	/* these two defined in ANSI X9.62 but renamed in common usage */
	OID_secp192r1[]				= { OID_ANSI_X9_62_PRIME_CURVE, 1 },
	OID_secp256r1[]				= { OID_ANSI_X9_62_PRIME_CURVE, 7 },
	/* remainder defined in Certicom SEC 2 */
	OID_Certicom[]				= { OID_CERTICOM },
	OID_CerticomEllCurve[]		= { OID_CERTICOM_ELL_CURVE },
	/* curves over prime-order fields */
	OID_secp112r1[]				= { OID_CERTICOM_ELL_CURVE, 6 },
	OID_secp112r2[]				= { OID_CERTICOM_ELL_CURVE, 7 },
	OID_secp128r1[]				= { OID_CERTICOM_ELL_CURVE, 28 },
	OID_secp128r2[]				= { OID_CERTICOM_ELL_CURVE, 29 },
	OID_secp160k1[]				= { OID_CERTICOM_ELL_CURVE, 9 },
	OID_secp160r1[]				= { OID_CERTICOM_ELL_CURVE, 8 },
	OID_secp160r2[]				= { OID_CERTICOM_ELL_CURVE, 30 },
	OID_secp192k1[]				= { OID_CERTICOM_ELL_CURVE, 31 },
	OID_secp224k1[]				= { OID_CERTICOM_ELL_CURVE, 32 },
	OID_secp224r1[]				= { OID_CERTICOM_ELL_CURVE, 33 },
	OID_secp256k1[]				= { OID_CERTICOM_ELL_CURVE, 10 },
	OID_secp384r1[]				= { OID_CERTICOM_ELL_CURVE, 34 },
	OID_secp521r1[]				= { OID_CERTICOM_ELL_CURVE, 35 },
	/* curves over characteristic 2 fields */
	OID_sect113r1[]				= { OID_CERTICOM_ELL_CURVE, 4 },
	OID_sect113r2[]				= { OID_CERTICOM_ELL_CURVE, 5 },
	OID_sect131r1[]				= { OID_CERTICOM_ELL_CURVE, 22 },
	OID_sect131r2[]				= { OID_CERTICOM_ELL_CURVE, 23 },
	OID_sect163k1[]				= { OID_CERTICOM_ELL_CURVE, 1 },
	OID_sect163r1[]				= { OID_CERTICOM_ELL_CURVE, 2 },
	OID_sect163r2[]				= { OID_CERTICOM_ELL_CURVE, 15 },
	OID_sect193r1[]				= { OID_CERTICOM_ELL_CURVE, 24 },
	OID_sect193r2[]				= { OID_CERTICOM_ELL_CURVE, 25 },
	OID_sect233k1[]				= { OID_CERTICOM_ELL_CURVE, 26 },
	OID_sect233r1[]				= { OID_CERTICOM_ELL_CURVE, 27 },
	OID_sect239k1[]				= { OID_CERTICOM_ELL_CURVE, 3 },
	OID_sect283k1[]				= { OID_CERTICOM_ELL_CURVE, 16 },
	OID_sect283r1[]				= { OID_CERTICOM_ELL_CURVE, 17 },
	OID_sect409k1[]				= { OID_CERTICOM_ELL_CURVE, 36 },
	OID_sect409r1[]				= { OID_CERTICOM_ELL_CURVE, 37 },
	OID_sect571k1[]				= { OID_CERTICOM_ELL_CURVE, 38 },
	OID_sect571r1[]				= { OID_CERTICOM_ELL_CURVE, 39 }
;

const SecAsn1Oid 
    CSSMOID_X9_62			= {OID_ANSI_X9_42_LEN, (uint8_t *)OID_X9_62 },
    CSSMOID_X9_62_FieldType = {OID_ANSI_X9_42_LEN+1, (uint8_t *)OID_X9_62_FieldType },
    CSSMOID_X9_62_PubKeyType = {OID_ANSI_X9_42_LEN+1, (uint8_t *)OID_X9_62_PubKeyType },
    CSSMOID_X9_62_EllCurve	= {OID_ANSI_X9_42_LEN+1, (uint8_t *)OID_X9_62_EllCurve },
    CSSMOID_X9_62_C_TwoCurve = {OID_ANSI_X9_62_ELL_CURVE_LEN+1, (uint8_t *)OID_X9_62_C_TwoCurve },
    CSSMOID_X9_62_PrimeCurve = {OID_ANSI_X9_62_ELL_CURVE_LEN+1, (uint8_t *)OID_X9_62_PrimeCurve },
    CSSMOID_X9_62_SigType	= {OID_ANSI_X9_42_LEN+1, (uint8_t *)OID_X9_62_SigType },
    CSSMOID_secp192r1	= {OID_ANSI_X9_62_ELL_CURVE_LEN+2, (uint8_t *)OID_secp192r1 },
    CSSMOID_secp256r1	= {OID_ANSI_X9_62_ELL_CURVE_LEN+2, (uint8_t *)OID_secp256r1 },
    CSSMOID_Certicom	= {OID_CERTICOM_LEN, (uint8_t *)OID_Certicom },
    CSSMOID_CerticomEllCurve = {OID_CERTICOM_ELL_CURVE_LEN, (uint8_t *)OID_CerticomEllCurve },
    CSSMOID_secp112r1 = {OID_CERTICOM_ELL_CURVE_LEN+1, (uint8_t *)OID_secp112r1 },
    CSSMOID_secp112r2 = {OID_CERTICOM_ELL_CURVE_LEN+1, (uint8_t *)OID_secp112r2 },
    CSSMOID_secp128r1 = {OID_CERTICOM_ELL_CURVE_LEN+1, (uint8_t *)OID_secp128r1 },
    CSSMOID_secp128r2 = {OID_CERTICOM_ELL_CURVE_LEN+1, (uint8_t *)OID_secp128r2 },
    CSSMOID_secp160k1 = {OID_CERTICOM_ELL_CURVE_LEN+1, (uint8_t *)OID_secp160k1 },
    CSSMOID_secp160r1 = {OID_CERTICOM_ELL_CURVE_LEN+1, (uint8_t *)OID_secp160r1 },
    CSSMOID_secp160r2 = {OID_CERTICOM_ELL_CURVE_LEN+1, (uint8_t *)OID_secp160r2 },
    CSSMOID_secp192k1 = {OID_CERTICOM_ELL_CURVE_LEN+1, (uint8_t *)OID_secp192k1 },
    CSSMOID_secp224k1 = {OID_CERTICOM_ELL_CURVE_LEN+1, (uint8_t *)OID_secp224k1 },
    CSSMOID_secp224r1 = {OID_CERTICOM_ELL_CURVE_LEN+1, (uint8_t *)OID_secp224r1 },
    CSSMOID_secp256k1 = {OID_CERTICOM_ELL_CURVE_LEN+1, (uint8_t *)OID_secp256k1 },
    CSSMOID_secp384r1 = {OID_CERTICOM_ELL_CURVE_LEN+1, (uint8_t *)OID_secp384r1 },
    CSSMOID_secp521r1 = {OID_CERTICOM_ELL_CURVE_LEN+1, (uint8_t *)OID_secp521r1 },
    CSSMOID_sect113r1 = {OID_CERTICOM_ELL_CURVE_LEN+1, (uint8_t *)OID_sect113r1 },
    CSSMOID_sect113r2 = {OID_CERTICOM_ELL_CURVE_LEN+1, (uint8_t *)OID_sect113r2 },
    CSSMOID_sect131r1 = {OID_CERTICOM_ELL_CURVE_LEN+1, (uint8_t *)OID_sect131r1 },
    CSSMOID_sect131r2 = {OID_CERTICOM_ELL_CURVE_LEN+1, (uint8_t *)OID_sect131r2 },
    CSSMOID_sect163k1 = {OID_CERTICOM_ELL_CURVE_LEN+1, (uint8_t *)OID_sect163k1 },
    CSSMOID_sect163r1 = {OID_CERTICOM_ELL_CURVE_LEN+1, (uint8_t *)OID_sect163r1 },
    CSSMOID_sect163r2 = {OID_CERTICOM_ELL_CURVE_LEN+1, (uint8_t *)OID_sect163r2 },
    CSSMOID_sect193r1 = {OID_CERTICOM_ELL_CURVE_LEN+1, (uint8_t *)OID_sect193r1 },
    CSSMOID_sect193r2 = {OID_CERTICOM_ELL_CURVE_LEN+1, (uint8_t *)OID_sect193r2 },
    CSSMOID_sect233k1 = {OID_CERTICOM_ELL_CURVE_LEN+1, (uint8_t *)OID_sect233k1 },
    CSSMOID_sect233r1 = {OID_CERTICOM_ELL_CURVE_LEN+1, (uint8_t *)OID_sect233r1 },
    CSSMOID_sect239k1 = {OID_CERTICOM_ELL_CURVE_LEN+1, (uint8_t *)OID_sect239k1 },
    CSSMOID_sect283k1 = {OID_CERTICOM_ELL_CURVE_LEN+1, (uint8_t *)OID_sect283k1 },
    CSSMOID_sect283r1 = {OID_CERTICOM_ELL_CURVE_LEN+1, (uint8_t *)OID_sect283r1 },
    CSSMOID_sect409k1 = {OID_CERTICOM_ELL_CURVE_LEN+1, (uint8_t *)OID_sect409k1 },
    CSSMOID_sect409r1 = {OID_CERTICOM_ELL_CURVE_LEN+1, (uint8_t *)OID_sect409r1 },
    CSSMOID_sect571k1 = {OID_CERTICOM_ELL_CURVE_LEN+1, (uint8_t *)OID_sect571k1 },
    CSSMOID_sect571r1 = {OID_CERTICOM_ELL_CURVE_LEN+1, (uint8_t *)OID_sect571r1 };