1/* 2 * CDDL HEADER START 3 * 4 * The contents of this file are subject to the terms of the 5 * Common Development and Distribution License, Version 1.0 only 6 * (the "License"). You may not use this file except in compliance 7 * with the License. 8 * 9 * You can obtain a copy of the license at usr/src/OPENSOLARIS.LICENSE 10 * or http://www.opensolaris.org/os/licensing. 11 * See the License for the specific language governing permissions 12 * and limitations under the License. 13 * 14 * When distributing Covered Code, include this CDDL HEADER in each 15 * file and include the License file at usr/src/OPENSOLARIS.LICENSE. 16 * If applicable, add the following below this CDDL HEADER, with the 17 * fields enclosed by brackets "[]" replaced with your own identifying 18 * information: Portions Copyright [yyyy] [name of copyright owner] 19 * 20 * CDDL HEADER END 21 */ 22/* 23 * Copyright 2004 Sun Microsystems, Inc. All rights reserved. 24 * Use is subject to license terms. 25 */ 26 27#pragma ident "%Z%%M% %I% %E% SMI" 28 29/* 30 * Block comment which describes the contents of this file. 31 */ 32 33#include <stdio.h> 34#include <security/cryptoki.h> 35 36/* 37 * pkcs11_strerror: returns a string representation of the given return code. 38 * The string returned is static pointer. It doesn't need to be free'd 39 * by the caller. 40 */ 41char * 42pkcs11_strerror(CK_RV rv) 43{ 44 static char errstr[128]; 45 46 switch (rv) { 47 case CKR_OK: 48 return ("CKR_OK"); 49 break; 50 case CKR_CANCEL: 51 return ("CKR_CANCEL"); 52 break; 53 case CKR_HOST_MEMORY: 54 return ("CKR_HOST_MEMORY"); 55 break; 56 case CKR_SLOT_ID_INVALID: 57 return ("CKR_SLOT_ID_INVALID"); 58 break; 59 case CKR_GENERAL_ERROR: 60 return ("CKR_GENERAL_ERROR"); 61 break; 62 case CKR_FUNCTION_FAILED: 63 return ("CKR_FUNCTION_FAILED"); 64 break; 65 case CKR_ARGUMENTS_BAD: 66 return ("CKR_ARGUMENTS_BAD"); 67 break; 68 case CKR_NO_EVENT: 69 return ("CKR_NO_EVENT"); 70 break; 71 case CKR_NEED_TO_CREATE_THREADS: 72 return ("CKR_NEED_TO_CREATE_THREADS"); 73 break; 74 case CKR_CANT_LOCK: 75 return ("CKR_CANT_LOCK"); 76 break; 77 case CKR_ATTRIBUTE_READ_ONLY: 78 return ("CKR_ATTRIBUTE_READ_ONLY"); 79 break; 80 case CKR_ATTRIBUTE_SENSITIVE: 81 return ("CKR_ATTRIBUTE_SENSITIVE"); 82 break; 83 case CKR_ATTRIBUTE_TYPE_INVALID: 84 return ("CKR_ATTRIBUTE_TYPE_INVALID"); 85 break; 86 case CKR_ATTRIBUTE_VALUE_INVALID: 87 return ("CKR_ATTRIBUTE_VALUE_INVALID"); 88 break; 89 case CKR_DATA_INVALID: 90 return ("CKR_DATA_INVALID"); 91 break; 92 case CKR_DATA_LEN_RANGE: 93 return ("CKR_DATA_LEN_RANGE"); 94 break; 95 case CKR_DEVICE_ERROR: 96 return ("CKR_DEVICE_ERROR"); 97 break; 98 case CKR_DEVICE_MEMORY: 99 return ("CKR_DEVICE_MEMORY"); 100 break; 101 case CKR_DEVICE_REMOVED: 102 return ("CKR_DEVICE_REMOVED"); 103 break; 104 case CKR_ENCRYPTED_DATA_INVALID: 105 return ("CKR_ENCRYPTED_DATA_INVALID"); 106 break; 107 case CKR_ENCRYPTED_DATA_LEN_RANGE: 108 return ("CKR_ENCRYPTED_DATA_LEN_RANGE"); 109 break; 110 case CKR_FUNCTION_CANCELED: 111 return ("CKR_FUNCTION_CANCELED"); 112 break; 113 case CKR_FUNCTION_NOT_PARALLEL: 114 return ("CKR_FUNCTION_NOT_PARALLEL"); 115 break; 116 case CKR_FUNCTION_NOT_SUPPORTED: 117 return ("CKR_FUNCTION_NOT_SUPPORTED"); 118 break; 119 case CKR_KEY_HANDLE_INVALID: 120 return ("CKR_KEY_HANDLE_INVALID"); 121 break; 122 case CKR_KEY_SIZE_RANGE: 123 return ("CKR_KEY_SIZE_RANGE"); 124 break; 125 case CKR_KEY_TYPE_INCONSISTENT: 126 return ("CKR_KEY_TYPE_INCONSISTENT"); 127 break; 128 case CKR_KEY_NOT_NEEDED: 129 return ("CKR_KEY_NOT_NEEDED"); 130 break; 131 case CKR_KEY_CHANGED: 132 return ("CKR_KEY_CHANGED"); 133 break; 134 case CKR_KEY_NEEDED: 135 return ("CKR_KEY_NEEDED"); 136 break; 137 case CKR_KEY_INDIGESTIBLE: 138 return ("CKR_KEY_INDIGESTIBLE"); 139 break; 140 case CKR_KEY_FUNCTION_NOT_PERMITTED: 141 return ("CKR_KEY_FUNCTION_NOT_PERMITTED"); 142 break; 143 case CKR_KEY_NOT_WRAPPABLE: 144 return ("CKR_KEY_NOT_WRAPPABLE"); 145 break; 146 case CKR_KEY_UNEXTRACTABLE: 147 return ("CKR_KEY_UNEXTRACTABLE"); 148 break; 149 case CKR_MECHANISM_INVALID: 150 return ("CKR_MECHANISM_INVALID"); 151 break; 152 case CKR_MECHANISM_PARAM_INVALID: 153 return ("CKR_MECHANISM_PARAM_INVALID"); 154 break; 155 case CKR_OBJECT_HANDLE_INVALID: 156 return ("CKR_OBJECT_HANDLE_INVALID"); 157 break; 158 case CKR_OPERATION_ACTIVE: 159 return ("CKR_OPERATION_ACTIVE"); 160 break; 161 case CKR_OPERATION_NOT_INITIALIZED: 162 return ("CKR_OPERATION_NOT_INITIALIZED"); 163 break; 164 case CKR_PIN_INCORRECT: 165 return ("CKR_PIN_INCORRECT"); 166 break; 167 case CKR_PIN_INVALID: 168 return ("CKR_PIN_INVALID"); 169 break; 170 case CKR_PIN_LEN_RANGE: 171 return ("CKR_PIN_LEN_RANGE"); 172 break; 173 case CKR_PIN_EXPIRED: 174 return ("CKR_PIN_EXPIRED"); 175 break; 176 case CKR_PIN_LOCKED: 177 return ("CKR_PIN_LOCKED"); 178 break; 179 case CKR_SESSION_CLOSED: 180 return ("CKR_SESSION_CLOSED"); 181 break; 182 case CKR_SESSION_COUNT: 183 return ("CKR_SESSION_COUNT"); 184 break; 185 case CKR_SESSION_HANDLE_INVALID: 186 return ("CKR_SESSION_HANDLE_INVALID"); 187 break; 188 case CKR_SESSION_PARALLEL_NOT_SUPPORTED: 189 return ("CKR_SESSION_PARALLEL_NOT_SUPPORTED"); 190 break; 191 case CKR_SESSION_READ_ONLY: 192 return ("CKR_SESSION_READ_ONLY"); 193 break; 194 case CKR_SESSION_EXISTS: 195 return ("CKR_SESSION_EXISTS"); 196 break; 197 case CKR_SESSION_READ_ONLY_EXISTS: 198 return ("CKR_SESSION_READ_ONLY_EXISTS"); 199 break; 200 case CKR_SESSION_READ_WRITE_SO_EXISTS: 201 return ("CKR_SESSION_READ_WRITE_SO_EXISTS"); 202 break; 203 case CKR_SIGNATURE_INVALID: 204 return ("CKR_SIGNATURE_INVALID"); 205 break; 206 case CKR_SIGNATURE_LEN_RANGE: 207 return ("CKR_SIGNATURE_LEN_RANGE"); 208 break; 209 case CKR_TEMPLATE_INCOMPLETE: 210 return ("CKR_TEMPLATE_INCOMPLETE"); 211 break; 212 case CKR_TEMPLATE_INCONSISTENT: 213 return ("CKR_TEMPLATE_INCONSISTENT"); 214 break; 215 case CKR_TOKEN_NOT_PRESENT: 216 return ("CKR_TOKEN_NOT_PRESENT"); 217 break; 218 case CKR_TOKEN_NOT_RECOGNIZED: 219 return ("CKR_TOKEN_NOT_RECOGNIZED"); 220 break; 221 case CKR_TOKEN_WRITE_PROTECTED: 222 return ("CKR_TOKEN_WRITE_PROTECTED"); 223 break; 224 case CKR_UNWRAPPING_KEY_HANDLE_INVALID: 225 return ("CKR_UNWRAPPING_KEY_HANDLE_INVALID"); 226 break; 227 case CKR_UNWRAPPING_KEY_SIZE_RANGE: 228 return ("CKR_UNWRAPPING_KEY_SIZE_RANGE"); 229 break; 230 case CKR_UNWRAPPING_KEY_TYPE_INCONSISTENT: 231 return ("CKR_UNWRAPPING_KEY_TYPE_INCONSISTENT"); 232 break; 233 case CKR_USER_ALREADY_LOGGED_IN: 234 return ("CKR_USER_ALREADY_LOGGED_IN"); 235 break; 236 case CKR_USER_NOT_LOGGED_IN: 237 return ("CKR_USER_NOT_LOGGED_IN"); 238 break; 239 case CKR_USER_PIN_NOT_INITIALIZED: 240 return ("CKR_USER_PIN_NOT_INITIALIZED"); 241 break; 242 case CKR_USER_TYPE_INVALID: 243 return ("CKR_USER_TYPE_INVALID"); 244 break; 245 case CKR_USER_ANOTHER_ALREADY_LOGGED_IN: 246 return ("CKR_USER_ANOTHER_ALREADY_LOGGED_IN"); 247 break; 248 case CKR_USER_TOO_MANY_TYPES: 249 return ("CKR_USER_TOO_MANY_TYPES"); 250 break; 251 case CKR_WRAPPED_KEY_INVALID: 252 return ("CKR_WRAPPED_KEY_INVALID"); 253 break; 254 case CKR_WRAPPED_KEY_LEN_RANGE: 255 return ("CKR_WRAPPED_KEY_LEN_RANGE"); 256 break; 257 case CKR_WRAPPING_KEY_HANDLE_INVALID: 258 return ("CKR_WRAPPING_KEY_HANDLE_INVALID"); 259 break; 260 case CKR_WRAPPING_KEY_SIZE_RANGE: 261 return ("CKR_WRAPPING_KEY_SIZE_RANGE"); 262 break; 263 case CKR_WRAPPING_KEY_TYPE_INCONSISTENT: 264 return ("CKR_WRAPPING_KEY_TYPE_INCONSISTENT"); 265 break; 266 case CKR_RANDOM_SEED_NOT_SUPPORTED: 267 return ("CKR_RANDOM_SEED_NOT_SUPPORTED"); 268 break; 269 case CKR_RANDOM_NO_RNG: 270 return ("CKR_RANDOM_NO_RNG"); 271 break; 272 case CKR_DOMAIN_PARAMS_INVALID: 273 return ("CKR_DOMAIN_PARAMS_INVALID"); 274 break; 275 case CKR_BUFFER_TOO_SMALL: 276 return ("CKR_BUFFER_TOO_SMALL"); 277 break; 278 case CKR_SAVED_STATE_INVALID: 279 return ("CKR_SAVED_STATE_INVALID"); 280 break; 281 case CKR_INFORMATION_SENSITIVE: 282 return ("CKR_INFORMATION_SENSITIVE"); 283 break; 284 case CKR_STATE_UNSAVEABLE: 285 return ("CKR_STATE_UNSAVEABLE"); 286 break; 287 case CKR_CRYPTOKI_NOT_INITIALIZED: 288 return ("CKR_CRYPTOKI_NOT_INITIALIZED"); 289 break; 290 case CKR_CRYPTOKI_ALREADY_INITIALIZED: 291 return ("CKR_CRYPTOKI_ALREADY_INITIALIZED"); 292 break; 293 case CKR_MUTEX_BAD: 294 return ("CKR_MUTEX_BAD"); 295 break; 296 case CKR_MUTEX_NOT_LOCKED: 297 return ("CKR_MUTEX_NOT_LOCKED"); 298 break; 299 case CKR_VENDOR_DEFINED: 300 return ("CKR_VENDOR_DEFINED"); 301 break; 302 default: 303 /* rv not found */ 304 (void) snprintf(errstr, sizeof (errstr), 305 "Unknown return code: 0x%lx", rv); 306 return (errstr); 307 break; 308 } 309} 310