1/*
2 * Copyright (c) 2000-2001,2003-2004,2008,2010,2012,2014 Apple Inc. All Rights Reserved.
3 *
4 * @APPLE_LICENSE_HEADER_START@
5 *
6 * This file contains Original Code and/or Modifications of Original Code
7 * as defined in and that are subject to the Apple Public Source License
8 * Version 2.0 (the 'License'). You may not use this file except in
9 * compliance with the License. Please obtain a copy of the License at
10 * http://www.opensource.apple.com/apsl/ and read it before using this
11 * file.
12 *
13 * The Original Code and all software distributed under the License are
14 * distributed on an 'AS IS' basis, WITHOUT WARRANTY OF ANY KIND, EITHER
15 * EXPRESS OR IMPLIED, AND APPLE HEREBY DISCLAIMS ALL SUCH WARRANTIES,
16 * INCLUDING WITHOUT LIMITATION, ANY WARRANTIES OF MERCHANTABILITY,
17 * FITNESS FOR A PARTICULAR PURPOSE, QUIET ENJOYMENT OR NON-INFRINGEMENT.
18 * Please see the License for the specific language governing rights and
19 * limitations under the License.
20 *
21 * @APPLE_LICENSE_HEADER_END@
22 */
23
24
25/*
26 * oidsattr.c - Cert/CRL related OIDs.
27 */
28
29#include <Security/oidsbase.h>
30#include <Security/oidsattr.h>
31
32
33/*
34 * Directory name component identifiers.
35 */
36static const uint8_t
37	OID_ObjectClass[]           		= { OID_ATTR_TYPE, 0 },
38	OID_AliasedEntryName[]      		= { OID_ATTR_TYPE, 1 },
39	OID_KnowledgeInformation[]  		= { OID_ATTR_TYPE, 2 },
40	OID_CommonName[]            		= { OID_ATTR_TYPE, 3 },
41	OID_Surname[]              			= { OID_ATTR_TYPE, 4 },
42	OID_SerialNumber[]         			= { OID_ATTR_TYPE, 5 },
43	OID_CountryName[]           		= { OID_ATTR_TYPE, 6 },
44	OID_LocalityName[]          		= { OID_ATTR_TYPE, 7 },
45	OID_StateProvinceName[]     		= { OID_ATTR_TYPE, 8 },
46	OID_CollectiveStateProvinceName[] 	= { OID_ATTR_TYPE, 8, 1 },
47	OID_StreetAddress[]         		= { OID_ATTR_TYPE, 9 },
48	OID_CollectiveStreetAddress[]     	= { OID_ATTR_TYPE, 9, 1 },
49	OID_OrganizationName[]      		= { OID_ATTR_TYPE, 10 },
50	OID_CollectiveOrganizationName[]  	= { OID_ATTR_TYPE, 10, 1 },
51	OID_OrganizationalUnitName[]		= { OID_ATTR_TYPE, 11 },
52	OID_CollectiveOrganizationalUnitName[]
53										= { OID_ATTR_TYPE, 11, 1 },
54	OID_Title[]                 		= { OID_ATTR_TYPE, 12 },
55	OID_Description[]           		= { OID_ATTR_TYPE, 13 },
56	OID_SearchGuide[]           		= { OID_ATTR_TYPE, 14 },
57	OID_BusinessCategory[]      		= { OID_ATTR_TYPE, 15 },
58	OID_PostalAddress[]         		= { OID_ATTR_TYPE, 16 },
59	OID_CollectivePostalAddress[]     	= { OID_ATTR_TYPE, 16, 1 },
60	OID_PostalCode[]            		= { OID_ATTR_TYPE, 17 },
61	OID_CollectivePostalCode[]  		= { OID_ATTR_TYPE, 17, 1 },
62	OID_PostOfficeBox[]         		= { OID_ATTR_TYPE, 18 },
63	OID_CollectivePostOfficeBox[]     	= { OID_ATTR_TYPE, 18, 1 },
64	OID_PhysicalDeliveryOfficeName[]  	= { OID_ATTR_TYPE, 19 },
65	OID_CollectivePhysicalDeliveryOfficeName[]
66										= { OID_ATTR_TYPE, 19, 1 },
67	OID_TelephoneNumber[]       		= { OID_ATTR_TYPE, 20 },
68	OID_CollectiveTelephoneNumber[]  	= { OID_ATTR_TYPE, 20, 1 },
69	OID_TelexNumber[]           		= { OID_ATTR_TYPE, 21 },
70	OID_CollectiveTelexNumber[] 		= { OID_ATTR_TYPE, 21, 1 },
71	OID_TelexTerminalIdentifier[]     	= { OID_ATTR_TYPE, 22 },
72	OID_CollectiveTelexTerminalIdentifier[]
73										= { OID_ATTR_TYPE, 22, 1 },
74	OID_FacsimileTelephoneNumber[]    	= { OID_ATTR_TYPE, 23 },
75	OID_CollectiveFacsimileTelephoneNumber[]
76										= { OID_ATTR_TYPE, 23, 1 },
77	OID_X_121Address[]          		= { OID_ATTR_TYPE, 24 },
78	OID_InternationalISDNNumber[]     	= { OID_ATTR_TYPE, 25 },
79	OID_CollectiveInternationalISDNNumber[]
80										= { OID_ATTR_TYPE, 25, 1 },
81	OID_RegisteredAddress[]     		= { OID_ATTR_TYPE, 26 },
82	OID_DestinationIndicator[]  		= { OID_ATTR_TYPE, 27 },
83	OID_PreferredDeliveryMethod[] 		= { OID_ATTR_TYPE, 28 },
84	OID_PresentationAddress[]   		= { OID_ATTR_TYPE, 29 },
85	OID_SupportedApplicationContext[] 	= { OID_ATTR_TYPE, 30 },
86	OID_Member[]                		= { OID_ATTR_TYPE, 31 },
87	OID_Owner[]                			= { OID_ATTR_TYPE, 32 },
88	OID_RoleOccupant[]          		= { OID_ATTR_TYPE, 33 },
89	OID_SeeAlso[]               		= { OID_ATTR_TYPE, 34 },
90	OID_UserPassword[]          		= { OID_ATTR_TYPE, 35 },
91	OID_UserCertificate[]       		= { OID_ATTR_TYPE, 36 },
92	OID_CACertificate[]         		= { OID_ATTR_TYPE, 37 },
93	OID_AuthorityRevocationList[] 		= { OID_ATTR_TYPE, 38 },
94	OID_CertificateRevocationList[] 	= { OID_ATTR_TYPE, 39 },
95	OID_CrossCertificatePair[]  		= { OID_ATTR_TYPE, 40 },
96	OID_Name[]                  		= { OID_ATTR_TYPE, 41 },
97	OID_GivenName[]             		= { OID_ATTR_TYPE, 42 },
98	OID_Initials[]              		= { OID_ATTR_TYPE, 43 },
99	OID_GenerationQualifier[]   		= { OID_ATTR_TYPE, 44 },
100	OID_UniqueIdentifier[]     			= { OID_ATTR_TYPE, 45 },
101	OID_DNQualifier[]           		= { OID_ATTR_TYPE, 46 },
102	OID_EnhancedSearchGuide[]   		= { OID_ATTR_TYPE, 47 },
103	OID_ProtocolInformation[]   		= { OID_ATTR_TYPE, 48 },
104	OID_DistinguishedName[]     		= { OID_ATTR_TYPE, 49 },
105	OID_UniqueMember[]          		= { OID_ATTR_TYPE, 50 },
106	OID_HouseIdentifier[]       		= { OID_ATTR_TYPE, 51 }
107;
108
109const SecAsn1Oid
110CSSMOID_ObjectClass        		= { OID_ATTR_TYPE_LENGTH+1, (uint8_t *)OID_ObjectClass},
111CSSMOID_AliasedEntryName    	= { OID_ATTR_TYPE_LENGTH+1, (uint8_t *)OID_AliasedEntryName},
112CSSMOID_KnowledgeInformation	= { OID_ATTR_TYPE_LENGTH+1, (uint8_t *)OID_KnowledgeInformation},
113CSSMOID_CommonName          	= { OID_ATTR_TYPE_LENGTH+1, (uint8_t *)OID_CommonName},
114CSSMOID_Surname             	= { OID_ATTR_TYPE_LENGTH+1, (uint8_t *)OID_Surname},
115CSSMOID_SerialNumber       		= { OID_ATTR_TYPE_LENGTH+1, (uint8_t *)OID_SerialNumber},
116CSSMOID_CountryName         	= { OID_ATTR_TYPE_LENGTH+1, (uint8_t *)OID_CountryName},
117CSSMOID_LocalityName        	= { OID_ATTR_TYPE_LENGTH+1, (uint8_t *)OID_LocalityName},
118CSSMOID_StateProvinceName   	= { OID_ATTR_TYPE_LENGTH+1, (uint8_t *)OID_StateProvinceName},
119CSSMOID_CollectiveStateProvinceName
120								= { OID_ATTR_TYPE_LENGTH+2, (uint8_t *)OID_CollectiveStateProvinceName},
121CSSMOID_StreetAddress       	= { OID_ATTR_TYPE_LENGTH+1, (uint8_t *)OID_StreetAddress},
122CSSMOID_CollectiveStreetAddress = { OID_ATTR_TYPE_LENGTH+2, (uint8_t *)OID_CollectiveStreetAddress},
123CSSMOID_OrganizationName    	= { OID_ATTR_TYPE_LENGTH+1, (uint8_t *)OID_OrganizationName},
124CSSMOID_CollectiveOrganizationName
125								= { OID_ATTR_TYPE_LENGTH+2, (uint8_t *)OID_CollectiveOrganizationName},
126CSSMOID_OrganizationalUnitName  = { OID_ATTR_TYPE_LENGTH+1, (uint8_t *)OID_OrganizationalUnitName},
127CSSMOID_CollectiveOrganizationalUnitName
128								= { OID_ATTR_TYPE_LENGTH+2, (uint8_t *)OID_CollectiveOrganizationalUnitName},
129CSSMOID_Title              		= { OID_ATTR_TYPE_LENGTH+1, (uint8_t *)OID_Title},
130CSSMOID_Description        		= { OID_ATTR_TYPE_LENGTH+1, (uint8_t *)OID_Description},
131CSSMOID_SearchGuide         	= { OID_ATTR_TYPE_LENGTH+1, (uint8_t *)OID_SearchGuide},
132CSSMOID_BusinessCategory    	= { OID_ATTR_TYPE_LENGTH+1, (uint8_t *)OID_BusinessCategory},
133CSSMOID_PostalAddress       	= { OID_ATTR_TYPE_LENGTH+1, (uint8_t *)OID_PostalAddress},
134CSSMOID_CollectivePostalAddress = { OID_ATTR_TYPE_LENGTH+2, (uint8_t *)OID_CollectivePostalAddress},
135CSSMOID_PostalCode          	= { OID_ATTR_TYPE_LENGTH+1, (uint8_t *)OID_PostalCode},
136CSSMOID_CollectivePostalCode	= { OID_ATTR_TYPE_LENGTH+2, (uint8_t *)OID_CollectivePostalCode},
137CSSMOID_PostOfficeBox       	= { OID_ATTR_TYPE_LENGTH+1, (uint8_t *)OID_PostOfficeBox},
138CSSMOID_CollectivePostOfficeBox = { OID_ATTR_TYPE_LENGTH+2, (uint8_t *)OID_CollectivePostOfficeBox},
139CSSMOID_PhysicalDeliveryOfficeName
140								= { OID_ATTR_TYPE_LENGTH+1, (uint8_t *)OID_PhysicalDeliveryOfficeName},
141CSSMOID_CollectivePhysicalDeliveryOfficeName
142								= { OID_ATTR_TYPE_LENGTH+2, (uint8_t *)OID_CollectivePhysicalDeliveryOfficeName},
143CSSMOID_TelephoneNumber     	= { OID_ATTR_TYPE_LENGTH+1, (uint8_t *)OID_TelephoneNumber},
144CSSMOID_CollectiveTelephoneNumber
145								= { OID_ATTR_TYPE_LENGTH+2, (uint8_t *)OID_CollectiveTelephoneNumber},
146CSSMOID_TelexNumber         	= { OID_ATTR_TYPE_LENGTH+1, (uint8_t *)OID_TelexNumber},
147CSSMOID_CollectiveTelexNumber   = { OID_ATTR_TYPE_LENGTH+2, (uint8_t *)OID_CollectiveTelexNumber},
148CSSMOID_TelexTerminalIdentifier = { OID_ATTR_TYPE_LENGTH+1, (uint8_t *)OID_TelexTerminalIdentifier},
149CSSMOID_CollectiveTelexTerminalIdentifier
150								= { OID_ATTR_TYPE_LENGTH+2, (uint8_t *)OID_CollectiveTelexTerminalIdentifier},
151CSSMOID_FacsimileTelephoneNumber= { OID_ATTR_TYPE_LENGTH+1, (uint8_t *)OID_FacsimileTelephoneNumber},
152CSSMOID_CollectiveFacsimileTelephoneNumber
153								= { OID_ATTR_TYPE_LENGTH+2, (uint8_t *)OID_CollectiveFacsimileTelephoneNumber},
154CSSMOID_X_121Address        	= { OID_ATTR_TYPE_LENGTH+1, (uint8_t *)OID_X_121Address},
155CSSMOID_InternationalISDNNumber = { OID_ATTR_TYPE_LENGTH+1, (uint8_t *)OID_InternationalISDNNumber},
156CSSMOID_CollectiveInternationalISDNNumber
157								= { OID_ATTR_TYPE_LENGTH+2, (uint8_t *)OID_CollectiveInternationalISDNNumber},
158CSSMOID_RegisteredAddress   	= { OID_ATTR_TYPE_LENGTH+1, (uint8_t *)OID_RegisteredAddress},
159CSSMOID_DestinationIndicator	= { OID_ATTR_TYPE_LENGTH+1, (uint8_t *)OID_DestinationIndicator},
160CSSMOID_PreferredDeliveryMethod = { OID_ATTR_TYPE_LENGTH+1, (uint8_t *)OID_PreferredDeliveryMethod},
161CSSMOID_PresentationAddress 	= { OID_ATTR_TYPE_LENGTH+1, (uint8_t *)OID_PresentationAddress},
162CSSMOID_SupportedApplicationContext
163								= { OID_ATTR_TYPE_LENGTH+1, (uint8_t *)OID_SupportedApplicationContext},
164CSSMOID_Member              	= { OID_ATTR_TYPE_LENGTH+1, (uint8_t *)OID_Member},
165CSSMOID_Owner               	= { OID_ATTR_TYPE_LENGTH+1, (uint8_t *)OID_Owner},
166CSSMOID_RoleOccupant        	= { OID_ATTR_TYPE_LENGTH+1, (uint8_t *)OID_RoleOccupant},
167CSSMOID_SeeAlso             	= { OID_ATTR_TYPE_LENGTH+1, (uint8_t *)OID_SeeAlso},
168CSSMOID_UserPassword        	= { OID_ATTR_TYPE_LENGTH+1, (uint8_t *)OID_UserPassword},
169CSSMOID_UserCertificate     	= { OID_ATTR_TYPE_LENGTH+1, (uint8_t *)OID_UserCertificate},
170CSSMOID_CACertificate       	= { OID_ATTR_TYPE_LENGTH+1, (uint8_t *)OID_CACertificate},
171CSSMOID_AuthorityRevocationList = { OID_ATTR_TYPE_LENGTH+1, (uint8_t *)OID_AuthorityRevocationList},
172CSSMOID_CertificateRevocationList
173								= { OID_ATTR_TYPE_LENGTH+1, (uint8_t *)OID_CertificateRevocationList},
174CSSMOID_CrossCertificatePair	= { OID_ATTR_TYPE_LENGTH+1, (uint8_t *)OID_CrossCertificatePair},
175CSSMOID_Name                	= { OID_ATTR_TYPE_LENGTH+1, (uint8_t *)OID_Name},
176CSSMOID_GivenName           	= { OID_ATTR_TYPE_LENGTH+1, (uint8_t *)OID_GivenName},
177CSSMOID_Initials            	= { OID_ATTR_TYPE_LENGTH+1, (uint8_t *)OID_Initials},
178CSSMOID_GenerationQualifier 	= { OID_ATTR_TYPE_LENGTH+1, (uint8_t *)OID_GenerationQualifier},
179CSSMOID_UniqueIdentifier    	= { OID_ATTR_TYPE_LENGTH+1, (uint8_t *)OID_UniqueIdentifier},
180CSSMOID_DNQualifier         	= { OID_ATTR_TYPE_LENGTH+1, (uint8_t *)OID_DNQualifier},
181CSSMOID_EnhancedSearchGuide 	= { OID_ATTR_TYPE_LENGTH+1, (uint8_t *)OID_EnhancedSearchGuide},
182CSSMOID_ProtocolInformation 	= { OID_ATTR_TYPE_LENGTH+1, (uint8_t *)OID_ProtocolInformation},
183CSSMOID_DistinguishedName   	= { OID_ATTR_TYPE_LENGTH+1, (uint8_t *)OID_DistinguishedName},
184CSSMOID_UniqueMember        	= { OID_ATTR_TYPE_LENGTH+1, (uint8_t *)OID_UniqueMember},
185CSSMOID_HouseIdentifier     	= { OID_ATTR_TYPE_LENGTH+1, (uint8_t *)OID_HouseIdentifier}
186;
187
188
189/* From PKCS 9 */
190static const uint8_t
191	OID_EmailAddress[]          = { OID_PKCS_9, 1 },
192	OID_UnstructuredName[]      = { OID_PKCS_9, 2 },
193	OID_ContentType[]           = { OID_PKCS_9, 3 },
194	OID_MessageDigest[]         = { OID_PKCS_9, 4 },
195	OID_SigningTime[]           = { OID_PKCS_9, 5 },
196	OID_CounterSignature[]      = { OID_PKCS_9, 6 },
197	OID_ChallengePassword[]     = { OID_PKCS_9, 7 },
198	OID_UnstructuredAddress[]   = { OID_PKCS_9, 8 },
199	OID_ExtendedCertificateAttributes[] = { OID_PKCS_9, 9 }
200;
201
202const SecAsn1Oid
203CSSMOID_EmailAddress        = {OID_PKCS_9_LENGTH+1, (uint8_t *)OID_EmailAddress},
204CSSMOID_UnstructuredName    = {OID_PKCS_9_LENGTH+1, (uint8_t *)OID_UnstructuredName},
205CSSMOID_ContentType         = {OID_PKCS_9_LENGTH+1, (uint8_t *)OID_ContentType},
206CSSMOID_MessageDigest       = {OID_PKCS_9_LENGTH+1, (uint8_t *)OID_MessageDigest},
207CSSMOID_SigningTime         = {OID_PKCS_9_LENGTH+1, (uint8_t *)OID_SigningTime},
208CSSMOID_CounterSignature    = {OID_PKCS_9_LENGTH+1, (uint8_t *)OID_CounterSignature},
209CSSMOID_ChallengePassword   = {OID_PKCS_9_LENGTH+1, (uint8_t *)OID_ChallengePassword},
210CSSMOID_UnstructuredAddress = {OID_PKCS_9_LENGTH+1, (uint8_t *)OID_UnstructuredAddress},
211CSSMOID_ExtendedCertificateAttributes = {OID_PKCS_9_LENGTH+1, (uint8_t *)OID_ExtendedCertificateAttributes};
212
213/* PKIX */
214static const uint8_t
215	OID_QT_CPS[]			= { OID_QT, 1 },
216	OID_QT_UNOTICE[]		= { OID_QT, 2 },
217	_OID_AD_OCSP[]			= { OID_AD_OCSP },
218	OID_AD_CA_ISSUERS[]		= { OID_AD, 2 },
219	OID_AD_TIME_STAMPING[]  = { OID_AD, 3 },
220	OID_AD_CA_REPOSITORY[]	= { OID_AD, 5 },
221	OID_PDA_DATE_OF_BIRTH[]		= { OID_PDA, 1 },
222	OID_PDA_PLACE_OF_BIRTH[]	= { OID_PDA, 2 },
223	OID_PDA_GENDER[]			= { OID_PDA, 3 },
224	OID_PDA_COUNTRY_CITIZEN[]	= { OID_PDA, 4 },
225	OID_PDA_COUNTRY_RESIDENCE[]	= { OID_PDA, 5 },
226	OID_QCS_SYNTAX_V1[]			= { OID_QCS, 1 },
227	OID_QCS_SYNTAX_V2[]			= { OID_QCS, 2 }
228;
229
230/* ETSI */
231static const uint8_t
232	OID_ETSI_QCS_QC_COMPLICANCE[]           = { OID_ETSI_QCS, 1 },
233	OID_ETSI_QCS_QC_LIMIT_VALUE[]           = { OID_ETSI_QCS, 2 },
234	__unused OID_ETSI_QCS_QC_RETENTION[]	= { OID_ETSI_QCS, 3 },
235    __unused OID_ETSI_QCS_QC_SSCD[]			= { OID_ETSI_QCS, 4 }
236;
237
238const SecAsn1Oid
239CSSMOID_QT_CPS				= {OID_QT_LENGTH+1, (uint8_t *)OID_QT_CPS},
240CSSMOID_QT_UNOTICE			= {OID_QT_LENGTH+1, (uint8_t *)OID_QT_UNOTICE},
241CSSMOID_AD_OCSP				= {OID_AD_LENGTH+1, (uint8_t *)_OID_AD_OCSP},
242CSSMOID_AD_CA_ISSUERS		= {OID_AD_LENGTH+1, (uint8_t *)OID_AD_CA_ISSUERS},
243CSSMOID_AD_TIME_STAMPING	= {OID_AD_LENGTH+1, (uint8_t *)OID_AD_TIME_STAMPING},
244CSSMOID_AD_CA_REPOSITORY	= {OID_AD_LENGTH+1, (uint8_t *)OID_AD_CA_REPOSITORY},
245CSSMOID_PDA_DATE_OF_BIRTH	= {OID_PDA_LENGTH+1, (uint8_t *)OID_PDA_DATE_OF_BIRTH},
246CSSMOID_PDA_PLACE_OF_BIRTH	= {OID_PDA_LENGTH+1, (uint8_t *)OID_PDA_PLACE_OF_BIRTH},
247CSSMOID_PDA_GENDER			= {OID_PDA_LENGTH+1, (uint8_t *)OID_PDA_GENDER},
248CSSMOID_PDA_COUNTRY_CITIZEN	= {OID_PDA_LENGTH+1, (uint8_t *)OID_PDA_COUNTRY_CITIZEN},
249CSSMOID_PDA_COUNTRY_RESIDENCE = {OID_PDA_LENGTH+1, (uint8_t *)OID_PDA_COUNTRY_RESIDENCE},
250CSSMOID_OID_QCS_SYNTAX_V1 	= {OID_QCS_LENGTH+1, (uint8_t *)OID_QCS_SYNTAX_V1},
251CSSMOID_OID_QCS_SYNTAX_V2 	= {OID_QCS_LENGTH+1, (uint8_t *)OID_QCS_SYNTAX_V2}
252;
253
254const SecAsn1Oid
255CSSMOID_ETSI_QCS_QC_COMPLIANCE 	= {OID_ETSI_QCS_LENGTH + 1,
256								  (uint8_t *)OID_ETSI_QCS_QC_COMPLICANCE},
257CSSMOID_ETSI_QCS_QC_LIMIT_VALUE = {OID_ETSI_QCS_LENGTH + 1,
258								  (uint8_t *)OID_ETSI_QCS_QC_LIMIT_VALUE},
259CSSMOID_ETSI_QCS_QC_RETENTION 	= {OID_ETSI_QCS_LENGTH + 1,
260								  (uint8_t *)OID_ETSI_QCS_QC_COMPLICANCE},
261CSSMOID_ETSI_QCS_QC_SSCD		= {OID_ETSI_QCS_LENGTH + 1,
262								  (uint8_t *)OID_ETSI_QCS_QC_COMPLICANCE}
263;
264
265#define OID_PKCS12_BagTypes			OID_PKCS_12,10,1
266#define OID_PKCS12_BagTypesLength	OID_PKCS_12_LENGTH+2
267
268#define ID_PKCS9_CertTypes			OID_PKCS_9, 22
269#define OID_PKCS9_CertTypesLength	OID_PKCS_9_LENGTH+1
270#define ID_PKCS9_CrlTypes			OID_PKCS_9, 23
271#define OID_PKCS9_CrlTypesLength	OID_PKCS_9_LENGTH+1
272
273static const uint8_t
274	OID_PKCS7_Data[] = 						{ OID_PKCS_7, 1},
275	OID_PKCS7_SignedData[] = 				{ OID_PKCS_7, 2},
276	OID_PKCS7_EnvelopedData[] = 			{ OID_PKCS_7, 3},
277	OID_PKCS7_SignedAndEnvelopedData[] = 	{ OID_PKCS_7, 4},
278	OID_PKCS7_DigestedData[] =		 		{ OID_PKCS_7, 5},
279	OID_PKCS7_EncryptedData[] = 			{ OID_PKCS_7, 6},
280	OID_PKCS7_DataWithAttributes[] = 		{ OID_PKCS_7, 7},
281	OID_PKCS7_EncryptedPrivateKeyInfo[] = 	{ OID_PKCS_7, 8},
282
283	OID_PKCS9_FriendlyName[] =				{ OID_PKCS_9, 20},
284	OID_PKCS9_LocalKeyId[] =				{ OID_PKCS_9, 21},
285	OID_PKCS9_CertTypes[] =					{ ID_PKCS9_CertTypes },
286	OID_PKCS9_CrlTypes[] =					{ ID_PKCS9_CrlTypes },
287	OID_PKCS9_X509Certificate[] =			{ ID_PKCS9_CertTypes, 1 },
288	OID_PKCS9_SdsiCertificate[] =			{ ID_PKCS9_CertTypes, 2 },
289	OID_PKCS9_X509Crl[] =					{ ID_PKCS9_CrlTypes, 1 },
290
291	OID_PKCS12_keyBag[] =					{ OID_PKCS12_BagTypes, 1},
292	OID_PKCS12_shroundedKeyBag[] =			{ OID_PKCS12_BagTypes, 2},
293	OID_PKCS12_certBag[] =					{ OID_PKCS12_BagTypes, 3},
294	OID_PKCS12_crlBag[] =					{ OID_PKCS12_BagTypes, 4},
295	OID_PKCS12_secretBag[] =				{ OID_PKCS12_BagTypes, 5},
296	OID_PKCS12_safeContentsBag[] =			{ OID_PKCS12_BagTypes, 6}
297;
298
299/*
300    -- ContentTypes
301    {iso(1) member-body(2) us(840) rsadsi(113549) pkcs(1) pkcs-9(9) smime(16) ct(1)}
302
303    -- Attributes
304    {iso(1) member-body(2) us(840) rsadsi(113549) pkcs(1) pkcs-9(9) smime(16) aa(2)}
305
306    -- eContentType for a time-stamp token
307
308    id-ct-TSTInfo  OBJECT IDENTIFIER ::= { iso(1) member-body(2)
309    us(840) rsadsi(113549) pkcs(1) pkcs-9(9) smime(16) ct(1) 4}
310
311    id-aa-timeStampToken OBJECT IDENTIFIER ::= { iso(1) member-body(2)
312    us(840) rsadsi(113549) pkcs(1) pkcs-9(9) smime(16) aa(2) 14 }
313*/
314
315#define ID_PKCS9_SMIME          OID_PKCS_9, 16
316#define OID_PKCS9_SMIMELength   OID_PKCS_9_LENGTH+1
317#define ID_PKCS9_CONTENT_TYPES  ID_PKCS9_SMIME, 1
318#define OID_PKCS9_CT_Length     OID_PKCS9_SMIMELength+1
319#define ID_PKCS9_ATTRIBUTES     ID_PKCS9_SMIME, 2
320#define OID_PKCS9_Attrs_Length  OID_PKCS9_SMIMELength+1
321
322static const uint8_t
323	OID_ID_CT_TSTInfo[]       = { ID_PKCS9_CONTENT_TYPES, 4 },
324	OID_TimeStampToken[]      = { ID_PKCS9_ATTRIBUTES, 14 };
325
326const SecAsn1Oid
327CSSMOID_PKCS9_Id_Ct_TSTInfo = {OID_PKCS9_CT_Length + 1,
328					  (uint8_t *)OID_ID_CT_TSTInfo },
329CSSMOID_PKCS9_TimeStampToken = {OID_PKCS9_Attrs_Length + 1,
330					  (uint8_t *)OID_TimeStampToken };
331
332
333const SecAsn1Oid
334CSSMOID_PKCS7_Data = {OID_PKCS_7_LENGTH + 1,
335					  (uint8_t *)OID_PKCS7_Data },
336CSSMOID_PKCS7_SignedData = {OID_PKCS_7_LENGTH + 1,
337					  (uint8_t *)OID_PKCS7_SignedData },
338CSSMOID_PKCS7_EnvelopedData = {OID_PKCS_7_LENGTH + 1,
339					  (uint8_t *)OID_PKCS7_EnvelopedData },
340CSSMOID_PKCS7_SignedAndEnvelopedData = {OID_PKCS_7_LENGTH + 1,
341					  (uint8_t *)OID_PKCS7_SignedAndEnvelopedData },
342CSSMOID_PKCS7_DigestedData = {OID_PKCS_7_LENGTH + 1,
343					  (uint8_t *)OID_PKCS7_DigestedData },
344CSSMOID_PKCS7_EncryptedData = {OID_PKCS_7_LENGTH + 1,
345					  (uint8_t *)OID_PKCS7_EncryptedData },
346CSSMOID_PKCS7_DataWithAttributes = {OID_PKCS_7_LENGTH + 1,
347					  (uint8_t *)OID_PKCS7_DataWithAttributes },
348CSSMOID_PKCS7_EncryptedPrivateKeyInfo = {OID_PKCS_7_LENGTH + 1,
349					  (uint8_t *)OID_PKCS7_EncryptedPrivateKeyInfo },
350
351CSSMOID_PKCS9_FriendlyName = {OID_PKCS_9_LENGTH + 1,
352						(uint8_t *)OID_PKCS9_FriendlyName },
353CSSMOID_PKCS9_LocalKeyId = {OID_PKCS_9_LENGTH + 1,
354						(uint8_t *)OID_PKCS9_LocalKeyId },
355CSSMOID_PKCS9_CertTypes = {OID_PKCS_9_LENGTH + 1,
356						(uint8_t *)OID_PKCS9_CertTypes },
357CSSMOID_PKCS9_CrlTypes = {OID_PKCS_9_LENGTH + 1,
358						(uint8_t *)OID_PKCS9_CrlTypes },
359CSSMOID_PKCS9_X509Certificate = {OID_PKCS9_CertTypesLength + 1,
360						(uint8_t *)OID_PKCS9_X509Certificate },
361CSSMOID_PKCS9_SdsiCertificate = {OID_PKCS9_CertTypesLength + 1,
362						(uint8_t *)OID_PKCS9_SdsiCertificate },
363CSSMOID_PKCS9_X509Crl = {OID_PKCS9_CrlTypesLength + 1,
364						(uint8_t *)OID_PKCS9_X509Crl },
365
366
367CSSMOID_PKCS12_keyBag = {OID_PKCS12_BagTypesLength + 1,
368					(uint8_t *)OID_PKCS12_keyBag },
369CSSMOID_PKCS12_shroudedKeyBag = {OID_PKCS12_BagTypesLength + 1,
370					(uint8_t *)OID_PKCS12_shroundedKeyBag },
371CSSMOID_PKCS12_certBag = {OID_PKCS12_BagTypesLength + 1,
372					(uint8_t *)OID_PKCS12_certBag },
373CSSMOID_PKCS12_crlBag = {OID_PKCS12_BagTypesLength + 1,
374					(uint8_t *)OID_PKCS12_crlBag },
375CSSMOID_PKCS12_secretBag = {OID_PKCS12_BagTypesLength + 1,
376					(uint8_t *)OID_PKCS12_secretBag },
377CSSMOID_PKCS12_safeContentsBag = {OID_PKCS12_BagTypesLength + 1,
378					(uint8_t *)OID_PKCS12_safeContentsBag }
379
380;
381
382/* Kerberos PKINIT CMS ContentInfo types */
383
384static const uint8_t
385	OID_KERBv5_PKINIT_AUTH_DATA[]		= { OID_KERBv5_PKINIT, 1 },
386	OID_KERBv5_PKINIT_DH_KEY_DATA[]		= { OID_KERBv5_PKINIT, 2 },
387	OID_KERBv5_PKINIT_RKEY_DATA[]		= { OID_KERBv5_PKINIT, 3 };
388
389const SecAsn1Oid
390CSSMOID_KERBv5_PKINIT_AUTH_DATA		= { OID_KERBv5_PKINIT_LEN + 1,
391										(uint8_t *)OID_KERBv5_PKINIT_AUTH_DATA },
392CSSMOID_KERBv5_PKINIT_DH_KEY_DATA	= { OID_KERBv5_PKINIT_LEN + 1,
393										(uint8_t *)OID_KERBv5_PKINIT_DH_KEY_DATA },
394CSSMOID_KERBv5_PKINIT_RKEY_DATA		= { OID_KERBv5_PKINIT_LEN + 1,
395										(uint8_t *)OID_KERBv5_PKINIT_RKEY_DATA };
396
397/*
398 *	Additional OIDS for LDAP support
399 */
400
401static const uint8_t
402	OID_ITU_RFCDATA_2342_UCL_DIRECTORYPILOT_ATTRIBUTES_USERID_Data[] = {OID_ITU_RFCDATA_2342_UCL_DIRECTORYPILOT_ATTRIBUTES_USERID};
403
404const SecAsn1Oid
405CSSMOID_UserID = {OID_ITU_RFCDATA_2342_UCL_DIRECTORYPILOT_ATTRIBUTES_USERID_LENGTH, (uint8_t *)OID_ITU_RFCDATA_2342_UCL_DIRECTORYPILOT_ATTRIBUTES_USERID_Data};
406
407static const uint8_t
408	OID_ITU_RFCDATA_2342_UCL_DIRECTORYPILOT_ATTRIBUTES_DOMAINCOMPONENT_Data[] = {OID_ITU_RFCDATA_2342_UCL_DIRECTORYPILOT_ATTRIBUTES_DOMAINCOMPONENT};
409
410const SecAsn1Oid
411CSSMOID_DomainComponent = {OID_ITU_RFCDATA_2342_UCL_DIRECTORYPILOT_ATTRIBUTES_DOMAINCOMPONENT_LENGTH, (uint8_t *)OID_ITU_RFCDATA_2342_UCL_DIRECTORYPILOT_ATTRIBUTES_DOMAINCOMPONENT_Data};
412
413/* ANSI X9.62 and Certicom elliptic curve OIDs */
414static const uint8_t
415	OID_X9_62[]					= { OID_ANSI_X9_62 },
416	OID_X9_62_FieldType[]		= { OID_ANSI_X9_62_FIELD_TYPE },
417	OID_X9_62_PubKeyType[]		= { OID_ANSI_X9_62_PUBKEY_TYPE },
418	OID_X9_62_EllCurve[]		= { OID_ANSI_X9_62_ELL_CURVE },
419	OID_X9_62_C_TwoCurve[]		= { OID_ANSI_X9_62_C_TWO_CURVE },
420	OID_X9_62_PrimeCurve[]		= { OID_ANSI_X9_62_PRIME_CURVE },
421	OID_X9_62_SigType[]			= { OID_ANSI_X9_62_SIG_TYPE },
422
423	/* these two defined in ANSI X9.62 but renamed in common usage */
424	OID_secp192r1[]				= { OID_ANSI_X9_62_PRIME_CURVE, 1 },
425	OID_secp256r1[]				= { OID_ANSI_X9_62_PRIME_CURVE, 7 },
426	/* remainder defined in Certicom SEC 2 */
427	OID_Certicom[]				= { OID_CERTICOM },
428	OID_CerticomEllCurve[]		= { OID_CERTICOM_ELL_CURVE },
429	/* curves over prime-order fields */
430	OID_secp112r1[]				= { OID_CERTICOM_ELL_CURVE, 6 },
431	OID_secp112r2[]				= { OID_CERTICOM_ELL_CURVE, 7 },
432	OID_secp128r1[]				= { OID_CERTICOM_ELL_CURVE, 28 },
433	OID_secp128r2[]				= { OID_CERTICOM_ELL_CURVE, 29 },
434	OID_secp160k1[]				= { OID_CERTICOM_ELL_CURVE, 9 },
435	OID_secp160r1[]				= { OID_CERTICOM_ELL_CURVE, 8 },
436	OID_secp160r2[]				= { OID_CERTICOM_ELL_CURVE, 30 },
437	OID_secp192k1[]				= { OID_CERTICOM_ELL_CURVE, 31 },
438	OID_secp224k1[]				= { OID_CERTICOM_ELL_CURVE, 32 },
439	OID_secp224r1[]				= { OID_CERTICOM_ELL_CURVE, 33 },
440	OID_secp256k1[]				= { OID_CERTICOM_ELL_CURVE, 10 },
441	OID_secp384r1[]				= { OID_CERTICOM_ELL_CURVE, 34 },
442	OID_secp521r1[]				= { OID_CERTICOM_ELL_CURVE, 35 },
443	/* curves over characteristic 2 fields */
444	OID_sect113r1[]				= { OID_CERTICOM_ELL_CURVE, 4 },
445	OID_sect113r2[]				= { OID_CERTICOM_ELL_CURVE, 5 },
446	OID_sect131r1[]				= { OID_CERTICOM_ELL_CURVE, 22 },
447	OID_sect131r2[]				= { OID_CERTICOM_ELL_CURVE, 23 },
448	OID_sect163k1[]				= { OID_CERTICOM_ELL_CURVE, 1 },
449	OID_sect163r1[]				= { OID_CERTICOM_ELL_CURVE, 2 },
450	OID_sect163r2[]				= { OID_CERTICOM_ELL_CURVE, 15 },
451	OID_sect193r1[]				= { OID_CERTICOM_ELL_CURVE, 24 },
452	OID_sect193r2[]				= { OID_CERTICOM_ELL_CURVE, 25 },
453	OID_sect233k1[]				= { OID_CERTICOM_ELL_CURVE, 26 },
454	OID_sect233r1[]				= { OID_CERTICOM_ELL_CURVE, 27 },
455	OID_sect239k1[]				= { OID_CERTICOM_ELL_CURVE, 3 },
456	OID_sect283k1[]				= { OID_CERTICOM_ELL_CURVE, 16 },
457	OID_sect283r1[]				= { OID_CERTICOM_ELL_CURVE, 17 },
458	OID_sect409k1[]				= { OID_CERTICOM_ELL_CURVE, 36 },
459	OID_sect409r1[]				= { OID_CERTICOM_ELL_CURVE, 37 },
460	OID_sect571k1[]				= { OID_CERTICOM_ELL_CURVE, 38 },
461	OID_sect571r1[]				= { OID_CERTICOM_ELL_CURVE, 39 }
462;
463
464const SecAsn1Oid
465    CSSMOID_X9_62			= {OID_ANSI_X9_42_LEN, (uint8_t *)OID_X9_62 },
466    CSSMOID_X9_62_FieldType = {OID_ANSI_X9_42_LEN+1, (uint8_t *)OID_X9_62_FieldType },
467    CSSMOID_X9_62_PubKeyType = {OID_ANSI_X9_42_LEN+1, (uint8_t *)OID_X9_62_PubKeyType },
468    CSSMOID_X9_62_EllCurve	= {OID_ANSI_X9_42_LEN+1, (uint8_t *)OID_X9_62_EllCurve },
469    CSSMOID_X9_62_C_TwoCurve = {OID_ANSI_X9_62_ELL_CURVE_LEN+1, (uint8_t *)OID_X9_62_C_TwoCurve },
470    CSSMOID_X9_62_PrimeCurve = {OID_ANSI_X9_62_ELL_CURVE_LEN+1, (uint8_t *)OID_X9_62_PrimeCurve },
471    CSSMOID_X9_62_SigType	= {OID_ANSI_X9_42_LEN+1, (uint8_t *)OID_X9_62_SigType },
472    CSSMOID_secp192r1	= {OID_ANSI_X9_62_ELL_CURVE_LEN+2, (uint8_t *)OID_secp192r1 },
473    CSSMOID_secp256r1	= {OID_ANSI_X9_62_ELL_CURVE_LEN+2, (uint8_t *)OID_secp256r1 },
474    CSSMOID_Certicom	= {OID_CERTICOM_LEN, (uint8_t *)OID_Certicom },
475    CSSMOID_CerticomEllCurve = {OID_CERTICOM_ELL_CURVE_LEN, (uint8_t *)OID_CerticomEllCurve },
476    CSSMOID_secp112r1 = {OID_CERTICOM_ELL_CURVE_LEN+1, (uint8_t *)OID_secp112r1 },
477    CSSMOID_secp112r2 = {OID_CERTICOM_ELL_CURVE_LEN+1, (uint8_t *)OID_secp112r2 },
478    CSSMOID_secp128r1 = {OID_CERTICOM_ELL_CURVE_LEN+1, (uint8_t *)OID_secp128r1 },
479    CSSMOID_secp128r2 = {OID_CERTICOM_ELL_CURVE_LEN+1, (uint8_t *)OID_secp128r2 },
480    CSSMOID_secp160k1 = {OID_CERTICOM_ELL_CURVE_LEN+1, (uint8_t *)OID_secp160k1 },
481    CSSMOID_secp160r1 = {OID_CERTICOM_ELL_CURVE_LEN+1, (uint8_t *)OID_secp160r1 },
482    CSSMOID_secp160r2 = {OID_CERTICOM_ELL_CURVE_LEN+1, (uint8_t *)OID_secp160r2 },
483    CSSMOID_secp192k1 = {OID_CERTICOM_ELL_CURVE_LEN+1, (uint8_t *)OID_secp192k1 },
484    CSSMOID_secp224k1 = {OID_CERTICOM_ELL_CURVE_LEN+1, (uint8_t *)OID_secp224k1 },
485    CSSMOID_secp224r1 = {OID_CERTICOM_ELL_CURVE_LEN+1, (uint8_t *)OID_secp224r1 },
486    CSSMOID_secp256k1 = {OID_CERTICOM_ELL_CURVE_LEN+1, (uint8_t *)OID_secp256k1 },
487    CSSMOID_secp384r1 = {OID_CERTICOM_ELL_CURVE_LEN+1, (uint8_t *)OID_secp384r1 },
488    CSSMOID_secp521r1 = {OID_CERTICOM_ELL_CURVE_LEN+1, (uint8_t *)OID_secp521r1 },
489    CSSMOID_sect113r1 = {OID_CERTICOM_ELL_CURVE_LEN+1, (uint8_t *)OID_sect113r1 },
490    CSSMOID_sect113r2 = {OID_CERTICOM_ELL_CURVE_LEN+1, (uint8_t *)OID_sect113r2 },
491    CSSMOID_sect131r1 = {OID_CERTICOM_ELL_CURVE_LEN+1, (uint8_t *)OID_sect131r1 },
492    CSSMOID_sect131r2 = {OID_CERTICOM_ELL_CURVE_LEN+1, (uint8_t *)OID_sect131r2 },
493    CSSMOID_sect163k1 = {OID_CERTICOM_ELL_CURVE_LEN+1, (uint8_t *)OID_sect163k1 },
494    CSSMOID_sect163r1 = {OID_CERTICOM_ELL_CURVE_LEN+1, (uint8_t *)OID_sect163r1 },
495    CSSMOID_sect163r2 = {OID_CERTICOM_ELL_CURVE_LEN+1, (uint8_t *)OID_sect163r2 },
496    CSSMOID_sect193r1 = {OID_CERTICOM_ELL_CURVE_LEN+1, (uint8_t *)OID_sect193r1 },
497    CSSMOID_sect193r2 = {OID_CERTICOM_ELL_CURVE_LEN+1, (uint8_t *)OID_sect193r2 },
498    CSSMOID_sect233k1 = {OID_CERTICOM_ELL_CURVE_LEN+1, (uint8_t *)OID_sect233k1 },
499    CSSMOID_sect233r1 = {OID_CERTICOM_ELL_CURVE_LEN+1, (uint8_t *)OID_sect233r1 },
500    CSSMOID_sect239k1 = {OID_CERTICOM_ELL_CURVE_LEN+1, (uint8_t *)OID_sect239k1 },
501    CSSMOID_sect283k1 = {OID_CERTICOM_ELL_CURVE_LEN+1, (uint8_t *)OID_sect283k1 },
502    CSSMOID_sect283r1 = {OID_CERTICOM_ELL_CURVE_LEN+1, (uint8_t *)OID_sect283r1 },
503    CSSMOID_sect409k1 = {OID_CERTICOM_ELL_CURVE_LEN+1, (uint8_t *)OID_sect409k1 },
504    CSSMOID_sect409r1 = {OID_CERTICOM_ELL_CURVE_LEN+1, (uint8_t *)OID_sect409r1 },
505    CSSMOID_sect571k1 = {OID_CERTICOM_ELL_CURVE_LEN+1, (uint8_t *)OID_sect571k1 },
506    CSSMOID_sect571r1 = {OID_CERTICOM_ELL_CURVE_LEN+1, (uint8_t *)OID_sect571r1 };
507