1 /* Copyright (c) OASIS Open 2016, 2019. All Rights Reserved./ 2 * /Distributed under the terms of the OASIS IPR Policy, 3 * [http://www.oasis-open.org/policies-guidelines/ipr], AS-IS, WITHOUT ANY 4 * IMPLIED OR EXPRESS WARRANTY; there is no warranty of MERCHANTABILITY, FITNESS FOR A 5 * PARTICULAR PURPOSE or NONINFRINGEMENT of the rights of others. 6 */ 7 8 /* Latest version of the specification: 9 * http://docs.oasis-open.org/pkcs11/pkcs11-base/v2.40/pkcs11-base-v2.40.html 10 */ 11 12 /* See top of pkcs11.h for information about the macros that 13 * must be defined and the structure-packing conventions that 14 * must be set before including this file. 15 */ 16 17 #ifndef _PKCS11T_H_ 18 #define _PKCS11T_H_ 1 19 20 #define CRYPTOKI_VERSION_MAJOR 3 21 #define CRYPTOKI_VERSION_MINOR 1 22 #define CRYPTOKI_VERSION_AMENDMENT 0 23 24 #define CK_TRUE 1 25 #define CK_FALSE 0 26 27 #ifndef CK_DISABLE_TRUE_FALSE 28 #ifndef FALSE 29 #define FALSE CK_FALSE 30 #endif 31 #ifndef TRUE 32 #define TRUE CK_TRUE 33 #endif 34 #endif 35 36 /* an unsigned 8-bit value */ 37 typedef unsigned char CK_BYTE; 38 39 /* an unsigned 8-bit character */ 40 typedef CK_BYTE CK_CHAR; 41 42 /* an 8-bit UTF-8 character */ 43 typedef CK_BYTE CK_UTF8CHAR; 44 45 /* a BYTE-sized Boolean flag */ 46 typedef CK_BYTE CK_BBOOL; 47 48 /* an unsigned value, at least 32 bits long */ 49 typedef unsigned long int CK_ULONG; 50 51 /* a signed value, the same size as a CK_ULONG */ 52 typedef long int CK_LONG; 53 54 /* at least 32 bits; each bit is a Boolean flag */ 55 typedef CK_ULONG CK_FLAGS; 56 57 58 /* some special values for certain CK_ULONG variables */ 59 #define CK_UNAVAILABLE_INFORMATION (~0UL) 60 #define CK_EFFECTIVELY_INFINITE 0UL 61 62 63 typedef CK_BYTE CK_PTR CK_BYTE_PTR; 64 typedef CK_CHAR CK_PTR CK_CHAR_PTR; 65 typedef CK_UTF8CHAR CK_PTR CK_UTF8CHAR_PTR; 66 typedef CK_ULONG CK_PTR CK_ULONG_PTR; 67 typedef void CK_PTR CK_VOID_PTR; 68 69 /* Pointer to a CK_VOID_PTR-- i.e., pointer to pointer to void */ 70 typedef CK_VOID_PTR CK_PTR CK_VOID_PTR_PTR; 71 72 73 /* The following value is always invalid if used as a session 74 * handle or object handle 75 */ 76 #define CK_INVALID_HANDLE 0UL 77 78 79 typedef struct CK_VERSION { 80 CK_BYTE major; /* integer portion of version number */ 81 CK_BYTE minor; /* 1/100ths portion of version number */ 82 } CK_VERSION; 83 84 typedef CK_VERSION CK_PTR CK_VERSION_PTR; 85 86 87 typedef struct CK_INFO { 88 CK_VERSION cryptokiVersion; /* Cryptoki interface ver */ 89 CK_UTF8CHAR manufacturerID[32]; /* blank padded */ 90 CK_FLAGS flags; /* must be zero */ 91 CK_UTF8CHAR libraryDescription[32]; /* blank padded */ 92 CK_VERSION libraryVersion; /* version of library */ 93 } CK_INFO; 94 95 typedef CK_INFO CK_PTR CK_INFO_PTR; 96 97 98 /* CK_NOTIFICATION enumerates the types of notifications that 99 * Cryptoki provides to an application 100 */ 101 typedef CK_ULONG CK_NOTIFICATION; 102 #define CKN_SURRENDER 0UL 103 #define CKN_OTP_CHANGED 1UL 104 105 typedef CK_ULONG CK_SLOT_ID; 106 107 typedef CK_SLOT_ID CK_PTR CK_SLOT_ID_PTR; 108 109 110 /* CK_SLOT_INFO provides information about a slot */ 111 typedef struct CK_SLOT_INFO { 112 CK_UTF8CHAR slotDescription[64]; /* blank padded */ 113 CK_UTF8CHAR manufacturerID[32]; /* blank padded */ 114 CK_FLAGS flags; 115 116 CK_VERSION hardwareVersion; /* version of hardware */ 117 CK_VERSION firmwareVersion; /* version of firmware */ 118 } CK_SLOT_INFO; 119 120 /* flags: bit flags that provide capabilities of the slot 121 * Bit Flag Mask Meaning 122 */ 123 #define CKF_TOKEN_PRESENT 0x00000001UL /* a token is there */ 124 #define CKF_REMOVABLE_DEVICE 0x00000002UL /* removable devices*/ 125 #define CKF_HW_SLOT 0x00000004UL /* hardware slot */ 126 127 typedef CK_SLOT_INFO CK_PTR CK_SLOT_INFO_PTR; 128 129 130 /* CK_TOKEN_INFO provides information about a token */ 131 typedef struct CK_TOKEN_INFO { 132 CK_UTF8CHAR label[32]; /* blank padded */ 133 CK_UTF8CHAR manufacturerID[32]; /* blank padded */ 134 CK_UTF8CHAR model[16]; /* blank padded */ 135 CK_CHAR serialNumber[16]; /* blank padded */ 136 CK_FLAGS flags; /* see below */ 137 138 CK_ULONG ulMaxSessionCount; /* max open sessions */ 139 CK_ULONG ulSessionCount; /* sess. now open */ 140 CK_ULONG ulMaxRwSessionCount; /* max R/W sessions */ 141 CK_ULONG ulRwSessionCount; /* R/W sess. now open */ 142 CK_ULONG ulMaxPinLen; /* in bytes */ 143 CK_ULONG ulMinPinLen; /* in bytes */ 144 CK_ULONG ulTotalPublicMemory; /* in bytes */ 145 CK_ULONG ulFreePublicMemory; /* in bytes */ 146 CK_ULONG ulTotalPrivateMemory; /* in bytes */ 147 CK_ULONG ulFreePrivateMemory; /* in bytes */ 148 CK_VERSION hardwareVersion; /* version of hardware */ 149 CK_VERSION firmwareVersion; /* version of firmware */ 150 CK_CHAR utcTime[16]; /* time */ 151 } CK_TOKEN_INFO; 152 153 /* The flags parameter is defined as follows: 154 * Bit Flag Mask Meaning 155 */ 156 #define CKF_RNG 0x00000001UL /* has random # generator */ 157 #define CKF_WRITE_PROTECTED 0x00000002UL /* token is write-protected */ 158 #define CKF_LOGIN_REQUIRED 0x00000004UL /* user must login */ 159 #define CKF_USER_PIN_INITIALIZED 0x00000008UL /* normal user's PIN is set */ 160 161 /* CKF_RESTORE_KEY_NOT_NEEDED. If it is set, 162 * that means that *every* time the state of cryptographic 163 * operations of a session is successfully saved, all keys 164 * needed to continue those operations are stored in the state 165 */ 166 #define CKF_RESTORE_KEY_NOT_NEEDED 0x00000020UL 167 168 /* CKF_CLOCK_ON_TOKEN. If it is set, that means 169 * that the token has some sort of clock. The time on that 170 * clock is returned in the token info structure 171 */ 172 #define CKF_CLOCK_ON_TOKEN 0x00000040UL 173 174 /* CKF_PROTECTED_AUTHENTICATION_PATH. If it is 175 * set, that means that there is some way for the user to login 176 * without sending a PIN through the Cryptoki library itself 177 */ 178 #define CKF_PROTECTED_AUTHENTICATION_PATH 0x00000100UL 179 180 /* CKF_DUAL_CRYPTO_OPERATIONS. If it is true, 181 * that means that a single session with the token can perform 182 * dual simultaneous cryptographic operations (digest and 183 * encrypt; decrypt and digest; sign and encrypt; and decrypt 184 * and sign) 185 */ 186 #define CKF_DUAL_CRYPTO_OPERATIONS 0x00000200UL 187 188 /* CKF_TOKEN_INITIALIZED. If it is true, the 189 * token has been initialized using C_InitializeToken or an 190 * equivalent mechanism outside the scope of PKCS #11. 191 * Calling C_InitializeToken when this flag is set will cause 192 * the token to be reinitialized. 193 */ 194 #define CKF_TOKEN_INITIALIZED 0x00000400UL 195 196 /* CKF_SECONDARY_AUTHENTICATION. If it is 197 * true, the token supports secondary authentication for 198 * private key objects. 199 */ 200 #define CKF_SECONDARY_AUTHENTICATION 0x00000800UL 201 202 /* CKF_USER_PIN_COUNT_LOW. If it is true, an 203 * incorrect user login PIN has been entered at least once 204 * since the last successful authentication. 205 */ 206 #define CKF_USER_PIN_COUNT_LOW 0x00010000UL 207 208 /* CKF_USER_PIN_FINAL_TRY. If it is true, 209 * supplying an incorrect user PIN will it to become locked. 210 */ 211 #define CKF_USER_PIN_FINAL_TRY 0x00020000UL 212 213 /* CKF_USER_PIN_LOCKED. If it is true, the 214 * user PIN has been locked. User login to the token is not 215 * possible. 216 */ 217 #define CKF_USER_PIN_LOCKED 0x00040000UL 218 219 /* CKF_USER_PIN_TO_BE_CHANGED. If it is true, 220 * the user PIN value is the default value set by token 221 * initialization or manufacturing, or the PIN has been 222 * expired by the card. 223 */ 224 #define CKF_USER_PIN_TO_BE_CHANGED 0x00080000UL 225 226 /* CKF_SO_PIN_COUNT_LOW. If it is true, an 227 * incorrect SO login PIN has been entered at least once since 228 * the last successful authentication. 229 */ 230 #define CKF_SO_PIN_COUNT_LOW 0x00100000UL 231 232 /* CKF_SO_PIN_FINAL_TRY. If it is true, 233 * supplying an incorrect SO PIN will it to become locked. 234 */ 235 #define CKF_SO_PIN_FINAL_TRY 0x00200000UL 236 237 /* CKF_SO_PIN_LOCKED. If it is true, the SO 238 * PIN has been locked. SO login to the token is not possible. 239 */ 240 #define CKF_SO_PIN_LOCKED 0x00400000UL 241 242 /* CKF_SO_PIN_TO_BE_CHANGED. If it is true, 243 * the SO PIN value is the default value set by token 244 * initialization or manufacturing, or the PIN has been 245 * expired by the card. 246 */ 247 #define CKF_SO_PIN_TO_BE_CHANGED 0x00800000UL 248 249 #define CKF_ERROR_STATE 0x01000000UL 250 251 typedef CK_TOKEN_INFO CK_PTR CK_TOKEN_INFO_PTR; 252 253 254 /* CK_SESSION_HANDLE is a Cryptoki-assigned value that 255 * identifies a session 256 */ 257 typedef CK_ULONG CK_SESSION_HANDLE; 258 259 typedef CK_SESSION_HANDLE CK_PTR CK_SESSION_HANDLE_PTR; 260 261 262 /* CK_USER_TYPE enumerates the types of Cryptoki users */ 263 typedef CK_ULONG CK_USER_TYPE; 264 /* Security Officer */ 265 #define CKU_SO 0UL 266 /* Normal user */ 267 #define CKU_USER 1UL 268 /* Context specific */ 269 #define CKU_CONTEXT_SPECIFIC 2UL 270 271 /* CK_STATE enumerates the session states */ 272 typedef CK_ULONG CK_STATE; 273 #define CKS_RO_PUBLIC_SESSION 0UL 274 #define CKS_RO_USER_FUNCTIONS 1UL 275 #define CKS_RW_PUBLIC_SESSION 2UL 276 #define CKS_RW_USER_FUNCTIONS 3UL 277 #define CKS_RW_SO_FUNCTIONS 4UL 278 279 /* CK_SESSION_INFO provides information about a session */ 280 typedef struct CK_SESSION_INFO { 281 CK_SLOT_ID slotID; 282 CK_STATE state; 283 CK_FLAGS flags; /* see below */ 284 CK_ULONG ulDeviceError; /* device-dependent error code */ 285 } CK_SESSION_INFO; 286 287 /* The flags are defined in the following table: 288 * Bit Flag Mask Meaning 289 */ 290 #define CKF_RW_SESSION 0x00000002UL /* session is r/w */ 291 #define CKF_SERIAL_SESSION 0x00000004UL /* no parallel */ 292 293 typedef CK_SESSION_INFO CK_PTR CK_SESSION_INFO_PTR; 294 295 296 /* CK_OBJECT_HANDLE is a token-specific identifier for an 297 * object 298 */ 299 typedef CK_ULONG CK_OBJECT_HANDLE; 300 301 typedef CK_OBJECT_HANDLE CK_PTR CK_OBJECT_HANDLE_PTR; 302 303 304 /* CK_OBJECT_CLASS is a value that identifies the classes (or 305 * types) of objects that Cryptoki recognizes. It is defined 306 * as follows: 307 */ 308 typedef CK_ULONG CK_OBJECT_CLASS; 309 310 /* The following classes of objects are defined: */ 311 #define CKO_DATA 0x00000000UL 312 #define CKO_CERTIFICATE 0x00000001UL 313 #define CKO_PUBLIC_KEY 0x00000002UL 314 #define CKO_PRIVATE_KEY 0x00000003UL 315 #define CKO_SECRET_KEY 0x00000004UL 316 #define CKO_HW_FEATURE 0x00000005UL 317 #define CKO_DOMAIN_PARAMETERS 0x00000006UL 318 #define CKO_MECHANISM 0x00000007UL 319 #define CKO_OTP_KEY 0x00000008UL 320 #define CKO_PROFILE 0x00000009UL 321 322 #define CKO_VENDOR_DEFINED 0x80000000UL 323 324 typedef CK_OBJECT_CLASS CK_PTR CK_OBJECT_CLASS_PTR; 325 326 /* Profile ID's */ 327 #define CKP_INVALID_ID 0x00000000UL 328 #define CKP_BASELINE_PROVIDER 0x00000001UL 329 #define CKP_EXTENDED_PROVIDER 0x00000002UL 330 #define CKP_AUTHENTICATION_TOKEN 0x00000003UL 331 #define CKP_PUBLIC_CERTIFICATES_TOKEN 0x00000004UL 332 #define CKP_COMPLETE_PROVIDER 0x00000005UL 333 #define CKP_HKDF_TLS_TOKEN 0x00000006UL 334 #define CKP_VENDOR_DEFINED 0x80000000UL 335 336 337 /* CK_HW_FEATURE_TYPE is a value that identifies the hardware feature type 338 * of an object with CK_OBJECT_CLASS equal to CKO_HW_FEATURE. 339 */ 340 typedef CK_ULONG CK_HW_FEATURE_TYPE; 341 342 /* The following hardware feature types are defined */ 343 #define CKH_MONOTONIC_COUNTER 0x00000001UL 344 #define CKH_CLOCK 0x00000002UL 345 #define CKH_USER_INTERFACE 0x00000003UL 346 #define CKH_VENDOR_DEFINED 0x80000000UL 347 348 /* CK_KEY_TYPE is a value that identifies a key type */ 349 typedef CK_ULONG CK_KEY_TYPE; 350 351 /* the following key types are defined: */ 352 #define CKK_RSA 0x00000000UL 353 #define CKK_DSA 0x00000001UL 354 #define CKK_DH 0x00000002UL 355 #define CKK_ECDSA 0x00000003UL /* Deprecated */ 356 #define CKK_EC 0x00000003UL 357 #define CKK_X9_42_DH 0x00000004UL 358 #define CKK_KEA 0x00000005UL 359 #define CKK_GENERIC_SECRET 0x00000010UL 360 #define CKK_RC2 0x00000011UL 361 #define CKK_RC4 0x00000012UL 362 #define CKK_DES 0x00000013UL 363 #define CKK_DES2 0x00000014UL 364 #define CKK_DES3 0x00000015UL 365 #define CKK_CAST 0x00000016UL 366 #define CKK_CAST3 0x00000017UL 367 #define CKK_CAST5 0x00000018UL /* Deprecated */ 368 #define CKK_CAST128 0x00000018UL 369 #define CKK_RC5 0x00000019UL 370 #define CKK_IDEA 0x0000001AUL 371 #define CKK_SKIPJACK 0x0000001BUL 372 #define CKK_BATON 0x0000001CUL 373 #define CKK_JUNIPER 0x0000001DUL 374 #define CKK_CDMF 0x0000001EUL 375 #define CKK_AES 0x0000001FUL 376 #define CKK_BLOWFISH 0x00000020UL 377 #define CKK_TWOFISH 0x00000021UL 378 #define CKK_SECURID 0x00000022UL 379 #define CKK_HOTP 0x00000023UL 380 #define CKK_ACTI 0x00000024UL 381 #define CKK_CAMELLIA 0x00000025UL 382 #define CKK_ARIA 0x00000026UL 383 384 /* the following definitions were added in the 2.30 header file, 385 * but never defined in the spec. */ 386 #define CKK_MD5_HMAC 0x00000027UL 387 #define CKK_SHA_1_HMAC 0x00000028UL 388 #define CKK_RIPEMD128_HMAC 0x00000029UL 389 #define CKK_RIPEMD160_HMAC 0x0000002AUL 390 #define CKK_SHA256_HMAC 0x0000002BUL 391 #define CKK_SHA384_HMAC 0x0000002CUL 392 #define CKK_SHA512_HMAC 0x0000002DUL 393 #define CKK_SHA224_HMAC 0x0000002EUL 394 395 #define CKK_SEED 0x0000002FUL 396 #define CKK_GOSTR3410 0x00000030UL 397 #define CKK_GOSTR3411 0x00000031UL 398 #define CKK_GOST28147 0x00000032UL 399 #define CKK_CHACHA20 0x00000033UL 400 #define CKK_POLY1305 0x00000034UL 401 #define CKK_AES_XTS 0x00000035UL 402 #define CKK_SHA3_224_HMAC 0x00000036UL 403 #define CKK_SHA3_256_HMAC 0x00000037UL 404 #define CKK_SHA3_384_HMAC 0x00000038UL 405 #define CKK_SHA3_512_HMAC 0x00000039UL 406 #define CKK_BLAKE2B_160_HMAC 0x0000003aUL 407 #define CKK_BLAKE2B_256_HMAC 0x0000003bUL 408 #define CKK_BLAKE2B_384_HMAC 0x0000003cUL 409 #define CKK_BLAKE2B_512_HMAC 0x0000003dUL 410 #define CKK_SALSA20 0x0000003eUL 411 #define CKK_X2RATCHET 0x0000003fUL 412 #define CKK_EC_EDWARDS 0x00000040UL 413 #define CKK_EC_MONTGOMERY 0x00000041UL 414 #define CKK_HKDF 0x00000042UL 415 416 #define CKK_SHA512_224_HMAC 0x00000043UL 417 #define CKK_SHA512_256_HMAC 0x00000044UL 418 #define CKK_SHA512_T_HMAC 0x00000045UL 419 #define CKK_HSS 0x00000046UL 420 421 #define CKK_VENDOR_DEFINED 0x80000000UL 422 423 424 /* CK_CERTIFICATE_TYPE is a value that identifies a certificate 425 * type 426 */ 427 typedef CK_ULONG CK_CERTIFICATE_TYPE; 428 429 #define CK_CERTIFICATE_CATEGORY_UNSPECIFIED 0UL 430 #define CK_CERTIFICATE_CATEGORY_TOKEN_USER 1UL 431 #define CK_CERTIFICATE_CATEGORY_AUTHORITY 2UL 432 #define CK_CERTIFICATE_CATEGORY_OTHER_ENTITY 3UL 433 434 #define CK_SECURITY_DOMAIN_UNSPECIFIED 0UL 435 #define CK_SECURITY_DOMAIN_MANUFACTURER 1UL 436 #define CK_SECURITY_DOMAIN_OPERATOR 2UL 437 #define CK_SECURITY_DOMAIN_THIRD_PARTY 3UL 438 439 440 /* The following certificate types are defined: */ 441 #define CKC_X_509 0x00000000UL 442 #define CKC_X_509_ATTR_CERT 0x00000001UL 443 #define CKC_WTLS 0x00000002UL 444 #define CKC_VENDOR_DEFINED 0x80000000UL 445 446 447 /* CK_ATTRIBUTE_TYPE is a value that identifies an attribute 448 * type 449 */ 450 typedef CK_ULONG CK_ATTRIBUTE_TYPE; 451 452 /* The CKF_ARRAY_ATTRIBUTE flag identifies an attribute which 453 * consists of an array of values. 454 */ 455 #define CKF_ARRAY_ATTRIBUTE 0x40000000UL 456 457 /* The following OTP-related defines relate to the CKA_OTP_FORMAT attribute */ 458 #define CK_OTP_FORMAT_DECIMAL 0UL 459 #define CK_OTP_FORMAT_HEXADECIMAL 1UL 460 #define CK_OTP_FORMAT_ALPHANUMERIC 2UL 461 #define CK_OTP_FORMAT_BINARY 3UL 462 463 /* The following OTP-related defines relate to the CKA_OTP_..._REQUIREMENT 464 * attributes 465 */ 466 #define CK_OTP_PARAM_IGNORED 0UL 467 #define CK_OTP_PARAM_OPTIONAL 1UL 468 #define CK_OTP_PARAM_MANDATORY 2UL 469 470 /* The following attribute types are defined: */ 471 #define CKA_CLASS 0x00000000UL 472 #define CKA_TOKEN 0x00000001UL 473 #define CKA_PRIVATE 0x00000002UL 474 #define CKA_LABEL 0x00000003UL 475 #define CKA_UNIQUE_ID 0x00000004UL 476 #define CKA_APPLICATION 0x00000010UL 477 #define CKA_VALUE 0x00000011UL 478 #define CKA_OBJECT_ID 0x00000012UL 479 #define CKA_CERTIFICATE_TYPE 0x00000080UL 480 #define CKA_ISSUER 0x00000081UL 481 #define CKA_SERIAL_NUMBER 0x00000082UL 482 #define CKA_AC_ISSUER 0x00000083UL 483 #define CKA_OWNER 0x00000084UL 484 #define CKA_ATTR_TYPES 0x00000085UL 485 #define CKA_TRUSTED 0x00000086UL 486 #define CKA_CERTIFICATE_CATEGORY 0x00000087UL 487 #define CKA_JAVA_MIDP_SECURITY_DOMAIN 0x00000088UL 488 #define CKA_URL 0x00000089UL 489 #define CKA_HASH_OF_SUBJECT_PUBLIC_KEY 0x0000008aUL 490 #define CKA_HASH_OF_ISSUER_PUBLIC_KEY 0x0000008bUL 491 #define CKA_NAME_HASH_ALGORITHM 0x0000008cUL 492 #define CKA_CHECK_VALUE 0x00000090UL 493 494 #define CKA_KEY_TYPE 0x00000100UL 495 #define CKA_SUBJECT 0x00000101UL 496 #define CKA_ID 0x00000102UL 497 #define CKA_SENSITIVE 0x00000103UL 498 #define CKA_ENCRYPT 0x00000104UL 499 #define CKA_DECRYPT 0x00000105UL 500 #define CKA_WRAP 0x00000106UL 501 #define CKA_UNWRAP 0x00000107UL 502 #define CKA_SIGN 0x00000108UL 503 #define CKA_SIGN_RECOVER 0x00000109UL 504 #define CKA_VERIFY 0x0000010aUL 505 #define CKA_VERIFY_RECOVER 0x0000010bUL 506 #define CKA_DERIVE 0x0000010cUL 507 #define CKA_START_DATE 0x00000110UL 508 #define CKA_END_DATE 0x00000111UL 509 #define CKA_MODULUS 0x00000120UL 510 #define CKA_MODULUS_BITS 0x00000121UL 511 #define CKA_PUBLIC_EXPONENT 0x00000122UL 512 #define CKA_PRIVATE_EXPONENT 0x00000123UL 513 #define CKA_PRIME_1 0x00000124UL 514 #define CKA_PRIME_2 0x00000125UL 515 #define CKA_EXPONENT_1 0x00000126UL 516 #define CKA_EXPONENT_2 0x00000127UL 517 #define CKA_COEFFICIENT 0x00000128UL 518 #define CKA_PUBLIC_KEY_INFO 0x00000129UL 519 #define CKA_PRIME 0x00000130UL 520 #define CKA_SUBPRIME 0x00000131UL 521 #define CKA_BASE 0x00000132UL 522 523 #define CKA_PRIME_BITS 0x00000133UL 524 #define CKA_SUBPRIME_BITS 0x00000134UL 525 #define CKA_SUB_PRIME_BITS CKA_SUBPRIME_BITS 526 527 #define CKA_VALUE_BITS 0x00000160UL 528 #define CKA_VALUE_LEN 0x00000161UL 529 #define CKA_EXTRACTABLE 0x00000162UL 530 #define CKA_LOCAL 0x00000163UL 531 #define CKA_NEVER_EXTRACTABLE 0x00000164UL 532 #define CKA_ALWAYS_SENSITIVE 0x00000165UL 533 #define CKA_KEY_GEN_MECHANISM 0x00000166UL 534 535 #define CKA_MODIFIABLE 0x00000170UL 536 #define CKA_COPYABLE 0x00000171UL 537 538 #define CKA_DESTROYABLE 0x00000172UL 539 540 #define CKA_ECDSA_PARAMS 0x00000180UL /* Deprecated */ 541 #define CKA_EC_PARAMS 0x00000180UL 542 543 #define CKA_EC_POINT 0x00000181UL 544 545 #define CKA_SECONDARY_AUTH 0x00000200UL /* Deprecated */ 546 #define CKA_AUTH_PIN_FLAGS 0x00000201UL /* Deprecated */ 547 548 #define CKA_ALWAYS_AUTHENTICATE 0x00000202UL 549 550 #define CKA_WRAP_WITH_TRUSTED 0x00000210UL 551 #define CKA_WRAP_TEMPLATE (CKF_ARRAY_ATTRIBUTE|0x00000211UL) 552 #define CKA_UNWRAP_TEMPLATE (CKF_ARRAY_ATTRIBUTE|0x00000212UL) 553 #define CKA_DERIVE_TEMPLATE (CKF_ARRAY_ATTRIBUTE|0x00000213UL) 554 555 #define CKA_OTP_FORMAT 0x00000220UL 556 #define CKA_OTP_LENGTH 0x00000221UL 557 #define CKA_OTP_TIME_INTERVAL 0x00000222UL 558 #define CKA_OTP_USER_FRIENDLY_MODE 0x00000223UL 559 #define CKA_OTP_CHALLENGE_REQUIREMENT 0x00000224UL 560 #define CKA_OTP_TIME_REQUIREMENT 0x00000225UL 561 #define CKA_OTP_COUNTER_REQUIREMENT 0x00000226UL 562 #define CKA_OTP_PIN_REQUIREMENT 0x00000227UL 563 #define CKA_OTP_COUNTER 0x0000022eUL 564 #define CKA_OTP_TIME 0x0000022fUL 565 #define CKA_OTP_USER_IDENTIFIER 0x0000022aUL 566 #define CKA_OTP_SERVICE_IDENTIFIER 0x0000022bUL 567 #define CKA_OTP_SERVICE_LOGO 0x0000022cUL 568 #define CKA_OTP_SERVICE_LOGO_TYPE 0x0000022dUL 569 570 #define CKA_GOSTR3410_PARAMS 0x00000250UL 571 #define CKA_GOSTR3411_PARAMS 0x00000251UL 572 #define CKA_GOST28147_PARAMS 0x00000252UL 573 574 #define CKA_HW_FEATURE_TYPE 0x00000300UL 575 #define CKA_RESET_ON_INIT 0x00000301UL 576 #define CKA_HAS_RESET 0x00000302UL 577 578 #define CKA_PIXEL_X 0x00000400UL 579 #define CKA_PIXEL_Y 0x00000401UL 580 #define CKA_RESOLUTION 0x00000402UL 581 #define CKA_CHAR_ROWS 0x00000403UL 582 #define CKA_CHAR_COLUMNS 0x00000404UL 583 #define CKA_COLOR 0x00000405UL 584 #define CKA_BITS_PER_PIXEL 0x00000406UL 585 #define CKA_CHAR_SETS 0x00000480UL 586 #define CKA_ENCODING_METHODS 0x00000481UL 587 #define CKA_MIME_TYPES 0x00000482UL 588 #define CKA_MECHANISM_TYPE 0x00000500UL 589 #define CKA_REQUIRED_CMS_ATTRIBUTES 0x00000501UL 590 #define CKA_DEFAULT_CMS_ATTRIBUTES 0x00000502UL 591 #define CKA_SUPPORTED_CMS_ATTRIBUTES 0x00000503UL 592 #define CKA_ALLOWED_MECHANISMS (CKF_ARRAY_ATTRIBUTE|0x00000600UL) 593 #define CKA_PROFILE_ID 0x00000601UL 594 595 #define CKA_X2RATCHET_BAG 0x00000602UL 596 #define CKA_X2RATCHET_BAGSIZE 0x00000603UL 597 #define CKA_X2RATCHET_BOBS1STMSG 0x00000604UL 598 #define CKA_X2RATCHET_CKR 0x00000605UL 599 #define CKA_X2RATCHET_CKS 0x00000606UL 600 #define CKA_X2RATCHET_DHP 0x00000607UL 601 #define CKA_X2RATCHET_DHR 0x00000608UL 602 #define CKA_X2RATCHET_DHS 0x00000609UL 603 #define CKA_X2RATCHET_HKR 0x0000060aUL 604 #define CKA_X2RATCHET_HKS 0x0000060bUL 605 #define CKA_X2RATCHET_ISALICE 0x0000060cUL 606 #define CKA_X2RATCHET_NHKR 0x0000060dUL 607 #define CKA_X2RATCHET_NHKS 0x0000060eUL 608 #define CKA_X2RATCHET_NR 0x0000060fUL 609 #define CKA_X2RATCHET_NS 0x00000610UL 610 #define CKA_X2RATCHET_PNS 0x00000611UL 611 #define CKA_X2RATCHET_RK 0x00000612UL 612 /* HSS */ 613 #define CKA_HSS_LEVELS 0x00000617UL 614 #define CKA_HSS_LMS_TYPE 0x00000618UL 615 #define CKA_HSS_LMOTS_TYPE 0x00000619UL 616 #define CKA_HSS_LMS_TYPES 0x0000061aUL 617 #define CKA_HSS_LMOTS_TYPES 0x0000061bUL 618 #define CKA_HSS_KEYS_REMAINING 0x0000061cUL 619 620 #define CKA_VENDOR_DEFINED 0x80000000UL 621 622 /* CK_ATTRIBUTE is a structure that includes the type, length 623 * and value of an attribute 624 */ 625 typedef struct CK_ATTRIBUTE { 626 CK_ATTRIBUTE_TYPE type; 627 CK_VOID_PTR pValue; 628 CK_ULONG ulValueLen; /* in bytes */ 629 } CK_ATTRIBUTE; 630 631 typedef CK_ATTRIBUTE CK_PTR CK_ATTRIBUTE_PTR; 632 633 /* CK_DATE is a structure that defines a date */ 634 typedef struct CK_DATE{ 635 CK_CHAR year[4]; /* the year ("1900" - "9999") */ 636 CK_CHAR month[2]; /* the month ("01" - "12") */ 637 CK_CHAR day[2]; /* the day ("01" - "31") */ 638 } CK_DATE; 639 640 641 /* CK_MECHANISM_TYPE is a value that identifies a mechanism 642 * type 643 */ 644 typedef CK_ULONG CK_MECHANISM_TYPE; 645 646 /* the following mechanism types are defined: */ 647 #define CKM_RSA_PKCS_KEY_PAIR_GEN 0x00000000UL 648 #define CKM_RSA_PKCS 0x00000001UL 649 #define CKM_RSA_9796 0x00000002UL 650 #define CKM_RSA_X_509 0x00000003UL 651 652 #define CKM_MD2_RSA_PKCS 0x00000004UL 653 #define CKM_MD5_RSA_PKCS 0x00000005UL 654 #define CKM_SHA1_RSA_PKCS 0x00000006UL 655 656 #define CKM_RIPEMD128_RSA_PKCS 0x00000007UL 657 #define CKM_RIPEMD160_RSA_PKCS 0x00000008UL 658 #define CKM_RSA_PKCS_OAEP 0x00000009UL 659 660 #define CKM_RSA_X9_31_KEY_PAIR_GEN 0x0000000aUL 661 #define CKM_RSA_X9_31 0x0000000bUL 662 #define CKM_SHA1_RSA_X9_31 0x0000000cUL 663 #define CKM_RSA_PKCS_PSS 0x0000000dUL 664 #define CKM_SHA1_RSA_PKCS_PSS 0x0000000eUL 665 666 #define CKM_DSA_KEY_PAIR_GEN 0x00000010UL 667 #define CKM_DSA 0x00000011UL 668 #define CKM_DSA_SHA1 0x00000012UL 669 #define CKM_DSA_SHA224 0x00000013UL 670 #define CKM_DSA_SHA256 0x00000014UL 671 #define CKM_DSA_SHA384 0x00000015UL 672 #define CKM_DSA_SHA512 0x00000016UL 673 #define CKM_DSA_SHA3_224 0x00000018UL 674 #define CKM_DSA_SHA3_256 0x00000019UL 675 #define CKM_DSA_SHA3_384 0x0000001aUL 676 #define CKM_DSA_SHA3_512 0x0000001bUL 677 678 #define CKM_DH_PKCS_KEY_PAIR_GEN 0x00000020UL 679 #define CKM_DH_PKCS_DERIVE 0x00000021UL 680 681 #define CKM_X9_42_DH_KEY_PAIR_GEN 0x00000030UL 682 #define CKM_X9_42_DH_DERIVE 0x00000031UL 683 #define CKM_X9_42_DH_HYBRID_DERIVE 0x00000032UL 684 #define CKM_X9_42_MQV_DERIVE 0x00000033UL 685 686 #define CKM_SHA256_RSA_PKCS 0x00000040UL 687 #define CKM_SHA384_RSA_PKCS 0x00000041UL 688 #define CKM_SHA512_RSA_PKCS 0x00000042UL 689 #define CKM_SHA256_RSA_PKCS_PSS 0x00000043UL 690 #define CKM_SHA384_RSA_PKCS_PSS 0x00000044UL 691 #define CKM_SHA512_RSA_PKCS_PSS 0x00000045UL 692 693 #define CKM_SHA224_RSA_PKCS 0x00000046UL 694 #define CKM_SHA224_RSA_PKCS_PSS 0x00000047UL 695 696 #define CKM_SHA512_224 0x00000048UL 697 #define CKM_SHA512_224_HMAC 0x00000049UL 698 #define CKM_SHA512_224_HMAC_GENERAL 0x0000004aUL 699 #define CKM_SHA512_224_KEY_DERIVATION 0x0000004bUL 700 #define CKM_SHA512_256 0x0000004cUL 701 #define CKM_SHA512_256_HMAC 0x0000004dUL 702 #define CKM_SHA512_256_HMAC_GENERAL 0x0000004eUL 703 #define CKM_SHA512_256_KEY_DERIVATION 0x0000004fUL 704 705 #define CKM_SHA512_T 0x00000050UL 706 #define CKM_SHA512_T_HMAC 0x00000051UL 707 #define CKM_SHA512_T_HMAC_GENERAL 0x00000052UL 708 #define CKM_SHA512_T_KEY_DERIVATION 0x00000053UL 709 710 #define CKM_SHA3_256_RSA_PKCS 0x00000060UL 711 #define CKM_SHA3_384_RSA_PKCS 0x00000061UL 712 #define CKM_SHA3_512_RSA_PKCS 0x00000062UL 713 #define CKM_SHA3_256_RSA_PKCS_PSS 0x00000063UL 714 #define CKM_SHA3_384_RSA_PKCS_PSS 0x00000064UL 715 #define CKM_SHA3_512_RSA_PKCS_PSS 0x00000065UL 716 #define CKM_SHA3_224_RSA_PKCS 0x00000066UL 717 #define CKM_SHA3_224_RSA_PKCS_PSS 0x00000067UL 718 719 #define CKM_RC2_KEY_GEN 0x00000100UL 720 #define CKM_RC2_ECB 0x00000101UL 721 #define CKM_RC2_CBC 0x00000102UL 722 #define CKM_RC2_MAC 0x00000103UL 723 724 #define CKM_RC2_MAC_GENERAL 0x00000104UL 725 #define CKM_RC2_CBC_PAD 0x00000105UL 726 727 #define CKM_RC4_KEY_GEN 0x00000110UL 728 #define CKM_RC4 0x00000111UL 729 #define CKM_DES_KEY_GEN 0x00000120UL 730 #define CKM_DES_ECB 0x00000121UL 731 #define CKM_DES_CBC 0x00000122UL 732 #define CKM_DES_MAC 0x00000123UL 733 734 #define CKM_DES_MAC_GENERAL 0x00000124UL 735 #define CKM_DES_CBC_PAD 0x00000125UL 736 737 #define CKM_DES2_KEY_GEN 0x00000130UL 738 #define CKM_DES3_KEY_GEN 0x00000131UL 739 #define CKM_DES3_ECB 0x00000132UL 740 #define CKM_DES3_CBC 0x00000133UL 741 #define CKM_DES3_MAC 0x00000134UL 742 743 #define CKM_DES3_MAC_GENERAL 0x00000135UL 744 #define CKM_DES3_CBC_PAD 0x00000136UL 745 #define CKM_DES3_CMAC_GENERAL 0x00000137UL 746 #define CKM_DES3_CMAC 0x00000138UL 747 #define CKM_CDMF_KEY_GEN 0x00000140UL 748 #define CKM_CDMF_ECB 0x00000141UL 749 #define CKM_CDMF_CBC 0x00000142UL 750 #define CKM_CDMF_MAC 0x00000143UL 751 #define CKM_CDMF_MAC_GENERAL 0x00000144UL 752 #define CKM_CDMF_CBC_PAD 0x00000145UL 753 754 #define CKM_DES_OFB64 0x00000150UL 755 #define CKM_DES_OFB8 0x00000151UL 756 #define CKM_DES_CFB64 0x00000152UL 757 #define CKM_DES_CFB8 0x00000153UL 758 759 #define CKM_MD2 0x00000200UL 760 761 #define CKM_MD2_HMAC 0x00000201UL 762 #define CKM_MD2_HMAC_GENERAL 0x00000202UL 763 764 #define CKM_MD5 0x00000210UL 765 766 #define CKM_MD5_HMAC 0x00000211UL 767 #define CKM_MD5_HMAC_GENERAL 0x00000212UL 768 769 #define CKM_SHA_1 0x00000220UL 770 771 #define CKM_SHA_1_HMAC 0x00000221UL 772 #define CKM_SHA_1_HMAC_GENERAL 0x00000222UL 773 774 #define CKM_RIPEMD128 0x00000230UL 775 #define CKM_RIPEMD128_HMAC 0x00000231UL 776 #define CKM_RIPEMD128_HMAC_GENERAL 0x00000232UL 777 #define CKM_RIPEMD160 0x00000240UL 778 #define CKM_RIPEMD160_HMAC 0x00000241UL 779 #define CKM_RIPEMD160_HMAC_GENERAL 0x00000242UL 780 781 #define CKM_SHA256 0x00000250UL 782 #define CKM_SHA256_HMAC 0x00000251UL 783 #define CKM_SHA256_HMAC_GENERAL 0x00000252UL 784 #define CKM_SHA224 0x00000255UL 785 #define CKM_SHA224_HMAC 0x00000256UL 786 #define CKM_SHA224_HMAC_GENERAL 0x00000257UL 787 #define CKM_SHA384 0x00000260UL 788 #define CKM_SHA384_HMAC 0x00000261UL 789 #define CKM_SHA384_HMAC_GENERAL 0x00000262UL 790 #define CKM_SHA512 0x00000270UL 791 #define CKM_SHA512_HMAC 0x00000271UL 792 #define CKM_SHA512_HMAC_GENERAL 0x00000272UL 793 #define CKM_SECURID_KEY_GEN 0x00000280UL 794 #define CKM_SECURID 0x00000282UL 795 #define CKM_HOTP_KEY_GEN 0x00000290UL 796 #define CKM_HOTP 0x00000291UL 797 #define CKM_ACTI 0x000002a0UL 798 #define CKM_ACTI_KEY_GEN 0x000002a1UL 799 800 #define CKM_SHA3_256 0x000002b0UL 801 #define CKM_SHA3_256_HMAC 0x000002b1UL 802 #define CKM_SHA3_256_HMAC_GENERAL 0x000002b2UL 803 #define CKM_SHA3_256_KEY_GEN 0x000002b3UL 804 #define CKM_SHA3_224 0x000002b5UL 805 #define CKM_SHA3_224_HMAC 0x000002b6UL 806 #define CKM_SHA3_224_HMAC_GENERAL 0x000002b7UL 807 #define CKM_SHA3_224_KEY_GEN 0x000002b8UL 808 #define CKM_SHA3_384 0x000002c0UL 809 #define CKM_SHA3_384_HMAC 0x000002c1UL 810 #define CKM_SHA3_384_HMAC_GENERAL 0x000002c2UL 811 #define CKM_SHA3_384_KEY_GEN 0x000002c3UL 812 #define CKM_SHA3_512 0x000002d0UL 813 #define CKM_SHA3_512_HMAC 0x000002d1UL 814 #define CKM_SHA3_512_HMAC_GENERAL 0x000002d2UL 815 #define CKM_SHA3_512_KEY_GEN 0x000002d3UL 816 817 818 #define CKM_CAST_KEY_GEN 0x00000300UL 819 #define CKM_CAST_ECB 0x00000301UL 820 #define CKM_CAST_CBC 0x00000302UL 821 #define CKM_CAST_MAC 0x00000303UL 822 #define CKM_CAST_MAC_GENERAL 0x00000304UL 823 #define CKM_CAST_CBC_PAD 0x00000305UL 824 #define CKM_CAST3_KEY_GEN 0x00000310UL 825 #define CKM_CAST3_ECB 0x00000311UL 826 #define CKM_CAST3_CBC 0x00000312UL 827 #define CKM_CAST3_MAC 0x00000313UL 828 #define CKM_CAST3_MAC_GENERAL 0x00000314UL 829 #define CKM_CAST3_CBC_PAD 0x00000315UL 830 /* Note that CAST128 and CAST5 are the same algorithm */ 831 #define CKM_CAST5_KEY_GEN 0x00000320UL 832 #define CKM_CAST128_KEY_GEN 0x00000320UL 833 #define CKM_CAST5_ECB 0x00000321UL 834 #define CKM_CAST128_ECB 0x00000321UL 835 #define CKM_CAST5_CBC 0x00000322UL /* Deprecated */ 836 #define CKM_CAST128_CBC 0x00000322UL 837 #define CKM_CAST5_MAC 0x00000323UL /* Deprecated */ 838 #define CKM_CAST128_MAC 0x00000323UL 839 #define CKM_CAST5_MAC_GENERAL 0x00000324UL /* Deprecated */ 840 #define CKM_CAST128_MAC_GENERAL 0x00000324UL 841 #define CKM_CAST5_CBC_PAD 0x00000325UL /* Deprecated */ 842 #define CKM_CAST128_CBC_PAD 0x00000325UL 843 #define CKM_RC5_KEY_GEN 0x00000330UL 844 #define CKM_RC5_ECB 0x00000331UL 845 #define CKM_RC5_CBC 0x00000332UL 846 #define CKM_RC5_MAC 0x00000333UL 847 #define CKM_RC5_MAC_GENERAL 0x00000334UL 848 #define CKM_RC5_CBC_PAD 0x00000335UL 849 #define CKM_IDEA_KEY_GEN 0x00000340UL 850 #define CKM_IDEA_ECB 0x00000341UL 851 #define CKM_IDEA_CBC 0x00000342UL 852 #define CKM_IDEA_MAC 0x00000343UL 853 #define CKM_IDEA_MAC_GENERAL 0x00000344UL 854 #define CKM_IDEA_CBC_PAD 0x00000345UL 855 #define CKM_GENERIC_SECRET_KEY_GEN 0x00000350UL 856 #define CKM_CONCATENATE_BASE_AND_KEY 0x00000360UL 857 #define CKM_CONCATENATE_BASE_AND_DATA 0x00000362UL 858 #define CKM_CONCATENATE_DATA_AND_BASE 0x00000363UL 859 #define CKM_XOR_BASE_AND_DATA 0x00000364UL 860 #define CKM_EXTRACT_KEY_FROM_KEY 0x00000365UL 861 #define CKM_SSL3_PRE_MASTER_KEY_GEN 0x00000370UL 862 #define CKM_SSL3_MASTER_KEY_DERIVE 0x00000371UL 863 #define CKM_SSL3_KEY_AND_MAC_DERIVE 0x00000372UL 864 865 #define CKM_SSL3_MASTER_KEY_DERIVE_DH 0x00000373UL 866 #define CKM_TLS_PRE_MASTER_KEY_GEN 0x00000374UL 867 #define CKM_TLS_MASTER_KEY_DERIVE 0x00000375UL 868 #define CKM_TLS_KEY_AND_MAC_DERIVE 0x00000376UL 869 #define CKM_TLS_MASTER_KEY_DERIVE_DH 0x00000377UL 870 871 #define CKM_TLS_PRF 0x00000378UL 872 873 #define CKM_SSL3_MD5_MAC 0x00000380UL 874 #define CKM_SSL3_SHA1_MAC 0x00000381UL 875 #define CKM_MD5_KEY_DERIVATION 0x00000390UL 876 #define CKM_MD2_KEY_DERIVATION 0x00000391UL 877 #define CKM_SHA1_KEY_DERIVATION 0x00000392UL 878 879 #define CKM_SHA256_KEY_DERIVATION 0x00000393UL 880 #define CKM_SHA384_KEY_DERIVATION 0x00000394UL 881 #define CKM_SHA512_KEY_DERIVATION 0x00000395UL 882 #define CKM_SHA224_KEY_DERIVATION 0x00000396UL 883 #define CKM_SHA3_256_KEY_DERIVATION 0x00000397UL 884 #define CKM_SHA3_224_KEY_DERIVATION 0x00000398UL 885 #define CKM_SHA3_384_KEY_DERIVATION 0x00000399UL 886 #define CKM_SHA3_512_KEY_DERIVATION 0x0000039aUL 887 #define CKM_SHAKE_128_KEY_DERIVATION 0x0000039bUL 888 #define CKM_SHAKE_256_KEY_DERIVATION 0x0000039cUL 889 #define CKM_SHA3_256_KEY_DERIVE CKM_SHA3_256_KEY_DERIVATION 890 #define CKM_SHA3_224_KEY_DERIVE CKM_SHA3_224_KEY_DERIVATION 891 #define CKM_SHA3_384_KEY_DERIVE CKM_SHA3_384_KEY_DERIVATION 892 #define CKM_SHA3_512_KEY_DERIVE CKM_SHA3_512_KEY_DERIVATION 893 #define CKM_SHAKE_128_KEY_DERIVE CKM_SHAKE_128_KEY_DERIVATION 894 #define CKM_SHAKE_256_KEY_DERIVE CKM_SHAKE_256_KEY_DERIVATION 895 896 #define CKM_PBE_MD2_DES_CBC 0x000003a0UL 897 #define CKM_PBE_MD5_DES_CBC 0x000003a1UL 898 #define CKM_PBE_MD5_CAST_CBC 0x000003a2UL 899 #define CKM_PBE_MD5_CAST3_CBC 0x000003a3UL 900 #define CKM_PBE_MD5_CAST5_CBC 0x000003a4UL /* Deprecated */ 901 #define CKM_PBE_MD5_CAST128_CBC 0x000003a4UL 902 #define CKM_PBE_SHA1_CAST5_CBC 0x000003a5UL /* Deprecated */ 903 #define CKM_PBE_SHA1_CAST128_CBC 0x000003a5UL 904 #define CKM_PBE_SHA1_RC4_128 0x000003a6UL 905 #define CKM_PBE_SHA1_RC4_40 0x000003a7UL 906 #define CKM_PBE_SHA1_DES3_EDE_CBC 0x000003a8UL 907 #define CKM_PBE_SHA1_DES2_EDE_CBC 0x000003a9UL 908 #define CKM_PBE_SHA1_RC2_128_CBC 0x000003aaUL 909 #define CKM_PBE_SHA1_RC2_40_CBC 0x000003abUL 910 911 #define CKM_PKCS5_PBKD2 0x000003b0UL 912 913 #define CKM_PBA_SHA1_WITH_SHA1_HMAC 0x000003c0UL 914 915 #define CKM_WTLS_PRE_MASTER_KEY_GEN 0x000003d0UL 916 #define CKM_WTLS_MASTER_KEY_DERIVE 0x000003d1UL 917 #define CKM_WTLS_MASTER_KEY_DERIVE_DH_ECC 0x000003d2UL 918 #define CKM_WTLS_PRF 0x000003d3UL 919 #define CKM_WTLS_SERVER_KEY_AND_MAC_DERIVE 0x000003d4UL 920 #define CKM_WTLS_CLIENT_KEY_AND_MAC_DERIVE 0x000003d5UL 921 922 #define CKM_TLS10_MAC_SERVER 0x000003d6UL 923 #define CKM_TLS10_MAC_CLIENT 0x000003d7UL 924 #define CKM_TLS12_MAC 0x000003d8UL 925 #define CKM_TLS12_KDF 0x000003d9UL 926 #define CKM_TLS12_MASTER_KEY_DERIVE 0x000003e0UL 927 #define CKM_TLS12_KEY_AND_MAC_DERIVE 0x000003e1UL 928 #define CKM_TLS12_MASTER_KEY_DERIVE_DH 0x000003e2UL 929 #define CKM_TLS12_KEY_SAFE_DERIVE 0x000003e3UL 930 #define CKM_TLS_MAC 0x000003e4UL 931 #define CKM_TLS_KDF 0x000003e5UL 932 933 #define CKM_KEY_WRAP_LYNKS 0x00000400UL 934 #define CKM_KEY_WRAP_SET_OAEP 0x00000401UL 935 936 #define CKM_CMS_SIG 0x00000500UL 937 #define CKM_KIP_DERIVE 0x00000510UL 938 #define CKM_KIP_WRAP 0x00000511UL 939 #define CKM_KIP_MAC 0x00000512UL 940 941 #define CKM_CAMELLIA_KEY_GEN 0x00000550UL 942 #define CKM_CAMELLIA_ECB 0x00000551UL 943 #define CKM_CAMELLIA_CBC 0x00000552UL 944 #define CKM_CAMELLIA_MAC 0x00000553UL 945 #define CKM_CAMELLIA_MAC_GENERAL 0x00000554UL 946 #define CKM_CAMELLIA_CBC_PAD 0x00000555UL 947 #define CKM_CAMELLIA_ECB_ENCRYPT_DATA 0x00000556UL 948 #define CKM_CAMELLIA_CBC_ENCRYPT_DATA 0x00000557UL 949 #define CKM_CAMELLIA_CTR 0x00000558UL 950 951 #define CKM_ARIA_KEY_GEN 0x00000560UL 952 #define CKM_ARIA_ECB 0x00000561UL 953 #define CKM_ARIA_CBC 0x00000562UL 954 #define CKM_ARIA_MAC 0x00000563UL 955 #define CKM_ARIA_MAC_GENERAL 0x00000564UL 956 #define CKM_ARIA_CBC_PAD 0x00000565UL 957 #define CKM_ARIA_ECB_ENCRYPT_DATA 0x00000566UL 958 #define CKM_ARIA_CBC_ENCRYPT_DATA 0x00000567UL 959 960 #define CKM_SEED_KEY_GEN 0x00000650UL 961 #define CKM_SEED_ECB 0x00000651UL 962 #define CKM_SEED_CBC 0x00000652UL 963 #define CKM_SEED_MAC 0x00000653UL 964 #define CKM_SEED_MAC_GENERAL 0x00000654UL 965 #define CKM_SEED_CBC_PAD 0x00000655UL 966 #define CKM_SEED_ECB_ENCRYPT_DATA 0x00000656UL 967 #define CKM_SEED_CBC_ENCRYPT_DATA 0x00000657UL 968 969 #define CKM_SKIPJACK_KEY_GEN 0x00001000UL 970 #define CKM_SKIPJACK_ECB64 0x00001001UL 971 #define CKM_SKIPJACK_CBC64 0x00001002UL 972 #define CKM_SKIPJACK_OFB64 0x00001003UL 973 #define CKM_SKIPJACK_CFB64 0x00001004UL 974 #define CKM_SKIPJACK_CFB32 0x00001005UL 975 #define CKM_SKIPJACK_CFB16 0x00001006UL 976 #define CKM_SKIPJACK_CFB8 0x00001007UL 977 #define CKM_SKIPJACK_WRAP 0x00001008UL 978 #define CKM_SKIPJACK_PRIVATE_WRAP 0x00001009UL 979 #define CKM_SKIPJACK_RELAYX 0x0000100aUL 980 #define CKM_KEA_KEY_PAIR_GEN 0x00001010UL 981 #define CKM_KEA_KEY_DERIVE 0x00001011UL 982 #define CKM_KEA_DERIVE 0x00001012UL 983 #define CKM_FORTEZZA_TIMESTAMP 0x00001020UL 984 #define CKM_BATON_KEY_GEN 0x00001030UL 985 #define CKM_BATON_ECB128 0x00001031UL 986 #define CKM_BATON_ECB96 0x00001032UL 987 #define CKM_BATON_CBC128 0x00001033UL 988 #define CKM_BATON_COUNTER 0x00001034UL 989 #define CKM_BATON_SHUFFLE 0x00001035UL 990 #define CKM_BATON_WRAP 0x00001036UL 991 992 #define CKM_ECDSA_KEY_PAIR_GEN 0x00001040UL /* Deprecated */ 993 #define CKM_EC_KEY_PAIR_GEN 0x00001040UL 994 995 #define CKM_ECDSA 0x00001041UL 996 #define CKM_ECDSA_SHA1 0x00001042UL 997 #define CKM_ECDSA_SHA224 0x00001043UL 998 #define CKM_ECDSA_SHA256 0x00001044UL 999 #define CKM_ECDSA_SHA384 0x00001045UL 1000 #define CKM_ECDSA_SHA512 0x00001046UL 1001 #define CKM_EC_KEY_PAIR_GEN_W_EXTRA_BITS 0x0000140bUL 1002 1003 #define CKM_ECDH1_DERIVE 0x00001050UL 1004 #define CKM_ECDH1_COFACTOR_DERIVE 0x00001051UL 1005 #define CKM_ECMQV_DERIVE 0x00001052UL 1006 1007 #define CKM_ECDH_AES_KEY_WRAP 0x00001053UL 1008 #define CKM_RSA_AES_KEY_WRAP 0x00001054UL 1009 1010 #define CKM_JUNIPER_KEY_GEN 0x00001060UL 1011 #define CKM_JUNIPER_ECB128 0x00001061UL 1012 #define CKM_JUNIPER_CBC128 0x00001062UL 1013 #define CKM_JUNIPER_COUNTER 0x00001063UL 1014 #define CKM_JUNIPER_SHUFFLE 0x00001064UL 1015 #define CKM_JUNIPER_WRAP 0x00001065UL 1016 #define CKM_FASTHASH 0x00001070UL 1017 1018 #define CKM_AES_XTS 0x00001071UL 1019 #define CKM_AES_XTS_KEY_GEN 0x00001072UL 1020 #define CKM_AES_KEY_GEN 0x00001080UL 1021 #define CKM_AES_ECB 0x00001081UL 1022 #define CKM_AES_CBC 0x00001082UL 1023 #define CKM_AES_MAC 0x00001083UL 1024 #define CKM_AES_MAC_GENERAL 0x00001084UL 1025 #define CKM_AES_CBC_PAD 0x00001085UL 1026 #define CKM_AES_CTR 0x00001086UL 1027 #define CKM_AES_GCM 0x00001087UL 1028 #define CKM_AES_CCM 0x00001088UL 1029 #define CKM_AES_CTS 0x00001089UL 1030 #define CKM_AES_CMAC 0x0000108aUL 1031 #define CKM_AES_CMAC_GENERAL 0x0000108bUL 1032 1033 #define CKM_AES_XCBC_MAC 0x0000108cUL 1034 #define CKM_AES_XCBC_MAC_96 0x0000108dUL 1035 #define CKM_AES_GMAC 0x0000108eUL 1036 1037 #define CKM_BLOWFISH_KEY_GEN 0x00001090UL 1038 #define CKM_BLOWFISH_CBC 0x00001091UL 1039 #define CKM_TWOFISH_KEY_GEN 0x00001092UL 1040 #define CKM_TWOFISH_CBC 0x00001093UL 1041 #define CKM_BLOWFISH_CBC_PAD 0x00001094UL 1042 #define CKM_TWOFISH_CBC_PAD 0x00001095UL 1043 1044 #define CKM_DES_ECB_ENCRYPT_DATA 0x00001100UL 1045 #define CKM_DES_CBC_ENCRYPT_DATA 0x00001101UL 1046 #define CKM_DES3_ECB_ENCRYPT_DATA 0x00001102UL 1047 #define CKM_DES3_CBC_ENCRYPT_DATA 0x00001103UL 1048 #define CKM_AES_ECB_ENCRYPT_DATA 0x00001104UL 1049 #define CKM_AES_CBC_ENCRYPT_DATA 0x00001105UL 1050 1051 #define CKM_GOSTR3410_KEY_PAIR_GEN 0x00001200UL 1052 #define CKM_GOSTR3410 0x00001201UL 1053 #define CKM_GOSTR3410_WITH_GOSTR3411 0x00001202UL 1054 #define CKM_GOSTR3410_KEY_WRAP 0x00001203UL 1055 #define CKM_GOSTR3410_DERIVE 0x00001204UL 1056 #define CKM_GOSTR3411 0x00001210UL 1057 #define CKM_GOSTR3411_HMAC 0x00001211UL 1058 #define CKM_GOST28147_KEY_GEN 0x00001220UL 1059 #define CKM_GOST28147_ECB 0x00001221UL 1060 #define CKM_GOST28147 0x00001222UL 1061 #define CKM_GOST28147_MAC 0x00001223UL 1062 #define CKM_GOST28147_KEY_WRAP 0x00001224UL 1063 #define CKM_CHACHA20_KEY_GEN 0x00001225UL 1064 #define CKM_CHACHA20 0x00001226UL 1065 #define CKM_POLY1305_KEY_GEN 0x00001227UL 1066 #define CKM_POLY1305 0x00001228UL 1067 #define CKM_DSA_PARAMETER_GEN 0x00002000UL 1068 #define CKM_DH_PKCS_PARAMETER_GEN 0x00002001UL 1069 #define CKM_X9_42_DH_PARAMETER_GEN 0x00002002UL 1070 #define CKM_DSA_PROBABILISTIC_PARAMETER_GEN 0x00002003UL 1071 #define CKM_DSA_PROBABLISTIC_PARAMETER_GEN CKM_DSA_PROBABILISTIC_PARAMETER_GEN 1072 #define CKM_DSA_SHAWE_TAYLOR_PARAMETER_GEN 0x00002004UL 1073 #define CKM_DSA_FIPS_G_GEN 0x00002005UL 1074 1075 #define CKM_AES_OFB 0x00002104UL 1076 #define CKM_AES_CFB64 0x00002105UL 1077 #define CKM_AES_CFB8 0x00002106UL 1078 #define CKM_AES_CFB128 0x00002107UL 1079 1080 #define CKM_AES_CFB1 0x00002108UL 1081 #define CKM_AES_KEY_WRAP 0x00002109UL /* WAS: 0x00001090 */ 1082 #define CKM_AES_KEY_WRAP_PAD 0x0000210AUL /* WAS: 0x00001091 */ 1083 #define CKM_AES_KEY_WRAP_KWP 0x0000210BUL 1084 #define CKM_AES_KEY_WRAP_PKCS7 0x0000210CUL 1085 1086 #define CKM_RSA_PKCS_TPM_1_1 0x00004001UL 1087 #define CKM_RSA_PKCS_OAEP_TPM_1_1 0x00004002UL 1088 1089 #define CKM_SHA_1_KEY_GEN 0x00004003UL 1090 #define CKM_SHA224_KEY_GEN 0x00004004UL 1091 #define CKM_SHA256_KEY_GEN 0x00004005UL 1092 #define CKM_SHA384_KEY_GEN 0x00004006UL 1093 #define CKM_SHA512_KEY_GEN 0x00004007UL 1094 #define CKM_SHA512_224_KEY_GEN 0x00004008UL 1095 #define CKM_SHA512_256_KEY_GEN 0x00004009UL 1096 #define CKM_SHA512_T_KEY_GEN 0x0000400aUL 1097 #define CKM_NULL 0x0000400bUL 1098 #define CKM_BLAKE2B_160 0x0000400cUL 1099 #define CKM_BLAKE2B_160_HMAC 0x0000400dUL 1100 #define CKM_BLAKE2B_160_HMAC_GENERAL 0x0000400eUL 1101 #define CKM_BLAKE2B_160_KEY_DERIVE 0x0000400fUL 1102 #define CKM_BLAKE2B_160_KEY_GEN 0x00004010UL 1103 #define CKM_BLAKE2B_256 0x00004011UL 1104 #define CKM_BLAKE2B_256_HMAC 0x00004012UL 1105 #define CKM_BLAKE2B_256_HMAC_GENERAL 0x00004013UL 1106 #define CKM_BLAKE2B_256_KEY_DERIVE 0x00004014UL 1107 #define CKM_BLAKE2B_256_KEY_GEN 0x00004015UL 1108 #define CKM_BLAKE2B_384 0x00004016UL 1109 #define CKM_BLAKE2B_384_HMAC 0x00004017UL 1110 #define CKM_BLAKE2B_384_HMAC_GENERAL 0x00004018UL 1111 #define CKM_BLAKE2B_384_KEY_DERIVE 0x00004019UL 1112 #define CKM_BLAKE2B_384_KEY_GEN 0x0000401aUL 1113 #define CKM_BLAKE2B_512 0x0000401bUL 1114 #define CKM_BLAKE2B_512_HMAC 0x0000401cUL 1115 #define CKM_BLAKE2B_512_HMAC_GENERAL 0x0000401dUL 1116 #define CKM_BLAKE2B_512_KEY_DERIVE 0x0000401eUL 1117 #define CKM_BLAKE2B_512_KEY_GEN 0x0000401fUL 1118 #define CKM_SALSA20 0x00004020UL 1119 #define CKM_CHACHA20_POLY1305 0x00004021UL 1120 #define CKM_SALSA20_POLY1305 0x00004022UL 1121 #define CKM_X3DH_INITIALIZE 0x00004023UL 1122 #define CKM_X3DH_RESPOND 0x00004024UL 1123 #define CKM_X2RATCHET_INITIALIZE 0x00004025UL 1124 #define CKM_X2RATCHET_RESPOND 0x00004026UL 1125 #define CKM_X2RATCHET_ENCRYPT 0x00004027UL 1126 #define CKM_X2RATCHET_DECRYPT 0x00004028UL 1127 #define CKM_XEDDSA 0x00004029UL 1128 #define CKM_HKDF_DERIVE 0x0000402aUL 1129 #define CKM_HKDF_DATA 0x0000402bUL 1130 #define CKM_HKDF_KEY_GEN 0x0000402cUL 1131 #define CKM_SALSA20_KEY_GEN 0x0000402dUL 1132 1133 #define CKM_ECDSA_SHA3_224 0x00001047UL 1134 #define CKM_ECDSA_SHA3_256 0x00001048UL 1135 #define CKM_ECDSA_SHA3_384 0x00001049UL 1136 #define CKM_ECDSA_SHA3_512 0x0000104aUL 1137 #define CKM_EC_EDWARDS_KEY_PAIR_GEN 0x00001055UL 1138 #define CKM_EC_MONTGOMERY_KEY_PAIR_GEN 0x00001056UL 1139 #define CKM_EDDSA 0x00001057UL 1140 #define CKM_SP800_108_COUNTER_KDF 0x000003acUL 1141 #define CKM_SP800_108_FEEDBACK_KDF 0x000003adUL 1142 #define CKM_SP800_108_DOUBLE_PIPELINE_KDF 0x000003aeUL 1143 1144 #define CKM_IKE2_PRF_PLUS_DERIVE 0x0000402eUL 1145 #define CKM_IKE_PRF_DERIVE 0x0000402fUL 1146 #define CKM_IKE1_PRF_DERIVE 0x00004030UL 1147 #define CKM_IKE1_EXTENDED_DERIVE 0x00004031UL 1148 #define CKM_HSS_KEY_PAIR_GEN 0x00004032UL 1149 #define CKM_HSS 0x00004033UL 1150 1151 1152 #define CKM_VENDOR_DEFINED 0x80000000UL 1153 1154 typedef CK_MECHANISM_TYPE CK_PTR CK_MECHANISM_TYPE_PTR; 1155 1156 1157 /* CK_MECHANISM is a structure that specifies a particular 1158 * mechanism 1159 */ 1160 typedef struct CK_MECHANISM { 1161 CK_MECHANISM_TYPE mechanism; 1162 CK_VOID_PTR pParameter; 1163 CK_ULONG ulParameterLen; /* in bytes */ 1164 } CK_MECHANISM; 1165 1166 typedef CK_MECHANISM CK_PTR CK_MECHANISM_PTR; 1167 1168 1169 /* CK_MECHANISM_INFO provides information about a particular 1170 * mechanism 1171 */ 1172 typedef struct CK_MECHANISM_INFO { 1173 CK_ULONG ulMinKeySize; 1174 CK_ULONG ulMaxKeySize; 1175 CK_FLAGS flags; 1176 } CK_MECHANISM_INFO; 1177 1178 /* The flags are defined as follows: 1179 * Bit Flag Mask Meaning */ 1180 #define CKF_HW 0x00000001UL /* performed by HW */ 1181 1182 /* Specify whether or not a mechanism can be used for a particular task */ 1183 #define CKF_MESSAGE_ENCRYPT 0x00000002UL 1184 #define CKF_MESSAGE_DECRYPT 0x00000004UL 1185 #define CKF_MESSAGE_SIGN 0x00000008UL 1186 #define CKF_MESSAGE_VERIFY 0x00000010UL 1187 #define CKF_MULTI_MESSAGE 0x00000020UL 1188 #define CKF_MULTI_MESSGE CKF_MULTI_MESSAGE 1189 #define CKF_FIND_OBJECTS 0x00000040UL 1190 1191 #define CKF_ENCRYPT 0x00000100UL 1192 #define CKF_DECRYPT 0x00000200UL 1193 #define CKF_DIGEST 0x00000400UL 1194 #define CKF_SIGN 0x00000800UL 1195 #define CKF_SIGN_RECOVER 0x00001000UL 1196 #define CKF_VERIFY 0x00002000UL 1197 #define CKF_VERIFY_RECOVER 0x00004000UL 1198 #define CKF_GENERATE 0x00008000UL 1199 #define CKF_GENERATE_KEY_PAIR 0x00010000UL 1200 #define CKF_WRAP 0x00020000UL 1201 #define CKF_UNWRAP 0x00040000UL 1202 #define CKF_DERIVE 0x00080000UL 1203 1204 /* Describe a token's EC capabilities not available in mechanism 1205 * information. 1206 */ 1207 #define CKF_EC_F_P 0x00100000UL 1208 #define CKF_EC_F_2M 0x00200000UL 1209 #define CKF_EC_ECPARAMETERS 0x00400000UL 1210 #define CKF_EC_OID 0x00800000UL 1211 #define CKF_EC_NAMEDCURVE CKF_EC_OID /* deprecated since PKCS#11 3.00 */ 1212 #define CKF_EC_UNCOMPRESS 0x01000000UL 1213 #define CKF_EC_COMPRESS 0x02000000UL 1214 #define CKF_EC_CURVENAME 0x04000000UL 1215 1216 #define CKF_EXTENSION 0x80000000UL 1217 1218 typedef CK_MECHANISM_INFO CK_PTR CK_MECHANISM_INFO_PTR; 1219 1220 /* CK_RV is a value that identifies the return value of a 1221 * Cryptoki function 1222 */ 1223 typedef CK_ULONG CK_RV; 1224 1225 #define CKR_OK 0x00000000UL 1226 #define CKR_CANCEL 0x00000001UL 1227 #define CKR_HOST_MEMORY 0x00000002UL 1228 #define CKR_SLOT_ID_INVALID 0x00000003UL 1229 1230 #define CKR_GENERAL_ERROR 0x00000005UL 1231 #define CKR_FUNCTION_FAILED 0x00000006UL 1232 1233 #define CKR_ARGUMENTS_BAD 0x00000007UL 1234 #define CKR_NO_EVENT 0x00000008UL 1235 #define CKR_NEED_TO_CREATE_THREADS 0x00000009UL 1236 #define CKR_CANT_LOCK 0x0000000AUL 1237 1238 #define CKR_ATTRIBUTE_READ_ONLY 0x00000010UL 1239 #define CKR_ATTRIBUTE_SENSITIVE 0x00000011UL 1240 #define CKR_ATTRIBUTE_TYPE_INVALID 0x00000012UL 1241 #define CKR_ATTRIBUTE_VALUE_INVALID 0x00000013UL 1242 1243 #define CKR_ACTION_PROHIBITED 0x0000001BUL 1244 1245 #define CKR_DATA_INVALID 0x00000020UL 1246 #define CKR_DATA_LEN_RANGE 0x00000021UL 1247 #define CKR_DEVICE_ERROR 0x00000030UL 1248 #define CKR_DEVICE_MEMORY 0x00000031UL 1249 #define CKR_DEVICE_REMOVED 0x00000032UL 1250 #define CKR_ENCRYPTED_DATA_INVALID 0x00000040UL 1251 #define CKR_ENCRYPTED_DATA_LEN_RANGE 0x00000041UL 1252 #define CKR_AEAD_DECRYPT_FAILED 0x00000042UL 1253 #define CKR_FUNCTION_CANCELED 0x00000050UL 1254 #define CKR_FUNCTION_NOT_PARALLEL 0x00000051UL 1255 1256 #define CKR_FUNCTION_NOT_SUPPORTED 0x00000054UL 1257 1258 #define CKR_KEY_HANDLE_INVALID 0x00000060UL 1259 1260 #define CKR_KEY_SIZE_RANGE 0x00000062UL 1261 #define CKR_KEY_TYPE_INCONSISTENT 0x00000063UL 1262 1263 #define CKR_KEY_NOT_NEEDED 0x00000064UL 1264 #define CKR_KEY_CHANGED 0x00000065UL 1265 #define CKR_KEY_NEEDED 0x00000066UL 1266 #define CKR_KEY_INDIGESTIBLE 0x00000067UL 1267 #define CKR_KEY_FUNCTION_NOT_PERMITTED 0x00000068UL 1268 #define CKR_KEY_NOT_WRAPPABLE 0x00000069UL 1269 #define CKR_KEY_UNEXTRACTABLE 0x0000006AUL 1270 1271 #define CKR_MECHANISM_INVALID 0x00000070UL 1272 #define CKR_MECHANISM_PARAM_INVALID 0x00000071UL 1273 1274 #define CKR_OBJECT_HANDLE_INVALID 0x00000082UL 1275 #define CKR_OPERATION_ACTIVE 0x00000090UL 1276 #define CKR_OPERATION_NOT_INITIALIZED 0x00000091UL 1277 #define CKR_PIN_INCORRECT 0x000000A0UL 1278 #define CKR_PIN_INVALID 0x000000A1UL 1279 #define CKR_PIN_LEN_RANGE 0x000000A2UL 1280 1281 #define CKR_PIN_EXPIRED 0x000000A3UL 1282 #define CKR_PIN_LOCKED 0x000000A4UL 1283 1284 #define CKR_SESSION_CLOSED 0x000000B0UL 1285 #define CKR_SESSION_COUNT 0x000000B1UL 1286 #define CKR_SESSION_HANDLE_INVALID 0x000000B3UL 1287 #define CKR_SESSION_PARALLEL_NOT_SUPPORTED 0x000000B4UL 1288 #define CKR_SESSION_READ_ONLY 0x000000B5UL 1289 #define CKR_SESSION_EXISTS 0x000000B6UL 1290 1291 #define CKR_SESSION_READ_ONLY_EXISTS 0x000000B7UL 1292 #define CKR_SESSION_READ_WRITE_SO_EXISTS 0x000000B8UL 1293 1294 #define CKR_SIGNATURE_INVALID 0x000000C0UL 1295 #define CKR_SIGNATURE_LEN_RANGE 0x000000C1UL 1296 #define CKR_TEMPLATE_INCOMPLETE 0x000000D0UL 1297 #define CKR_TEMPLATE_INCONSISTENT 0x000000D1UL 1298 #define CKR_TOKEN_NOT_PRESENT 0x000000E0UL 1299 #define CKR_TOKEN_NOT_RECOGNIZED 0x000000E1UL 1300 #define CKR_TOKEN_WRITE_PROTECTED 0x000000E2UL 1301 #define CKR_UNWRAPPING_KEY_HANDLE_INVALID 0x000000F0UL 1302 #define CKR_UNWRAPPING_KEY_SIZE_RANGE 0x000000F1UL 1303 #define CKR_UNWRAPPING_KEY_TYPE_INCONSISTENT 0x000000F2UL 1304 #define CKR_USER_ALREADY_LOGGED_IN 0x00000100UL 1305 #define CKR_USER_NOT_LOGGED_IN 0x00000101UL 1306 #define CKR_USER_PIN_NOT_INITIALIZED 0x00000102UL 1307 #define CKR_USER_TYPE_INVALID 0x00000103UL 1308 1309 #define CKR_USER_ANOTHER_ALREADY_LOGGED_IN 0x00000104UL 1310 #define CKR_USER_TOO_MANY_TYPES 0x00000105UL 1311 1312 #define CKR_WRAPPED_KEY_INVALID 0x00000110UL 1313 #define CKR_WRAPPED_KEY_LEN_RANGE 0x00000112UL 1314 #define CKR_WRAPPING_KEY_HANDLE_INVALID 0x00000113UL 1315 #define CKR_WRAPPING_KEY_SIZE_RANGE 0x00000114UL 1316 #define CKR_WRAPPING_KEY_TYPE_INCONSISTENT 0x00000115UL 1317 #define CKR_RANDOM_SEED_NOT_SUPPORTED 0x00000120UL 1318 1319 #define CKR_RANDOM_NO_RNG 0x00000121UL 1320 1321 #define CKR_DOMAIN_PARAMS_INVALID 0x00000130UL 1322 1323 #define CKR_CURVE_NOT_SUPPORTED 0x00000140UL 1324 1325 #define CKR_BUFFER_TOO_SMALL 0x00000150UL 1326 #define CKR_SAVED_STATE_INVALID 0x00000160UL 1327 #define CKR_INFORMATION_SENSITIVE 0x00000170UL 1328 #define CKR_STATE_UNSAVEABLE 0x00000180UL 1329 1330 #define CKR_CRYPTOKI_NOT_INITIALIZED 0x00000190UL 1331 #define CKR_CRYPTOKI_ALREADY_INITIALIZED 0x00000191UL 1332 #define CKR_MUTEX_BAD 0x000001A0UL 1333 #define CKR_MUTEX_NOT_LOCKED 0x000001A1UL 1334 1335 #define CKR_NEW_PIN_MODE 0x000001B0UL 1336 #define CKR_NEXT_OTP 0x000001B1UL 1337 1338 #define CKR_EXCEEDED_MAX_ITERATIONS 0x000001B5UL 1339 #define CKR_FIPS_SELF_TEST_FAILED 0x000001B6UL 1340 #define CKR_LIBRARY_LOAD_FAILED 0x000001B7UL 1341 #define CKR_PIN_TOO_WEAK 0x000001B8UL 1342 #define CKR_PUBLIC_KEY_INVALID 0x000001B9UL 1343 1344 #define CKR_FUNCTION_REJECTED 0x00000200UL 1345 #define CKR_TOKEN_RESOURCE_EXCEEDED 0x00000201UL 1346 #define CKR_OPERATION_CANCEL_FAILED 0x00000202UL 1347 #define CKR_KEY_EXHAUSTED 0x00000203UL 1348 1349 #define CKR_VENDOR_DEFINED 0x80000000UL 1350 1351 1352 /* CK_NOTIFY is an application callback that processes events */ 1353 typedef CK_CALLBACK_FUNCTION(CK_RV, CK_NOTIFY)( 1354 CK_SESSION_HANDLE hSession, /* the session's handle */ 1355 CK_NOTIFICATION event, 1356 CK_VOID_PTR pApplication /* passed to C_OpenSession */ 1357 ); 1358 1359 1360 /* CK_FUNCTION_LIST is a structure holding a Cryptoki spec 1361 * version and pointers of appropriate types to all the 1362 * Cryptoki functions 1363 */ 1364 typedef struct CK_FUNCTION_LIST CK_FUNCTION_LIST; 1365 typedef struct CK_FUNCTION_LIST_3_0 CK_FUNCTION_LIST_3_0; 1366 1367 typedef CK_FUNCTION_LIST CK_PTR CK_FUNCTION_LIST_PTR; 1368 typedef CK_FUNCTION_LIST_3_0 CK_PTR CK_FUNCTION_LIST_3_0_PTR; 1369 1370 typedef CK_FUNCTION_LIST_PTR CK_PTR CK_FUNCTION_LIST_PTR_PTR; 1371 typedef CK_FUNCTION_LIST_3_0_PTR CK_PTR CK_FUNCTION_LIST_3_0_PTR_PTR; 1372 1373 typedef struct CK_INTERFACE { 1374 CK_CHAR *pInterfaceName; 1375 CK_VOID_PTR pFunctionList; 1376 CK_FLAGS flags; 1377 } CK_INTERFACE; 1378 1379 typedef CK_INTERFACE CK_PTR CK_INTERFACE_PTR; 1380 typedef CK_INTERFACE_PTR CK_PTR CK_INTERFACE_PTR_PTR; 1381 1382 #define CKF_END_OF_MESSAGE 0x00000001UL 1383 1384 1385 /* CK_CREATEMUTEX is an application callback for creating a 1386 * mutex object 1387 */ 1388 typedef CK_CALLBACK_FUNCTION(CK_RV, CK_CREATEMUTEX)( 1389 CK_VOID_PTR_PTR ppMutex /* location to receive ptr to mutex */ 1390 ); 1391 1392 1393 /* CK_DESTROYMUTEX is an application callback for destroying a 1394 * mutex object 1395 */ 1396 typedef CK_CALLBACK_FUNCTION(CK_RV, CK_DESTROYMUTEX)( 1397 CK_VOID_PTR pMutex /* pointer to mutex */ 1398 ); 1399 1400 1401 /* CK_LOCKMUTEX is an application callback for locking a mutex */ 1402 typedef CK_CALLBACK_FUNCTION(CK_RV, CK_LOCKMUTEX)( 1403 CK_VOID_PTR pMutex /* pointer to mutex */ 1404 ); 1405 1406 1407 /* CK_UNLOCKMUTEX is an application callback for unlocking a 1408 * mutex 1409 */ 1410 typedef CK_CALLBACK_FUNCTION(CK_RV, CK_UNLOCKMUTEX)( 1411 CK_VOID_PTR pMutex /* pointer to mutex */ 1412 ); 1413 1414 /* Get functionlist flags */ 1415 #define CKF_INTERFACE_FORK_SAFE 0x00000001UL 1416 1417 /* CK_C_INITIALIZE_ARGS provides the optional arguments to 1418 * C_Initialize 1419 */ 1420 typedef struct CK_C_INITIALIZE_ARGS { 1421 CK_CREATEMUTEX CreateMutex; 1422 CK_DESTROYMUTEX DestroyMutex; 1423 CK_LOCKMUTEX LockMutex; 1424 CK_UNLOCKMUTEX UnlockMutex; 1425 CK_FLAGS flags; 1426 CK_VOID_PTR pReserved; 1427 } CK_C_INITIALIZE_ARGS; 1428 1429 /* flags: bit flags that provide capabilities of the slot 1430 * Bit Flag Mask Meaning 1431 */ 1432 #define CKF_LIBRARY_CANT_CREATE_OS_THREADS 0x00000001UL 1433 #define CKF_OS_LOCKING_OK 0x00000002UL 1434 1435 typedef CK_C_INITIALIZE_ARGS CK_PTR CK_C_INITIALIZE_ARGS_PTR; 1436 1437 1438 1439 /* additional flags for parameters to functions */ 1440 1441 /* CKF_DONT_BLOCK is for the function C_WaitForSlotEvent */ 1442 #define CKF_DONT_BLOCK 1 1443 1444 /* CK_RSA_PKCS_MGF_TYPE is used to indicate the Message 1445 * Generation Function (MGF) applied to a message block when 1446 * formatting a message block for the PKCS #1 OAEP encryption 1447 * scheme. 1448 */ 1449 typedef CK_ULONG CK_RSA_PKCS_MGF_TYPE; 1450 1451 typedef CK_RSA_PKCS_MGF_TYPE CK_PTR CK_RSA_PKCS_MGF_TYPE_PTR; 1452 1453 /* The following MGFs are defined */ 1454 #define CKG_MGF1_SHA1 0x00000001UL 1455 #define CKG_MGF1_SHA256 0x00000002UL 1456 #define CKG_MGF1_SHA384 0x00000003UL 1457 #define CKG_MGF1_SHA512 0x00000004UL 1458 #define CKG_MGF1_SHA224 0x00000005UL 1459 #define CKG_MGF1_SHA3_224 0x00000006UL 1460 #define CKG_MGF1_SHA3_256 0x00000007UL 1461 #define CKG_MGF1_SHA3_384 0x00000008UL 1462 #define CKG_MGF1_SHA3_512 0x00000009UL 1463 1464 1465 /* CK_RSA_PKCS_OAEP_SOURCE_TYPE is used to indicate the source 1466 * of the encoding parameter when formatting a message block 1467 * for the PKCS #1 OAEP encryption scheme. 1468 */ 1469 typedef CK_ULONG CK_RSA_PKCS_OAEP_SOURCE_TYPE; 1470 1471 typedef CK_RSA_PKCS_OAEP_SOURCE_TYPE CK_PTR CK_RSA_PKCS_OAEP_SOURCE_TYPE_PTR; 1472 1473 /* The following encoding parameter sources are defined */ 1474 #define CKZ_DATA_SPECIFIED 0x00000001UL 1475 1476 /* CK_RSA_PKCS_OAEP_PARAMS provides the parameters to the 1477 * CKM_RSA_PKCS_OAEP mechanism. 1478 */ 1479 typedef struct CK_RSA_PKCS_OAEP_PARAMS { 1480 CK_MECHANISM_TYPE hashAlg; 1481 CK_RSA_PKCS_MGF_TYPE mgf; 1482 CK_RSA_PKCS_OAEP_SOURCE_TYPE source; 1483 CK_VOID_PTR pSourceData; 1484 CK_ULONG ulSourceDataLen; 1485 } CK_RSA_PKCS_OAEP_PARAMS; 1486 1487 typedef CK_RSA_PKCS_OAEP_PARAMS CK_PTR CK_RSA_PKCS_OAEP_PARAMS_PTR; 1488 1489 /* CK_RSA_PKCS_PSS_PARAMS provides the parameters to the 1490 * CKM_RSA_PKCS_PSS mechanism(s). 1491 */ 1492 typedef struct CK_RSA_PKCS_PSS_PARAMS { 1493 CK_MECHANISM_TYPE hashAlg; 1494 CK_RSA_PKCS_MGF_TYPE mgf; 1495 CK_ULONG sLen; 1496 } CK_RSA_PKCS_PSS_PARAMS; 1497 1498 typedef CK_RSA_PKCS_PSS_PARAMS CK_PTR CK_RSA_PKCS_PSS_PARAMS_PTR; 1499 1500 typedef CK_ULONG CK_EC_KDF_TYPE; 1501 typedef CK_EC_KDF_TYPE CK_PTR CK_EC_KDF_TYPE_PTR; 1502 1503 /* The following EC Key Derivation Functions are defined */ 1504 #define CKD_NULL 0x00000001UL 1505 #define CKD_SHA1_KDF 0x00000002UL 1506 1507 /* The following X9.42 DH key derivation functions are defined */ 1508 #define CKD_SHA1_KDF_ASN1 0x00000003UL 1509 #define CKD_SHA1_KDF_CONCATENATE 0x00000004UL 1510 #define CKD_SHA224_KDF 0x00000005UL 1511 #define CKD_SHA256_KDF 0x00000006UL 1512 #define CKD_SHA384_KDF 0x00000007UL 1513 #define CKD_SHA512_KDF 0x00000008UL 1514 #define CKD_CPDIVERSIFY_KDF 0x00000009UL 1515 #define CKD_SHA3_224_KDF 0x0000000AUL 1516 #define CKD_SHA3_256_KDF 0x0000000BUL 1517 #define CKD_SHA3_384_KDF 0x0000000CUL 1518 #define CKD_SHA3_512_KDF 0x0000000DUL 1519 #define CKD_SHA1_KDF_SP800 0x0000000EUL 1520 #define CKD_SHA224_KDF_SP800 0x0000000FUL 1521 #define CKD_SHA256_KDF_SP800 0x00000010UL 1522 #define CKD_SHA384_KDF_SP800 0x00000011UL 1523 #define CKD_SHA512_KDF_SP800 0x00000012UL 1524 #define CKD_SHA3_224_KDF_SP800 0x00000013UL 1525 #define CKD_SHA3_256_KDF_SP800 0x00000014UL 1526 #define CKD_SHA3_384_KDF_SP800 0x00000015UL 1527 #define CKD_SHA3_512_KDF_SP800 0x00000016UL 1528 #define CKD_BLAKE2B_160_KDF 0x00000017UL 1529 #define CKD_BLAKE2B_256_KDF 0x00000018UL 1530 #define CKD_BLAKE2B_384_KDF 0x00000019UL 1531 #define CKD_BLAKE2B_512_KDF 0x0000001aUL 1532 1533 /* CK_ECDH1_DERIVE_PARAMS provides the parameters to the 1534 * CKM_ECDH1_DERIVE and CKM_ECDH1_COFACTOR_DERIVE mechanisms, 1535 * where each party contributes one key pair. 1536 */ 1537 typedef struct CK_ECDH1_DERIVE_PARAMS { 1538 CK_EC_KDF_TYPE kdf; 1539 CK_ULONG ulSharedDataLen; 1540 CK_BYTE_PTR pSharedData; 1541 CK_ULONG ulPublicDataLen; 1542 CK_BYTE_PTR pPublicData; 1543 } CK_ECDH1_DERIVE_PARAMS; 1544 1545 typedef CK_ECDH1_DERIVE_PARAMS CK_PTR CK_ECDH1_DERIVE_PARAMS_PTR; 1546 1547 /* 1548 * CK_ECDH2_DERIVE_PARAMS provides the parameters to the 1549 * CKM_ECMQV_DERIVE mechanism, where each party contributes two key pairs. 1550 */ 1551 typedef struct CK_ECDH2_DERIVE_PARAMS { 1552 CK_EC_KDF_TYPE kdf; 1553 CK_ULONG ulSharedDataLen; 1554 CK_BYTE_PTR pSharedData; 1555 CK_ULONG ulPublicDataLen; 1556 CK_BYTE_PTR pPublicData; 1557 CK_ULONG ulPrivateDataLen; 1558 CK_OBJECT_HANDLE hPrivateData; 1559 CK_ULONG ulPublicDataLen2; 1560 CK_BYTE_PTR pPublicData2; 1561 } CK_ECDH2_DERIVE_PARAMS; 1562 1563 typedef CK_ECDH2_DERIVE_PARAMS CK_PTR CK_ECDH2_DERIVE_PARAMS_PTR; 1564 1565 typedef struct CK_ECMQV_DERIVE_PARAMS { 1566 CK_EC_KDF_TYPE kdf; 1567 CK_ULONG ulSharedDataLen; 1568 CK_BYTE_PTR pSharedData; 1569 CK_ULONG ulPublicDataLen; 1570 CK_BYTE_PTR pPublicData; 1571 CK_ULONG ulPrivateDataLen; 1572 CK_OBJECT_HANDLE hPrivateData; 1573 CK_ULONG ulPublicDataLen2; 1574 CK_BYTE_PTR pPublicData2; 1575 CK_OBJECT_HANDLE publicKey; 1576 } CK_ECMQV_DERIVE_PARAMS; 1577 1578 typedef CK_ECMQV_DERIVE_PARAMS CK_PTR CK_ECMQV_DERIVE_PARAMS_PTR; 1579 1580 /* Typedefs and defines for the CKM_X9_42_DH_KEY_PAIR_GEN and the 1581 * CKM_X9_42_DH_PARAMETER_GEN mechanisms 1582 */ 1583 typedef CK_ULONG CK_X9_42_DH_KDF_TYPE; 1584 typedef CK_X9_42_DH_KDF_TYPE CK_PTR CK_X9_42_DH_KDF_TYPE_PTR; 1585 1586 /* CK_X9_42_DH1_DERIVE_PARAMS provides the parameters to the 1587 * CKM_X9_42_DH_DERIVE key derivation mechanism, where each party 1588 * contributes one key pair 1589 */ 1590 typedef struct CK_X9_42_DH1_DERIVE_PARAMS { 1591 CK_X9_42_DH_KDF_TYPE kdf; 1592 CK_ULONG ulOtherInfoLen; 1593 CK_BYTE_PTR pOtherInfo; 1594 CK_ULONG ulPublicDataLen; 1595 CK_BYTE_PTR pPublicData; 1596 } CK_X9_42_DH1_DERIVE_PARAMS; 1597 1598 typedef struct CK_X9_42_DH1_DERIVE_PARAMS CK_PTR CK_X9_42_DH1_DERIVE_PARAMS_PTR; 1599 1600 /* CK_X9_42_DH2_DERIVE_PARAMS provides the parameters to the 1601 * CKM_X9_42_DH_HYBRID_DERIVE and CKM_X9_42_MQV_DERIVE key derivation 1602 * mechanisms, where each party contributes two key pairs 1603 */ 1604 typedef struct CK_X9_42_DH2_DERIVE_PARAMS { 1605 CK_X9_42_DH_KDF_TYPE kdf; 1606 CK_ULONG ulOtherInfoLen; 1607 CK_BYTE_PTR pOtherInfo; 1608 CK_ULONG ulPublicDataLen; 1609 CK_BYTE_PTR pPublicData; 1610 CK_ULONG ulPrivateDataLen; 1611 CK_OBJECT_HANDLE hPrivateData; 1612 CK_ULONG ulPublicDataLen2; 1613 CK_BYTE_PTR pPublicData2; 1614 } CK_X9_42_DH2_DERIVE_PARAMS; 1615 1616 typedef CK_X9_42_DH2_DERIVE_PARAMS CK_PTR CK_X9_42_DH2_DERIVE_PARAMS_PTR; 1617 1618 typedef struct CK_X9_42_MQV_DERIVE_PARAMS { 1619 CK_X9_42_DH_KDF_TYPE kdf; 1620 CK_ULONG ulOtherInfoLen; 1621 CK_BYTE_PTR pOtherInfo; 1622 CK_ULONG ulPublicDataLen; 1623 CK_BYTE_PTR pPublicData; 1624 CK_ULONG ulPrivateDataLen; 1625 CK_OBJECT_HANDLE hPrivateData; 1626 CK_ULONG ulPublicDataLen2; 1627 CK_BYTE_PTR pPublicData2; 1628 CK_OBJECT_HANDLE publicKey; 1629 } CK_X9_42_MQV_DERIVE_PARAMS; 1630 1631 typedef CK_X9_42_MQV_DERIVE_PARAMS CK_PTR CK_X9_42_MQV_DERIVE_PARAMS_PTR; 1632 1633 /* CK_KEA_DERIVE_PARAMS provides the parameters to the 1634 * CKM_KEA_DERIVE mechanism 1635 */ 1636 typedef struct CK_KEA_DERIVE_PARAMS { 1637 CK_BBOOL isSender; 1638 CK_ULONG ulRandomLen; 1639 CK_BYTE_PTR pRandomA; 1640 CK_BYTE_PTR pRandomB; 1641 CK_ULONG ulPublicDataLen; 1642 CK_BYTE_PTR pPublicData; 1643 } CK_KEA_DERIVE_PARAMS; 1644 1645 typedef CK_KEA_DERIVE_PARAMS CK_PTR CK_KEA_DERIVE_PARAMS_PTR; 1646 1647 1648 /* CK_RC2_PARAMS provides the parameters to the CKM_RC2_ECB and 1649 * CKM_RC2_MAC mechanisms. An instance of CK_RC2_PARAMS just 1650 * holds the effective keysize 1651 */ 1652 typedef CK_ULONG CK_RC2_PARAMS; 1653 1654 typedef CK_RC2_PARAMS CK_PTR CK_RC2_PARAMS_PTR; 1655 1656 1657 /* CK_RC2_CBC_PARAMS provides the parameters to the CKM_RC2_CBC 1658 * mechanism 1659 */ 1660 typedef struct CK_RC2_CBC_PARAMS { 1661 CK_ULONG ulEffectiveBits; /* effective bits (1-1024) */ 1662 CK_BYTE iv[8]; /* IV for CBC mode */ 1663 } CK_RC2_CBC_PARAMS; 1664 1665 typedef CK_RC2_CBC_PARAMS CK_PTR CK_RC2_CBC_PARAMS_PTR; 1666 1667 1668 /* CK_RC2_MAC_GENERAL_PARAMS provides the parameters for the 1669 * CKM_RC2_MAC_GENERAL mechanism 1670 */ 1671 typedef struct CK_RC2_MAC_GENERAL_PARAMS { 1672 CK_ULONG ulEffectiveBits; /* effective bits (1-1024) */ 1673 CK_ULONG ulMacLength; /* Length of MAC in bytes */ 1674 } CK_RC2_MAC_GENERAL_PARAMS; 1675 1676 typedef CK_RC2_MAC_GENERAL_PARAMS CK_PTR \ 1677 CK_RC2_MAC_GENERAL_PARAMS_PTR; 1678 1679 1680 /* CK_RC5_PARAMS provides the parameters to the CKM_RC5_ECB and 1681 * CKM_RC5_MAC mechanisms 1682 */ 1683 typedef struct CK_RC5_PARAMS { 1684 CK_ULONG ulWordsize; /* wordsize in bits */ 1685 CK_ULONG ulRounds; /* number of rounds */ 1686 } CK_RC5_PARAMS; 1687 1688 typedef CK_RC5_PARAMS CK_PTR CK_RC5_PARAMS_PTR; 1689 1690 1691 /* CK_RC5_CBC_PARAMS provides the parameters to the CKM_RC5_CBC 1692 * mechanism 1693 */ 1694 typedef struct CK_RC5_CBC_PARAMS { 1695 CK_ULONG ulWordsize; /* wordsize in bits */ 1696 CK_ULONG ulRounds; /* number of rounds */ 1697 CK_BYTE_PTR pIv; /* pointer to IV */ 1698 CK_ULONG ulIvLen; /* length of IV in bytes */ 1699 } CK_RC5_CBC_PARAMS; 1700 1701 typedef CK_RC5_CBC_PARAMS CK_PTR CK_RC5_CBC_PARAMS_PTR; 1702 1703 1704 /* CK_RC5_MAC_GENERAL_PARAMS provides the parameters for the 1705 * CKM_RC5_MAC_GENERAL mechanism 1706 */ 1707 typedef struct CK_RC5_MAC_GENERAL_PARAMS { 1708 CK_ULONG ulWordsize; /* wordsize in bits */ 1709 CK_ULONG ulRounds; /* number of rounds */ 1710 CK_ULONG ulMacLength; /* Length of MAC in bytes */ 1711 } CK_RC5_MAC_GENERAL_PARAMS; 1712 1713 typedef CK_RC5_MAC_GENERAL_PARAMS CK_PTR \ 1714 CK_RC5_MAC_GENERAL_PARAMS_PTR; 1715 1716 /* CK_MAC_GENERAL_PARAMS provides the parameters to most block 1717 * ciphers' MAC_GENERAL mechanisms. Its value is the length of 1718 * the MAC 1719 */ 1720 typedef CK_ULONG CK_MAC_GENERAL_PARAMS; 1721 1722 typedef CK_MAC_GENERAL_PARAMS CK_PTR CK_MAC_GENERAL_PARAMS_PTR; 1723 1724 typedef struct CK_DES_CBC_ENCRYPT_DATA_PARAMS { 1725 CK_BYTE iv[8]; 1726 CK_BYTE_PTR pData; 1727 CK_ULONG length; 1728 } CK_DES_CBC_ENCRYPT_DATA_PARAMS; 1729 1730 typedef CK_DES_CBC_ENCRYPT_DATA_PARAMS CK_PTR CK_DES_CBC_ENCRYPT_DATA_PARAMS_PTR; 1731 1732 typedef struct CK_AES_CBC_ENCRYPT_DATA_PARAMS { 1733 CK_BYTE iv[16]; 1734 CK_BYTE_PTR pData; 1735 CK_ULONG length; 1736 } CK_AES_CBC_ENCRYPT_DATA_PARAMS; 1737 1738 typedef CK_AES_CBC_ENCRYPT_DATA_PARAMS CK_PTR CK_AES_CBC_ENCRYPT_DATA_PARAMS_PTR; 1739 1740 /* CK_SKIPJACK_PRIVATE_WRAP_PARAMS provides the parameters to the 1741 * CKM_SKIPJACK_PRIVATE_WRAP mechanism 1742 */ 1743 typedef struct CK_SKIPJACK_PRIVATE_WRAP_PARAMS { 1744 CK_ULONG ulPasswordLen; 1745 CK_BYTE_PTR pPassword; 1746 CK_ULONG ulPublicDataLen; 1747 CK_BYTE_PTR pPublicData; 1748 CK_ULONG ulPAndGLen; 1749 CK_ULONG ulQLen; 1750 CK_ULONG ulRandomLen; 1751 CK_BYTE_PTR pRandomA; 1752 CK_BYTE_PTR pPrimeP; 1753 CK_BYTE_PTR pBaseG; 1754 CK_BYTE_PTR pSubprimeQ; 1755 } CK_SKIPJACK_PRIVATE_WRAP_PARAMS; 1756 1757 typedef CK_SKIPJACK_PRIVATE_WRAP_PARAMS CK_PTR \ 1758 CK_SKIPJACK_PRIVATE_WRAP_PARAMS_PTR; 1759 1760 1761 /* CK_SKIPJACK_RELAYX_PARAMS provides the parameters to the 1762 * CKM_SKIPJACK_RELAYX mechanism 1763 */ 1764 typedef struct CK_SKIPJACK_RELAYX_PARAMS { 1765 CK_ULONG ulOldWrappedXLen; 1766 CK_BYTE_PTR pOldWrappedX; 1767 CK_ULONG ulOldPasswordLen; 1768 CK_BYTE_PTR pOldPassword; 1769 CK_ULONG ulOldPublicDataLen; 1770 CK_BYTE_PTR pOldPublicData; 1771 CK_ULONG ulOldRandomLen; 1772 CK_BYTE_PTR pOldRandomA; 1773 CK_ULONG ulNewPasswordLen; 1774 CK_BYTE_PTR pNewPassword; 1775 CK_ULONG ulNewPublicDataLen; 1776 CK_BYTE_PTR pNewPublicData; 1777 CK_ULONG ulNewRandomLen; 1778 CK_BYTE_PTR pNewRandomA; 1779 } CK_SKIPJACK_RELAYX_PARAMS; 1780 1781 typedef CK_SKIPJACK_RELAYX_PARAMS CK_PTR \ 1782 CK_SKIPJACK_RELAYX_PARAMS_PTR; 1783 1784 1785 typedef struct CK_PBE_PARAMS { 1786 CK_BYTE_PTR pInitVector; 1787 CK_UTF8CHAR_PTR pPassword; 1788 CK_ULONG ulPasswordLen; 1789 CK_BYTE_PTR pSalt; 1790 CK_ULONG ulSaltLen; 1791 CK_ULONG ulIteration; 1792 } CK_PBE_PARAMS; 1793 1794 typedef CK_PBE_PARAMS CK_PTR CK_PBE_PARAMS_PTR; 1795 1796 1797 /* CK_KEY_WRAP_SET_OAEP_PARAMS provides the parameters to the 1798 * CKM_KEY_WRAP_SET_OAEP mechanism 1799 */ 1800 typedef struct CK_KEY_WRAP_SET_OAEP_PARAMS { 1801 CK_BYTE bBC; /* block contents byte */ 1802 CK_BYTE_PTR pX; /* extra data */ 1803 CK_ULONG ulXLen; /* length of extra data in bytes */ 1804 } CK_KEY_WRAP_SET_OAEP_PARAMS; 1805 1806 typedef CK_KEY_WRAP_SET_OAEP_PARAMS CK_PTR CK_KEY_WRAP_SET_OAEP_PARAMS_PTR; 1807 1808 typedef struct CK_SSL3_RANDOM_DATA { 1809 CK_BYTE_PTR pClientRandom; 1810 CK_ULONG ulClientRandomLen; 1811 CK_BYTE_PTR pServerRandom; 1812 CK_ULONG ulServerRandomLen; 1813 } CK_SSL3_RANDOM_DATA; 1814 1815 1816 typedef struct CK_SSL3_MASTER_KEY_DERIVE_PARAMS { 1817 CK_SSL3_RANDOM_DATA RandomInfo; 1818 CK_VERSION_PTR pVersion; 1819 } CK_SSL3_MASTER_KEY_DERIVE_PARAMS; 1820 1821 typedef struct CK_SSL3_MASTER_KEY_DERIVE_PARAMS CK_PTR \ 1822 CK_SSL3_MASTER_KEY_DERIVE_PARAMS_PTR; 1823 1824 typedef struct CK_SSL3_KEY_MAT_OUT { 1825 CK_OBJECT_HANDLE hClientMacSecret; 1826 CK_OBJECT_HANDLE hServerMacSecret; 1827 CK_OBJECT_HANDLE hClientKey; 1828 CK_OBJECT_HANDLE hServerKey; 1829 CK_BYTE_PTR pIVClient; 1830 CK_BYTE_PTR pIVServer; 1831 } CK_SSL3_KEY_MAT_OUT; 1832 1833 typedef CK_SSL3_KEY_MAT_OUT CK_PTR CK_SSL3_KEY_MAT_OUT_PTR; 1834 1835 1836 typedef struct CK_SSL3_KEY_MAT_PARAMS { 1837 CK_ULONG ulMacSizeInBits; 1838 CK_ULONG ulKeySizeInBits; 1839 CK_ULONG ulIVSizeInBits; 1840 CK_BBOOL bIsExport; 1841 CK_SSL3_RANDOM_DATA RandomInfo; 1842 CK_SSL3_KEY_MAT_OUT_PTR pReturnedKeyMaterial; 1843 } CK_SSL3_KEY_MAT_PARAMS; 1844 1845 typedef CK_SSL3_KEY_MAT_PARAMS CK_PTR CK_SSL3_KEY_MAT_PARAMS_PTR; 1846 1847 typedef struct CK_TLS_PRF_PARAMS { 1848 CK_BYTE_PTR pSeed; 1849 CK_ULONG ulSeedLen; 1850 CK_BYTE_PTR pLabel; 1851 CK_ULONG ulLabelLen; 1852 CK_BYTE_PTR pOutput; 1853 CK_ULONG_PTR pulOutputLen; 1854 } CK_TLS_PRF_PARAMS; 1855 1856 typedef CK_TLS_PRF_PARAMS CK_PTR CK_TLS_PRF_PARAMS_PTR; 1857 1858 typedef struct CK_WTLS_RANDOM_DATA { 1859 CK_BYTE_PTR pClientRandom; 1860 CK_ULONG ulClientRandomLen; 1861 CK_BYTE_PTR pServerRandom; 1862 CK_ULONG ulServerRandomLen; 1863 } CK_WTLS_RANDOM_DATA; 1864 1865 typedef CK_WTLS_RANDOM_DATA CK_PTR CK_WTLS_RANDOM_DATA_PTR; 1866 1867 typedef struct CK_WTLS_MASTER_KEY_DERIVE_PARAMS { 1868 CK_MECHANISM_TYPE DigestMechanism; 1869 CK_WTLS_RANDOM_DATA RandomInfo; 1870 CK_BYTE_PTR pVersion; 1871 } CK_WTLS_MASTER_KEY_DERIVE_PARAMS; 1872 1873 typedef CK_WTLS_MASTER_KEY_DERIVE_PARAMS CK_PTR \ 1874 CK_WTLS_MASTER_KEY_DERIVE_PARAMS_PTR; 1875 1876 typedef struct CK_WTLS_PRF_PARAMS { 1877 CK_MECHANISM_TYPE DigestMechanism; 1878 CK_BYTE_PTR pSeed; 1879 CK_ULONG ulSeedLen; 1880 CK_BYTE_PTR pLabel; 1881 CK_ULONG ulLabelLen; 1882 CK_BYTE_PTR pOutput; 1883 CK_ULONG_PTR pulOutputLen; 1884 } CK_WTLS_PRF_PARAMS; 1885 1886 typedef CK_WTLS_PRF_PARAMS CK_PTR CK_WTLS_PRF_PARAMS_PTR; 1887 1888 typedef struct CK_WTLS_KEY_MAT_OUT { 1889 CK_OBJECT_HANDLE hMacSecret; 1890 CK_OBJECT_HANDLE hKey; 1891 CK_BYTE_PTR pIV; 1892 } CK_WTLS_KEY_MAT_OUT; 1893 1894 typedef CK_WTLS_KEY_MAT_OUT CK_PTR CK_WTLS_KEY_MAT_OUT_PTR; 1895 1896 typedef struct CK_WTLS_KEY_MAT_PARAMS { 1897 CK_MECHANISM_TYPE DigestMechanism; 1898 CK_ULONG ulMacSizeInBits; 1899 CK_ULONG ulKeySizeInBits; 1900 CK_ULONG ulIVSizeInBits; 1901 CK_ULONG ulSequenceNumber; 1902 CK_BBOOL bIsExport; 1903 CK_WTLS_RANDOM_DATA RandomInfo; 1904 CK_WTLS_KEY_MAT_OUT_PTR pReturnedKeyMaterial; 1905 } CK_WTLS_KEY_MAT_PARAMS; 1906 1907 typedef CK_WTLS_KEY_MAT_PARAMS CK_PTR CK_WTLS_KEY_MAT_PARAMS_PTR; 1908 1909 typedef struct CK_CMS_SIG_PARAMS { 1910 CK_OBJECT_HANDLE certificateHandle; 1911 CK_MECHANISM_PTR pSigningMechanism; 1912 CK_MECHANISM_PTR pDigestMechanism; 1913 CK_UTF8CHAR_PTR pContentType; 1914 CK_BYTE_PTR pRequestedAttributes; 1915 CK_ULONG ulRequestedAttributesLen; 1916 CK_BYTE_PTR pRequiredAttributes; 1917 CK_ULONG ulRequiredAttributesLen; 1918 } CK_CMS_SIG_PARAMS; 1919 1920 typedef CK_CMS_SIG_PARAMS CK_PTR CK_CMS_SIG_PARAMS_PTR; 1921 1922 typedef struct CK_KEY_DERIVATION_STRING_DATA { 1923 CK_BYTE_PTR pData; 1924 CK_ULONG ulLen; 1925 } CK_KEY_DERIVATION_STRING_DATA; 1926 1927 typedef CK_KEY_DERIVATION_STRING_DATA CK_PTR \ 1928 CK_KEY_DERIVATION_STRING_DATA_PTR; 1929 1930 1931 /* The CK_EXTRACT_PARAMS is used for the 1932 * CKM_EXTRACT_KEY_FROM_KEY mechanism. It specifies which bit 1933 * of the base key should be used as the first bit of the 1934 * derived key 1935 */ 1936 typedef CK_ULONG CK_EXTRACT_PARAMS; 1937 1938 typedef CK_EXTRACT_PARAMS CK_PTR CK_EXTRACT_PARAMS_PTR; 1939 1940 /* CK_PKCS5_PBKD2_PSEUDO_RANDOM_FUNCTION_TYPE is used to 1941 * indicate the Pseudo-Random Function (PRF) used to generate 1942 * key bits using PKCS #5 PBKDF2. 1943 */ 1944 typedef CK_ULONG CK_PKCS5_PBKD2_PSEUDO_RANDOM_FUNCTION_TYPE; 1945 1946 typedef CK_PKCS5_PBKD2_PSEUDO_RANDOM_FUNCTION_TYPE CK_PTR \ 1947 CK_PKCS5_PBKD2_PSEUDO_RANDOM_FUNCTION_TYPE_PTR; 1948 1949 #define CKP_PKCS5_PBKD2_HMAC_SHA1 0x00000001UL 1950 #define CKP_PKCS5_PBKD2_HMAC_GOSTR3411 0x00000002UL 1951 #define CKP_PKCS5_PBKD2_HMAC_SHA224 0x00000003UL 1952 #define CKP_PKCS5_PBKD2_HMAC_SHA256 0x00000004UL 1953 #define CKP_PKCS5_PBKD2_HMAC_SHA384 0x00000005UL 1954 #define CKP_PKCS5_PBKD2_HMAC_SHA512 0x00000006UL 1955 #define CKP_PKCS5_PBKD2_HMAC_SHA512_224 0x00000007UL 1956 #define CKP_PKCS5_PBKD2_HMAC_SHA512_256 0x00000008UL 1957 1958 /* CK_PKCS5_PBKDF2_SALT_SOURCE_TYPE is used to indicate the 1959 * source of the salt value when deriving a key using PKCS #5 1960 * PBKDF2. 1961 */ 1962 typedef CK_ULONG CK_PKCS5_PBKDF2_SALT_SOURCE_TYPE; 1963 1964 typedef CK_PKCS5_PBKDF2_SALT_SOURCE_TYPE CK_PTR \ 1965 CK_PKCS5_PBKDF2_SALT_SOURCE_TYPE_PTR; 1966 1967 /* The following salt value sources are defined in PKCS #5 v2.0. */ 1968 #define CKZ_SALT_SPECIFIED 0x00000001UL 1969 1970 /* CK_PKCS5_PBKD2_PARAMS is a structure that provides the 1971 * parameters to the CKM_PKCS5_PBKD2 mechanism. 1972 */ 1973 typedef struct CK_PKCS5_PBKD2_PARAMS { 1974 CK_PKCS5_PBKDF2_SALT_SOURCE_TYPE saltSource; 1975 CK_VOID_PTR pSaltSourceData; 1976 CK_ULONG ulSaltSourceDataLen; 1977 CK_ULONG iterations; 1978 CK_PKCS5_PBKD2_PSEUDO_RANDOM_FUNCTION_TYPE prf; 1979 CK_VOID_PTR pPrfData; 1980 CK_ULONG ulPrfDataLen; 1981 CK_UTF8CHAR_PTR pPassword; 1982 CK_ULONG_PTR ulPasswordLen; 1983 } CK_PKCS5_PBKD2_PARAMS; 1984 1985 typedef CK_PKCS5_PBKD2_PARAMS CK_PTR CK_PKCS5_PBKD2_PARAMS_PTR; 1986 1987 /* CK_PKCS5_PBKD2_PARAMS2 is a corrected version of the CK_PKCS5_PBKD2_PARAMS 1988 * structure that provides the parameters to the CKM_PKCS5_PBKD2 mechanism 1989 * noting that the ulPasswordLen field is a CK_ULONG and not a CK_ULONG_PTR. 1990 */ 1991 typedef struct CK_PKCS5_PBKD2_PARAMS2 { 1992 CK_PKCS5_PBKDF2_SALT_SOURCE_TYPE saltSource; 1993 CK_VOID_PTR pSaltSourceData; 1994 CK_ULONG ulSaltSourceDataLen; 1995 CK_ULONG iterations; 1996 CK_PKCS5_PBKD2_PSEUDO_RANDOM_FUNCTION_TYPE prf; 1997 CK_VOID_PTR pPrfData; 1998 CK_ULONG ulPrfDataLen; 1999 CK_UTF8CHAR_PTR pPassword; 2000 CK_ULONG ulPasswordLen; 2001 } CK_PKCS5_PBKD2_PARAMS2; 2002 2003 typedef CK_PKCS5_PBKD2_PARAMS2 CK_PTR CK_PKCS5_PBKD2_PARAMS2_PTR; 2004 2005 typedef CK_ULONG CK_OTP_PARAM_TYPE; 2006 typedef CK_OTP_PARAM_TYPE CK_PARAM_TYPE; /* backward compatibility */ 2007 2008 typedef struct CK_OTP_PARAM { 2009 CK_OTP_PARAM_TYPE type; 2010 CK_VOID_PTR pValue; 2011 CK_ULONG ulValueLen; 2012 } CK_OTP_PARAM; 2013 2014 typedef CK_OTP_PARAM CK_PTR CK_OTP_PARAM_PTR; 2015 2016 typedef struct CK_OTP_PARAMS { 2017 CK_OTP_PARAM_PTR pParams; 2018 CK_ULONG ulCount; 2019 } CK_OTP_PARAMS; 2020 2021 typedef CK_OTP_PARAMS CK_PTR CK_OTP_PARAMS_PTR; 2022 2023 typedef struct CK_OTP_SIGNATURE_INFO { 2024 CK_OTP_PARAM_PTR pParams; 2025 CK_ULONG ulCount; 2026 } CK_OTP_SIGNATURE_INFO; 2027 2028 typedef CK_OTP_SIGNATURE_INFO CK_PTR CK_OTP_SIGNATURE_INFO_PTR; 2029 2030 #define CK_OTP_VALUE 0UL 2031 #define CK_OTP_PIN 1UL 2032 #define CK_OTP_CHALLENGE 2UL 2033 #define CK_OTP_TIME 3UL 2034 #define CK_OTP_COUNTER 4UL 2035 #define CK_OTP_FLAGS 5UL 2036 #define CK_OTP_OUTPUT_LENGTH 6UL 2037 #define CK_OTP_OUTPUT_FORMAT 7UL 2038 2039 #define CKF_NEXT_OTP 0x00000001UL 2040 #define CKF_EXCLUDE_TIME 0x00000002UL 2041 #define CKF_EXCLUDE_COUNTER 0x00000004UL 2042 #define CKF_EXCLUDE_CHALLENGE 0x00000008UL 2043 #define CKF_EXCLUDE_PIN 0x00000010UL 2044 #define CKF_USER_FRIENDLY_OTP 0x00000020UL 2045 2046 typedef struct CK_KIP_PARAMS { 2047 CK_MECHANISM_PTR pMechanism; 2048 CK_OBJECT_HANDLE hKey; 2049 CK_BYTE_PTR pSeed; 2050 CK_ULONG ulSeedLen; 2051 } CK_KIP_PARAMS; 2052 2053 typedef CK_KIP_PARAMS CK_PTR CK_KIP_PARAMS_PTR; 2054 2055 typedef struct CK_AES_CTR_PARAMS { 2056 CK_ULONG ulCounterBits; 2057 CK_BYTE cb[16]; 2058 } CK_AES_CTR_PARAMS; 2059 2060 typedef CK_AES_CTR_PARAMS CK_PTR CK_AES_CTR_PARAMS_PTR; 2061 2062 typedef struct CK_GCM_PARAMS { 2063 CK_BYTE_PTR pIv; 2064 CK_ULONG ulIvLen; 2065 CK_ULONG ulIvBits; 2066 CK_BYTE_PTR pAAD; 2067 CK_ULONG ulAADLen; 2068 CK_ULONG ulTagBits; 2069 } CK_GCM_PARAMS; 2070 2071 typedef CK_GCM_PARAMS CK_PTR CK_GCM_PARAMS_PTR; 2072 2073 typedef CK_ULONG CK_GENERATOR_FUNCTION; 2074 #define CKG_NO_GENERATE 0x00000000UL 2075 #define CKG_GENERATE 0x00000001UL 2076 #define CKG_GENERATE_COUNTER 0x00000002UL 2077 #define CKG_GENERATE_RANDOM 0x00000003UL 2078 #define CKG_GENERATE_COUNTER_XOR 0x00000004UL 2079 2080 typedef struct CK_GCM_MESSAGE_PARAMS { 2081 CK_BYTE_PTR pIv; 2082 CK_ULONG ulIvLen; 2083 CK_ULONG ulIvFixedBits; 2084 CK_GENERATOR_FUNCTION ivGenerator; 2085 CK_BYTE_PTR pTag; 2086 CK_ULONG ulTagBits; 2087 } CK_GCM_MESSAGE_PARAMS; 2088 2089 typedef CK_GCM_MESSAGE_PARAMS CK_PTR CK_GCM_MESSAGE_PARAMS_PTR; 2090 2091 typedef struct CK_CCM_PARAMS { 2092 CK_ULONG ulDataLen; 2093 CK_BYTE_PTR pNonce; 2094 CK_ULONG ulNonceLen; 2095 CK_BYTE_PTR pAAD; 2096 CK_ULONG ulAADLen; 2097 CK_ULONG ulMACLen; 2098 } CK_CCM_PARAMS; 2099 2100 typedef CK_CCM_PARAMS CK_PTR CK_CCM_PARAMS_PTR; 2101 2102 typedef struct CK_CCM_MESSAGE_PARAMS { 2103 CK_ULONG ulDataLen; /*plaintext or ciphertext*/ 2104 CK_BYTE_PTR pNonce; 2105 CK_ULONG ulNonceLen; 2106 CK_ULONG ulNonceFixedBits; 2107 CK_GENERATOR_FUNCTION nonceGenerator; 2108 CK_BYTE_PTR pMAC; 2109 CK_ULONG ulMACLen; 2110 } CK_CCM_MESSAGE_PARAMS; 2111 2112 typedef CK_CCM_MESSAGE_PARAMS CK_PTR CK_CCM_MESSAGE_PARAMS_PTR; 2113 2114 /* Deprecated. Use CK_GCM_PARAMS */ 2115 typedef struct CK_AES_GCM_PARAMS { 2116 CK_BYTE_PTR pIv; 2117 CK_ULONG ulIvLen; 2118 CK_ULONG ulIvBits; 2119 CK_BYTE_PTR pAAD; 2120 CK_ULONG ulAADLen; 2121 CK_ULONG ulTagBits; 2122 } CK_AES_GCM_PARAMS; 2123 2124 typedef CK_AES_GCM_PARAMS CK_PTR CK_AES_GCM_PARAMS_PTR; 2125 2126 /* Deprecated. Use CK_CCM_PARAMS */ 2127 typedef struct CK_AES_CCM_PARAMS { 2128 CK_ULONG ulDataLen; 2129 CK_BYTE_PTR pNonce; 2130 CK_ULONG ulNonceLen; 2131 CK_BYTE_PTR pAAD; 2132 CK_ULONG ulAADLen; 2133 CK_ULONG ulMACLen; 2134 } CK_AES_CCM_PARAMS; 2135 2136 typedef CK_AES_CCM_PARAMS CK_PTR CK_AES_CCM_PARAMS_PTR; 2137 2138 typedef struct CK_CAMELLIA_CTR_PARAMS { 2139 CK_ULONG ulCounterBits; 2140 CK_BYTE cb[16]; 2141 } CK_CAMELLIA_CTR_PARAMS; 2142 2143 typedef CK_CAMELLIA_CTR_PARAMS CK_PTR CK_CAMELLIA_CTR_PARAMS_PTR; 2144 2145 typedef struct CK_CAMELLIA_CBC_ENCRYPT_DATA_PARAMS { 2146 CK_BYTE iv[16]; 2147 CK_BYTE_PTR pData; 2148 CK_ULONG length; 2149 } CK_CAMELLIA_CBC_ENCRYPT_DATA_PARAMS; 2150 2151 typedef CK_CAMELLIA_CBC_ENCRYPT_DATA_PARAMS CK_PTR \ 2152 CK_CAMELLIA_CBC_ENCRYPT_DATA_PARAMS_PTR; 2153 2154 typedef struct CK_ARIA_CBC_ENCRYPT_DATA_PARAMS { 2155 CK_BYTE iv[16]; 2156 CK_BYTE_PTR pData; 2157 CK_ULONG length; 2158 } CK_ARIA_CBC_ENCRYPT_DATA_PARAMS; 2159 2160 typedef CK_ARIA_CBC_ENCRYPT_DATA_PARAMS CK_PTR \ 2161 CK_ARIA_CBC_ENCRYPT_DATA_PARAMS_PTR; 2162 2163 typedef struct CK_DSA_PARAMETER_GEN_PARAM { 2164 CK_MECHANISM_TYPE hash; 2165 CK_BYTE_PTR pSeed; 2166 CK_ULONG ulSeedLen; 2167 CK_ULONG ulIndex; 2168 } CK_DSA_PARAMETER_GEN_PARAM; 2169 2170 typedef CK_DSA_PARAMETER_GEN_PARAM CK_PTR CK_DSA_PARAMETER_GEN_PARAM_PTR; 2171 2172 typedef struct CK_ECDH_AES_KEY_WRAP_PARAMS { 2173 CK_ULONG ulAESKeyBits; 2174 CK_EC_KDF_TYPE kdf; 2175 CK_ULONG ulSharedDataLen; 2176 CK_BYTE_PTR pSharedData; 2177 } CK_ECDH_AES_KEY_WRAP_PARAMS; 2178 2179 typedef CK_ECDH_AES_KEY_WRAP_PARAMS CK_PTR CK_ECDH_AES_KEY_WRAP_PARAMS_PTR; 2180 2181 typedef CK_ULONG CK_JAVA_MIDP_SECURITY_DOMAIN; 2182 2183 typedef CK_ULONG CK_CERTIFICATE_CATEGORY; 2184 2185 typedef struct CK_RSA_AES_KEY_WRAP_PARAMS { 2186 CK_ULONG ulAESKeyBits; 2187 CK_RSA_PKCS_OAEP_PARAMS_PTR pOAEPParams; 2188 } CK_RSA_AES_KEY_WRAP_PARAMS; 2189 2190 typedef CK_RSA_AES_KEY_WRAP_PARAMS CK_PTR CK_RSA_AES_KEY_WRAP_PARAMS_PTR; 2191 2192 typedef struct CK_TLS12_MASTER_KEY_DERIVE_PARAMS { 2193 CK_SSL3_RANDOM_DATA RandomInfo; 2194 CK_VERSION_PTR pVersion; 2195 CK_MECHANISM_TYPE prfHashMechanism; 2196 } CK_TLS12_MASTER_KEY_DERIVE_PARAMS; 2197 2198 typedef CK_TLS12_MASTER_KEY_DERIVE_PARAMS CK_PTR \ 2199 CK_TLS12_MASTER_KEY_DERIVE_PARAMS_PTR; 2200 2201 typedef struct CK_TLS12_KEY_MAT_PARAMS { 2202 CK_ULONG ulMacSizeInBits; 2203 CK_ULONG ulKeySizeInBits; 2204 CK_ULONG ulIVSizeInBits; 2205 CK_BBOOL bIsExport; 2206 CK_SSL3_RANDOM_DATA RandomInfo; 2207 CK_SSL3_KEY_MAT_OUT_PTR pReturnedKeyMaterial; 2208 CK_MECHANISM_TYPE prfHashMechanism; 2209 } CK_TLS12_KEY_MAT_PARAMS; 2210 2211 typedef CK_TLS12_KEY_MAT_PARAMS CK_PTR CK_TLS12_KEY_MAT_PARAMS_PTR; 2212 2213 typedef struct CK_TLS_KDF_PARAMS { 2214 CK_MECHANISM_TYPE prfMechanism; 2215 CK_BYTE_PTR pLabel; 2216 CK_ULONG ulLabelLength; 2217 CK_SSL3_RANDOM_DATA RandomInfo; 2218 CK_BYTE_PTR pContextData; 2219 CK_ULONG ulContextDataLength; 2220 } CK_TLS_KDF_PARAMS; 2221 2222 typedef CK_TLS_KDF_PARAMS CK_PTR CK_TLS_KDF_PARAMS_PTR; 2223 2224 typedef struct CK_TLS_MAC_PARAMS { 2225 CK_MECHANISM_TYPE prfHashMechanism; 2226 CK_ULONG ulMacLength; 2227 CK_ULONG ulServerOrClient; 2228 } CK_TLS_MAC_PARAMS; 2229 2230 typedef CK_TLS_MAC_PARAMS CK_PTR CK_TLS_MAC_PARAMS_PTR; 2231 2232 typedef struct CK_GOSTR3410_DERIVE_PARAMS { 2233 CK_EC_KDF_TYPE kdf; 2234 CK_BYTE_PTR pPublicData; 2235 CK_ULONG ulPublicDataLen; 2236 CK_BYTE_PTR pUKM; 2237 CK_ULONG ulUKMLen; 2238 } CK_GOSTR3410_DERIVE_PARAMS; 2239 2240 typedef CK_GOSTR3410_DERIVE_PARAMS CK_PTR CK_GOSTR3410_DERIVE_PARAMS_PTR; 2241 2242 typedef struct CK_GOSTR3410_KEY_WRAP_PARAMS { 2243 CK_BYTE_PTR pWrapOID; 2244 CK_ULONG ulWrapOIDLen; 2245 CK_BYTE_PTR pUKM; 2246 CK_ULONG ulUKMLen; 2247 CK_OBJECT_HANDLE hKey; 2248 } CK_GOSTR3410_KEY_WRAP_PARAMS; 2249 2250 typedef CK_GOSTR3410_KEY_WRAP_PARAMS CK_PTR CK_GOSTR3410_KEY_WRAP_PARAMS_PTR; 2251 2252 typedef struct CK_SEED_CBC_ENCRYPT_DATA_PARAMS { 2253 CK_BYTE iv[16]; 2254 CK_BYTE_PTR pData; 2255 CK_ULONG length; 2256 } CK_SEED_CBC_ENCRYPT_DATA_PARAMS; 2257 2258 typedef CK_SEED_CBC_ENCRYPT_DATA_PARAMS CK_PTR \ 2259 CK_SEED_CBC_ENCRYPT_DATA_PARAMS_PTR; 2260 2261 /* 2262 * New PKCS 11 v3.0 data structures. 2263 */ 2264 2265 typedef CK_ULONG CK_PROFILE_ID; 2266 typedef CK_PROFILE_ID CK_PTR CK_PROFILE_ID_PTR; 2267 2268 /* Typedefs for Flexible KDF */ 2269 typedef CK_ULONG CK_PRF_DATA_TYPE; 2270 typedef CK_MECHANISM_TYPE CK_SP800_108_PRF_TYPE; 2271 #define CK_SP800_108_ITERATION_VARIABLE 0x00000001UL 2272 #define CK_SP800_108_OPTIONAL_COUNTER 0x00000002UL 2273 #define CK_SP800_108_DKM_LENGTH 0x00000003UL 2274 #define CK_SP800_108_BYTE_ARRAY 0x00000004UL 2275 #define CK_SP800_108_COUNTER CK_SP800_108_OPTIONAL_COUNTER 2276 2277 typedef struct CK_PRF_DATA_PARAM 2278 { 2279 CK_PRF_DATA_TYPE type; 2280 CK_VOID_PTR pValue; 2281 CK_ULONG ulValueLen; 2282 } CK_PRF_DATA_PARAM; 2283 2284 typedef CK_PRF_DATA_PARAM CK_PTR CK_PRF_DATA_PARAM_PTR; 2285 2286 2287 typedef struct CK_SP800_108_COUNTER_FORMAT 2288 { 2289 CK_BBOOL bLittleEndian; 2290 CK_ULONG ulWidthInBits; 2291 } CK_SP800_108_COUNTER_FORMAT; 2292 2293 typedef CK_SP800_108_COUNTER_FORMAT CK_PTR CK_SP800_108_COUNTER_FORMAT_PTR; 2294 2295 typedef CK_ULONG CK_SP800_108_DKM_LENGTH_METHOD; 2296 #define CK_SP800_108_DKM_LENGTH_SUM_OF_KEYS 0x00000001UL 2297 #define CK_SP800_108_DKM_LENGTH_SUM_OF_SEGMENTS 0x00000002UL 2298 2299 typedef struct CK_SP800_108_DKM_LENGTH_FORMAT 2300 { 2301 CK_SP800_108_DKM_LENGTH_METHOD dkmLengthMethod; 2302 CK_BBOOL bLittleEndian; 2303 CK_ULONG ulWidthInBits; 2304 } CK_SP800_108_DKM_LENGTH_FORMAT; 2305 2306 typedef CK_SP800_108_DKM_LENGTH_FORMAT \ 2307 CK_PTR CK_SP800_108_DKM_LENGTH_FORMAT_PTR; 2308 2309 typedef struct CK_DERIVED_KEY 2310 { 2311 CK_ATTRIBUTE_PTR pTemplate; 2312 CK_ULONG ulAttributeCount; 2313 CK_OBJECT_HANDLE_PTR phKey; 2314 } CK_DERIVED_KEY; 2315 2316 typedef CK_DERIVED_KEY CK_PTR CK_DERIVED_KEY_PTR; 2317 2318 typedef struct CK_SP800_108_KDF_PARAMS 2319 { 2320 CK_SP800_108_PRF_TYPE prfType; 2321 CK_ULONG ulNumberOfDataParams; 2322 CK_PRF_DATA_PARAM_PTR pDataParams; 2323 CK_ULONG ulAdditionalDerivedKeys; 2324 CK_DERIVED_KEY_PTR pAdditionalDerivedKeys; 2325 } CK_SP800_108_KDF_PARAMS; 2326 2327 typedef CK_SP800_108_KDF_PARAMS CK_PTR CK_SP800_108_KDF_PARAMS_PTR; 2328 2329 typedef struct CK_SP800_108_FEEDBACK_KDF_PARAMS 2330 { 2331 CK_SP800_108_PRF_TYPE prfType; 2332 CK_ULONG ulNumberOfDataParams; 2333 CK_PRF_DATA_PARAM_PTR pDataParams; 2334 CK_ULONG ulIVLen; 2335 CK_BYTE_PTR pIV; 2336 CK_ULONG ulAdditionalDerivedKeys; 2337 CK_DERIVED_KEY_PTR pAdditionalDerivedKeys; 2338 } CK_SP800_108_FEEDBACK_KDF_PARAMS; 2339 2340 typedef CK_SP800_108_FEEDBACK_KDF_PARAMS \ 2341 CK_PTR CK_SP800_108_FEEDBACK_KDF_PARAMS_PTR; 2342 2343 /* EDDSA */ 2344 typedef struct CK_EDDSA_PARAMS { 2345 CK_BBOOL phFlag; 2346 CK_ULONG ulContextDataLen; 2347 CK_BYTE_PTR pContextData; 2348 } CK_EDDSA_PARAMS; 2349 2350 typedef CK_EDDSA_PARAMS CK_PTR CK_EDDSA_PARAMS_PTR; 2351 2352 /* Extended ChaCha20/Salsa20 support*/ 2353 typedef struct CK_CHACHA20_PARAMS { 2354 CK_BYTE_PTR pBlockCounter; 2355 CK_ULONG blockCounterBits; 2356 CK_BYTE_PTR pNonce; 2357 CK_ULONG ulNonceBits; 2358 } CK_CHACHA20_PARAMS; 2359 2360 typedef CK_CHACHA20_PARAMS CK_PTR CK_CHACHA20_PARAMS_PTR; 2361 2362 typedef struct CK_SALSA20_PARAMS { 2363 CK_BYTE_PTR pBlockCounter; 2364 CK_BYTE_PTR pNonce; 2365 CK_ULONG ulNonceBits; 2366 } CK_SALSA20_PARAMS; 2367 typedef CK_SALSA20_PARAMS CK_PTR CK_SALSA20_PARAMS_PTR; 2368 2369 typedef struct CK_SALSA20_CHACHA20_POLY1305_PARAMS { 2370 CK_BYTE_PTR pNonce; 2371 CK_ULONG ulNonceLen; 2372 CK_BYTE_PTR pAAD; 2373 CK_ULONG ulAADLen; 2374 } CK_SALSA20_CHACHA20_POLY1305_PARAMS; 2375 2376 typedef CK_SALSA20_CHACHA20_POLY1305_PARAMS \ 2377 CK_PTR CK_SALSA20_CHACHA20_POLY1305_PARAMS_PTR; 2378 2379 typedef struct CK_SALSA20_CHACHA20_POLY1305_MSG_PARAMS { 2380 CK_BYTE_PTR pNonce; 2381 CK_ULONG ulNonceLen; 2382 CK_BYTE_PTR pTag; 2383 } CK_SALSA20_CHACHA20_POLY1305_MSG_PARAMS; 2384 2385 typedef CK_SALSA20_CHACHA20_POLY1305_MSG_PARAMS \ 2386 CK_PTR CK_SALSA20_CHACHA20_POLY1305_MSG_PARAMS_PTR; 2387 2388 typedef CK_ULONG CK_X3DH_KDF_TYPE; 2389 typedef CK_X3DH_KDF_TYPE CK_PTR CK_X3DH_KDF_TYPE_PTR; 2390 2391 /* X3dh, ratchet */ 2392 typedef struct CK_X3DH_INITIATE_PARAMS { 2393 CK_X3DH_KDF_TYPE kdf; 2394 CK_OBJECT_HANDLE pPeer_identity; 2395 CK_OBJECT_HANDLE pPeer_prekey; 2396 CK_BYTE_PTR pPrekey_signature; 2397 CK_BYTE_PTR pOnetime_key; 2398 CK_OBJECT_HANDLE pOwn_identity; 2399 CK_OBJECT_HANDLE pOwn_ephemeral; 2400 } CK_X3DH_INITIATE_PARAMS; 2401 2402 typedef struct CK_X3DH_RESPOND_PARAMS { 2403 CK_X3DH_KDF_TYPE kdf; 2404 CK_BYTE_PTR pIdentity_id; 2405 CK_BYTE_PTR pPrekey_id; 2406 CK_BYTE_PTR pOnetime_id; 2407 CK_OBJECT_HANDLE pInitiator_identity; 2408 CK_BYTE_PTR pInitiator_ephemeral; 2409 } CK_X3DH_RESPOND_PARAMS; 2410 2411 typedef CK_ULONG CK_X2RATCHET_KDF_TYPE; 2412 typedef CK_X2RATCHET_KDF_TYPE CK_PTR CK_X2RATCHET_KDF_TYPE_PTR; 2413 2414 typedef struct CK_X2RATCHET_INITIALIZE_PARAMS { 2415 CK_BYTE_PTR sk; 2416 CK_OBJECT_HANDLE peer_public_prekey; 2417 CK_OBJECT_HANDLE peer_public_identity; 2418 CK_OBJECT_HANDLE own_public_identity; 2419 CK_BBOOL bEncryptedHeader; 2420 CK_ULONG eCurve; 2421 CK_MECHANISM_TYPE aeadMechanism; 2422 CK_X2RATCHET_KDF_TYPE kdfMechanism; 2423 } CK_X2RATCHET_INITIALIZE_PARAMS; 2424 2425 typedef CK_X2RATCHET_INITIALIZE_PARAMS \ 2426 CK_PTR CK_X2RATCHET_INITIALIZE_PARAMS_PTR; 2427 2428 typedef struct CK_X2RATCHET_RESPOND_PARAMS { 2429 CK_BYTE_PTR sk; 2430 CK_OBJECT_HANDLE own_prekey; 2431 CK_OBJECT_HANDLE initiator_identity; 2432 CK_OBJECT_HANDLE own_public_identity; 2433 CK_BBOOL bEncryptedHeader; 2434 CK_ULONG eCurve; 2435 CK_MECHANISM_TYPE aeadMechanism; 2436 CK_X2RATCHET_KDF_TYPE kdfMechanism; 2437 } CK_X2RATCHET_RESPOND_PARAMS; 2438 typedef CK_X2RATCHET_RESPOND_PARAMS \ 2439 CK_PTR CK_X2RATCHET_RESPOND_PARAMS_PTR; 2440 2441 typedef CK_ULONG CK_XEDDSA_HASH_TYPE; 2442 typedef CK_XEDDSA_HASH_TYPE CK_PTR CK_XEDDSA_HASH_TYPE_PTR; 2443 2444 /* XEDDSA */ 2445 typedef struct CK_XEDDSA_PARAMS { 2446 CK_XEDDSA_HASH_TYPE hash; 2447 } CK_XEDDSA_PARAMS; 2448 typedef CK_XEDDSA_PARAMS CK_PTR CK_XEDDSA_PARAMS_PTR; 2449 2450 /* HKDF params */ 2451 typedef struct CK_HKDF_PARAMS { 2452 CK_BBOOL bExtract; 2453 CK_BBOOL bExpand; 2454 CK_MECHANISM_TYPE prfHashMechanism; 2455 CK_ULONG ulSaltType; 2456 CK_BYTE_PTR pSalt; 2457 CK_ULONG ulSaltLen; 2458 CK_OBJECT_HANDLE hSaltKey; 2459 CK_BYTE_PTR pInfo; 2460 CK_ULONG ulInfoLen; 2461 } CK_HKDF_PARAMS; 2462 typedef CK_HKDF_PARAMS CK_PTR CK_HKDF_PARAMS_PTR; 2463 2464 #define CKF_HKDF_SALT_NULL 0x00000001UL 2465 #define CKF_HKDF_SALT_DATA 0x00000002UL 2466 #define CKF_HKDF_SALT_KEY 0x00000004UL 2467 2468 /* HSS */ 2469 typedef CK_ULONG CK_HSS_LEVELS; 2470 typedef CK_ULONG CK_LMS_TYPE; 2471 typedef CK_ULONG CK_LMOTS_TYPE; 2472 2473 typedef struct specifiedParams { 2474 CK_HSS_LEVELS levels; 2475 CK_LMS_TYPE lm_type[8]; 2476 CK_LMOTS_TYPE lm_ots_type[8]; 2477 } specifiedParams; 2478 2479 /* IKE Params */ 2480 typedef struct CK_IKE2_PRF_PLUS_DERIVE_PARAMS { 2481 CK_MECHANISM_TYPE prfMechanism; 2482 CK_BBOOL bHasSeedKey; 2483 CK_OBJECT_HANDLE hSeedKey; 2484 CK_BYTE_PTR pSeedData; 2485 CK_ULONG ulSeedDataLen; 2486 } CK_IKE2_PRF_PLUS_DERIVE_PARAMS; 2487 typedef CK_IKE2_PRF_PLUS_DERIVE_PARAMS CK_PTR CK_IKE2_PRF_PLUS_DERIVE_PARAMS_PTR; 2488 2489 typedef struct CK_IKE_PRF_DERIVE_PARAMS { 2490 CK_MECHANISM_TYPE prfMechanism; 2491 CK_BBOOL bDataAsKey; 2492 CK_BBOOL bRekey; 2493 CK_BYTE_PTR pNi; 2494 CK_ULONG ulNiLen; 2495 CK_BYTE_PTR pNr; 2496 CK_ULONG ulNrLen; 2497 CK_OBJECT_HANDLE hNewKey; 2498 } CK_IKE_PRF_DERIVE_PARAMS; 2499 typedef CK_IKE_PRF_DERIVE_PARAMS CK_PTR CK_IKE_PRF_DERIVE_PARAMS_PTR; 2500 2501 typedef struct CK_IKE1_PRF_DERIVE_PARAMS { 2502 CK_MECHANISM_TYPE prfMechanism; 2503 CK_BBOOL bHasPrevKey; 2504 CK_OBJECT_HANDLE hKeygxy 2505 CK_OBJECT_HANDLE hPrevKey; 2506 CK_BYTE_PTR pCKYi; 2507 CK_ULONG ulCKYiLen; 2508 CK_BYTE_PTR pCKYr; 2509 CK_ULONG ulCKYrLen; 2510 CK_BYTE keyNumber; 2511 } CK_IKE1_PRF_DERIVE_PARAMS; 2512 typedef CK_IKE1_PRF_DERIVE_PARAMS CK_PTR CK_IKE1_PRF_DERIVE_PARAMS_PTR; 2513 2514 typedef struct CK_IKE1_EXTENDED_DERIVE_PARAMS { 2515 CK_MECHANISM_TYPE prfMechanism; 2516 CK_BBOOL bHasKeygxy; 2517 CK_OBJECT_HANDLE hKeygxy; 2518 CK_BYTE_PTR pExtraData; 2519 CK_ULONG ulExtraDataLen; 2520 } CK_IKE1_EXTENDED_DERIVE_PARAMS; 2521 typedef CK_IKE1_EXTENDED_DERIVE_PARAMS CK_PTR CK_IKE1_EXTENDED_DERIVE_PARAMS_PTR; 2522 2523 #endif /* _PKCS11T_H_ */ 2524 2525