MDSAttrStrings.cpp
1 /* 2 * Copyright (c) 2000-2001,2011-2012,2014 Apple Inc. All Rights Reserved. 3 * 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 8 * using this file. 9 * 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. 16 */ 17 18 19 /* 20 File: MDSAttrStrings.cpp 21 22 Contains: Static tables to map attribute names to numeric values. 23 24 Copyright (c) 2001,2011-2012,2014 Apple Inc. All Rights Reserved. 25 */ 26 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 35 36 namespace Security 37 { 38 39 /* declare one entry in a table of MDSNameValuePairs */ 40 #define MNVP(attr) {attr, #attr} 41 42 /* the NULL entry which terminates all MDSNameValuePair tables */ 43 #define MNVP_END {0, NULL} 44 45 /*** 46 *** common attributes 47 ***/ 48 49 /* CSSM_SERVICE_MASK */ 50 const MDSNameValuePair MDSServiceNames[] = 51 { 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), 59 MNVP_END 60 }; 61 62 /* CSSM_ACL_SUBJECT_TYPE */ 63 const MDSNameValuePair MDSAclSubjectTypeNames[] = 64 { 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), 82 MNVP_END 83 }; 84 85 /* CSSM_ACL_AUTHORIZATION_TAG */ 86 const MDSNameValuePair MDSAclAuthTagNames[] = 87 { 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), 110 MNVP_END 111 }; 112 113 /*** 114 *** CSP attributes 115 ***/ 116 117 /* CSSM_CONTEXT_TYPE */ 118 const MDSNameValuePair MDSContextTypeNames[] = 119 { 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), 132 MNVP_END 133 }; 134 135 /* CSSM_ATTRIBUTE_TYPE */ 136 const MDSNameValuePair MDSAttributeTypeNames[] = 137 { 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), 178 MNVP_END 179 }; 180 181 /* CSSM_PADDING */ 182 const MDSNameValuePair MDSPaddingNames[] = 183 { 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), 195 MNVP_END 196 }; 197 198 /* CSSM_CSP_FLAGS */ 199 const MDSNameValuePair MDSCspFlagsNames[] = 200 { 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), 213 MNVP_END 214 }; 215 216 /* CSSM_ALGORITHMS */ 217 const MDSNameValuePair MDSAlgorithmNames[] = 218 { 219 MNVP(CSSM_ALGID_NONE), 220 MNVP(CSSM_ALGID_CUSTOM), 221 MNVP(CSSM_ALGID_DH), 222 MNVP(CSSM_ALGID_PH), 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), 327 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), 338 MNVP_END 339 }; 340 341 /* CSSM_ENCRYPT_MODE */ 342 const MDSNameValuePair MDSEncryptModeNames[] = 343 { 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), 386 MNVP_END 387 }; 388 389 /* CSSM_CSPTYPE */ 390 const MDSNameValuePair MDSCspTypeNames[] = 391 { 392 MNVP(CSSM_CSP_SOFTWARE), 393 MNVP(CSSM_CSP_HARDWARE), 394 MNVP(CSSM_CSP_HYBRID), 395 MNVP_END 396 }; 397 398 /* CSSM_USEE_TAG */ 399 const MDSNameValuePair MDSUseeTagsNames[] = 400 { 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), 406 MNVP(CSSM_USEE_SSL), 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), 412 MNVP_END 413 }; 414 415 /* CSSM_CSP_READER_FLAGS */ 416 const MDSNameValuePair MDSCspReaderFlagsNames[] = 417 { 418 MNVP(CSSM_CSP_RDR_TOKENPRESENT), 419 MNVP(CSSM_CSP_RDR_EXISTS), 420 MNVP(CSSM_CSP_RDR_HW), 421 MNVP_END 422 }; 423 424 /* CSSM_SC_FLAGS */ 425 const MDSNameValuePair MDSCspScFlagsNames[] = 426 { 427 MNVP(CSSM_CSP_TOK_RNG), 428 MNVP(CSSM_CSP_TOK_CLOCK_EXISTS), 429 MNVP_END 430 }; 431 432 /* CSSM_SAMPLE_TYPE */ 433 const MDSNameValuePair MDSSampleTypeNames[] = 434 { 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), 452 MNVP_END 453 }; 454 455 /* CSSM_CERT_TYPE, CSSM_CERT_ENCODING (cert type in high 16 bits) */ 456 const MDSNameValuePair MDSCertTypeNames[] = 457 { 458 /* CSSM_CERT_TYPE */ 459 MNVP(CSSM_CERT_UNKNOWN), 460 MNVP(CSSM_CERT_X_509v1), 461 MNVP(CSSM_CERT_X_509v2), 462 MNVP(CSSM_CERT_X_509v3), 463 MNVP(CSSM_CERT_PGP), 464 MNVP(CSSM_CERT_PGP), 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), 481 MNVP_END 482 }; 483 484 /* CSSM_CRL_TYPE, CSSM_CRL_ENCODING (CRL type in high 16 bits) */ 485 const MDSNameValuePair MDSCrlTypeNames[] = 486 { 487 /* CSSM_CRL_TYPE */ 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), 501 MNVP_END 502 }; 503 504 /* CSSM_CERT_BUNDLE_TYPE, CSSM_CERT_BUNDLE_ENCODING (bundle type in high 16 bits) */ 505 const MDSNameValuePair MDSCertBundleTypeNames[] = 506 { 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), 524 MNVP_END 525 }; 526 527 /* CSSM_CL_TEMPLATE_TYPE */ 528 const MDSNameValuePair MDSCertTemplateTypeNames[] = 529 { 530 MNVP(CSSM_CL_TEMPLATE_INTERMEDIATE_CERT), 531 MNVP(CSSM_CL_TEMPLATE_PKIX_CERTTEMPLATE), 532 MNVP_END 533 }; 534 535 /* CSSM_TP_AUTHORITY_REQUEST_CERTISSUE */ 536 const MDSNameValuePair MDSTpAuthRequestNames[] = 537 { 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), 546 MNVP_END 547 }; 548 549 /* CSSM_DLTYPE */ 550 const MDSNameValuePair MDSDlTypeNames[] = 551 { 552 MNVP(CSSM_DL_UNKNOWN), 553 MNVP(CSSM_DL_CUSTOM), 554 MNVP(CSSM_DL_LDAP), 555 MNVP(CSSM_DL_ODBC), 556 MNVP(CSSM_DL_PKCS11), 557 MNVP(CSSM_DL_FFS), 558 MNVP(CSSM_DL_MEMORY), 559 MNVP(CSSM_DL_REMOTEDIR), 560 MNVP_END 561 }; 562 563 /* CSSM_DB_CONJUNCTIVE */ 564 const MDSNameValuePair MDSDbConjunctiveNames[] = 565 { 566 MNVP(CSSM_DB_NONE), 567 MNVP(CSSM_DB_AND), 568 MNVP(CSSM_DB_OR), 569 MNVP_END 570 }; 571 572 /* CSSM_DB_OPERATOR */ 573 const MDSNameValuePair MDSDbOperatorNames[] = 574 { 575 MNVP(CSSM_DB_EQUAL), 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), 582 MNVP_END 583 }; 584 585 /* CSSM_NET_PROTOCOL */ 586 const MDSNameValuePair MDSNetProtocolNames[] = 587 { 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), 600 MNVP_END 601 }; 602 603 /* CSSM_DB_RETRIEVAL_MODES */ 604 const MDSNameValuePair MDSDbRetrievalModeNames[] = 605 { 606 MNVP(CSSM_DB_TRANSACTIONAL_MODE), 607 MNVP(CSSM_DB_FILESYSTEMSCAN_MODE), 608 MNVP_END 609 }; 610 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[] = 615 { 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), 620 MNVP_END 621 }; 622 623 624 static bool isNumericStr( 625 const char *str, 626 bool hexOK) 627 { 628 while(*str) { 629 char c = *str++; 630 if(isdigit(c)) { 631 continue; 632 } 633 if(hexOK) { 634 if((c >= 'a') && (c <= 'f')) { 635 continue; 636 } 637 if((c >= 'A') && (c <= 'F')) { 638 continue; 639 } 640 } 641 return false; 642 } 643 return true; 644 } 645 646 /* convert ASCII hex digit - assumed validated already */ 647 static unsigned char hexDigit( 648 unsigned char d) 649 { 650 if((d >= '0') && (d <= '9')) { 651 return d - '0'; 652 } 653 else if((d >= 'a') && (d <= 'f')) { 654 return d - 'a' + 10; 655 } 656 else { 657 return d - 'A' + 10; 658 } 659 } 660 661 static unsigned strToHex( 662 const char *str) 663 { 664 unsigned rtn = 0; 665 while(*str) { 666 rtn <<= 4; 667 rtn |= hexDigit(*str++); 668 } 669 return rtn; 670 } 671 672 /* 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. 677 */ 678 CSSM_RETURN MDSAttrNameToValue( 679 const char *name, 680 const MDSNameValuePair *table, // optional, string must be decimal or hex if NULL 681 uint32 &value) // RETURNED 682 { 683 if(name == NULL) { 684 return CSSMERR_CSSM_MDS_ERROR; 685 } 686 if(*name == '\0') { 687 /* empty string, legal */ 688 value = 0; 689 return CSSM_OK; 690 } 691 692 /* prefixed by "<<"? */ 693 bool shiftBy16 = false; 694 if((name != NULL) && (name[0] == '<') && (name[1] == '<')) { 695 shiftBy16 = true; 696 name += 2; 697 } 698 699 /* attempt to find the string in lookup table */ 700 if(table != NULL) { 701 while(table->name != NULL) { 702 if(!strcmp(table->name, name)) { 703 value = table->value; 704 if(shiftBy16) { 705 value <<= 16; 706 } 707 return CSSM_OK; 708 } 709 table++; 710 } 711 } 712 713 /* not found - is the string a number? */ 714 if(isdigit(name[0])) { 715 bool isNum; 716 bool isHex = false; 717 if((name[0] == '0') && (name[1] == 'x')) { 718 /* hex - skip first two chars */ 719 isHex = true; 720 name += 2; 721 isNum = isNumericStr(name, true); 722 } 723 else { 724 isNum = isNumericStr(name, false); 725 } 726 if(!isNum) { 727 return CSSMERR_CSSM_MDS_ERROR; 728 } 729 if(isHex) { 730 value = strToHex(name); 731 } 732 else { 733 value = atoi(name); 734 } 735 if(shiftBy16) { 736 value <<= 16; 737 } 738 return CSSM_OK; 739 } 740 else { 741 /* not a number */ 742 return CSSMERR_CSSM_MDS_ERROR; 743 } 744 } 745 746 747 } // end namespace Security