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