tor-browser

The Tor Browser
git clone https://git.dasho.dev/tor-browser.git
Log | Files | Refs | README | LICENSE

pkcs11t.h (103564B)


      1 /* This Source Code Form is subject to the terms of the Mozilla Public
      2 * License, v. 2.0. If a copy of the MPL was not distributed with this
      3 * file, You can obtain one at http://mozilla.org/MPL/2.0/. */
      4 /* License to copy and use this software is granted provided that it is
      5 * identified as "RSA Security Inc. PKCS #11 Cryptographic Token Interface
      6 * (Cryptoki)" in all material mentioning or referencing this software.
      7 
      8 * License is also granted to make and use derivative works provided that
      9 * such works are identified as "derived from the RSA Security Inc. PKCS #11
     10 * Cryptographic Token Interface (Cryptoki)" in all material mentioning or
     11 * referencing the derived work.
     12 
     13 * RSA Security Inc. makes no representations concerning either the
     14 * merchantability of this software or the suitability of this software for
     15 * any particular purpose. It is provided "as is" without express or implied
     16 * warranty of any kind.
     17 */
     18 
     19 #ifndef _PKCS11T_H_
     20 #define _PKCS11T_H_ 1
     21 
     22 #define CK_TRUE 1
     23 #define CK_FALSE 0
     24 
     25 #include "prtypes.h"
     26 
     27 #define CK_PTR *
     28 #define CK_NULL_PTR 0
     29 #define CK_CALLBACK_FUNCTION(rtype, func) rtype(PR_CALLBACK *func)
     30 #define CK_DECLARE_FUNCTION(rtype, func) extern rtype func
     31 #define CK_DECLARE_FUNCTION_POINTER(rtype, func) rtype(PR_CALLBACK *func)
     32 
     33 #ifdef NSS_PCKS11_2_0_COMPAT
     34 #define prfHashMechanism prfMechanism
     35 #endif
     36 
     37 #define CRYPTOKI_VERSION_MAJOR 3
     38 #define CRYPTOKI_VERSION_MINOR 2
     39 #define CRYPTOKI_VERSION_AMENDMENT 0
     40 
     41 /* an unsigned 8-bit value */
     42 typedef unsigned char CK_BYTE;
     43 
     44 /* an unsigned 8-bit character */
     45 typedef CK_BYTE CK_CHAR;
     46 
     47 /* an 8-bit UTF-8 character */
     48 typedef CK_BYTE CK_UTF8CHAR;
     49 
     50 /* a BYTE-sized Boolean flag */
     51 typedef CK_BYTE CK_BBOOL;
     52 
     53 /* an unsigned value, at least 32 bits long */
     54 typedef unsigned long int CK_ULONG;
     55 
     56 /* a signed value, the same size as a CK_ULONG */
     57 /* CK_LONG is new for v2.0 */
     58 typedef long int CK_LONG;
     59 
     60 /* at least 32 bits; each bit is a Boolean flag */
     61 typedef CK_ULONG CK_FLAGS;
     62 
     63 /* some special values for certain CK_ULONG variables */
     64 #define CK_UNAVAILABLE_INFORMATION (~0UL)
     65 #define CK_EFFECTIVELY_INFINITE 0
     66 
     67 typedef CK_BYTE CK_PTR CK_BYTE_PTR;
     68 typedef CK_CHAR CK_PTR CK_CHAR_PTR;
     69 typedef CK_UTF8CHAR CK_PTR CK_UTF8CHAR_PTR;
     70 typedef CK_ULONG CK_PTR CK_ULONG_PTR;
     71 typedef void CK_PTR CK_VOID_PTR;
     72 typedef CK_ULONG CK_PTR CK_FLAGS_PTR;
     73 
     74 /* Pointer to a CK_VOID_PTR-- i.e., pointer to pointer to void */
     75 typedef CK_VOID_PTR CK_PTR CK_VOID_PTR_PTR;
     76 
     77 /* The following value is always invalid if used as a session */
     78 /* handle or object handle */
     79 #define CK_INVALID_HANDLE 0
     80 
     81 /* pack */
     82 #include "pkcs11p.h"
     83 
     84 typedef struct CK_VERSION {
     85    CK_BYTE major; /* integer portion of version number */
     86    CK_BYTE minor; /* 1/100ths portion of version number */
     87 } CK_VERSION;
     88 
     89 typedef CK_VERSION CK_PTR CK_VERSION_PTR;
     90 
     91 typedef struct CK_INFO {
     92    /* manufacturerID and libraryDecription have been changed from
     93     * CK_CHAR to CK_UTF8CHAR for v2.10 */
     94    CK_VERSION cryptokiVersion;     /* PKCS #11 interface ver */
     95    CK_UTF8CHAR manufacturerID[32]; /* blank padded */
     96    CK_FLAGS flags;                 /* must be zero */
     97    /* libraryDescription and libraryVersion are new for v2.0 */
     98    CK_UTF8CHAR libraryDescription[32]; /* blank padded */
     99    CK_VERSION libraryVersion;          /* version of library */
    100 } CK_INFO;
    101 
    102 typedef CK_INFO CK_PTR CK_INFO_PTR;
    103 
    104 /* CK_NOTIFICATION enumerates the types of notifications that
    105 * PKCS #11 provides to an application */
    106 /* CK_NOTIFICATION has been changed from an enum to a CK_ULONG
    107 * for v2.0 */
    108 typedef CK_ULONG CK_NOTIFICATION;
    109 #define CKN_SURRENDER 0
    110 #define CKN_OTP_CHANGED 1
    111 
    112 typedef CK_ULONG CK_SLOT_ID;
    113 
    114 typedef CK_SLOT_ID CK_PTR CK_SLOT_ID_PTR;
    115 
    116 /* CK_SLOT_INFO provides information about a slot */
    117 typedef struct CK_SLOT_INFO {
    118    /* slotDescription and manufacturerID have been changed from
    119     * CK_CHAR to CK_UTF8CHAR for v2.10 */
    120    CK_UTF8CHAR slotDescription[64]; /* blank padded */
    121    CK_UTF8CHAR manufacturerID[32];  /* blank padded */
    122    CK_FLAGS flags;
    123 
    124    /* hardwareVersion and firmwareVersion are new for v2.0 */
    125    CK_VERSION hardwareVersion; /* version of hardware */
    126    CK_VERSION firmwareVersion; /* version of firmware */
    127 } CK_SLOT_INFO;
    128 
    129 /* flags: bit flags that provide capabilities of the slot
    130 *      Bit Flag              Mask        Meaning
    131 */
    132 #define CKF_TOKEN_PRESENT 0x00000001UL    /* a token is there */
    133 #define CKF_REMOVABLE_DEVICE 0x00000002UL /* removable devices*/
    134 #define CKF_HW_SLOT 0x00000004UL          /* hardware slot */
    135 
    136 typedef CK_SLOT_INFO CK_PTR CK_SLOT_INFO_PTR;
    137 
    138 /* CK_TOKEN_INFO provides information about a token */
    139 typedef struct CK_TOKEN_INFO {
    140    /* label, manufacturerID, and model have been changed from
    141     * CK_CHAR to CK_UTF8CHAR for v2.10 */
    142    CK_UTF8CHAR label[32];          /* blank padded */
    143    CK_UTF8CHAR manufacturerID[32]; /* blank padded */
    144    CK_UTF8CHAR model[16];          /* blank padded */
    145    CK_CHAR serialNumber[16];       /* blank padded */
    146    CK_FLAGS flags;                 /* see below */
    147 
    148    /* ulMaxSessionCount, ulSessionCount, ulMaxRwSessionCount,
    149     * ulRwSessionCount, ulMaxPinLen, and ulMinPinLen have all been
    150     * changed from CK_USHORT to CK_ULONG for v2.0 */
    151    CK_ULONG ulMaxSessionCount;    /* max open sessions */
    152    CK_ULONG ulSessionCount;       /* sess. now open */
    153    CK_ULONG ulMaxRwSessionCount;  /* max R/W sessions */
    154    CK_ULONG ulRwSessionCount;     /* R/W sess. now open */
    155    CK_ULONG ulMaxPinLen;          /* in bytes */
    156    CK_ULONG ulMinPinLen;          /* in bytes */
    157    CK_ULONG ulTotalPublicMemory;  /* in bytes */
    158    CK_ULONG ulFreePublicMemory;   /* in bytes */
    159    CK_ULONG ulTotalPrivateMemory; /* in bytes */
    160    CK_ULONG ulFreePrivateMemory;  /* in bytes */
    161 
    162    /* hardwareVersion, firmwareVersion, and time are new for
    163     * v2.0 */
    164    CK_VERSION hardwareVersion; /* version of hardware */
    165    CK_VERSION firmwareVersion; /* version of firmware */
    166    CK_CHAR utcTime[16];        /* time */
    167 } CK_TOKEN_INFO;
    168 
    169 /* The flags parameter is defined as follows:
    170 *      Bit Flag                    Mask        Meaning
    171 */
    172 #define CKF_RNG 0x00000001UL                  /* has random # \
    173                                               * generator */
    174 #define CKF_WRITE_PROTECTED 0x00000002UL      /* token is \
    175                                               * write-   \
    176                                               * protected */
    177 #define CKF_LOGIN_REQUIRED 0x00000004UL       /* user must \
    178                                               * login */
    179 #define CKF_USER_PIN_INITIALIZED 0x00000008UL /* normal user's \
    180                                               * PIN is set */
    181 
    182 /* CKF_RESTORE_KEY_NOT_NEEDED is new for v2.0.  If it is set,
    183 * that means that *every* time the state of cryptographic
    184 * operations of a session is successfully saved, all keys
    185 * needed to continue those operations are stored in the state */
    186 #define CKF_RESTORE_KEY_NOT_NEEDED 0x00000020UL
    187 
    188 /* CKF_CLOCK_ON_TOKEN is new for v2.0.  If it is set, that means
    189 * that the token has some sort of clock.  The time on that
    190 * clock is returned in the token info structure */
    191 #define CKF_CLOCK_ON_TOKEN 0x00000040UL
    192 
    193 /* CKF_PROTECTED_AUTHENTICATION_PATH is new for v2.0.  If it is
    194 * set, that means that there is some way for the user to login
    195 * without sending a PIN through the PKCS #11 library itself */
    196 #define CKF_PROTECTED_AUTHENTICATION_PATH 0x00000100UL
    197 
    198 /* CKF_DUAL_CRYPTO_OPERATIONS is new for v2.0.  If it is true,
    199 * that means that a single session with the token can perform
    200 * dual simultaneous cryptographic operations (digest and
    201 * encrypt; decrypt and digest; sign and encrypt; and decrypt
    202 * and sign) */
    203 #define CKF_DUAL_CRYPTO_OPERATIONS 0x00000200UL
    204 
    205 /* CKF_TOKEN_INITIALIZED if new for v2.10. If it is true, the
    206 * token has been initialized using C_InitializeToken or an
    207 * equivalent mechanism outside the scope of PKCS #11.
    208 * Calling C_InitializeToken when this flag is set will cause
    209 * the token to be reinitialized. */
    210 #define CKF_TOKEN_INITIALIZED 0x00000400UL
    211 
    212 /* CKF_SECONDARY_AUTHENTICATION if new for v2.10. If it is
    213 * true, the token supports secondary authentication for
    214 * private key objects. This flag is deprecated in v2.11 and
    215   onwards. */
    216 #define CKF_SECONDARY_AUTHENTICATION 0x00000800UL
    217 
    218 /* CKF_USER_PIN_COUNT_LOW if new for v2.10. If it is true, an
    219 * incorrect user login PIN has been entered at least once
    220 * since the last successful authentication. */
    221 #define CKF_USER_PIN_COUNT_LOW 0x00010000UL
    222 
    223 /* CKF_USER_PIN_FINAL_TRY if new for v2.10. If it is true,
    224 * supplying an incorrect user PIN will it to become locked. */
    225 #define CKF_USER_PIN_FINAL_TRY 0x00020000UL
    226 
    227 /* CKF_USER_PIN_LOCKED if new for v2.10. If it is true, the
    228 * user PIN has been locked. User login to the token is not
    229 * possible. */
    230 #define CKF_USER_PIN_LOCKED 0x00040000UL
    231 
    232 /* CKF_USER_PIN_TO_BE_CHANGED if new for v2.10. If it is true,
    233 * the user PIN value is the default value set by token
    234 * initialization or manufacturing, or the PIN has been
    235 * expired by the card. */
    236 #define CKF_USER_PIN_TO_BE_CHANGED 0x00080000UL
    237 
    238 /* CKF_SO_PIN_COUNT_LOW if new for v2.10. If it is true, an
    239 * incorrect SO login PIN has been entered at least once since
    240 * the last successful authentication. */
    241 #define CKF_SO_PIN_COUNT_LOW 0x00100000UL
    242 
    243 /* CKF_SO_PIN_FINAL_TRY if new for v2.10. If it is true,
    244 * supplying an incorrect SO PIN will it to become locked. */
    245 #define CKF_SO_PIN_FINAL_TRY 0x00200000UL
    246 
    247 /* CKF_SO_PIN_LOCKED if new for v2.10. If it is true, the SO
    248 * PIN has been locked. SO login to the token is not possible.
    249 */
    250 #define CKF_SO_PIN_LOCKED 0x00400000UL
    251 
    252 /* CKF_SO_PIN_TO_BE_CHANGED if new for v2.10. If it is true,
    253 * the SO PIN value is the default value set by token
    254 * initialization or manufacturing, or the PIN has been
    255 * expired by the card. */
    256 #define CKF_SO_PIN_TO_BE_CHANGED 0x00800000UL
    257 
    258 #define CKF_ERROR_STATE 0x01000000UL
    259 
    260 /* CKF_SEED_RANDOM_REQUIRED new for v3.2. If this is true, the
    261 * token's RNG must be seeded with C_SeedRandom */
    262 #define CKF_SEED_RANDOM_REQUIRED 0x02000000UL
    263 /* CKF_ASYNC_SESSION_SUPPORTED new for v3.2. If this is true
    264 * this token supports async operations */
    265 #define CKF_ASYNC_SESSION_SUPPORTED 0x04000000UL
    266 
    267 typedef CK_TOKEN_INFO CK_PTR CK_TOKEN_INFO_PTR;
    268 
    269 /* CK_SESSION_HANDLE is a PKCS #11-assigned value that
    270 * identifies a session */
    271 typedef CK_ULONG CK_SESSION_HANDLE;
    272 
    273 typedef CK_SESSION_HANDLE CK_PTR CK_SESSION_HANDLE_PTR;
    274 
    275 /* CK_USER_TYPE enumerates the types of PKCS #11 users */
    276 /* CK_USER_TYPE has been changed from an enum to a CK_ULONG for
    277 * v2.0 */
    278 typedef CK_ULONG CK_USER_TYPE;
    279 /* Security Officer */
    280 #define CKU_SO 0
    281 /* Normal user */
    282 #define CKU_USER 1
    283 /* Context specific (added in v2.20) */
    284 #define CKU_CONTEXT_SPECIFIC 2
    285 
    286 /* CK_STATE enumerates the session states */
    287 /* CK_STATE has been changed from an enum to a CK_ULONG for
    288 * v2.0 */
    289 typedef CK_ULONG CK_STATE;
    290 #define CKS_RO_PUBLIC_SESSION 0
    291 #define CKS_RO_USER_FUNCTIONS 1
    292 #define CKS_RW_PUBLIC_SESSION 2
    293 #define CKS_RW_USER_FUNCTIONS 3
    294 #define CKS_RW_SO_FUNCTIONS 4
    295 
    296 /* CK_SESSION_INFO provides information about a session */
    297 typedef struct CK_SESSION_INFO {
    298    CK_SLOT_ID slotID;
    299    CK_STATE state;
    300    CK_FLAGS flags; /* see below */
    301 
    302    /* ulDeviceError was changed from CK_USHORT to CK_ULONG for
    303     * v2.0 */
    304    CK_ULONG ulDeviceError; /* device-dependent error code */
    305 } CK_SESSION_INFO;
    306 
    307 /* The flags are defined in the following table:
    308 *      Bit Flag                Mask        Meaning
    309 */
    310 #define CKF_RW_SESSION 0x00000002UL     /* session is r/w */
    311 #define CKF_SERIAL_SESSION 0x00000004UL /* no parallel */
    312 /* new for v3.2 this session is async */
    313 #define CKF_ASYNC_SESSION 0x00000008UL
    314 
    315 typedef CK_SESSION_INFO CK_PTR CK_SESSION_INFO_PTR;
    316 
    317 /* CK_OBJECT_HANDLE is a token-specific identifier for an
    318 * object  */
    319 typedef CK_ULONG CK_OBJECT_HANDLE;
    320 
    321 typedef CK_OBJECT_HANDLE CK_PTR CK_OBJECT_HANDLE_PTR;
    322 
    323 /* CK_OBJECT_CLASS is a value that identifies the classes (or
    324 * types) of objects that PKCS #11 recognizes.  It is defined
    325 * as follows: */
    326 /* CK_OBJECT_CLASS was changed from CK_USHORT to CK_ULONG for
    327 * v2.0 */
    328 typedef CK_ULONG CK_OBJECT_CLASS;
    329 
    330 /* The following classes of objects are defined: */
    331 /* CKO_HW_FEATURE is new for v2.10 */
    332 /* CKO_DOMAIN_PARAMETERS is new for v2.11 */
    333 /* CKO_MECHANISM is new for v2.20 */
    334 /* CKO_PROFILE is new for v3.00 */
    335 #define CKO_DATA 0x00000000UL
    336 #define CKO_CERTIFICATE 0x00000001UL
    337 #define CKO_PUBLIC_KEY 0x00000002UL
    338 #define CKO_PRIVATE_KEY 0x00000003UL
    339 #define CKO_SECRET_KEY 0x00000004UL
    340 #define CKO_HW_FEATURE 0x00000005UL
    341 #define CKO_DOMAIN_PARAMETERS 0x00000006UL
    342 #define CKO_MECHANISM 0x00000007UL
    343 #define CKO_OTP_KEY 0x00000008UL
    344 #define CKO_PROFILE 0x00000009UL
    345 /* new for v3.2 */
    346 #define CKO_TRUST 0x0000000bUL
    347 #define CKO_VALIDATION 0x0000000aUL
    348 
    349 #define CKO_VENDOR_DEFINED 0x80000000UL
    350 
    351 typedef CK_OBJECT_CLASS CK_PTR CK_OBJECT_CLASS_PTR;
    352 
    353 /* CK_PROFILE_ID is new for v3.00. CK_PROFILE_ID is a value that
    354 * identifies the profile that the token supports. */
    355 typedef CK_ULONG CK_PROFILE_ID;
    356 typedef CK_PROFILE_ID CK_PTR CK_PROFILE_ID_PTR;
    357 
    358 /* Profile ID's */
    359 #define CKP_INVALID_ID 0x00000000UL
    360 #define CKP_BASELINE_PROVIDER 0x00000001UL
    361 #define CKP_EXTENDED_PROVIDER 0x00000002UL
    362 #define CKP_AUTHENTICATION_TOKEN 0x00000003UL
    363 #define CKP_PUBLIC_CERTIFICATES_TOKEN 0x00000004UL
    364 #define CKP_COMPLETE_PROVIDER 0x00000005UL
    365 #define CKP_HKDF_TLS_TOKEN 0x00000006UL
    366 
    367 #define CKP_VENDOR_DEFINED 0x80000000UL
    368 
    369 /* CK_HW_FEATURE_TYPE is new for v2.10. CK_HW_FEATURE_TYPE is a
    370 * value that identifies the hardware feature type of an object
    371 * with CK_OBJECT_CLASS equal to CKO_HW_FEATURE. */
    372 typedef CK_ULONG CK_HW_FEATURE_TYPE;
    373 
    374 /* The following hardware feature types are defined */
    375 /* CKH_USER_INTERFACE is new for v2.20 */
    376 #define CKH_MONOTONIC_COUNTER 0x00000001UL
    377 #define CKH_CLOCK 0x00000002UL
    378 #define CKH_USER_INTERFACE 0x00000003UL
    379 #define CKH_VENDOR_DEFINED 0x80000000UL
    380 
    381 /* CK_KEY_TYPE is a value that identifies a key type */
    382 /* CK_KEY_TYPE was changed from CK_USHORT to CK_ULONG for v2.0 */
    383 typedef CK_ULONG CK_KEY_TYPE;
    384 
    385 /* the following key types are defined: */
    386 #define CKK_RSA 0x00000000UL
    387 #define CKK_DSA 0x00000001UL
    388 #define CKK_DH 0x00000002UL
    389 
    390 /* CKK_ECDSA and CKK_KEA are new for v2.0 */
    391 /* CKK_ECDSA is deprecated in v2.11, CKK_EC is preferred. */
    392 #define CKK_ECDSA 0x00000003UL
    393 #define CKK_EC 0x00000003UL
    394 #define CKK_X9_42_DH 0x00000004UL
    395 #define CKK_KEA 0x00000005UL
    396 
    397 #define CKK_GENERIC_SECRET 0x00000010UL
    398 #define CKK_RC2 0x00000011UL
    399 #define CKK_RC4 0x00000012UL
    400 #define CKK_DES 0x00000013UL
    401 #define CKK_DES2 0x00000014UL
    402 #define CKK_DES3 0x00000015UL
    403 
    404 /* all these key types are new for v2.0 */
    405 #define CKK_CAST 0x00000016UL
    406 #define CKK_CAST3 0x00000017UL
    407 /* CKK_CAST5 is deprecated in v2.11, CKK_CAST128 is preferred. */
    408 #define CKK_CAST5 0x00000018UL
    409 #define CKK_CAST128 0x00000018UL
    410 #define CKK_RC5 0x00000019UL
    411 #define CKK_IDEA 0x0000001AUL
    412 #define CKK_SKIPJACK 0x0000001BUL
    413 #define CKK_BATON 0x0000001CUL
    414 #define CKK_JUNIPER 0x0000001DUL
    415 #define CKK_CDMF 0x0000001EUL
    416 #define CKK_AES 0x0000001FUL
    417 
    418 /* BlowFish and TwoFish are new for v2.20 */
    419 #define CKK_BLOWFISH 0x00000020UL
    420 #define CKK_TWOFISH 0x00000021UL
    421 
    422 /* New for v3.1 */
    423 #define CKK_SECURID 0x00000022UL
    424 #define CKK_ACTI 0x00000024UL
    425 #define CKK_HOTP 0x00000023UL
    426 
    427 /* Camellia is proposed for v2.20 Amendment 3 */
    428 #define CKK_CAMELLIA 0x00000025UL
    429 
    430 #define CKK_SEED 0x0000002FUL /* was 2A */
    431 
    432 /* added in v2.30 */
    433 #define CKK_ARIA 0x00000026UL
    434 
    435 /* added in 2.40 */
    436 #define CKK_MD5_HMAC 0x00000027UL
    437 #define CKK_SHA_1_HMAC 0x00000028UL
    438 #define CKK_RIPEMD128_HMAC 0x00000029UL
    439 #define CKK_RIPEMD160_HMAC 0x0000002AUL
    440 #define CKK_SHA256_HMAC 0x0000002BUL
    441 #define CKK_SHA384_HMAC 0x0000002CUL
    442 #define CKK_SHA512_HMAC 0x0000002DUL
    443 #define CKK_SHA224_HMAC 0x0000002EUL
    444 #define CKK_GOSTR3410 0x00000030UL
    445 #define CKK_GOSTR3411 0x00000031UL
    446 #define CKK_GOST28147 0x00000032UL
    447 #define CKK_CHACHA20 0x00000033UL
    448 #define CKK_POLY1305 0x00000034UL
    449 #define CKK_AES_XTS 0x00000035UL
    450 #define CKK_SHA3_224_HMAC 0x00000036UL
    451 #define CKK_SHA3_256_HMAC 0x00000037UL
    452 #define CKK_SHA3_384_HMAC 0x00000038UL
    453 #define CKK_SHA3_512_HMAC 0x00000039UL
    454 
    455 /* added in 3.0 */
    456 #define CKK_BLAKE2B_160_HMAC 0x0000003aUL
    457 #define CKK_BLAKE2B_256_HMAC 0x0000003bUL
    458 #define CKK_BLAKE2B_384_HMAC 0x0000003cUL
    459 #define CKK_BLAKE2B_512_HMAC 0x0000003dUL
    460 #define CKK_SALSA20 0x0000003eUL
    461 #define CKK_X2RATCHET 0x0000003fUL
    462 #define CKK_EC_EDWARDS 0x00000040UL
    463 #define CKK_EC_MONTGOMERY 0x00000041UL
    464 #define CKK_HKDF 0x00000042UL
    465 #define CKK_SHA512_224_HMAC 0x00000043UL
    466 #define CKK_SHA512_256_HMAC 0x00000044UL
    467 #define CKK_SHA512_T_HMAC 0x00000045UL
    468 
    469 /* New for v3.1 */
    470 #define CKK_HSS 0x00000046UL
    471 
    472 /* New for v3.2 */
    473 #define CKK_ML_DSA 0x0000004aUL
    474 #define CKK_ML_KEM 0x00000049UL
    475 #define CKK_SLH_DSA 0x0000004bUL
    476 #define CKK_XMSS 0x00000047UL
    477 #define CKK_XMSSMT 0x00000048UL
    478 
    479 #define CKK_VENDOR_DEFINED 0x80000000UL
    480 
    481 /* CK_CERTIFICATE_TYPE is a value that identifies a certificate
    482 * type */
    483 /* CK_CERTIFICATE_TYPE was changed from CK_USHORT to CK_ULONG
    484 * for v2.0 */
    485 typedef CK_ULONG CK_CERTIFICATE_TYPE;
    486 
    487 /* The following certificate types are defined: */
    488 /* CKC_X_509_ATTR_CERT is new for v2.10 */
    489 /* CKC_WTLS is new for v2.20 */
    490 #define CKC_X_509 0x00000000UL
    491 #define CKC_X_509_ATTR_CERT 0x00000001UL
    492 #define CKC_WTLS 0x00000002UL
    493 #define CKC_VENDOR_DEFINED 0x80000000UL
    494 
    495 /* CK_ATTRIBUTE_TYPE is a value that identifies an attribute
    496 * type */
    497 /* CK_ATTRIBUTE_TYPE was changed from CK_USHORT to CK_ULONG for
    498 * v2.0 */
    499 typedef CK_ULONG CK_ATTRIBUTE_TYPE;
    500 
    501 /* values for CKA_CERTIFICATE_CATEGORY v2.20 */
    502 typedef CK_ULONG CK_CERTIFICATE_CATEGORY;
    503 #define CK_CERTIFICATE_CATEGORY_UNSPECIFIED 0UL
    504 #define CK_CERTIFICATE_CATEGORY_TOKEN_USER 1UL
    505 #define CK_CERTIFICATE_CATEGORY_AUTHORITY 2UL
    506 #define CK_CERTIFICATE_CATEGORY_OTHER_ENTITY 3UL
    507 
    508 /* values for CKA_JAVA_MIDP_SECURITY_DOMAIN v2.20 */
    509 typedef CK_ULONG CK_JAVA_MIDP_SECURITY_DOMAIN;
    510 #define CK_SECURITY_DOMAIN_UNSPECIFIED 0UL
    511 #define CK_SECURITY_DOMAIN_MANUFACTURER 1UL
    512 #define CK_SECURITY_DOMAIN_OPERATOR 2UL
    513 #define CK_SECURITY_DOMAIN_THIRD_PARTY 3UL
    514 
    515 /* values for CKA_OTP_FORMAT */
    516 #define CK_OTP_FORMAT_DECIMAL 0UL
    517 #define CK_OTP_FORMAT_HEXADECIMAL 1UL
    518 #define CK_OTP_FORMAT_ALPHANUMERIC 2UL
    519 #define CK_OTP_FORMAT_BINARY 3UL
    520 
    521 /* values for CKA_OTP_CHALLENGE_REQUIREMENT, CKA_OTP_TIME_REQUIREMENT,
    522 * CKA_OTP_COUNTER_REQUIREMENT, CKA_OTP_PIN_REQUIREMENT */
    523 #define CK_OTP_PARAM_IGNORED 0UL
    524 #define CK_OTP_PARAM_OPTIONAL 1UL
    525 #define CK_OTP_PARAM_MANDATORY 2UL
    526 
    527 /* The CKF_ARRAY_ATTRIBUTE flag identifies an attribute which
    528   consists of an array of values. */
    529 #define CKF_ARRAY_ATTRIBUTE 0x40000000UL
    530 
    531 /* The following attribute types are defined: */
    532 #define CKA_CLASS 0x00000000UL
    533 #define CKA_TOKEN 0x00000001UL
    534 #define CKA_PRIVATE 0x00000002UL
    535 #define CKA_LABEL 0x00000003UL
    536 /* new for v3.1 */
    537 #define CKA_UNIQUE_ID 0x00000004UL
    538 
    539 #define CKA_APPLICATION 0x00000010UL
    540 #define CKA_VALUE 0x00000011UL
    541 
    542 /* CKA_OBJECT_ID is new for v2.10 */
    543 #define CKA_OBJECT_ID 0x00000012UL
    544 
    545 #define CKA_CERTIFICATE_TYPE 0x00000080UL
    546 #define CKA_ISSUER 0x00000081UL
    547 #define CKA_SERIAL_NUMBER 0x00000082UL
    548 
    549 /* CKA_AC_ISSUER, CKA_OWNER, and CKA_ATTR_TYPES are new
    550 * for v2.10 */
    551 #define CKA_AC_ISSUER 0x00000083UL
    552 #define CKA_OWNER 0x00000084UL
    553 #define CKA_ATTR_TYPES 0x00000085UL
    554 
    555 /* CKA_TRUSTED is new for v2.11 */
    556 #define CKA_TRUSTED 0x00000086UL
    557 
    558 /* CKA_CERTIFICATE_CATEGORY ...
    559 * CKA_CHECK_VALUE are new for v2.20 */
    560 #define CKA_CERTIFICATE_CATEGORY 0x00000087UL
    561 #define CKA_JAVA_MIDP_SECURITY_DOMAIN 0x00000088UL
    562 #define CKA_URL 0x00000089UL
    563 #define CKA_HASH_OF_SUBJECT_PUBLIC_KEY 0x0000008AUL
    564 #define CKA_HASH_OF_ISSUER_PUBLIC_KEY 0x0000008BUL
    565 
    566 /* new for v3.1 */
    567 #define CKA_NAME_HASH_ALGORITHM 0x0000008cUL
    568 
    569 #define CKA_CHECK_VALUE 0x00000090UL
    570 
    571 #define CKA_KEY_TYPE 0x00000100UL
    572 #define CKA_SUBJECT 0x00000101UL
    573 #define CKA_ID 0x00000102UL
    574 #define CKA_SENSITIVE 0x00000103UL
    575 #define CKA_ENCRYPT 0x00000104UL
    576 #define CKA_DECRYPT 0x00000105UL
    577 #define CKA_WRAP 0x00000106UL
    578 #define CKA_UNWRAP 0x00000107UL
    579 #define CKA_SIGN 0x00000108UL
    580 #define CKA_SIGN_RECOVER 0x00000109UL
    581 #define CKA_VERIFY 0x0000010AUL
    582 #define CKA_VERIFY_RECOVER 0x0000010BUL
    583 #define CKA_DERIVE 0x0000010CUL
    584 #define CKA_START_DATE 0x00000110UL
    585 #define CKA_END_DATE 0x00000111UL
    586 #define CKA_MODULUS 0x00000120UL
    587 #define CKA_MODULUS_BITS 0x00000121UL
    588 #define CKA_PUBLIC_EXPONENT 0x00000122UL
    589 #define CKA_PRIVATE_EXPONENT 0x00000123UL
    590 #define CKA_PRIME_1 0x00000124UL
    591 #define CKA_PRIME_2 0x00000125UL
    592 #define CKA_EXPONENT_1 0x00000126UL
    593 #define CKA_EXPONENT_2 0x00000127UL
    594 #define CKA_COEFFICIENT 0x00000128UL
    595 /* CKA_PUBLIC_KEY_INFO is new for v2.40 */
    596 #define CKA_PUBLIC_KEY_INFO 0x00000129UL
    597 #define CKA_PRIME 0x00000130UL
    598 #define CKA_SUBPRIME 0x00000131UL
    599 #define CKA_BASE 0x00000132UL
    600 
    601 /* CKA_PRIME_BITS and CKA_SUB_PRIME_BITS are new for v2.11 */
    602 #define CKA_PRIME_BITS 0x00000133UL
    603 #define CKA_SUBPRIME_BITS 0x00000134UL
    604 #define CKA_SUB_PRIME_BITS CKA_SUBPRIME_BITS
    605 /* (To retain backwards-compatibility) */
    606 
    607 #define CKA_VALUE_BITS 0x00000160UL
    608 #define CKA_VALUE_LEN 0x00000161UL
    609 
    610 /* CKA_EXTRACTABLE, CKA_LOCAL, CKA_NEVER_EXTRACTABLE,
    611 * CKA_ALWAYS_SENSITIVE, CKA_MODIFIABLE, CKA_ECDSA_PARAMS,
    612 * and CKA_EC_POINT are new for v2.0 */
    613 #define CKA_EXTRACTABLE 0x00000162UL
    614 #define CKA_LOCAL 0x00000163UL
    615 #define CKA_NEVER_EXTRACTABLE 0x00000164UL
    616 #define CKA_ALWAYS_SENSITIVE 0x00000165UL
    617 
    618 /* CKA_KEY_GEN_MECHANISM is new for v2.11 */
    619 #define CKA_KEY_GEN_MECHANISM 0x00000166UL
    620 
    621 #define CKA_MODIFIABLE 0x00000170UL
    622 
    623 /* New for 2.40 */
    624 #define CKA_COPYABLE 0x00000171UL
    625 #define CKA_DESTROYABLE 0x00000172UL
    626 
    627 /* CKA_ECDSA_PARAMS is deprecated in v2.11,
    628 * CKA_EC_PARAMS is preferred. */
    629 #define CKA_ECDSA_PARAMS 0x00000180UL
    630 #define CKA_EC_PARAMS 0x00000180UL
    631 
    632 #define CKA_EC_POINT 0x00000181UL
    633 
    634 /* CKA_SECONDARY_AUTH, CKA_AUTH_PIN_FLAGS,
    635 * are new for v2.10. Deprecated in v2.11 and onwards. */
    636 #define CKA_SECONDARY_AUTH 0x00000200UL
    637 #define CKA_AUTH_PIN_FLAGS 0x00000201UL
    638 
    639 /* CKA_ALWAYS_AUTHENTICATE ...
    640 * CKA_UNWRAP_TEMPLATE are new for v2.20 */
    641 #define CKA_ALWAYS_AUTHENTICATE 0x00000202UL
    642 
    643 #define CKA_WRAP_WITH_TRUSTED 0x00000210UL
    644 #define CKA_WRAP_TEMPLATE (CKF_ARRAY_ATTRIBUTE | 0x00000211UL)
    645 #define CKA_UNWRAP_TEMPLATE (CKF_ARRAY_ATTRIBUTE | 0x00000212UL)
    646 
    647 /* new for 2.40 */
    648 #define CKA_DERIVE_TEMPLATE (CKF_ARRAY_ATTRIBUTE | 0x00000213UL)
    649 #define CKA_OTP_FORMAT 0x00000220UL
    650 #define CKA_OTP_LENGTH 0x00000221UL
    651 #define CKA_OTP_TIME_INTERVAL 0x00000222UL
    652 #define CKA_OTP_USER_FRIENDLY_MODE 0x00000223UL
    653 #define CKA_OTP_CHALLENGE_REQUIREMENT 0x00000224UL
    654 #define CKA_OTP_TIME_REQUIREMENT 0x00000225UL
    655 #define CKA_OTP_COUNTER_REQUIREMENT 0x00000226UL
    656 #define CKA_OTP_PIN_REQUIREMENT 0x00000227UL
    657 #define CKA_OTP_COUNTER 0x0000022EUL
    658 #define CKA_OTP_TIME 0x0000022FUL
    659 #define CKA_OTP_USER_IDENTIFIER 0x0000022AUL
    660 #define CKA_OTP_SERVICE_IDENTIFIER 0x0000022BUL
    661 #define CKA_OTP_SERVICE_LOGO 0x0000022CUL
    662 #define CKA_OTP_SERVICE_LOGO_TYPE 0x0000022DUL
    663 #define CKA_GOSTR3410_PARAMS 0x00000250UL
    664 #define CKA_GOSTR3411_PARAMS 0x00000251UL
    665 #define CKA_GOST28147_PARAMS 0x00000252UL
    666 
    667 /* CKA_HW_FEATURE_TYPE, CKA_RESET_ON_INIT, and CKA_HAS_RESET
    668 * are new for v2.10 */
    669 #define CKA_HW_FEATURE_TYPE 0x00000300UL
    670 #define CKA_RESET_ON_INIT 0x00000301UL
    671 #define CKA_HAS_RESET 0x00000302UL
    672 
    673 /* The following attributes are new for v2.20 */
    674 #define CKA_PIXEL_X 0x00000400UL
    675 #define CKA_PIXEL_Y 0x00000401UL
    676 #define CKA_RESOLUTION 0x00000402UL
    677 #define CKA_CHAR_ROWS 0x00000403UL
    678 #define CKA_CHAR_COLUMNS 0x00000404UL
    679 #define CKA_COLOR 0x00000405UL
    680 #define CKA_BITS_PER_PIXEL 0x00000406UL
    681 #define CKA_CHAR_SETS 0x00000480UL
    682 #define CKA_ENCODING_METHODS 0x00000481UL
    683 #define CKA_MIME_TYPES 0x00000482UL
    684 #define CKA_MECHANISM_TYPE 0x00000500UL
    685 #define CKA_REQUIRED_CMS_ATTRIBUTES 0x00000501UL
    686 #define CKA_DEFAULT_CMS_ATTRIBUTES 0x00000502UL
    687 #define CKA_SUPPORTED_CMS_ATTRIBUTES 0x00000503UL
    688 #define CKA_ALLOWED_MECHANISMS (CKF_ARRAY_ATTRIBUTE | 0x00000600UL)
    689 
    690 /* new for v3.0 */
    691 #define CKA_PROFILE_ID 0x00000601UL
    692 #define CKA_X2RATCHET_BAG 0x00000602UL
    693 #define CKA_X2RATCHET_BAGSIZE 0x00000603UL
    694 #define CKA_X2RATCHET_BOBS1STMSG 0x00000604UL
    695 #define CKA_X2RATCHET_CKR 0x00000605UL
    696 #define CKA_X2RATCHET_CKS 0x00000606UL
    697 #define CKA_X2RATCHET_DHP 0x00000607UL
    698 #define CKA_X2RATCHET_DHR 0x00000608UL
    699 #define CKA_X2RATCHET_DHS 0x00000609UL
    700 #define CKA_X2RATCHET_HKR 0x0000060aUL
    701 #define CKA_X2RATCHET_HKS 0x0000060bUL
    702 #define CKA_X2RATCHET_ISALICE 0x0000060cUL
    703 #define CKA_X2RATCHET_NHKR 0x0000060dUL
    704 #define CKA_X2RATCHET_NHKS 0x0000060eUL
    705 #define CKA_X2RATCHET_NR 0x0000060fUL
    706 #define CKA_X2RATCHET_NS 0x00000610UL
    707 #define CKA_X2RATCHET_PNS 0x00000611UL
    708 #define CKA_X2RATCHET_RK 0x00000612UL
    709 
    710 /* new for v3.1 */
    711 #define CKA_HSS_LEVELS 0x00000617UL
    712 #define CKA_HSS_LMS_TYPE 0x00000618UL
    713 #define CKA_HSS_LMOTS_TYPE 0x00000619UL
    714 #define CKA_HSS_LMS_TYPES 0x0000061aUL
    715 #define CKA_HSS_LMOTS_TYPES 0x0000061bUL
    716 #define CKA_HSS_KEYS_REMAINING 0x0000061cUL
    717 
    718 /* new for v3.2 */
    719 #define CKA_PARAMETER_SET 0x0000061dUL
    720 #define CKA_OBJECT_VALIDATION_FLAGS 0x0000061eUL
    721 #define CKA_VALIDATION_TYPE 0x0000061fUL
    722 #define CKA_VALIDATION_VERSION 0x00000620UL
    723 #define CKA_VALIDATION_LEVEL 0x00000621UL
    724 #define CKA_VALIDATION_MODULE_ID 0x00000622UL
    725 #define CKA_VALIDATION_FLAG 0x00000623UL
    726 #define CKA_VALIDATION_AUTHORITY_TYPE 0x00000624UL
    727 #define CKA_VALIDATION_COUNTRY 0x00000625UL
    728 #define CKA_VALIDATION_CERTIFICATE_IDENTIFIER 0x00000626UL
    729 #define CKA_VALIDATION_CERTIFICATE_URI 0x00000627UL
    730 #define CKA_VALIDATION_PROFILE 0x00000629UL
    731 #define CKA_VALIDATION_VENDOR_URI 0x00000628UL
    732 #define CKA_ENCAPSULATE_TEMPLATE 0x0000062aUL
    733 #define CKA_DECAPSULATE_TEMPLATE 0x0000062bUL
    734 /* some trust atributes collide with the NSS vendor
    735 * specific names. Separate those trust
    736 * attributes into _NSS_ and _PKCS_ versions
    737 * pkcs11n.h has a define, NSS_USE_STANDARD_TRUST
    738 * to select which values CKA_TRUST_xxxx takes
    739 * on. Old applications can use the headers
    740 * normally, new applications can set
    741 * NSS_USE_STANDARD_TRUST to get the standard
    742 * values. */
    743 #define CKA_PKCS_TRUST_SERVER_AUTH 0x0000062cUL
    744 #define CKA_PKCS_TRUST_CLIENT_AUTH 0x0000062dUL
    745 #define CKA_PKCS_TRUST_CODE_SIGNING 0x0000062eUL
    746 #define CKA_PKCS_TRUST_EMAIL_PROTECTION 0x0000062fUL
    747 #define CKA_TRUST_IPSEC_IKE 0x00000630UL
    748 #define CKA_PKCS_TRUST_TIME_STAMPING 0x00000631UL
    749 #define CKA_PKCS_TRUST_OCSP_SIGNING 0x00000632UL
    750 #define CKA_ENCAPSULATE 0x00000633UL
    751 #define CKA_DECAPSULATE 0x00000634UL
    752 #define CKA_HASH_OF_CERTIFICATE 0x00000635UL
    753 #define CKA_PUBLIC_CRC64_VALUE 0x00000636UL
    754 #define CKA_SEED 0x00000637UL
    755 
    756 #define CKA_VENDOR_DEFINED 0x80000000UL
    757 
    758 /* CK_ATTRIBUTE is a structure that includes the type, length
    759 * and value of an attribute */
    760 typedef struct CK_ATTRIBUTE {
    761    CK_ATTRIBUTE_TYPE type;
    762    CK_VOID_PTR pValue;
    763    /* ulValueLen went from CK_USHORT to CK_ULONG for v2.0 */
    764    CK_ULONG ulValueLen; /* in bytes */
    765 } CK_ATTRIBUTE;
    766 
    767 typedef CK_ATTRIBUTE CK_PTR CK_ATTRIBUTE_PTR;
    768 
    769 /* CK_DATE is a structure that defines a date */
    770 typedef struct CK_DATE {
    771    CK_CHAR year[4];  /* the year ("1900" - "9999") */
    772    CK_CHAR month[2]; /* the month ("01" - "12") */
    773    CK_CHAR day[2];   /* the day   ("01" - "31") */
    774 } CK_DATE;
    775 
    776 /* CK_MECHANISM_TYPE is a value that identifies a mechanism
    777 * type */
    778 /* CK_MECHANISM_TYPE was changed from CK_USHORT to CK_ULONG for
    779 * v2.0 */
    780 typedef CK_ULONG CK_MECHANISM_TYPE;
    781 
    782 /* the following mechanism types are defined: */
    783 #define CKM_RSA_PKCS_KEY_PAIR_GEN 0x00000000UL
    784 #define CKM_RSA_PKCS 0x00000001UL
    785 #define CKM_RSA_9796 0x00000002UL
    786 #define CKM_RSA_X_509 0x00000003UL
    787 
    788 /* CKM_MD2_RSA_PKCS, CKM_MD5_RSA_PKCS, and CKM_SHA1_RSA_PKCS
    789 * are new for v2.0.  They are mechanisms which hash and sign */
    790 #define CKM_MD2_RSA_PKCS 0x00000004UL
    791 #define CKM_MD5_RSA_PKCS 0x00000005UL
    792 #define CKM_SHA1_RSA_PKCS 0x00000006UL
    793 
    794 /* CKM_RIPEMD128_RSA_PKCS, CKM_RIPEMD160_RSA_PKCS, and
    795 * CKM_RSA_PKCS_OAEP are new for v2.10 */
    796 #define CKM_RIPEMD128_RSA_PKCS 0x00000007UL
    797 #define CKM_RIPEMD160_RSA_PKCS 0x00000008UL
    798 #define CKM_RSA_PKCS_OAEP 0x00000009UL
    799 
    800 /* CKM_RSA_X9_31_KEY_PAIR_GEN, CKM_RSA_X9_31, CKM_SHA1_RSA_X9_31,
    801 * CKM_RSA_PKCS_PSS, and CKM_SHA1_RSA_PKCS_PSS are new for v2.11 */
    802 #define CKM_RSA_X9_31_KEY_PAIR_GEN 0x0000000AUL
    803 #define CKM_RSA_X9_31 0x0000000BUL
    804 #define CKM_SHA1_RSA_X9_31 0x0000000CUL
    805 #define CKM_RSA_PKCS_PSS 0x0000000DUL
    806 #define CKM_SHA1_RSA_PKCS_PSS 0x0000000EUL
    807 
    808 /* new for v3.2 */
    809 #define CKM_ML_KEM_KEY_PAIR_GEN 0x0000000fUL
    810 
    811 #define CKM_DSA_KEY_PAIR_GEN 0x00000010UL
    812 #define CKM_DSA 0x00000011UL
    813 #define CKM_DSA_SHA1 0x00000012UL
    814 
    815 /* new for v2.40 */
    816 #define CKM_DSA_SHA224 0x00000013UL
    817 #define CKM_DSA_SHA256 0x00000014UL
    818 #define CKM_DSA_SHA384 0x00000015UL
    819 #define CKM_DSA_SHA512 0x00000016UL
    820 
    821 /* new for v3.2 */
    822 #define CKM_ML_KEM 0x00000017UL
    823 
    824 #define CKM_DSA_SHA3_224 0x00000018UL
    825 #define CKM_DSA_SHA3_256 0x00000019UL
    826 #define CKM_DSA_SHA3_384 0x0000001AUL
    827 #define CKM_DSA_SHA3_512 0x0000001BUL
    828 
    829 /* new for v3.2 */
    830 #define CKM_ML_DSA_KEY_PAIR_GEN 0x0000001cUL
    831 #define CKM_ML_DSA 0x0000001dUL
    832 #define CKM_HASH_ML_DSA 0x0000001fUL
    833 
    834 #define CKM_DH_PKCS_KEY_PAIR_GEN 0x00000020UL
    835 #define CKM_DH_PKCS_DERIVE 0x00000021UL
    836 
    837 /* new for v3.2 */
    838 #define CKM_HASH_ML_DSA_SHA224 0x00000023UL
    839 #define CKM_HASH_ML_DSA_SHA256 0x00000024UL
    840 #define CKM_HASH_ML_DSA_SHA384 0x00000025UL
    841 #define CKM_HASH_ML_DSA_SHA3_224 0x00000027UL
    842 #define CKM_HASH_ML_DSA_SHA3_256 0x00000028UL
    843 #define CKM_HASH_ML_DSA_SHA3_384 0x00000029UL
    844 #define CKM_HASH_ML_DSA_SHA3_512 0x0000002aUL
    845 #define CKM_HASH_ML_DSA_SHA512 0x00000026UL
    846 #define CKM_HASH_ML_DSA_SHAKE128 0x0000002bUL
    847 #define CKM_HASH_ML_DSA_SHAKE256 0x0000002cUL
    848 #define CKM_SLH_DSA_KEY_PAIR_GEN 0x0000002dUL
    849 #define CKM_SLH_DSA 0x0000002eUL
    850 
    851 /* CKM_X9_42_DH_KEY_PAIR_GEN, CKM_X9_42_DH_DERIVE,
    852 * CKM_X9_42_DH_HYBRID_DERIVE, and CKM_X9_42_MQV_DERIVE are new for
    853 * v2.11 */
    854 #define CKM_X9_42_DH_KEY_PAIR_GEN 0x00000030UL
    855 #define CKM_X9_42_DH_DERIVE 0x00000031UL
    856 #define CKM_X9_42_DH_HYBRID_DERIVE 0x00000032UL
    857 #define CKM_X9_42_MQV_DERIVE 0x00000033UL
    858 
    859 /* new for v3.2 */
    860 #define CKM_HASH_SLH_DSA 0x00000034UL
    861 #define CKM_HASH_SLH_DSA_SHA224 0x00000036UL
    862 #define CKM_HASH_SLH_DSA_SHA256 0x00000037UL
    863 #define CKM_HASH_SLH_DSA_SHA384 0x00000038UL
    864 #define CKM_HASH_SLH_DSA_SHA3_224 0x0000003aUL
    865 #define CKM_HASH_SLH_DSA_SHA3_256 0x0000003bUL
    866 #define CKM_HASH_SLH_DSA_SHA3_384 0x0000003cUL
    867 #define CKM_HASH_SLH_DSA_SHA3_512 0x0000003dUL
    868 #define CKM_HASH_SLH_DSA_SHA512 0x00000039UL
    869 #define CKM_HASH_SLH_DSA_SHAKE128 0x0000003eUL
    870 #define CKM_HASH_SLH_DSA_SHAKE256 0x0000003fUL
    871 
    872 /* CKM_SHA256/384/512 are new for v2.20 */
    873 #define CKM_SHA256_RSA_PKCS 0x00000040UL
    874 #define CKM_SHA384_RSA_PKCS 0x00000041UL
    875 #define CKM_SHA512_RSA_PKCS 0x00000042UL
    876 #define CKM_SHA256_RSA_PKCS_PSS 0x00000043UL
    877 #define CKM_SHA384_RSA_PKCS_PSS 0x00000044UL
    878 #define CKM_SHA512_RSA_PKCS_PSS 0x00000045UL
    879 
    880 /* CKM_SHA224 new for v2.20 amendment 3 */
    881 #define CKM_SHA224_RSA_PKCS 0x00000046UL
    882 #define CKM_SHA224_RSA_PKCS_PSS 0x00000047UL
    883 
    884 /* new for v2.40 */
    885 #define CKM_SHA512_224 0x00000048UL
    886 #define CKM_SHA512_224_HMAC 0x00000049UL
    887 #define CKM_SHA512_224_HMAC_GENERAL 0x0000004AUL
    888 #define CKM_SHA512_224_KEY_DERIVATION 0x0000004BUL
    889 #define CKM_SHA512_256 0x0000004CUL
    890 #define CKM_SHA512_256_HMAC 0x0000004DUL
    891 #define CKM_SHA512_256_HMAC_GENERAL 0x0000004EUL
    892 #define CKM_SHA512_256_KEY_DERIVATION 0x0000004FUL
    893 #define CKM_SHA512_T 0x00000050UL
    894 #define CKM_SHA512_T_HMAC 0x00000051UL
    895 #define CKM_SHA512_T_HMAC_GENERAL 0x00000052UL
    896 #define CKM_SHA512_T_KEY_DERIVATION 0x00000053UL
    897 
    898 /* new for v3.2 */
    899 #define CKM_TLS12_EXTENDED_MASTER_KEY_DERIVE 0x00000056UL
    900 #define CKM_TLS12_EXTENDED_MASTER_KEY_DERIVE_DH 0x00000057UL
    901 
    902 #define CKM_SHA3_256_RSA_PKCS 0x00000060UL
    903 #define CKM_SHA3_384_RSA_PKCS 0x00000061UL
    904 #define CKM_SHA3_512_RSA_PKCS 0x00000062UL
    905 #define CKM_SHA3_256_RSA_PKCS_PSS 0x00000063UL
    906 #define CKM_SHA3_384_RSA_PKCS_PSS 0x00000064UL
    907 #define CKM_SHA3_512_RSA_PKCS_PSS 0x00000065UL
    908 #define CKM_SHA3_224_RSA_PKCS 0x00000066UL
    909 #define CKM_SHA3_224_RSA_PKCS_PSS 0x00000067UL
    910 
    911 #define CKM_RC2_KEY_GEN 0x00000100UL
    912 #define CKM_RC2_ECB 0x00000101UL
    913 #define CKM_RC2_CBC 0x00000102UL
    914 #define CKM_RC2_MAC 0x00000103UL
    915 
    916 /* CKM_RC2_MAC_GENERAL and CKM_RC2_CBC_PAD are new for v2.0 */
    917 #define CKM_RC2_MAC_GENERAL 0x00000104UL
    918 #define CKM_RC2_CBC_PAD 0x00000105UL
    919 
    920 #define CKM_RC4_KEY_GEN 0x00000110UL
    921 #define CKM_RC4 0x00000111UL
    922 #define CKM_DES_KEY_GEN 0x00000120UL
    923 #define CKM_DES_ECB 0x00000121UL
    924 #define CKM_DES_CBC 0x00000122UL
    925 #define CKM_DES_MAC 0x00000123UL
    926 
    927 /* CKM_DES_MAC_GENERAL and CKM_DES_CBC_PAD are new for v2.0 */
    928 #define CKM_DES_MAC_GENERAL 0x00000124UL
    929 #define CKM_DES_CBC_PAD 0x00000125UL
    930 
    931 #define CKM_DES2_KEY_GEN 0x00000130UL
    932 #define CKM_DES3_KEY_GEN 0x00000131UL
    933 #define CKM_DES3_ECB 0x00000132UL
    934 #define CKM_DES3_CBC 0x00000133UL
    935 #define CKM_DES3_MAC 0x00000134UL
    936 
    937 /* CKM_DES3_MAC_GENERAL, CKM_DES3_CBC_PAD, CKM_CDMF_KEY_GEN,
    938 * CKM_CDMF_ECB, CKM_CDMF_CBC, CKM_CDMF_MAC,
    939 * CKM_CDMF_MAC_GENERAL, and CKM_CDMF_CBC_PAD are new for v2.0 */
    940 #define CKM_DES3_MAC_GENERAL 0x00000135UL
    941 #define CKM_DES3_CBC_PAD 0x00000136UL
    942 #define CKM_CDMF_KEY_GEN 0x00000140UL
    943 #define CKM_CDMF_ECB 0x00000141UL
    944 #define CKM_CDMF_CBC 0x00000142UL
    945 #define CKM_CDMF_MAC 0x00000143UL
    946 #define CKM_CDMF_MAC_GENERAL 0x00000144UL
    947 #define CKM_CDMF_CBC_PAD 0x00000145UL
    948 
    949 /* the following four DES mechanisms are new for v2.20 */
    950 #define CKM_DES_OFB64 0x00000150UL
    951 #define CKM_DES_OFB8 0x00000151UL
    952 #define CKM_DES_CFB64 0x00000152UL
    953 #define CKM_DES_CFB8 0x00000153UL
    954 
    955 #define CKM_MD2 0x00000200UL
    956 
    957 /* CKM_MD2_HMAC and CKM_MD2_HMAC_GENERAL are new for v2.0 */
    958 #define CKM_MD2_HMAC 0x00000201UL
    959 #define CKM_MD2_HMAC_GENERAL 0x00000202UL
    960 
    961 #define CKM_MD5 0x00000210UL
    962 
    963 /* CKM_MD5_HMAC and CKM_MD5_HMAC_GENERAL are new for v2.0 */
    964 #define CKM_MD5_HMAC 0x00000211UL
    965 #define CKM_MD5_HMAC_GENERAL 0x00000212UL
    966 
    967 #define CKM_SHA_1 0x00000220UL
    968 
    969 /* CKM_SHA_1_HMAC and CKM_SHA_1_HMAC_GENERAL are new for v2.0 */
    970 #define CKM_SHA_1_HMAC 0x00000221UL
    971 #define CKM_SHA_1_HMAC_GENERAL 0x00000222UL
    972 
    973 /* CKM_RIPEMD128, CKM_RIPEMD128_HMAC,
    974 * CKM_RIPEMD128_HMAC_GENERAL, CKM_RIPEMD160, CKM_RIPEMD160_HMAC,
    975 * and CKM_RIPEMD160_HMAC_GENERAL are new for v2.10 */
    976 #define CKM_RIPEMD128 0x00000230UL
    977 #define CKM_RIPEMD128_HMAC 0x00000231UL
    978 #define CKM_RIPEMD128_HMAC_GENERAL 0x00000232UL
    979 #define CKM_RIPEMD160 0x00000240UL
    980 #define CKM_RIPEMD160_HMAC 0x00000241UL
    981 #define CKM_RIPEMD160_HMAC_GENERAL 0x00000242UL
    982 
    983 /* CKM_SHA256/384/512 are new for v2.20 */
    984 #define CKM_SHA256 0x00000250UL
    985 #define CKM_SHA256_HMAC 0x00000251UL
    986 #define CKM_SHA256_HMAC_GENERAL 0x00000252UL
    987 #define CKM_SHA384 0x00000260UL
    988 #define CKM_SHA384_HMAC 0x00000261UL
    989 #define CKM_SHA384_HMAC_GENERAL 0x00000262UL
    990 #define CKM_SHA512 0x00000270UL
    991 #define CKM_SHA512_HMAC 0x00000271UL
    992 #define CKM_SHA512_HMAC_GENERAL 0x00000272UL
    993 
    994 /* CKM_SHA224 new for v2.20 amendment 3 */
    995 #define CKM_SHA224 0x00000255UL
    996 #define CKM_SHA224_HMAC 0x00000256UL
    997 #define CKM_SHA224_HMAC_GENERAL 0x00000257UL
    998 
    999 /* new for v2.40 */
   1000 #define CKM_SECURID_KEY_GEN 0x00000280UL
   1001 #define CKM_SECURID 0x00000282UL
   1002 #define CKM_HOTP_KEY_GEN 0x00000290UL
   1003 #define CKM_HOTP 0x00000291UL
   1004 #define CKM_ACTI 0x000002A0UL
   1005 #define CKM_ACTI_KEY_GEN 0x000002A1UL
   1006 #define CKM_SHA3_256 0x000002B0UL
   1007 #define CKM_SHA3_256_HMAC 0x000002B1UL
   1008 #define CKM_SHA3_256_HMAC_GENERAL 0x000002B2UL
   1009 #define CKM_SHA3_256_KEY_GEN 0x000002B3UL
   1010 #define CKM_SHA3_224 0x000002B5UL
   1011 #define CKM_SHA3_224_HMAC 0x000002B6UL
   1012 #define CKM_SHA3_224_HMAC_GENERAL 0x000002B7UL
   1013 #define CKM_SHA3_224_KEY_GEN 0x000002B8UL
   1014 #define CKM_SHA3_384 0x000002C0UL
   1015 #define CKM_SHA3_384_HMAC 0x000002C1UL
   1016 #define CKM_SHA3_384_HMAC_GENERAL 0x000002C2UL
   1017 #define CKM_SHA3_384_KEY_GEN 0x000002C3UL
   1018 #define CKM_SHA3_512 0x000002D0UL
   1019 #define CKM_SHA3_512_HMAC 0x000002D1UL
   1020 #define CKM_SHA3_512_HMAC_GENERAL 0x000002D2UL
   1021 #define CKM_SHA3_512_KEY_GEN 0x000002D3UL
   1022 
   1023 /* All of the following mechanisms are new for v2.0 */
   1024 /* Note that CAST128 and CAST5 are the same algorithm */
   1025 #define CKM_CAST_KEY_GEN 0x00000300UL
   1026 #define CKM_CAST_ECB 0x00000301UL
   1027 #define CKM_CAST_CBC 0x00000302UL
   1028 #define CKM_CAST_MAC 0x00000303UL
   1029 #define CKM_CAST_MAC_GENERAL 0x00000304UL
   1030 #define CKM_CAST_CBC_PAD 0x00000305UL
   1031 #define CKM_CAST3_KEY_GEN 0x00000310UL
   1032 #define CKM_CAST3_ECB 0x00000311UL
   1033 #define CKM_CAST3_CBC 0x00000312UL
   1034 #define CKM_CAST3_MAC 0x00000313UL
   1035 #define CKM_CAST3_MAC_GENERAL 0x00000314UL
   1036 #define CKM_CAST3_CBC_PAD 0x00000315UL
   1037 #define CKM_CAST5_KEY_GEN 0x00000320UL
   1038 #define CKM_CAST128_KEY_GEN 0x00000320UL
   1039 #define CKM_CAST5_ECB 0x00000321UL
   1040 #define CKM_CAST128_ECB 0x00000321UL
   1041 #define CKM_CAST5_CBC 0x00000322UL
   1042 #define CKM_CAST128_CBC 0x00000322UL
   1043 #define CKM_CAST5_MAC 0x00000323UL
   1044 #define CKM_CAST128_MAC 0x00000323UL
   1045 #define CKM_CAST5_MAC_GENERAL 0x00000324UL
   1046 #define CKM_CAST128_MAC_GENERAL 0x00000324UL
   1047 #define CKM_CAST5_CBC_PAD 0x00000325UL
   1048 #define CKM_CAST128_CBC_PAD 0x00000325UL
   1049 #define CKM_RC5_KEY_GEN 0x00000330UL
   1050 #define CKM_RC5_ECB 0x00000331UL
   1051 #define CKM_RC5_CBC 0x00000332UL
   1052 #define CKM_RC5_MAC 0x00000333UL
   1053 #define CKM_RC5_MAC_GENERAL 0x00000334UL
   1054 #define CKM_RC5_CBC_PAD 0x00000335UL
   1055 #define CKM_IDEA_KEY_GEN 0x00000340UL
   1056 #define CKM_IDEA_ECB 0x00000341UL
   1057 #define CKM_IDEA_CBC 0x00000342UL
   1058 #define CKM_IDEA_MAC 0x00000343UL
   1059 #define CKM_IDEA_MAC_GENERAL 0x00000344UL
   1060 #define CKM_IDEA_CBC_PAD 0x00000345UL
   1061 #define CKM_GENERIC_SECRET_KEY_GEN 0x00000350UL
   1062 #define CKM_CONCATENATE_BASE_AND_KEY 0x00000360UL
   1063 #define CKM_CONCATENATE_BASE_AND_DATA 0x00000362UL
   1064 #define CKM_CONCATENATE_DATA_AND_BASE 0x00000363UL
   1065 #define CKM_XOR_BASE_AND_DATA 0x00000364UL
   1066 #define CKM_EXTRACT_KEY_FROM_KEY 0x00000365UL
   1067 #define CKM_SSL3_PRE_MASTER_KEY_GEN 0x00000370UL
   1068 #define CKM_SSL3_MASTER_KEY_DERIVE 0x00000371UL
   1069 #define CKM_SSL3_KEY_AND_MAC_DERIVE 0x00000372UL
   1070 
   1071 /* CKM_SSL3_MASTER_KEY_DERIVE_DH, CKM_TLS_PRE_MASTER_KEY_GEN,
   1072 * CKM_TLS_MASTER_KEY_DERIVE, CKM_TLS_KEY_AND_MAC_DERIVE, and
   1073 * CKM_TLS_MASTER_KEY_DERIVE_DH are new for v2.11 */
   1074 #define CKM_SSL3_MASTER_KEY_DERIVE_DH 0x00000373UL
   1075 #define CKM_TLS_PRE_MASTER_KEY_GEN 0x00000374UL
   1076 #define CKM_TLS_MASTER_KEY_DERIVE 0x00000375UL
   1077 #define CKM_TLS_KEY_AND_MAC_DERIVE 0x00000376UL
   1078 #define CKM_TLS_MASTER_KEY_DERIVE_DH 0x00000377UL
   1079 
   1080 /* CKM_TLS_PRF is new for v2.20 */
   1081 #define CKM_TLS_PRF 0x00000378UL
   1082 
   1083 #define CKM_SSL3_MD5_MAC 0x00000380UL
   1084 #define CKM_SSL3_SHA1_MAC 0x00000381UL
   1085 #define CKM_MD5_KEY_DERIVATION 0x00000390UL
   1086 #define CKM_MD2_KEY_DERIVATION 0x00000391UL
   1087 #define CKM_SHA1_KEY_DERIVATION 0x00000392UL
   1088 
   1089 /* CKM_SHA256/384/512 are new for v2.20 */
   1090 #define CKM_SHA256_KEY_DERIVATION 0x00000393UL
   1091 #define CKM_SHA384_KEY_DERIVATION 0x00000394UL
   1092 #define CKM_SHA512_KEY_DERIVATION 0x00000395UL
   1093 
   1094 /* CKM_SHA224 new for v2.20 amendment 3 */
   1095 #define CKM_SHA224_KEY_DERIVATION 0x00000396UL
   1096 
   1097 /* new for v2.40 */
   1098 #define CKM_SHA3_256_KEY_DERIVATION 0x00000397UL
   1099 #define CKM_SHA3_224_KEY_DERIVATION 0x00000398UL
   1100 #define CKM_SHA3_384_KEY_DERIVATION 0x00000399UL
   1101 #define CKM_SHA3_512_KEY_DERIVATION 0x0000039AUL
   1102 #define CKM_SHAKE_128_KEY_DERIVATION 0x0000039BUL
   1103 #define CKM_SHAKE_256_KEY_DERIVATION 0x0000039CUL
   1104 
   1105 #define CKM_PBE_MD2_DES_CBC 0x000003A0UL
   1106 #define CKM_PBE_MD5_DES_CBC 0x000003A1UL
   1107 #define CKM_PBE_MD5_CAST_CBC 0x000003A2UL
   1108 #define CKM_PBE_MD5_CAST3_CBC 0x000003A3UL
   1109 #define CKM_PBE_MD5_CAST5_CBC 0x000003A4UL
   1110 #define CKM_PBE_MD5_CAST128_CBC 0x000003A4UL
   1111 #define CKM_PBE_SHA1_CAST5_CBC 0x000003A5UL
   1112 #define CKM_PBE_SHA1_CAST128_CBC 0x000003A5UL
   1113 #define CKM_PBE_SHA1_RC4_128 0x000003A6UL
   1114 #define CKM_PBE_SHA1_RC4_40 0x000003A7UL
   1115 #define CKM_PBE_SHA1_DES3_EDE_CBC 0x000003A8UL
   1116 #define CKM_PBE_SHA1_DES2_EDE_CBC 0x000003A9UL
   1117 #define CKM_PBE_SHA1_RC2_128_CBC 0x000003AAUL
   1118 #define CKM_PBE_SHA1_RC2_40_CBC 0x000003ABUL
   1119 
   1120 /* CKM_PKCS5_PBKD2 is new for v2.10 */
   1121 #define CKM_PKCS5_PBKD2 0x000003B0UL
   1122 
   1123 #define CKM_PBA_SHA1_WITH_SHA1_HMAC 0x000003C0UL
   1124 
   1125 /* WTLS mechanisms are new for v2.20 */
   1126 #define CKM_WTLS_PRE_MASTER_KEY_GEN 0x000003D0UL
   1127 #define CKM_WTLS_MASTER_KEY_DERIVE 0x000003D1UL
   1128 #define CKM_WTLS_MASTER_KEY_DERIVE_DH_ECC 0x000003D2UL
   1129 #define CKM_WTLS_PRF 0x000003D3UL
   1130 #define CKM_WTLS_SERVER_KEY_AND_MAC_DERIVE 0x000003D4UL
   1131 #define CKM_WTLS_CLIENT_KEY_AND_MAC_DERIVE 0x000003D5UL
   1132 
   1133 /* TLS 1.2 mechanisms are new for v2.40 */
   1134 #define CKM_TLS12_MASTER_KEY_DERIVE 0x000003E0UL
   1135 #define CKM_TLS12_KEY_AND_MAC_DERIVE 0x000003E1UL
   1136 #define CKM_TLS12_MASTER_KEY_DERIVE_DH 0x000003E2UL
   1137 #define CKM_TLS12_KEY_SAFE_DERIVE 0x000003E3UL
   1138 #define CKM_TLS12_MAC 0x000003D8UL
   1139 #define CKM_TLS12_KDF 0x000003D9UL
   1140 #define CKM_TLS_MAC 0x000003E4UL
   1141 #define CKM_TLS_KDF 0x000003E5UL
   1142 
   1143 #define CKM_KEY_WRAP_LYNKS 0x00000400UL
   1144 #define CKM_KEY_WRAP_SET_OAEP 0x00000401UL
   1145 
   1146 /* CKM_CMS_SIG is new for v2.20 */
   1147 #define CKM_CMS_SIG 0x00000500UL
   1148 
   1149 /* new for 2.40 */
   1150 #define CKM_KIP_DERIVE 0x00000510UL
   1151 #define CKM_KIP_WRAP 0x00000511UL
   1152 #define CKM_KIP_MAC 0x00000512UL
   1153 
   1154 /* Fortezza mechanisms */
   1155 #define CKM_SKIPJACK_KEY_GEN 0x00001000UL
   1156 #define CKM_SKIPJACK_ECB64 0x00001001UL
   1157 #define CKM_SKIPJACK_CBC64 0x00001002UL
   1158 #define CKM_SKIPJACK_OFB64 0x00001003UL
   1159 #define CKM_SKIPJACK_CFB64 0x00001004UL
   1160 #define CKM_SKIPJACK_CFB32 0x00001005UL
   1161 #define CKM_SKIPJACK_CFB16 0x00001006UL
   1162 #define CKM_SKIPJACK_CFB8 0x00001007UL
   1163 #define CKM_SKIPJACK_WRAP 0x00001008UL
   1164 #define CKM_SKIPJACK_PRIVATE_WRAP 0x00001009UL
   1165 #define CKM_SKIPJACK_RELAYX 0x0000100aUL
   1166 #define CKM_KEA_KEY_PAIR_GEN 0x00001010UL
   1167 #define CKM_KEA_KEY_DERIVE 0x00001011UL
   1168 #define CKM_FORTEZZA_TIMESTAMP 0x00001020UL
   1169 #define CKM_BATON_KEY_GEN 0x00001030UL
   1170 #define CKM_BATON_ECB128 0x00001031UL
   1171 #define CKM_BATON_ECB96 0x00001032UL
   1172 #define CKM_BATON_CBC128 0x00001033UL
   1173 #define CKM_BATON_COUNTER 0x00001034UL
   1174 #define CKM_BATON_SHUFFLE 0x00001035UL
   1175 #define CKM_BATON_WRAP 0x00001036UL
   1176 
   1177 /* CKM_ECDSA_KEY_PAIR_GEN is deprecated in v2.11,
   1178 * CKM_EC_KEY_PAIR_GEN is preferred */
   1179 #define CKM_ECDSA_KEY_PAIR_GEN 0x00001040UL
   1180 #define CKM_EC_KEY_PAIR_GEN 0x00001040UL
   1181 
   1182 #define CKM_ECDSA 0x00001041UL
   1183 #define CKM_ECDSA_SHA1 0x00001042UL
   1184 
   1185 /* new for v2.40 */
   1186 #define CKM_ECDSA_SHA224 0x00001043UL
   1187 #define CKM_ECDSA_SHA256 0x00001044UL
   1188 #define CKM_ECDSA_SHA384 0x00001045UL
   1189 #define CKM_ECDSA_SHA512 0x00001046UL
   1190 #define CKM_EC_KEY_PAIR_GEN_W_EXTRA_BITS 0x0000140BUL
   1191 
   1192 /* CKM_ECDH1_DERIVE, CKM_ECDH1_COFACTOR_DERIVE, and CKM_ECMQV_DERIVE
   1193 * are new for v2.11 */
   1194 #define CKM_ECDH1_DERIVE 0x00001050UL
   1195 #define CKM_ECDH1_COFACTOR_DERIVE 0x00001051UL
   1196 #define CKM_ECMQV_DERIVE 0x00001052UL
   1197 
   1198 /* new for v2.40 */
   1199 #define CKM_ECDH_AES_KEY_WRAP 0x00001053UL
   1200 #define CKM_RSA_AES_KEY_WRAP 0x00001054UL
   1201 
   1202 #define CKM_JUNIPER_KEY_GEN 0x00001060UL
   1203 #define CKM_JUNIPER_ECB128 0x00001061UL
   1204 #define CKM_JUNIPER_CBC128 0x00001062UL
   1205 #define CKM_JUNIPER_COUNTER 0x00001063UL
   1206 #define CKM_JUNIPER_SHUFFLE 0x00001064UL
   1207 #define CKM_JUNIPER_WRAP 0x00001065UL
   1208 #define CKM_FASTHASH 0x00001070UL
   1209 
   1210 /* CKM_AES_KEY_GEN, CKM_AES_ECB, CKM_AES_CBC, CKM_AES_MAC,
   1211 * CKM_AES_MAC_GENERAL, CKM_AES_CBC_PAD, CKM_DSA_PARAMETER_GEN,
   1212 * CKM_DH_PKCS_PARAMETER_GEN, and CKM_X9_42_DH_PARAMETER_GEN are
   1213 * new for v2.11 */
   1214 #define CKM_AES_KEY_GEN 0x00001080UL
   1215 #define CKM_AES_ECB 0x00001081UL
   1216 #define CKM_AES_CBC 0x00001082UL
   1217 #define CKM_AES_MAC 0x00001083UL
   1218 #define CKM_AES_MAC_GENERAL 0x00001084UL
   1219 #define CKM_AES_CBC_PAD 0x00001085UL
   1220 /* new for v2.20 amendment 3 */
   1221 #define CKM_AES_CTR 0x00001086UL
   1222 /* new for v2.30 */
   1223 #define CKM_AES_GCM 0x00001087UL
   1224 #define CKM_AES_CCM 0x00001088UL
   1225 #define CKM_AES_CTS 0x00001089UL
   1226 /* AES-CMAC values copied from v2.40 errata 1 header file */
   1227 #define CKM_AES_CMAC 0x0000108AUL
   1228 #define CKM_AES_CMAC_GENERAL 0x0000108BUL
   1229 #define CKM_AES_XCBC_MAC 0x0000108CUL
   1230 #define CKM_AES_XCBC_MAC_96 0x0000108DUL
   1231 
   1232 /* BlowFish and TwoFish are new for v2.20 */
   1233 #define CKM_BLOWFISH_KEY_GEN 0x00001090UL
   1234 #define CKM_BLOWFISH_CBC 0x00001091UL
   1235 #define CKM_TWOFISH_KEY_GEN 0x00001092UL
   1236 #define CKM_TWOFISH_CBC 0x00001093UL
   1237 
   1238 /* new for v2.40 */
   1239 #define CKM_BLOWFISH_CBC_PAD 0x00001094UL
   1240 #define CKM_TWOFISH_CBC_PAD 0x00001095UL
   1241 
   1242 /* Camellia is proposed for v2.20 Amendment 3 */
   1243 #define CKM_CAMELLIA_KEY_GEN 0x00000550UL
   1244 #define CKM_CAMELLIA_ECB 0x00000551UL
   1245 #define CKM_CAMELLIA_CBC 0x00000552UL
   1246 #define CKM_CAMELLIA_MAC 0x00000553UL
   1247 #define CKM_CAMELLIA_MAC_GENERAL 0x00000554UL
   1248 #define CKM_CAMELLIA_CBC_PAD 0x00000555UL
   1249 #define CKM_CAMELLIA_ECB_ENCRYPT_DATA 0x00000556UL
   1250 #define CKM_CAMELLIA_CBC_ENCRYPT_DATA 0x00000557UL
   1251 #define CKM_CAMELLIA_CTR 0x00000558UL
   1252 
   1253 /* new for v2.40 */
   1254 #define CKM_ARIA_KEY_GEN 0x00000560UL
   1255 #define CKM_ARIA_ECB 0x00000561UL
   1256 #define CKM_ARIA_CBC 0x00000562UL
   1257 #define CKM_ARIA_MAC 0x00000563UL
   1258 #define CKM_ARIA_MAC_GENERAL 0x00000564UL
   1259 #define CKM_ARIA_CBC_PAD 0x00000565UL
   1260 #define CKM_ARIA_ECB_ENCRYPT_DATA 0x00000566UL
   1261 #define CKM_ARIA_CBC_ENCRYPT_DATA 0x00000567UL
   1262 
   1263 #define CKM_SEED_KEY_GEN 0x00000650UL
   1264 #define CKM_SEED_ECB 0x00000651UL
   1265 #define CKM_SEED_CBC 0x00000652UL
   1266 #define CKM_SEED_MAC 0x00000653UL
   1267 #define CKM_SEED_MAC_GENERAL 0x00000654UL
   1268 #define CKM_SEED_CBC_PAD 0x00000655UL
   1269 #define CKM_SEED_ECB_ENCRYPT_DATA 0x00000656UL
   1270 #define CKM_SEED_CBC_ENCRYPT_DATA 0x00000657UL
   1271 
   1272 /* new for v3.1 */
   1273 #define CKM_KEA_DERIVE 0x00001012UL
   1274 
   1275 /* new for v2.40 */
   1276 #define CKM_ECDSA_SHA3_224 0x00001047UL
   1277 #define CKM_ECDSA_SHA3_256 0x00001048UL
   1278 #define CKM_ECDSA_SHA3_384 0x00001049UL
   1279 #define CKM_ECDSA_SHA3_512 0x0000104aUL
   1280 #define CKM_EC_EDWARDS_KEY_PAIR_GEN 0x00001055UL
   1281 #define CKM_EC_MONTGOMERY_KEY_PAIR_GEN 0x00001056UL
   1282 #define CKM_EDDSA 0x00001057UL
   1283 
   1284 /* new for v3.1 */
   1285 #define CKM_AES_XTS 0x00001071UL
   1286 #define CKM_AES_XTS_KEY_GEN 0x00001072UL
   1287 #define CKM_AES_GMAC 0x0000108eUL
   1288 
   1289 /* CKM_xxx_ENCRYPT_DATA mechanisms are new for v2.20 */
   1290 #define CKM_DES_ECB_ENCRYPT_DATA 0x00001100UL
   1291 #define CKM_DES_CBC_ENCRYPT_DATA 0x00001101UL
   1292 #define CKM_DES3_ECB_ENCRYPT_DATA 0x00001102UL
   1293 #define CKM_DES3_CBC_ENCRYPT_DATA 0x00001103UL
   1294 #define CKM_AES_ECB_ENCRYPT_DATA 0x00001104UL
   1295 #define CKM_AES_CBC_ENCRYPT_DATA 0x00001105UL
   1296 
   1297 #define CKM_GOSTR3410_KEY_PAIR_GEN 0x00001200UL
   1298 #define CKM_GOSTR3410 0x00001201UL
   1299 #define CKM_GOSTR3410_WITH_GOSTR3411 0x00001202UL
   1300 #define CKM_GOSTR3410_KEY_WRAP 0x00001203UL
   1301 #define CKM_GOSTR3410_DERIVE 0x00001204UL
   1302 #define CKM_GOSTR3411 0x00001210UL
   1303 #define CKM_GOSTR3411_HMAC 0x00001211UL
   1304 #define CKM_GOST28147_KEY_GEN 0x00001220UL
   1305 #define CKM_GOST28147_ECB 0x00001221UL
   1306 #define CKM_GOST28147 0x00001222UL
   1307 #define CKM_GOST28147_MAC 0x00001223UL
   1308 #define CKM_GOST28147_KEY_WRAP 0x00001224UL
   1309 
   1310 /* new for v2.40 */
   1311 #define CKM_CHACHA20_KEY_GEN 0x00001225UL
   1312 #define CKM_CHACHA20 0x00001226UL
   1313 #define CKM_POLY1305_KEY_GEN 0x00001227UL
   1314 #define CKM_POLY1305 0x00001228UL
   1315 
   1316 /* new for v3.1 */
   1317 #define CKM_DES3_CMAC 0x00000138UL
   1318 #define CKM_DES3_CMAC_GENERAL 0x00000137UL
   1319 
   1320 #define CKM_DSA_PARAMETER_GEN 0x00002000UL
   1321 #define CKM_DH_PKCS_PARAMETER_GEN 0x00002001UL
   1322 #define CKM_X9_42_DH_PARAMETER_GEN 0x00002002UL
   1323 
   1324 /* new for v2.40 */
   1325 #define CKM_DSA_PROBABILISTIC_PARAMETER_GEN 0x00002003UL
   1326 #define CKM_DSA_PROBABLISTIC_PARAMETER_GEN 0x00002003UL
   1327 #define CKM_DSA_SHAWE_TAYLOR_PARAMETER_GEN 0x00002004UL
   1328 #define CKM_DSA_FIPS_G_GEN 0x00002005UL
   1329 
   1330 /* new for v3.1 */
   1331 #define CKM_AES_OFB 0x00002104UL
   1332 #define CKM_AES_CFB64 0x00002105UL
   1333 #define CKM_AES_CFB8 0x00002106UL
   1334 #define CKM_AES_CFB128 0x00002107UL
   1335 #define CKM_AES_KEY_WRAP_PKCS7 0x0000210cUL
   1336 
   1337 /* new for v2.40 */
   1338 #define CKM_AES_CFB1 0x00002108UL
   1339 #define CKM_AES_KEY_WRAP 0x00002109UL
   1340 #define CKM_AES_KEY_WRAP_PAD 0x0000210AUL
   1341 #define CKM_AES_KEY_WRAP_KWP 0x0000210BUL
   1342 
   1343 /* new for v3.1 */
   1344 #define CKM_SHA3_256_KEY_DERIVE 0x00000397UL
   1345 #define CKM_SHA3_224_KEY_DERIVE 0x00000398UL
   1346 #define CKM_SHA3_384_KEY_DERIVE 0x00000399UL
   1347 #define CKM_SHA3_512_KEY_DERIVE 0x0000039aUL
   1348 #define CKM_SHAKE_128_KEY_DERIVE 0x0000039bUL
   1349 #define CKM_SHAKE_256_KEY_DERIVE 0x0000039cUL
   1350 
   1351 /* CKM_SP800_108_xxx_KDF are new for v3.0 */
   1352 #define CKM_SP800_108_COUNTER_KDF 0x000003acUL
   1353 #define CKM_SP800_108_FEEDBACK_KDF 0x000003adUL
   1354 #define CKM_SP800_108_DOUBLE_PIPELINE_KDF 0x000003aeUL
   1355 
   1356 /* new for v3.1 */
   1357 #define CKM_TLS10_MAC_SERVER 0x000003d6UL
   1358 #define CKM_TLS10_MAC_CLIENT 0x000003d7UL
   1359 
   1360 /* new for v2.4 */
   1361 #define CKM_RSA_PKCS_TPM_1_1 0x00004001UL
   1362 #define CKM_RSA_PKCS_OAEP_TPM_1_1 0x00004002UL
   1363 #define CKM_SHA_1_KEY_GEN 0x00004003UL
   1364 #define CKM_SHA224_KEY_GEN 0x00004004UL
   1365 #define CKM_SHA256_KEY_GEN 0x00004005UL
   1366 #define CKM_SHA384_KEY_GEN 0x00004006UL
   1367 #define CKM_SHA512_KEY_GEN 0x00004007UL
   1368 #define CKM_SHA512_224_KEY_GEN 0x00004008UL
   1369 #define CKM_SHA512_256_KEY_GEN 0x00004009UL
   1370 #define CKM_SHA512_T_KEY_GEN 0x0000400aUL
   1371 
   1372 /* new for v3.0 */
   1373 #define CKM_NULL 0x0000400bUL
   1374 #define CKM_BLAKE2B_160 0x0000400cUL
   1375 #define CKM_BLAKE2B_160_HMAC 0x0000400dUL
   1376 #define CKM_BLAKE2B_160_HMAC_GENERAL 0x0000400eUL
   1377 #define CKM_BLAKE2B_160_KEY_DERIVE 0x0000400fUL
   1378 #define CKM_BLAKE2B_160_KEY_GEN 0x00004010UL
   1379 #define CKM_BLAKE2B_256 0x00004011UL
   1380 #define CKM_BLAKE2B_256_HMAC 0x00004012UL
   1381 #define CKM_BLAKE2B_256_HMAC_GENERAL 0x00004013UL
   1382 #define CKM_BLAKE2B_256_KEY_DERIVE 0x00004014UL
   1383 #define CKM_BLAKE2B_256_KEY_GEN 0x00004015UL
   1384 #define CKM_BLAKE2B_384 0x00004016UL
   1385 #define CKM_BLAKE2B_384_HMAC 0x00004017UL
   1386 #define CKM_BLAKE2B_384_HMAC_GENERAL 0x00004018UL
   1387 #define CKM_BLAKE2B_384_KEY_DERIVE 0x00004019UL
   1388 #define CKM_BLAKE2B_384_KEY_GEN 0x0000401aUL
   1389 #define CKM_BLAKE2B_512 0x0000401bUL
   1390 #define CKM_BLAKE2B_512_HMAC 0x0000401cUL
   1391 #define CKM_BLAKE2B_512_HMAC_GENERAL 0x0000401dUL
   1392 #define CKM_BLAKE2B_512_KEY_DERIVE 0x0000401eUL
   1393 #define CKM_BLAKE2B_512_KEY_GEN 0x0000401fUL
   1394 #define CKM_SALSA20 0x00004020UL
   1395 #define CKM_CHACHA20_POLY1305 0x00004021UL
   1396 #define CKM_SALSA20_POLY1305 0x00004022UL
   1397 #define CKM_X3DH_INITIALIZE 0x00004023UL
   1398 #define CKM_X3DH_RESPOND 0x00004024UL
   1399 #define CKM_X2RATCHET_INITIALIZE 0x00004025UL
   1400 #define CKM_X2RATCHET_RESPOND 0x00004026UL
   1401 #define CKM_X2RATCHET_ENCRYPT 0x00004027UL
   1402 #define CKM_X2RATCHET_DECRYPT 0x00004028UL
   1403 #define CKM_XEDDSA 0x00004029UL
   1404 #define CKM_HKDF_DERIVE 0x0000402aUL
   1405 #define CKM_HKDF_DATA 0x0000402bUL
   1406 #define CKM_HKDF_KEY_GEN 0x0000402cUL
   1407 #define CKM_SALSA20_KEY_GEN 0x0000402dUL
   1408 
   1409 /* new for v3.1 */
   1410 #define CKM_IKE2_PRF_PLUS_DERIVE 0x0000402eUL
   1411 #define CKM_IKE_PRF_DERIVE 0x0000402fUL
   1412 #define CKM_IKE1_PRF_DERIVE 0x00004030UL
   1413 #define CKM_IKE1_EXTENDED_DERIVE 0x00004031UL
   1414 #define CKM_HSS_KEY_PAIR_GEN 0x00004032UL
   1415 #define CKM_HSS 0x00004033UL
   1416 
   1417 /* new for v3.2 */
   1418 #define CKM_XMSS_KEY_PAIR_GEN 0x00004034UL
   1419 #define CKM_XMSSMT_KEY_PAIR_GEN 0x00004035UL
   1420 #define CKM_XMSS 0x00004036UL
   1421 #define CKM_XMSSMT 0x00004037UL
   1422 #define CKM_ECDH_X_AES_KEY_WRAP 0x00004038UL
   1423 #define CKM_ECDH_COF_AES_KEY_WRAP 0x00004039UL
   1424 #define CKM_PUB_KEY_FROM_PRIV_KEY 0x0000403aUL
   1425 
   1426 #define CKM_VENDOR_DEFINED 0x80000000UL
   1427 
   1428 typedef CK_MECHANISM_TYPE CK_PTR CK_MECHANISM_TYPE_PTR;
   1429 
   1430 /* CK_MECHANISM is a structure that specifies a particular
   1431 * mechanism  */
   1432 typedef struct CK_MECHANISM {
   1433    CK_MECHANISM_TYPE mechanism;
   1434    CK_VOID_PTR pParameter;
   1435 
   1436    /* ulParameterLen was changed from CK_USHORT to CK_ULONG for
   1437     * v2.0 */
   1438    CK_ULONG ulParameterLen; /* in bytes */
   1439 } CK_MECHANISM;
   1440 
   1441 typedef CK_MECHANISM CK_PTR CK_MECHANISM_PTR;
   1442 
   1443 /* CK_MECHANISM_INFO provides information about a particular
   1444 * mechanism */
   1445 typedef struct CK_MECHANISM_INFO {
   1446    CK_ULONG ulMinKeySize;
   1447    CK_ULONG ulMaxKeySize;
   1448    CK_FLAGS flags;
   1449 } CK_MECHANISM_INFO;
   1450 
   1451 /* The flags are defined as follows:
   1452 *      Bit Flag               Mask        Meaning */
   1453 #define CKF_HW 0x00000001UL /* performed by HW */
   1454 
   1455 /* Message interface Flags, new for v3.0 */
   1456 #define CKF_MESSAGE_ENCRYPT 0x00000002UL
   1457 #define CKF_MESSAGE_DECRYPT 0x00000004UL
   1458 #define CKF_MESSAGE_SIGN 0x00000008UL
   1459 #define CKF_MESSAGE_VERIFY 0x00000010UL
   1460 #define CKF_MULTI_MESSAGE 0x00000020UL
   1461 
   1462 /* FindObjects (not for CK_MECHANISM_INFO, but for C_CancelSession) v3.0 */
   1463 #define CKF_FIND_OBJECTS 0x00000040UL
   1464 
   1465 /* The flags CKF_ENCRYPT, CKF_DECRYPT, CKF_DIGEST, CKF_SIGN,
   1466 * CKG_SIGN_RECOVER, CKF_VERIFY, CKF_VERIFY_RECOVER,
   1467 * CKF_GENERATE, CKF_GENERATE_KEY_PAIR, CKF_WRAP, CKF_UNWRAP,
   1468 * and CKF_DERIVE are new for v2.0.  They specify whether or not
   1469 * a mechanism can be used for a particular task */
   1470 #define CKF_ENCRYPT 0x00000100UL
   1471 #define CKF_DECRYPT 0x00000200UL
   1472 #define CKF_DIGEST 0x00000400UL
   1473 #define CKF_SIGN 0x00000800UL
   1474 #define CKF_SIGN_RECOVER 0x00001000UL
   1475 #define CKF_VERIFY 0x00002000
   1476 #define CKF_VERIFY_RECOVER 0x00004000UL
   1477 #define CKF_GENERATE 0x00008000UL
   1478 #define CKF_GENERATE_KEY_PAIR 0x00010000UL
   1479 #define CKF_WRAP 0x00020000UL
   1480 #define CKF_UNWRAP 0x00040000UL
   1481 #define CKF_DERIVE 0x00080000UL
   1482 
   1483 /* CKF_EC_F_P, CKF_EC_F_2M, CKF_EC_ECPARAMETERS, CKF_EC_NAMEDCURVE,
   1484 * CKF_EC_UNCOMPRESS, and CKF_EC_COMPRESS are new for v2.11. They
   1485 * describe a token's EC capabilities not available in mechanism
   1486 * information. */
   1487 #define CKF_EC_F_P 0x00100000UL
   1488 #define CKF_EC_F_2M 0x00200000UL
   1489 #define CKF_EC_ECPARAMETERS 0x00400000UL
   1490 #define CKF_EC_OID 0x00800000UL
   1491 #define CKF_EC_NAMEDCURVE CKF_EC_OID /* renamed in v3.0 */
   1492 #define CKF_EC_UNCOMPRESS 0x01000000UL
   1493 #define CKF_EC_COMPRESS 0x02000000UL
   1494 #define CKF_EC_CURVENAME 0x04000000UL
   1495 
   1496 /* new for v3.2 */
   1497 #define CKF_DECAPSULATE 0x20000000UL
   1498 #define CKF_ENCAPSULATE 0x10000000UL
   1499 
   1500 #define CKF_EXTENSION 0x80000000UL /* FALSE for this version */
   1501 
   1502 typedef CK_MECHANISM_INFO CK_PTR CK_MECHANISM_INFO_PTR;
   1503 
   1504 /* CK_RV is a value that identifies the return value of a
   1505 * PKCS #11 function */
   1506 /* CK_RV was changed from CK_USHORT to CK_ULONG for v2.0 */
   1507 typedef CK_ULONG CK_RV;
   1508 
   1509 #define CKR_OK 0x00000000UL
   1510 #define CKR_CANCEL 0x00000001UL
   1511 #define CKR_HOST_MEMORY 0x00000002UL
   1512 #define CKR_SLOT_ID_INVALID 0x00000003UL
   1513 
   1514 /* CKR_FLAGS_INVALID was removed for v2.0 */
   1515 
   1516 /* CKR_GENERAL_ERROR and CKR_FUNCTION_FAILED are new for v2.0 */
   1517 #define CKR_GENERAL_ERROR 0x00000005UL
   1518 #define CKR_FUNCTION_FAILED 0x00000006UL
   1519 
   1520 /* CKR_ARGUMENTS_BAD, CKR_NO_EVENT, CKR_NEED_TO_CREATE_THREADS,
   1521 * and CKR_CANT_LOCK are new for v2.01 */
   1522 #define CKR_ARGUMENTS_BAD 0x00000007UL
   1523 #define CKR_NO_EVENT 0x00000008UL
   1524 #define CKR_NEED_TO_CREATE_THREADS 0x00000009UL
   1525 #define CKR_CANT_LOCK 0x0000000AUL
   1526 
   1527 #define CKR_ATTRIBUTE_READ_ONLY 0x00000010UL
   1528 #define CKR_ATTRIBUTE_SENSITIVE 0x00000011UL
   1529 #define CKR_ATTRIBUTE_TYPE_INVALID 0x00000012UL
   1530 #define CKR_ATTRIBUTE_VALUE_INVALID 0x00000013UL
   1531 
   1532 /* new for v3.0 */
   1533 #define CKR_ACTION_PROHIBITED 0x0000001BUL
   1534 
   1535 #define CKR_DATA_INVALID 0x00000020UL
   1536 #define CKR_DATA_LEN_RANGE 0x00000021UL
   1537 #define CKR_DEVICE_ERROR 0x00000030UL
   1538 #define CKR_DEVICE_MEMORY 0x00000031UL
   1539 #define CKR_DEVICE_REMOVED 0x00000032UL
   1540 #define CKR_ENCRYPTED_DATA_INVALID 0x00000040UL
   1541 #define CKR_ENCRYPTED_DATA_LEN_RANGE 0x00000041UL
   1542 #define CKR_AEAD_DECRYPT_FAILED 0x00000042UL
   1543 #define CKR_FUNCTION_CANCELED 0x00000050UL
   1544 #define CKR_FUNCTION_NOT_PARALLEL 0x00000051UL
   1545 
   1546 /* CKR_FUNCTION_NOT_SUPPORTED is new for v2.0 */
   1547 #define CKR_FUNCTION_NOT_SUPPORTED 0x00000054UL
   1548 
   1549 #define CKR_KEY_HANDLE_INVALID 0x00000060UL
   1550 
   1551 /* CKR_KEY_SENSITIVE was removed for v2.0 */
   1552 
   1553 #define CKR_KEY_SIZE_RANGE 0x00000062UL
   1554 #define CKR_KEY_TYPE_INCONSISTENT 0x00000063UL
   1555 
   1556 /* CKR_KEY_NOT_NEEDED, CKR_KEY_CHANGED, CKR_KEY_NEEDED,
   1557 * CKR_KEY_INDIGESTIBLE, CKR_KEY_FUNCTION_NOT_PERMITTED,
   1558 * CKR_KEY_NOT_WRAPPABLE, and CKR_KEY_UNEXTRACTABLE are new for
   1559 * v2.0 */
   1560 #define CKR_KEY_NOT_NEEDED 0x00000064UL
   1561 #define CKR_KEY_CHANGED 0x00000065UL
   1562 #define CKR_KEY_NEEDED 0x00000066UL
   1563 #define CKR_KEY_INDIGESTIBLE 0x00000067UL
   1564 #define CKR_KEY_FUNCTION_NOT_PERMITTED 0x00000068UL
   1565 #define CKR_KEY_NOT_WRAPPABLE 0x00000069UL
   1566 #define CKR_KEY_UNEXTRACTABLE 0x0000006AUL
   1567 
   1568 #define CKR_MECHANISM_INVALID 0x00000070UL
   1569 #define CKR_MECHANISM_PARAM_INVALID 0x00000071UL
   1570 
   1571 /* CKR_OBJECT_CLASS_INCONSISTENT and CKR_OBJECT_CLASS_INVALID
   1572 * were removed for v2.0 */
   1573 #define CKR_OBJECT_HANDLE_INVALID 0x00000082UL
   1574 #define CKR_OPERATION_ACTIVE 0x00000090UL
   1575 #define CKR_OPERATION_NOT_INITIALIZED 0x00000091UL
   1576 #define CKR_PIN_INCORRECT 0x000000A0UL
   1577 #define CKR_PIN_INVALID 0x000000A1UL
   1578 #define CKR_PIN_LEN_RANGE 0x000000A2UL
   1579 
   1580 /* CKR_PIN_EXPIRED and CKR_PIN_LOCKED are new for v2.0 */
   1581 #define CKR_PIN_EXPIRED 0x000000A3UL
   1582 #define CKR_PIN_LOCKED 0x000000A4UL
   1583 
   1584 #define CKR_SESSION_CLOSED 0x000000B0UL
   1585 #define CKR_SESSION_COUNT 0x000000B1UL
   1586 #define CKR_SESSION_HANDLE_INVALID 0x000000B3UL
   1587 #define CKR_SESSION_PARALLEL_NOT_SUPPORTED 0x000000B4UL
   1588 #define CKR_SESSION_READ_ONLY 0x000000B5UL
   1589 #define CKR_SESSION_EXISTS 0x000000B6UL
   1590 
   1591 /* CKR_SESSION_READ_ONLY_EXISTS and
   1592 * CKR_SESSION_READ_WRITE_SO_EXISTS are new for v2.0 */
   1593 #define CKR_SESSION_READ_ONLY_EXISTS 0x000000B7UL
   1594 #define CKR_SESSION_READ_WRITE_SO_EXISTS 0x000000B8UL
   1595 
   1596 #define CKR_SIGNATURE_INVALID 0x000000C0UL
   1597 #define CKR_SIGNATURE_LEN_RANGE 0x000000C1UL
   1598 #define CKR_TEMPLATE_INCOMPLETE 0x000000D0UL
   1599 #define CKR_TEMPLATE_INCONSISTENT 0x000000D1UL
   1600 #define CKR_TOKEN_NOT_PRESENT 0x000000E0UL
   1601 #define CKR_TOKEN_NOT_RECOGNIZED 0x000000E1UL
   1602 #define CKR_TOKEN_WRITE_PROTECTED 0x000000E2UL
   1603 #define CKR_UNWRAPPING_KEY_HANDLE_INVALID 0x000000F0UL
   1604 #define CKR_UNWRAPPING_KEY_SIZE_RANGE 0x000000F1UL
   1605 #define CKR_UNWRAPPING_KEY_TYPE_INCONSISTENT 0x000000F2UL
   1606 #define CKR_USER_ALREADY_LOGGED_IN 0x00000100UL
   1607 #define CKR_USER_NOT_LOGGED_IN 0x00000101UL
   1608 #define CKR_USER_PIN_NOT_INITIALIZED 0x00000102UL
   1609 #define CKR_USER_TYPE_INVALID 0x00000103UL
   1610 
   1611 #define CKR_KEY_EXHAUSTED 0x00000203UL
   1612 
   1613 /* CKR_USER_ANOTHER_ALREADY_LOGGED_IN and CKR_USER_TOO_MANY_TYPES
   1614 * are new to v2.01 */
   1615 #define CKR_USER_ANOTHER_ALREADY_LOGGED_IN 0x00000104UL
   1616 #define CKR_USER_TOO_MANY_TYPES 0x00000105UL
   1617 
   1618 #define CKR_WRAPPED_KEY_INVALID 0x00000110UL
   1619 #define CKR_WRAPPED_KEY_LEN_RANGE 0x00000112UL
   1620 #define CKR_WRAPPING_KEY_HANDLE_INVALID 0x00000113UL
   1621 #define CKR_WRAPPING_KEY_SIZE_RANGE 0x00000114UL
   1622 #define CKR_WRAPPING_KEY_TYPE_INCONSISTENT 0x00000115UL
   1623 #define CKR_RANDOM_SEED_NOT_SUPPORTED 0x00000120UL
   1624 
   1625 /* This is new to v2.0 */
   1626 #define CKR_RANDOM_NO_RNG 0x00000121UL
   1627 
   1628 /* This is new to v2.11 */
   1629 #define CKR_DOMAIN_PARAMS_INVALID 0x00000130UL
   1630 
   1631 /* This is new to v2.40 */
   1632 #define CKR_CURVE_NOT_SUPPORTED 0x00000140UL
   1633 
   1634 /* These are new to v2.0 */
   1635 #define CKR_BUFFER_TOO_SMALL 0x00000150UL
   1636 #define CKR_SAVED_STATE_INVALID 0x00000160UL
   1637 #define CKR_INFORMATION_SENSITIVE 0x00000170UL
   1638 #define CKR_STATE_UNSAVEABLE 0x00000180UL
   1639 
   1640 /* These are new to v2.01 */
   1641 #define CKR_CRYPTOKI_NOT_INITIALIZED 0x00000190UL
   1642 #define CKR_CRYPTOKI_ALREADY_INITIALIZED 0x00000191UL
   1643 #define CKR_MUTEX_BAD 0x000001A0UL
   1644 #define CKR_MUTEX_NOT_LOCKED 0x000001A1UL
   1645 
   1646 /* These are new to v2.40 */
   1647 #define CKR_NEW_PIN_MODE 0x000001B0UL
   1648 #define CKR_NEXT_OTP 0x000001B1UL
   1649 #define CKR_EXCEEDED_MAX_ITERATIONS 0x000001B5UL
   1650 #define CKR_FIPS_SELF_TEST_FAILED 0x000001B6UL
   1651 #define CKR_LIBRARY_LOAD_FAILED 0x000001B7UL
   1652 #define CKR_PIN_TOO_WEAK 0x000001B8UL
   1653 #define CKR_PUBLIC_KEY_INVALID 0x000001B9UL
   1654 
   1655 /* This is new to v2.20 */
   1656 #define CKR_FUNCTION_REJECTED 0x00000200UL
   1657 
   1658 /* This is new to v3.0 */
   1659 #define CKR_TOKEN_RESOURCE_EXCEEDED 0x00000201UL
   1660 #define CKR_OPERATION_CANCEL_FAILED 0x00000202UL
   1661 
   1662 /* new for v3.2 */
   1663 #define CKR_PENDING 0x00000204UL
   1664 #define CKR_SESSION_ASYNC_NOT_SUPPORTED 0x00000205UL
   1665 #define CKR_SEED_RANDOM_REQUIRED 0x00000206UL
   1666 #define CKR_OPERATION_NOT_VALIDATED 0x00000207UL
   1667 #define CKR_TOKEN_NOT_INITIALIZED 0x00000208UL
   1668 #define CKR_PARAMETER_SET_NOT_SUPPORTED 0x00000209UL
   1669 
   1670 #define CKR_VENDOR_DEFINED 0x80000000UL
   1671 
   1672 /* CK_NOTIFY is an application callback that processes events */
   1673 typedef CK_CALLBACK_FUNCTION(CK_RV, CK_NOTIFY)(
   1674    CK_SESSION_HANDLE hSession, /* the session's handle */
   1675    CK_NOTIFICATION event,
   1676    CK_VOID_PTR pApplication /* passed to C_OpenSession */
   1677 );
   1678 
   1679 /* CK_FUNCTION_LIST is a structure holding a PKCS #11 spec
   1680 * version and pointers of appropriate types to all the
   1681 * PKCS #11 functions */
   1682 /* CK_FUNCTION_LIST is new for v2.0 */
   1683 typedef struct CK_FUNCTION_LIST CK_FUNCTION_LIST;
   1684 
   1685 typedef CK_FUNCTION_LIST CK_PTR CK_FUNCTION_LIST_PTR;
   1686 
   1687 typedef CK_FUNCTION_LIST_PTR CK_PTR CK_FUNCTION_LIST_PTR_PTR;
   1688 
   1689 /* These are new for v3.0 */
   1690 typedef struct CK_FUNCTION_LIST_3_0 CK_FUNCTION_LIST_3_0;
   1691 typedef CK_FUNCTION_LIST_3_0 CK_PTR CK_FUNCTION_LIST_3_0_PTR;
   1692 typedef CK_FUNCTION_LIST_3_0_PTR CK_PTR CK_FUNCTION_LIST_3_0_PTR_PTR;
   1693 
   1694 typedef struct CK_FUNCTION_LIST_3_2 CK_FUNCTION_LIST_3_2;
   1695 typedef CK_FUNCTION_LIST_3_2 CK_PTR CK_FUNCTION_LIST_3_2_PTR;
   1696 typedef CK_FUNCTION_LIST_3_2_PTR CK_PTR CK_FUNCTION_LIST_3_2_PTR_PTR;
   1697 
   1698 /* Interfaces are new in v3.0 */
   1699 typedef struct CK_INTERFACE {
   1700    CK_CHAR *pInterfaceName;
   1701    CK_VOID_PTR pFunctionList;
   1702    CK_FLAGS flags;
   1703 } CK_INTERFACE;
   1704 
   1705 typedef CK_INTERFACE CK_PTR CK_INTERFACE_PTR;
   1706 typedef CK_INTERFACE_PTR CK_PTR CK_INTERFACE_PTR_PTR;
   1707 
   1708 #define CKF_END_OF_MESSAGE 0x00000001UL
   1709 #define CKF_INTERFACE_FORK_SAFE 0x00000001UL
   1710 
   1711 /* CK_CREATEMUTEX is an application callback for creating a
   1712 * mutex object */
   1713 typedef CK_CALLBACK_FUNCTION(CK_RV, CK_CREATEMUTEX)(
   1714    CK_VOID_PTR_PTR ppMutex /* location to receive ptr to mutex */
   1715 );
   1716 
   1717 /* CK_DESTROYMUTEX is an application callback for destroying a
   1718 * mutex object */
   1719 typedef CK_CALLBACK_FUNCTION(CK_RV, CK_DESTROYMUTEX)(
   1720    CK_VOID_PTR pMutex /* pointer to mutex */
   1721 );
   1722 
   1723 /* CK_LOCKMUTEX is an application callback for locking a mutex */
   1724 typedef CK_CALLBACK_FUNCTION(CK_RV, CK_LOCKMUTEX)(
   1725    CK_VOID_PTR pMutex /* pointer to mutex */
   1726 );
   1727 
   1728 /* CK_UNLOCKMUTEX is an application callback for unlocking a
   1729 * mutex */
   1730 typedef CK_CALLBACK_FUNCTION(CK_RV, CK_UNLOCKMUTEX)(
   1731    CK_VOID_PTR pMutex /* pointer to mutex */
   1732 );
   1733 
   1734 /* CK_C_INITIALIZE_ARGS provides the optional arguments to
   1735 * C_Initialize */
   1736 typedef struct CK_C_INITIALIZE_ARGS {
   1737    CK_CREATEMUTEX CreateMutex;
   1738    CK_DESTROYMUTEX DestroyMutex;
   1739    CK_LOCKMUTEX LockMutex;
   1740    CK_UNLOCKMUTEX UnlockMutex;
   1741    CK_FLAGS flags;
   1742    /* The official PKCS #11 spec does not have a 'LibraryParameters' field, but
   1743     * a reserved field. NSS needs a way to pass instance-specific information
   1744     * to the library (like where to find its config files, etc). This
   1745     * information is usually provided by the installer and passed uninterpreted
   1746     * by NSS to the library, though NSS does know the specifics of the softoken
   1747     * version of this parameter. Most compliant PKCS#11 modules expect this
   1748     * parameter to be NULL, and will return CKR_ARGUMENTS_BAD from
   1749     * C_Initialize if Library parameters is supplied. */
   1750    CK_CHAR_PTR *LibraryParameters;
   1751    /* This field is only present if the LibraryParameters is not NULL. It must
   1752     * be NULL in all cases */
   1753    CK_VOID_PTR pReserved;
   1754 } CK_C_INITIALIZE_ARGS;
   1755 
   1756 /* flags: bit flags that provide capabilities of the slot
   1757 *      Bit Flag                           Mask       Meaning
   1758 */
   1759 #define CKF_LIBRARY_CANT_CREATE_OS_THREADS 0x00000001UL
   1760 #define CKF_OS_LOCKING_OK 0x00000002UL
   1761 
   1762 typedef CK_C_INITIALIZE_ARGS CK_PTR CK_C_INITIALIZE_ARGS_PTR;
   1763 
   1764 /* additional flags for parameters to functions */
   1765 
   1766 /* CKF_DONT_BLOCK is for the function C_WaitForSlotEvent */
   1767 #define CKF_DONT_BLOCK 1
   1768 
   1769 /* CK_RSA_PKCS_OAEP_MGF_TYPE is new for v2.10.
   1770 * CK_RSA_PKCS_OAEP_MGF_TYPE  is used to indicate the Message
   1771 * Generation Function (MGF) applied to a message block when
   1772 * formatting a message block for the PKCS #1 OAEP encryption
   1773 * scheme. */
   1774 typedef CK_ULONG CK_RSA_PKCS_MGF_TYPE;
   1775 
   1776 typedef CK_RSA_PKCS_MGF_TYPE CK_PTR CK_RSA_PKCS_MGF_TYPE_PTR;
   1777 
   1778 /* The following MGFs are defined */
   1779 /* CKG_MGF1_SHA256, CKG_MGF1_SHA384, and CKG_MGF1_SHA512
   1780 * are new for v2.20 */
   1781 #define CKG_MGF1_SHA1 0x00000001UL
   1782 #define CKG_MGF1_SHA256 0x00000002UL
   1783 #define CKG_MGF1_SHA384 0x00000003UL
   1784 #define CKG_MGF1_SHA512 0x00000004UL
   1785 
   1786 /* v2.20 amendment 3 */
   1787 #define CKG_MGF1_SHA224 0x00000005UL
   1788 
   1789 /* v2.40 */
   1790 #define CKG_MGF1_SHA3_224 0x00000006UL
   1791 #define CKG_MGF1_SHA3_256 0x00000007UL
   1792 #define CKG_MGF1_SHA3_384 0x00000008UL
   1793 #define CKG_MGF1_SHA3_512 0x00000009UL
   1794 
   1795 /* CK_RSA_PKCS_OAEP_SOURCE_TYPE is new for v2.10.
   1796 * CK_RSA_PKCS_OAEP_SOURCE_TYPE  is used to indicate the source
   1797 * of the encoding parameter when formatting a message block
   1798 * for the PKCS #1 OAEP encryption scheme. */
   1799 typedef CK_ULONG CK_RSA_PKCS_OAEP_SOURCE_TYPE;
   1800 
   1801 typedef CK_RSA_PKCS_OAEP_SOURCE_TYPE CK_PTR CK_RSA_PKCS_OAEP_SOURCE_TYPE_PTR;
   1802 
   1803 /* The following encoding parameter sources are defined */
   1804 #define CKZ_DATA_SPECIFIED 0x00000001UL
   1805 
   1806 /* CK_RSA_PKCS_OAEP_PARAMS is new for v2.10.
   1807 * CK_RSA_PKCS_OAEP_PARAMS provides the parameters to the
   1808 * CKM_RSA_PKCS_OAEP mechanism. */
   1809 typedef struct CK_RSA_PKCS_OAEP_PARAMS {
   1810    CK_MECHANISM_TYPE hashAlg;
   1811    CK_RSA_PKCS_MGF_TYPE mgf;
   1812    CK_RSA_PKCS_OAEP_SOURCE_TYPE source;
   1813    CK_VOID_PTR pSourceData;
   1814    CK_ULONG ulSourceDataLen;
   1815 } CK_RSA_PKCS_OAEP_PARAMS;
   1816 
   1817 typedef CK_RSA_PKCS_OAEP_PARAMS CK_PTR CK_RSA_PKCS_OAEP_PARAMS_PTR;
   1818 
   1819 /* CK_RSA_PKCS_PSS_PARAMS is new for v2.11.
   1820 * CK_RSA_PKCS_PSS_PARAMS provides the parameters to the
   1821 * CKM_RSA_PKCS_PSS mechanism(s). */
   1822 typedef struct CK_RSA_PKCS_PSS_PARAMS {
   1823    CK_MECHANISM_TYPE hashAlg;
   1824    CK_RSA_PKCS_MGF_TYPE mgf;
   1825    CK_ULONG sLen;
   1826 } CK_RSA_PKCS_PSS_PARAMS;
   1827 
   1828 typedef CK_RSA_PKCS_PSS_PARAMS CK_PTR CK_RSA_PKCS_PSS_PARAMS_PTR;
   1829 
   1830 /* CK_EC_KDF_TYPE is new for v2.11. */
   1831 typedef CK_ULONG CK_EC_KDF_TYPE;
   1832 typedef CK_EC_KDF_TYPE CK_PTR CK_EC_KDF_TYPE_PTR;
   1833 
   1834 /* The following EC Key Derivation Functions are defined */
   1835 #define CKD_NULL 0x00000001UL
   1836 #define CKD_SHA1_KDF 0x00000002UL
   1837 #define CKD_SHA224_KDF 0x00000005UL
   1838 #define CKD_SHA256_KDF 0x00000006UL
   1839 #define CKD_SHA384_KDF 0x00000007UL
   1840 #define CKD_SHA512_KDF 0x00000008UL
   1841 
   1842 /* new for v2.40 */
   1843 #define CKD_CPDIVERSIFY_KDF 0x00000009UL
   1844 #define CKD_SHA3_224_KDF 0x0000000AUL
   1845 #define CKD_SHA3_256_KDF 0x0000000BUL
   1846 #define CKD_SHA3_384_KDF 0x0000000CUL
   1847 #define CKD_SHA3_512_KDF 0x0000000DUL
   1848 
   1849 /* new for v3.0 */
   1850 #define CKD_SHA1_KDF_SP800 0x0000000EUL
   1851 #define CKD_SHA224_KDF_SP800 0x0000000FUL
   1852 #define CKD_SHA256_KDF_SP800 0x00000010UL
   1853 #define CKD_SHA384_KDF_SP800 0x00000011UL
   1854 #define CKD_SHA512_KDF_SP800 0x00000012UL
   1855 #define CKD_SHA3_224_KDF_SP800 0x00000013UL
   1856 #define CKD_SHA3_256_KDF_SP800 0x00000014UL
   1857 #define CKD_SHA3_384_KDF_SP800 0x00000015UL
   1858 #define CKD_SHA3_512_KDF_SP800 0x00000016UL
   1859 #define CKD_BLAKE2B_160_KDF 0x00000017UL
   1860 #define CKD_BLAKE2B_256_KDF 0x00000018UL
   1861 #define CKD_BLAKE2B_384_KDF 0x00000019UL
   1862 #define CKD_BLAKE2B_512_KDF 0x0000001aUL
   1863 
   1864 /* CK_ECDH1_DERIVE_PARAMS is new for v2.11.
   1865 * CK_ECDH1_DERIVE_PARAMS provides the parameters to the
   1866 * CKM_ECDH1_DERIVE and CKM_ECDH1_COFACTOR_DERIVE mechanisms,
   1867 * where each party contributes one key pair.
   1868 */
   1869 typedef struct CK_ECDH1_DERIVE_PARAMS {
   1870    CK_EC_KDF_TYPE kdf;
   1871    CK_ULONG ulSharedDataLen;
   1872    CK_BYTE_PTR pSharedData;
   1873    CK_ULONG ulPublicDataLen;
   1874    CK_BYTE_PTR pPublicData;
   1875 } CK_ECDH1_DERIVE_PARAMS;
   1876 
   1877 typedef CK_ECDH1_DERIVE_PARAMS CK_PTR CK_ECDH1_DERIVE_PARAMS_PTR;
   1878 
   1879 /* CK_ECDH2_DERIVE_PARAMS is new for v2.11.
   1880 * CK_ECDH2_DERIVE_PARAMS provides the parameters to the
   1881 * CKM_ECMQV_DERIVE mechanism, where each party contributes two key pairs. */
   1882 typedef struct CK_ECDH2_DERIVE_PARAMS {
   1883    CK_EC_KDF_TYPE kdf;
   1884    CK_ULONG ulSharedDataLen;
   1885    CK_BYTE_PTR pSharedData;
   1886    CK_ULONG ulPublicDataLen;
   1887    CK_BYTE_PTR pPublicData;
   1888    CK_ULONG ulPrivateDataLen;
   1889    CK_OBJECT_HANDLE hPrivateData;
   1890    CK_ULONG ulPublicDataLen2;
   1891    CK_BYTE_PTR pPublicData2;
   1892 } CK_ECDH2_DERIVE_PARAMS;
   1893 
   1894 typedef CK_ECDH2_DERIVE_PARAMS CK_PTR CK_ECDH2_DERIVE_PARAMS_PTR;
   1895 
   1896 typedef struct CK_ECMQV_DERIVE_PARAMS {
   1897    CK_EC_KDF_TYPE kdf;
   1898    CK_ULONG ulSharedDataLen;
   1899    CK_BYTE_PTR pSharedData;
   1900    CK_ULONG ulPublicDataLen;
   1901    CK_BYTE_PTR pPublicData;
   1902    CK_ULONG ulPrivateDataLen;
   1903    CK_OBJECT_HANDLE hPrivateData;
   1904    CK_ULONG ulPublicDataLen2;
   1905    CK_BYTE_PTR pPublicData2;
   1906    CK_OBJECT_HANDLE publicKey;
   1907 } CK_ECMQV_DERIVE_PARAMS;
   1908 
   1909 typedef CK_ECMQV_DERIVE_PARAMS CK_PTR CK_ECMQV_DERIVE_PARAMS_PTR;
   1910 
   1911 /* Typedefs and defines for the CKM_X9_42_DH_KEY_PAIR_GEN and the
   1912 * CKM_X9_42_DH_PARAMETER_GEN mechanisms (new for PKCS #11 v2.11) */
   1913 typedef CK_ULONG CK_X9_42_DH_KDF_TYPE;
   1914 typedef CK_X9_42_DH_KDF_TYPE CK_PTR CK_X9_42_DH_KDF_TYPE_PTR;
   1915 
   1916 /* The following X9.42 DH key derivation functions are defined
   1917   (besides CKD_NULL already defined : */
   1918 #define CKD_SHA1_KDF_ASN1 0x00000003UL
   1919 #define CKD_SHA1_KDF_CONCATENATE 0x00000004UL
   1920 
   1921 /* CK_X9_42_DH1_DERIVE_PARAMS is new for v2.11.
   1922 * CK_X9_42_DH1_DERIVE_PARAMS provides the parameters to the
   1923 * CKM_X9_42_DH_DERIVE key derivation mechanism, where each party
   1924 * contributes one key pair */
   1925 typedef struct CK_X9_42_DH1_DERIVE_PARAMS {
   1926    CK_X9_42_DH_KDF_TYPE kdf;
   1927    CK_ULONG ulOtherInfoLen;
   1928    CK_BYTE_PTR pOtherInfo;
   1929    CK_ULONG ulPublicDataLen;
   1930    CK_BYTE_PTR pPublicData;
   1931 } CK_X9_42_DH1_DERIVE_PARAMS;
   1932 
   1933 typedef struct CK_X9_42_DH1_DERIVE_PARAMS CK_PTR CK_X9_42_DH1_DERIVE_PARAMS_PTR;
   1934 
   1935 /* CK_X9_42_DH2_DERIVE_PARAMS is new for v2.11.
   1936 * CK_X9_42_DH2_DERIVE_PARAMS provides the parameters to the
   1937 * CKM_X9_42_DH_HYBRID_DERIVE and CKM_X9_42_MQV_DERIVE key derivation
   1938 * mechanisms, where each party contributes two key pairs */
   1939 typedef struct CK_X9_42_DH2_DERIVE_PARAMS {
   1940    CK_X9_42_DH_KDF_TYPE kdf;
   1941    CK_ULONG ulOtherInfoLen;
   1942    CK_BYTE_PTR pOtherInfo;
   1943    CK_ULONG ulPublicDataLen;
   1944    CK_BYTE_PTR pPublicData;
   1945    CK_ULONG ulPrivateDataLen;
   1946    CK_OBJECT_HANDLE hPrivateData;
   1947    CK_ULONG ulPublicDataLen2;
   1948    CK_BYTE_PTR pPublicData2;
   1949 } CK_X9_42_DH2_DERIVE_PARAMS;
   1950 
   1951 typedef CK_X9_42_DH2_DERIVE_PARAMS CK_PTR CK_X9_42_DH2_DERIVE_PARAMS_PTR;
   1952 
   1953 typedef struct CK_X9_42_MQV_DERIVE_PARAMS {
   1954    CK_X9_42_DH_KDF_TYPE kdf;
   1955    CK_ULONG ulOtherInfoLen;
   1956    CK_BYTE_PTR pOtherInfo;
   1957    CK_ULONG ulPublicDataLen;
   1958    CK_BYTE_PTR pPublicData;
   1959    CK_ULONG ulPrivateDataLen;
   1960    CK_OBJECT_HANDLE hPrivateData;
   1961    CK_ULONG ulPublicDataLen2;
   1962    CK_BYTE_PTR pPublicData2;
   1963    CK_OBJECT_HANDLE publicKey;
   1964 } CK_X9_42_MQV_DERIVE_PARAMS;
   1965 
   1966 typedef CK_X9_42_MQV_DERIVE_PARAMS CK_PTR CK_X9_42_MQV_DERIVE_PARAMS_PTR;
   1967 
   1968 /* CK_KEA_DERIVE_PARAMS provides the parameters to the
   1969 * CKM_KEA_DERIVE mechanism */
   1970 /* CK_KEA_DERIVE_PARAMS is new for v2.0 */
   1971 typedef struct CK_KEA_DERIVE_PARAMS {
   1972    CK_BBOOL isSender;
   1973    CK_ULONG ulRandomLen;
   1974    CK_BYTE_PTR pRandomA;
   1975    CK_BYTE_PTR pRandomB;
   1976    CK_ULONG ulPublicDataLen;
   1977    CK_BYTE_PTR pPublicData;
   1978 } CK_KEA_DERIVE_PARAMS;
   1979 
   1980 typedef CK_KEA_DERIVE_PARAMS CK_PTR CK_KEA_DERIVE_PARAMS_PTR;
   1981 
   1982 /* CK_RC2_PARAMS provides the parameters to the CKM_RC2_ECB and
   1983 * CKM_RC2_MAC mechanisms.  An instance of CK_RC2_PARAMS just
   1984 * holds the effective keysize */
   1985 typedef CK_ULONG CK_RC2_PARAMS;
   1986 
   1987 typedef CK_RC2_PARAMS CK_PTR CK_RC2_PARAMS_PTR;
   1988 
   1989 /* CK_RC2_CBC_PARAMS provides the parameters to the CKM_RC2_CBC
   1990 * mechanism */
   1991 typedef struct CK_RC2_CBC_PARAMS {
   1992    /* ulEffectiveBits was changed from CK_USHORT to CK_ULONG for
   1993     * v2.0 */
   1994    CK_ULONG ulEffectiveBits; /* effective bits (1-1024) */
   1995 
   1996    CK_BYTE iv[8]; /* IV for CBC mode */
   1997 } CK_RC2_CBC_PARAMS;
   1998 
   1999 typedef CK_RC2_CBC_PARAMS CK_PTR CK_RC2_CBC_PARAMS_PTR;
   2000 
   2001 /* CK_RC2_MAC_GENERAL_PARAMS provides the parameters for the
   2002 * CKM_RC2_MAC_GENERAL mechanism */
   2003 /* CK_RC2_MAC_GENERAL_PARAMS is new for v2.0 */
   2004 typedef struct CK_RC2_MAC_GENERAL_PARAMS {
   2005    CK_ULONG ulEffectiveBits; /* effective bits (1-1024) */
   2006    CK_ULONG ulMacLength;     /* Length of MAC in bytes */
   2007 } CK_RC2_MAC_GENERAL_PARAMS;
   2008 
   2009 typedef CK_RC2_MAC_GENERAL_PARAMS CK_PTR
   2010    CK_RC2_MAC_GENERAL_PARAMS_PTR;
   2011 
   2012 /* CK_RC5_PARAMS provides the parameters to the CKM_RC5_ECB and
   2013 * CKM_RC5_MAC mechanisms */
   2014 /* CK_RC5_PARAMS is new for v2.0 */
   2015 typedef struct CK_RC5_PARAMS {
   2016    CK_ULONG ulWordsize; /* wordsize in bits */
   2017    CK_ULONG ulRounds;   /* number of rounds */
   2018 } CK_RC5_PARAMS;
   2019 
   2020 typedef CK_RC5_PARAMS CK_PTR CK_RC5_PARAMS_PTR;
   2021 
   2022 /* CK_RC5_CBC_PARAMS provides the parameters to the CKM_RC5_CBC
   2023 * mechanism */
   2024 /* CK_RC5_CBC_PARAMS is new for v2.0 */
   2025 typedef struct CK_RC5_CBC_PARAMS {
   2026    CK_ULONG ulWordsize; /* wordsize in bits */
   2027    CK_ULONG ulRounds;   /* number of rounds */
   2028    CK_BYTE_PTR pIv;     /* pointer to IV */
   2029    CK_ULONG ulIvLen;    /* length of IV in bytes */
   2030 } CK_RC5_CBC_PARAMS;
   2031 
   2032 typedef CK_RC5_CBC_PARAMS CK_PTR CK_RC5_CBC_PARAMS_PTR;
   2033 
   2034 /* CK_RC5_MAC_GENERAL_PARAMS provides the parameters for the
   2035 * CKM_RC5_MAC_GENERAL mechanism */
   2036 /* CK_RC5_MAC_GENERAL_PARAMS is new for v2.0 */
   2037 typedef struct CK_RC5_MAC_GENERAL_PARAMS {
   2038    CK_ULONG ulWordsize;  /* wordsize in bits */
   2039    CK_ULONG ulRounds;    /* number of rounds */
   2040    CK_ULONG ulMacLength; /* Length of MAC in bytes */
   2041 } CK_RC5_MAC_GENERAL_PARAMS;
   2042 
   2043 typedef CK_RC5_MAC_GENERAL_PARAMS CK_PTR
   2044    CK_RC5_MAC_GENERAL_PARAMS_PTR;
   2045 
   2046 /* CK_MAC_GENERAL_PARAMS provides the parameters to most block
   2047 * ciphers' MAC_GENERAL mechanisms.  Its value is the length of
   2048 * the MAC */
   2049 /* CK_MAC_GENERAL_PARAMS is new for v2.0 */
   2050 typedef CK_ULONG CK_MAC_GENERAL_PARAMS;
   2051 
   2052 typedef CK_MAC_GENERAL_PARAMS CK_PTR CK_MAC_GENERAL_PARAMS_PTR;
   2053 
   2054 /* CK_DES/AES_ECB/CBC_ENCRYPT_DATA_PARAMS are new for v2.20 */
   2055 typedef struct CK_DES_CBC_ENCRYPT_DATA_PARAMS {
   2056    CK_BYTE iv[8];
   2057    CK_BYTE_PTR pData;
   2058    CK_ULONG length;
   2059 } CK_DES_CBC_ENCRYPT_DATA_PARAMS;
   2060 
   2061 typedef CK_DES_CBC_ENCRYPT_DATA_PARAMS CK_PTR CK_DES_CBC_ENCRYPT_DATA_PARAMS_PTR;
   2062 
   2063 typedef struct CK_AES_CBC_ENCRYPT_DATA_PARAMS {
   2064    CK_BYTE iv[16];
   2065    CK_BYTE_PTR pData;
   2066    CK_ULONG length;
   2067 } CK_AES_CBC_ENCRYPT_DATA_PARAMS;
   2068 
   2069 typedef CK_AES_CBC_ENCRYPT_DATA_PARAMS CK_PTR CK_AES_CBC_ENCRYPT_DATA_PARAMS_PTR;
   2070 
   2071 /* CK_AES_CTR_PARAMS is new for PKCS #11 v2.20 amendment 3 */
   2072 typedef struct CK_AES_CTR_PARAMS {
   2073    CK_ULONG ulCounterBits;
   2074    CK_BYTE cb[16];
   2075 } CK_AES_CTR_PARAMS;
   2076 
   2077 typedef CK_AES_CTR_PARAMS CK_PTR CK_AES_CTR_PARAMS_PTR;
   2078 
   2079 /* CK_GCM_PARAMS is new for version 2.30 */
   2080 /* There was a discrepency between the doc and the headers
   2081 * in PKCS #11 v2.40, NSS had the doc version, but the header
   2082 * was normative. In V3.0 they were reconsiled as the header
   2083 * version. In NSS the header version is called CK_GCM_PARAMS_V3
   2084 * and the v2.40 doc version is called CK_NSS_GCM_PARAMS.
   2085 * CK_GCM_PARMS is define as CK_NSS_GCM_PARAMS  if
   2086 * NSS_PCKS11_2_0_COMPAT is defined and CK_GCM_PARAMS_V3 if it's not.
   2087 * Softoken accepts either version and internally uses CK_NSS_GCM_PARAMS */
   2088 typedef struct CK_GCM_PARAMS_V3 {
   2089    CK_BYTE_PTR pIv;
   2090    CK_ULONG ulIvLen;
   2091    CK_ULONG ulIvBits;
   2092    CK_BYTE_PTR pAAD;
   2093    CK_ULONG ulAADLen;
   2094    CK_ULONG ulTagBits;
   2095 } CK_GCM_PARAMS_V3;
   2096 
   2097 typedef CK_GCM_PARAMS_V3 CK_PTR CK_GCM_PARAMS_V3_PTR;
   2098 
   2099 /* CK_CCM_PARAMS is new for version 2.30 */
   2100 typedef struct CK_CCM_PARAMS {
   2101    CK_ULONG ulDataLen;
   2102    CK_BYTE_PTR pNonce;
   2103    CK_ULONG ulNonceLen;
   2104    CK_BYTE_PTR pAAD;
   2105    CK_ULONG ulAADLen;
   2106    CK_ULONG ulMACLen;
   2107 } CK_CCM_PARAMS;
   2108 
   2109 typedef CK_CCM_PARAMS CK_PTR CK_CCM_PARAMS_PTR;
   2110 
   2111 /* SALSA20_POLY1305 and CHACHA20_POLY1305 is AEAD is new in v3.0 */
   2112 typedef struct CK_SALSA20_CHACHA20_POLY1305_PARAMS {
   2113    CK_BYTE_PTR pNonce;
   2114    CK_ULONG ulNonceLen;
   2115    CK_BYTE_PTR pAAD;
   2116    CK_ULONG ulAADLen;
   2117 } CK_SALSA20_CHACHA20_POLY1305_PARAMS;
   2118 
   2119 typedef CK_SALSA20_CHACHA20_POLY1305_PARAMS
   2120    CK_PTR CK_SALSA20_CHACHA20_POLY1305_PARAMS_PTR;
   2121 
   2122 /* MESSAGE params are new for v3.0 */
   2123 typedef CK_ULONG CK_GENERATOR_FUNCTION;
   2124 #define CKG_NO_GENERATE 0x00000000UL
   2125 #define CKG_GENERATE 0x00000001UL
   2126 #define CKG_GENERATE_COUNTER 0x00000002UL
   2127 #define CKG_GENERATE_RANDOM 0x00000003UL
   2128 #define CKG_GENERATE_COUNTER_XOR 0x00000004UL
   2129 
   2130 typedef struct CK_GCM_MESSAGE_PARAMS {
   2131    CK_BYTE_PTR pIv;
   2132    CK_ULONG ulIvLen;
   2133    CK_ULONG ulIvFixedBits;
   2134    CK_GENERATOR_FUNCTION ivGenerator;
   2135    CK_BYTE_PTR pTag;
   2136    CK_ULONG ulTagBits;
   2137 } CK_GCM_MESSAGE_PARAMS;
   2138 
   2139 typedef CK_GCM_MESSAGE_PARAMS CK_PTR CK_GCM_MESSAGE_PARAMS_PTR;
   2140 
   2141 typedef struct CK_CCM_MESSAGE_PARAMS {
   2142    CK_ULONG ulDataLen; /*plaintext or ciphertext*/
   2143    CK_BYTE_PTR pNonce;
   2144    CK_ULONG ulNonceLen;
   2145    CK_ULONG ulNonceFixedBits;
   2146    CK_GENERATOR_FUNCTION nonceGenerator;
   2147    CK_BYTE_PTR pMAC;
   2148    CK_ULONG ulMACLen;
   2149 } CK_CCM_MESSAGE_PARAMS;
   2150 
   2151 typedef CK_CCM_MESSAGE_PARAMS CK_PTR CK_CCM_MESSAGE_PARAMS_PTR;
   2152 
   2153 /* new for v3.2 */
   2154 typedef struct CK_GCM_WRAP_PARAMS {
   2155    CK_BYTE_PTR pIv;
   2156    CK_ULONG ulIvLen;
   2157    CK_ULONG ulIvFixedBits;
   2158    CK_GENERATOR_FUNCTION ivGenerator;
   2159    CK_BYTE_PTR pAAD;
   2160    CK_ULONG ulAADLen;
   2161    CK_ULONG ulTagBits;
   2162 } CK_GCM_WRAP_PARAMS;
   2163 
   2164 typedef CK_GCM_WRAP_PARAMS CK_PTR CK_GCM_WRAP_PARAMS_PTR;
   2165 
   2166 /* new for v3.2 */
   2167 typedef struct CK_CCM_WRAP_PARAMS {
   2168    CK_ULONG ulDataLen; /*wrappedkey data*/
   2169    CK_BYTE_PTR pNonce;
   2170    CK_ULONG ulNonceLen;
   2171    CK_ULONG ulNonceFixedBits;
   2172    CK_GENERATOR_FUNCTION nonceGenerator;
   2173    CK_BYTE_PTR pAAD;
   2174    CK_ULONG ulAADLen;
   2175    CK_ULONG ulMACLen;
   2176 } CK_CCM_WRAP_PARAMS;
   2177 
   2178 typedef CK_CCM_WRAP_PARAMS CK_PTR CK_CCM_WRAP_PARAMS_PTR;
   2179 
   2180 /* SALSA20/CHACHA20 doe not define IV generators */
   2181 typedef struct CK_SALSA20_CHACHA20_POLY1305_MSG_PARAMS {
   2182    CK_BYTE_PTR pNonce;
   2183    CK_ULONG ulNonceLen;
   2184    CK_BYTE_PTR pTag;
   2185 } CK_SALSA20_CHACHA20_POLY1305_MSG_PARAMS;
   2186 
   2187 typedef CK_SALSA20_CHACHA20_POLY1305_MSG_PARAMS
   2188    CK_PTR CK_SALSA20_CHACHA20_POLY1305_MSG_PARAMS_PTR;
   2189 
   2190 /* CK_SKIPJACK_PRIVATE_WRAP_PARAMS provides the parameters to the
   2191 * CKM_SKIPJACK_PRIVATE_WRAP mechanism */
   2192 /* CK_SKIPJACK_PRIVATE_WRAP_PARAMS is new for v2.0 */
   2193 typedef struct CK_SKIPJACK_PRIVATE_WRAP_PARAMS {
   2194    CK_ULONG ulPasswordLen;
   2195    CK_BYTE_PTR pPassword;
   2196    CK_ULONG ulPublicDataLen;
   2197    CK_BYTE_PTR pPublicData;
   2198    CK_ULONG ulPAndGLen;
   2199    CK_ULONG ulQLen;
   2200    CK_ULONG ulRandomLen;
   2201    CK_BYTE_PTR pRandomA;
   2202    CK_BYTE_PTR pPrimeP;
   2203    CK_BYTE_PTR pBaseG;
   2204    CK_BYTE_PTR pSubprimeQ;
   2205 } CK_SKIPJACK_PRIVATE_WRAP_PARAMS;
   2206 
   2207 typedef CK_SKIPJACK_PRIVATE_WRAP_PARAMS CK_PTR
   2208    CK_SKIPJACK_PRIVATE_WRAP_PARAMS_PTR;
   2209 
   2210 /* CK_SKIPJACK_RELAYX_PARAMS provides the parameters to the
   2211 * CKM_SKIPJACK_RELAYX mechanism */
   2212 /* CK_SKIPJACK_RELAYX_PARAMS is new for v2.0 */
   2213 typedef struct CK_SKIPJACK_RELAYX_PARAMS {
   2214    CK_ULONG ulOldWrappedXLen;
   2215    CK_BYTE_PTR pOldWrappedX;
   2216    CK_ULONG ulOldPasswordLen;
   2217    CK_BYTE_PTR pOldPassword;
   2218    CK_ULONG ulOldPublicDataLen;
   2219    CK_BYTE_PTR pOldPublicData;
   2220    CK_ULONG ulOldRandomLen;
   2221    CK_BYTE_PTR pOldRandomA;
   2222    CK_ULONG ulNewPasswordLen;
   2223    CK_BYTE_PTR pNewPassword;
   2224    CK_ULONG ulNewPublicDataLen;
   2225    CK_BYTE_PTR pNewPublicData;
   2226    CK_ULONG ulNewRandomLen;
   2227    CK_BYTE_PTR pNewRandomA;
   2228 } CK_SKIPJACK_RELAYX_PARAMS;
   2229 
   2230 typedef CK_SKIPJACK_RELAYX_PARAMS CK_PTR
   2231    CK_SKIPJACK_RELAYX_PARAMS_PTR;
   2232 
   2233 /* New for v2.40, CAMELLIA, ARIA, SEED */
   2234 typedef struct CK_CAMELLIA_CTR_PARAMS {
   2235    CK_ULONG ulCounterBits;
   2236    CK_BYTE cb[16];
   2237 } CK_CAMELLIA_CTR_PARAMS;
   2238 
   2239 typedef CK_CAMELLIA_CTR_PARAMS CK_PTR CK_CAMELLIA_CTR_PARAMS_PTR;
   2240 
   2241 typedef struct CK_CAMELLIA_CBC_ENCRYPT_DATA_PARAMS {
   2242    CK_BYTE iv[16];
   2243    CK_BYTE_PTR pData;
   2244    CK_ULONG length;
   2245 } CK_CAMELLIA_CBC_ENCRYPT_DATA_PARAMS;
   2246 
   2247 typedef CK_CAMELLIA_CBC_ENCRYPT_DATA_PARAMS CK_PTR
   2248    CK_CAMELLIA_CBC_ENCRYPT_DATA_PARAMS_PTR;
   2249 
   2250 typedef struct CK_ARIA_CBC_ENCRYPT_DATA_PARAMS {
   2251    CK_BYTE iv[16];
   2252    CK_BYTE_PTR pData;
   2253    CK_ULONG length;
   2254 } CK_ARIA_CBC_ENCRYPT_DATA_PARAMS;
   2255 
   2256 typedef CK_ARIA_CBC_ENCRYPT_DATA_PARAMS CK_PTR
   2257    CK_ARIA_CBC_ENCRYPT_DATA_PARAMS_PTR;
   2258 
   2259 typedef struct CK_SEED_CBC_ENCRYPT_DATA_PARAMS {
   2260    CK_BYTE iv[16];
   2261    CK_BYTE_PTR pData;
   2262    CK_ULONG length;
   2263 } CK_SEED_CBC_ENCRYPT_DATA_PARAMS;
   2264 
   2265 typedef CK_SEED_CBC_ENCRYPT_DATA_PARAMS CK_PTR
   2266    CK_SEED_CBC_ENCRYPT_DATA_PARAMS_PTR;
   2267 
   2268 /* ChaCha20/Salsa20 Counter support is new in v3.0*/
   2269 typedef struct CK_CHACHA20_PARAMS {
   2270    CK_BYTE_PTR pBlockCounter;
   2271    CK_ULONG blockCounterBits;
   2272    CK_BYTE_PTR pNonce;
   2273    CK_ULONG ulNonceBits;
   2274 } CK_CHACHA20_PARAMS;
   2275 
   2276 typedef CK_CHACHA20_PARAMS CK_PTR CK_CHACHA20_PARAMS_PTR;
   2277 
   2278 typedef struct CK_SALSA20_PARAMS {
   2279    CK_BYTE_PTR pBlockCounter;
   2280    CK_BYTE_PTR pNonce;
   2281    CK_ULONG ulNonceBits;
   2282 } CK_SALSA20_PARAMS;
   2283 typedef CK_SALSA20_PARAMS CK_PTR CK_SALSA20_PARAMS_PTR;
   2284 
   2285 typedef struct CK_PBE_PARAMS {
   2286    CK_BYTE_PTR pInitVector;
   2287    CK_UTF8CHAR_PTR pPassword;
   2288    CK_ULONG ulPasswordLen;
   2289    CK_BYTE_PTR pSalt;
   2290    CK_ULONG ulSaltLen;
   2291    CK_ULONG ulIteration;
   2292 } CK_PBE_PARAMS;
   2293 
   2294 typedef CK_PBE_PARAMS CK_PTR CK_PBE_PARAMS_PTR;
   2295 
   2296 /* CK_KEY_WRAP_SET_OAEP_PARAMS provides the parameters to the
   2297 * CKM_KEY_WRAP_SET_OAEP mechanism */
   2298 /* CK_KEY_WRAP_SET_OAEP_PARAMS is new for v2.0 */
   2299 typedef struct CK_KEY_WRAP_SET_OAEP_PARAMS {
   2300    CK_BYTE bBC;     /* block contents byte */
   2301    CK_BYTE_PTR pX;  /* extra data */
   2302    CK_ULONG ulXLen; /* length of extra data in bytes */
   2303 } CK_KEY_WRAP_SET_OAEP_PARAMS;
   2304 
   2305 typedef CK_KEY_WRAP_SET_OAEP_PARAMS CK_PTR
   2306    CK_KEY_WRAP_SET_OAEP_PARAMS_PTR;
   2307 
   2308 typedef struct CK_SSL3_RANDOM_DATA {
   2309    CK_BYTE_PTR pClientRandom;
   2310    CK_ULONG ulClientRandomLen;
   2311    CK_BYTE_PTR pServerRandom;
   2312    CK_ULONG ulServerRandomLen;
   2313 } CK_SSL3_RANDOM_DATA;
   2314 
   2315 typedef struct CK_SSL3_MASTER_KEY_DERIVE_PARAMS {
   2316    CK_SSL3_RANDOM_DATA RandomInfo;
   2317    CK_VERSION_PTR pVersion;
   2318 } CK_SSL3_MASTER_KEY_DERIVE_PARAMS;
   2319 
   2320 typedef struct CK_SSL3_MASTER_KEY_DERIVE_PARAMS CK_PTR
   2321    CK_SSL3_MASTER_KEY_DERIVE_PARAMS_PTR;
   2322 
   2323 typedef struct CK_SSL3_KEY_MAT_OUT {
   2324    CK_OBJECT_HANDLE hClientMacSecret;
   2325    CK_OBJECT_HANDLE hServerMacSecret;
   2326    CK_OBJECT_HANDLE hClientKey;
   2327    CK_OBJECT_HANDLE hServerKey;
   2328    CK_BYTE_PTR pIVClient;
   2329    CK_BYTE_PTR pIVServer;
   2330 } CK_SSL3_KEY_MAT_OUT;
   2331 
   2332 typedef CK_SSL3_KEY_MAT_OUT CK_PTR CK_SSL3_KEY_MAT_OUT_PTR;
   2333 
   2334 typedef struct CK_SSL3_KEY_MAT_PARAMS {
   2335    CK_ULONG ulMacSizeInBits;
   2336    CK_ULONG ulKeySizeInBits;
   2337    CK_ULONG ulIVSizeInBits;
   2338    CK_BBOOL bIsExport; /* Unused. Must be set to CK_FALSE. */
   2339    CK_SSL3_RANDOM_DATA RandomInfo;
   2340    CK_SSL3_KEY_MAT_OUT_PTR pReturnedKeyMaterial;
   2341 } CK_SSL3_KEY_MAT_PARAMS;
   2342 
   2343 typedef CK_SSL3_KEY_MAT_PARAMS CK_PTR CK_SSL3_KEY_MAT_PARAMS_PTR;
   2344 
   2345 /* CK_TLS_PRF_PARAMS is new for version 2.20 */
   2346 typedef struct CK_TLS_PRF_PARAMS {
   2347    CK_BYTE_PTR pSeed;
   2348    CK_ULONG ulSeedLen;
   2349    CK_BYTE_PTR pLabel;
   2350    CK_ULONG ulLabelLen;
   2351    CK_BYTE_PTR pOutput;
   2352    CK_ULONG_PTR pulOutputLen;
   2353 } CK_TLS_PRF_PARAMS;
   2354 
   2355 typedef CK_TLS_PRF_PARAMS CK_PTR CK_TLS_PRF_PARAMS_PTR;
   2356 
   2357 /* TLS 1.2 is new for version 2.40 */
   2358 typedef struct CK_TLS12_MASTER_KEY_DERIVE_PARAMS {
   2359    CK_SSL3_RANDOM_DATA RandomInfo;
   2360    CK_VERSION_PTR pVersion;
   2361    CK_MECHANISM_TYPE prfHashMechanism;
   2362 } CK_TLS12_MASTER_KEY_DERIVE_PARAMS;
   2363 
   2364 typedef CK_TLS12_MASTER_KEY_DERIVE_PARAMS CK_PTR
   2365    CK_TLS12_MASTER_KEY_DERIVE_PARAMS_PTR;
   2366 
   2367 typedef struct CK_TLS12_KEY_MAT_PARAMS {
   2368    CK_ULONG ulMacSizeInBits;
   2369    CK_ULONG ulKeySizeInBits;
   2370    CK_ULONG ulIVSizeInBits;
   2371    CK_BBOOL bIsExport; /* Unused. Must be set to CK_FALSE. */
   2372    CK_SSL3_RANDOM_DATA RandomInfo;
   2373    CK_SSL3_KEY_MAT_OUT_PTR pReturnedKeyMaterial;
   2374    CK_MECHANISM_TYPE prfHashMechanism;
   2375 } CK_TLS12_KEY_MAT_PARAMS;
   2376 
   2377 typedef CK_TLS12_KEY_MAT_PARAMS CK_PTR CK_TLS12_KEY_MAT_PARAMS_PTR;
   2378 
   2379 typedef struct CK_TLS_KDF_PARAMS {
   2380    CK_MECHANISM_TYPE prfMechanism;
   2381    CK_BYTE_PTR pLabel;
   2382    CK_ULONG ulLabelLength;
   2383    CK_SSL3_RANDOM_DATA RandomInfo;
   2384    CK_BYTE_PTR pContextData;
   2385    CK_ULONG ulContextDataLength;
   2386 } CK_TLS_KDF_PARAMS;
   2387 
   2388 typedef CK_TLS_KDF_PARAMS CK_PTR CK_TLS_KDF_PARAMS_PTR;
   2389 
   2390 typedef struct CK_TLS_MAC_PARAMS {
   2391    CK_MECHANISM_TYPE prfHashMechanism;
   2392    CK_ULONG ulMacLength;
   2393    CK_ULONG ulServerOrClient;
   2394 } CK_TLS_MAC_PARAMS;
   2395 
   2396 typedef CK_TLS_MAC_PARAMS CK_PTR CK_TLS_MAC_PARAMS_PTR;
   2397 
   2398 /* new for v3.2 */
   2399 typedef struct CK_TLS12_EXTENDED_MASTER_KEY_DERIVE_PARAMS {
   2400    CK_MECHANISM_TYPE prfHashMechanism;
   2401    CK_BYTE_PTR pSessionHash;
   2402    CK_ULONG ulSessionHashLen;
   2403    CK_VERSION_PTR pVersion;
   2404 } CK_TLS12_EXTENDED_MASTER_KEY_DERIVE_PARAMS;
   2405 
   2406 typedef CK_TLS12_EXTENDED_MASTER_KEY_DERIVE_PARAMS CK_PTR
   2407    CK_TLS12_EXTENDED_MASTER_KEY_DERIVE_PARAMS_PTR;
   2408 
   2409 /* HKDF is new for v3.0 */
   2410 typedef struct CK_HKDF_PARAMS {
   2411    CK_BBOOL bExtract;
   2412    CK_BBOOL bExpand;
   2413    CK_MECHANISM_TYPE prfHashMechanism;
   2414    CK_ULONG ulSaltType;
   2415    CK_BYTE_PTR pSalt;
   2416    CK_ULONG ulSaltLen;
   2417    CK_OBJECT_HANDLE hSaltKey;
   2418    CK_BYTE_PTR pInfo;
   2419    CK_ULONG ulInfoLen;
   2420 } CK_HKDF_PARAMS;
   2421 typedef CK_HKDF_PARAMS CK_PTR CK_HKDF_PARAMS_PTR;
   2422 
   2423 #define CKF_HKDF_SALT_NULL 0x00000001UL
   2424 #define CKF_HKDF_SALT_DATA 0x00000002UL
   2425 #define CKF_HKDF_SALT_KEY 0x00000004UL
   2426 
   2427 /* IKE is new for v3.1 */
   2428 /*
   2429 * CK_IKE2_PRF_PLUS_PARAMS is a structure that provides the parameters to
   2430 * the CKM_IKE2_PRF_PLUS_DERIVE mechanism.
   2431 * The fields of the structure have the following meanings:
   2432 *      prfMechanism    underlying MAC mechanism used to generate the prf.
   2433 *      bHasSeedKey     hSeed key is present.
   2434 *      hSeedKey        optional seed from key
   2435 *      pSeedData       optional seed from data.
   2436 *      ulSeedDataLen   length of optional seed data.
   2437 *        If no seed data is present this value is NULL.
   2438 */
   2439 typedef struct CK_IKE2_PRF_PLUS_DERIVE_PARAMS {
   2440    CK_MECHANISM_TYPE prfMechanism;
   2441    CK_BBOOL bHasSeedKey;
   2442    CK_OBJECT_HANDLE hSeedKey;
   2443    CK_BYTE_PTR pSeedData;
   2444    CK_ULONG ulSeedDataLen;
   2445 } CK_IKE2_PRF_PLUS_DERIVE_PARAMS;
   2446 
   2447 typedef CK_IKE2_PRF_PLUS_DERIVE_PARAMS CK_PTR CK_IKE2_PRF_PLUS_DERIVE_PARAMS_PTR;
   2448 
   2449 /* CK_IKE_PRF_DERIVE_PARAMS is a structure that provides the parameters to
   2450 *  the CKM_IKE_PRF_DERIVE mechanism.
   2451 *
   2452 * The fields of the structure have the following meanings:
   2453 *     prfMechanism underlying MAC mechanism used to generate the prf.
   2454 *     bRekey       hNewKey is present.
   2455 *     pNi          Ni value
   2456 *     ulNiLen      length of Ni
   2457 *     pNr          Nr value
   2458 *     ulNrLen      length of Nr
   2459 *     hNewKey      New key value to drive the rekey.
   2460 */
   2461 typedef struct CK_IKE_PRF_DERIVE_PARAMS {
   2462    CK_MECHANISM_TYPE prfMechanism;
   2463    CK_BBOOL bDataAsKey;
   2464    CK_BBOOL bRekey;
   2465    CK_BYTE_PTR pNi;
   2466    CK_ULONG ulNiLen;
   2467    CK_BYTE_PTR pNr;
   2468    CK_ULONG ulNrLen;
   2469    CK_OBJECT_HANDLE hNewKey;
   2470 } CK_IKE_PRF_DERIVE_PARAMS;
   2471 
   2472 typedef CK_IKE_PRF_DERIVE_PARAMS CK_PTR CK_IKE_PRF_DERIVE_PARAMS_PTR;
   2473 
   2474 /* CK_IKE1_PRF_DERIVE_PARAMS is a structure that provides the parameters
   2475 * to the CKM_IKE1_PRF_DERIVE mechanism.
   2476 *
   2477 * The fields of the structure have the following meanings:
   2478 *     prfMechanism  underlying MAC mechanism used to generate the prf.
   2479 *     bHasPrevKey   there is a previous key to use
   2480 *     hKeygxy       key to hash in the prf (usually a dhkey of sorts)
   2481 *     hPrevKey      the previous ike1 key
   2482 *     pCKYi         CKYi value
   2483 *     ulCKYiLen     length of CKYi
   2484 *     pCKYr         CKYr value
   2485 *     ulCKYrLen     length of CKYr
   2486 *     hNewKey       New key value to drive the rekey.
   2487 */
   2488 typedef struct CK_IKE1_PRF_DERIVE_PARAMS {
   2489    CK_MECHANISM_TYPE prfMechanism;
   2490    CK_BBOOL bHasPrevKey;
   2491    CK_OBJECT_HANDLE hKeygxy;
   2492    CK_OBJECT_HANDLE hPrevKey;
   2493    CK_BYTE_PTR pCKYi;
   2494    CK_ULONG ulCKYiLen;
   2495    CK_BYTE_PTR pCKYr;
   2496    CK_ULONG ulCKYrLen;
   2497    CK_BYTE keyNumber;
   2498 } CK_IKE1_PRF_DERIVE_PARAMS;
   2499 
   2500 typedef CK_IKE1_PRF_DERIVE_PARAMS CK_PTR CK_IKE1_PRF_DERIVE_PARAMS_PTR;
   2501 
   2502 /* CK_IKE1_EXTENDED_DERIVE_PARAMS is a structure that provides the
   2503 * parameters to the CKM_IKE1_EXTENDED_DERIVE mechanism.
   2504 *
   2505 * The fields of the structure have the following meanings:
   2506 *     prfMechanism  underlying MAC mechanism used to generate the prf.
   2507 *     bHasKeygxy    hKeygxy exists
   2508 *     hKeygxy       optional key to hash in the prf
   2509 *     pExtraData    optional extra data to hash in the prf
   2510 *     ulExtraData   length of the optional extra data.
   2511 */
   2512 typedef struct CK_IKE1_EXTENDED_DERIVE_PARAMS {
   2513    CK_MECHANISM_TYPE prfMechanism;
   2514    CK_BBOOL bHasKeygxy;
   2515    CK_OBJECT_HANDLE hKeygxy;
   2516    CK_BYTE_PTR pExtraData;
   2517    CK_ULONG ulExtraDataLen;
   2518 } CK_IKE1_EXTENDED_DERIVE_PARAMS;
   2519 
   2520 typedef CK_IKE1_EXTENDED_DERIVE_PARAMS CK_PTR CK_IKE1_EXTENDED_DERIVE_PARAMS_PTR;
   2521 
   2522 /* WTLS is new for version 2.20 */
   2523 typedef struct CK_WTLS_RANDOM_DATA {
   2524    CK_BYTE_PTR pClientRandom;
   2525    CK_ULONG ulClientRandomLen;
   2526    CK_BYTE_PTR pServerRandom;
   2527    CK_ULONG ulServerRandomLen;
   2528 } CK_WTLS_RANDOM_DATA;
   2529 
   2530 typedef CK_WTLS_RANDOM_DATA CK_PTR CK_WTLS_RANDOM_DATA_PTR;
   2531 
   2532 typedef struct CK_WTLS_MASTER_KEY_DERIVE_PARAMS {
   2533    CK_MECHANISM_TYPE DigestMechanism;
   2534    CK_WTLS_RANDOM_DATA RandomInfo;
   2535    CK_BYTE_PTR pVersion;
   2536 } CK_WTLS_MASTER_KEY_DERIVE_PARAMS;
   2537 
   2538 typedef CK_WTLS_MASTER_KEY_DERIVE_PARAMS CK_PTR
   2539    CK_WTLS_MASTER_KEY_DERIVE_PARAMS_PTR;
   2540 
   2541 typedef struct CK_WTLS_PRF_PARAMS {
   2542    CK_MECHANISM_TYPE DigestMechanism;
   2543    CK_BYTE_PTR pSeed;
   2544    CK_ULONG ulSeedLen;
   2545    CK_BYTE_PTR pLabel;
   2546    CK_ULONG ulLabelLen;
   2547    CK_BYTE_PTR pOutput;
   2548    CK_ULONG_PTR pulOutputLen;
   2549 } CK_WTLS_PRF_PARAMS;
   2550 
   2551 typedef CK_WTLS_PRF_PARAMS CK_PTR CK_WTLS_PRF_PARAMS_PTR;
   2552 
   2553 typedef struct CK_WTLS_KEY_MAT_OUT {
   2554    CK_OBJECT_HANDLE hMacSecret;
   2555    CK_OBJECT_HANDLE hKey;
   2556    CK_BYTE_PTR pIV;
   2557 } CK_WTLS_KEY_MAT_OUT;
   2558 
   2559 typedef CK_WTLS_KEY_MAT_OUT CK_PTR CK_WTLS_KEY_MAT_OUT_PTR;
   2560 
   2561 typedef struct CK_WTLS_KEY_MAT_PARAMS {
   2562    CK_MECHANISM_TYPE DigestMechanism;
   2563    CK_ULONG ulMacSizeInBits;
   2564    CK_ULONG ulKeySizeInBits;
   2565    CK_ULONG ulIVSizeInBits;
   2566    CK_ULONG ulSequenceNumber;
   2567    CK_BBOOL bIsExport; /* Unused. Must be set to CK_FALSE. */
   2568    CK_WTLS_RANDOM_DATA RandomInfo;
   2569    CK_WTLS_KEY_MAT_OUT_PTR pReturnedKeyMaterial;
   2570 } CK_WTLS_KEY_MAT_PARAMS;
   2571 
   2572 typedef CK_WTLS_KEY_MAT_PARAMS CK_PTR CK_WTLS_KEY_MAT_PARAMS_PTR;
   2573 
   2574 /* The following types for NIST 800-108 KBKDF are defined in PKCS#11 v3.0 */
   2575 typedef CK_MECHANISM_TYPE CK_SP800_108_PRF_TYPE;
   2576 typedef CK_ULONG CK_PRF_DATA_TYPE;
   2577 
   2578 #define CK_SP800_108_ITERATION_VARIABLE 0x00000001UL
   2579 #define CK_SP800_108_OPTIONAL_COUNTER 0x00000002UL
   2580 #define CK_SP800_108_DKM_LENGTH 0x00000003UL
   2581 #define CK_SP800_108_BYTE_ARRAY 0x00000004UL
   2582 /* new for v3.2 */
   2583 #define CK_SP800_108_KEY_HANDLE 0x00000005UL
   2584 
   2585 /* ERRATA: PKCS#11 v3.0 Cryptographic Token Interface Current Mechanisms
   2586 * specification specifies a CK_SP800_108_COUNTER, while the pkcs11t.h from
   2587 * PKCS#11 v3.0 Cryptographic Token Interface Base Specification specifies
   2588 * CK_SP800_108_OPTIONAL_COUNTER. */
   2589 #define CK_SP800_108_COUNTER CK_SP800_108_OPTIONAL_COUNTER
   2590 
   2591 typedef struct CK_PRF_DATA_PARAM {
   2592    CK_PRF_DATA_TYPE type;
   2593    CK_VOID_PTR pValue;
   2594    CK_ULONG ulValueLen;
   2595 } CK_PRF_DATA_PARAM;
   2596 
   2597 typedef CK_PRF_DATA_PARAM CK_PTR CK_PRF_DATA_PARAM_PTR;
   2598 
   2599 typedef struct CK_SP800_108_COUNTER_FORMAT {
   2600    CK_BBOOL bLittleEndian;
   2601    CK_ULONG ulWidthInBits;
   2602 } CK_SP800_108_COUNTER_FORMAT;
   2603 
   2604 typedef CK_SP800_108_COUNTER_FORMAT CK_PTR CK_SP800_108_COUNTER_FORMAT_PTR;
   2605 
   2606 typedef CK_ULONG CK_SP800_108_DKM_LENGTH_METHOD;
   2607 
   2608 /* ERRATA: PKCS#11 v3.0 Cryptographic Token Interface Current Mechanisms
   2609 * defines that these constants exist, but doesn't specify values. pkcs11t.h
   2610 * from PKCS#11 v3.0 Cryptographic Token Interface Base Specification doesn't
   2611 * define these constants either. */
   2612 #define CK_SP800_108_DKM_LENGTH_SUM_OF_KEYS 0x00000001UL
   2613 #define CK_SP800_108_DKM_LENGTH_SUM_OF_SEGMENTS 0x00000002UL
   2614 
   2615 typedef struct CK_SP800_108_DKM_LENGTH_FORMAT {
   2616    CK_SP800_108_DKM_LENGTH_METHOD dkmLengthMethod;
   2617    CK_BBOOL bLittleEndian;
   2618    CK_ULONG ulWidthInBits;
   2619 } CK_SP800_108_DKM_LENGTH_FORMAT;
   2620 
   2621 typedef CK_SP800_108_DKM_LENGTH_FORMAT CK_PTR CK_SP800_108_DKM_LENGTH_FORMAT_PTR;
   2622 
   2623 typedef struct CK_DERIVED_KEY {
   2624    CK_ATTRIBUTE_PTR pTemplate;
   2625    CK_ULONG ulAttributeCount;
   2626    CK_OBJECT_HANDLE_PTR phKey;
   2627 } CK_DERIVED_KEY;
   2628 
   2629 typedef CK_DERIVED_KEY CK_PTR CK_DERIVED_KEY_PTR;
   2630 
   2631 /* UNFIXED ERRATA: NIST SP800-108 specifies that implementer can decide the
   2632 * number of bits to take from each PRF invocation. However, all three forms
   2633 * of the PKCS#11 v3.0 implementation lack a bitwidth for the PRF and only
   2634 * allow the full-width mechanism varieties. Additionally, outside of the
   2635 * base key (used as the key to the PRF), there is no way to pass any
   2636 * additional, PRF-mechanism specific data. */
   2637 
   2638 typedef struct CK_SP800_108_KDF_PARAMS {
   2639    CK_SP800_108_PRF_TYPE prfType;
   2640    CK_ULONG ulNumberOfDataParams;
   2641    CK_PRF_DATA_PARAM_PTR pDataParams;
   2642    CK_ULONG ulAdditionalDerivedKeys;
   2643    /* ERRATA: in PKCS#11 v3.0, pAdditionalDerivedKeys is typed as
   2644     * CK_DERVIED_KEY; it needs to be of type CK_DERIVED_KEY_PTR. */
   2645    CK_DERIVED_KEY_PTR pAdditionalDerivedKeys;
   2646 } CK_SP800_108_KDF_PARAMS;
   2647 
   2648 typedef CK_SP800_108_KDF_PARAMS CK_PTR CK_SP800_108_KDF_PARAMS_PTR;
   2649 
   2650 typedef struct CK_SP800_108_FEEDBACK_KDF_PARAMS {
   2651    CK_SP800_108_PRF_TYPE prfType;
   2652    CK_ULONG ulNumberOfDataParams;
   2653    CK_PRF_DATA_PARAM_PTR pDataParams;
   2654    CK_ULONG ulIVLen;
   2655    CK_BYTE_PTR pIV;
   2656    CK_ULONG ulAdditionalDerivedKeys;
   2657    /* ERRATA: in PKCS#11 v3.0, pAdditionalDerivedKeys is typed as
   2658     * CK_DERVIED_KEY; it needs to be of type CK_DERIVED_KEY_PTR. */
   2659    CK_DERIVED_KEY_PTR pAdditionalDerivedKeys;
   2660 } CK_SP800_108_FEEDBACK_KDF_PARAMS;
   2661 
   2662 typedef CK_SP800_108_FEEDBACK_KDF_PARAMS CK_PTR CK_SP800_108_FEEDBACK_KDF_PARAMS_PTR;
   2663 
   2664 /* CMS is new for version 2.20 */
   2665 typedef struct CK_CMS_SIG_PARAMS {
   2666    CK_OBJECT_HANDLE certificateHandle;
   2667    CK_MECHANISM_PTR pSigningMechanism;
   2668    CK_MECHANISM_PTR pDigestMechanism;
   2669    CK_UTF8CHAR_PTR pContentType;
   2670    CK_BYTE_PTR pRequestedAttributes;
   2671    CK_ULONG ulRequestedAttributesLen;
   2672    CK_BYTE_PTR pRequiredAttributes;
   2673    CK_ULONG ulRequiredAttributesLen;
   2674 } CK_CMS_SIG_PARAMS;
   2675 
   2676 typedef CK_CMS_SIG_PARAMS CK_PTR CK_CMS_SIG_PARAMS_PTR;
   2677 
   2678 typedef struct CK_KEY_DERIVATION_STRING_DATA {
   2679    CK_BYTE_PTR pData;
   2680    CK_ULONG ulLen;
   2681 } CK_KEY_DERIVATION_STRING_DATA;
   2682 
   2683 typedef CK_KEY_DERIVATION_STRING_DATA CK_PTR
   2684    CK_KEY_DERIVATION_STRING_DATA_PTR;
   2685 
   2686 /* The CK_EXTRACT_PARAMS is used for the
   2687 * CKM_EXTRACT_KEY_FROM_KEY mechanism.  It specifies which bit
   2688 * of the base key should be used as the first bit of the
   2689 * derived key */
   2690 /* CK_EXTRACT_PARAMS is new for v2.0 */
   2691 typedef CK_ULONG CK_EXTRACT_PARAMS;
   2692 
   2693 typedef CK_EXTRACT_PARAMS CK_PTR CK_EXTRACT_PARAMS_PTR;
   2694 
   2695 /* CK_PKCS5_PBKD2_PSEUDO_RANDOM_FUNCTION_TYPE is new for v2.10.
   2696 * CK_PKCS5_PBKD2_PSEUDO_RANDOM_FUNCTION_TYPE is used to
   2697 * indicate the Pseudo-Random Function (PRF) used to generate
   2698 * key bits using PKCS #5 PBKDF2. */
   2699 typedef CK_ULONG CK_PKCS5_PBKD2_PSEUDO_RANDOM_FUNCTION_TYPE;
   2700 
   2701 typedef CK_PKCS5_PBKD2_PSEUDO_RANDOM_FUNCTION_TYPE CK_PTR CK_PKCS5_PBKD2_PSEUDO_RANDOM_FUNCTION_TYPE_PTR;
   2702 
   2703 /* The following PRFs are defined in PKCS #5 v2.1. */
   2704 #define CKP_PKCS5_PBKD2_HMAC_SHA1 0x00000001UL
   2705 #define CKP_PKCS5_PBKD2_HMAC_GOSTR3411 0x00000002UL
   2706 #define CKP_PKCS5_PBKD2_HMAC_SHA224 0x00000003UL
   2707 #define CKP_PKCS5_PBKD2_HMAC_SHA256 0x00000004UL
   2708 #define CKP_PKCS5_PBKD2_HMAC_SHA384 0x00000005UL
   2709 #define CKP_PKCS5_PBKD2_HMAC_SHA512 0x00000006UL
   2710 #define CKP_PKCS5_PBKD2_HMAC_SHA512_224 0x00000007UL
   2711 #define CKP_PKCS5_PBKD2_HMAC_SHA512_256 0x00000008UL
   2712 
   2713 /* CK_PKCS5_PBKDF2_SALT_SOURCE_TYPE is new for v2.10.
   2714 * CK_PKCS5_PBKDF2_SALT_SOURCE_TYPE is used to indicate the
   2715 * source of the salt value when deriving a key using PKCS #5
   2716 * PBKDF2. */
   2717 typedef CK_ULONG CK_PKCS5_PBKDF2_SALT_SOURCE_TYPE;
   2718 
   2719 typedef CK_PKCS5_PBKDF2_SALT_SOURCE_TYPE CK_PTR CK_PKCS5_PBKDF2_SALT_SOURCE_TYPE_PTR;
   2720 
   2721 /* The following salt value sources are defined in PKCS #5 v2.0. */
   2722 #define CKZ_SALT_SPECIFIED 0x00000001UL
   2723 
   2724 /* CK_PKCS5_PBKD2_PARAMS is new for v2.10.
   2725 * CK_PKCS5_PBKD2_PARAMS is a structure that provides the
   2726 * parameters to the CKM_PKCS5_PBKD2 mechanism. */
   2727 /* this structure is kept for compatibility. use _PARAMS2. */
   2728 typedef struct CK_PKCS5_PBKD2_PARAMS {
   2729    CK_PKCS5_PBKDF2_SALT_SOURCE_TYPE saltSource;
   2730    CK_VOID_PTR pSaltSourceData;
   2731    CK_ULONG ulSaltSourceDataLen;
   2732    CK_ULONG iterations;
   2733    CK_PKCS5_PBKD2_PSEUDO_RANDOM_FUNCTION_TYPE prf;
   2734    CK_VOID_PTR pPrfData;
   2735    CK_ULONG ulPrfDataLen;
   2736    CK_UTF8CHAR_PTR pPassword;
   2737    CK_ULONG_PTR ulPasswordLen;
   2738 } CK_PKCS5_PBKD2_PARAMS;
   2739 
   2740 typedef CK_PKCS5_PBKD2_PARAMS CK_PTR CK_PKCS5_PBKD2_PARAMS_PTR;
   2741 
   2742 typedef struct CK_PKCS5_PBKD2_PARAMS2 {
   2743    CK_PKCS5_PBKDF2_SALT_SOURCE_TYPE saltSource;
   2744    CK_VOID_PTR pSaltSourceData;
   2745    CK_ULONG ulSaltSourceDataLen;
   2746    CK_ULONG iterations;
   2747    CK_PKCS5_PBKD2_PSEUDO_RANDOM_FUNCTION_TYPE prf;
   2748    CK_VOID_PTR pPrfData;
   2749    CK_ULONG ulPrfDataLen;
   2750    CK_UTF8CHAR_PTR pPassword;
   2751    CK_ULONG ulPasswordLen;
   2752 } CK_PKCS5_PBKD2_PARAMS2;
   2753 
   2754 typedef CK_PKCS5_PBKD2_PARAMS2 CK_PTR CK_PKCS5_PBKD2_PARAMS2_PTR;
   2755 
   2756 /* The following value is used to determines if a parameter is of type PARAMS or PARAMS2
   2757 * based on the value of ulPasswordLen. If ulPasswordLen is greater that the value below,
   2758 * it is most likely a memory address i.e. a pointer (PARAMS). Otherwise, it is considered
   2759 * a length value (PARAMS2). This is ignored if NSS_USE_PKCS5_PBKD2_PARAMS2_ONLY is defined.
   2760 */
   2761 #define CK_PKCS5_PBKD2_PARAMS_PTR_BOUNDARY 8192
   2762 
   2763 /* OTP is new in v2.40 */
   2764 typedef CK_ULONG CK_OTP_PARAM_TYPE;
   2765 #define CK_OTP_VALUE 0UL
   2766 #define CK_OTP_PIN 1UL
   2767 #define CK_OTP_CHALLENGE 2UL
   2768 #define CK_OTP_TIME 3UL
   2769 #define CK_OTP_COUNTER 4UL
   2770 #define CK_OTP_FLAGS 5UL
   2771 #define CK_OTP_OUTPUT_LENGTH 6UL
   2772 #define CK_OTP_OUTPUT_FORMAT 7UL
   2773 
   2774 typedef struct CK_OTP_PARAM {
   2775    CK_OTP_PARAM_TYPE type;
   2776    CK_VOID_PTR pValue;
   2777    CK_ULONG ulValueLen;
   2778 } CK_OTP_PARAM;
   2779 
   2780 typedef CK_OTP_PARAM CK_PTR CK_OTP_PARAM_PTR;
   2781 
   2782 typedef struct CK_OTP_PARAMS {
   2783    CK_OTP_PARAM_PTR pParams;
   2784    CK_ULONG ulCount;
   2785 } CK_OTP_PARAMS;
   2786 
   2787 typedef CK_OTP_PARAMS CK_PTR CK_OTP_PARAMS_PTR;
   2788 
   2789 typedef struct CK_OTP_SIGNATURE_INFO {
   2790    CK_OTP_PARAM_PTR pParams;
   2791    CK_ULONG ulCount;
   2792 } CK_OTP_SIGNATURE_INFO;
   2793 
   2794 typedef CK_OTP_SIGNATURE_INFO CK_PTR CK_OTP_SIGNATURE_INFO_PTR;
   2795 
   2796 #define CKF_NEXT_OTP 0x00000001UL
   2797 #define CKF_EXCLUDE_TIME 0x00000002UL
   2798 #define CKF_EXCLUDE_COUNTER 0x00000004UL
   2799 #define CKF_EXCLUDE_CHALLENGE 0x00000008UL
   2800 #define CKF_EXCLUDE_PIN 0x00000010UL
   2801 #define CKF_USER_FRIENDLY_OTP 0x00000020UL
   2802 
   2803 /* KIP is new in v2.40 */
   2804 typedef struct CK_KIP_PARAMS {
   2805    CK_MECHANISM_PTR pMechanism;
   2806    CK_OBJECT_HANDLE hKey;
   2807    CK_BYTE_PTR pSeed;
   2808    CK_ULONG ulSeedLen;
   2809 } CK_KIP_PARAMS;
   2810 
   2811 typedef CK_KIP_PARAMS CK_PTR CK_KIP_PARAMS_PTR;
   2812 
   2813 /* DSA Param Gen is new for v2.40 */
   2814 typedef struct CK_DSA_PARAMETER_GEN_PARAM {
   2815    CK_MECHANISM_TYPE hash;
   2816    CK_BYTE_PTR pSeed;
   2817    CK_ULONG ulSeedLen;
   2818    CK_ULONG ulIndex;
   2819 } CK_DSA_PARAMETER_GEN_PARAM;
   2820 
   2821 typedef CK_DSA_PARAMETER_GEN_PARAM CK_PTR CK_DSA_PARAMETER_GEN_PARAM_PTR;
   2822 
   2823 /* XXXX_AES_KEY_WRAP is new for v2.40 */
   2824 typedef struct CK_ECDH_AES_KEY_WRAP_PARAMS {
   2825    CK_ULONG ulAESKeyBits;
   2826    CK_EC_KDF_TYPE kdf;
   2827    CK_ULONG ulSharedDataLen;
   2828    CK_BYTE_PTR pSharedData;
   2829 } CK_ECDH_AES_KEY_WRAP_PARAMS;
   2830 
   2831 typedef CK_ECDH_AES_KEY_WRAP_PARAMS CK_PTR CK_ECDH_AES_KEY_WRAP_PARAMS_PTR;
   2832 
   2833 typedef struct CK_RSA_AES_KEY_WRAP_PARAMS {
   2834    CK_ULONG ulAESKeyBits;
   2835    CK_RSA_PKCS_OAEP_PARAMS_PTR pOAEPParams;
   2836 } CK_RSA_AES_KEY_WRAP_PARAMS;
   2837 
   2838 typedef CK_RSA_AES_KEY_WRAP_PARAMS CK_PTR CK_RSA_AES_KEY_WRAP_PARAMS_PTR;
   2839 
   2840 /* GOSTR3410 is new for v2.40 */
   2841 typedef struct CK_GOSTR3410_DERIVE_PARAMS {
   2842    CK_EC_KDF_TYPE kdf;
   2843    CK_BYTE_PTR pPublicData;
   2844    CK_ULONG ulPublicDataLen;
   2845    CK_BYTE_PTR pUKM;
   2846    CK_ULONG ulUKMLen;
   2847 } CK_GOSTR3410_DERIVE_PARAMS;
   2848 
   2849 typedef CK_GOSTR3410_DERIVE_PARAMS CK_PTR CK_GOSTR3410_DERIVE_PARAMS_PTR;
   2850 
   2851 typedef struct CK_GOSTR3410_KEY_WRAP_PARAMS {
   2852    CK_BYTE_PTR pWrapOID;
   2853    CK_ULONG ulWrapOIDLen;
   2854    CK_BYTE_PTR pUKM;
   2855    CK_ULONG ulUKMLen;
   2856    CK_OBJECT_HANDLE hKey;
   2857 } CK_GOSTR3410_KEY_WRAP_PARAMS;
   2858 
   2859 typedef CK_GOSTR3410_KEY_WRAP_PARAMS CK_PTR CK_GOSTR3410_KEY_WRAP_PARAMS_PTR;
   2860 
   2861 /* EDDSA and XEDDSA are new for v3.0 */
   2862 typedef struct CK_EDDSA_PARAMS {
   2863    CK_BBOOL phFlag;
   2864    CK_ULONG ulContextDataLen;
   2865    CK_BYTE_PTR pContextData;
   2866 } CK_EDDSA_PARAMS;
   2867 typedef CK_ULONG CK_XEDDSA_HASH_TYPE;
   2868 typedef CK_EDDSA_PARAMS CK_PTR CK_EDDSA_PARAMS_PTR;
   2869 typedef CK_XEDDSA_HASH_TYPE CK_PTR CK_XEDDSA_HASH_TYPE_PTR;
   2870 
   2871 typedef struct CK_XEDDSA_PARAMS {
   2872    CK_XEDDSA_HASH_TYPE hash;
   2873 } CK_XEDDSA_PARAMS;
   2874 typedef CK_XEDDSA_PARAMS CK_PTR CK_XEDDSA_PARAMS_PTR;
   2875 
   2876 /* X3DH and Ratchet are new in v3.0 */
   2877 typedef CK_ULONG CK_X3DH_KDF_TYPE;
   2878 typedef CK_X3DH_KDF_TYPE CK_PTR CK_X3DH_KDF_TYPE_PTR;
   2879 
   2880 typedef struct CK_X3DH_INITIATE_PARAMS {
   2881    CK_X3DH_KDF_TYPE kdf;
   2882    CK_OBJECT_HANDLE pPeer_identity;
   2883    CK_OBJECT_HANDLE pPeer_prekey;
   2884    CK_BYTE_PTR pPrekey_signature;
   2885    CK_BYTE_PTR pOnetime_key;
   2886    CK_OBJECT_HANDLE pOwn_identity;
   2887    CK_OBJECT_HANDLE pOwn_ephemeral;
   2888 } CK_X3DH_INITIATE_PARAMS;
   2889 
   2890 typedef struct CK_X3DH_RESPOND_PARAMS {
   2891    CK_X3DH_KDF_TYPE kdf;
   2892    CK_BYTE_PTR pIdentity_id;
   2893    CK_BYTE_PTR pPrekey_id;
   2894    CK_BYTE_PTR pOnetime_id;
   2895    CK_OBJECT_HANDLE pInitiator_identity;
   2896    CK_BYTE_PTR pInitiator_ephemeral;
   2897 } CK_X3DH_RESPOND_PARAMS;
   2898 
   2899 typedef CK_ULONG CK_X2RATCHET_KDF_TYPE;
   2900 typedef CK_X2RATCHET_KDF_TYPE CK_PTR CK_X2RATCHET_KDF_TYPE_PTR;
   2901 
   2902 typedef struct CK_X2RATCHET_INITIALIZE_PARAMS {
   2903    CK_BYTE_PTR sk;
   2904    CK_OBJECT_HANDLE peer_public_prekey;
   2905    CK_OBJECT_HANDLE peer_public_identity;
   2906    CK_OBJECT_HANDLE own_public_identity;
   2907    CK_BBOOL bEncryptedHeader;
   2908    CK_ULONG eCurve;
   2909    CK_MECHANISM_TYPE aeadMechanism;
   2910    CK_X2RATCHET_KDF_TYPE kdfMechanism;
   2911 } CK_X2RATCHET_INITIALIZE_PARAMS;
   2912 
   2913 typedef CK_X2RATCHET_INITIALIZE_PARAMS
   2914    CK_PTR CK_X2RATCHET_INITIALIZE_PARAMS_PTR;
   2915 
   2916 typedef struct CK_X2RATCHET_RESPOND_PARAMS {
   2917    CK_BYTE_PTR sk;
   2918    CK_OBJECT_HANDLE own_prekey;
   2919    CK_OBJECT_HANDLE initiator_identity;
   2920    CK_OBJECT_HANDLE own_public_identity;
   2921    CK_BBOOL bEncryptedHeader;
   2922    CK_ULONG eCurve;
   2923    CK_MECHANISM_TYPE aeadMechanism;
   2924    CK_X2RATCHET_KDF_TYPE kdfMechanism;
   2925 } CK_X2RATCHET_RESPOND_PARAMS;
   2926 typedef CK_X2RATCHET_RESPOND_PARAMS
   2927    CK_PTR CK_X2RATCHET_RESPOND_PARAMS_PTR;
   2928 
   2929 /* async - new for v3.2 */
   2930 typedef struct CK_ASYNC_DATA {
   2931    CK_ULONG ulVersion;
   2932    CK_BYTE_PTR pValue;
   2933    CK_ULONG ulValue;
   2934    CK_OBJECT_HANDLE hObject;
   2935    CK_OBJECT_HANDLE hAdditionalObject;
   2936 } CK_ASYNC_DATA;
   2937 typedef CK_ASYNC_DATA CK_PTR CK_ASYNC_DATA_PTR;
   2938 
   2939 /* validation - new for v3.2 */
   2940 typedef CK_ULONG CK_SESSION_VALIDATION_FLAGS_TYPE;
   2941 #define CKS_LAST_VALIDATION_OK 0x00000001UL
   2942 
   2943 typedef CK_ULONG CK_VALIDATION_TYPE;
   2944 typedef CK_VALIDATION_TYPE CK_PTR CK_VALIDATION_TYPE_PTR;
   2945 #define CKV_TYPE_UNSPECIFIED 0x00000000UL
   2946 #define CKV_TYPE_SOFTWARE 0x00000001UL
   2947 #define CKV_TYPE_HARDWARE 0x00000002UL
   2948 #define CKV_TYPE_FIRMWARE 0x00000003UL
   2949 #define CKV_TYPE_HYBRID 0x00000004UL
   2950 
   2951 typedef CK_ULONG CK_VALIDATION_AUTHORITY_TYPE;
   2952 typedef CK_VALIDATION_AUTHORITY_TYPE CK_PTR CK_VALIDATION_AUTHORITY_TYPE_PTR;
   2953 #define CKV_AUTHORITY_TYPE_UNSPECIFIED 0x00000000UL
   2954 #define CKV_AUTHORITY_TYPE_NIST_CMVP 0x00000001UL
   2955 #define CKV_AUTHORITY_TYPE_COMMON_CRITERIA 0x00000002UL
   2956 
   2957 /* trust - new for v3.2 */
   2958 typedef CK_ULONG CK_TRUST;
   2959 #define CKT_TRUST_UNKNOWN 0x00000000UL
   2960 #define CKT_TRUSTED 0x00000001UL
   2961 #define CKT_TRUST_ANCHOR 0x00000002UL
   2962 #define CKT_NOT_TRUSTED 0x00000003UL
   2963 #define CKT_TRUST_MUST_VERIFY_TRUST 0x00000004UL
   2964 
   2965 /* XMSS - new for v3.2*/
   2966 typedef CK_ULONG CK_XMSSMT_PARAMETER_SET_TYPE;
   2967 typedef CK_ULONG CK_XMSS_PARAMETER_SET_TYPE;
   2968 
   2969 /* generic signing parameters - new for v3.2 */
   2970 typedef CK_ULONG CK_HEDGE_TYPE;
   2971 #define CKH_HEDGE_PREFERRED 0x00000000UL
   2972 #define CKH_HEDGE_REQUIRED 0x00000001UL
   2973 #define CKH_DETERMINISTIC_REQUIRED 0x00000002UL
   2974 
   2975 typedef struct CK_SIGN_ADDITIONAL_CONTEXT {
   2976    CK_HEDGE_TYPE hedgeVariant;
   2977    CK_BYTE_PTR pContext;
   2978    CK_ULONG ulContextLen;
   2979 } CK_SIGN_ADDITIONAL_CONTEXT;
   2980 
   2981 typedef struct CK_HASH_SIGN_ADDITIONAL_CONTEXT {
   2982    CK_HEDGE_TYPE hedgeVariant;
   2983    CK_BYTE_PTR pContext;
   2984    CK_ULONG ulContextLen;
   2985    CK_MECHANISM_TYPE hash;
   2986 } CK_HASH_SIGN_ADDITIONAL_CONTEXT;
   2987 
   2988 /* CKA_PARAMETER_SETS for ML-DSA -- new for v3.2*/
   2989 typedef CK_ULONG CK_ML_DSA_PARAMETER_SET_TYPE;
   2990 #define CKP_ML_DSA_44 0x00000001UL
   2991 #define CKP_ML_DSA_65 0x00000002UL
   2992 #define CKP_ML_DSA_87 0x00000003UL
   2993 
   2994 /* CKA_PARAMETER_SETS for SLH-DSA -- new for v3.2*/
   2995 typedef CK_ULONG CK_SLH_DSA_PARAMETER_SET_TYPE;
   2996 #define CKP_SLH_DSA_SHA2_128S 0x00000001UL
   2997 #define CKP_SLH_DSA_SHAKE_128S 0x00000002UL
   2998 #define CKP_SLH_DSA_SHA2_128F 0x00000003UL
   2999 #define CKP_SLH_DSA_SHAKE_128F 0x00000004UL
   3000 #define CKP_SLH_DSA_SHA2_192S 0x00000005UL
   3001 #define CKP_SLH_DSA_SHAKE_192S 0x00000006UL
   3002 #define CKP_SLH_DSA_SHA2_192F 0x00000007UL
   3003 #define CKP_SLH_DSA_SHAKE_192F 0x00000008UL
   3004 #define CKP_SLH_DSA_SHA2_256S 0x00000009UL
   3005 #define CKP_SLH_DSA_SHAKE_256S 0x0000000aUL
   3006 #define CKP_SLH_DSA_SHA2_256F 0x0000000bUL
   3007 #define CKP_SLH_DSA_SHAKE_256F 0x0000000cUL
   3008 
   3009 /* CKA_PARAMETER_SETS for ML-KEM -- new for v3.2*/
   3010 typedef CK_ULONG CK_ML_KEM_PARAMETER_SET_TYPE;
   3011 #define CKP_ML_KEM_512 0x00000001UL
   3012 #define CKP_ML_KEM_768 0x00000002UL
   3013 #define CKP_ML_KEM_1024 0x00000003UL
   3014 
   3015 /* NSS Specific defines */
   3016 /* stuff that for historic reasons is in this header file but should have
   3017 * been in pkcs11n.h */
   3018 #define CKK_INVALID_KEY_TYPE 0xffffffffUL
   3019 
   3020 #include "pkcs11n.h"
   3021 
   3022 /* undo packing */
   3023 #include "pkcs11u.h"
   3024 
   3025 #endif