2 * Copyright (c) 2000-2001,2011-2012,2014 Apple Inc. All Rights Reserved.
4 * The contents of this file constitute Original Code as defined in and are
5 * subject to the Apple Public Source License Version 1.2 (the 'License').
6 * You may not use this file except in compliance with the License. Please obtain
7 * a copy of the License at http://www.apple.com/publicsource and read it before
10 * This Original Code and all software distributed under the License are
11 * distributed on an 'AS IS' basis, WITHOUT WARRANTY OF ANY KIND, EITHER EXPRESS
12 * OR IMPLIED, AND APPLE HEREBY DISCLAIMS ALL SUCH WARRANTIES, INCLUDING WITHOUT
13 * LIMITATION, ANY WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR
14 * PURPOSE, QUIET ENJOYMENT OR NON-INFRINGEMENT. Please see the License for the
15 * specific language governing rights and limitations under the License.
20 File: MDSAttrStrings.cpp
22 Contains: Static tables to map attribute names to numeric values.
24 Copyright (c) 2001,2011-2012,2014 Apple Inc. All Rights Reserved.
27 #include "MDSAttrStrings.h"
28 #include "MDSAttrUtils.h"
29 #include <Security/cssmapple.h>
30 #include <Security/mds_schema.h>
31 #include <Security/cssmkrapi.h> // CSSM_KR_POLICY_TYPE
32 #include <ctype.h> // isDigit
33 #include <strings.h> // strcmp
34 #include <stdlib.h> // atoi
39 /* declare one entry in a table of MDSNameValuePairs */
40 #define MNVP(attr) {attr, #attr}
42 /* the NULL entry which terminates all MDSNameValuePair tables */
43 #define MNVP_END {0, NULL}
49 /* CSSM_SERVICE_MASK */
50 const MDSNameValuePair MDSServiceNames
[] =
52 MNVP(CSSM_SERVICE_CSSM
),
53 MNVP(CSSM_SERVICE_CSP
),
54 MNVP(CSSM_SERVICE_DL
),
55 MNVP(CSSM_SERVICE_CL
),
56 MNVP(CSSM_SERVICE_TP
),
57 MNVP(CSSM_SERVICE_AC
),
58 MNVP(CSSM_SERVICE_KR
),
62 /* CSSM_ACL_SUBJECT_TYPE */
63 const MDSNameValuePair MDSAclSubjectTypeNames
[] =
65 MNVP(CSSM_ACL_SUBJECT_TYPE_ANY
),
66 MNVP(CSSM_ACL_SUBJECT_TYPE_THRESHOLD
),
67 MNVP(CSSM_ACL_SUBJECT_TYPE_PASSWORD
),
68 MNVP(CSSM_ACL_SUBJECT_TYPE_PROTECTED_PASSWORD
),
69 MNVP(CSSM_ACL_SUBJECT_TYPE_PROMPTED_PASSWORD
),
70 MNVP(CSSM_ACL_SUBJECT_TYPE_PUBLIC_KEY
),
71 MNVP(CSSM_ACL_SUBJECT_TYPE_HASHED_SUBJECT
),
72 MNVP(CSSM_ACL_SUBJECT_TYPE_BIOMETRIC
),
73 MNVP(CSSM_ACL_SUBJECT_TYPE_PROTECTED_BIOMETRIC
),
74 MNVP(CSSM_ACL_SUBJECT_TYPE_PROMPTED_BIOMETRIC
),
75 MNVP(CSSM_ACL_SUBJECT_TYPE_LOGIN_NAME
),
76 MNVP(CSSM_ACL_SUBJECT_TYPE_EXT_PAM_NAME
),
77 /* from cssmapple.h */
78 MNVP(CSSM_ACL_SUBJECT_TYPE_KEYCHAIN_PROMPT
),
79 MNVP(CSSM_ACL_SUBJECT_TYPE_PROCESS
),
80 MNVP(CSSM_ACL_SUBJECT_TYPE_CODE_SIGNATURE
),
81 MNVP(CSSM_ACL_SUBJECT_TYPE_COMMENT
),
85 /* CSSM_ACL_AUTHORIZATION_TAG */
86 const MDSNameValuePair MDSAclAuthTagNames
[] =
88 MNVP(CSSM_ACL_AUTHORIZATION_ANY
),
89 MNVP(CSSM_ACL_AUTHORIZATION_LOGIN
),
90 MNVP(CSSM_ACL_AUTHORIZATION_GENKEY
),
91 MNVP(CSSM_ACL_AUTHORIZATION_DELETE
),
92 MNVP(CSSM_ACL_AUTHORIZATION_EXPORT_WRAPPED
),
93 MNVP(CSSM_ACL_AUTHORIZATION_EXPORT_CLEAR
),
94 MNVP(CSSM_ACL_AUTHORIZATION_IMPORT_WRAPPED
),
95 MNVP(CSSM_ACL_AUTHORIZATION_IMPORT_CLEAR
),
96 MNVP(CSSM_ACL_AUTHORIZATION_SIGN
),
97 MNVP(CSSM_ACL_AUTHORIZATION_ENCRYPT
),
98 MNVP(CSSM_ACL_AUTHORIZATION_DECRYPT
),
99 MNVP(CSSM_ACL_AUTHORIZATION_MAC
),
100 MNVP(CSSM_ACL_AUTHORIZATION_DERIVE
),
101 MNVP(CSSM_ACL_AUTHORIZATION_DBS_CREATE
),
102 MNVP(CSSM_ACL_AUTHORIZATION_DBS_DELETE
),
103 MNVP(CSSM_ACL_AUTHORIZATION_DB_READ
),
104 MNVP(CSSM_ACL_AUTHORIZATION_DB_INSERT
),
105 MNVP(CSSM_ACL_AUTHORIZATION_DB_MODIFY
),
106 MNVP(CSSM_ACL_AUTHORIZATION_DB_DELETE
),
107 /* from cssmapple.h */
108 MNVP(CSSM_ACL_AUTHORIZATION_CHANGE_ACL
),
109 MNVP(CSSM_ACL_AUTHORIZATION_CHANGE_OWNER
),
117 /* CSSM_CONTEXT_TYPE */
118 const MDSNameValuePair MDSContextTypeNames
[] =
120 MNVP(CSSM_ALGCLASS_NONE
),
121 MNVP(CSSM_ALGCLASS_CUSTOM
),
122 MNVP(CSSM_ALGCLASS_SIGNATURE
),
123 MNVP(CSSM_ALGCLASS_SYMMETRIC
),
124 MNVP(CSSM_ALGCLASS_DIGEST
),
125 MNVP(CSSM_ALGCLASS_RANDOMGEN
),
126 MNVP(CSSM_ALGCLASS_UNIQUEGEN
),
127 MNVP(CSSM_ALGCLASS_MAC
),
128 MNVP(CSSM_ALGCLASS_ASYMMETRIC
),
129 MNVP(CSSM_ALGCLASS_KEYGEN
),
130 MNVP(CSSM_ALGCLASS_DERIVEKEY
),
131 MNVP(CSSM_ALGCLASS_NONE
),
135 /* CSSM_ATTRIBUTE_TYPE */
136 const MDSNameValuePair MDSAttributeTypeNames
[] =
138 MNVP(CSSM_ATTRIBUTE_NONE
),
139 MNVP(CSSM_ATTRIBUTE_CUSTOM
),
140 MNVP(CSSM_ATTRIBUTE_DESCRIPTION
),
141 MNVP(CSSM_ATTRIBUTE_KEY
),
142 MNVP(CSSM_ATTRIBUTE_INIT_VECTOR
),
143 MNVP(CSSM_ATTRIBUTE_SALT
),
144 MNVP(CSSM_ATTRIBUTE_PADDING
),
145 MNVP(CSSM_ATTRIBUTE_RANDOM
),
146 MNVP(CSSM_ATTRIBUTE_SEED
),
147 MNVP(CSSM_ATTRIBUTE_PASSPHRASE
),
148 MNVP(CSSM_ATTRIBUTE_KEY_LENGTH
),
149 MNVP(CSSM_ATTRIBUTE_KEY_LENGTH_RANGE
),
150 MNVP(CSSM_ATTRIBUTE_BLOCK_SIZE
),
151 MNVP(CSSM_ATTRIBUTE_OUTPUT_SIZE
),
152 MNVP(CSSM_ATTRIBUTE_ROUNDS
),
153 MNVP(CSSM_ATTRIBUTE_IV_SIZE
),
154 MNVP(CSSM_ATTRIBUTE_ALG_PARAMS
),
155 MNVP(CSSM_ATTRIBUTE_LABEL
),
156 MNVP(CSSM_ATTRIBUTE_KEY_TYPE
),
157 MNVP(CSSM_ATTRIBUTE_MODE
),
158 MNVP(CSSM_ATTRIBUTE_EFFECTIVE_BITS
),
159 MNVP(CSSM_ATTRIBUTE_START_DATE
),
160 MNVP(CSSM_ATTRIBUTE_END_DATE
),
161 MNVP(CSSM_ATTRIBUTE_KEYUSAGE
),
162 MNVP(CSSM_ATTRIBUTE_KEYATTR
),
163 MNVP(CSSM_ATTRIBUTE_VERSION
),
164 MNVP(CSSM_ATTRIBUTE_PRIME
),
165 MNVP(CSSM_ATTRIBUTE_SUBPRIME
),
166 MNVP(CSSM_ATTRIBUTE_ALG_ID
),
167 MNVP(CSSM_ATTRIBUTE_ITERATION_COUNT
),
168 MNVP(CSSM_ATTRIBUTE_ROUNDS_RANGE
),
169 MNVP(CSSM_ATTRIBUTE_KRPROFILE_LOCAL
),
170 MNVP(CSSM_ATTRIBUTE_KRPROFILE_REMOTE
),
171 MNVP(CSSM_ATTRIBUTE_CSP_HANDLE
),
172 MNVP(CSSM_ATTRIBUTE_DL_DB_HANDLE
),
173 MNVP(CSSM_ATTRIBUTE_ACCESS_CREDENTIALS
),
174 MNVP(CSSM_ATTRIBUTE_PUBLIC_KEY_FORMAT
),
175 MNVP(CSSM_ATTRIBUTE_PRIVATE_KEY_FORMAT
),
176 MNVP(CSSM_ATTRIBUTE_SYMMETRIC_KEY_FORMAT
),
177 MNVP(CSSM_ATTRIBUTE_WRAPPED_KEY_FORMAT
),
182 const MDSNameValuePair MDSPaddingNames
[] =
184 MNVP(CSSM_PADDING_NONE
),
185 MNVP(CSSM_PADDING_CUSTOM
),
186 MNVP(CSSM_PADDING_ZERO
),
187 MNVP(CSSM_PADDING_ONE
),
188 MNVP(CSSM_PADDING_ALTERNATE
),
189 MNVP(CSSM_PADDING_FF
),
190 MNVP(CSSM_PADDING_PKCS5
),
191 MNVP(CSSM_PADDING_PKCS7
),
192 MNVP(CSSM_PADDING_CIPHERSTEALING
),
193 MNVP(CSSM_PADDING_RANDOM
),
194 MNVP(CSSM_PADDING_PKCS1
),
199 const MDSNameValuePair MDSCspFlagsNames
[] =
201 MNVP(CSSM_CSP_TOK_WRITE_PROTECTED
),
202 MNVP(CSSM_CSP_TOK_LOGIN_REQUIRED
),
203 MNVP(CSSM_CSP_TOK_USER_PIN_INITIALIZED
),
204 MNVP(CSSM_CSP_TOK_PROT_AUTHENTICATION
),
205 MNVP(CSSM_CSP_TOK_USER_PIN_EXPIRED
),
206 MNVP(CSSM_CSP_TOK_SESSION_KEY_PASSWORD
),
207 MNVP(CSSM_CSP_TOK_PRIVATE_KEY_PASSWORD
),
208 MNVP(CSSM_CSP_STORES_PRIVATE_KEYS
),
209 MNVP(CSSM_CSP_STORES_PUBLIC_KEYS
),
210 MNVP(CSSM_CSP_STORES_SESSION_KEYS
),
211 MNVP(CSSM_CSP_STORES_CERTIFICATES
),
212 MNVP(CSSM_CSP_STORES_GENERIC
),
216 /* CSSM_ALGORITHMS */
217 const MDSNameValuePair MDSAlgorithmNames
[] =
219 MNVP(CSSM_ALGID_NONE
),
220 MNVP(CSSM_ALGID_CUSTOM
),
223 MNVP(CSSM_ALGID_KEA
),
224 MNVP(CSSM_ALGID_MD2
),
225 MNVP(CSSM_ALGID_MD4
),
226 MNVP(CSSM_ALGID_MD5
),
227 MNVP(CSSM_ALGID_SHA1
),
228 MNVP(CSSM_ALGID_NHASH
),
229 MNVP(CSSM_ALGID_HAVAL
),
230 MNVP(CSSM_ALGID_RIPEMD
),
231 MNVP(CSSM_ALGID_IBCHASH
),
232 MNVP(CSSM_ALGID_RIPEMAC
),
233 MNVP(CSSM_ALGID_DES
),
234 MNVP(CSSM_ALGID_DESX
),
235 MNVP(CSSM_ALGID_RDES
),
236 MNVP(CSSM_ALGID_3DES_3KEY_EDE
),
237 MNVP(CSSM_ALGID_3DES_2KEY_EDE
),
238 MNVP(CSSM_ALGID_3DES_1KEY_EEE
),
239 MNVP(CSSM_ALGID_3DES_3KEY
),
240 MNVP(CSSM_ALGID_3DES_3KEY_EEE
),
241 MNVP(CSSM_ALGID_3DES_2KEY
),
242 MNVP(CSSM_ALGID_3DES_2KEY_EEE
),
243 MNVP(CSSM_ALGID_3DES_1KEY
),
244 MNVP(CSSM_ALGID_IDEA
),
245 MNVP(CSSM_ALGID_RC2
),
246 MNVP(CSSM_ALGID_RC5
),
247 MNVP(CSSM_ALGID_RC4
),
248 MNVP(CSSM_ALGID_SEAL
),
249 MNVP(CSSM_ALGID_CAST
),
250 MNVP(CSSM_ALGID_BLOWFISH
),
251 MNVP(CSSM_ALGID_SKIPJACK
),
252 MNVP(CSSM_ALGID_LUCIFER
),
253 MNVP(CSSM_ALGID_MADRYGA
),
254 MNVP(CSSM_ALGID_FEAL
),
255 MNVP(CSSM_ALGID_REDOC
),
256 MNVP(CSSM_ALGID_REDOC3
),
257 MNVP(CSSM_ALGID_LOKI
),
258 MNVP(CSSM_ALGID_KHUFU
),
259 MNVP(CSSM_ALGID_KHAFRE
),
260 MNVP(CSSM_ALGID_MMB
),
261 MNVP(CSSM_ALGID_GOST
),
262 MNVP(CSSM_ALGID_SAFER
),
263 MNVP(CSSM_ALGID_CRAB
),
264 MNVP(CSSM_ALGID_RSA
),
265 MNVP(CSSM_ALGID_DSA
),
266 MNVP(CSSM_ALGID_MD5WithRSA
),
267 MNVP(CSSM_ALGID_MD2WithRSA
),
268 MNVP(CSSM_ALGID_ElGamal
),
269 MNVP(CSSM_ALGID_MD2Random
),
270 MNVP(CSSM_ALGID_MD5Random
),
271 MNVP(CSSM_ALGID_SHARandom
),
272 MNVP(CSSM_ALGID_DESRandom
),
273 MNVP(CSSM_ALGID_SHA1WithRSA
),
274 MNVP(CSSM_ALGID_CDMF
),
275 MNVP(CSSM_ALGID_CAST3
),
276 MNVP(CSSM_ALGID_CAST5
),
277 MNVP(CSSM_ALGID_GenericSecret
),
278 MNVP(CSSM_ALGID_ConcatBaseAndKey
),
279 MNVP(CSSM_ALGID_ConcatKeyAndBase
),
280 MNVP(CSSM_ALGID_ConcatBaseAndData
),
281 MNVP(CSSM_ALGID_ConcatDataAndBase
),
282 MNVP(CSSM_ALGID_XORBaseAndData
),
283 MNVP(CSSM_ALGID_ExtractFromKey
),
284 MNVP(CSSM_ALGID_SSL3PreMasterGen
),
285 MNVP(CSSM_ALGID_SSL3MasterDerive
),
286 MNVP(CSSM_ALGID_SSL3KeyAndMacDerive
),
287 MNVP(CSSM_ALGID_SSL3MD5_MAC
),
288 MNVP(CSSM_ALGID_SSL3SHA1_MAC
),
289 MNVP(CSSM_ALGID_PKCS5_PBKDF1_MD5
),
290 MNVP(CSSM_ALGID_PKCS5_PBKDF1_MD2
),
291 MNVP(CSSM_ALGID_PKCS5_PBKDF1_SHA1
),
292 MNVP(CSSM_ALGID_WrapLynks
),
293 MNVP(CSSM_ALGID_WrapSET_OAEP
),
294 MNVP(CSSM_ALGID_BATON
),
295 MNVP(CSSM_ALGID_ECDSA
),
296 MNVP(CSSM_ALGID_MAYFLY
),
297 MNVP(CSSM_ALGID_JUNIPER
),
298 MNVP(CSSM_ALGID_FASTHASH
),
299 MNVP(CSSM_ALGID_3DES
),
300 MNVP(CSSM_ALGID_SSL3MD5
),
301 MNVP(CSSM_ALGID_SSL3SHA1
),
302 MNVP(CSSM_ALGID_FortezzaTimestamp
),
303 MNVP(CSSM_ALGID_SHA1WithDSA
),
304 MNVP(CSSM_ALGID_SHA1WithECDSA
),
305 MNVP(CSSM_ALGID_DSA_BSAFE
),
306 MNVP(CSSM_ALGID_ECDH
),
307 MNVP(CSSM_ALGID_ECMQV
),
308 MNVP(CSSM_ALGID_PKCS12_SHA1_PBE
),
309 MNVP(CSSM_ALGID_ECNRA
),
310 MNVP(CSSM_ALGID_SHA1WithECNRA
),
311 MNVP(CSSM_ALGID_ECES
),
312 MNVP(CSSM_ALGID_ECAES
),
313 MNVP(CSSM_ALGID_SHA1HMAC
),
314 MNVP(CSSM_ALGID_FIPS186Random
),
315 MNVP(CSSM_ALGID_ECC
),
316 MNVP(CSSM_ALGID_MQV
),
317 MNVP(CSSM_ALGID_NRA
),
318 MNVP(CSSM_ALGID_IntelPlatformRandom
),
319 MNVP(CSSM_ALGID_UTC
),
320 MNVP(CSSM_ALGID_HAVAL3
),
321 MNVP(CSSM_ALGID_HAVAL4
),
322 MNVP(CSSM_ALGID_HAVAL5
),
323 MNVP(CSSM_ALGID_TIGER
),
324 MNVP(CSSM_ALGID_MD5HMAC
),
325 MNVP(CSSM_ALGID_PKCS5_PBKDF2
),
326 MNVP(CSSM_ALGID_RUNNING_COUNTER
),
328 /* from cssmapple.h */
329 MNVP(CSSM_ALGID_APPLE_YARROW
),
330 MNVP(CSSM_ALGID_AES
),
331 MNVP(CSSM_ALGID_FEE
),
332 MNVP(CSSM_ALGID_FEE_MD5
),
333 MNVP(CSSM_ALGID_FEE_SHA1
),
334 MNVP(CSSM_ALGID_FEED
),
335 MNVP(CSSM_ALGID_FEEDEXP
),
336 MNVP(CSSM_ALGID_ASC
),
337 MNVP(CSSM_ALGID_SHA1HMAC_LEGACY
),
341 /* CSSM_ENCRYPT_MODE */
342 const MDSNameValuePair MDSEncryptModeNames
[] =
344 MNVP(CSSM_ALGMODE_NONE
),
345 MNVP(CSSM_ALGMODE_CUSTOM
),
346 MNVP(CSSM_ALGMODE_ECB
),
347 MNVP(CSSM_ALGMODE_ECBPad
),
348 MNVP(CSSM_ALGMODE_CBC
),
349 MNVP(CSSM_ALGMODE_CBC_IV8
),
350 MNVP(CSSM_ALGMODE_CBCPadIV8
),
351 MNVP(CSSM_ALGMODE_CFB
),
352 MNVP(CSSM_ALGMODE_CFB_IV8
),
353 MNVP(CSSM_ALGMODE_CFBPadIV8
),
354 MNVP(CSSM_ALGMODE_OFB
),
355 MNVP(CSSM_ALGMODE_OFB_IV8
),
356 MNVP(CSSM_ALGMODE_OFBPadIV8
),
357 MNVP(CSSM_ALGMODE_COUNTER
),
358 MNVP(CSSM_ALGMODE_BC
),
359 MNVP(CSSM_ALGMODE_PCBC
),
360 MNVP(CSSM_ALGMODE_CBCC
),
361 MNVP(CSSM_ALGMODE_OFBNLF
),
362 MNVP(CSSM_ALGMODE_PBC
),
363 MNVP(CSSM_ALGMODE_PFB
),
364 MNVP(CSSM_ALGMODE_CBCPD
),
365 MNVP(CSSM_ALGMODE_PUBLIC_KEY
),
366 MNVP(CSSM_ALGMODE_PRIVATE_KEY
),
367 MNVP(CSSM_ALGMODE_SHUFFLE
),
368 MNVP(CSSM_ALGMODE_ECB64
),
369 MNVP(CSSM_ALGMODE_CBC64
),
370 MNVP(CSSM_ALGMODE_OFB64
),
371 MNVP(CSSM_ALGMODE_CFB32
),
372 MNVP(CSSM_ALGMODE_CFB16
),
373 MNVP(CSSM_ALGMODE_CFB8
),
374 MNVP(CSSM_ALGMODE_WRAP
),
375 MNVP(CSSM_ALGMODE_PRIVATE_WRAP
),
376 MNVP(CSSM_ALGMODE_RELAYX
),
377 MNVP(CSSM_ALGMODE_ECB128
),
378 MNVP(CSSM_ALGMODE_ECB96
),
379 MNVP(CSSM_ALGMODE_CBC128
),
380 MNVP(CSSM_ALGMODE_OAEP_HASH
),
381 MNVP(CSSM_ALGMODE_PKCS1_EME_V15
),
382 MNVP(CSSM_ALGMODE_PKCS1_EME_OAEP
),
383 MNVP(CSSM_ALGMODE_PKCS1_EMSA_V15
),
384 MNVP(CSSM_ALGMODE_ISO_9796
),
385 MNVP(CSSM_ALGMODE_X9_31
),
390 const MDSNameValuePair MDSCspTypeNames
[] =
392 MNVP(CSSM_CSP_SOFTWARE
),
393 MNVP(CSSM_CSP_HARDWARE
),
394 MNVP(CSSM_CSP_HYBRID
),
399 const MDSNameValuePair MDSUseeTagsNames
[] =
401 MNVP(CSSM_USEE_NONE
),
402 MNVP(CSSM_USEE_DOMESTIC
),
403 MNVP(CSSM_USEE_FINANCIAL
),
404 MNVP(CSSM_USEE_KRLE
),
405 MNVP(CSSM_USEE_KRENT
),
407 MNVP(CSSM_USEE_AUTHENTICATION
),
408 MNVP(CSSM_USEE_KEYEXCH
),
409 MNVP(CSSM_USEE_MEDICAL
),
410 MNVP(CSSM_USEE_INSURANCE
),
411 MNVP(CSSM_USEE_WEAK
),
415 /* CSSM_CSP_READER_FLAGS */
416 const MDSNameValuePair MDSCspReaderFlagsNames
[] =
418 MNVP(CSSM_CSP_RDR_TOKENPRESENT
),
419 MNVP(CSSM_CSP_RDR_EXISTS
),
420 MNVP(CSSM_CSP_RDR_HW
),
425 const MDSNameValuePair MDSCspScFlagsNames
[] =
427 MNVP(CSSM_CSP_TOK_RNG
),
428 MNVP(CSSM_CSP_TOK_CLOCK_EXISTS
),
432 /* CSSM_SAMPLE_TYPE */
433 const MDSNameValuePair MDSSampleTypeNames
[] =
435 MNVP(CSSM_SAMPLE_TYPE_PASSWORD
),
436 MNVP(CSSM_SAMPLE_TYPE_HASHED_PASSWORD
),
437 MNVP(CSSM_SAMPLE_TYPE_PROTECTED_PASSWORD
),
438 MNVP(CSSM_SAMPLE_TYPE_PROMPTED_PASSWORD
),
439 MNVP(CSSM_SAMPLE_TYPE_SIGNED_NONCE
),
440 MNVP(CSSM_SAMPLE_TYPE_SIGNED_SECRET
),
441 MNVP(CSSM_SAMPLE_TYPE_BIOMETRIC
),
442 MNVP(CSSM_SAMPLE_TYPE_PROTECTED_BIOMETRIC
),
443 MNVP(CSSM_SAMPLE_TYPE_PROMPTED_BIOMETRIC
),
444 MNVP(CSSM_SAMPLE_TYPE_THRESHOLD
),
445 /* from cssmapple.h */
446 MNVP(CSSM_SAMPLE_TYPE_KEYCHAIN_PROMPT
),
447 MNVP(CSSM_SAMPLE_TYPE_KEYCHAIN_LOCK
),
448 MNVP(CSSM_SAMPLE_TYPE_KEYCHAIN_CHANGE_LOCK
),
449 MNVP(CSSM_SAMPLE_TYPE_PROCESS
),
450 MNVP(CSSM_SAMPLE_TYPE_COMMENT
),
451 MNVP(CSSM_SAMPLE_TYPE_RETRY_ID
),
455 /* CSSM_CERT_TYPE, CSSM_CERT_ENCODING (cert type in high 16 bits) */
456 const MDSNameValuePair MDSCertTypeNames
[] =
459 MNVP(CSSM_CERT_UNKNOWN
),
460 MNVP(CSSM_CERT_X_509v1
),
461 MNVP(CSSM_CERT_X_509v2
),
462 MNVP(CSSM_CERT_X_509v3
),
465 MNVP(CSSM_CERT_SDSIv1
),
466 MNVP(CSSM_CERT_Intel
),
467 MNVP(CSSM_CERT_X_509_ATTRIBUTE
),
468 MNVP(CSSM_CERT_X9_ATTRIBUTE
),
469 MNVP(CSSM_CERT_TUPLE
),
470 MNVP(CSSM_CERT_ACL_ENTRY
),
471 MNVP(CSSM_CERT_MULTIPLE
),
472 /* CSSM_CERT_ENCODING */
473 MNVP(CSSM_CERT_ENCODING_UNKNOWN
),
474 MNVP(CSSM_CERT_ENCODING_CUSTOM
),
475 MNVP(CSSM_CERT_ENCODING_BER
),
476 MNVP(CSSM_CERT_ENCODING_DER
),
477 MNVP(CSSM_CERT_ENCODING_NDR
),
478 MNVP(CSSM_CERT_ENCODING_SEXPR
),
479 MNVP(CSSM_CERT_ENCODING_PGP
),
480 MNVP(CSSM_CERT_ENCODING_MULTIPLE
),
484 /* CSSM_CRL_TYPE, CSSM_CRL_ENCODING (CRL type in high 16 bits) */
485 const MDSNameValuePair MDSCrlTypeNames
[] =
488 MNVP(CSSM_CRL_TYPE_UNKNOWN
),
489 MNVP(CSSM_CRL_TYPE_X_509v1
),
490 MNVP(CSSM_CRL_TYPE_X_509v2
),
491 MNVP(CSSM_CRL_TYPE_SPKI
),
492 MNVP(CSSM_CRL_TYPE_MULTIPLE
),
493 /* CSSM_CRL_ENCODING */
494 MNVP(CSSM_CRL_ENCODING_UNKNOWN
),
495 MNVP(CSSM_CRL_ENCODING_CUSTOM
),
496 MNVP(CSSM_CRL_ENCODING_BER
),
497 MNVP(CSSM_CRL_ENCODING_DER
),
498 MNVP(CSSM_CRL_ENCODING_BLOOM
),
499 MNVP(CSSM_CRL_ENCODING_SEXPR
),
500 MNVP(CSSM_CRL_ENCODING_MULTIPLE
),
504 /* CSSM_CERT_BUNDLE_TYPE, CSSM_CERT_BUNDLE_ENCODING (bundle type in high 16 bits) */
505 const MDSNameValuePair MDSCertBundleTypeNames
[] =
507 /* CSSM_CERT_BUNDLE_TYPE */
508 MNVP(CSSM_CERT_BUNDLE_UNKNOWN
),
509 MNVP(CSSM_CERT_BUNDLE_CUSTOM
),
510 MNVP(CSSM_CERT_BUNDLE_PKCS7_SIGNED_DATA
),
511 MNVP(CSSM_CERT_BUNDLE_PKCS7_SIGNED_ENVELOPED_DATA
),
512 MNVP(CSSM_CERT_BUNDLE_PKCS12
),
513 MNVP(CSSM_CERT_BUNDLE_PFX
),
514 MNVP(CSSM_CERT_BUNDLE_SPKI_SEQUENCE
),
515 MNVP(CSSM_CERT_BUNDLE_PGP_KEYRING
),
516 /* CSSM_CERT_BUNDLE_ENCODING */
517 MNVP(CSSM_CERT_BUNDLE_ENCODING_UNKNOWN
),
518 MNVP(CSSM_CERT_BUNDLE_ENCODING_CUSTOM
),
519 MNVP(CSSM_CERT_BUNDLE_ENCODING_BER
),
520 MNVP(CSSM_CERT_BUNDLE_ENCODING_DER
),
521 MNVP(CSSM_CERT_BUNDLE_ENCODING_SEXPR
),
522 MNVP(CSSM_CERT_BUNDLE_PFX
),
523 MNVP(CSSM_CERT_BUNDLE_ENCODING_PGP
),
527 /* CSSM_CL_TEMPLATE_TYPE */
528 const MDSNameValuePair MDSCertTemplateTypeNames
[] =
530 MNVP(CSSM_CL_TEMPLATE_INTERMEDIATE_CERT
),
531 MNVP(CSSM_CL_TEMPLATE_PKIX_CERTTEMPLATE
),
535 /* CSSM_TP_AUTHORITY_REQUEST_CERTISSUE */
536 const MDSNameValuePair MDSTpAuthRequestNames
[] =
538 MNVP(CSSM_TP_AUTHORITY_REQUEST_CERTISSUE
),
539 MNVP(CSSM_TP_AUTHORITY_REQUEST_CERTREVOKE
),
540 MNVP(CSSM_TP_AUTHORITY_REQUEST_CERTSUSPEND
),
541 MNVP(CSSM_TP_AUTHORITY_REQUEST_CERTRESUME
),
542 MNVP(CSSM_TP_AUTHORITY_REQUEST_CERTVERIFY
),
543 MNVP(CSSM_TP_AUTHORITY_REQUEST_CERTNOTARIZE
),
544 MNVP(CSSM_TP_AUTHORITY_REQUEST_CERTUSERECOVER
),
545 MNVP(CSSM_TP_AUTHORITY_REQUEST_CRLISSUE
),
550 const MDSNameValuePair MDSDlTypeNames
[] =
552 MNVP(CSSM_DL_UNKNOWN
),
553 MNVP(CSSM_DL_CUSTOM
),
556 MNVP(CSSM_DL_PKCS11
),
558 MNVP(CSSM_DL_MEMORY
),
559 MNVP(CSSM_DL_REMOTEDIR
),
563 /* CSSM_DB_CONJUNCTIVE */
564 const MDSNameValuePair MDSDbConjunctiveNames
[] =
572 /* CSSM_DB_OPERATOR */
573 const MDSNameValuePair MDSDbOperatorNames
[] =
576 MNVP(CSSM_DB_NOT_EQUAL
),
577 MNVP(CSSM_DB_LESS_THAN
),
578 MNVP(CSSM_DB_GREATER_THAN
),
579 MNVP(CSSM_DB_CONTAINS
),
580 MNVP(CSSM_DB_CONTAINS_INITIAL_SUBSTRING
),
581 MNVP(CSSM_DB_CONTAINS_FINAL_SUBSTRING
),
585 /* CSSM_NET_PROTOCOL */
586 const MDSNameValuePair MDSNetProtocolNames
[] =
588 MNVP(CSSM_NET_PROTO_NONE
),
589 MNVP(CSSM_NET_PROTO_CUSTOM
),
590 MNVP(CSSM_NET_PROTO_UNSPECIFIED
),
591 MNVP(CSSM_NET_PROTO_LDAP
),
592 MNVP(CSSM_NET_PROTO_LDAPS
),
593 MNVP(CSSM_NET_PROTO_LDAPNS
),
594 MNVP(CSSM_NET_PROTO_X500DAP
),
595 MNVP(CSSM_NET_PROTO_FTP
),
596 MNVP(CSSM_NET_PROTO_FTPS
),
597 MNVP(CSSM_NET_PROTO_OCSP
),
598 MNVP(CSSM_NET_PROTO_CMP
),
599 MNVP(CSSM_NET_PROTO_CMPS
),
603 /* CSSM_DB_RETRIEVAL_MODES */
604 const MDSNameValuePair MDSDbRetrievalModeNames
[] =
606 MNVP(CSSM_DB_TRANSACTIONAL_MODE
),
607 MNVP(CSSM_DB_FILESYSTEMSCAN_MODE
),
611 /* CSSM_KR_POLICY_TYPE */
612 /* FIXME the spec is kind of ambiguous - do we want
613 * CSSM_KR_POLICY_TYPE or CSSM_KR_POLICY_FLAGS? */
614 const MDSNameValuePair MDSKrPolicyTypeNames
[] =
616 MNVP(CSSM_KR_INDIV_POLICY
),
617 MNVP(CSSM_KR_ENT_POLICY
),
618 MNVP(CSSM_KR_LE_MAN_POLICY
),
619 MNVP(CSSM_KR_LE_USE_POLICY
),
624 static bool isNumericStr(
634 if((c
>= 'a') && (c
<= 'f')) {
637 if((c
>= 'A') && (c
<= 'F')) {
646 /* convert ASCII hex digit - assumed validated already */
647 static unsigned char hexDigit(
650 if((d
>= '0') && (d
<= '9')) {
653 else if((d
>= 'a') && (d
<= 'f')) {
661 static unsigned strToHex(
667 rtn
|= hexDigit(*str
++);
673 * Core routine to convert a single string token to a uint32. Incoming token can
674 * be in the form of a string from the specified MDSNameValuePair table or a literal
675 * number, either in hex (prefix "0x") or decimal. Tokens in any form may be
676 * prefixed by "<<" indicating the value is to be shifted left by 16 bits.
678 CSSM_RETURN
MDSAttrNameToValue(
680 const MDSNameValuePair
*table
, // optional, string must be decimal or hex if NULL
681 uint32
&value
) // RETURNED
684 return CSSMERR_CSSM_MDS_ERROR
;
687 /* empty string, legal */
692 /* prefixed by "<<"? */
693 bool shiftBy16
= false;
694 if((name
!= NULL
) && (name
[0] == '<') && (name
[1] == '<')) {
699 /* attempt to find the string in lookup table */
701 while(table
->name
!= NULL
) {
702 if(!strcmp(table
->name
, name
)) {
703 value
= table
->value
;
713 /* not found - is the string a number? */
714 if(isdigit(name
[0])) {
717 if((name
[0] == '0') && (name
[1] == 'x')) {
718 /* hex - skip first two chars */
721 isNum
= isNumericStr(name
, true);
724 isNum
= isNumericStr(name
, false);
727 return CSSMERR_CSSM_MDS_ERROR
;
730 value
= strToHex(name
);
742 return CSSMERR_CSSM_MDS_ERROR
;
747 } // end namespace Security