/ OSX / libsecurity_keychain / lib / SecBase.cpp
SecBase.cpp
   1  /*
   2   * Copyright (c) 2003-2013 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  #include <Security/SecBase.h>
  25  #include <Security/SecBasePriv.h>
  26  #include <Security/SecKeychainPriv.h>
  27  #include <security_utilities/threading.h>
  28  #include <utilities/SecCFRelease.h>
  29  #include "SecBridge.h"
  30  #include <Security/SecFramework.h>
  31  
  32  static CFStringRef copyErrorMessageFromBundle(OSStatus status,CFStringRef tableName);
  33  
  34  // caller MUST release the string, since it is gotten with "CFCopyLocalizedStringFromTableInBundle"
  35  // intended use of reserved param is to pass in CFStringRef with name of the Table for lookup
  36  // Will look by default in "SecErrorMessages.strings" in the resources of Security.framework.
  37  
  38  
  39  CFStringRef
  40  SecCopyErrorMessageString(OSStatus status, void *reserved)
  41  {
  42  	try
  43  	{
  44  		CFStringRef result = copyErrorMessageFromBundle(status,CFSTR("SecErrorMessages"));
  45  		if (result == NULL)
  46  			result = copyErrorMessageFromBundle(status,CFSTR("SecDebugErrorMessages"));
  47  		
  48  		if (result == NULL)
  49  		{
  50  			if (status >= errSecErrnoBase && status <= errSecErrnoLimit)
  51  			{
  52  				result = CFStringCreateWithFormat (NULL, NULL, CFSTR("UNIX[%s]"), strerror(status-errSecErrnoBase));
  53  			}
  54  			else
  55  			{
  56  				// no error message found, so format a faked-up error message from the status
  57  				result = CFStringCreateWithFormat(NULL, NULL, CFSTR("OSStatus %d"), (int)status);
  58  			}
  59  		}
  60  		
  61  		return result;
  62  	}
  63  	catch (...)
  64  	{
  65  		return NULL;
  66  	}
  67  }
  68  
  69  
  70  void
  71  cssmPerror(const char *how, CSSM_RETURN error)
  72  {
  73  	try
  74  	{
  75  		const char* errMsg = cssmErrorString(error);
  76  		fprintf(stderr, "%s: %s\n", how ? how : "error", errMsg);
  77  	}
  78  	catch (...)
  79  	{
  80  		fprintf(stderr, "failed to print error: %lu\n", (unsigned long)error);
  81  	}
  82  }
  83  
  84  
  85  const char *
  86  cssmErrorString(CSSM_RETURN error)
  87  {
  88  	static ThreadNexus<string> lastError;
  89  	
  90  	try {
  91  		string err;
  92  		
  93  		if (error >= errSecErrnoBase && error <= errSecErrnoLimit)
  94  		{
  95  			err = string ("UNIX[") + strerror(error - errSecErrnoBase) + "]";
  96  		}
  97  		else
  98  		{
  99  			CFStringRef result = copyErrorMessageFromBundle(error,CFSTR("SecErrorMessages"));
 100  			if (result == NULL)
 101  				result = copyErrorMessageFromBundle(error,CFSTR("SecDebugErrorMessages"));
 102  			err = cfString(result, errSecErrorStringNotAvailable);
 103              CFReleaseSafe(result);
 104  		}
 105  		
 106  		if (err.empty())
 107  		{
 108  			char buf[200];
 109  			snprintf(buf, sizeof(buf), "unknown error %ld=%lx", (long) error, (long) error);
 110  			err = buf;
 111  		}
 112  
 113  		lastError() = err;
 114  		return lastError().c_str();
 115  	}
 116  	catch (...)
 117  	{
 118  		char buf[256];
 119  		snprintf (buf, sizeof (buf), "unknown error %ld=%lx", (long) error, (long) error);
 120  		lastError() = buf;
 121  		return lastError().c_str();
 122  	}
 123  }
 124  
 125  
 126  static ModuleNexus<Mutex> gBundleLock;
 127  
 128  CFStringRef
 129  copyErrorMessageFromBundle(OSStatus status,CFStringRef tableName)
 130  {
 131  	StLock<Mutex> _lock(gBundleLock());
 132  
 133      CFStringRef errorString = nil;
 134      CFStringRef keyString = nil;
 135      CFBundleRef secBundle = NULL;
 136  
 137      // Make a bundle instance using the URLRef.
 138      secBundle = CFBundleGetBundleWithIdentifier(CFSTR("com.apple.security"));
 139      if (!secBundle)
 140          goto xit;
 141  	
 142      // Convert status to Int32 string representation, e.g. "-25924"
 143      keyString = CFStringCreateWithFormat (kCFAllocatorDefault,NULL,CFSTR("%d"),(int)status);
 144      if (!keyString) {
 145          goto xit;
 146      }
 147  
 148      errorString = CFCopyLocalizedStringFromTableInBundle(keyString,tableName,secBundle,NULL);
 149      if (CFStringCompare(errorString, keyString, 0)==kCFCompareEqualTo)	// no real error message
 150  	{
 151  		if (errorString)
 152  			CFRelease(errorString);	
 153  		 errorString = nil;
 154  	}
 155  xit:
 156      if (keyString)
 157          CFRelease(keyString);	
 158  
 159      return errorString;
 160  }
 161  
 162  /* Convert a possible CSSM type osStatus error to a more Keychain friendly OSStatus. */
 163  OSStatus SecKeychainErrFromOSStatus(OSStatus osStatus)
 164  {
 165  	if (CSSM_ERR_IS_CONVERTIBLE(osStatus))
 166  	{
 167  		switch (CSSM_ERRCODE(osStatus))
 168  		{
 169  			// CONVERTIBLE ERROR CODES.
 170  			case CSSM_ERRCODE_SERVICE_NOT_AVAILABLE:
 171  				return errSecNotAvailable;
 172  			case CSSM_ERRCODE_USER_CANCELED:
 173  				return errSecUserCanceled;
 174  			case CSSM_ERRCODE_OPERATION_AUTH_DENIED:
 175  				return errSecAuthFailed;
 176  			case CSSM_ERRCODE_NO_USER_INTERACTION:
 177  				return errSecInteractionNotAllowed;
 178  			case CSSM_ERRCODE_IN_DARK_WAKE:
 179  				return errSecInDarkWake;
 180  			case CSSM_ERRCODE_OS_ACCESS_DENIED:
 181                  return errSecWrPerm;
 182  			case CSSM_ERRCODE_INSUFFICIENT_CLIENT_IDENTIFICATION:
 183  				return errSecInsufficientClientID;
 184  			case CSSM_ERRCODE_DEVICE_RESET:
 185  				return errSecDeviceReset;
 186  			case CSSM_ERRCODE_DEVICE_FAILED:
 187  				return errSecDeviceFailed;
 188  			case CSSM_ERRCODE_INTERNAL_ERROR:
 189  				return errSecInternalError;
 190  			case CSSM_ERRCODE_MEMORY_ERROR:
 191  				return errSecMemoryError;
 192  			case CSSM_ERRCODE_MDS_ERROR:
 193  				return errSecMDSError;
 194  			case CSSM_ERRCODE_INVALID_POINTER:
 195  			case CSSM_ERRCODE_INVALID_INPUT_POINTER:
 196  			case CSSM_ERRCODE_INVALID_OUTPUT_POINTER:
 197  			case CSSM_ERRCODE_INVALID_CERTGROUP_POINTER:
 198  			case CSSM_ERRCODE_INVALID_CERT_POINTER:
 199  			case CSSM_ERRCODE_INVALID_CRL_POINTER:
 200  			case CSSM_ERRCODE_INVALID_FIELD_POINTER:
 201  			case CSSM_ERRCODE_INVALID_DB_LIST_POINTER:
 202  				return errSecInvalidPointer;
 203  			case CSSM_ERRCODE_FUNCTION_NOT_IMPLEMENTED:
 204  				return errSecUnimplemented;		
 205  			case CSSM_ERRCODE_SELF_CHECK_FAILED:
 206  			case CSSMERR_CL_SELF_CHECK_FAILED:
 207  			case CSSMERR_DL_SELF_CHECK_FAILED:
 208  				return errSecSelfCheckFailed;
 209  			case CSSM_ERRCODE_FUNCTION_FAILED:
 210  				return errSecFunctionFailed;
 211  			case CSSM_ERRCODE_MODULE_MANIFEST_VERIFY_FAILED:
 212  				return errSecModuleManifestVerifyFailed;
 213  			case CSSM_ERRCODE_INVALID_GUID:
 214  				return errSecInvalidGUID;
 215  			case CSSM_ERRCODE_OBJECT_USE_AUTH_DENIED:
 216  			case CSSM_ERRCODE_OBJECT_MANIP_AUTH_DENIED:
 217  				return errAuthorizationDenied;
 218  			case CSSM_ERRCODE_OBJECT_ACL_NOT_SUPPORTED:	
 219  			case CSSM_ERRCODE_OBJECT_ACL_REQUIRED:
 220  			case CSSM_ERRCODE_INVALID_ACL_SUBJECT_VALUE:
 221  			case CSSM_ERRCODE_ACL_SUBJECT_TYPE_NOT_SUPPORTED:
 222  			case CSSM_ERRCODE_INVALID_ACL_EDIT_MODE:
 223  			case CSSM_ERRCODE_INVALID_NEW_ACL_ENTRY:
 224  			case CSSM_ERRCODE_INVALID_NEW_ACL_OWNER:
 225  				return errSecInvalidACL;
 226  			case CSSM_ERRCODE_INVALID_ACCESS_CREDENTIALS:
 227  				return errSecInvalidAccessCredentials;
 228  			case CSSM_ERRCODE_INVALID_ACL_BASE_CERTS:
 229  			case CSSM_ERRCODE_ACL_BASE_CERTS_NOT_SUPPORTED:
 230  				return errSecInvalidCertificateGroup;
 231  			case CSSM_ERRCODE_INVALID_SAMPLE_VALUE:
 232  				return errSecInvalidSampleValue;
 233  			case CSSM_ERRCODE_SAMPLE_VALUE_NOT_SUPPORTED:
 234  				return errSecInvalidSampleValue;
 235  			case CSSM_ERRCODE_INVALID_ACL_CHALLENGE_CALLBACK:
 236  				return errSecInvalidCallback;
 237  			case CSSM_ERRCODE_ACL_CHALLENGE_CALLBACK_FAILED:
 238  				return errSecCallbackFailed;
 239  			case CSSM_ERRCODE_INVALID_ACL_ENTRY_TAG:
 240  			case CSSM_ERRCODE_UNKNOWN_TAG:
 241  				return errSecUnknownTag;
 242  			case CSSM_ERRCODE_ACL_ENTRY_TAG_NOT_FOUND:
 243  				return errSecTagNotFound;
 244  			case CSSM_ERRCODE_ACL_CHANGE_FAILED:
 245  				return errSecACLChangeFailed;
 246  			case CSSM_ERRCODE_ACL_DELETE_FAILED:
 247  				return errSecACLDeleteFailed;
 248  			case CSSM_ERRCODE_ACL_REPLACE_FAILED:
 249  				return errSecACLReplaceFailed;
 250  			case CSSM_ERRCODE_ACL_ADD_FAILED:
 251  				return errSecACLAddFailed;
 252  			case CSSM_ERRCODE_INVALID_CONTEXT_HANDLE:
 253  			case CSSM_ERRCODE_INVALID_DB_HANDLE:
 254  			case CSSM_ERRCODE_INVALID_CSP_HANDLE:
 255  			case CSSM_ERRCODE_INVALID_DL_HANDLE:
 256  			case CSSM_ERRCODE_INVALID_CL_HANDLE:
 257  			case CSSM_ERRCODE_INVALID_TP_HANDLE:
 258  			case CSSM_ERRCODE_INVALID_KR_HANDLE:
 259  			case CSSM_ERRCODE_INVALID_AC_HANDLE:
 260  				return errSecInvalidHandle;
 261  			case CSSM_ERRCODE_INCOMPATIBLE_VERSION:
 262  				return errSecIncompatibleVersion;
 263  			case CSSM_ERRCODE_INVALID_DATA:
 264  				return errSecInvalidData;
 265  			case CSSM_ERRCODE_CRL_ALREADY_SIGNED:
 266  				return errSecCRLAlreadySigned;
 267  			case CSSM_ERRCODE_INVALID_NUMBER_OF_FIELDS:
 268  				return errSecInvalidNumberOfFields;
 269  			case CSSM_ERRCODE_VERIFICATION_FAILURE:
 270  				return errSecVerificationFailure;
 271  			case CSSM_ERRCODE_PRIVILEGE_NOT_GRANTED:
 272  				return errSecPrivilegeNotGranted;
 273  			case CSSM_ERRCODE_INVALID_DB_LIST:
 274  				return errSecInvalidDBList;
 275  			case CSSM_ERRCODE_UNKNOWN_FORMAT:
 276  				return errSecUnknownFormat;
 277  			case CSSM_ERRCODE_INVALID_PASSTHROUGH_ID:
 278  				return errSecInvalidPassthroughID;
 279  			case CSSM_ERRCODE_INVALID_NETWORK_ADDR:
 280  				return errSecInvalidNetworkAddress;
 281  			case CSSM_ERRCODE_INVALID_CRYPTO_DATA:
 282  				return errSecInvalidData;
 283  		}
 284  	}
 285  	switch (osStatus)
 286  	{
 287  		// Some CSSM errors mapped to OSStatus-type (SnowLeopard and earlier).
 288  		//
 289  		case CSSMERR_DL_RECORD_NOT_FOUND:
 290  		case CSSMERR_APPLETP_CERT_NOT_FOUND_FROM_ISSUER:
 291  		case CSSMERR_CSP_PRIVATE_KEY_NOT_FOUND:
 292  			return errSecItemNotFound;
 293  		case CSSMERR_DL_INVALID_UNIQUE_INDEX_DATA: 
 294  		case CSSMERR_CSP_PRIVATE_KEY_ALREADY_EXISTS: 
 295  		case CSSMERR_CSP_KEY_LABEL_ALREADY_EXISTS:
 296  			return errSecDuplicateItem;
 297  		case CSSMERR_DL_DATABASE_CORRUPT:
 298  			return errSecInvalidKeychain;
 299  		case CSSMERR_DL_DATASTORE_DOESNOT_EXIST:
 300  			return errSecNoSuchKeychain;
 301  		case CSSMERR_DL_DATASTORE_ALREADY_EXISTS:
 302  			return errSecDuplicateKeychain;
 303  		case CSSMERR_APPLEDL_DISK_FULL:
 304  			return errSecDiskFull;
 305  		case CSSMERR_DL_INVALID_OPEN_PARAMETERS: 
 306  		case CSSMERR_APPLEDL_INVALID_OPEN_PARAMETERS:
 307  		case CSSMERR_APPLE_DOTMAC_REQ_SERVER_PARAM:
 308  			return errSecParam;
 309  		case CSSMERR_DL_INVALID_FIELD_NAME: 
 310  		case CSSMERR_CSSM_INVALID_ATTRIBUTE:
 311  			return errSecNoSuchAttr;
 312  		case CSSMERR_DL_OS_ACCESS_DENIED: 
 313  		case CSSMERR_CSP_OS_ACCESS_DENIED:
 314  		case CSSMERR_TP_OS_ACCESS_DENIED: 
 315  		case CSSMERR_AC_OS_ACCESS_DENIED: 
 316  		case CSSMERR_CL_OS_ACCESS_DENIED:
 317  			return errSecWrPerm;
 318  		case CSSMERR_CSSM_BUFFER_TOO_SMALL:
 319  			return errSecBufferTooSmall;
 320  		case CSSMERR_CSSM_FUNCTION_NOT_IMPLEMENTED:
 321  		case CSSMERR_CSP_FUNCTION_NOT_IMPLEMENTED:
 322  		case CSSMERR_TP_FUNCTION_NOT_IMPLEMENTED:
 323  		case CSSMERR_AC_FUNCTION_NOT_IMPLEMENTED:
 324  		case CSSMERR_CL_FUNCTION_NOT_IMPLEMENTED:
 325  		case CSSMERR_DL_FUNCTION_NOT_IMPLEMENTED:
 326  		case CSSMERR_APPLE_DOTMAC_REQ_SERVER_UNIMPL:
 327  			return errSecUnimplemented;
 328  		case CSSMERR_CSSM_INTERNAL_ERROR:
 329  		case CSSMERR_CSP_INTERNAL_ERROR:
 330  		case CSSMERR_TP_INTERNAL_ERROR:
 331  		case CSSMERR_AC_INTERNAL_ERROR: 
 332  		case CSSMERR_CL_INTERNAL_ERROR:
 333  		case CSSMERR_DL_INTERNAL_ERROR:
 334  			return errSecInternalError;
 335  		case CSSMERR_CSSM_MEMORY_ERROR:
 336  		case CSSMERR_CSP_MEMORY_ERROR:
 337  		case CSSMERR_TP_MEMORY_ERROR:
 338  		case CSSMERR_AC_MEMORY_ERROR:
 339  		case CSSMERR_CSP_DEVICE_MEMORY_ERROR: 
 340  		case CSSMERR_CL_MEMORY_ERROR:
 341  		case CSSMERR_DL_MEMORY_ERROR:
 342  			return errSecMemoryError;
 343  		case CSSMERR_CSSM_MDS_ERROR:
 344  		case CSSMERR_CSP_MDS_ERROR:
 345  		case CSSMERR_TP_MDS_ERROR:
 346  		case CSSMERR_AC_MDS_ERROR:
 347  		case CSSMERR_CL_MDS_ERROR:
 348  		case CSSMERR_DL_MDS_ERROR:
 349  			return errSecMDSError;
 350  		case CSSMERR_CSSM_INVALID_POINTER:
 351  		case CSSMERR_CSP_INVALID_POINTER:
 352  		case CSSMERR_TP_INVALID_POINTER:
 353  		case CSSMERR_AC_INVALID_POINTER:
 354  		case CSSMERR_CL_INVALID_POINTER:
 355  		case CSSMERR_DL_INVALID_POINTER:
 356  		case CSSMERR_CSSM_INVALID_INPUT_POINTER:
 357  		case CSSMERR_CSP_INVALID_INPUT_POINTER:
 358  		case CSSMERR_TP_INVALID_INPUT_POINTER: 
 359  		case CSSMERR_AC_INVALID_INPUT_POINTER:
 360  		case CSSMERR_CL_INVALID_INPUT_POINTER:
 361  		case CSSMERR_DL_INVALID_INPUT_POINTER:
 362  		case CSSMERR_TP_INVALID_DB_LIST_POINTER:
 363  		case CSSMERR_AC_INVALID_DB_LIST_POINTER:
 364  		case CSSMERR_DL_INVALID_DB_LIST_POINTER:
 365  		case CSSMERR_TP_INVALID_CERTGROUP_POINTER:
 366  		case CSSMERR_TP_INVALID_CERT_POINTER:
 367  		case CSSMERR_TP_INVALID_CRL_POINTER:
 368  		case CSSMERR_TP_INVALID_FIELD_POINTER:
 369  		case CSSMERR_CSP_INVALID_KEY_POINTER:
 370  		case CSSMERR_TP_INVALID_CALLERAUTH_CONTEXT_POINTER:
 371  		case CSSMERR_TP_INVALID_IDENTIFIER_POINTER:
 372  		case CSSMERR_TP_INVALID_CRLGROUP_POINTER:
 373  		case CSSMERR_TP_INVALID_TUPLEGROUP_POINTER:
 374  		case CSSMERR_CL_INVALID_CERTGROUP_POINTER:
 375  		case CSSMERR_CL_INVALID_CERT_POINTER:
 376  		case CSSMERR_CL_INVALID_CRL_POINTER:
 377  		case CSSMERR_CL_INVALID_FIELD_POINTER:
 378  		case CSSMERR_CL_INVALID_BUNDLE_POINTER:
 379  		case CSSMERR_CSSM_INVALID_OUTPUT_POINTER:
 380  		case CSSMERR_CSP_INVALID_OUTPUT_POINTER:
 381  		case CSSMERR_TP_INVALID_OUTPUT_POINTER: 
 382  		case CSSMERR_AC_INVALID_OUTPUT_POINTER:
 383  		case CSSMERR_CL_INVALID_OUTPUT_POINTER:
 384  		case CSSMERR_DL_INVALID_OUTPUT_POINTER:
 385  			return errSecInvalidPointer;
 386  		case CSSMERR_CSSM_FUNCTION_FAILED:
 387  		case CSSMERR_CSP_FUNCTION_FAILED:
 388  		case CSSMERR_TP_FUNCTION_FAILED:
 389  		case CSSMERR_AC_FUNCTION_FAILED:
 390  		case CSSMERR_CL_FUNCTION_FAILED:
 391  		case CSSMERR_DL_FUNCTION_FAILED:
 392  			return errSecFunctionFailed;
 393  		case CSSMERR_CSP_INVALID_DATA:
 394  		case CSSMERR_TP_INVALID_DATA:
 395  		case CSSMERR_AC_INVALID_DATA:
 396  		case CSSMERR_CL_INVALID_DATA:
 397  		case CSSMERR_CSP_INVALID_CRYPTO_DATA:
 398  		case CSSMERR_CSP_INVALID_DATA_COUNT:
 399  		case CSSMERR_TP_INVALID_ACTION_DATA:
 400  			return errSecInvalidData;
 401  		case CSSMERR_TP_INVALID_DB_LIST:
 402  		case CSSMERR_AC_INVALID_DB_LIST:
 403  			return errSecInvalidDBList;
 404  		case CSSMERR_CSP_INVALID_PASSTHROUGH_ID:
 405  		case CSSMERR_TP_INVALID_PASSTHROUGH_ID:
 406  		case CSSMERR_AC_INVALID_PASSTHROUGH_ID: 
 407  		case CSSMERR_CL_INVALID_PASSTHROUGH_ID: 
 408  		case CSSMERR_DL_INVALID_PASSTHROUGH_ID:
 409  			return errSecInvalidPassthroughID;
 410  		case CSSMERR_TP_INVALID_CSP_HANDLE:
 411  		case CSSMERR_TP_INVALID_CL_HANDLE:
 412  		case CSSMERR_TP_INVALID_DL_HANDLE:
 413  		case CSSMERR_AC_INVALID_TP_HANDLE:
 414  		case CSSMERR_AC_INVALID_DL_HANDLE:
 415  		case CSSMERR_DL_INVALID_DL_HANDLE:
 416  		case CSSMERR_AC_INVALID_CL_HANDLE:
 417  		case CSSMERR_DL_INVALID_CL_HANDLE:
 418  		case CSSMERR_DL_INVALID_CSP_HANDLE:
 419  		case CSSMERR_TP_INVALID_DB_HANDLE:
 420  		case CSSMERR_CSSM_INVALID_ADDIN_HANDLE:
 421  		case CSSMERR_CSSM_INVALID_CONTEXT_HANDLE:
 422  		case CSSMERR_CL_INVALID_CACHE_HANDLE:
 423  		case CSSMERR_CL_INVALID_RESULTS_HANDLE:
 424  		case CSSMERR_DL_INVALID_RESULTS_HANDLE:
 425  		case CSSMERR_TP_INVALID_KEYCACHE_HANDLE:
 426  		case CSSMERR_CSP_INVALID_CONTEXT_HANDLE:
 427  		case CSSMERR_TP_INVALID_CONTEXT_HANDLE:
 428  		case CSSMERR_AC_INVALID_CONTEXT_HANDLE:
 429  		case CSSMERR_CL_INVALID_CONTEXT_HANDLE:
 430  			return errSecInvalidHandle;
 431  		case CSSMERR_TP_CRL_ALREADY_SIGNED:
 432  		case CSSMERR_CL_CRL_ALREADY_SIGNED:
 433  			return errSecCRLAlreadySigned;
 434  		case CSSMERR_TP_INVALID_NUMBER_OF_FIELDS:
 435  		case CSSMERR_CL_INVALID_NUMBER_OF_FIELDS:
 436  			return errSecInvalidNumberOfFields;
 437  		case CSSMERR_TP_VERIFICATION_FAILURE:
 438  		case CSSMERR_CL_VERIFICATION_FAILURE:
 439  			return errSecVerificationFailure;
 440  		case CSSMERR_TP_INVALID_NETWORK_ADDR:
 441  		case CSSMERR_DL_INVALID_NETWORK_ADDR:
 442  			return errSecInvalidNetworkAddress;
 443  		case CSSMERR_TP_UNKNOWN_TAG:
 444  		case CSSMERR_CL_UNKNOWN_TAG:
 445  		case CSSMERR_CSP_INVALID_ACL_ENTRY_TAG:
 446  		case CSSMERR_DL_INVALID_ACL_ENTRY_TAG:
 447  		case CSSMERR_DL_INVALID_SELECTION_TAG:
 448  			return errSecUnknownTag;
 449  		case CSSMERR_CSP_INVALID_SIGNATURE:
 450  		case CSSMERR_TP_INVALID_SIGNATURE:
 451  			return errSecInvalidSignature;
 452  		case CSSMERR_CSSM_USER_CANCELED:
 453  		case CSSMERR_CSP_USER_CANCELED:
 454  		case CSSMERR_TP_USER_CANCELED:
 455  		case CSSMERR_AC_USER_CANCELED:
 456  		case CSSMERR_CL_USER_CANCELED:
 457  		case CSSMERR_DL_USER_CANCELED:
 458  			return errSecUserCanceled;
 459  		case CSSMERR_CSSM_NO_USER_INTERACTION:
 460  		case CSSMERR_CSP_NO_USER_INTERACTION:
 461  		case CSSMERR_TP_NO_USER_INTERACTION:
 462  		case CSSMERR_AC_NO_USER_INTERACTION:
 463  		case CSSMERR_CL_NO_USER_INTERACTION:
 464  		case CSSMERR_DL_NO_USER_INTERACTION:
 465  			return errSecInteractionNotAllowed;
 466  		case CSSMERR_CSSM_IN_DARK_WAKE:
 467  		case CSSMERR_CSP_IN_DARK_WAKE:
 468  		case CSSMERR_TP_IN_DARK_WAKE:
 469  		case CSSMERR_AC_IN_DARK_WAKE:
 470  		case CSSMERR_CL_IN_DARK_WAKE:
 471  		case CSSMERR_DL_IN_DARK_WAKE:
 472  			return errSecInDarkWake;
 473  		case CSSMERR_CSSM_SERVICE_NOT_AVAILABLE:
 474  		case CSSMERR_CSP_SERVICE_NOT_AVAILABLE:
 475  		case CSSMERR_TP_SERVICE_NOT_AVAILABLE:
 476  		case CSSMERR_AC_SERVICE_NOT_AVAILABLE:
 477  		case CSSMERR_CL_SERVICE_NOT_AVAILABLE:
 478  		case CSSMERR_DL_SERVICE_NOT_AVAILABLE:
 479  			return errSecServiceNotAvailable;
 480  		case CSSMERR_CSSM_INSUFFICIENT_CLIENT_IDENTIFICATION:
 481  		case CSSMERR_CSP_INSUFFICIENT_CLIENT_IDENTIFICATION:
 482  		case CSSMERR_TP_INSUFFICIENT_CLIENT_IDENTIFICATION:
 483  		case CSSMERR_AC_INSUFFICIENT_CLIENT_IDENTIFICATION:
 484  		case CSSMERR_CL_INSUFFICIENT_CLIENT_IDENTIFICATION:
 485  		case CSSMERR_DL_INSUFFICIENT_CLIENT_IDENTIFICATION:
 486  			return errSecInsufficientClientID;
 487  		case CSSMERR_CSSM_DEVICE_RESET:
 488  		case CSSMERR_CSP_DEVICE_RESET:
 489  		case CSSMERR_TP_DEVICE_RESET:
 490  		case CSSMERR_AC_DEVICE_RESET:
 491  		case CSSMERR_CL_DEVICE_RESET:
 492  		case CSSMERR_DL_DEVICE_RESET:
 493  			return errSecDeviceReset;
 494  		case CSSMERR_CSSM_DEVICE_FAILED:
 495  		case CSSMERR_CSP_DEVICE_FAILED:
 496  		case CSSMERR_TP_DEVICE_FAILED:
 497  		case CSSMERR_AC_DEVICE_FAILED:
 498  		case CSSMERR_CL_DEVICE_FAILED:
 499  		case CSSMERR_DL_DEVICE_FAILED:
 500  			return errSecDeviceFailed;
 501  		case CSSMERR_APPLE_DOTMAC_REQ_SERVER_AUTH:
 502  		case CSSMERR_CSSM_EMM_AUTHENTICATE_FAILED:
 503  		case CSSMERR_CSSM_ADDIN_AUTHENTICATE_FAILED:
 504  		case CSSMERR_CSP_OPERATION_AUTH_DENIED:
 505  		case CSSMERR_CSP_OBJECT_USE_AUTH_DENIED:
 506  		case CSSMERR_CSP_OBJECT_MANIP_AUTH_DENIED:
 507  		case CSSMERR_TP_AUTHENTICATION_FAILED:
 508  		case CSSMERR_DL_OPERATION_AUTH_DENIED:
 509  		case CSSMERR_DL_OBJECT_USE_AUTH_DENIED:
 510  		case CSSMERR_DL_OBJECT_MANIP_AUTH_DENIED:
 511  			return errAuthorizationDenied;
 512  		case CSSMERR_CSSM_SCOPE_NOT_SUPPORTED:
 513  		case CSSMERR_CL_SCOPE_NOT_SUPPORTED:
 514  		case CSSMERR_CL_INVALID_SCOPE:
 515  			return errSecInvalidScope;
 516  		case CSSMERR_TP_INVALID_NAME:
 517  		case CSSMERR_DL_INVALID_DB_NAME:
 518  			return errSecInvalidName;
 519  		case CSSMERR_APPLETP_BAD_CERT_FROM_ISSUER:
 520  		case CSSMERR_TP_INVALID_CERTIFICATE:
 521  		case CSSMERR_TP_INVALID_ANCHOR_CERT:
 522  		case CSSMERR_APPLETP_CRL_INVALID_ANCHOR_CERT:
 523  		case CSSMERR_APPLETP_OCSP_INVALID_ANCHOR_CERT:
 524  			return errSecInvalidCertificateRef;
 525  		case CSSMERR_CSP_ACL_ENTRY_TAG_NOT_FOUND:
 526  		case CSSMERR_DL_ACL_ENTRY_TAG_NOT_FOUND:
 527  			return errSecTagNotFound;
 528  		case CSSMERR_DL_UNSUPPORTED_QUERY:
 529  		case CSSMERR_DL_INVALID_QUERY:
 530  			return errSecInvalidQuery;
 531  		case CSSMERR_CSP_INVALID_ACL_CHALLENGE_CALLBACK:
 532  		case CSSMERR_TP_INVALID_CALLBACK: 
 533  		case CSSMERR_DL_INVALID_ACL_CHALLENGE_CALLBACK:
 534  			return errSecInvalidCallback;
 535  		case CSSMERR_CSP_ACL_CHALLENGE_CALLBACK_FAILED:
 536  		case CSSMERR_CSP_CRYPTO_DATA_CALLBACK_FAILED:
 537  		case CSSMERR_DL_ACL_CHALLENGE_CALLBACK_FAILED:
 538  			return errSecCallbackFailed;
 539  		case CSSMERR_TP_INVALID_CERTGROUP:
 540  		case CSSMERR_TP_CERTGROUP_INCOMPLETE:
 541  		case CSSMERR_DL_INVALID_ACL_BASE_CERTS:
 542  		case CSSMERR_DL_ACL_BASE_CERTS_NOT_SUPPORTED:
 543  		case CSSMERR_CSP_INVALID_ACL_BASE_CERTS:
 544  			return errSecInvalidCertificateGroup;
 545  		case CSSMERR_CSP_ACL_DELETE_FAILED:
 546  		case CSSMERR_DL_ACL_DELETE_FAILED:
 547  			return errSecACLDeleteFailed;
 548  		case CSSMERR_CSP_ACL_REPLACE_FAILED:
 549  		case CSSMERR_DL_ACL_REPLACE_FAILED:
 550  			return errSecACLReplaceFailed;
 551  		case CSSMERR_CSP_ACL_ADD_FAILED:
 552  		case CSSMERR_DL_ACL_ADD_FAILED:
 553  			return errSecACLAddFailed;
 554  		case CSSMERR_DL_ACL_CHANGE_FAILED:
 555  		case CSSMERR_CSP_ACL_CHANGE_FAILED:
 556  			return errSecACLChangeFailed;
 557  		case CSSMERR_CSSM_PRIVILEGE_NOT_GRANTED:
 558  		case CSSMERR_CSP_PRIVILEGE_NOT_GRANTED:
 559  			return errSecPrivilegeNotGranted;
 560  		case CSSMERR_CSP_INVALID_ACCESS_CREDENTIALS:
 561  		case CSSMERR_DL_INVALID_ACCESS_CREDENTIALS:
 562  			return errSecInvalidAccessCredentials;
 563  		case CSSMERR_DL_INVALID_RECORD_INDEX:
 564  		case CSSMERR_DL_INVALID_RECORDTYPE:
 565  		case CSSMERR_DL_UNSUPPORTED_RECORDTYPE:
 566  		case CSSMERR_DL_INVALID_RECORD_UID:
 567  		case CSSMERR_DL_STALE_UNIQUE_RECORD:
 568  			return errSecInvalidRecord;
 569  		case CSSMERR_CSP_INVALID_KEY:
 570  		case CSSMERR_CSP_INVALID_KEY_REFERENCE:
 571  		case CSSMERR_CSP_INVALID_KEY_CLASS:
 572  			return errSecInvalidKeyRef;
 573  		case CSSMERR_CSP_OBJECT_ACL_NOT_SUPPORTED:
 574  		case CSSMERR_CSP_OBJECT_ACL_REQUIRED:
 575  		case CSSMERR_CSP_ACL_BASE_CERTS_NOT_SUPPORTED:
 576  		case CSSMERR_CSP_INVALID_ACL_SUBJECT_VALUE:
 577  		case CSSMERR_CSP_ACL_SUBJECT_TYPE_NOT_SUPPORTED:
 578  		case CSSMERR_DL_OBJECT_ACL_NOT_SUPPORTED:
 579  		case CSSMERR_DL_OBJECT_ACL_REQUIRED:
 580  		case CSSMERR_DL_INVALID_ACL_SUBJECT_VALUE:
 581  		case CSSMERR_DL_ACL_SUBJECT_TYPE_NOT_SUPPORTED:
 582  		case CSSMERR_DL_INVALID_NEW_ACL_ENTRY:
 583  		case CSSMERR_DL_INVALID_NEW_ACL_OWNER:
 584  		case CSSMERR_DL_INVALID_ACL_EDIT_MODE:
 585  		case CSSMERR_CSP_INVALID_ACL_EDIT_MODE:
 586  		case CSSMERR_CSP_INVALID_NEW_ACL_ENTRY:
 587  		case CSSMERR_CSP_INVALID_NEW_ACL_OWNER:
 588  			return errSecInvalidACL;
 589  		case CSSMERR_CSP_INVALID_SAMPLE_VALUE:
 590  		case CSSMERR_DL_INVALID_SAMPLE_VALUE:
 591  		case CSSMERR_CSP_SAMPLE_VALUE_NOT_SUPPORTED: 
 592  		case CSSMERR_DL_SAMPLE_VALUE_NOT_SUPPORTED:
 593  			return errSecInvalidSampleValue;
 594  		case CSSMERR_TP_UNKNOWN_FORMAT:
 595  		case CSSMERR_CL_UNKNOWN_FORMAT:
 596  			return errSecUnknownFormat;
 597  		case CSSMERR_CSP_APPLE_ADD_APPLICATION_ACL_SUBJECT:
 598  			return errSecAppleAddAppACLSubject;
 599  		case CSSMERR_CSP_APPLE_PUBLIC_KEY_INCOMPLETE:
 600  			return errSecApplePublicKeyIncomplete;
 601  		case CSSMERR_CSP_APPLE_SIGNATURE_MISMATCH:
 602  			return errSecAppleSignatureMismatch;
 603  		case CSSMERR_CSP_APPLE_INVALID_KEY_START_DATE:
 604  			return errSecAppleInvalidKeyStartDate;
 605  		case CSSMERR_CSP_APPLE_INVALID_KEY_END_DATE:
 606  			return errSecAppleInvalidKeyEndDate;
 607  		case CSSMERR_CSPDL_APPLE_DL_CONVERSION_ERROR:
 608  			return errSecConversionError;
 609  		case CSSMERR_CSP_APPLE_SSLv2_ROLLBACK:
 610  			return errSecAppleSSLv2Rollback;
 611  		case CSSMERR_APPLEDL_QUOTA_EXCEEDED:
 612  			return errSecQuotaExceeded;
 613  		case CSSMERR_APPLEDL_FILE_TOO_BIG:
 614  			return errSecFileTooBig;
 615  		case CSSMERR_APPLEDL_INVALID_DATABASE_BLOB:
 616  			return errSecInvalidDatabaseBlob;
 617  		case CSSMERR_APPLEDL_INVALID_KEY_BLOB:
 618  			return errSecInvalidKeyBlob;
 619  		case CSSMERR_APPLEDL_INCOMPATIBLE_DATABASE_BLOB:
 620  			return errSecIncompatibleDatabaseBlob;
 621  		case CSSMERR_APPLEDL_INCOMPATIBLE_KEY_BLOB:
 622  			return errSecIncompatibleKeyBlob;
 623  		case CSSMERR_APPLETP_HOSTNAME_MISMATCH:
 624  			return errSecHostNameMismatch;
 625  		case CSSMERR_APPLETP_UNKNOWN_CRITICAL_EXTEN:
 626  			return errSecUnknownCriticalExtensionFlag;
 627  		case CSSMERR_APPLETP_NO_BASIC_CONSTRAINTS:
 628  			return errSecNoBasicConstraints;
 629  		case CSSMERR_APPLETP_INVALID_AUTHORITY_ID:
 630  			return errSecInvalidAuthorityKeyID;
 631  		case CSSMERR_APPLETP_INVALID_SUBJECT_ID:
 632  			return errSecInvalidSubjectKeyID;
 633  		case CSSMERR_APPLETP_INVALID_KEY_USAGE:
 634  			return errSecInvalidKeyUsageForPolicy;
 635  		case CSSMERR_APPLETP_INVALID_EXTENDED_KEY_USAGE:
 636  			return errSecInvalidExtendedKeyUsage;
 637  		case CSSMERR_APPLETP_INVALID_ID_LINKAGE:
 638  			return errSecInvalidIDLinkage;
 639  		case CSSMERR_APPLETP_PATH_LEN_CONSTRAINT:
 640  			return errSecPathLengthConstraintExceeded;
 641  		case CSSMERR_APPLETP_INVALID_ROOT:
 642  			return errSecInvalidRoot;
 643  		case CSSMERR_APPLETP_CRL_EXPIRED:
 644  			return errSecCRLExpired;
 645  		case CSSMERR_APPLETP_CRL_NOT_VALID_YET:
 646  			return errSecCRLNotValidYet;
 647  		case CSSMERR_APPLETP_CRL_NOT_FOUND:
 648  			return errSecCRLNotFound;
 649  		case CSSMERR_APPLETP_CRL_SERVER_DOWN:
 650  			return errSecCRLServerDown;
 651  		case CSSMERR_APPLETP_CRL_BAD_URI:
 652  			return errSecCRLBadURI;
 653  		case CSSMERR_APPLETP_UNKNOWN_CERT_EXTEN:
 654  			return errSecUnknownCertExtension;
 655  		case CSSMERR_APPLETP_UNKNOWN_CRL_EXTEN:
 656  			return errSecUnknownCRLExtension;
 657  		case CSSMERR_APPLETP_CRL_NOT_TRUSTED:
 658  			return errSecCRLNotTrusted;
 659  		case CSSMERR_APPLETP_CRL_POLICY_FAIL:
 660  			return errSecCRLPolicyFailed;
 661  		case CSSMERR_APPLETP_IDP_FAIL:
 662  			return errSecIDPFailure;
 663  		case CSSMERR_APPLETP_SMIME_EMAIL_ADDRS_NOT_FOUND:
 664  			return errSecSMIMEEmailAddressesNotFound;
 665  		case CSSMERR_APPLETP_SMIME_BAD_EXT_KEY_USE:
 666  			return errSecSMIMEBadExtendedKeyUsage;
 667  		case CSSMERR_APPLETP_SMIME_BAD_KEY_USE:
 668  			return errSecSMIMEBadKeyUsage;
 669  		case CSSMERR_APPLETP_SMIME_KEYUSAGE_NOT_CRITICAL:
 670  			return errSecSMIMEKeyUsageNotCritical;
 671  		case CSSMERR_APPLETP_SMIME_NO_EMAIL_ADDRS:
 672  			return errSecSMIMENoEmailAddress;
 673  		case CSSMERR_APPLETP_SMIME_SUBJ_ALT_NAME_NOT_CRIT:
 674  			return errSecSMIMESubjAltNameNotCritical;
 675  		case CSSMERR_APPLETP_SSL_BAD_EXT_KEY_USE:
 676  			return errSecSSLBadExtendedKeyUsage;
 677  		case CSSMERR_APPLETP_OCSP_BAD_RESPONSE:
 678  			return errSecOCSPBadResponse;
 679  		case CSSMERR_APPLETP_OCSP_BAD_REQUEST:
 680  			return errSecOCSPBadRequest;
 681  		case CSSMERR_APPLETP_OCSP_UNAVAILABLE:
 682  			return errSecOCSPUnavailable;
 683  		case CSSMERR_APPLETP_OCSP_STATUS_UNRECOGNIZED:
 684  			return errSecOCSPStatusUnrecognized;
 685  		case CSSMERR_APPLETP_INCOMPLETE_REVOCATION_CHECK:
 686  			return errSecIncompleteCertRevocationCheck;
 687  		case CSSMERR_APPLETP_NETWORK_FAILURE:
 688  			return errSecNetworkFailure;
 689  		case CSSMERR_APPLETP_OCSP_NOT_TRUSTED:
 690  			return errSecOCSPNotTrustedToAnchor;
 691  		case CSSMERR_APPLETP_OCSP_SIG_ERROR:
 692  			return errSecOCSPSignatureError;
 693  		case CSSMERR_APPLETP_OCSP_NO_SIGNER:
 694  			return errSecOCSPNoSigner;
 695  		case CSSMERR_APPLETP_OCSP_RESP_MALFORMED_REQ:
 696  			return errSecOCSPResponderMalformedReq;
 697  		case CSSMERR_APPLETP_OCSP_RESP_INTERNAL_ERR:
 698  			return errSecOCSPResponderInternalError;
 699  		case CSSMERR_APPLETP_OCSP_RESP_TRY_LATER:
 700  			return errSecOCSPResponderTryLater;
 701  		case CSSMERR_APPLETP_OCSP_RESP_SIG_REQUIRED:
 702  			return errSecOCSPResponderSignatureRequired;
 703  		case CSSMERR_APPLETP_OCSP_RESP_UNAUTHORIZED:
 704  			return errSecOCSPResponderUnauthorized;
 705  		case CSSMERR_APPLETP_OCSP_NONCE_MISMATCH:
 706  			return errSecOCSPResponseNonceMismatch;
 707  		case CSSMERR_APPLETP_CS_BAD_CERT_CHAIN_LENGTH:
 708  			return errSecCodeSigningBadCertChainLength;
 709  		case CSSMERR_APPLETP_CS_NO_BASIC_CONSTRAINTS:
 710  			return errSecCodeSigningNoBasicConstraints;
 711  		case CSSMERR_APPLETP_CS_BAD_PATH_LENGTH:
 712  			return errSecCodeSigningBadPathLengthConstraint;
 713  		case CSSMERR_APPLETP_CS_NO_EXTENDED_KEY_USAGE:
 714  			return errSecCodeSigningNoExtendedKeyUsage;
 715  		case CSSMERR_APPLETP_CODE_SIGN_DEVELOPMENT:
 716  			return errSecCodeSigningDevelopment;
 717  		case CSSMERR_APPLETP_RS_BAD_CERT_CHAIN_LENGTH:
 718  			return errSecResourceSignBadCertChainLength;
 719  		case CSSMERR_APPLETP_RS_BAD_EXTENDED_KEY_USAGE:
 720  			return errSecResourceSignBadExtKeyUsage;
 721  		case CSSMERR_APPLETP_TRUST_SETTING_DENY:
 722  			return errSecTrustSettingDeny;
 723  		case CSSMERR_APPLETP_INVALID_EMPTY_SUBJECT:
 724  			return errSecInvalidSubjectName;
 725  		case CSSMERR_APPLETP_UNKNOWN_QUAL_CERT_STATEMENT:
 726  			return errSecUnknownQualifiedCertStatement;
 727  		case CSSMERR_APPLETP_MISSING_REQUIRED_EXTENSION:
 728  			return errSecMissingRequiredExtension;
 729  		case CSSMERR_APPLETP_EXT_KEYUSAGE_NOT_CRITICAL:
 730  			return errSecExtendedKeyUsageNotCritical;
 731  		case CSSMERR_APPLE_DOTMAC_REQ_QUEUED:
 732  			return errSecMobileMeRequestQueued;
 733  		case CSSMERR_APPLE_DOTMAC_REQ_REDIRECT:
 734  			return errSecMobileMeRequestRedirected;
 735  		case CSSMERR_APPLE_DOTMAC_REQ_SERVER_ERR:
 736  			return errSecMobileMeServerError;
 737  		case CSSMERR_APPLE_DOTMAC_REQ_SERVER_NOT_AVAIL:
 738  			return errSecMobileMeServerNotAvailable;
 739  		case CSSMERR_APPLE_DOTMAC_REQ_SERVER_ALREADY_EXIST:
 740  			return errSecMobileMeServerAlreadyExists;
 741  		case CSSMERR_APPLE_DOTMAC_REQ_SERVER_SERVICE_ERROR:
 742  			return errSecMobileMeServerServiceErr;
 743  		case CSSMERR_APPLE_DOTMAC_REQ_IS_PENDING:
 744  			return errSecMobileMeRequestAlreadyPending;
 745  		case CSSMERR_APPLE_DOTMAC_NO_REQ_PENDING:
 746  			return errSecMobileMeNoRequestPending;
 747  		case CSSMERR_APPLE_DOTMAC_CSR_VERIFY_FAIL:
 748  			return errSecMobileMeCSRVerifyFailure;
 749  		case CSSMERR_APPLE_DOTMAC_FAILED_CONSISTENCY_CHECK:
 750  			return errSecMobileMeFailedConsistencyCheck;
 751  		case CSSMERR_CSSM_NOT_INITIALIZED:
 752  			return errSecNotInitialized;
 753  		case CSSMERR_CSSM_INVALID_HANDLE_USAGE:
 754  			return errSecInvalidHandleUsage;
 755  		case CSSMERR_CSSM_PVC_REFERENT_NOT_FOUND:
 756  			return errSecPVCReferentNotFound;
 757  		case CSSMERR_CSSM_FUNCTION_INTEGRITY_FAIL:
 758  			return errSecFunctionIntegrityFail;
 759  		case CSSMERR_CSSM_SELF_CHECK_FAILED:
 760  		case CSSMERR_CSP_SELF_CHECK_FAILED:
 761  			return errSecSelfCheckFailed;
 762  		case CSSMERR_CSSM_MODULE_MANIFEST_VERIFY_FAILED:
 763  			return errSecModuleManifestVerifyFailed;
 764  		case CSSMERR_CSSM_INVALID_GUID:
 765  			return errSecInvalidGUID;
 766  		case CSSMERR_CSSM_INCOMPATIBLE_VERSION:
 767  			return errSecIncompatibleVersion;
 768  		case CSSMERR_CSSM_PVC_ALREADY_CONFIGURED:
 769  			return errSecPVCAlreadyConfigured;
 770  		case CSSMERR_CSSM_INVALID_PVC:
 771  			return errSecInvalidPVC;
 772  		case CSSMERR_CSSM_EMM_LOAD_FAILED:
 773  			return errSecEMMLoadFailed;
 774  		case CSSMERR_CSSM_EMM_UNLOAD_FAILED:
 775  			return errSecEMMUnloadFailed;
 776  		case CSSMERR_CSSM_ADDIN_LOAD_FAILED:
 777  			return errSecAddinLoadFailed;
 778  		case CSSMERR_CSSM_INVALID_KEY_HIERARCHY:
 779  			return errSecInvalidKeyHierarchy;
 780  		case CSSMERR_CSSM_ADDIN_UNLOAD_FAILED:
 781  			return errSecAddinUnloadFailed;
 782  		case CSSMERR_CSSM_LIB_REF_NOT_FOUND:
 783  			return errSecLibraryReferenceNotFound;
 784  		case CSSMERR_CSSM_INVALID_ADDIN_FUNCTION_TABLE:
 785  			return errSecInvalidAddinFunctionTable;
 786  		case CSSMERR_CSSM_INVALID_SERVICE_MASK:
 787  			return errSecInvalidServiceMask;
 788  		case CSSMERR_CSSM_MODULE_NOT_LOADED:
 789  			return errSecModuleNotLoaded;
 790  		case CSSMERR_CSSM_INVALID_SUBSERVICEID:
 791  			return errSecInvalidSubServiceID;
 792  		case CSSMERR_CSSM_ATTRIBUTE_NOT_IN_CONTEXT:
 793  			return errSecAttributeNotInContext;
 794  		case CSSMERR_CSSM_MODULE_MANAGER_INITIALIZE_FAIL:
 795  			return errSecModuleManagerInitializeFailed;
 796  		case CSSMERR_CSSM_MODULE_MANAGER_NOT_FOUND:
 797  			return errSecModuleManagerNotFound;
 798  		case CSSMERR_CSSM_EVENT_NOTIFICATION_CALLBACK_NOT_FOUND:
 799  			return errSecEventNotificationCallbackNotFound;
 800  		case CSSMERR_CSP_INPUT_LENGTH_ERROR:
 801  			return errSecInputLengthError;
 802  		case CSSMERR_CSP_OUTPUT_LENGTH_ERROR:
 803  			return errSecOutputLengthError;
 804  		case CSSMERR_CSP_PRIVILEGE_NOT_SUPPORTED:
 805  			return errSecPrivilegeNotSupported;
 806  		case CSSMERR_CSP_DEVICE_ERROR:
 807  			return errSecDeviceError;
 808  		case CSSMERR_CSP_ATTACH_HANDLE_BUSY:
 809  			return errSecAttachHandleBusy;
 810  		case CSSMERR_CSP_NOT_LOGGED_IN:
 811  			return errSecNotLoggedIn;
 812  		case CSSMERR_CSP_ALGID_MISMATCH:
 813  			return errSecAlgorithmMismatch;
 814  		case CSSMERR_CSP_KEY_USAGE_INCORRECT:
 815  			return errSecKeyUsageIncorrect;
 816  		case CSSMERR_CSP_KEY_BLOB_TYPE_INCORRECT:
 817  			return errSecKeyBlobTypeIncorrect;
 818  		case CSSMERR_CSP_KEY_HEADER_INCONSISTENT:
 819  			return errSecKeyHeaderInconsistent;
 820  		case CSSMERR_CSP_UNSUPPORTED_KEY_FORMAT:
 821  			return errSecUnsupportedKeyFormat;
 822  		case CSSMERR_CSP_UNSUPPORTED_KEY_SIZE:
 823  			return errSecUnsupportedKeySize;
 824  		case CSSMERR_CSP_INVALID_KEYUSAGE_MASK:
 825  			return errSecInvalidKeyUsageMask;
 826  		case CSSMERR_CSP_UNSUPPORTED_KEYUSAGE_MASK:
 827  			return errSecUnsupportedKeyUsageMask;
 828  		case CSSMERR_CSP_INVALID_KEYATTR_MASK:
 829  			return errSecInvalidKeyAttributeMask;
 830  		case CSSMERR_CSP_UNSUPPORTED_KEYATTR_MASK:
 831  			return errSecUnsupportedKeyAttributeMask;
 832  		case CSSMERR_CSP_INVALID_KEY_LABEL:
 833  			return errSecInvalidKeyLabel;
 834  		case CSSMERR_CSP_UNSUPPORTED_KEY_LABEL:
 835  			return errSecUnsupportedKeyLabel;
 836  		case CSSMERR_CSP_INVALID_KEY_FORMAT:
 837  			return errSecInvalidKeyFormat;
 838  		case CSSMERR_CSP_VECTOR_OF_BUFS_UNSUPPORTED:
 839  			return errSecUnsupportedVectorOfBuffers;
 840  		case CSSMERR_CSP_INVALID_INPUT_VECTOR:
 841  			return errSecInvalidInputVector;
 842  		case CSSMERR_CSP_INVALID_OUTPUT_VECTOR:
 843  			return errSecInvalidOutputVector;
 844  		case CSSMERR_CSP_INVALID_CONTEXT:
 845  			return errSecInvalidContext;
 846  		case CSSMERR_CSP_INVALID_ALGORITHM:
 847  			return errSecInvalidAlgorithm;
 848  		case CSSMERR_CSP_INVALID_ATTR_KEY:
 849  			return errSecInvalidAttributeKey;
 850  		case CSSMERR_CSP_MISSING_ATTR_KEY:
 851  			return errSecMissingAttributeKey;
 852  		case CSSMERR_CSP_INVALID_ATTR_INIT_VECTOR:
 853  			return errSecInvalidAttributeInitVector;
 854  		case CSSMERR_CSP_MISSING_ATTR_INIT_VECTOR:
 855  			return errSecMissingAttributeInitVector;
 856  		case CSSMERR_CSP_INVALID_ATTR_SALT:
 857  			return errSecInvalidAttributeSalt;
 858  		case CSSMERR_CSP_MISSING_ATTR_SALT:
 859  			return errSecMissingAttributeSalt;
 860  		case CSSMERR_CSP_INVALID_ATTR_PADDING:
 861  			return errSecInvalidAttributePadding;
 862  		case CSSMERR_CSP_MISSING_ATTR_PADDING:
 863  			return errSecMissingAttributePadding;
 864  		case CSSMERR_CSP_INVALID_ATTR_RANDOM:
 865  			return errSecInvalidAttributeRandom;
 866  		case CSSMERR_CSP_MISSING_ATTR_RANDOM:
 867  			return errSecMissingAttributeRandom;
 868  		case CSSMERR_CSP_INVALID_ATTR_SEED:
 869  			return errSecInvalidAttributeSeed;
 870  		case CSSMERR_CSP_MISSING_ATTR_SEED:
 871  			return errSecMissingAttributeSeed;
 872  		case CSSMERR_CSP_INVALID_ATTR_PASSPHRASE:
 873  			return errSecInvalidAttributePassphrase;
 874  		case CSSMERR_CSP_MISSING_ATTR_PASSPHRASE:
 875  			return errSecMissingAttributePassphrase;
 876  		case CSSMERR_CSP_INVALID_ATTR_KEY_LENGTH:
 877  			return errSecInvalidAttributeKeyLength;
 878  		case CSSMERR_CSP_MISSING_ATTR_KEY_LENGTH:
 879  			return errSecMissingAttributeKeyLength;
 880  		case CSSMERR_CSP_INVALID_ATTR_BLOCK_SIZE:
 881  			return errSecInvalidAttributeBlockSize;
 882  		case CSSMERR_CSP_MISSING_ATTR_BLOCK_SIZE:
 883  			return errSecMissingAttributeBlockSize;
 884  		case CSSMERR_CSP_INVALID_ATTR_OUTPUT_SIZE:
 885  			return errSecInvalidAttributeOutputSize;
 886  		case CSSMERR_CSP_MISSING_ATTR_OUTPUT_SIZE:
 887  			return errSecMissingAttributeOutputSize;
 888  		case CSSMERR_CSP_INVALID_ATTR_ROUNDS:
 889  			return errSecInvalidAttributeRounds;
 890  		case CSSMERR_CSP_MISSING_ATTR_ROUNDS:
 891  			return errSecMissingAttributeRounds;
 892  		case CSSMERR_CSP_INVALID_ATTR_ALG_PARAMS:
 893  			return errSecInvalidAlgorithmParms;
 894  		case CSSMERR_CSP_MISSING_ATTR_ALG_PARAMS:
 895  			return errSecMissingAlgorithmParms;
 896  		case CSSMERR_CSP_INVALID_ATTR_LABEL:
 897  			return errSecInvalidAttributeLabel;
 898  		case CSSMERR_CSP_MISSING_ATTR_LABEL:
 899  			return errSecMissingAttributeLabel;
 900  		case CSSMERR_CSP_INVALID_ATTR_KEY_TYPE:
 901  			return errSecInvalidAttributeKeyType;
 902  		case CSSMERR_CSP_MISSING_ATTR_KEY_TYPE:
 903  			return errSecMissingAttributeKeyType;
 904  		case CSSMERR_CSP_INVALID_ATTR_MODE:
 905  			return errSecInvalidAttributeMode;
 906  		case CSSMERR_CSP_MISSING_ATTR_MODE:
 907  			return errSecMissingAttributeMode;
 908  		case CSSMERR_CSP_INVALID_ATTR_EFFECTIVE_BITS:
 909  			return errSecInvalidAttributeEffectiveBits;
 910  		case CSSMERR_CSP_MISSING_ATTR_EFFECTIVE_BITS:
 911  			return errSecMissingAttributeEffectiveBits;
 912  		case CSSMERR_CSP_INVALID_ATTR_START_DATE:
 913  			return errSecInvalidAttributeStartDate;
 914  		case CSSMERR_CSP_MISSING_ATTR_START_DATE:
 915  			return errSecMissingAttributeStartDate;
 916  		case CSSMERR_CSP_INVALID_ATTR_END_DATE:
 917  			return errSecInvalidAttributeEndDate;
 918  		case CSSMERR_CSP_MISSING_ATTR_END_DATE:
 919  			return errSecMissingAttributeEndDate;
 920  		case CSSMERR_CSP_INVALID_ATTR_VERSION:
 921  			return errSecInvalidAttributeVersion;
 922  		case CSSMERR_CSP_MISSING_ATTR_VERSION:
 923  			return errSecMissingAttributeVersion;
 924  		case CSSMERR_CSP_INVALID_ATTR_PRIME:
 925  			return errSecInvalidAttributePrime;
 926  		case CSSMERR_CSP_MISSING_ATTR_PRIME:
 927  			return errSecMissingAttributePrime;
 928  		case CSSMERR_CSP_INVALID_ATTR_BASE:
 929  			return errSecInvalidAttributeBase;
 930  		case CSSMERR_CSP_MISSING_ATTR_BASE:
 931  			return errSecMissingAttributeBase;
 932  		case CSSMERR_CSP_INVALID_ATTR_SUBPRIME:
 933  			return errSecInvalidAttributeSubprime;
 934  		case CSSMERR_CSP_MISSING_ATTR_SUBPRIME:
 935  			return errSecMissingAttributeSubprime;
 936  		case CSSMERR_CSP_INVALID_ATTR_ITERATION_COUNT:
 937  			return errSecInvalidAttributeIterationCount;
 938  		case CSSMERR_CSP_MISSING_ATTR_ITERATION_COUNT:
 939  			return errSecMissingAttributeIterationCount;
 940  		case CSSMERR_CSP_INVALID_ATTR_DL_DB_HANDLE:
 941  			return errSecInvalidAttributeDLDBHandle;
 942  		case CSSMERR_CSP_MISSING_ATTR_DL_DB_HANDLE:
 943  			return errSecMissingAttributeDLDBHandle;
 944  		case CSSMERR_CSP_INVALID_ATTR_ACCESS_CREDENTIALS:
 945  			return errSecInvalidAttributeAccessCredentials;
 946  		case CSSMERR_CSP_MISSING_ATTR_ACCESS_CREDENTIALS:
 947  			return errSecMissingAttributeAccessCredentials;
 948  		case CSSMERR_CSP_INVALID_ATTR_PUBLIC_KEY_FORMAT:
 949  			return errSecInvalidAttributePublicKeyFormat;
 950  		case CSSMERR_CSP_MISSING_ATTR_PUBLIC_KEY_FORMAT:
 951  			return errSecMissingAttributePublicKeyFormat;
 952  		case CSSMERR_CSP_INVALID_ATTR_PRIVATE_KEY_FORMAT:
 953  			return errSecInvalidAttributePrivateKeyFormat;
 954  		case CSSMERR_CSP_MISSING_ATTR_PRIVATE_KEY_FORMAT:
 955  			return errSecMissingAttributePrivateKeyFormat;
 956  		case CSSMERR_CSP_INVALID_ATTR_SYMMETRIC_KEY_FORMAT:
 957  			return errSecInvalidAttributeSymmetricKeyFormat;
 958  		case CSSMERR_CSP_MISSING_ATTR_SYMMETRIC_KEY_FORMAT:
 959  			return errSecMissingAttributeSymmetricKeyFormat;
 960  		case CSSMERR_CSP_INVALID_ATTR_WRAPPED_KEY_FORMAT:
 961  			return errSecInvalidAttributeWrappedKeyFormat;
 962  		case CSSMERR_CSP_MISSING_ATTR_WRAPPED_KEY_FORMAT:
 963  			return errSecMissingAttributeWrappedKeyFormat;
 964  		case CSSMERR_CSP_STAGED_OPERATION_IN_PROGRESS:
 965  			return errSecStagedOperationInProgress;
 966  		case CSSMERR_CSP_STAGED_OPERATION_NOT_STARTED:
 967  			return errSecStagedOperationNotStarted;
 968  		case CSSMERR_CSP_VERIFY_FAILED:
 969  			return errSecVerifyFailed;
 970  		case CSSMERR_CSP_QUERY_SIZE_UNKNOWN:
 971  			return errSecQuerySizeUnknown;
 972  		case CSSMERR_CSP_BLOCK_SIZE_MISMATCH:
 973  			return errSecBlockSizeMismatch;
 974  		case CSSMERR_CSP_PUBLIC_KEY_INCONSISTENT:
 975  			return errSecPublicKeyInconsistent;
 976  		case CSSMERR_CSP_DEVICE_VERIFY_FAILED:
 977  			return errSecDeviceVerifyFailed;
 978  		case CSSMERR_CSP_INVALID_LOGIN_NAME:
 979  			return errSecInvalidLoginName;
 980  		case CSSMERR_CSP_ALREADY_LOGGED_IN:
 981  			return errSecAlreadyLoggedIn;
 982  		case CSSMERR_CSP_INVALID_DIGEST_ALGORITHM:
 983  			return errSecInvalidDigestAlgorithm;
 984  		case CSSMERR_TP_INVALID_CRLGROUP:
 985  			return errSecInvalidCRLGroup;
 986  		case CSSMERR_TP_CERTIFICATE_CANT_OPERATE:
 987  			return errSecCertificateCannotOperate;
 988  		case CSSMERR_TP_CERT_EXPIRED:
 989  			return errSecCertificateExpired;
 990  		case CSSMERR_TP_CERT_NOT_VALID_YET:
 991  			return errSecCertificateNotValidYet;
 992  		case CSSMERR_TP_CERT_REVOKED:
 993  			return errSecCertificateRevoked;
 994  		case CSSMERR_TP_CERT_SUSPENDED:
 995  			return errSecCertificateSuspended;
 996  		case CSSMERR_TP_INSUFFICIENT_CREDENTIALS:
 997  			return errSecInsufficientCredentials;
 998  		case CSSMERR_TP_INVALID_ACTION:
 999  			return errSecInvalidAction;
1000  		case CSSMERR_TP_INVALID_AUTHORITY:
1001  			return errSecInvalidAuthority;
1002  		case CSSMERR_TP_VERIFY_ACTION_FAILED:
1003  			return errSecVerifyActionFailed;
1004  		case CSSMERR_TP_INVALID_CERT_AUTHORITY:
1005  		case CSSMERR_APPLETP_INVALID_CA:
1006  			return errSecInvalidCertAuthority;
1007  		case CSSMERR_TP_INVALID_CRL_AUTHORITY:
1008  			return errSecInvaldCRLAuthority;
1009  		case CSSMERR_TP_INVALID_CRL_ENCODING:
1010  			return errSecInvalidCRLEncoding;
1011  		case CSSMERR_TP_INVALID_CRL_TYPE:
1012  			return errSecInvalidCRLType;
1013  		case CSSMERR_TP_INVALID_CRL:
1014  			return errSecInvalidCRL;
1015  		case CSSMERR_TP_INVALID_FORM_TYPE:
1016  			return errSecInvalidFormType;
1017  		case CSSMERR_TP_INVALID_ID:
1018  			return errSecInvalidID;
1019  		case CSSMERR_TP_INVALID_IDENTIFIER:
1020  			return errSecInvalidIdentifier;
1021  		case CSSMERR_TP_INVALID_INDEX:
1022  			return errSecInvalidIndex;
1023  		case CSSMERR_TP_INVALID_POLICY_IDENTIFIERS:
1024  			return errSecInvalidPolicyIdentifiers;
1025  		case CSSMERR_TP_INVALID_TIMESTRING:
1026  			return errSecInvalidTimeString;
1027  		case CSSMERR_TP_INVALID_REASON:
1028  			return errSecInvalidReason;
1029  		case CSSMERR_TP_INVALID_REQUEST_INPUTS:
1030  			return errSecInvalidRequestInputs;
1031  		case CSSMERR_TP_INVALID_RESPONSE_VECTOR:
1032  			return errSecInvalidResponseVector;
1033  		case CSSMERR_TP_INVALID_STOP_ON_POLICY:
1034  			return errSecInvalidStopOnPolicy;
1035  		case CSSMERR_TP_INVALID_TUPLE:
1036  			return errSecInvalidTuple;
1037  		case CSSMERR_TP_NOT_SIGNER:
1038  			return errSecNotSigner;
1039  		case CSSMERR_TP_NOT_TRUSTED:
1040  			return errSecNotTrusted;
1041  		case CSSMERR_TP_NO_DEFAULT_AUTHORITY:
1042  			return errSecNoDefaultAuthority;
1043  		case CSSMERR_TP_REJECTED_FORM:
1044  			return errSecRejectedForm;
1045  		case CSSMERR_TP_REQUEST_LOST:
1046  			return errSecRequestLost;
1047  		case CSSMERR_TP_REQUEST_REJECTED:
1048  			return errSecRequestRejected;
1049  		case CSSMERR_TP_UNSUPPORTED_ADDR_TYPE:
1050  			return errSecUnsupportedAddressType;
1051  		case CSSMERR_TP_UNSUPPORTED_SERVICE:
1052  			return errSecUnsupportedService;
1053  		case CSSMERR_TP_INVALID_TUPLEGROUP:
1054  			return errSecInvalidTupleGroup;
1055  		case CSSMERR_AC_INVALID_BASE_ACLS:
1056  			return errSecInvalidBaseACLs;
1057  		case CSSMERR_AC_INVALID_TUPLE_CREDENTIALS:
1058  			return errSecInvalidTupleCredendtials;
1059  		case CSSMERR_AC_INVALID_ENCODING:
1060  			return errSecInvalidEncoding;
1061  		case CSSMERR_AC_INVALID_VALIDITY_PERIOD:
1062  			return errSecInvalidValidityPeriod;
1063  		case CSSMERR_AC_INVALID_REQUESTOR:
1064  			return errSecInvalidRequestor;
1065  		case CSSMERR_AC_INVALID_REQUEST_DESCRIPTOR:
1066  			return errSecRequestDescriptor;
1067  		case CSSMERR_CL_INVALID_BUNDLE_INFO:
1068  			return errSecInvalidBundleInfo;
1069  		case CSSMERR_CL_INVALID_CRL_INDEX:
1070  			return errSecInvalidCRLIndex;
1071  		case CSSMERR_CL_NO_FIELD_VALUES:
1072  			return errSecNoFieldValues;
1073  		case CSSMERR_DL_UNSUPPORTED_FIELD_FORMAT:
1074  			return errSecUnsupportedFieldFormat;
1075  		case CSSMERR_DL_UNSUPPORTED_INDEX_INFO:
1076  			return errSecUnsupportedIndexInfo;
1077  		case CSSMERR_DL_UNSUPPORTED_LOCALITY:
1078  			return errSecUnsupportedLocality;
1079  		case CSSMERR_DL_UNSUPPORTED_NUM_ATTRIBUTES:
1080  			return errSecUnsupportedNumAttributes;
1081  		case CSSMERR_DL_UNSUPPORTED_NUM_INDEXES:
1082  			return errSecUnsupportedNumIndexes;
1083  		case CSSMERR_DL_UNSUPPORTED_NUM_RECORDTYPES:
1084  			return errSecUnsupportedNumRecordTypes;
1085  		case CSSMERR_DL_FIELD_SPECIFIED_MULTIPLE:
1086  			return errSecFieldSpecifiedMultiple;
1087  		case CSSMERR_DL_INCOMPATIBLE_FIELD_FORMAT:
1088  			return errSecIncompatibleFieldFormat;
1089  		case CSSMERR_DL_INVALID_PARSING_MODULE:
1090  			return errSecInvalidParsingModule;
1091  		case CSSMERR_DL_DB_LOCKED:
1092  			return errSecDatabaseLocked;
1093  		case CSSMERR_DL_DATASTORE_IS_OPEN:
1094  			return errSecDatastoreIsOpen;
1095  		case CSSMERR_DL_MISSING_VALUE:
1096  			return errSecMissingValue;
1097  		case CSSMERR_DL_UNSUPPORTED_QUERY_LIMITS:
1098  			return errSecUnsupportedQueryLimits;
1099  		case CSSMERR_DL_UNSUPPORTED_NUM_SELECTION_PREDS:
1100  			return errSecUnsupportedNumSelectionPreds;
1101  		case CSSMERR_DL_UNSUPPORTED_OPERATOR:
1102  			return errSecUnsupportedOperator;
1103  		case CSSMERR_DL_INVALID_DB_LOCATION:
1104  			return errSecInvalidDBLocation;
1105  		case CSSMERR_DL_INVALID_ACCESS_REQUEST:
1106  			return errSecInvalidAccessRequest;
1107  		case CSSMERR_DL_INVALID_INDEX_INFO:
1108  			return errSecInvalidIndexInfo;
1109  		case CSSMERR_DL_INVALID_NEW_OWNER:
1110  			return errSecInvalidNewOwner;
1111  		case CSSMERR_DL_INVALID_MODIFY_MODE:
1112  			return errSecInvalidModifyMode;
1113  		case CSSMERR_DL_RECORD_MODIFIED:
1114  			return errSecRecordModified;
1115  		case CSSMERR_DL_ENDOFDATA:
1116  			return errSecEndOfData;
1117  		case CSSMERR_DL_INVALID_VALUE:
1118  			return errSecInvalidValue;
1119  		case CSSMERR_DL_MULTIPLE_VALUES_UNSUPPORTED:
1120  			return errSecMultipleValuesUnsupported;
1121  		default:
1122  			return osStatus;
1123  	}
1124  }