Commit 529fc95bbd for strongswan.org

commit 529fc95bbdaf48f3c94e9f767e95a638f38bcf3f
Author: Tobias Brunner <tobias@strongswan.org>
Date:   Tue Oct 6 12:20:18 2026 +0200

    pkcs11: Switch to a simpler Public Domain PKCS#11 header

    We don't need the non-Cryptoki-compatible interface, so use the simpler
    Public Domain version from https://github.com/latchset/pkcs11-headers/
    that avoids all those redundant typedefs and defines.  The only
    difference is the removal of the "extern" function declaration as we
    strictly use function pointers via `dlsym()`.  This also updates it to
    version 3.2 of the standard (includes support for newer algorithms
    like ML-KEM and ML-DSA).

diff --git a/src/libstrongswan/plugins/pkcs11/pkcs11.h b/src/libstrongswan/plugins/pkcs11/pkcs11.h
index b27bd84871..d8a7197ca3 100644
--- a/src/libstrongswan/plugins/pkcs11/pkcs11.h
+++ b/src/libstrongswan/plugins/pkcs11/pkcs11.h
@@ -1,1846 +1,2622 @@
-/* pkcs11.h
-   Copyright 2006, 2007 g10 Code GmbH
-   Copyright 2006 Andreas Jellinghaus
+/* This header is Public Domain, the main contents are from
+ * https://github.com/latchset/pkcs11-headers/ */

-   This file is free software; as a special exception the author gives
-   unlimited permission to copy and/or distribute it, with or without
-   modifications, as long as this notice is preserved.
-
-   This file is distributed in the hope that it will be useful, but
-   WITHOUT ANY WARRANTY, to the extent permitted by law; without even
-   the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR
-   PURPOSE.  */
+#ifndef PKCS11_H
+#define PKCS11_H 1

-/* Please submit changes back to the Scute project at
-   http://www.scute.org/ (or send them to marcus@g10code.com), so that
-   they can be picked up by other projects from there as well.  */
+#if defined(__cplusplus)
+extern "C" {
+#endif

-/* This file is a modified implementation of the PKCS #11 standard by
-   RSA Security Inc.  It is mostly a drop-in replacement, with the
-   following change:
+/* System dependencies.  */
+#if defined(_WIN32) || defined(CRYPTOKI_FORCE_WIN32)

-   This header file does not require any macro definitions by the user
-   (like CK_DEFINE_FUNCTION etc).  In fact, it defines those macros
-   for you (if useful, some are missing, let me know if you need
-   more).
+/* There is a matching pop below.  */
+#pragma pack(push, cryptoki, 1)

-   There is an additional API available that does comply better to the
-   GNU coding standard.  It can be switched on by defining
-   CRYPTOKI_GNU before including this header file.  For this, the
-   following changes are made to the specification:
+#ifdef CRYPTOKI_EXPORTS
+#define CK_SPEC __declspec(dllexport)
+#else
+#define CK_SPEC __declspec(dllimport)
+#endif

-   All structure types are changed to a "struct ck_foo" where CK_FOO
-   is the type name in PKCS #11.
+#else

-   All non-structure types are changed to ck_foo_t where CK_FOO is the
-   lowercase version of the type name in PKCS #11.  The basic types
-   (CK_ULONG et al.) are removed without substitute.
+#define CK_SPEC

-   All members of structures are modified in the following way: Type
-   indication prefixes are removed, and underscore characters are
-   inserted before words.  Then the result is lowercased.
+#endif

-   Note that function names are still in the original case, as they
-   need for ABI compatibility.
+#define PKCS11_DEPRECATED

-   CK_FALSE, CK_TRUE and NULL_PTR are removed without substitute.  Use
-   <stdbool.h>.
+/* Main declarations, only difference to the source are the removed "extern"
+ * function declarations */
+#define CRYPTOKI_VERSION_MAJOR 3
+#define CRYPTOKI_VERSION_MINOR 2
+#define CRYPTOKI_VERSION_AMENDMENT 0

-   If CRYPTOKI_COMPAT is defined before including this header file,
-   then none of the API changes above take place, and the API is the
-   one defined by the PKCS #11 standard.  */
+/* Basic types */
+typedef unsigned char CK_BBOOL;
+typedef unsigned char CK_BYTE;
+typedef unsigned char CK_CHAR;
+typedef unsigned char CK_UTF8CHAR;
+typedef unsigned long int CK_ULONG;

-#ifndef PKCS11_H
-#define PKCS11_H 1
+typedef CK_BBOOL * CK_BBOOL_PTR;
+typedef CK_BYTE * CK_BYTE_PTR;
+typedef CK_CHAR * CK_CHAR_PTR;
+typedef CK_UTF8CHAR * CK_UTF8CHAR_PTR;
+typedef CK_ULONG * CK_ULONG_PTR;

-#if defined(__cplusplus)
-extern "C" {
-#endif
+/* Basic defines */
+#define NULL_PTR ((void *)0)
+typedef void * CK_VOID_PTR;
+typedef void ** CK_VOID_PTR_PTR;

+#define CK_EFFECTIVELY_INFINITE 0UL
+#define CK_UNAVAILABLE_INFORMATION ~0UL
+#define CK_INVALID_HANDLE 0UL
+#define CK_TRUE 1
+#define CK_FALSE 0

-/* The version of cryptoki we implement.  The revision is changed with
-   each modification of this file.  If you do not use the "official"
-   version of this file, please consider deleting the revision macro
-   (you may use a macro with a different name to keep track of your
-   versions).  */
-#define CRYPTOKI_VERSION_MAJOR          3
-#define CRYPTOKI_VERSION_MINOR          0
-#define CRYPTOKI_VERSION_REVISION       0
+/* CK_ types in alphabetical order */
+#define ULONGDEF(__name__) \
+typedef CK_ULONG __name__; \
+typedef __name__ * __name__ ## _PTR;
+
+ULONGDEF(CK_ATTRIBUTE_TYPE);
+ULONGDEF(CK_CERTIFICATE_CATEGORY);
+ULONGDEF(CK_CERTIFICATE_TYPE);
+ULONGDEF(CK_EC_KDF_TYPE);
+ULONGDEF(CK_EXTRACT_PARAMS);
+ULONGDEF(CK_FLAGS);
+ULONGDEF(CK_GENERATOR_FUNCTION);
+ULONGDEF(CK_HEDGE_TYPE);
+ULONGDEF(CK_HSS_LEVELS);
+ULONGDEF(CK_HW_FEATURE_TYPE);
+ULONGDEF(CK_JAVA_MIDP_SECURITY_DOMAIN);
+ULONGDEF(CK_KEY_TYPE);
+ULONGDEF(CK_LMS_TYPE);
+ULONGDEF(CK_LMOTS_TYPE);
+ULONGDEF(CK_MAC_GENERAL_PARAMS);
+ULONGDEF(CK_MECHANISM_TYPE);
+ULONGDEF(CK_ML_DSA_PARAMETER_SET_TYPE);
+ULONGDEF(CK_ML_KEM_PARAMETER_SET_TYPE);
+ULONGDEF(CK_NOTIFICATION);
+ULONGDEF(CK_OBJECT_CLASS);
+ULONGDEF(CK_OBJECT_HANDLE);
+ULONGDEF(CK_OTP_PARAM_TYPE);
+ULONGDEF(CK_PKCS5_PBKD2_PSEUDO_RANDOM_FUNCTION_TYPE);
+ULONGDEF(CK_PKCS5_PBKDF2_SALT_SOURCE_TYPE);
+ULONGDEF(CK_PRF_DATA_TYPE);
+ULONGDEF(CK_PROFILE_ID);
+ULONGDEF(CK_RC2_PARAMS);
+ULONGDEF(CK_RSA_PKCS_MGF_TYPE);
+ULONGDEF(CK_RSA_PKCS_OAEP_SOURCE_TYPE);
+ULONGDEF(CK_RV);
+ULONGDEF(CK_SESSION_HANDLE);
+ULONGDEF(CK_SESSION_VALIDATION_FLAGS_TYPE);
+ULONGDEF(CK_SLH_DSA_PARAMETER_SET_TYPE);
+ULONGDEF(CK_SLOT_ID);
+ULONGDEF(CK_SP800_108_DKM_LENGTH_METHOD);
+ULONGDEF(CK_STATE);
+ULONGDEF(CK_TRUST);
+ULONGDEF(CK_USER_TYPE);
+ULONGDEF(CK_VALIDATION_AUTHORITY_TYPE);
+ULONGDEF(CK_VALIDATION_TYPE);
+ULONGDEF(CK_X2RATCHET_KDF_TYPE);
+ULONGDEF(CK_X3DH_KDF_TYPE);
+ULONGDEF(CK_X9_42_DH_KDF_TYPE);
+ULONGDEF(CK_XEDDSA_HASH_TYPE);
+ULONGDEF(CK_XMSSMT_PARAMETER_SET_TYPE);
+ULONGDEF(CK_XMSS_PARAMETER_SET_TYPE);
+
+/* domain specific values and constants */
+
+/* CK (certificate) */
+#define CK_CERTIFICATE_CATEGORY_UNSPECIFIED 0UL
+#define CK_CERTIFICATE_CATEGORY_TOKEN_USER 1UL
+#define CK_CERTIFICATE_CATEGORY_AUTHORITY 2UL
+#define CK_CERTIFICATE_CATEGORY_OTHER_ENTITY 3UL
+
+/* CK (OTP) */
+#define CK_OTP_VALUE 0UL
+#define CK_OTP_PIN 1UL
+#define CK_OTP_CHALLENGE 2UL
+#define CK_OTP_TIME 3UL
+#define CK_OTP_COUNTER 4UL
+#define CK_OTP_FLAGS 5UL
+#define CK_OTP_OUTPUT_LENGTH 6UL
+#define CK_OTP_OUTPUT_FORMAT 7UL
+
+/* CK (OTP format) */
+#define CK_OTP_FORMAT_DECIMAL 0UL
+#define CK_OTP_FORMAT_HEXADECIMAL 1UL
+#define CK_OTP_FORMAT_ALPHANUMERIC 2UL
+#define CK_OTP_FORMAT_BINARY 3UL
+
+/* CK (OTP requirement) */
+#define CK_OTP_PARAM_IGNORED 0UL
+#define CK_OTP_PARAM_OPTIONAL 1UL
+#define CK_OTP_PARAM_MANDATORY 2UL
+
+/* CK (security) */
+#define CK_SECURITY_DOMAIN_UNSPECIFIED 0UL
+#define CK_SECURITY_DOMAIN_MANUFACTURER 1UL
+#define CK_SECURITY_DOMAIN_OPERATOR 2UL
+#define CK_SECURITY_DOMAIN_THIRD_PARTY 3UL
+
+/* CK (SP800 KDF) */
+#define CK_SP800_108_ITERATION_VARIABLE 0x00000001UL
+#define CK_SP800_108_OPTIONAL_COUNTER 0x00000002UL
+#define CK_SP800_108_COUNTER 0x00000002UL
+#define CK_SP800_108_DKM_LENGTH 0x00000003UL
+#define CK_SP800_108_BYTE_ARRAY 0x00000004UL
+#define CK_SP800_108_KEY_HANDLE 0x00000005UL
+
+/* CK (SP800 DKM) */
+#define CK_SP800_108_DKM_LENGTH_SUM_OF_KEYS 0x00000001UL
+#define CK_SP800_108_DKM_LENGTH_SUM_OF_SEGMENTS 0x00000002UL
+
+/* CKA */
+#define CKA_CLASS 0x00000000UL
+#define CKA_TOKEN 0x00000001UL
+#define CKA_PRIVATE 0x00000002UL
+#define CKA_LABEL 0x00000003UL
+#define CKA_UNIQUE_ID 0x00000004UL
+#define CKA_APPLICATION 0x00000010UL
+#define CKA_VALUE 0x00000011UL
+#define CKA_OBJECT_ID 0x00000012UL
+#define CKA_CERTIFICATE_TYPE 0x00000080UL
+#define CKA_ISSUER 0x00000081UL
+#define CKA_SERIAL_NUMBER 0x00000082UL
+#define CKA_AC_ISSUER 0x00000083UL
+#define CKA_OWNER 0x00000084UL
+#define CKA_ATTR_TYPES 0x00000085UL
+#define CKA_TRUSTED 0x00000086UL
+#define CKA_CERTIFICATE_CATEGORY 0x00000087UL
+#define CKA_JAVA_MIDP_SECURITY_DOMAIN 0x00000088UL
+#define CKA_URL 0x00000089UL
+#define CKA_HASH_OF_SUBJECT_PUBLIC_KEY 0x0000008AUL
+#define CKA_HASH_OF_ISSUER_PUBLIC_KEY 0x0000008BUL
+#define CKA_NAME_HASH_ALGORITHM 0x0000008CUL
+#define CKA_CHECK_VALUE 0x00000090UL
+#define CKA_KEY_TYPE 0x00000100UL
+#define CKA_SUBJECT 0x00000101UL
+#define CKA_ID 0x00000102UL
+#define CKA_SENSITIVE 0x00000103UL
+#define CKA_ENCRYPT 0x00000104UL
+#define CKA_DECRYPT 0x00000105UL
+#define CKA_WRAP 0x00000106UL
+#define CKA_UNWRAP 0x00000107UL
+#define CKA_SIGN 0x00000108UL
+#define CKA_SIGN_RECOVER 0x00000109UL
+#define CKA_VERIFY 0x0000010AUL
+#define CKA_VERIFY_RECOVER 0x0000010BUL
+#define CKA_DERIVE 0x0000010CUL
+#define CKA_START_DATE 0x00000110UL
+#define CKA_END_DATE 0x00000111UL
+#define CKA_MODULUS 0x00000120UL
+#define CKA_MODULUS_BITS 0x00000121UL
+#define CKA_PUBLIC_EXPONENT 0x00000122UL
+#define CKA_PRIVATE_EXPONENT 0x00000123UL
+#define CKA_PRIME_1 0x00000124UL
+#define CKA_PRIME_2 0x00000125UL
+#define CKA_EXPONENT_1 0x00000126UL
+#define CKA_EXPONENT_2 0x00000127UL
+#define CKA_COEFFICIENT 0x00000128UL
+#define CKA_PUBLIC_KEY_INFO 0x00000129UL
+#define CKA_PRIME 0x00000130UL
+#define CKA_SUBPRIME 0x00000131UL
+#define CKA_BASE 0x00000132UL
+#define CKA_PRIME_BITS 0x00000133UL
+#define CKA_SUBPRIME_BITS 0x00000134UL
+#define CKA_SUB_PRIME_BITS 0x00000134UL
+#define CKA_VALUE_BITS 0x00000160UL
+#define CKA_VALUE_LEN 0x00000161UL
+#define CKA_EXTRACTABLE 0x00000162UL
+#define CKA_LOCAL 0x00000163UL
+#define CKA_NEVER_EXTRACTABLE 0x00000164UL
+#define CKA_ALWAYS_SENSITIVE 0x00000165UL
+#define CKA_KEY_GEN_MECHANISM 0x00000166UL
+#define CKA_MODIFIABLE 0x00000170UL
+#define CKA_COPYABLE 0x00000171UL
+#define CKA_DESTROYABLE 0x00000172UL
+#define CKA_EC_PARAMS 0x00000180UL
+#define CKA_EC_POINT 0x00000181UL
+#define CKA_ALWAYS_AUTHENTICATE 0x00000202UL
+#define CKA_WRAP_WITH_TRUSTED 0x00000210UL
+#define CKA_OTP_FORMAT 0x00000220UL
+#define CKA_OTP_LENGTH 0x00000221UL
+#define CKA_OTP_TIME_INTERVAL 0x00000222UL
+#define CKA_OTP_USER_FRIENDLY_MODE 0x00000223UL
+#define CKA_OTP_CHALLENGE_REQUIREMENT 0x00000224UL
+#define CKA_OTP_TIME_REQUIREMENT 0x00000225UL
+#define CKA_OTP_COUNTER_REQUIREMENT 0x00000226UL
+#define CKA_OTP_PIN_REQUIREMENT 0x00000227UL
+#define CKA_OTP_COUNTER 0x0000022EUL
+#define CKA_OTP_TIME 0x0000022FUL
+#define CKA_OTP_USER_IDENTIFIER 0x0000022AUL
+#define CKA_OTP_SERVICE_IDENTIFIER 0x0000022BUL
+#define CKA_OTP_SERVICE_LOGO 0x0000022CUL
+#define CKA_OTP_SERVICE_LOGO_TYPE 0x0000022DUL
+#define CKA_GOSTR3410_PARAMS 0x00000250UL
+#define CKA_GOSTR3411_PARAMS 0x00000251UL
+#define CKA_GOST28147_PARAMS 0x00000252UL
+#define CKA_HW_FEATURE_TYPE 0x00000300UL
+#define CKA_RESET_ON_INIT 0x00000301UL
+#define CKA_HAS_RESET 0x00000302UL
+#define CKA_PIXEL_X 0x00000400UL
+#define CKA_PIXEL_Y 0x00000401UL
+#define CKA_RESOLUTION 0x00000402UL
+#define CKA_CHAR_ROWS 0x00000403UL
+#define CKA_CHAR_COLUMNS 0x00000404UL
+#define CKA_COLOR 0x00000405UL
+#define CKA_BITS_PER_PIXEL 0x00000406UL
+#define CKA_CHAR_SETS 0x00000480UL
+#define CKA_ENCODING_METHODS 0x00000481UL
+#define CKA_MIME_TYPES 0x00000482UL
+#define CKA_MECHANISM_TYPE 0x00000500UL
+#define CKA_REQUIRED_CMS_ATTRIBUTES 0x00000501UL
+#define CKA_DEFAULT_CMS_ATTRIBUTES 0x00000502UL
+#define CKA_SUPPORTED_CMS_ATTRIBUTES 0x00000503UL
+#define CKA_PROFILE_ID 0x00000601UL
+#define CKA_X2RATCHET_BAG 0x00000602UL
+#define CKA_X2RATCHET_BAGSIZE 0x00000603UL
+#define CKA_X2RATCHET_BOBS1STMSG 0x00000604UL
+#define CKA_X2RATCHET_CKR 0x00000605UL
+#define CKA_X2RATCHET_CKS 0x00000606UL
+#define CKA_X2RATCHET_DHP 0x00000607UL
+#define CKA_X2RATCHET_DHR 0x00000608UL
+#define CKA_X2RATCHET_DHS 0x00000609UL
+#define CKA_X2RATCHET_HKR 0x0000060AUL
+#define CKA_X2RATCHET_HKS 0x0000060BUL
+#define CKA_X2RATCHET_ISALICE 0x0000060CUL
+#define CKA_X2RATCHET_NHKR 0x0000060DUL
+#define CKA_X2RATCHET_NHKS 0x0000060EUL
+#define CKA_X2RATCHET_NR 0x0000060FUL
+#define CKA_X2RATCHET_NS 0x00000610UL
+#define CKA_X2RATCHET_PNS 0x00000611UL
+#define CKA_X2RATCHET_RK 0x00000612UL
+#define CKA_HSS_LEVELS 0x00000617UL
+#define CKA_HSS_LMS_TYPE 0x00000618UL
+#define CKA_HSS_LMOTS_TYPE 0x00000619UL
+#define CKA_HSS_LMS_TYPES 0x0000061AUL
+#define CKA_HSS_LMOTS_TYPES 0x0000061BUL
+#define CKA_HSS_KEYS_REMAINING 0x0000061CUL
+#define CKA_PARAMETER_SET 0x0000061DUL
+#define CKA_OBJECT_VALIDATION_FLAGS 0x0000061EUL
+#define CKA_VALIDATION_TYPE 0x0000061FUL
+#define CKA_VALIDATION_VERSION 0x00000620UL
+#define CKA_VALIDATION_LEVEL 0x00000621UL
+#define CKA_VALIDATION_MODULE_ID 0x00000622UL
+#define CKA_VALIDATION_FLAG 0x00000623UL
+#define CKA_VALIDATION_AUTHORITY_TYPE 0x00000624UL
+#define CKA_VALIDATION_COUNTRY 0x00000625UL
+#define CKA_VALIDATION_CERTIFICATE_IDENTIFIER 0x00000626UL
+#define CKA_VALIDATION_CERTIFICATE_URI 0x00000627UL
+#define CKA_VALIDATION_VENDOR_URI 0x00000628UL
+#define CKA_VALIDATION_PROFILE 0x00000629UL
+#define CKA_ENCAPSULATE_TEMPLATE 0x0000062AUL
+#define CKA_DECAPSULATE_TEMPLATE 0x0000062BUL
+#define CKA_TRUST_SERVER_AUTH 0x0000062CUL
+#define CKA_TRUST_CLIENT_AUTH 0x0000062DUL
+#define CKA_TRUST_CODE_SIGNING 0x0000062EUL
+#define CKA_TRUST_EMAIL_PROTECTION 0x0000062FUL
+#define CKA_TRUST_IPSEC_IKE 0x00000630UL
+#define CKA_TRUST_TIME_STAMPING 0x00000631UL
+#define CKA_TRUST_OCSP_SIGNING 0x00000632UL
+#define CKA_ENCAPSULATE 0x00000633UL
+#define CKA_DECAPSULATE 0x00000634UL
+#define CKA_HASH_OF_CERTIFICATE 0x00000635UL
+#define CKA_PUBLIC_CRC64_VALUE 0x00000636UL
+#define CKA_SEED 0x00000637UL
+#define CKA_VENDOR_DEFINED 0x80000000UL
+/* Array attributes */
+#define CKA_WRAP_TEMPLATE 0x40000211UL
+#define CKA_UNWRAP_TEMPLATE 0x40000212UL
+#define CKA_DERIVE_TEMPLATE 0x40000213UL
+#define CKA_ALLOWED_MECHANISMS 0x40000600UL
+/* Deprecated */
+#ifdef PKCS11_DEPRECATED
+#define CKA_ECDSA_PARAMS 0x00000180UL
+#define CKA_SECONDARY_AUTH 0x00000200UL
+#define CKA_AUTH_PIN_FLAGS 0x00000201UL
+#endif

+/* CKC */
+#define CKC_X_509 0x00000000UL
+#define CKC_X_509_ATTR_CERT 0x00000001UL
+#define CKC_WTLS 0x00000002UL
+#define CKC_VENDOR_DEFINED 0x80000000UL
+
+/* CKD */
+#define CKD_NULL 0x00000001UL
+#define CKD_SHA1_KDF 0x00000002UL
+#define CKD_SHA1_KDF_ASN1 0x00000003UL
+#define CKD_SHA1_KDF_CONCATENATE 0x00000004UL
+#define CKD_SHA224_KDF 0x00000005UL
+#define CKD_SHA256_KDF 0x00000006UL
+#define CKD_SHA384_KDF 0x00000007UL
+#define CKD_SHA512_KDF 0x00000008UL
+#define CKD_CPDIVERSIFY_KDF 0x00000009UL
+#define CKD_SHA3_224_KDF 0x0000000AUL
+#define CKD_SHA3_256_KDF 0x0000000BUL
+#define CKD_SHA3_384_KDF 0x0000000CUL
+#define CKD_SHA3_512_KDF 0x0000000DUL
+#define CKD_SHA1_KDF_SP800 0x0000000EUL
+#define CKD_SHA224_KDF_SP800 0x0000000FUL
+#define CKD_SHA256_KDF_SP800 0x00000010UL
+#define CKD_SHA384_KDF_SP800 0x00000011UL
+#define CKD_SHA512_KDF_SP800 0x00000012UL
+#define CKD_SHA3_224_KDF_SP800 0x00000013UL
+#define CKD_SHA3_256_KDF_SP800 0x00000014UL
+#define CKD_SHA3_384_KDF_SP800 0x00000015UL
+#define CKD_SHA3_512_KDF_SP800 0x00000016UL
+#define CKD_BLAKE2B_160_KDF 0x00000017UL
+#define CKD_BLAKE2B_256_KDF 0x00000018UL
+#define CKD_BLAKE2B_384_KDF 0x00000019UL
+#define CKD_BLAKE2B_512_KDF 0x0000001AUL
+
+/* CFK (array attributes) */
+#define CKF_ARRAY_ATTRIBUTE 0x40000000UL
+
+/* CKF (capabilities) */
+#define CKF_LIBRARY_CANT_CREATE_OS_THREADS 0x00000001UL
+#define CKF_OS_LOCKING_OK 0x00000002UL
+
+/* CKF (HKDF) */
+#define CKF_HKDF_SALT_NULL 0x00000001UL
+#define CKF_HKDF_SALT_DATA 0x00000002UL
+#define CKF_HKDF_SALT_KEY 0x00000004UL
+
+/* CKF (interface) */
+#define CKF_INTERFACE_FORK_SAFE 0x00000001UL
+
+/* CKF (mechanism) */
+#define CKF_HW 0x00000001UL
+#define CKF_MESSAGE_ENCRYPT 0x00000002UL
+#define CKF_MESSAGE_DECRYPT 0x00000004UL
+#define CKF_MESSAGE_SIGN 0x00000008UL
+#define CKF_MESSAGE_VERIFY 0x00000010UL
+#define CKF_MULTI_MESSAGE 0x00000020UL
+#define CKF_MULTI_MESSGE 0x00000020UL
+#define CKF_FIND_OBJECTS 0x00000040UL
+#define CKF_ENCRYPT 0x00000100UL
+#define CKF_DECRYPT 0x00000200UL
+#define CKF_DIGEST 0x00000400UL
+#define CKF_SIGN 0x00000800UL
+#define CKF_SIGN_RECOVER 0x00001000UL
+#define CKF_VERIFY 0x00002000UL
+#define CKF_VERIFY_RECOVER 0x00004000UL
+#define CKF_GENERATE 0x00008000UL
+#define CKF_GENERATE_KEY_PAIR 0x00010000UL
+#define CKF_WRAP 0x00020000UL
+#define CKF_UNWRAP 0x00040000UL
+#define CKF_DERIVE 0x00080000UL
+#define CKF_EC_F_P 0x00100000UL
+#define CKF_EC_F_2M 0x00200000UL
+#define CKF_EC_ECPARAMETERS 0x00400000UL
+#define CKF_EC_OID 0x00800000UL
+#define CKF_EC_UNCOMPRESS 0x01000000UL
+#define CKF_EC_COMPRESS 0x02000000UL
+#define CKF_EC_CURVENAME 0x04000000UL
+#define CKF_ENCAPSULATE 0x10000000UL
+#define CKF_DECAPSULATE 0x20000000UL
+#define CKF_EXTENSION 0x80000000UL
+/* Deprecated */
+#ifdef PKCS11_DEPRECATED
+#define CKF_EC_NAMEDCURVE 0x00800000U
+#endif

-/* Compatibility interface is default, unless CRYPTOKI_GNU is
-   given.  */
-#ifndef CRYPTOKI_GNU
-#ifndef CRYPTOKI_COMPAT
-#define CRYPTOKI_COMPAT 1
+/* CKF (message) */
+#define CKF_END_OF_MESSAGE 0x00000001UL
+
+/* CKF (OTP) */
+#define CKF_NEXT_OTP 0x00000001UL
+#define CKF_EXCLUDE_TIME 0x00000002UL
+#define CKF_EXCLUDE_COUNTER 0x00000004UL
+#define CKF_EXCLUDE_CHALLENGE 0x00000008UL
+#define CKF_EXCLUDE_PIN 0x00000010UL
+#define CKF_USER_FRIENDLY_OTP 0x00000020UL
+
+/* CKF (parameters to functions) */
+#define CKF_DONT_BLOCK 1
+
+/* CKF (session) */
+#define CKF_RW_SESSION 0x00000002UL
+#define CKF_SERIAL_SESSION 0x00000004UL
+#define CKF_ASYNC_SESSION 0x00000008UL
+
+/* CFK (slot) */
+#define CKF_TOKEN_PRESENT 0x00000001UL
+#define CKF_REMOVABLE_DEVICE 0x00000002UL
+#define CKF_HW_SLOT 0x00000004UL
+
+/* CKF (token) */
+#define CKF_RNG 0x00000001UL
+#define CKF_WRITE_PROTECTED 0x00000002UL
+#define CKF_LOGIN_REQUIRED 0x00000004UL
+#define CKF_USER_PIN_INITIALIZED 0x00000008UL
+#define CKF_RESTORE_KEY_NOT_NEEDED 0x00000020UL
+#define CKF_CLOCK_ON_TOKEN 0x00000040UL
+#define CKF_PROTECTED_AUTHENTICATION_PATH 0x00000100UL
+#define CKF_DUAL_CRYPTO_OPERATIONS 0x00000200UL
+#define CKF_TOKEN_INITIALIZED 0x00000400UL
+#define CKF_SECONDARY_AUTHENTICATION 0x00000800UL
+#define CKF_USER_PIN_COUNT_LOW 0x00010000UL
+#define CKF_USER_PIN_FINAL_TRY 0x00020000UL
+#define CKF_USER_PIN_LOCKED 0x00040000UL
+#define CKF_USER_PIN_TO_BE_CHANGED 0x00080000UL
+#define CKF_SO_PIN_COUNT_LOW 0x00100000UL
+#define CKF_SO_PIN_FINAL_TRY 0x00200000UL
+#define CKF_SO_PIN_LOCKED 0x00400000UL
+#define CKF_SO_PIN_TO_BE_CHANGED 0x00800000UL
+#define CKF_ERROR_STATE 0x01000000UL
+#define CKF_SEED_RANDOM_REQUIRED 0x02000000UL
+#define CKF_ASYNC_SESSION_SUPPORTED 0x04000000UL
+
+/* CKG (GCM) */
+#define CKG_NO_GENERATE 0x00000000UL
+#define CKG_GENERATE 0x00000001UL
+#define CKG_GENERATE_COUNTER 0x00000002UL
+#define CKG_GENERATE_RANDOM 0x00000003UL
+#define CKG_GENERATE_COUNTER_XOR 0x00000004UL
+
+/* CKG (MFG) */
+#define CKG_MGF1_SHA1 0x00000001UL
+#define CKG_MGF1_SHA256 0x00000002UL
+#define CKG_MGF1_SHA384 0x00000003UL
+#define CKG_MGF1_SHA512 0x00000004UL
+#define CKG_MGF1_SHA224 0x00000005UL
+#define CKG_MGF1_SHA3_224 0x00000006UL
+#define CKG_MGF1_SHA3_256 0x00000007UL
+#define CKG_MGF1_SHA3_384 0x00000008UL
+#define CKG_MGF1_SHA3_512 0x00000009UL
+
+/* CKH (clock) */
+#define CKH_MONOTONIC_COUNTER 0x00000001UL
+#define CKH_CLOCK 0x00000002UL
+#define CKH_USER_INTERFACE 0x00000003UL
+#define CKH_VENDOR_DEFINED 0x80000000UL
+
+/* CKH (hedge type) */
+#define CKH_HEDGE_PREFERRED 0x00000000UL
+#define CKH_HEDGE_REQUIRED 0x00000001UL
+#define CKH_DETERMINISTIC_REQUIRED 0x00000002UL
+
+/* CKK */
+#define CKK_RSA 0x00000000UL
+#define CKK_DSA 0x00000001UL
+#define CKK_DH 0x00000002UL
+#define CKK_EC 0x00000003UL
+#define CKK_X9_42_DH 0x00000004UL
+#define CKK_KEA 0x00000005UL
+#define CKK_GENERIC_SECRET 0x00000010UL
+#define CKK_RC2 0x00000011UL
+#define CKK_RC4 0x00000012UL
+#define CKK_DES 0x00000013UL
+#define CKK_DES2 0x00000014UL
+#define CKK_DES3 0x00000015UL
+#define CKK_CAST 0x00000016UL
+#define CKK_CAST3 0x00000017UL
+#define CKK_CAST128 0x00000018UL
+#define CKK_RC5 0x00000019UL
+#define CKK_IDEA 0x0000001AUL
+#define CKK_SKIPJACK 0x0000001BUL
+#define CKK_BATON 0x0000001CUL
+#define CKK_JUNIPER 0x0000001DUL
+#define CKK_CDMF 0x0000001EUL
+#define CKK_AES 0x0000001FUL
+#define CKK_BLOWFISH 0x00000020UL
+#define CKK_TWOFISH 0x00000021UL
+#define CKK_SECURID 0x00000022UL
+#define CKK_HOTP 0x00000023UL
+#define CKK_ACTI 0x00000024UL
+#define CKK_CAMELLIA 0x00000025UL
+#define CKK_ARIA 0x00000026UL
+#define CKK_MD5_HMAC 0x00000027UL
+#define CKK_SHA_1_HMAC 0x00000028UL
+#define CKK_RIPEMD128_HMAC 0x00000029UL
+#define CKK_RIPEMD160_HMAC 0x0000002AUL
+#define CKK_SHA256_HMAC 0x0000002BUL
+#define CKK_SHA384_HMAC 0x0000002CUL
+#define CKK_SHA512_HMAC 0x0000002DUL
+#define CKK_SHA224_HMAC 0x0000002EUL
+#define CKK_SEED 0x0000002FUL
+#define CKK_GOSTR3410 0x00000030UL
+#define CKK_GOSTR3411 0x00000031UL
+#define CKK_GOST28147 0x00000032UL
+#define CKK_CHACHA20 0x00000033UL
+#define CKK_POLY1305 0x00000034UL
+#define CKK_AES_XTS 0x00000035UL
+#define CKK_SHA3_224_HMAC 0x00000036UL
+#define CKK_SHA3_256_HMAC 0x00000037UL
+#define CKK_SHA3_384_HMAC 0x00000038UL
+#define CKK_SHA3_512_HMAC 0x00000039UL
+#define CKK_BLAKE2B_160_HMAC 0x0000003AUL
+#define CKK_BLAKE2B_256_HMAC 0x0000003BUL
+#define CKK_BLAKE2B_384_HMAC 0x0000003CUL
+#define CKK_BLAKE2B_512_HMAC 0x0000003DUL
+#define CKK_SALSA20 0x0000003EUL
+#define CKK_X2RATCHET 0x0000003FUL
+#define CKK_EC_EDWARDS 0x00000040UL
+#define CKK_EC_MONTGOMERY 0x00000041UL
+#define CKK_HKDF 0x00000042UL
+#define CKK_SHA512_224_HMAC 0x00000043UL
+#define CKK_SHA512_256_HMAC 0x00000044UL
+#define CKK_SHA512_T_HMAC 0x00000045UL
+#define CKK_HSS 0x00000046UL
+#define CKK_XMSS 0x00000047UL
+#define CKK_XMSSMT 0x00000048UL
+#define CKK_ML_KEM 0x00000049UL
+#define CKK_ML_DSA 0x0000004AUL
+#define CKK_SLH_DSA 0x0000004BUL
+#define CKK_VENDOR_DEFINED 0x80000000UL
+/* Deprecated */
+#ifdef PKCS11_DEPRECATED
+#define CKK_ECDSA 0x00000003UL
+#define CKK_CAST5 0x00000018UL
 #endif
+
+/* CKM */
+#define CKM_RSA_PKCS_KEY_PAIR_GEN 0x00000000UL
+#define CKM_RSA_PKCS 0x00000001UL
+#define CKM_RSA_9796 0x00000002UL
+#define CKM_RSA_X_509 0x00000003UL
+#define CKM_MD2_RSA_PKCS 0x00000004UL
+#define CKM_MD5_RSA_PKCS 0x00000005UL
+#define CKM_SHA1_RSA_PKCS 0x00000006UL
+#define CKM_RIPEMD128_RSA_PKCS 0x00000007UL
+#define CKM_RIPEMD160_RSA_PKCS 0x00000008UL
+#define CKM_RSA_PKCS_OAEP 0x00000009UL
+#define CKM_RSA_X9_31_KEY_PAIR_GEN 0x0000000AUL
+#define CKM_RSA_X9_31 0x0000000BUL
+#define CKM_SHA1_RSA_X9_31 0x0000000CUL
+#define CKM_RSA_PKCS_PSS 0x0000000DUL
+#define CKM_SHA1_RSA_PKCS_PSS 0x0000000EUL
+#define CKM_ML_KEM_KEY_PAIR_GEN 0x0000000FUL
+#define CKM_DSA_KEY_PAIR_GEN 0x00000010UL
+#define CKM_DSA 0x00000011UL
+#define CKM_DSA_SHA1 0x00000012UL
+#define CKM_DSA_SHA224 0x00000013UL
+#define CKM_DSA_SHA256 0x00000014UL
+#define CKM_DSA_SHA384 0x00000015UL
+#define CKM_DSA_SHA512 0x00000016UL
+#define CKM_ML_KEM 0x00000017UL
+#define CKM_DSA_SHA3_224 0x00000018UL
+#define CKM_DSA_SHA3_256 0x00000019UL
+#define CKM_DSA_SHA3_384 0x0000001AUL
+#define CKM_DSA_SHA3_512 0x0000001BUL
+#define CKM_ML_DSA_KEY_PAIR_GEN 0x0000001CUL
+#define CKM_ML_DSA 0x0000001DUL
+#define CKM_HASH_ML_DSA 0x0000001FUL
+#define CKM_DH_PKCS_KEY_PAIR_GEN 0x00000020UL
+#define CKM_DH_PKCS_DERIVE 0x00000021UL
+#define CKM_HASH_ML_DSA_SHA224 0x00000023UL
+#define CKM_HASH_ML_DSA_SHA256 0x00000024UL
+#define CKM_HASH_ML_DSA_SHA384 0x00000025UL
+#define CKM_HASH_ML_DSA_SHA512 0x00000026UL
+#define CKM_HASH_ML_DSA_SHA3_224 0x00000027UL
+#define CKM_HASH_ML_DSA_SHA3_256 0x00000028UL
+#define CKM_HASH_ML_DSA_SHA3_384 0x00000029UL
+#define CKM_HASH_ML_DSA_SHA3_512 0x0000002AUL
+#define CKM_HASH_ML_DSA_SHAKE128 0x0000002BUL
+#define CKM_HASH_ML_DSA_SHAKE256 0x0000002CUL
+#define CKM_SLH_DSA_KEY_PAIR_GEN 0x0000002DUL
+#define CKM_SLH_DSA 0x0000002EUL
+#define CKM_X9_42_DH_KEY_PAIR_GEN 0x00000030UL
+#define CKM_X9_42_DH_DERIVE 0x00000031UL
+#define CKM_X9_42_DH_HYBRID_DERIVE 0x00000032UL
+#define CKM_X9_42_MQV_DERIVE 0x00000033UL
+#define CKM_HASH_SLH_DSA 0x00000034UL
+#define CKM_HASH_SLH_DSA_SHA224 0x00000036UL
+#define CKM_HASH_SLH_DSA_SHA256 0x00000037UL
+#define CKM_HASH_SLH_DSA_SHA384 0x00000038UL
+#define CKM_HASH_SLH_DSA_SHA512 0x00000039UL
+#define CKM_HASH_SLH_DSA_SHA3_224 0x0000003AUL
+#define CKM_HASH_SLH_DSA_SHA3_256 0x0000003BUL
+#define CKM_HASH_SLH_DSA_SHA3_384 0x0000003CUL
+#define CKM_HASH_SLH_DSA_SHA3_512 0x0000003DUL
+#define CKM_HASH_SLH_DSA_SHAKE128 0x0000003EUL
+#define CKM_HASH_SLH_DSA_SHAKE256 0x0000003FUL
+#define CKM_SHA256_RSA_PKCS 0x00000040UL
+#define CKM_SHA384_RSA_PKCS 0x00000041UL
+#define CKM_SHA512_RSA_PKCS 0x00000042UL
+#define CKM_SHA256_RSA_PKCS_PSS 0x00000043UL
+#define CKM_SHA384_RSA_PKCS_PSS 0x00000044UL
+#define CKM_SHA512_RSA_PKCS_PSS 0x00000045UL
+#define CKM_SHA224_RSA_PKCS 0x00000046UL
+#define CKM_SHA224_RSA_PKCS_PSS 0x00000047UL
+#define CKM_SHA512_224 0x00000048UL
+#define CKM_SHA512_224_HMAC 0x00000049UL
+#define CKM_SHA512_224_HMAC_GENERAL 0x0000004AUL
+#define CKM_SHA512_224_KEY_DERIVATION 0x0000004BUL
+#define CKM_SHA512_256 0x0000004CUL
+#define CKM_SHA512_256_HMAC 0x0000004DUL
+#define CKM_SHA512_256_HMAC_GENERAL 0x0000004EUL
+#define CKM_SHA512_256_KEY_DERIVATION 0x0000004FUL
+#define CKM_SHA512_T 0x00000050UL
+#define CKM_SHA512_T_HMAC 0x00000051UL
+#define CKM_SHA512_T_HMAC_GENERAL 0x00000052UL
+#define CKM_SHA512_T_KEY_DERIVATION 0x00000053UL
+#define CKM_TLS12_EXTENDED_MASTER_KEY_DERIVE 0x00000056UL
+#define CKM_TLS12_EXTENDED_MASTER_KEY_DERIVE_DH 0x00000057UL
+#define CKM_SHA3_256_RSA_PKCS 0x00000060UL
+#define CKM_SHA3_384_RSA_PKCS 0x00000061UL
+#define CKM_SHA3_512_RSA_PKCS 0x00000062UL
+#define CKM_SHA3_256_RSA_PKCS_PSS 0x00000063UL
+#define CKM_SHA3_384_RSA_PKCS_PSS 0x00000064UL
+#define CKM_SHA3_512_RSA_PKCS_PSS 0x00000065UL
+#define CKM_SHA3_224_RSA_PKCS 0x00000066UL
+#define CKM_SHA3_224_RSA_PKCS_PSS 0x00000067UL
+#define CKM_RC2_KEY_GEN 0x00000100UL
+#define CKM_RC2_ECB 0x00000101UL
+#define CKM_RC2_CBC 0x00000102UL
+#define CKM_RC2_MAC 0x00000103UL
+#define CKM_RC2_MAC_GENERAL 0x00000104UL
+#define CKM_RC2_CBC_PAD 0x00000105UL
+#define CKM_RC4_KEY_GEN 0x00000110UL
+#define CKM_RC4 0x00000111UL
+#define CKM_DES_KEY_GEN 0x00000120UL
+#define CKM_DES_ECB 0x00000121UL
+#define CKM_DES_CBC 0x00000122UL
+#define CKM_DES_MAC 0x00000123UL
+#define CKM_DES_MAC_GENERAL 0x00000124UL
+#define CKM_DES_CBC_PAD 0x00000125UL
+#define CKM_DES2_KEY_GEN 0x00000130UL
+#define CKM_DES3_KEY_GEN 0x00000131UL
+#define CKM_DES3_ECB 0x00000132UL
+#define CKM_DES3_CBC 0x00000133UL
+#define CKM_DES3_MAC 0x00000134UL
+#define CKM_DES3_MAC_GENERAL 0x00000135UL
+#define CKM_DES3_CBC_PAD 0x00000136UL
+#define CKM_DES3_CMAC_GENERAL 0x00000137UL
+#define CKM_DES3_CMAC 0x00000138UL
+#define CKM_CDMF_KEY_GEN 0x00000140UL
+#define CKM_CDMF_ECB 0x00000141UL
+#define CKM_CDMF_CBC 0x00000142UL
+#define CKM_CDMF_MAC 0x00000143UL
+#define CKM_CDMF_MAC_GENERAL 0x00000144UL
+#define CKM_CDMF_CBC_PAD 0x00000145UL
+#define CKM_DES_OFB64 0x00000150UL
+#define CKM_DES_OFB8 0x00000151UL
+#define CKM_DES_CFB64 0x00000152UL
+#define CKM_DES_CFB8 0x00000153UL
+#define CKM_MD2 0x00000200UL
+#define CKM_MD2_HMAC 0x00000201UL
+#define CKM_MD2_HMAC_GENERAL 0x00000202UL
+#define CKM_MD5 0x00000210UL
+#define CKM_MD5_HMAC 0x00000211UL
+#define CKM_MD5_HMAC_GENERAL 0x00000212UL
+#define CKM_SHA_1 0x00000220UL
+#define CKM_SHA_1_HMAC 0x00000221UL
+#define CKM_SHA_1_HMAC_GENERAL 0x00000222UL
+#define CKM_RIPEMD128 0x00000230UL
+#define CKM_RIPEMD128_HMAC 0x00000231UL
+#define CKM_RIPEMD128_HMAC_GENERAL 0x00000232UL
+#define CKM_RIPEMD160 0x00000240UL
+#define CKM_RIPEMD160_HMAC 0x00000241UL
+#define CKM_RIPEMD160_HMAC_GENERAL 0x00000242UL
+#define CKM_SHA256 0x00000250UL
+#define CKM_SHA256_HMAC 0x00000251UL
+#define CKM_SHA256_HMAC_GENERAL 0x00000252UL
+#define CKM_SHA224 0x00000255UL
+#define CKM_SHA224_HMAC 0x00000256UL
+#define CKM_SHA224_HMAC_GENERAL 0x00000257UL
+#define CKM_SHA384 0x00000260UL
+#define CKM_SHA384_HMAC 0x00000261UL
+#define CKM_SHA384_HMAC_GENERAL 0x00000262UL
+#define CKM_SHA512 0x00000270UL
+#define CKM_SHA512_HMAC 0x00000271UL
+#define CKM_SHA512_HMAC_GENERAL 0x00000272UL
+#define CKM_SECURID_KEY_GEN 0x00000280UL
+#define CKM_SECURID 0x00000282UL
+#define CKM_HOTP_KEY_GEN 0x00000290UL
+#define CKM_HOTP 0x00000291UL
+#define CKM_ACTI 0x000002A0UL
+#define CKM_ACTI_KEY_GEN 0x000002A1UL
+#define CKM_SHA3_256 0x000002B0UL
+#define CKM_SHA3_256_HMAC 0x000002B1UL
+#define CKM_SHA3_256_HMAC_GENERAL 0x000002B2UL
+#define CKM_SHA3_256_KEY_GEN 0x000002B3UL
+#define CKM_SHA3_224 0x000002B5UL
+#define CKM_SHA3_224_HMAC 0x000002B6UL
+#define CKM_SHA3_224_HMAC_GENERAL 0x000002B7UL
+#define CKM_SHA3_224_KEY_GEN 0x000002B8UL
+#define CKM_SHA3_384 0x000002C0UL
+#define CKM_SHA3_384_HMAC 0x000002C1UL
+#define CKM_SHA3_384_HMAC_GENERAL 0x000002C2UL
+#define CKM_SHA3_384_KEY_GEN 0x000002C3UL
+#define CKM_SHA3_512 0x000002D0UL
+#define CKM_SHA3_512_HMAC 0x000002D1UL
+#define CKM_SHA3_512_HMAC_GENERAL 0x000002D2UL
+#define CKM_SHA3_512_KEY_GEN 0x000002D3UL
+#define CKM_CAST_KEY_GEN 0x00000300UL
+#define CKM_CAST_ECB 0x00000301UL
+#define CKM_CAST_CBC 0x00000302UL
+#define CKM_CAST_MAC 0x00000303UL
+#define CKM_CAST_MAC_GENERAL 0x00000304UL
+#define CKM_CAST_CBC_PAD 0x00000305UL
+#define CKM_CAST3_KEY_GEN 0x00000310UL
+#define CKM_CAST3_ECB 0x00000311UL
+#define CKM_CAST3_CBC 0x00000312UL
+#define CKM_CAST3_MAC 0x00000313UL
+#define CKM_CAST3_MAC_GENERAL 0x00000314UL
+#define CKM_CAST3_CBC_PAD 0x00000315UL
+#define CKM_CAST128_KEY_GEN 0x00000320UL
+#define CKM_CAST128_ECB 0x00000321UL
+#define CKM_CAST128_MAC 0x00000323UL
+#define CKM_CAST128_CBC 0x00000322UL
+#define CKM_CAST128_MAC_GENERAL 0x00000324UL
+#define CKM_CAST128_CBC_PAD 0x00000325UL
+#define CKM_RC5_KEY_GEN 0x00000330UL
+#define CKM_RC5_ECB 0x00000331UL
+#define CKM_RC5_CBC 0x00000332UL
+#define CKM_RC5_MAC 0x00000333UL
+#define CKM_RC5_MAC_GENERAL 0x00000334UL
+#define CKM_RC5_CBC_PAD 0x00000335UL
+#define CKM_IDEA_KEY_GEN 0x00000340UL
+#define CKM_IDEA_ECB 0x00000341UL
+#define CKM_IDEA_CBC 0x00000342UL
+#define CKM_IDEA_MAC 0x00000343UL
+#define CKM_IDEA_MAC_GENERAL 0x00000344UL
+#define CKM_IDEA_CBC_PAD 0x00000345UL
+#define CKM_GENERIC_SECRET_KEY_GEN 0x00000350UL
+#define CKM_CONCATENATE_BASE_AND_KEY 0x00000360UL
+#define CKM_CONCATENATE_BASE_AND_DATA 0x00000362UL
+#define CKM_CONCATENATE_DATA_AND_BASE 0x00000363UL
+#define CKM_XOR_BASE_AND_DATA 0x00000364UL
+#define CKM_EXTRACT_KEY_FROM_KEY 0x00000365UL
+#define CKM_SSL3_PRE_MASTER_KEY_GEN 0x00000370UL
+#define CKM_SSL3_MASTER_KEY_DERIVE 0x00000371UL
+#define CKM_SSL3_KEY_AND_MAC_DERIVE 0x00000372UL
+#define CKM_SSL3_MASTER_KEY_DERIVE_DH 0x00000373UL
+#define CKM_TLS_PRE_MASTER_KEY_GEN 0x00000374UL
+#define CKM_TLS_MASTER_KEY_DERIVE 0x00000375UL
+#define CKM_TLS_KEY_AND_MAC_DERIVE 0x00000376UL
+#define CKM_TLS_MASTER_KEY_DERIVE_DH 0x00000377UL
+#define CKM_TLS_PRF 0x00000378UL
+#define CKM_SSL3_MD5_MAC 0x00000380UL
+#define CKM_SSL3_SHA1_MAC 0x00000381UL
+#define CKM_MD5_KEY_DERIVATION 0x00000390UL
+#define CKM_MD2_KEY_DERIVATION 0x00000391UL
+#define CKM_SHA1_KEY_DERIVATION 0x00000392UL
+#define CKM_SHA256_KEY_DERIVATION 0x00000393UL
+#define CKM_SHA384_KEY_DERIVATION 0x00000394UL
+#define CKM_SHA512_KEY_DERIVATION 0x00000395UL
+#define CKM_SHA224_KEY_DERIVATION 0x00000396UL
+#define CKM_SHA3_256_KEY_DERIVATION 0x00000397UL
+#define CKM_SHA3_256_KEY_DERIVE 0x00000397UL
+#define CKM_SHA3_224_KEY_DERIVATION 0x00000398UL
+#define CKM_SHA3_224_KEY_DERIVE 0x00000398UL
+#define CKM_SHA3_384_KEY_DERIVATION 0x00000399UL
+#define CKM_SHA3_384_KEY_DERIVE 0x00000399UL
+#define CKM_SHA3_512_KEY_DERIVATION 0x0000039AUL
+#define CKM_SHA3_512_KEY_DERIVE 0x0000039AUL
+#define CKM_SHAKE_128_KEY_DERIVATION 0x0000039BUL
+#define CKM_SHAKE_128_KEY_DERIVE 0x0000039BUL
+#define CKM_SHAKE_256_KEY_DERIVATION 0x0000039CUL
+#define CKM_SHAKE_256_KEY_DERIVE 0x0000039CUL
+#define CKM_PBE_MD2_DES_CBC 0x000003A0UL
+#define CKM_PBE_MD5_DES_CBC 0x000003A1UL
+#define CKM_PBE_MD5_CAST_CBC 0x000003A2UL
+#define CKM_PBE_MD5_CAST3_CBC 0x000003A3UL
+#define CKM_PBE_MD5_CAST128_CBC 0x000003A4UL
+#define CKM_PBE_SHA1_CAST128_CBC 0x000003A5UL
+#define CKM_PBE_SHA1_RC4_128 0x000003A6UL
+#define CKM_PBE_SHA1_RC4_40 0x000003A7UL
+#define CKM_PBE_SHA1_DES3_EDE_CBC 0x000003A8UL
+#define CKM_PBE_SHA1_DES2_EDE_CBC 0x000003A9UL
+#define CKM_PBE_SHA1_RC2_128_CBC 0x000003AAUL
+#define CKM_PBE_SHA1_RC2_40_CBC 0x000003ABUL
+#define CKM_PKCS5_PBKD2 0x000003B0UL
+#define CKM_PBA_SHA1_WITH_SHA1_HMAC 0x000003C0UL
+#define CKM_WTLS_PRE_MASTER_KEY_GEN 0x000003D0UL
+#define CKM_WTLS_MASTER_KEY_DERIVE 0x000003D1UL
+#define CKM_WTLS_MASTER_KEY_DERIVE_DH_ECC 0x000003D2UL
+#define CKM_WTLS_PRF 0x000003D3UL
+#define CKM_WTLS_SERVER_KEY_AND_MAC_DERIVE 0x000003D4UL
+#define CKM_WTLS_CLIENT_KEY_AND_MAC_DERIVE 0x000003D5UL
+#define CKM_TLS10_MAC_SERVER 0x000003D6UL
+#define CKM_TLS10_MAC_CLIENT 0x000003D7UL
+#define CKM_TLS12_MAC 0x000003D8UL
+#define CKM_TLS12_KDF 0x000003D9UL
+#define CKM_TLS12_MASTER_KEY_DERIVE 0x000003E0UL
+#define CKM_TLS12_KEY_AND_MAC_DERIVE 0x000003E1UL
+#define CKM_TLS12_MASTER_KEY_DERIVE_DH 0x000003E2UL
+#define CKM_TLS12_KEY_SAFE_DERIVE 0x000003E3UL
+#define CKM_TLS_MAC 0x000003E4UL
+#define CKM_TLS_KDF 0x000003E5UL
+#define CKM_KEY_WRAP_LYNKS 0x00000400UL
+#define CKM_KEY_WRAP_SET_OAEP 0x00000401UL
+#define CKM_CMS_SIG 0x00000500UL
+#define CKM_KIP_DERIVE 0x00000510UL
+#define CKM_KIP_WRAP 0x00000511UL
+#define CKM_KIP_MAC 0x00000512UL
+#define CKM_CAMELLIA_KEY_GEN 0x00000550UL
+#define CKM_CAMELLIA_ECB 0x00000551UL
+#define CKM_CAMELLIA_CBC 0x00000552UL
+#define CKM_CAMELLIA_MAC 0x00000553UL
+#define CKM_CAMELLIA_MAC_GENERAL 0x00000554UL
+#define CKM_CAMELLIA_CBC_PAD 0x00000555UL
+#define CKM_CAMELLIA_ECB_ENCRYPT_DATA 0x00000556UL
+#define CKM_CAMELLIA_CBC_ENCRYPT_DATA 0x00000557UL
+#define CKM_CAMELLIA_CTR 0x00000558UL
+#define CKM_ARIA_KEY_GEN 0x00000560UL
+#define CKM_ARIA_ECB 0x00000561UL
+#define CKM_ARIA_CBC 0x00000562UL
+#define CKM_ARIA_MAC 0x00000563UL
+#define CKM_ARIA_MAC_GENERAL 0x00000564UL
+#define CKM_ARIA_CBC_PAD 0x00000565UL
+#define CKM_ARIA_ECB_ENCRYPT_DATA 0x00000566UL
+#define CKM_ARIA_CBC_ENCRYPT_DATA 0x00000567UL
+#define CKM_SEED_KEY_GEN 0x00000650UL
+#define CKM_SEED_ECB 0x00000651UL
+#define CKM_SEED_CBC 0x00000652UL
+#define CKM_SEED_MAC 0x00000653UL
+#define CKM_SEED_MAC_GENERAL 0x00000654UL
+#define CKM_SEED_CBC_PAD 0x00000655UL
+#define CKM_SEED_ECB_ENCRYPT_DATA 0x00000656UL
+#define CKM_SEED_CBC_ENCRYPT_DATA 0x00000657UL
+#define CKM_SKIPJACK_KEY_GEN 0x00001000UL
+#define CKM_SKIPJACK_ECB64 0x00001001UL
+#define CKM_SKIPJACK_CBC64 0x00001002UL
+#define CKM_SKIPJACK_OFB64 0x00001003UL
+#define CKM_SKIPJACK_CFB64 0x00001004UL
+#define CKM_SKIPJACK_CFB32 0x00001005UL
+#define CKM_SKIPJACK_CFB16 0x00001006UL
+#define CKM_SKIPJACK_CFB8 0x00001007UL
+#define CKM_SKIPJACK_WRAP 0x00001008UL
+#define CKM_SKIPJACK_PRIVATE_WRAP 0x00001009UL
+#define CKM_SKIPJACK_RELAYX 0x0000100AUL
+#define CKM_KEA_KEY_PAIR_GEN 0x00001010UL
+#define CKM_KEA_KEY_DERIVE 0x00001011UL
+#define CKM_KEA_DERIVE 0x00001012UL
+#define CKM_FORTEZZA_TIMESTAMP 0x00001020UL
+#define CKM_BATON_KEY_GEN 0x00001030UL
+#define CKM_BATON_ECB128 0x00001031UL
+#define CKM_BATON_ECB96 0x00001032UL
+#define CKM_BATON_CBC128 0x00001033UL
+#define CKM_BATON_COUNTER 0x00001034UL
+#define CKM_BATON_SHUFFLE 0x00001035UL
+#define CKM_BATON_WRAP 0x00001036UL
+#define CKM_EC_KEY_PAIR_GEN 0x00001040UL
+#define CKM_ECDSA 0x00001041UL
+#define CKM_ECDSA_SHA1 0x00001042UL
+#define CKM_ECDSA_SHA224 0x00001043UL
+#define CKM_ECDSA_SHA256 0x00001044UL
+#define CKM_ECDSA_SHA384 0x00001045UL
+#define CKM_ECDSA_SHA512 0x00001046UL
+#define CKM_EC_KEY_PAIR_GEN_W_EXTRA_BITS 0x0000140BUL
+#define CKM_ECDH1_DERIVE 0x00001050UL
+#define CKM_ECDH1_COFACTOR_DERIVE 0x00001051UL
+#define CKM_ECMQV_DERIVE 0x00001052UL
+#define CKM_ECDH_AES_KEY_WRAP 0x00001053UL
+#define CKM_RSA_AES_KEY_WRAP 0x00001054UL
+#define CKM_JUNIPER_KEY_GEN 0x00001060UL
+#define CKM_JUNIPER_ECB128 0x00001061UL
+#define CKM_JUNIPER_CBC128 0x00001062UL
+#define CKM_JUNIPER_COUNTER 0x00001063UL
+#define CKM_JUNIPER_SHUFFLE 0x00001064UL
+#define CKM_JUNIPER_WRAP 0x00001065UL
+#define CKM_FASTHASH 0x00001070UL
+#define CKM_AES_XTS 0x00001071UL
+#define CKM_AES_XTS_KEY_GEN 0x00001072UL
+#define CKM_AES_KEY_GEN 0x00001080UL
+#define CKM_AES_ECB 0x00001081UL
+#define CKM_AES_CBC 0x00001082UL
+#define CKM_AES_MAC 0x00001083UL
+#define CKM_AES_MAC_GENERAL 0x00001084UL
+#define CKM_AES_CBC_PAD 0x00001085UL
+#define CKM_AES_CTR 0x00001086UL
+#define CKM_AES_GCM 0x00001087UL
+#define CKM_AES_CCM 0x00001088UL
+#define CKM_AES_CTS 0x00001089UL
+#define CKM_AES_CMAC 0x0000108AUL
+#define CKM_AES_CMAC_GENERAL 0x0000108BUL
+#define CKM_AES_XCBC_MAC 0x0000108CUL
+#define CKM_AES_XCBC_MAC_96 0x0000108DUL
+#define CKM_AES_GMAC 0x0000108EUL
+#define CKM_BLOWFISH_KEY_GEN 0x00001090UL
+#define CKM_BLOWFISH_CBC 0x00001091UL
+#define CKM_TWOFISH_KEY_GEN 0x00001092UL
+#define CKM_TWOFISH_CBC 0x00001093UL
+#define CKM_BLOWFISH_CBC_PAD 0x00001094UL
+#define CKM_TWOFISH_CBC_PAD 0x00001095UL
+#define CKM_DES_ECB_ENCRYPT_DATA 0x00001100UL
+#define CKM_DES_CBC_ENCRYPT_DATA 0x00001101UL
+#define CKM_DES3_ECB_ENCRYPT_DATA 0x00001102UL
+#define CKM_DES3_CBC_ENCRYPT_DATA 0x00001103UL
+#define CKM_AES_ECB_ENCRYPT_DATA 0x00001104UL
+#define CKM_AES_CBC_ENCRYPT_DATA 0x00001105UL
+#define CKM_GOSTR3410_KEY_PAIR_GEN 0x00001200UL
+#define CKM_GOSTR3410 0x00001201UL
+#define CKM_GOSTR3410_WITH_GOSTR3411 0x00001202UL
+#define CKM_GOSTR3410_KEY_WRAP 0x00001203UL
+#define CKM_GOSTR3410_DERIVE 0x00001204UL
+#define CKM_GOSTR3411 0x00001210UL
+#define CKM_GOSTR3411_HMAC 0x00001211UL
+#define CKM_GOST28147_KEY_GEN 0x00001220UL
+#define CKM_GOST28147_ECB 0x00001221UL
+#define CKM_GOST28147 0x00001222UL
+#define CKM_GOST28147_MAC 0x00001223UL
+#define CKM_GOST28147_KEY_WRAP 0x00001224UL
+#define CKM_CHACHA20_KEY_GEN 0x00001225UL
+#define CKM_CHACHA20 0x00001226UL
+#define CKM_POLY1305_KEY_GEN 0x00001227UL
+#define CKM_POLY1305 0x00001228UL
+#define CKM_DSA_PARAMETER_GEN 0x00002000UL
+#define CKM_DH_PKCS_PARAMETER_GEN 0x00002001UL
+#define CKM_X9_42_DH_PARAMETER_GEN 0x00002002UL
+#define CKM_DSA_PROBABILISTIC_PARAMETER_GEN 0x00002003UL
+#define CKM_DSA_SHAWE_TAYLOR_PARAMETER_GEN 0x00002004UL
+#define CKM_DSA_FIPS_G_GEN 0x00002005UL
+#define CKM_AES_OFB 0x00002104UL
+#define CKM_AES_CFB64 0x00002105UL
+#define CKM_AES_CFB8 0x00002106UL
+#define CKM_AES_CFB128 0x00002107UL
+#define CKM_AES_CFB1 0x00002108UL
+#define CKM_AES_KEY_WRAP 0x00002109UL
+#define CKM_AES_KEY_WRAP_PAD 0x0000210AUL
+#define CKM_AES_KEY_WRAP_KWP 0x0000210BUL
+#define CKM_AES_KEY_WRAP_PKCS7 0x0000210CUL
+#define CKM_RSA_PKCS_TPM_1_1 0x00004001UL
+#define CKM_RSA_PKCS_OAEP_TPM_1_1 0x00004002UL
+#define CKM_SHA_1_KEY_GEN 0x00004003UL
+#define CKM_SHA224_KEY_GEN 0x00004004UL
+#define CKM_SHA256_KEY_GEN 0x00004005UL
+#define CKM_SHA384_KEY_GEN 0x00004006UL
+#define CKM_SHA512_KEY_GEN 0x00004007UL
+#define CKM_SHA512_224_KEY_GEN 0x00004008UL
+#define CKM_SHA512_256_KEY_GEN 0x00004009UL
+#define CKM_SHA512_T_KEY_GEN 0x0000400AUL
+#define CKM_NULL 0x0000400BUL
+#define CKM_BLAKE2B_160 0x0000400CUL
+#define CKM_BLAKE2B_160_HMAC 0x0000400DUL
+#define CKM_BLAKE2B_160_HMAC_GENERAL 0x0000400EUL
+#define CKM_BLAKE2B_160_KEY_DERIVE 0x0000400FUL
+#define CKM_BLAKE2B_160_KEY_GEN 0x00004010UL
+#define CKM_BLAKE2B_256 0x00004011UL
+#define CKM_BLAKE2B_256_HMAC 0x00004012UL
+#define CKM_BLAKE2B_256_HMAC_GENERAL 0x00004013UL
+#define CKM_BLAKE2B_256_KEY_DERIVE 0x00004014UL
+#define CKM_BLAKE2B_256_KEY_GEN 0x00004015UL
+#define CKM_BLAKE2B_384 0x00004016UL
+#define CKM_BLAKE2B_384_HMAC 0x00004017UL
+#define CKM_BLAKE2B_384_HMAC_GENERAL 0x00004018UL
+#define CKM_BLAKE2B_384_KEY_DERIVE 0x00004019UL
+#define CKM_BLAKE2B_384_KEY_GEN 0x0000401AUL
+#define CKM_BLAKE2B_512 0x0000401BUL
+#define CKM_BLAKE2B_512_HMAC 0x0000401CUL
+#define CKM_BLAKE2B_512_HMAC_GENERAL 0x0000401DUL
+#define CKM_BLAKE2B_512_KEY_DERIVE 0x0000401EUL
+#define CKM_BLAKE2B_512_KEY_GEN 0x0000401FUL
+#define CKM_SALSA20 0x00004020UL
+#define CKM_CHACHA20_POLY1305 0x00004021UL
+#define CKM_SALSA20_POLY1305 0x00004022UL
+#define CKM_X3DH_INITIALIZE 0x00004023UL
+#define CKM_X3DH_RESPOND 0x00004024UL
+#define CKM_X2RATCHET_INITIALIZE 0x00004025UL
+#define CKM_X2RATCHET_RESPOND 0x00004026UL
+#define CKM_X2RATCHET_ENCRYPT 0x00004027UL
+#define CKM_X2RATCHET_DECRYPT 0x00004028UL
+#define CKM_XEDDSA 0x00004029UL
+#define CKM_HKDF_DERIVE 0x0000402AUL
+#define CKM_HKDF_DATA 0x0000402BUL
+#define CKM_HKDF_KEY_GEN 0x0000402CUL
+#define CKM_SALSA20_KEY_GEN 0x0000402DUL
+#define CKM_ECDSA_SHA3_224 0x00001047UL
+#define CKM_ECDSA_SHA3_256 0x00001048UL
+#define CKM_ECDSA_SHA3_384 0x00001049UL
+#define CKM_ECDSA_SHA3_512 0x0000104AUL
+#define CKM_EC_EDWARDS_KEY_PAIR_GEN 0x00001055UL
+#define CKM_EC_MONTGOMERY_KEY_PAIR_GEN 0x00001056UL
+#define CKM_EDDSA 0x00001057UL
+#define CKM_SP800_108_COUNTER_KDF 0x000003ACUL
+#define CKM_SP800_108_FEEDBACK_KDF 0x000003ADUL
+#define CKM_SP800_108_DOUBLE_PIPELINE_KDF 0x000003AEUL
+#define CKM_IKE2_PRF_PLUS_DERIVE 0x0000402EUL
+#define CKM_IKE_PRF_DERIVE 0x0000402FUL
+#define CKM_IKE1_PRF_DERIVE 0x00004030UL
+#define CKM_IKE1_EXTENDED_DERIVE 0x00004031UL
+#define CKM_HSS_KEY_PAIR_GEN 0x00004032UL
+#define CKM_HSS 0x00004033UL
+#define CKM_XMSS_KEY_PAIR_GEN 0x00004034UL
+#define CKM_XMSSMT_KEY_PAIR_GEN 0x00004035UL
+#define CKM_XMSS 0x00004036UL
+#define CKM_XMSSMT 0x00004037UL
+#define CKM_ECDH_X_AES_KEY_WRAP 0x00004038UL
+#define CKM_ECDH_COF_AES_KEY_WRAP 0x00004039UL
+#define CKM_PUB_KEY_FROM_PRIV_KEY 0x0000403AUL
+#define CKM_VENDOR_DEFINED 0x80000000UL
+/* Deprecated */
+#ifdef PKCS11_DEPRECATED
+#define CKM_CAST5_KEY_GEN 0x00000320UL
+#define CKM_CAST5_ECB 0x00000321UL
+#define CKM_CAST5_CBC 0x00000322UL
+#define CKM_CAST5_MAC 0x00000323UL
+#define CKM_CAST5_MAC_GENERAL 0x00000324UL
+#define CKM_CAST5_CBC_PAD 0x00000325UL
+#define CKM_PBE_MD5_CAST5_CBC 0x000003A4UL
+#define CKM_PBE_SHA1_CAST5_CBC 0x000003A5UL
+#define CKM_ECDSA_KEY_PAIR_GEN 0x00001040UL
+#define CKM_DSA_PROBABLISTIC_PARAMETER_GEN 0x00002003UL
 #endif

-/* System dependencies.  */
+/* CKN */
+#define CKN_SURRENDER 0UL
+#define CKN_OTP_CHANGED 1UL
+
+/* CKO */
+#define CKO_DATA 0x00000000UL
+#define CKO_CERTIFICATE 0x00000001UL
+#define CKO_PUBLIC_KEY 0x00000002UL
+#define CKO_PRIVATE_KEY 0x00000003UL
+#define CKO_SECRET_KEY 0x00000004UL
+#define CKO_HW_FEATURE 0x00000005UL
+#define CKO_DOMAIN_PARAMETERS 0x00000006UL
+#define CKO_MECHANISM 0x00000007UL
+#define CKO_OTP_KEY 0x00000008UL
+#define CKO_PROFILE 0x00000009UL
+#define CKO_VALIDATION 0x0000000AUL
+#define CKO_TRUST 0x0000000BUL
+#define CKO_VENDOR_DEFINED 0x80000000UL
+
+/* CKP (profile) */
+#define CKP_INVALID_ID 0x00000000UL
+#define CKP_BASELINE_PROVIDER 0x00000001UL
+#define CKP_EXTENDED_PROVIDER 0x00000002UL
+#define CKP_AUTHENTICATION_TOKEN 0x00000003UL
+#define CKP_PUBLIC_CERTIFICATES_TOKEN 0x00000004UL
+#define CKP_COMPLETE_PROVIDER 0x00000005UL
+#define CKP_HKDF_TLS_TOKEN 0x00000006UL
+#define CKP_VENDOR_DEFINED 0x80000000UL
+
+/* CKP (PBKD2) */
+#define CKP_PKCS5_PBKD2_HMAC_SHA1 0x00000001UL
+#define CKP_PKCS5_PBKD2_HMAC_GOSTR3411 0x00000002UL
+#define CKP_PKCS5_PBKD2_HMAC_SHA224 0x00000003UL
+#define CKP_PKCS5_PBKD2_HMAC_SHA256 0x00000004UL
+#define CKP_PKCS5_PBKD2_HMAC_SHA384 0x00000005UL
+#define CKP_PKCS5_PBKD2_HMAC_SHA512 0x00000006UL
+#define CKP_PKCS5_PBKD2_HMAC_SHA512_224 0x00000007UL
+#define CKP_PKCS5_PBKD2_HMAC_SHA512_256 0x00000008UL
+
+/* CKP (ML-DSA) */
+#define CKP_ML_DSA_44 0x00000001UL
+#define CKP_ML_DSA_65 0x00000002UL
+#define CKP_ML_DSA_87 0x00000003UL
+
+/* CKP (ML_KEM) */
+#define CKP_ML_KEM_512 0x00000001UL
+#define CKP_ML_KEM_768 0x00000002UL
+#define CKP_ML_KEM_1024 0x00000003UL
+
+/* CKP (SLH-DSA) */
+#define CKP_SLH_DSA_SHA2_128S 0x00000001UL
+#define CKP_SLH_DSA_SHAKE_128S 0x00000002UL
+#define CKP_SLH_DSA_SHA2_128F 0x00000003UL
+#define CKP_SLH_DSA_SHAKE_128F 0x00000004UL
+#define CKP_SLH_DSA_SHA2_192S 0x00000005UL
+#define CKP_SLH_DSA_SHAKE_192S 0x00000006UL
+#define CKP_SLH_DSA_SHA2_192F 0x00000007UL
+#define CKP_SLH_DSA_SHAKE_192F 0x00000008UL
+#define CKP_SLH_DSA_SHA2_256S 0x00000009UL
+#define CKP_SLH_DSA_SHAKE_256S 0x0000000AUL
+#define CKP_SLH_DSA_SHA2_256F 0x0000000BUL
+#define CKP_SLH_DSA_SHAKE_256F 0x0000000CUL
+
+/* CKR */
+#define CKR_OK 0x00000000UL
+#define CKR_CANCEL 0x00000001UL
+#define CKR_HOST_MEMORY 0x00000002UL
+#define CKR_SLOT_ID_INVALID 0x00000003UL
+#define CKR_GENERAL_ERROR 0x00000005UL
+#define CKR_FUNCTION_FAILED 0x00000006UL
+#define CKR_ARGUMENTS_BAD 0x00000007UL
+#define CKR_NO_EVENT 0x00000008UL
+#define CKR_NEED_TO_CREATE_THREADS 0x00000009UL
+#define CKR_CANT_LOCK 0x0000000AUL
+#define CKR_ATTRIBUTE_READ_ONLY 0x00000010UL
+#define CKR_ATTRIBUTE_SENSITIVE 0x00000011UL
+#define CKR_ATTRIBUTE_TYPE_INVALID 0x00000012UL
+#define CKR_ATTRIBUTE_VALUE_INVALID 0x00000013UL
+#define CKR_ACTION_PROHIBITED 0x0000001BUL
+#define CKR_DATA_INVALID 0x00000020UL
+#define CKR_DATA_LEN_RANGE 0x00000021UL
+#define CKR_DEVICE_ERROR 0x00000030UL
+#define CKR_DEVICE_MEMORY 0x00000031UL
+#define CKR_DEVICE_REMOVED 0x00000032UL
+#define CKR_ENCRYPTED_DATA_INVALID 0x00000040UL
+#define CKR_ENCRYPTED_DATA_LEN_RANGE 0x00000041UL
+#define CKR_AEAD_DECRYPT_FAILED 0x00000042UL
+#define CKR_FUNCTION_CANCELED 0x00000050UL
+#define CKR_FUNCTION_NOT_PARALLEL 0x00000051UL
+#define CKR_FUNCTION_NOT_SUPPORTED 0x00000054UL
+#define CKR_KEY_HANDLE_INVALID 0x00000060UL
+#define CKR_KEY_SIZE_RANGE 0x00000062UL
+#define CKR_KEY_TYPE_INCONSISTENT 0x00000063UL
+#define CKR_KEY_NOT_NEEDED 0x00000064UL
+#define CKR_KEY_CHANGED 0x00000065UL
+#define CKR_KEY_NEEDED 0x00000066UL
+#define CKR_KEY_INDIGESTIBLE 0x00000067UL
+#define CKR_KEY_FUNCTION_NOT_PERMITTED 0x00000068UL
+#define CKR_KEY_NOT_WRAPPABLE 0x00000069UL
+#define CKR_KEY_UNEXTRACTABLE 0x0000006AUL
+#define CKR_MECHANISM_INVALID 0x00000070UL
+#define CKR_MECHANISM_PARAM_INVALID 0x00000071UL
+#define CKR_OBJECT_HANDLE_INVALID 0x00000082UL
+#define CKR_OPERATION_ACTIVE 0x00000090UL
+#define CKR_OPERATION_NOT_INITIALIZED 0x00000091UL
+#define CKR_PIN_INCORRECT 0x000000A0UL
+#define CKR_PIN_INVALID 0x000000A1UL
+#define CKR_PIN_LEN_RANGE 0x000000A2UL
+#define CKR_PIN_EXPIRED 0x000000A3UL
+#define CKR_PIN_LOCKED 0x000000A4UL
+#define CKR_SESSION_CLOSED 0x000000B0UL
+#define CKR_SESSION_COUNT 0x000000B1UL
+#define CKR_SESSION_HANDLE_INVALID 0x000000B3UL
+#define CKR_SESSION_PARALLEL_NOT_SUPPORTED 0x000000B4UL
+#define CKR_SESSION_READ_ONLY 0x000000B5UL
+#define CKR_SESSION_EXISTS 0x000000B6UL
+#define CKR_SESSION_READ_ONLY_EXISTS 0x000000B7UL
+#define CKR_SESSION_READ_WRITE_SO_EXISTS 0x000000B8UL
+#define CKR_SIGNATURE_INVALID 0x000000C0UL
+#define CKR_SIGNATURE_LEN_RANGE 0x000000C1UL
+#define CKR_TEMPLATE_INCOMPLETE 0x000000D0UL
+#define CKR_TEMPLATE_INCONSISTENT 0x000000D1UL
+#define CKR_TOKEN_NOT_PRESENT 0x000000E0UL
+#define CKR_TOKEN_NOT_RECOGNIZED 0x000000E1UL
+#define CKR_TOKEN_WRITE_PROTECTED 0x000000E2UL
+#define CKR_UNWRAPPING_KEY_HANDLE_INVALID 0x000000F0UL
+#define CKR_UNWRAPPING_KEY_SIZE_RANGE 0x000000F1UL
+#define CKR_UNWRAPPING_KEY_TYPE_INCONSISTENT 0x000000F2UL
+#define CKR_USER_ALREADY_LOGGED_IN 0x00000100UL
+#define CKR_USER_NOT_LOGGED_IN 0x00000101UL
+#define CKR_USER_PIN_NOT_INITIALIZED 0x00000102UL
+#define CKR_USER_TYPE_INVALID 0x00000103UL
+#define CKR_USER_ANOTHER_ALREADY_LOGGED_IN 0x00000104UL
+#define CKR_USER_TOO_MANY_TYPES 0x00000105UL
+#define CKR_WRAPPED_KEY_INVALID 0x00000110UL
+#define CKR_WRAPPED_KEY_LEN_RANGE 0x00000112UL
+#define CKR_WRAPPING_KEY_HANDLE_INVALID 0x00000113UL
+#define CKR_WRAPPING_KEY_SIZE_RANGE 0x00000114UL
+#define CKR_WRAPPING_KEY_TYPE_INCONSISTENT 0x00000115UL
+#define CKR_RANDOM_SEED_NOT_SUPPORTED 0x00000120UL
+#define CKR_RANDOM_NO_RNG 0x00000121UL
+#define CKR_DOMAIN_PARAMS_INVALID 0x00000130UL
+#define CKR_CURVE_NOT_SUPPORTED 0x00000140UL
+#define CKR_BUFFER_TOO_SMALL 0x00000150UL
+#define CKR_SAVED_STATE_INVALID 0x00000160UL
+#define CKR_INFORMATION_SENSITIVE 0x00000170UL
+#define CKR_STATE_UNSAVEABLE 0x00000180UL
+#define CKR_CRYPTOKI_NOT_INITIALIZED 0x00000190UL
+#define CKR_CRYPTOKI_ALREADY_INITIALIZED 0x00000191UL
+#define CKR_MUTEX_BAD 0x000001A0UL
+#define CKR_MUTEX_NOT_LOCKED 0x000001A1UL
+#define CKR_NEW_PIN_MODE 0x000001B0UL
+#define CKR_NEXT_OTP 0x000001B1UL
+#define CKR_EXCEEDED_MAX_ITERATIONS 0x000001B5UL
+#define CKR_FIPS_SELF_TEST_FAILED 0x000001B6UL
+#define CKR_LIBRARY_LOAD_FAILED 0x000001B7UL
+#define CKR_PIN_TOO_WEAK 0x000001B8UL
+#define CKR_PUBLIC_KEY_INVALID 0x000001B9UL
+#define CKR_FUNCTION_REJECTED 0x00000200UL
+#define CKR_TOKEN_RESOURCE_EXCEEDED 0x00000201UL
+#define CKR_OPERATION_CANCEL_FAILED 0x00000202UL
+#define CKR_KEY_EXHAUSTED 0x00000203UL
+#define CKR_PENDING 0x00000204UL
+#define CKR_SESSION_ASYNC_NOT_SUPPORTED 0x00000205UL
+#define CKR_SEED_RANDOM_REQUIRED 0x00000206UL
+#define CKR_OPERATION_NOT_VALIDATED 0x00000207UL
+#define CKR_TOKEN_NOT_INITIALIZED 0x00000208UL
+#define CKR_PARAMETER_SET_NOT_SUPPORTED 0x00000209UL
+#define CKR_VENDOR_DEFINED 0x80000000UL
+
+/* CKS */
+#define CKS_RO_PUBLIC_SESSION 0UL
+#define CKS_RO_USER_FUNCTIONS 1UL
+#define CKS_RW_PUBLIC_SESSION 2UL
+#define CKS_RW_USER_FUNCTIONS 3UL
+#define CKS_RW_SO_FUNCTIONS 4UL
+
+/* CKS (validation) */
+#define CKS_LAST_VALIDATION_OK 0x00000001UL
+
+/* CKT (trust) */
+#define CKT_TRUST_UNKNOWN 0x00000000UL
+#define CKT_TRUSTED 0x00000001UL
+#define CKT_TRUST_ANCHOR 0x00000002UL
+#define CKT_NOT_TRUSTED 0x00000003UL
+#define CKT_TRUST_MUST_VERIFY_TRUST 0x00000004UL
+
+/* CKU */
+#define CKU_SO 0UL
+#define CKU_USER 1UL
+#define CKU_CONTEXT_SPECIFIC 2UL
+
+/* CKV (validation authority) */
+#define CKV_AUTHORITY_TYPE_UNSPECIFIED 0x00000000UL
+#define CKV_AUTHORITY_TYPE_NIST_CMVP 0x00000001UL
+#define CKV_AUTHORITY_TYPE_COMMON_CRITERIA 0x00000002UL
+
+/* CKV (validation type) */
+#define CKV_TYPE_UNSPECIFIED 0x00000000UL
+#define CKV_TYPE_SOFTWARE 0x00000001UL
+#define CKV_TYPE_HARDWARE 0x00000002UL
+#define CKV_TYPE_FIRMWARE 0x00000003UL
+#define CKV_TYPE_HYBRID 0x00000004UL
+
+/* CKZ (data) */
+#define CKZ_DATA_SPECIFIED 0x00000001UL
+
+/* CKZ (salt) */
+#define CKZ_SALT_SPECIFIED 0x00000001UL
+
+/* Sundry structures type definition in alphabetical order */
+#define STRUCTDEF(__name__) \
+struct __name__; \
+typedef struct __name__ __name__; \
+typedef struct __name__ * __name__ ## _PTR; \
+typedef struct __name__ ** __name__ ## _PTR_PTR;
+
+STRUCTDEF(CK_ATTRIBUTE);
+STRUCTDEF(CK_C_INITIALIZE_ARGS);
+STRUCTDEF(CK_DATE);
+STRUCTDEF(CK_DERIVED_KEY);
+STRUCTDEF(CK_FUNCTION_LIST);
+STRUCTDEF(CK_FUNCTION_LIST_3_0);
+STRUCTDEF(CK_FUNCTION_LIST_3_2);
+STRUCTDEF(CK_INFO);
+STRUCTDEF(CK_INTERFACE);
+STRUCTDEF(CK_MECHANISM);
+STRUCTDEF(CK_MECHANISM_INFO);
+STRUCTDEF(CK_SESSION_INFO);
+STRUCTDEF(CK_SLOT_INFO);
+STRUCTDEF(CK_TOKEN_INFO);
+STRUCTDEF(CK_VERSION);
+
+/* Function type definitions */
+typedef CK_RV (* CK_NOTIFY)(CK_SESSION_HANDLE, CK_NOTIFICATION, void *);
+typedef CK_RV (* CK_CREATEMUTEX)(void **);
+typedef CK_RV (* CK_DESTROYMUTEX)(void *);
+typedef CK_RV (* CK_LOCKMUTEX)(void *);
+typedef CK_RV (* CK_UNLOCKMUTEX)(void *);
+
+/* General Structure definitions */
+struct CK_ATTRIBUTE {
+    CK_ATTRIBUTE_TYPE type;
+    void * pValue;
+    CK_ULONG ulValueLen;
+};

-#if defined(_WIN32) || defined(CRYPTOKI_FORCE_WIN32)
+struct CK_C_INITIALIZE_ARGS {
+    CK_CREATEMUTEX CreateMutex;
+    CK_DESTROYMUTEX DestroyMutex;
+    CK_LOCKMUTEX LockMutex;
+    CK_UNLOCKMUTEX UnlockMutex;
+    CK_FLAGS flags;
+    void * pReserved;
+};

-/* There is a matching pop below.  */
-#pragma pack(push, cryptoki, 1)
+struct CK_DATE{
+    CK_CHAR year[4];
+    CK_CHAR month[2];
+    CK_CHAR day[2];
+};

-#ifdef CRYPTOKI_EXPORTS
-#define CK_SPEC __declspec(dllexport)
-#else
-#define CK_SPEC __declspec(dllimport)
-#endif
+struct CK_DERIVED_KEY
+{
+    CK_ATTRIBUTE * pTemplate;
+    CK_ULONG ulAttributeCount;
+    CK_OBJECT_HANDLE * phKey;
+};

-#else
+struct CK_VERSION {
+    CK_BYTE major;
+    CK_BYTE minor;
+};

-#define CK_SPEC
+struct CK_INFO {
+    struct CK_VERSION cryptokiVersion;
+    CK_UTF8CHAR manufacturerID[32];
+    CK_FLAGS flags;
+    CK_UTF8CHAR libraryDescription[32];
+    struct CK_VERSION libraryVersion;
+};

-#endif
+struct CK_INTERFACE {
+    CK_UTF8CHAR * pInterfaceName;
+    void * pFunctionList;
+    CK_FLAGS flags;
+};

-#ifdef CRYPTOKI_COMPAT
-  /* If we are in compatibility mode, switch all exposed names to the
-     PKCS #11 variant.  There are corresponding #undefs below.  */
+struct CK_MECHANISM {
+    CK_MECHANISM_TYPE mechanism;
+    void * pParameter;
+    CK_ULONG ulParameterLen;
+};

-#define ck_flags_t CK_FLAGS
-#define ck_version _CK_VERSION
+struct CK_MECHANISM_INFO {
+    CK_ULONG ulMinKeySize;
+    CK_ULONG ulMaxKeySize;
+    CK_FLAGS flags;
+};

-#define ck_info _CK_INFO
-#define cryptoki_version cryptokiVersion
-#define manufacturer_id manufacturerID
-#define library_description libraryDescription
-#define library_version libraryVersion
+struct CK_SESSION_INFO {
+    CK_SLOT_ID slotID;
+    CK_STATE state;
+    CK_FLAGS flags;
+    CK_ULONG ulDeviceError;
+};

-#define ck_notification_t CK_NOTIFICATION
-#define ck_slot_id_t CK_SLOT_ID
+struct CK_SLOT_INFO {
+    CK_UTF8CHAR slotDescription[64];
+    CK_UTF8CHAR manufacturerID[32];
+    CK_FLAGS flags;
+    CK_VERSION hardwareVersion;
+    CK_VERSION firmwareVersion;
+};

-#define ck_slot_info _CK_SLOT_INFO
-#define slot_description slotDescription
-#define hardware_version hardwareVersion
-#define firmware_version firmwareVersion
+struct CK_TOKEN_INFO {
+    CK_UTF8CHAR label[32];
+    CK_UTF8CHAR manufacturerID[32];
+    CK_UTF8CHAR model[16];
+    CK_CHAR serialNumber[16];
+    CK_FLAGS flags;
+    CK_ULONG ulMaxSessionCount;
+    CK_ULONG ulSessionCount;
+    CK_ULONG ulMaxRwSessionCount;
+    CK_ULONG ulRwSessionCount;
+    CK_ULONG ulMaxPinLen;
+    CK_ULONG ulMinPinLen;
+    CK_ULONG ulTotalPublicMemory;
+    CK_ULONG ulFreePublicMemory;
+    CK_ULONG ulTotalPrivateMemory;
+    CK_ULONG ulFreePrivateMemory;
+    CK_VERSION hardwareVersion;
+    CK_VERSION firmwareVersion;
+    CK_CHAR utcTime[16];
+};

-#define ck_token_info _CK_TOKEN_INFO
-#define serial_number serialNumber
-#define max_session_count ulMaxSessionCount
-#define session_count ulSessionCount
-#define max_rw_session_count ulMaxRwSessionCount
-#define rw_session_count ulRwSessionCount
-#define max_pin_len ulMaxPinLen
-#define min_pin_len ulMinPinLen
-#define total_public_memory ulTotalPublicMemory
-#define free_public_memory ulFreePublicMemory
-#define total_private_memory ulTotalPrivateMemory
-#define free_private_memory ulFreePrivateMemory
-#define utc_time utcTime
+/* Param Structure definitions in alphabetical order */
+STRUCTDEF(CK_AES_CBC_ENCRYPT_DATA_PARAMS);
+STRUCTDEF(CK_AES_CCM_PARAMS);
+STRUCTDEF(CK_AES_CTR_PARAMS);
+STRUCTDEF(CK_AES_GCM_PARAMS);
+STRUCTDEF(CK_ARIA_CBC_ENCRYPT_DATA_PARAMS);
+STRUCTDEF(CK_ASYNC_DATA);
+STRUCTDEF(CK_CAMELLIA_CBC_ENCRYPT_DATA_PARAMS);
+STRUCTDEF(CK_CAMELLIA_CTR_PARAMS);
+STRUCTDEF(CK_CCM_MESSAGE_PARAMS);
+STRUCTDEF(CK_CCM_PARAMS);
+STRUCTDEF(CK_CCM_WRAP_PARAMS);
+STRUCTDEF(CK_CHACHA20_PARAMS);
+STRUCTDEF(CK_CMS_SIG_PARAMS);
+STRUCTDEF(CK_DES_CBC_ENCRYPT_DATA_PARAMS);
+STRUCTDEF(CK_DSA_PARAMETER_GEN_PARAM);
+STRUCTDEF(CK_ECDH_AES_KEY_WRAP_PARAMS);
+STRUCTDEF(CK_ECDH1_DERIVE_PARAMS);
+STRUCTDEF(CK_ECDH2_DERIVE_PARAMS);
+STRUCTDEF(CK_ECMQV_DERIVE_PARAMS);
+STRUCTDEF(CK_EDDSA_PARAMS);
+STRUCTDEF(CK_GCM_MESSAGE_PARAMS);
+STRUCTDEF(CK_GCM_PARAMS);
+STRUCTDEF(CK_GCM_WRAP_PARAMS);
+STRUCTDEF(CK_GOSTR3410_DERIVE_PARAMS);
+STRUCTDEF(CK_GOSTR3410_KEY_WRAP_PARAMS);
+STRUCTDEF(CK_HASH_SIGN_ADDITIONAL_CONTEXT);
+STRUCTDEF(CK_HKDF_PARAMS);
+STRUCTDEF(CK_IKE_PRF_DERIVE_PARAMS);
+STRUCTDEF(CK_IKE1_EXTENDED_DERIVE_PARAMS);
+STRUCTDEF(CK_IKE1_PRF_DERIVE_PARAMS);
+STRUCTDEF(CK_IKE2_PRF_PLUS_DERIVE_PARAMS);
+STRUCTDEF(CK_KEA_DERIVE_PARAMS);
+STRUCTDEF(CK_KEY_DERIVATION_STRING_DATA);
+STRUCTDEF(CK_KEY_WRAP_SET_OAEP_PARAMS);
+STRUCTDEF(CK_KIP_PARAMS);
+STRUCTDEF(CK_OTP_PARAM);
+STRUCTDEF(CK_OTP_PARAMS);
+STRUCTDEF(CK_OTP_SIGNATURE_INFO);
+STRUCTDEF(CK_PBE_PARAMS);
+STRUCTDEF(CK_PKCS5_PBKD2_PARAMS);
+STRUCTDEF(CK_PKCS5_PBKD2_PARAMS2);
+STRUCTDEF(CK_PRF_DATA_PARAM);
+STRUCTDEF(CK_RC2_CBC_PARAMS);
+STRUCTDEF(CK_RC2_MAC_GENERAL_PARAMS);
+STRUCTDEF(CK_RC5_CBC_PARAMS);
+STRUCTDEF(CK_RC5_MAC_GENERAL_PARAMS);
+STRUCTDEF(CK_RC5_PARAMS);
+STRUCTDEF(CK_RSA_AES_KEY_WRAP_PARAMS);
+STRUCTDEF(CK_RSA_PKCS_OAEP_PARAMS);
+STRUCTDEF(CK_RSA_PKCS_PSS_PARAMS);
+STRUCTDEF(CK_SALSA20_CHACHA20_POLY1305_MSG_PARAMS);
+STRUCTDEF(CK_SALSA20_CHACHA20_POLY1305_PARAMS);
+STRUCTDEF(CK_SALSA20_PARAMS);
+STRUCTDEF(CK_SEED_CBC_ENCRYPT_DATA_PARAMS);
+STRUCTDEF(CK_SIGN_ADDITIONAL_CONTEXT);
+STRUCTDEF(CK_SKIPJACK_PRIVATE_WRAP_PARAMS);
+STRUCTDEF(CK_SKIPJACK_RELAYX_PARAMS);
+STRUCTDEF(CK_SP800_108_COUNTER_FORMAT);
+STRUCTDEF(CK_SP800_108_DKM_LENGTH_FORMAT);
+STRUCTDEF(CK_SP800_108_FEEDBACK_KDF_PARAMS);
+STRUCTDEF(CK_SP800_108_KDF_PARAMS);
+STRUCTDEF(CK_TLS12_EXTENDED_MASTER_KEY_DERIVE_PARAMS);
+STRUCTDEF(CK_X2RATCHET_INITIALIZE_PARAMS);
+STRUCTDEF(CK_X2RATCHET_RESPOND_PARAMS);
+STRUCTDEF(CK_X3DH_INITIATE_PARAMS);
+STRUCTDEF(CK_X3DH_RESPOND_PARAMS);
+STRUCTDEF(CK_X9_42_DH1_DERIVE_PARAMS);
+STRUCTDEF(CK_X9_42_DH2_DERIVE_PARAMS);
+STRUCTDEF(CK_X9_42_MQV_DERIVE_PARAMS);
+STRUCTDEF(CK_XEDDSA_PARAMS);
+STRUCTDEF(specifiedParams);
+
+struct CK_AES_CBC_ENCRYPT_DATA_PARAMS {
+    CK_BYTE iv[16];
+    CK_BYTE * pData;
+    CK_ULONG length;
+};

-#define ck_session_handle_t CK_SESSION_HANDLE
-#define ck_user_type_t CK_USER_TYPE
-#define ck_state_t CK_STATE
+struct CK_AES_CCM_PARAMS {
+    CK_ULONG ulDataLen;
+    CK_BYTE * pNonce;
+    CK_ULONG ulNonceLen;
+    CK_BYTE * pAAD;
+    CK_ULONG ulAADLen;
+    CK_ULONG ulMACLen;
+};

-#define ck_session_info _CK_SESSION_INFO
-#define slot_id slotID
-#define device_error ulDeviceError
+struct CK_AES_CTR_PARAMS {
+    CK_ULONG ulCounterBits;
+    CK_BYTE cb[16];
+};

-#define ck_object_handle_t CK_OBJECT_HANDLE
-#define ck_object_class_t CK_OBJECT_CLASS
-#define ck_hw_feature_type_t CK_HW_FEATURE_TYPE
-#define ck_key_type_t CK_KEY_TYPE
-#define ck_certificate_type_t CK_CERTIFICATE_TYPE
-#define ck_attribute_type_t CK_ATTRIBUTE_TYPE
+struct CK_AES_GCM_PARAMS {
+    CK_BYTE * pIv;
+    CK_ULONG ulIvLen;
+    CK_ULONG ulIvBits;
+    CK_BYTE * pAAD;
+    CK_ULONG ulAADLen;
+    CK_ULONG ulTagBits;
+};

-#define ck_attribute _CK_ATTRIBUTE
-#define value pValue
-#define value_len ulValueLen
+struct CK_ARIA_CBC_ENCRYPT_DATA_PARAMS {
+    CK_BYTE iv[16];
+    CK_BYTE * pData;
+    CK_ULONG length;
+};

-#define ck_date _CK_DATE
+struct CK_ASYNC_DATA {
+    CK_ULONG ulVersion;
+    CK_BYTE * pValue;
+    CK_ULONG ulValue;
+    CK_OBJECT_HANDLE hObject;
+    CK_OBJECT_HANDLE hAdditionalObject;
+};

-#define ck_mechanism_type_t CK_MECHANISM_TYPE
+struct CK_CAMELLIA_CBC_ENCRYPT_DATA_PARAMS {
+    CK_BYTE iv[16];
+    CK_BYTE * pData;
+    CK_ULONG length;
+};

-#define ck_rsa_pkcs_mgf_type_t CK_RSA_PKCS_MGF_TYPE
+struct CK_CAMELLIA_CTR_PARAMS {
+    CK_ULONG ulCounterBits;
+    CK_BYTE cb[16];
+};

-#define ck_mechanism _CK_MECHANISM
-#define parameter pParameter
-#define parameter_len ulParameterLen
+struct CK_CCM_MESSAGE_PARAMS {
+    CK_ULONG ulDataLen;
+    CK_BYTE * pNonce;
+    CK_ULONG ulNonceLen;
+    CK_ULONG ulNonceFixedBits;
+    CK_GENERATOR_FUNCTION nonceGenerator;
+    CK_BYTE * pMAC;
+    CK_ULONG ulMACLen;
+};

-#define ck_mechanism_info _CK_MECHANISM_INFO
-#define min_key_size ulMinKeySize
-#define max_key_size ulMaxKeySize
+struct CK_CCM_PARAMS {
+    CK_ULONG ulDataLen;
+    CK_BYTE * pNonce;
+    CK_ULONG ulNonceLen;
+    CK_BYTE * pAAD;
+    CK_ULONG ulAADLen;
+    CK_ULONG ulMACLen;
+};
+struct CK_CCM_WRAP_PARAMS {
+    CK_ULONG ulDataLen;
+    CK_BYTE * pNonce;
+    CK_ULONG ulNonceLen;
+    CK_ULONG ulNonceFixedBits;
+    CK_GENERATOR_FUNCTION nonceGenerator;
+    CK_BYTE * pAAD;
+    CK_ULONG ulAADLen;
+    CK_ULONG ulMACLen;
+};

-#define ck_rv_t CK_RV
-#define ck_notify_t CK_NOTIFY
+struct CK_CHACHA20_PARAMS {
+    CK_BYTE * pBlockCounter;
+    CK_ULONG blockCounterBits;
+    CK_BYTE * pNonce;
+    CK_ULONG ulNonceBits;
+};

-#define ck_interface CK_INTERFACE
+struct CK_CMS_SIG_PARAMS {
+    CK_OBJECT_HANDLE certificateHandle;
+    CK_MECHANISM * pSigningMechanism;
+    CK_MECHANISM * pDigestMechanism;
+    CK_UTF8CHAR * pContentType;
+    CK_BYTE * pRequestedAttributes;
+    CK_ULONG ulRequestedAttributesLen;
+    CK_BYTE * pRequiredAttributes;
+    CK_ULONG ulRequiredAttributesLen;
+};

-#define ck_function_list _CK_FUNCTION_LIST
-#define ck_function_list_3_0 _CK_FUNCTION_LIST_3_0
+struct CK_DES_CBC_ENCRYPT_DATA_PARAMS {
+    CK_BYTE iv[8];
+    CK_BYTE * pData;
+    CK_ULONG length;
+};

-#define ck_createmutex_t CK_CREATEMUTEX
-#define ck_destroymutex_t CK_DESTROYMUTEX
-#define ck_lockmutex_t CK_LOCKMUTEX
-#define ck_unlockmutex_t CK_UNLOCKMUTEX
+struct CK_DSA_PARAMETER_GEN_PARAM {
+    CK_MECHANISM_TYPE hash;
+    CK_BYTE * pSeed;
+    CK_ULONG ulSeedLen;
+    CK_ULONG ulIndex;
+};

-#define ck_c_initialize_args _CK_C_INITIALIZE_ARGS
-#define create_mutex CreateMutex
-#define destroy_mutex DestroyMutex
-#define lock_mutex LockMutex
-#define unlock_mutex UnlockMutex
-#define reserved pReserved
+struct CK_ECDH_AES_KEY_WRAP_PARAMS {
+    CK_ULONG ulAESKeyBits;
+    CK_EC_KDF_TYPE kdf;
+    CK_ULONG ulSharedDataLen;
+    CK_BYTE * pSharedData;
+};

-#define ck_ec_kdf_type_t CK_EC_KDF_TYPE
+struct CK_ECDH1_DERIVE_PARAMS {
+    CK_EC_KDF_TYPE kdf;
+    CK_ULONG ulSharedDataLen;
+    CK_BYTE * pSharedData;
+    CK_ULONG ulPublicDataLen;
+    CK_BYTE * pPublicData;
+};

-#define ck_ecdh1_derive_args _CK_ECDH1_DERIVE_PARAMS
-#define shared_data_len ulSharedDataLen
-#define shared_data pSharedData
-#define public_data_len ulPublicDataLen
-#define public_data pPublicData
+struct CK_ECDH2_DERIVE_PARAMS {
+    CK_EC_KDF_TYPE kdf;
+    CK_ULONG ulSharedDataLen;
+    CK_BYTE * pSharedData;
+    CK_ULONG ulPublicDataLen;
+    CK_BYTE * pPublicData;
+    CK_ULONG ulPrivateDataLen;
+    CK_OBJECT_HANDLE hPrivateData;
+    CK_ULONG ulPublicDataLen2;
+    CK_BYTE * pPublicData2;
+};

-#endif  /* CRYPTOKI_COMPAT */
+struct CK_ECMQV_DERIVE_PARAMS {
+    CK_EC_KDF_TYPE kdf;
+    CK_ULONG ulSharedDataLen;
+    CK_BYTE * pSharedData;
+    CK_ULONG ulPublicDataLen;
+    CK_BYTE * pPublicData;
+    CK_ULONG ulPrivateDataLen;
+    CK_OBJECT_HANDLE hPrivateData;
+    CK_ULONG ulPublicDataLen2;
+    CK_BYTE * pPublicData2;
+    CK_OBJECT_HANDLE publicKey;
+};

+struct CK_EDDSA_PARAMS {
+    CK_BBOOL phFlag;
+    CK_ULONG ulContextDataLen;
+    CK_BYTE * pContextData;
+};

-typedef unsigned long ck_flags_t;
+struct CK_GCM_MESSAGE_PARAMS {
+    CK_BYTE * pIv;
+    CK_ULONG ulIvLen;
+    CK_ULONG ulIvFixedBits;
+    CK_GENERATOR_FUNCTION ivGenerator;
+    CK_BYTE * pTag;
+    CK_ULONG ulTagBits;
+};

-struct ck_version
-{
-  unsigned char major;
-  unsigned char minor;
+struct CK_GCM_PARAMS {
+    CK_BYTE * pIv;
+    CK_ULONG ulIvLen;
+    CK_ULONG ulIvBits;
+    CK_BYTE * pAAD;
+    CK_ULONG ulAADLen;
+    CK_ULONG ulTagBits;
 };

+struct CK_GCM_WRAP_PARAMS {
+    CK_BYTE * pIv;
+    CK_ULONG ulIvLen;
+    CK_ULONG ulIvFixedBits;
+    CK_GENERATOR_FUNCTION ivGenerator;
+    CK_BYTE * pAAD;
+    CK_ULONG ulAADLen;
+    CK_ULONG ulTagBits;
+};

-struct ck_info
-{
-  struct ck_version cryptoki_version;
-  unsigned char manufacturer_id[32];
-  ck_flags_t flags;
-  unsigned char library_description[32];
-  struct ck_version library_version;
+struct CK_GOSTR3410_DERIVE_PARAMS {
+    CK_EC_KDF_TYPE kdf;
+    CK_BYTE * pPublicData;
+    CK_ULONG ulPublicDataLen;
+    CK_BYTE * pUKM;
+    CK_ULONG ulUKMLen;
 };

+struct CK_GOSTR3410_KEY_WRAP_PARAMS {
+    CK_BYTE * pWrapOID;
+    CK_ULONG ulWrapOIDLen;
+    CK_BYTE * pUKM;
+    CK_ULONG ulUKMLen;
+    CK_OBJECT_HANDLE hKey;
+};

-typedef unsigned long ck_notification_t;
+struct CK_HASH_SIGN_ADDITIONAL_CONTEXT {
+    CK_HEDGE_TYPE hedgeVariant;
+    CK_BYTE * pContext;
+    CK_ULONG ulContextLen;
+    CK_MECHANISM_TYPE hash;
+};

-#define CKN_SURRENDER   (0UL)
+struct CK_HKDF_PARAMS {
+    CK_BBOOL bExtract;
+    CK_BBOOL bExpand;
+    CK_MECHANISM_TYPE prfHashMechanism;
+    CK_ULONG ulSaltType;
+    CK_BYTE * pSalt;
+    CK_ULONG ulSaltLen;
+    CK_OBJECT_HANDLE hSaltKey;
+    CK_BYTE * pInfo;
+    CK_ULONG ulInfoLen;
+};

+struct CK_IKE_PRF_DERIVE_PARAMS {
+    CK_MECHANISM_TYPE prfMechanism;
+    CK_BBOOL bDataAsKey;
+    CK_BBOOL bRekey;
+    CK_BYTE * pNi;
+    CK_ULONG ulNiLen;
+    CK_BYTE * pNr;
+    CK_ULONG ulNrLen;
+    CK_OBJECT_HANDLE hNewKey;
+};

-typedef unsigned long ck_slot_id_t;
+struct CK_IKE1_EXTENDED_DERIVE_PARAMS {
+    CK_MECHANISM_TYPE prfMechanism;
+    CK_BBOOL bHasKeygxy;
+    CK_OBJECT_HANDLE hKeygxy;
+    CK_BYTE * pExtraData;
+    CK_ULONG ulExtraDataLen;
+};

+struct CK_IKE1_PRF_DERIVE_PARAMS {
+    CK_MECHANISM_TYPE prfMechanism;
+    CK_BBOOL bHasPrevKey;
+    CK_OBJECT_HANDLE hKeygxy;
+    CK_OBJECT_HANDLE hPrevKey;
+    CK_BYTE * pCKYi;
+    CK_ULONG ulCKYiLen;
+    CK_BYTE * pCKYr;
+    CK_ULONG ulCKYrLen;
+    CK_BYTE keyNumber;
+};

-struct ck_slot_info
-{
-  unsigned char slot_description[64];
-  unsigned char manufacturer_id[32];
-  ck_flags_t flags;
-  struct ck_version hardware_version;
-  struct ck_version firmware_version;
+struct CK_IKE2_PRF_PLUS_DERIVE_PARAMS {
+    CK_MECHANISM_TYPE prfMechanism;
+    CK_BBOOL bHasSeedKey;
+    CK_OBJECT_HANDLE hSeedKey;
+    CK_BYTE * pSeedData;
+    CK_ULONG ulSeedDataLen;
 };

+struct CK_KEA_DERIVE_PARAMS {
+    CK_BBOOL isSender;
+    CK_ULONG ulRandomLen;
+    CK_BYTE * RandomA;
+    CK_BYTE * RandomB;
+    CK_ULONG ulPublicDataLen;
+    CK_BYTE * PublicData;
+};

-#define CKF_TOKEN_PRESENT       (1UL << 0)
-#define CKF_REMOVABLE_DEVICE    (1UL << 1)
-#define CKF_HW_SLOT             (1UL << 2)
-#define CKF_ARRAY_ATTRIBUTE     (1UL << 30)
+struct CK_KEY_DERIVATION_STRING_DATA {
+    CK_BYTE * pData;
+    CK_ULONG ulLen;
+};

+struct CK_KEY_WRAP_SET_OAEP_PARAMS {
+    CK_BYTE bBC;
+    CK_BYTE * pX;
+    CK_ULONG ulXLen;
+};

-struct ck_token_info
-{
-  unsigned char label[32];
-  unsigned char manufacturer_id[32];
-  unsigned char model[16];
-  unsigned char serial_number[16];
-  ck_flags_t flags;
-  unsigned long max_session_count;
-  unsigned long session_count;
-  unsigned long max_rw_session_count;
-  unsigned long rw_session_count;
-  unsigned long max_pin_len;
-  unsigned long min_pin_len;
-  unsigned long total_public_memory;
-  unsigned long free_public_memory;
-  unsigned long total_private_memory;
-  unsigned long free_private_memory;
-  struct ck_version hardware_version;
-  struct ck_version firmware_version;
-  unsigned char utc_time[16];
-};
-
-
-#define CKF_RNG                                 (1UL << 0)
-#define CKF_WRITE_PROTECTED                     (1UL << 1)
-#define CKF_LOGIN_REQUIRED                      (1UL << 2)
-#define CKF_USER_PIN_INITIALIZED                (1UL << 3)
-#define CKF_RESTORE_KEY_NOT_NEEDED              (1UL << 5)
-#define CKF_CLOCK_ON_TOKEN                      (1UL << 6)
-#define CKF_PROTECTED_AUTHENTICATION_PATH       (1UL << 8)
-#define CKF_DUAL_CRYPTO_OPERATIONS              (1UL << 9)
-#define CKF_TOKEN_INITIALIZED                   (1UL << 10)
-#define CKF_SECONDARY_AUTHENTICATION            (1UL << 11)
-#define CKF_USER_PIN_COUNT_LOW                  (1UL << 16)
-#define CKF_USER_PIN_FINAL_TRY                  (1UL << 17)
-#define CKF_USER_PIN_LOCKED                     (1UL << 18)
-#define CKF_USER_PIN_TO_BE_CHANGED              (1UL << 19)
-#define CKF_SO_PIN_COUNT_LOW                    (1UL << 20)
-#define CKF_SO_PIN_FINAL_TRY                    (1UL << 21)
-#define CKF_SO_PIN_LOCKED                       (1UL << 22)
-#define CKF_SO_PIN_TO_BE_CHANGED                (1UL << 23)
-
-#define CK_UNAVAILABLE_INFORMATION      ((unsigned long) -1)
-#define CK_EFFECTIVELY_INFINITE         (0UL)
-
-
-typedef unsigned long ck_session_handle_t;
-
-#define CK_INVALID_HANDLE       (0UL)
-
-
-typedef unsigned long ck_user_type_t;
-
-#define CKU_SO                  (0UL)
-#define CKU_USER                (1UL)
-#define CKU_CONTEXT_SPECIFIC    (2UL)
-
-
-typedef unsigned long ck_state_t;
-
-#define CKS_RO_PUBLIC_SESSION   (0UL)
-#define CKS_RO_USER_FUNCTIONS   (1UL)
-#define CKS_RW_PUBLIC_SESSION   (2UL)
-#define CKS_RW_USER_FUNCTIONS   (3UL)
-#define CKS_RW_SO_FUNCTIONS     (4UL)
-
-
-struct ck_session_info
-{
-  ck_slot_id_t slot_id;
-  ck_state_t state;
-  ck_flags_t flags;
-  unsigned long device_error;
-};
-
-#define CKF_RW_SESSION          (1UL << 1)
-#define CKF_SERIAL_SESSION      (1UL << 2)
-
-
-typedef unsigned long ck_object_handle_t;
-
-
-typedef unsigned long ck_object_class_t;
-
-#define CKO_DATA                (0UL)
-#define CKO_CERTIFICATE         (1UL)
-#define CKO_PUBLIC_KEY          (2UL)
-#define CKO_PRIVATE_KEY         (3UL)
-#define CKO_SECRET_KEY          (4UL)
-#define CKO_HW_FEATURE          (5UL)
-#define CKO_DOMAIN_PARAMETERS   (6UL)
-#define CKO_MECHANISM           (7UL)
-#define CKO_OTP_KEY             (8UL)
-#define CKO_PROFILE             (9UL)
-#define CKO_VENDOR_DEFINED      (1UL << 31)
-
-#define CKP_INVALID_ID                (0UL)
-#define CKP_BASELINE_PROVIDER         (1UL)
-#define CKP_EXTENDED_PROVIDER         (2UL)
-#define CKP_AUTHENTICATION_TOKEN      (3UL)
-#define CKP_PUBLIC_CERTIFICATES_TOKEN (4UL)
-#define CKP_VENDOR_DEFINED            (1UL << 31)
-
-typedef unsigned long ck_hw_feature_type_t;
-
-#define CKH_MONOTONIC_COUNTER   (1UL)
-#define CKH_CLOCK               (2UL)
-#define CKH_USER_INTERFACE      (3UL)
-#define CKH_VENDOR_DEFINED      (1UL << 31)
-
-
-typedef unsigned long ck_key_type_t;
-
-#define CKK_RSA                 (0UL)
-#define CKK_DSA                 (1UL)
-#define CKK_DH                  (2UL)
-#define CKK_ECDSA               (3UL)
-#define CKK_EC                  (3UL)
-#define CKK_X9_42_DH            (4UL)
-#define CKK_KEA                 (5UL)
-#define CKK_GENERIC_SECRET      (0x10UL)
-#define CKK_RC2                 (0x11UL)
-#define CKK_RC4                 (0x12UL)
-#define CKK_DES                 (0x13UL)
-#define CKK_DES2                (0x14UL)
-#define CKK_DES3                (0x15UL)
-#define CKK_CAST                (0x16UL)
-#define CKK_CAST3               (0x17UL)
-#define CKK_CAST128             (0x18UL)
-#define CKK_RC5                 (0x19UL)
-#define CKK_IDEA                (0x1aUL)
-#define CKK_SKIPJACK            (0x1bUL)
-#define CKK_BATON               (0x1cUL)
-#define CKK_JUNIPER             (0x1dUL)
-#define CKK_CDMF                (0x1eUL)
-#define CKK_AES                 (0x1fUL)
-#define CKK_BLOWFISH            (0x20UL)
-#define CKK_TWOFISH             (0x21UL)
-#define CKK_GOSTR3410           (0x30UL)
-#define CKK_GOSTR3411           (0x31UL)
-#define CKK_GOST28147           (0x32UL)
-#define CKK_EC_EDWARDS          (0x40UL)
-#define CKK_EC_MONTGOMERY       (0x41UL)
-#define CKK_VENDOR_DEFINED      (1UL << 31)
-
-
-typedef unsigned long ck_certificate_type_t;
-
-#define CKC_X_509               (0UL)
-#define CKC_X_509_ATTR_CERT     (1UL)
-#define CKC_WTLS                (2UL)
-#define CKC_VENDOR_DEFINED      (1UL << 31)
-
-
-typedef unsigned long ck_attribute_type_t;
-
-#define CKA_CLASS                       (0UL)
-#define CKA_TOKEN                       (1UL)
-#define CKA_PRIVATE                     (2UL)
-#define CKA_LABEL                       (3UL)
-#define CKA_UNIQUE_ID                   (4UL)
-#define CKA_APPLICATION                 (0x10UL)
-#define CKA_VALUE                       (0x11UL)
-#define CKA_OBJECT_ID                   (0x12UL)
-#define CKA_CERTIFICATE_TYPE            (0x80UL)
-#define CKA_ISSUER                      (0x81UL)
-#define CKA_SERIAL_NUMBER               (0x82UL)
-#define CKA_AC_ISSUER                   (0x83UL)
-#define CKA_OWNER                       (0x84UL)
-#define CKA_ATTR_TYPES                  (0x85UL)
-#define CKA_TRUSTED                     (0x86UL)
-#define CKA_CERTIFICATE_CATEGORY        (0x87UL)
-#define CKA_JAVA_MIDP_SECURITY_DOMAIN   (0x88UL)
-#define CKA_URL                         (0x89UL)
-#define CKA_HASH_OF_SUBJECT_PUBLIC_KEY  (0x8aUL)
-#define CKA_HASH_OF_ISSUER_PUBLIC_KEY   (0x8bUL)
-#define CKA_CHECK_VALUE                 (0x90UL)
-#define CKA_KEY_TYPE                    (0x100UL)
-#define CKA_SUBJECT                     (0x101UL)
-#define CKA_ID                          (0x102UL)
-#define CKA_SENSITIVE                   (0x103UL)
-#define CKA_ENCRYPT                     (0x104UL)
-#define CKA_DECRYPT                     (0x105UL)
-#define CKA_WRAP                        (0x106UL)
-#define CKA_UNWRAP                      (0x107UL)
-#define CKA_SIGN                        (0x108UL)
-#define CKA_SIGN_RECOVER                (0x109UL)
-#define CKA_VERIFY                      (0x10aUL)
-#define CKA_VERIFY_RECOVER              (0x10bUL)
-#define CKA_DERIVE                      (0x10cUL)
-#define CKA_START_DATE                  (0x110UL)
-#define CKA_END_DATE                    (0x111UL)
-#define CKA_MODULUS                     (0x120UL)
-#define CKA_MODULUS_BITS                (0x121UL)
-#define CKA_PUBLIC_EXPONENT             (0x122UL)
-#define CKA_PRIVATE_EXPONENT            (0x123UL)
-#define CKA_PRIME_1                     (0x124UL)
-#define CKA_PRIME_2                     (0x125UL)
-#define CKA_EXPONENT_1                  (0x126UL)
-#define CKA_EXPONENT_2                  (0x127UL)
-#define CKA_COEFFICIENT                 (0x128UL)
-#define CKA_PUBLIC_KEY_INFO             (0x129UL)
-#define CKA_PRIME                       (0x130UL)
-#define CKA_SUBPRIME                    (0x131UL)
-#define CKA_BASE                        (0x132UL)
-#define CKA_PRIME_BITS                  (0x133UL)
-#define CKA_SUB_PRIME_BITS              (0x134UL)
-#define CKA_VALUE_BITS                  (0x160UL)
-#define CKA_VALUE_LEN                   (0x161UL)
-#define CKA_EXTRACTABLE                 (0x162UL)
-#define CKA_LOCAL                       (0x163UL)
-#define CKA_NEVER_EXTRACTABLE           (0x164UL)
-#define CKA_ALWAYS_SENSITIVE            (0x165UL)
-#define CKA_KEY_GEN_MECHANISM           (0x166UL)
-#define CKA_MODIFIABLE                  (0x170UL)
-#define CKA_COPYABLE                    (0x171UL)
-#define CKA_DESTROYABLE                 (0x172UL)
-#define CKA_ECDSA_PARAMS                (0x180UL)
-#define CKA_EC_PARAMS                   (0x180UL)
-#define CKA_EC_POINT                    (0x181UL)
-#define CKA_SECONDARY_AUTH              (0x200UL)
-#define CKA_AUTH_PIN_FLAGS              (0x201UL)
-#define CKA_ALWAYS_AUTHENTICATE         (0x202UL)
-#define CKA_WRAP_WITH_TRUSTED           (0x210UL)
-#define CKA_GOSTR3410_PARAMS            (0x250UL)
-#define CKA_GOSTR3411_PARAMS            (0x251UL)
-#define CKA_GOST28147_PARAMS            (0x252UL)
-#define CKA_HW_FEATURE_TYPE             (0x300UL)
-#define CKA_RESET_ON_INIT               (0x301UL)
-#define CKA_HAS_RESET                   (0x302UL)
-#define CKA_PIXEL_X                     (0x400UL)
-#define CKA_PIXEL_Y                     (0x401UL)
-#define CKA_RESOLUTION                  (0x402UL)
-#define CKA_CHAR_ROWS                   (0x403UL)
-#define CKA_CHAR_COLUMNS                (0x404UL)
-#define CKA_COLOR                       (0x405UL)
-#define CKA_BITS_PER_PIXEL              (0x406UL)
-#define CKA_CHAR_SETS                   (0x480UL)
-#define CKA_ENCODING_METHODS            (0x481UL)
-#define CKA_MIME_TYPES                  (0x482UL)
-#define CKA_MECHANISM_TYPE              (0x500UL)
-#define CKA_REQUIRED_CMS_ATTRIBUTES     (0x501UL)
-#define CKA_DEFAULT_CMS_ATTRIBUTES      (0x502UL)
-#define CKA_SUPPORTED_CMS_ATTRIBUTES    (0x503UL)
-#define CKA_WRAP_TEMPLATE               (CKF_ARRAY_ATTRIBUTE | 0x211UL)
-#define CKA_UNWRAP_TEMPLATE             (CKF_ARRAY_ATTRIBUTE | 0x212UL)
-#define CKA_OTP_FORMAT                  (0x220UL)
-#define CKA_OTP_LENGTH                  (0x221UL)
-#define CKA_OTP_TIME_INTERVAL           (0x222UL)
-#define CKA_OTP_USER_FRIENDLY_MODE      (0x223UL)
-#define CKA_OTP_CHALLENGE_REQUIREMENT   (0x224UL)
-#define CKA_OTP_TIME_REQUIREMENT        (0x225UL)
-#define CKA_OTP_COUNTER_REQUIREMENT     (0x226UL)
-#define CKA_OTP_PIN_REQUIREMENT         (0x227UL)
-#define CKA_OTP_USER_IDENTIFIER         (0x22AUL)
-#define CKA_OTP_SERVICE_IDENTIFIER      (0x22BUL)
-#define CKA_OTP_SERVICE_LOGO            (0x22CUL)
-#define CKA_OTP_SERVICE_LOGO_TYPE       (0x22DUL)
-#define CKA_OTP_COUNTER                 (0x22EUL)
-#define CKA_OTP_TIME                    (0x22FUL)
-#define CKA_ALLOWED_MECHANISMS          (CKF_ARRAY_ATTRIBUTE | 0x600UL)
-#define CKA_PROFILE_ID                  (0x601UL)
-#define CKA_VENDOR_DEFINED              (1UL << 31)
-
-
-struct ck_attribute
-{
-  ck_attribute_type_t type;
-  void *value;
-  unsigned long value_len;
+struct CK_KIP_PARAMS {
+    CK_MECHANISM * pMechanism;
+    CK_OBJECT_HANDLE hKey;
+    CK_BYTE * pSeed;
+    CK_ULONG ulSeedLen;
 };

+struct CK_OTP_PARAM {
+    CK_OTP_PARAM_TYPE type;
+    void * pValue;
+    CK_ULONG ulValueLen;
+};

-struct ck_date
-{
-  unsigned char year[4];
-  unsigned char month[2];
-  unsigned char day[2];
-};
-
-
-typedef unsigned long ck_mechanism_type_t;
-
-#define CKM_RSA_PKCS_KEY_PAIR_GEN       (0UL)
-#define CKM_RSA_PKCS                    (1UL)
-#define CKM_RSA_9796                    (2UL)
-#define CKM_RSA_X_509                   (3UL)
-#define CKM_MD2_RSA_PKCS                (4UL)
-#define CKM_MD5_RSA_PKCS                (5UL)
-#define CKM_SHA1_RSA_PKCS               (6UL)
-#define CKM_RIPEMD128_RSA_PKCS          (7UL)
-#define CKM_RIPEMD160_RSA_PKCS          (8UL)
-#define CKM_RSA_PKCS_OAEP               (9UL)
-#define CKM_RSA_X9_31_KEY_PAIR_GEN      (0xaUL)
-#define CKM_RSA_X9_31                   (0xbUL)
-#define CKM_SHA1_RSA_X9_31              (0xcUL)
-#define CKM_RSA_PKCS_PSS                (0xdUL)
-#define CKM_SHA1_RSA_PKCS_PSS           (0xeUL)
-#define CKM_DSA_KEY_PAIR_GEN            (0x10UL)
-#define CKM_DSA                         (0x11UL)
-#define CKM_DSA_SHA1                    (0x12UL)
-#define CKM_DSA_SHA224                  (0x13UL)
-#define CKM_DSA_SHA256                  (0x14UL)
-#define CKM_DSA_SHA384                  (0x15UL)
-#define CKM_DSA_SHA512                  (0x16UL)
-#define CKM_DH_PKCS_KEY_PAIR_GEN        (0x20UL)
-#define CKM_DH_PKCS_DERIVE              (0x21UL)
-#define CKM_X9_42_DH_KEY_PAIR_GEN       (0x30UL)
-#define CKM_X9_42_DH_DERIVE             (0x31UL)
-#define CKM_X9_42_DH_HYBRID_DERIVE      (0x32UL)
-#define CKM_X9_42_MQV_DERIVE            (0x33UL)
-#define CKM_SHA256_RSA_PKCS             (0x40UL)
-#define CKM_SHA384_RSA_PKCS             (0x41UL)
-#define CKM_SHA512_RSA_PKCS             (0x42UL)
-#define CKM_SHA256_RSA_PKCS_PSS         (0x43UL)
-#define CKM_SHA384_RSA_PKCS_PSS         (0x44UL)
-#define CKM_SHA512_RSA_PKCS_PSS         (0x45UL)
-#define CKM_SHA224_RSA_PKCS             (0x46UL)
-#define CKM_SHA224_RSA_PKCS_PSS         (0x47UL)
-#define CKM_SHA3_256_RSA_PKCS           (0x60UL)
-#define CKM_SHA3_384_RSA_PKCS           (0x61UL)
-#define CKM_SHA3_512_RSA_PKCS           (0x62UL)
-#define CKM_SHA3_256_RSA_PKCS_PSS       (0x63UL)
-#define CKM_SHA3_384_RSA_PKCS_PSS       (0x64UL)
-#define CKM_SHA3_512_RSA_PKCS_PSS       (0x65UL)
-#define CKM_SHA3_224_RSA_PKCS           (0x66UL)
-#define CKM_SHA3_224_RSA_PKCS_PSS       (0x67UL)
-#define CKM_RC2_KEY_GEN                 (0x100UL)
-#define CKM_RC2_ECB                     (0x101UL)
-#define CKM_RC2_CBC                     (0x102UL)
-#define CKM_RC2_MAC                     (0x103UL)
-#define CKM_RC2_MAC_GENERAL             (0x104UL)
-#define CKM_RC2_CBC_PAD                 (0x105UL)
-#define CKM_RC4_KEY_GEN                 (0x110UL)
-#define CKM_RC4                         (0x111UL)
-#define CKM_DES_KEY_GEN                 (0x120UL)
-#define CKM_DES_ECB                     (0x121UL)
-#define CKM_DES_CBC                     (0x122UL)
-#define CKM_DES_MAC                     (0x123UL)
-#define CKM_DES_MAC_GENERAL             (0x124UL)
-#define CKM_DES_CBC_PAD                 (0x125UL)
-#define CKM_DES2_KEY_GEN                (0x130UL)
-#define CKM_DES3_KEY_GEN                (0x131UL)
-#define CKM_DES3_ECB                    (0x132UL)
-#define CKM_DES3_CBC                    (0x133UL)
-#define CKM_DES3_MAC                    (0x134UL)
-#define CKM_DES3_MAC_GENERAL            (0x135UL)
-#define CKM_DES3_CBC_PAD                (0x136UL)
-#define CKM_DES3_CMAC_GENERAL           (0x137UL)
-#define CKM_DES3_CMAC                   (0x138UL)
-#define CKM_CDMF_KEY_GEN                (0x140UL)
-#define CKM_CDMF_ECB                    (0x141UL)
-#define CKM_CDMF_CBC                    (0x142UL)
-#define CKM_CDMF_MAC                    (0x143UL)
-#define CKM_CDMF_MAC_GENERAL            (0x144UL)
-#define CKM_CDMF_CBC_PAD                (0x145UL)
-#define CKM_MD2                         (0x200UL)
-#define CKM_MD2_HMAC                    (0x201UL)
-#define CKM_MD2_HMAC_GENERAL            (0x202UL)
-#define CKM_MD5                         (0x210UL)
-#define CKM_MD5_HMAC                    (0x211UL)
-#define CKM_MD5_HMAC_GENERAL            (0x212UL)
-#define CKM_SHA_1                       (0x220UL)
-#define CKM_SHA_1_HMAC                  (0x221UL)
-#define CKM_SHA_1_HMAC_GENERAL          (0x222UL)
-#define CKM_RIPEMD128                   (0x230UL)
-#define CKM_RIPEMD128_HMAC              (0x231UL)
-#define CKM_RIPEMD128_HMAC_GENERAL      (0x232UL)
-#define CKM_RIPEMD160                   (0x240UL)
-#define CKM_RIPEMD160_HMAC              (0x241UL)
-#define CKM_RIPEMD160_HMAC_GENERAL      (0x242UL)
-#define CKM_SHA256                      (0x250UL)
-#define CKM_SHA256_HMAC                 (0x251UL)
-#define CKM_SHA256_HMAC_GENERAL         (0x252UL)
-#define CKM_SHA224                      (0x255UL)
-#define CKM_SHA224_HMAC                 (0x256UL)
-#define CKM_SHA224_HMAC_GENERAL         (0x257UL)
-#define CKM_SHA384                      (0x260UL)
-#define CKM_SHA384_HMAC                 (0x261UL)
-#define CKM_SHA384_HMAC_GENERAL         (0x262UL)
-#define CKM_SHA512                      (0x270UL)
-#define CKM_SHA512_HMAC                 (0x271UL)
-#define CKM_SHA512_HMAC_GENERAL         (0x272UL)
-#define CKM_SHA3_256                    (0x2B0UL)
-#define CKM_SHA3_256_HMAC               (0x2B1UL)
-#define CKM_SHA3_256_HMAC_GENERAL       (0x2B2UL)
-#define CKM_SHA3_256_KEY_GEN            (0x2B3UL)
-#define CKM_SHA3_224                    (0x2B5UL)
-#define CKM_SHA3_224_HMAC               (0x2B6UL)
-#define CKM_SHA3_224_HMAC_GENERAL       (0x2B7UL)
-#define CKM_SHA3_224_KEY_GEN            (0x2B8UL)
-#define CKM_SHA3_384                    (0x2C0UL)
-#define CKM_SHA3_384_HMAC               (0x2C1UL)
-#define CKM_SHA3_384_HMAC_GENERAL       (0x2C2UL)
-#define CKM_SHA3_384_KEY_GEN            (0x2C3UL)
-#define CKM_SHA3_512                    (0x2D0UL)
-#define CKM_SHA3_512_HMAC               (0x2D1UL)
-#define CKM_SHA3_512_HMAC_GENERAL       (0x2D2UL)
-#define CKM_SHA3_512_KEY_GEN            (0x2D3UL)
-#define CKM_CAST_KEY_GEN                (0x300UL)
-#define CKM_CAST_ECB                    (0x301UL)
-#define CKM_CAST_CBC                    (0x302UL)
-#define CKM_CAST_MAC                    (0x303UL)
-#define CKM_CAST_MAC_GENERAL            (0x304UL)
-#define CKM_CAST_CBC_PAD                (0x305UL)
-#define CKM_CAST3_KEY_GEN               (0x310UL)
-#define CKM_CAST3_ECB                   (0x311UL)
-#define CKM_CAST3_CBC                   (0x312UL)
-#define CKM_CAST3_MAC                   (0x313UL)
-#define CKM_CAST3_MAC_GENERAL           (0x314UL)
-#define CKM_CAST3_CBC_PAD               (0x315UL)
-#define CKM_CAST5_KEY_GEN               (0x320UL)
-#define CKM_CAST128_KEY_GEN             (0x320UL)
-#define CKM_CAST5_ECB                   (0x321UL)
-#define CKM_CAST128_ECB                 (0x321UL)
-#define CKM_CAST5_CBC                   (0x322UL)
-#define CKM_CAST128_CBC                 (0x322UL)
-#define CKM_CAST5_MAC                   (0x323UL)
-#define CKM_CAST128_MAC                 (0x323UL)
-#define CKM_CAST5_MAC_GENERAL           (0x324UL)
-#define CKM_CAST128_MAC_GENERAL         (0x324UL)
-#define CKM_CAST5_CBC_PAD               (0x325UL)
-#define CKM_CAST128_CBC_PAD             (0x325UL)
-#define CKM_RC5_KEY_GEN                 (0x330UL)
-#define CKM_RC5_ECB                     (0x331UL)
-#define CKM_RC5_CBC                     (0x332UL)
-#define CKM_RC5_MAC                     (0x333UL)
-#define CKM_RC5_MAC_GENERAL             (0x334UL)
-#define CKM_RC5_CBC_PAD                 (0x335UL)
-#define CKM_IDEA_KEY_GEN                (0x340UL)
-#define CKM_IDEA_ECB                    (0x341UL)
-#define CKM_IDEA_CBC                    (0x342UL)
-#define CKM_IDEA_MAC                    (0x343UL)
-#define CKM_IDEA_MAC_GENERAL            (0x344UL)
-#define CKM_IDEA_CBC_PAD                (0x345UL)
-#define CKM_GENERIC_SECRET_KEY_GEN      (0x350UL)
-#define CKM_CONCATENATE_BASE_AND_KEY    (0x360UL)
-#define CKM_CONCATENATE_BASE_AND_DATA   (0x362UL)
-#define CKM_CONCATENATE_DATA_AND_BASE   (0x363UL)
-#define CKM_XOR_BASE_AND_DATA           (0x364UL)
-#define CKM_EXTRACT_KEY_FROM_KEY        (0x365UL)
-#define CKM_SSL3_PRE_MASTER_KEY_GEN     (0x370UL)
-#define CKM_SSL3_MASTER_KEY_DERIVE      (0x371UL)
-#define CKM_SSL3_KEY_AND_MAC_DERIVE     (0x372UL)
-#define CKM_SSL3_MASTER_KEY_DERIVE_DH   (0x373UL)
-#define CKM_TLS_PRE_MASTER_KEY_GEN      (0x374UL)
-#define CKM_TLS_MASTER_KEY_DERIVE       (0x375UL)
-#define CKM_TLS_KEY_AND_MAC_DERIVE      (0x376UL)
-#define CKM_TLS_MASTER_KEY_DERIVE_DH    (0x377UL)
-#define CKM_SSL3_MD5_MAC                (0x380UL)
-#define CKM_SSL3_SHA1_MAC               (0x381UL)
-#define CKM_MD5_KEY_DERIVATION          (0x390UL)
-#define CKM_MD2_KEY_DERIVATION          (0x391UL)
-#define CKM_SHA1_KEY_DERIVATION         (0x392UL)
-#define CKM_PBE_MD2_DES_CBC             (0x3a0UL)
-#define CKM_PBE_MD5_DES_CBC             (0x3a1UL)
-#define CKM_PBE_MD5_CAST_CBC            (0x3a2UL)
-#define CKM_PBE_MD5_CAST3_CBC           (0x3a3UL)
-#define CKM_PBE_MD5_CAST5_CBC           (0x3a4UL)
-#define CKM_PBE_MD5_CAST128_CBC         (0x3a4UL)
-#define CKM_PBE_SHA1_CAST5_CBC          (0x3a5UL)
-#define CKM_PBE_SHA1_CAST128_CBC        (0x3a5UL)
-#define CKM_PBE_SHA1_RC4_128            (0x3a6UL)
-#define CKM_PBE_SHA1_RC4_40             (0x3a7UL)
-#define CKM_PBE_SHA1_DES3_EDE_CBC       (0x3a8UL)
-#define CKM_PBE_SHA1_DES2_EDE_CBC       (0x3a9UL)
-#define CKM_PBE_SHA1_RC2_128_CBC        (0x3aaUL)
-#define CKM_PBE_SHA1_RC2_40_CBC         (0x3abUL)
-#define CKM_PKCS5_PBKD2                 (0x3b0UL)
-#define CKM_PBA_SHA1_WITH_SHA1_HMAC     (0x3c0UL)
-#define CKM_KEY_WRAP_LYNKS              (0x400UL)
-#define CKM_KEY_WRAP_SET_OAEP           (0x401UL)
-#define CKM_SKIPJACK_KEY_GEN            (0x1000UL)
-#define CKM_SKIPJACK_ECB64              (0x1001UL)
-#define CKM_SKIPJACK_CBC64              (0x1002UL)
-#define CKM_SKIPJACK_OFB64              (0x1003UL)
-#define CKM_SKIPJACK_CFB64              (0x1004UL)
-#define CKM_SKIPJACK_CFB32              (0x1005UL)
-#define CKM_SKIPJACK_CFB16              (0x1006UL)
-#define CKM_SKIPJACK_CFB8               (0x1007UL)
-#define CKM_SKIPJACK_WRAP               (0x1008UL)
-#define CKM_SKIPJACK_PRIVATE_WRAP       (0x1009UL)
-#define CKM_SKIPJACK_RELAYX             (0x100aUL)
-#define CKM_KEA_KEY_PAIR_GEN            (0x1010UL)
-#define CKM_KEA_KEY_DERIVE              (0x1011UL)
-#define CKM_FORTEZZA_TIMESTAMP          (0x1020UL)
-#define CKM_BATON_KEY_GEN               (0x1030UL)
-#define CKM_BATON_ECB128                (0x1031UL)
-#define CKM_BATON_ECB96                 (0x1032UL)
-#define CKM_BATON_CBC128                (0x1033UL)
-#define CKM_BATON_COUNTER               (0x1034UL)
-#define CKM_BATON_SHUFFLE               (0x1035UL)
-#define CKM_BATON_WRAP                  (0x1036UL)
-#define CKM_ECDSA_KEY_PAIR_GEN          (0x1040UL)
-#define CKM_EC_KEY_PAIR_GEN             (0x1040UL)
-#define CKM_ECDSA                       (0x1041UL)
-#define CKM_ECDSA_SHA1                  (0x1042UL)
-#define CKM_ECDSA_SHA224                (0x1043UL)
-#define CKM_ECDSA_SHA256                (0x1044UL)
-#define CKM_ECDSA_SHA384                (0x1045UL)
-#define CKM_ECDSA_SHA512                (0x1046UL)
-#define CKM_ECDSA_SHA3_224              (0x1047UL)
-#define CKM_ECDSA_SHA3_256              (0x1048UL)
-#define CKM_ECDSA_SHA3_384              (0x1049UL)
-#define CKM_ECDSA_SHA3_512              (0x104AUL)
-#define CKM_ECDH1_DERIVE                (0x1050UL)
-#define CKM_ECDH1_COFACTOR_DERIVE       (0x1051UL)
-#define CKM_ECMQV_DERIVE                (0x1052UL)
-#define CKM_EC_EDWARDS_KEY_PAIR_GEN     (0x1055UL)
-#define CKM_EC_MONTGOMERY_KEY_PAIR_GEN  (0x1056UL)
-#define CKM_EDDSA                       (0x1057UL)
-#define CKM_JUNIPER_KEY_GEN             (0x1060UL)
-#define CKM_JUNIPER_ECB128              (0x1061UL)
-#define CKM_JUNIPER_CBC128              (0x1062UL)
-#define CKM_JUNIPER_COUNTER             (0x1063UL)
-#define CKM_JUNIPER_SHUFFLE             (0x1064UL)
-#define CKM_JUNIPER_WRAP                (0x1065UL)
-#define CKM_FASTHASH                    (0x1070UL)
-#define CKM_AES_KEY_GEN                 (0x1080UL)
-#define CKM_AES_ECB                     (0x1081UL)
-#define CKM_AES_CBC                     (0x1082UL)
-#define CKM_AES_MAC                     (0x1083UL)
-#define CKM_AES_MAC_GENERAL             (0x1084UL)
-#define CKM_AES_CBC_PAD                 (0x1085UL)
-#define CKM_AES_CTR                     (0x1086UL)
-#define CKM_AES_GCM                     (0x1087UL)
-#define CKM_AES_CCM                     (0x1088UL)
-#define CKM_AES_CTS                     (0x1089UL)
-#define CKM_AES_CMAC                    (0x108AUL)
-#define CKM_AES_CMAC_GENERAL            (0x108BUL)
-#define CKM_AES_XCBC_MAC                (0x108CUL)
-#define CKM_AES_XCBC_MAC_96             (0x108DUL)
-#define CKM_AES_GMAC                    (0x108EUL)
-#define CKM_BLOWFISH_KEY_GEN            (0x1090UL)
-#define CKM_BLOWFISH_CBC                (0x1091UL)
-#define CKM_TWOFISH_KEY_GEN             (0x1092UL)
-#define CKM_TWOFISH_CBC                 (0x1093UL)
-#define CKM_DES_ECB_ENCRYPT_DATA        (0x1100UL)
-#define CKM_DES_CBC_ENCRYPT_DATA        (0x1101UL)
-#define CKM_DES3_ECB_ENCRYPT_DATA       (0x1102UL)
-#define CKM_DES3_CBC_ENCRYPT_DATA       (0x1103UL)
-#define CKM_AES_ECB_ENCRYPT_DATA        (0x1104UL)
-#define CKM_AES_CBC_ENCRYPT_DATA        (0x1105UL)
-#define CKM_DSA_PARAMETER_GEN           (0x2000UL)
-#define CKM_DH_PKCS_PARAMETER_GEN       (0x2001UL)
-#define CKM_X9_42_DH_PARAMETER_GEN      (0x2002UL)
-#define CKM_AES_OFB                     (0x2104UL)
-#define CKM_AES_CFB64                   (0x2105UL)
-#define CKM_AES_CFB8                    (0x2106UL)
-#define CKM_AES_CFB128                  (0x2107UL)
-#define CKM_AES_KEY_WRAP                (0x2109UL)
-#define CKM_AES_KEY_WRAP_PAD            (0x210AUL)
-#define CKM_XEDDSA                      (0x4029UL)
-
-
-#define CKM_VENDOR_DEFINED              (1UL << 31)
-
-struct ck_mechanism
-{
-  ck_mechanism_type_t mechanism;
-  void *parameter;
-  unsigned long parameter_len;
+struct CK_OTP_PARAMS {
+    CK_OTP_PARAM * pParams;
+    CK_ULONG ulCount;
 };

+struct CK_OTP_SIGNATURE_INFO {
+    CK_OTP_PARAM * pParams;
+    CK_ULONG ulCount;
+};

-struct ck_mechanism_info
-{
-  unsigned long min_key_size;
-  unsigned long max_key_size;
-  ck_flags_t flags;
-};
-
-#define CKF_HW                  (1UL << 0)
-
-#define CKF_MESSAGE_ENCRYPT     (1UL << 1)
-#define CKF_MESSAGE_DECRYPT     (1UL << 2)
-#define CKF_MESSAGE_SIGN        (1UL << 3)
-#define CKF_MESSAGE_VERIFY      (1UL << 4)
-#define CKF_MULTI_MESSAGE       (1UL << 5)
-#define CKF_FIND_OBJECTS        (1UL << 6)
-
-#define CKF_ENCRYPT             (1UL << 8)
-#define CKF_DECRYPT             (1UL << 9)
-#define CKF_DIGEST              (1UL << 10)
-#define CKF_SIGN                (1UL << 11)
-#define CKF_SIGN_RECOVER        (1UL << 12)
-#define CKF_VERIFY              (1UL << 13)
-#define CKF_VERIFY_RECOVER      (1UL << 14)
-#define CKF_GENERATE            (1UL << 15)
-#define CKF_GENERATE_KEY_PAIR   (1UL << 16)
-#define CKF_WRAP                (1UL << 17)
-#define CKF_UNWRAP              (1UL << 18)
-#define CKF_DERIVE              (1UL << 19)
-#define CKF_EXTENSION           (1UL << 31)
-
-#define CKF_EC_F_P              (1UL << 20)
-#define CKF_EC_F_2M             (1UL << 21)
-#define CKF_EC_ECPARAMETERS     (1UL << 22)
-#define CKF_EC_OID              (1UL << 23)
-#define CKF_EC_NAMEDCURVE       CKF_EC_OID
-#define CKF_EC_UNCOMPRESS       (1UL << 24)
-#define CKF_EC_COMPRESS         (1UL << 25)
-#define CKF_EC_CURVENAME        (1UL << 26)
-
-/* Flags for C_WaitForSlotEvent.  */
-#define CKF_DONT_BLOCK          (1UL)
-
-/* Flags for Key derivation */
-#define CKD_NULL                (1UL)
-#define CKD_SHA1_KDF            (2UL)
-#define CKD_SHA224_KDF          (5UL)
-#define CKD_SHA256_KDF          (6UL)
-#define CKD_SHA384_KDF          (7UL)
-#define CKD_SHA512_KDF          (8UL)
-
-typedef struct CK_ECDH1_DERIVE_PARAMS {
-        unsigned long  kdf;
-        unsigned long  ulSharedDataLen;
-        unsigned char *  pSharedData;
-        unsigned long  ulPublicDataLen;
-        unsigned char *  pPublicData;
-} CK_ECDH1_DERIVE_PARAMS;
-
-typedef struct CK_ECMQV_DERIVE_PARAMS {
-        unsigned long kdf;
-        unsigned long ulSharedDataLen;
-        unsigned char * pSharedData;
-        unsigned long ulPublicDataLen;
-        unsigned char * pPublicData;
-        unsigned long ulPrivateDataLen;
-        CK_OBJECT_HANDLE hPrivateData;
-        unsigned long ulPublicDataLen2;
-        unsigned char * pPublicData2;
-        CK_OBJECT_HANDLE publicKey;
-} CK_ECMQV_DERIVE_PARAMS;
-
-typedef unsigned long ck_rsa_pkcs_mgf_type_t;
-typedef unsigned long CK_RSA_PKCS_OAEP_SOURCE_TYPE;
-
-typedef struct CK_RSA_PKCS_OAEP_PARAMS {
-        CK_MECHANISM_TYPE hashAlg;
-        CK_RSA_PKCS_MGF_TYPE mgf;
-        CK_RSA_PKCS_OAEP_SOURCE_TYPE source;
-        void *pSourceData;
-        unsigned long ulSourceDataLen;
-} CK_RSA_PKCS_OAEP_PARAMS;
-
-typedef struct CK_RSA_PKCS_PSS_PARAMS {
-        ck_mechanism_type_t hashAlg;
-        CK_RSA_PKCS_MGF_TYPE mgf;
-        unsigned long sLen;
-} CK_RSA_PKCS_PSS_PARAMS;
-
-#define CKG_MGF1_SHA1           (1UL)
-#define CKG_MGF1_SHA224         (5UL)
-#define CKG_MGF1_SHA256         (2UL)
-#define CKG_MGF1_SHA384         (3UL)
-#define CKG_MGF1_SHA512         (4UL)
-#define CKG_MGF1_SHA3_224       (6UL)
-#define CKG_MGF1_SHA3_256       (7UL)
-#define CKG_MGF1_SHA3_384       (8UL)
-#define CKG_MGF1_SHA3_512       (9UL)
-
-#define CKZ_DATA_SPECIFIED      (1UL)
-
-typedef struct CK_GCM_PARAMS {
-        void * pIv;
-        unsigned long ulIvLen;
-        unsigned long ulIvBits;
-        void * pAAD;
-        unsigned long ulAADLen;
-        unsigned long ulTagBits;
-} CK_GCM_PARAMS;
-
-/* EDDSA */
-typedef struct CK_EDDSA_PARAMS {
-        unsigned char phFlag;
-        unsigned long ulContextDataLen;
-        unsigned char *pContextData;
-} CK_EDDSA_PARAMS;
-
-typedef CK_EDDSA_PARAMS *CK_EDDSA_PARAMS_PTR;
-
-/* XEDDSA */
-typedef struct CK_XEDDSA_PARAMS {
-        unsigned long hash;
-} CK_XEDDSA_PARAMS;
-
-typedef CK_XEDDSA_PARAMS *CK_XEDDSA_PARAMS_PTR;
-
-typedef struct CK_AES_CTR_PARAMS {
-    unsigned long ulCounterBits;
-    unsigned char cb[16];
-} CK_AES_CTR_PARAMS;
-
-typedef CK_AES_CTR_PARAMS *CK_AES_CTR_PARAMS_PTR;
-
-typedef unsigned long ck_rv_t;
-
-
-typedef ck_rv_t (*ck_notify_t) (ck_session_handle_t session,
-                                ck_notification_t event, void *application);
-
-struct ck_interface {
-  char * pInterfaceName;
-  void * pFunctionList;
-  ck_flags_t flags;
-};
-
-#define CKF_INTERFACE_FORK_SAFE (0x00000001UL)
-
-/* Forward reference.  */
-struct ck_function_list;
-struct ck_function_list_3_0;
-
-#define _CK_DECLARE_FUNCTION(name, args)        \
-typedef ck_rv_t (*CK_ ## name) args;            \
-ck_rv_t CK_SPEC name args
-
-_CK_DECLARE_FUNCTION (C_Initialize, (void *init_args));
-_CK_DECLARE_FUNCTION (C_Finalize, (void *reserved));
-_CK_DECLARE_FUNCTION (C_GetInfo, (struct ck_info *info));
-_CK_DECLARE_FUNCTION (C_GetFunctionList,
-                      (struct ck_function_list **function_list));
-
-_CK_DECLARE_FUNCTION (C_GetSlotList,
-                      (unsigned char token_present, ck_slot_id_t *slot_list,
-                       unsigned long *count));
-_CK_DECLARE_FUNCTION (C_GetSlotInfo,
-                      (ck_slot_id_t slot_id, struct ck_slot_info *info));
-_CK_DECLARE_FUNCTION (C_GetTokenInfo,
-                      (ck_slot_id_t slot_id, struct ck_token_info *info));
-_CK_DECLARE_FUNCTION (C_WaitForSlotEvent,
-                      (ck_flags_t flags, ck_slot_id_t *slot, void *reserved));
-_CK_DECLARE_FUNCTION (C_GetMechanismList,
-                      (ck_slot_id_t slot_id,
-                       ck_mechanism_type_t *mechanism_list,
-                       unsigned long *count));
-_CK_DECLARE_FUNCTION (C_GetMechanismInfo,
-                      (ck_slot_id_t slot_id, ck_mechanism_type_t type,
-                       struct ck_mechanism_info *info));
-_CK_DECLARE_FUNCTION (C_InitToken,
-                      (ck_slot_id_t slot_id, unsigned char *pin,
-                       unsigned long pin_len, unsigned char *label));
-_CK_DECLARE_FUNCTION (C_InitPIN,
-                      (ck_session_handle_t session, unsigned char *pin,
-                       unsigned long pin_len));
-_CK_DECLARE_FUNCTION (C_SetPIN,
-                      (ck_session_handle_t session, unsigned char *old_pin,
-                       unsigned long old_len, unsigned char *new_pin,
-                       unsigned long new_len));
-
-_CK_DECLARE_FUNCTION (C_OpenSession,
-                      (ck_slot_id_t slot_id, ck_flags_t flags,
-                       void *application, ck_notify_t notify,
-                       ck_session_handle_t *session));
-_CK_DECLARE_FUNCTION (C_CloseSession, (ck_session_handle_t session));
-_CK_DECLARE_FUNCTION (C_CloseAllSessions, (ck_slot_id_t slot_id));
-_CK_DECLARE_FUNCTION (C_GetSessionInfo,
-                      (ck_session_handle_t session,
-                       struct ck_session_info *info));
-_CK_DECLARE_FUNCTION (C_GetOperationState,
-                      (ck_session_handle_t session,
-                       unsigned char *operation_state,
-                       unsigned long *operation_state_len));
-_CK_DECLARE_FUNCTION (C_SetOperationState,
-                      (ck_session_handle_t session,
-                       unsigned char *operation_state,
-                       unsigned long operation_state_len,
-                       ck_object_handle_t encryption_key,
-                       ck_object_handle_t authentication_key));
-_CK_DECLARE_FUNCTION (C_Login,
-                      (ck_session_handle_t session, ck_user_type_t user_type,
-                       unsigned char *pin, unsigned long pin_len));
-_CK_DECLARE_FUNCTION (C_Logout, (ck_session_handle_t session));
-
-_CK_DECLARE_FUNCTION (C_CreateObject,
-                      (ck_session_handle_t session,
-                       struct ck_attribute *templ,
-                       unsigned long count, ck_object_handle_t *object));
-_CK_DECLARE_FUNCTION (C_CopyObject,
-                      (ck_session_handle_t session, ck_object_handle_t object,
-                       struct ck_attribute *templ, unsigned long count,
-                       ck_object_handle_t *new_object));
-_CK_DECLARE_FUNCTION (C_DestroyObject,
-                      (ck_session_handle_t session,
-                       ck_object_handle_t object));
-_CK_DECLARE_FUNCTION (C_GetObjectSize,
-                      (ck_session_handle_t session,
-                       ck_object_handle_t object,
-                       unsigned long *size));
-_CK_DECLARE_FUNCTION (C_GetAttributeValue,
-                      (ck_session_handle_t session,
-                       ck_object_handle_t object,
-                       struct ck_attribute *templ,
-                       unsigned long count));
-_CK_DECLARE_FUNCTION (C_SetAttributeValue,
-                      (ck_session_handle_t session,
-                       ck_object_handle_t object,
-                       struct ck_attribute *templ,
-                       unsigned long count));
-_CK_DECLARE_FUNCTION (C_FindObjectsInit,
-                      (ck_session_handle_t session,
-                       struct ck_attribute *templ,
-                       unsigned long count));
-_CK_DECLARE_FUNCTION (C_FindObjects,
-                      (ck_session_handle_t session,
-                       ck_object_handle_t *object,
-                       unsigned long max_object_count,
-                       unsigned long *object_count));
-_CK_DECLARE_FUNCTION (C_FindObjectsFinal,
-                      (ck_session_handle_t session));
-
-_CK_DECLARE_FUNCTION (C_EncryptInit,
-                      (ck_session_handle_t session,
-                       struct ck_mechanism *mechanism,
-                       ck_object_handle_t key));
-_CK_DECLARE_FUNCTION (C_Encrypt,
-                      (ck_session_handle_t session,
-                       unsigned char *data, unsigned long data_len,
-                       unsigned char *encrypted_data,
-                       unsigned long *encrypted_data_len));
-_CK_DECLARE_FUNCTION (C_EncryptUpdate,
-                      (ck_session_handle_t session,
-                       unsigned char *part, unsigned long part_len,
-                       unsigned char *encrypted_part,
-                       unsigned long *encrypted_part_len));
-_CK_DECLARE_FUNCTION (C_EncryptFinal,
-                      (ck_session_handle_t session,
-                       unsigned char *last_encrypted_part,
-                       unsigned long *last_encrypted_part_len));
-
-_CK_DECLARE_FUNCTION (C_DecryptInit,
-                      (ck_session_handle_t session,
-                       struct ck_mechanism *mechanism,
-                       ck_object_handle_t key));
-_CK_DECLARE_FUNCTION (C_Decrypt,
-                      (ck_session_handle_t session,
-                       unsigned char *encrypted_data,
-                       unsigned long encrypted_data_len,
-                       unsigned char *data, unsigned long *data_len));
-_CK_DECLARE_FUNCTION (C_DecryptUpdate,
-                      (ck_session_handle_t session,
-                       unsigned char *encrypted_part,
-                       unsigned long encrypted_part_len,
-                       unsigned char *part, unsigned long *part_len));
-_CK_DECLARE_FUNCTION (C_DecryptFinal,
-                      (ck_session_handle_t session,
-                       unsigned char *last_part,
-                       unsigned long *last_part_len));
-
-_CK_DECLARE_FUNCTION (C_DigestInit,
-                      (ck_session_handle_t session,
-                       struct ck_mechanism *mechanism));
-_CK_DECLARE_FUNCTION (C_Digest,
-                      (ck_session_handle_t session,
-                       unsigned char *data, unsigned long data_len,
-                       unsigned char *digest,
-                       unsigned long *digest_len));
-_CK_DECLARE_FUNCTION (C_DigestUpdate,
-                      (ck_session_handle_t session,
-                       unsigned char *part, unsigned long part_len));
-_CK_DECLARE_FUNCTION (C_DigestKey,
-                      (ck_session_handle_t session, ck_object_handle_t key));
-_CK_DECLARE_FUNCTION (C_DigestFinal,
-                      (ck_session_handle_t session,
-                       unsigned char *digest,
-                       unsigned long *digest_len));
-
-_CK_DECLARE_FUNCTION (C_SignInit,
-                      (ck_session_handle_t session,
-                       struct ck_mechanism *mechanism,
-                       ck_object_handle_t key));
-_CK_DECLARE_FUNCTION (C_Sign,
-                      (ck_session_handle_t session,
-                       unsigned char *data, unsigned long data_len,
-                       unsigned char *signature,
-                       unsigned long *signature_len));
-_CK_DECLARE_FUNCTION (C_SignUpdate,
-                      (ck_session_handle_t session,
-                       unsigned char *part, unsigned long part_len));
-_CK_DECLARE_FUNCTION (C_SignFinal,
-                      (ck_session_handle_t session,
-                       unsigned char *signature,
-                       unsigned long *signature_len));
-_CK_DECLARE_FUNCTION (C_SignRecoverInit,
-                      (ck_session_handle_t session,
-                       struct ck_mechanism *mechanism,
-                       ck_object_handle_t key));
-_CK_DECLARE_FUNCTION (C_SignRecover,
-                      (ck_session_handle_t session,
-                       unsigned char *data, unsigned long data_len,
-                       unsigned char *signature,
-                       unsigned long *signature_len));
-
-_CK_DECLARE_FUNCTION (C_VerifyInit,
-                      (ck_session_handle_t session,
-                       struct ck_mechanism *mechanism,
-                       ck_object_handle_t key));
-_CK_DECLARE_FUNCTION (C_Verify,
-                      (ck_session_handle_t session,
-                       unsigned char *data, unsigned long data_len,
-                       unsigned char *signature,
-                       unsigned long signature_len));
-_CK_DECLARE_FUNCTION (C_VerifyUpdate,
-                      (ck_session_handle_t session,
-                       unsigned char *part, unsigned long part_len));
-_CK_DECLARE_FUNCTION (C_VerifyFinal,
-                      (ck_session_handle_t session,
-                       unsigned char *signature,
-                       unsigned long signature_len));
-_CK_DECLARE_FUNCTION (C_VerifyRecoverInit,
-                      (ck_session_handle_t session,
-                       struct ck_mechanism *mechanism,
-                       ck_object_handle_t key));
-_CK_DECLARE_FUNCTION (C_VerifyRecover,
-                      (ck_session_handle_t session,
-                       unsigned char *signature,
-                       unsigned long signature_len,
-                       unsigned char *data,
-                       unsigned long *data_len));
-
-_CK_DECLARE_FUNCTION (C_DigestEncryptUpdate,
-                      (ck_session_handle_t session,
-                       unsigned char *part, unsigned long part_len,
-                       unsigned char *encrypted_part,
-                       unsigned long *encrypted_part_len));
-_CK_DECLARE_FUNCTION (C_DecryptDigestUpdate,
-                      (ck_session_handle_t session,
-                       unsigned char *encrypted_part,
-                       unsigned long encrypted_part_len,
-                       unsigned char *part,
-                       unsigned long *part_len));
-_CK_DECLARE_FUNCTION (C_SignEncryptUpdate,
-                      (ck_session_handle_t session,
-                       unsigned char *part, unsigned long part_len,
-                       unsigned char *encrypted_part,
-                       unsigned long *encrypted_part_len));
-_CK_DECLARE_FUNCTION (C_DecryptVerifyUpdate,
-                      (ck_session_handle_t session,
-                       unsigned char *encrypted_part,
-                       unsigned long encrypted_part_len,
-                       unsigned char *part,
-                       unsigned long *part_len));
-
-_CK_DECLARE_FUNCTION (C_GenerateKey,
-                      (ck_session_handle_t session,
-                       struct ck_mechanism *mechanism,
-                       struct ck_attribute *templ,
-                       unsigned long count,
-                       ck_object_handle_t *key));
-_CK_DECLARE_FUNCTION (C_GenerateKeyPair,
-                      (ck_session_handle_t session,
-                       struct ck_mechanism *mechanism,
-                       struct ck_attribute *public_key_template,
-                       unsigned long public_key_attribute_count,
-                       struct ck_attribute *private_key_template,
-                       unsigned long private_key_attribute_count,
-                       ck_object_handle_t *public_key,
-                       ck_object_handle_t *private_key));
-_CK_DECLARE_FUNCTION (C_WrapKey,
-                      (ck_session_handle_t session,
-                       struct ck_mechanism *mechanism,
-                       ck_object_handle_t wrapping_key,
-                       ck_object_handle_t key,
-                       unsigned char *wrapped_key,
-                       unsigned long *wrapped_key_len));
-_CK_DECLARE_FUNCTION (C_UnwrapKey,
-                      (ck_session_handle_t session,
-                       struct ck_mechanism *mechanism,
-                       ck_object_handle_t unwrapping_key,
-                       unsigned char *wrapped_key,
-                       unsigned long wrapped_key_len,
-                       struct ck_attribute *templ,
-                       unsigned long attribute_count,
-                       ck_object_handle_t *key));
-_CK_DECLARE_FUNCTION (C_DeriveKey,
-                      (ck_session_handle_t session,
-                       struct ck_mechanism *mechanism,
-                       ck_object_handle_t base_key,
-                       struct ck_attribute *templ,
-                       unsigned long attribute_count,
-                       ck_object_handle_t *key));
-
-_CK_DECLARE_FUNCTION (C_SeedRandom,
-                      (ck_session_handle_t session, unsigned char *seed,
-                       unsigned long seed_len));
-_CK_DECLARE_FUNCTION (C_GenerateRandom,
-                      (ck_session_handle_t session,
-                       unsigned char *random_data,
-                       unsigned long random_len));
-
-_CK_DECLARE_FUNCTION (C_GetFunctionStatus, (ck_session_handle_t session));
-_CK_DECLARE_FUNCTION (C_CancelFunction, (ck_session_handle_t session));
-
-_CK_DECLARE_FUNCTION (C_GetInterfaceList,
-                      (struct ck_interface *interfaces_list,
-                       unsigned long *count));
-_CK_DECLARE_FUNCTION (C_GetInterface,
-                      (unsigned char *interface_name,
-                       struct ck_version *version,
-                       struct ck_interface **interface_ptr,
-                       ck_flags_t flags));
-
-_CK_DECLARE_FUNCTION (C_LoginUser,
-                      (ck_session_handle_t session,
-                       ck_user_type_t user_type,
-                       unsigned char *pin,
-                       unsigned long pin_len,
-                       unsigned char *username,
-                       unsigned long username_len));
-
-_CK_DECLARE_FUNCTION (C_SessionCancel,
-                      (ck_session_handle_t session,
-                       ck_flags_t flags));
-
-_CK_DECLARE_FUNCTION (C_MessageEncryptInit,
-                      (ck_session_handle_t session,
-                       struct ck_mechanism *mechanism,
-                       ck_object_handle_t key));
-_CK_DECLARE_FUNCTION (C_EncryptMessage,
-                      (ck_session_handle_t session,
-                       void *parameter,
-                       unsigned long parameter_len,
-                       unsigned char *associated_data,
-                       unsigned long associated_data_len,
-                       unsigned char *plaintext,
-                       unsigned long plaintext_len,
-                       unsigned char *ciphertext,
-                       unsigned long *ciphertext_len));
-_CK_DECLARE_FUNCTION (C_EncryptMessageBegin,
-                      (ck_session_handle_t session,
-                       void *parameter,
-                       unsigned long parameter_len,
-                       unsigned char *associated_data,
-                       unsigned long associated_data_len));
-_CK_DECLARE_FUNCTION (C_EncryptMessageNext,
-                      (ck_session_handle_t session,
-                       void *parameter,
-                       unsigned long parameter_len,
-                       unsigned char *plaintext_part,
-                       unsigned long plaintext_part_len,
-                       unsigned char *ciphertext_part,
-                       unsigned long *ciphertext_part_len,
-                       ck_flags_t flags));
-_CK_DECLARE_FUNCTION (C_MessageEncryptFinal,
-                      (ck_session_handle_t session));
-
-_CK_DECLARE_FUNCTION (C_MessageDecryptInit,
-                      (ck_session_handle_t session,
-                       struct ck_mechanism *mechanism,
-                       ck_object_handle_t key));
-_CK_DECLARE_FUNCTION (C_DecryptMessage,
-                      (ck_session_handle_t session,
-                       void *parameter,
-                       unsigned long parameter_len,
-                       unsigned char *associated_data,
-                       unsigned long associated_data_len,
-                       unsigned char *ciphertext,
-                       unsigned long ciphertext_len,
-                       unsigned char *plaintext,
-                       unsigned long *plaintext_len));
-_CK_DECLARE_FUNCTION (C_DecryptMessageBegin,
-                      (ck_session_handle_t session,
-                       void *parameter,
-                       unsigned long parameter_len,
-                       unsigned char *associated_data,
-                       unsigned long associated_data_len));
-_CK_DECLARE_FUNCTION (C_DecryptMessageNext,
-                      (ck_session_handle_t session,
-                       void *parameter,
-                       unsigned long parameter_len,
-                       unsigned char *ciphertext_part,
-                       unsigned long ciphertext_part_len,
-                       unsigned char *plaintext_part,
-                       unsigned long *plaintext_part_len,
-                       ck_flags_t flags));
-_CK_DECLARE_FUNCTION (C_MessageDecryptFinal,
-                      (ck_session_handle_t session));
-
-_CK_DECLARE_FUNCTION (C_MessageSignInit,
-                      (ck_session_handle_t session,
-                       struct ck_mechanism *mechanism,
-                       ck_object_handle_t key));
-_CK_DECLARE_FUNCTION (C_SignMessage,
-                      (ck_session_handle_t session,
-                       void *parameter,
-                       unsigned long parameter_len,
-                       unsigned char *data,
-                       unsigned long data_len,
-                       unsigned char *signature,
-                       unsigned long *signature_len));
-_CK_DECLARE_FUNCTION (C_SignMessageBegin,
-                      (ck_session_handle_t session,
-                       void *parameter,
-                       unsigned long parameter_len));
-_CK_DECLARE_FUNCTION (C_SignMessageNext,
-                      (ck_session_handle_t session,
-                       void *parameter,
-                       unsigned long parameter_len,
-                       unsigned char *data,
-                       unsigned long data_len,
-                       unsigned char *signature,
-                       unsigned long *signature_len));
-_CK_DECLARE_FUNCTION (C_MessageSignFinal,
-                      (ck_session_handle_t session));
-
-_CK_DECLARE_FUNCTION (C_MessageVerifyInit,
-                      (ck_session_handle_t session,
-                       struct ck_mechanism *mechanism,
-                       ck_object_handle_t key));
-_CK_DECLARE_FUNCTION (C_VerifyMessage,
-                      (ck_session_handle_t session,
-                       void *parameter,
-                       unsigned long parameter_len,
-                       unsigned char *data,
-                       unsigned long data_len,
-                       unsigned char *signature,
-                       unsigned long signature_len));
-_CK_DECLARE_FUNCTION (C_VerifyMessageBegin,
-                      (ck_session_handle_t session,
-                       void *parameter,
-                       unsigned long parameter_len));
-_CK_DECLARE_FUNCTION (C_VerifyMessageNext,
-                      (ck_session_handle_t session,
-                       void *parameter,
-                       unsigned long parameter_len,
-                       unsigned char *data,
-                       unsigned long data_len,
-                       unsigned char *signature,
-                       unsigned long signature_len));
-_CK_DECLARE_FUNCTION (C_MessageVerifyFinal,
-                      (ck_session_handle_t session));
-
-/* Flags in Message-based encryption/decryption API */
-#define CKF_END_OF_MESSAGE      (0x00000001UL)
-
-struct ck_function_list
-{
-  struct ck_version version;
-  CK_C_Initialize C_Initialize;
-  CK_C_Finalize C_Finalize;
-  CK_C_GetInfo C_GetInfo;
-  CK_C_GetFunctionList C_GetFunctionList;
-  CK_C_GetSlotList C_GetSlotList;
-  CK_C_GetSlotInfo C_GetSlotInfo;
-  CK_C_GetTokenInfo C_GetTokenInfo;
-  CK_C_GetMechanismList C_GetMechanismList;
-  CK_C_GetMechanismInfo C_GetMechanismInfo;
-  CK_C_InitToken C_InitToken;
-  CK_C_InitPIN C_InitPIN;
-  CK_C_SetPIN C_SetPIN;
-  CK_C_OpenSession C_OpenSession;
-  CK_C_CloseSession C_CloseSession;
-  CK_C_CloseAllSessions C_CloseAllSessions;
-  CK_C_GetSessionInfo C_GetSessionInfo;
-  CK_C_GetOperationState C_GetOperationState;
-  CK_C_SetOperationState C_SetOperationState;
-  CK_C_Login C_Login;
-  CK_C_Logout C_Logout;
-  CK_C_CreateObject C_CreateObject;
-  CK_C_CopyObject C_CopyObject;
-  CK_C_DestroyObject C_DestroyObject;
-  CK_C_GetObjectSize C_GetObjectSize;
-  CK_C_GetAttributeValue C_GetAttributeValue;
-  CK_C_SetAttributeValue C_SetAttributeValue;
-  CK_C_FindObjectsInit C_FindObjectsInit;
-  CK_C_FindObjects C_FindObjects;
-  CK_C_FindObjectsFinal C_FindObjectsFinal;
-  CK_C_EncryptInit C_EncryptInit;
-  CK_C_Encrypt C_Encrypt;
-  CK_C_EncryptUpdate C_EncryptUpdate;
-  CK_C_EncryptFinal C_EncryptFinal;
-  CK_C_DecryptInit C_DecryptInit;
-  CK_C_Decrypt C_Decrypt;
-  CK_C_DecryptUpdate C_DecryptUpdate;
-  CK_C_DecryptFinal C_DecryptFinal;
-  CK_C_DigestInit C_DigestInit;
-  CK_C_Digest C_Digest;
-  CK_C_DigestUpdate C_DigestUpdate;
-  CK_C_DigestKey C_DigestKey;
-  CK_C_DigestFinal C_DigestFinal;
-  CK_C_SignInit C_SignInit;
-  CK_C_Sign C_Sign;
-  CK_C_SignUpdate C_SignUpdate;
-  CK_C_SignFinal C_SignFinal;
-  CK_C_SignRecoverInit C_SignRecoverInit;
-  CK_C_SignRecover C_SignRecover;
-  CK_C_VerifyInit C_VerifyInit;
-  CK_C_Verify C_Verify;
-  CK_C_VerifyUpdate C_VerifyUpdate;
-  CK_C_VerifyFinal C_VerifyFinal;
-  CK_C_VerifyRecoverInit C_VerifyRecoverInit;
-  CK_C_VerifyRecover C_VerifyRecover;
-  CK_C_DigestEncryptUpdate C_DigestEncryptUpdate;
-  CK_C_DecryptDigestUpdate C_DecryptDigestUpdate;
-  CK_C_SignEncryptUpdate C_SignEncryptUpdate;
-  CK_C_DecryptVerifyUpdate C_DecryptVerifyUpdate;
-  CK_C_GenerateKey C_GenerateKey;
-  CK_C_GenerateKeyPair C_GenerateKeyPair;
-  CK_C_WrapKey C_WrapKey;
-  CK_C_UnwrapKey C_UnwrapKey;
-  CK_C_DeriveKey C_DeriveKey;
-  CK_C_SeedRandom C_SeedRandom;
-  CK_C_GenerateRandom C_GenerateRandom;
-  CK_C_GetFunctionStatus C_GetFunctionStatus;
-  CK_C_CancelFunction C_CancelFunction;
-  CK_C_WaitForSlotEvent C_WaitForSlotEvent;
-};
-
-struct ck_function_list_3_0
-{
-  struct ck_version version;
-  CK_C_Initialize C_Initialize;
-  CK_C_Finalize C_Finalize;
-  CK_C_GetInfo C_GetInfo;
-  CK_C_GetFunctionList C_GetFunctionList;
-  CK_C_GetSlotList C_GetSlotList;
-  CK_C_GetSlotInfo C_GetSlotInfo;
-  CK_C_GetTokenInfo C_GetTokenInfo;
-  CK_C_GetMechanismList C_GetMechanismList;
-  CK_C_GetMechanismInfo C_GetMechanismInfo;
-  CK_C_InitToken C_InitToken;
-  CK_C_InitPIN C_InitPIN;
-  CK_C_SetPIN C_SetPIN;
-  CK_C_OpenSession C_OpenSession;
-  CK_C_CloseSession C_CloseSession;
-  CK_C_CloseAllSessions C_CloseAllSessions;
-  CK_C_GetSessionInfo C_GetSessionInfo;
-  CK_C_GetOperationState C_GetOperationState;
-  CK_C_SetOperationState C_SetOperationState;
-  CK_C_Login C_Login;
-  CK_C_Logout C_Logout;
-  CK_C_CreateObject C_CreateObject;
-  CK_C_CopyObject C_CopyObject;
-  CK_C_DestroyObject C_DestroyObject;
-  CK_C_GetObjectSize C_GetObjectSize;
-  CK_C_GetAttributeValue C_GetAttributeValue;
-  CK_C_SetAttributeValue C_SetAttributeValue;
-  CK_C_FindObjectsInit C_FindObjectsInit;
-  CK_C_FindObjects C_FindObjects;
-  CK_C_FindObjectsFinal C_FindObjectsFinal;
-  CK_C_EncryptInit C_EncryptInit;
-  CK_C_Encrypt C_Encrypt;
-  CK_C_EncryptUpdate C_EncryptUpdate;
-  CK_C_EncryptFinal C_EncryptFinal;
-  CK_C_DecryptInit C_DecryptInit;
-  CK_C_Decrypt C_Decrypt;
-  CK_C_DecryptUpdate C_DecryptUpdate;
-  CK_C_DecryptFinal C_DecryptFinal;
-  CK_C_DigestInit C_DigestInit;
-  CK_C_Digest C_Digest;
-  CK_C_DigestUpdate C_DigestUpdate;
-  CK_C_DigestKey C_DigestKey;
-  CK_C_DigestFinal C_DigestFinal;
-  CK_C_SignInit C_SignInit;
-  CK_C_Sign C_Sign;
-  CK_C_SignUpdate C_SignUpdate;
-  CK_C_SignFinal C_SignFinal;
-  CK_C_SignRecoverInit C_SignRecoverInit;
-  CK_C_SignRecover C_SignRecover;
-  CK_C_VerifyInit C_VerifyInit;
-  CK_C_Verify C_Verify;
-  CK_C_VerifyUpdate C_VerifyUpdate;
-  CK_C_VerifyFinal C_VerifyFinal;
-  CK_C_VerifyRecoverInit C_VerifyRecoverInit;
-  CK_C_VerifyRecover C_VerifyRecover;
-  CK_C_DigestEncryptUpdate C_DigestEncryptUpdate;
-  CK_C_DecryptDigestUpdate C_DecryptDigestUpdate;
-  CK_C_SignEncryptUpdate C_SignEncryptUpdate;
-  CK_C_DecryptVerifyUpdate C_DecryptVerifyUpdate;
-  CK_C_GenerateKey C_GenerateKey;
-  CK_C_GenerateKeyPair C_GenerateKeyPair;
-  CK_C_WrapKey C_WrapKey;
-  CK_C_UnwrapKey C_UnwrapKey;
-  CK_C_DeriveKey C_DeriveKey;
-  CK_C_SeedRandom C_SeedRandom;
-  CK_C_GenerateRandom C_GenerateRandom;
-  CK_C_GetFunctionStatus C_GetFunctionStatus;
-  CK_C_CancelFunction C_CancelFunction;
-  CK_C_WaitForSlotEvent C_WaitForSlotEvent;
-  /* PKCS #11 3.0 functions */
-  CK_C_GetInterfaceList C_GetInterfaceList;
-  CK_C_GetInterface C_GetInterface;
-  CK_C_LoginUser C_LoginUser;
-  CK_C_SessionCancel C_SessionCancel;
-  CK_C_MessageEncryptInit C_MessageEncryptInit;
-  CK_C_EncryptMessage C_EncryptMessage;
-  CK_C_EncryptMessageBegin C_EncryptMessageBegin;
-  CK_C_EncryptMessageNext C_EncryptMessageNext;
-  CK_C_MessageEncryptFinal C_MessageEncryptFinal;
-  CK_C_MessageDecryptInit C_MessageDecryptInit;
-  CK_C_DecryptMessage C_DecryptMessage;
-  CK_C_DecryptMessageBegin C_DecryptMessageBegin;
-  CK_C_DecryptMessageNext C_DecryptMessageNext;
-  CK_C_MessageDecryptFinal C_MessageDecryptFinal;
-  CK_C_MessageSignInit C_MessageSignInit;
-  CK_C_SignMessage C_SignMessage;
-  CK_C_SignMessageBegin C_SignMessageBegin;
-  CK_C_SignMessageNext C_SignMessageNext;
-  CK_C_MessageSignFinal C_MessageSignFinal;
-  CK_C_MessageVerifyInit C_MessageVerifyInit;
-  CK_C_VerifyMessage C_VerifyMessage;
-  CK_C_VerifyMessageBegin C_VerifyMessageBegin;
-  CK_C_VerifyMessageNext C_VerifyMessageNext;
-  CK_C_MessageVerifyFinal C_MessageVerifyFinal;
-};
-
-
-typedef ck_rv_t (*ck_createmutex_t) (void **mutex);
-typedef ck_rv_t (*ck_destroymutex_t) (void *mutex);
-typedef ck_rv_t (*ck_lockmutex_t) (void *mutex);
-typedef ck_rv_t (*ck_unlockmutex_t) (void *mutex);
-
-
-struct ck_c_initialize_args
-{
-  ck_createmutex_t create_mutex;
-  ck_destroymutex_t destroy_mutex;
-  ck_lockmutex_t lock_mutex;
-  ck_unlockmutex_t unlock_mutex;
-  ck_flags_t flags;
-  void *reserved;
+struct CK_PBE_PARAMS {
+    CK_BYTE * pInitVector;
+    CK_UTF8CHAR * pPassword;
+    CK_ULONG ulPasswordLen;
+    CK_BYTE * pSalt;
+    CK_ULONG ulSaltLen;
+    CK_ULONG ulIteration;
 };

-typedef unsigned long ck_ec_kdf_type_t;
+struct CK_PKCS5_PBKD2_PARAMS {
+    CK_PKCS5_PBKDF2_SALT_SOURCE_TYPE saltSource;
+    void * pSaltSourceData;
+    CK_ULONG ulSaltSourceDataLen;
+    CK_ULONG iterations;
+    CK_PKCS5_PBKD2_PSEUDO_RANDOM_FUNCTION_TYPE prf;
+    void * pPrfData;
+    CK_ULONG ulPrfDataLen;
+    CK_UTF8CHAR * pPassword;
+    CK_ULONG * ulPasswordLen;
+};

-struct ck_ecdh1_derive_params
-{
-  ck_ec_kdf_type_t kdf;
-  unsigned long shared_data_len;
-  void *shared_data;
-  unsigned long public_data_len;
-  void *public_data;
-};
-
-#define CKF_LIBRARY_CANT_CREATE_OS_THREADS      (1UL << 0)
-#define CKF_OS_LOCKING_OK                       (1UL << 1)
-
-#define CKR_OK                                  (0UL)
-#define CKR_CANCEL                              (1UL)
-#define CKR_HOST_MEMORY                         (2UL)
-#define CKR_SLOT_ID_INVALID                     (3UL)
-#define CKR_GENERAL_ERROR                       (5UL)
-#define CKR_FUNCTION_FAILED                     (6UL)
-#define CKR_ARGUMENTS_BAD                       (7UL)
-#define CKR_NO_EVENT                            (8UL)
-#define CKR_NEED_TO_CREATE_THREADS              (9UL)
-#define CKR_CANT_LOCK                           (0xaUL)
-#define CKR_ATTRIBUTE_READ_ONLY                 (0x10UL)
-#define CKR_ATTRIBUTE_SENSITIVE                 (0x11UL)
-#define CKR_ATTRIBUTE_TYPE_INVALID              (0x12UL)
-#define CKR_ATTRIBUTE_VALUE_INVALID             (0x13UL)
-#define CKR_ACTION_PROHIBITED                   (0x1BUL)
-#define CKR_DATA_INVALID                        (0x20UL)
-#define CKR_DATA_LEN_RANGE                      (0x21UL)
-#define CKR_DEVICE_ERROR                        (0x30UL)
-#define CKR_DEVICE_MEMORY                       (0x31UL)
-#define CKR_DEVICE_REMOVED                      (0x32UL)
-#define CKR_ENCRYPTED_DATA_INVALID              (0x40UL)
-#define CKR_ENCRYPTED_DATA_LEN_RANGE            (0x41UL)
-#define CKR_FUNCTION_CANCELED                   (0x50UL)
-#define CKR_FUNCTION_NOT_PARALLEL               (0x51UL)
-#define CKR_FUNCTION_NOT_SUPPORTED              (0x54UL)
-#define CKR_KEY_HANDLE_INVALID                  (0x60UL)
-#define CKR_KEY_SIZE_RANGE                      (0x62UL)
-#define CKR_KEY_TYPE_INCONSISTENT               (0x63UL)
-#define CKR_KEY_NOT_NEEDED                      (0x64UL)
-#define CKR_KEY_CHANGED                         (0x65UL)
-#define CKR_KEY_NEEDED                          (0x66UL)
-#define CKR_KEY_INDIGESTIBLE                    (0x67UL)
-#define CKR_KEY_FUNCTION_NOT_PERMITTED          (0x68UL)
-#define CKR_KEY_NOT_WRAPPABLE                   (0x69UL)
-#define CKR_KEY_UNEXTRACTABLE                   (0x6aUL)
-#define CKR_MECHANISM_INVALID                   (0x70UL)
-#define CKR_MECHANISM_PARAM_INVALID             (0x71UL)
-#define CKR_OBJECT_HANDLE_INVALID               (0x82UL)
-#define CKR_OPERATION_ACTIVE                    (0x90UL)
-#define CKR_OPERATION_NOT_INITIALIZED           (0x91UL)
-#define CKR_PIN_INCORRECT                       (0xa0UL)
-#define CKR_PIN_INVALID                         (0xa1UL)
-#define CKR_PIN_LEN_RANGE                       (0xa2UL)
-#define CKR_PIN_EXPIRED                         (0xa3UL)
-#define CKR_PIN_LOCKED                          (0xa4UL)
-#define CKR_SESSION_CLOSED                      (0xb0UL)
-#define CKR_SESSION_COUNT                       (0xb1UL)
-#define CKR_SESSION_HANDLE_INVALID              (0xb3UL)
-#define CKR_SESSION_PARALLEL_NOT_SUPPORTED      (0xb4UL)
-#define CKR_SESSION_READ_ONLY                   (0xb5UL)
-#define CKR_SESSION_EXISTS                      (0xb6UL)
-#define CKR_SESSION_READ_ONLY_EXISTS            (0xb7UL)
-#define CKR_SESSION_READ_WRITE_SO_EXISTS        (0xb8UL)
-#define CKR_SIGNATURE_INVALID                   (0xc0UL)
-#define CKR_SIGNATURE_LEN_RANGE                 (0xc1UL)
-#define CKR_TEMPLATE_INCOMPLETE                 (0xd0UL)
-#define CKR_TEMPLATE_INCONSISTENT               (0xd1UL)
-#define CKR_TOKEN_NOT_PRESENT                   (0xe0UL)
-#define CKR_TOKEN_NOT_RECOGNIZED                (0xe1UL)
-#define CKR_TOKEN_WRITE_PROTECTED               (0xe2UL)
-#define CKR_UNWRAPPING_KEY_HANDLE_INVALID       (0xf0UL)
-#define CKR_UNWRAPPING_KEY_SIZE_RANGE           (0xf1UL)
-#define CKR_UNWRAPPING_KEY_TYPE_INCONSISTENT    (0xf2UL)
-#define CKR_USER_ALREADY_LOGGED_IN              (0x100UL)
-#define CKR_USER_NOT_LOGGED_IN                  (0x101UL)
-#define CKR_USER_PIN_NOT_INITIALIZED            (0x102UL)
-#define CKR_USER_TYPE_INVALID                   (0x103UL)
-#define CKR_USER_ANOTHER_ALREADY_LOGGED_IN      (0x104UL)
-#define CKR_USER_TOO_MANY_TYPES                 (0x105UL)
-#define CKR_WRAPPED_KEY_INVALID                 (0x110UL)
-#define CKR_WRAPPED_KEY_LEN_RANGE               (0x112UL)
-#define CKR_WRAPPING_KEY_HANDLE_INVALID         (0x113UL)
-#define CKR_WRAPPING_KEY_SIZE_RANGE             (0x114UL)
-#define CKR_WRAPPING_KEY_TYPE_INCONSISTENT      (0x115UL)
-#define CKR_RANDOM_SEED_NOT_SUPPORTED           (0x120UL)
-#define CKR_RANDOM_NO_RNG                       (0x121UL)
-#define CKR_DOMAIN_PARAMS_INVALID               (0x130UL)
-#define CKR_CURVE_NOT_SUPPORTED                 (0x140UL)
-#define CKR_BUFFER_TOO_SMALL                    (0x150UL)
-#define CKR_SAVED_STATE_INVALID                 (0x160UL)
-#define CKR_INFORMATION_SENSITIVE               (0x170UL)
-#define CKR_STATE_UNSAVEABLE                    (0x180UL)
-#define CKR_CRYPTOKI_NOT_INITIALIZED            (0x190UL)
-#define CKR_CRYPTOKI_ALREADY_INITIALIZED        (0x191UL)
-#define CKR_MUTEX_BAD                           (0x1a0UL)
-#define CKR_MUTEX_NOT_LOCKED                    (0x1a1UL)
-#define CKR_FUNCTION_REJECTED                   (0x200UL)
-#define CKR_VENDOR_DEFINED                      (1UL << 31)
-
-
-/* Compatibility layer.  */
-
-#ifdef CRYPTOKI_COMPAT
-
-#undef CK_DEFINE_FUNCTION
-#define CK_DEFINE_FUNCTION(retval, name) retval CK_SPEC name
-
-/* For NULL.  */
-#include <stddef.h>
+struct CK_PKCS5_PBKD2_PARAMS2 {
+    CK_PKCS5_PBKDF2_SALT_SOURCE_TYPE saltSource;
+    void * pSaltSourceData;
+    CK_ULONG ulSaltSourceDataLen;
+    CK_ULONG iterations;
+    CK_PKCS5_PBKD2_PSEUDO_RANDOM_FUNCTION_TYPE prf;
+    void * pPrfData;
+    CK_ULONG ulPrfDataLen;
+    CK_UTF8CHAR * pPassword;
+    CK_ULONG ulPasswordLen;
+};

-typedef unsigned char CK_BYTE;
-typedef unsigned char CK_CHAR;
-typedef unsigned char CK_UTF8CHAR;
-typedef unsigned char CK_BBOOL;
-typedef unsigned long int CK_ULONG;
-typedef long int CK_LONG;
-typedef CK_BYTE *CK_BYTE_PTR;
-typedef CK_CHAR *CK_CHAR_PTR;
-typedef CK_UTF8CHAR *CK_UTF8CHAR_PTR;
-typedef CK_ULONG *CK_ULONG_PTR;
-typedef void *CK_VOID_PTR;
-typedef void **CK_VOID_PTR_PTR;
-#define CK_FALSE 0
-#define CK_TRUE 1
-#ifndef CK_DISABLE_TRUE_FALSE
-#ifndef FALSE
-#define FALSE 0
-#endif
-#ifndef TRUE
-#define TRUE 1
-#endif
-#endif
+struct CK_PRF_DATA_PARAM {
+    CK_PRF_DATA_TYPE type;
+    void * pValue;
+    CK_ULONG ulValueLen;
+};
+
+struct CK_RC2_CBC_PARAMS {
+    CK_ULONG ulEffectiveBits;
+    CK_BYTE iv[8];
+};
+
+struct CK_RC2_MAC_GENERAL_PARAMS {
+    CK_ULONG ulEffectiveBits;
+    CK_ULONG ulMacLength;
+};
+
+struct CK_RC5_CBC_PARAMS {
+    CK_ULONG ulWordsize;
+    CK_ULONG ulRounds;
+    CK_BYTE * pIv;
+    CK_ULONG ulIvLen;
+};
+
+struct CK_RC5_MAC_GENERAL_PARAMS {
+    CK_ULONG ulWordsize;
+    CK_ULONG ulRounds;
+    CK_ULONG ulMacLength;
+};
+
+struct CK_RC5_PARAMS {
+    CK_ULONG ulWordsize;
+    CK_ULONG ulRounds;
+};
+
+struct CK_RSA_AES_KEY_WRAP_PARAMS {
+    CK_ULONG ulAESKeyBits;
+    CK_RSA_PKCS_OAEP_PARAMS * pOAEPParams;
+};
+
+struct CK_RSA_PKCS_OAEP_PARAMS {
+    CK_MECHANISM_TYPE hashAlg;
+    CK_RSA_PKCS_MGF_TYPE mgf;
+    CK_RSA_PKCS_OAEP_SOURCE_TYPE source;
+    void * pSourceData;
+    CK_ULONG ulSourceDataLen;
+};

-typedef struct ck_version CK_VERSION;
-typedef struct ck_version *CK_VERSION_PTR;
+struct CK_RSA_PKCS_PSS_PARAMS {
+    CK_MECHANISM_TYPE hashAlg;
+    CK_RSA_PKCS_MGF_TYPE mgf;
+    CK_ULONG sLen;
+};

-typedef struct ck_info CK_INFO;
-typedef struct ck_info *CK_INFO_PTR;
+struct CK_SALSA20_CHACHA20_POLY1305_MSG_PARAMS {
+    CK_BYTE * pNonce;
+    CK_ULONG ulNonceLen;
+    CK_BYTE * pTag;
+};

-typedef ck_slot_id_t *CK_SLOT_ID_PTR;
+struct CK_SALSA20_CHACHA20_POLY1305_PARAMS {
+    CK_BYTE * pNonce;
+    CK_ULONG ulNonceLen;
+    CK_BYTE * pAAD;
+    CK_ULONG ulAADLen;
+};

-typedef struct ck_slot_info CK_SLOT_INFO;
-typedef struct ck_slot_info *CK_SLOT_INFO_PTR;
+struct CK_SALSA20_PARAMS {
+    CK_BYTE * pBlockCounter;
+    CK_BYTE * pNonce;
+    CK_ULONG ulNonceBits;
+};

-typedef struct ck_token_info CK_TOKEN_INFO;
-typedef struct ck_token_info *CK_TOKEN_INFO_PTR;
+struct CK_SEED_CBC_ENCRYPT_DATA_PARAMS {
+    CK_BYTE iv[16];
+    CK_BYTE * pData;
+    CK_ULONG length;
+};

-typedef ck_session_handle_t *CK_SESSION_HANDLE_PTR;
+struct CK_SIGN_ADDITIONAL_CONTEXT {
+    CK_HEDGE_TYPE hedgeVariant;
+    CK_BYTE * pContext;
+    CK_ULONG ulContextLen;
+};

-typedef struct ck_session_info CK_SESSION_INFO;
-typedef struct ck_session_info *CK_SESSION_INFO_PTR;
+struct CK_SKIPJACK_PRIVATE_WRAP_PARAMS {
+    CK_ULONG ulPasswordLen;
+    CK_BYTE * pPassword;
+    CK_ULONG ulPublicDataLen;
+    CK_BYTE * pPublicData;
+    CK_ULONG ulPAndGLen;
+    CK_ULONG ulQLen;
+    CK_ULONG ulRandomLen;
+    CK_BYTE * pRandomA;
+    CK_BYTE * pPrimeP;
+    CK_BYTE * pBaseG;
+    CK_BYTE * pSubprimeQ;
+};

-typedef ck_object_handle_t *CK_OBJECT_HANDLE_PTR;
+struct CK_SKIPJACK_RELAYX_PARAMS {
+    CK_ULONG ulOldWrappedXLen;
+    CK_BYTE * pOldWrappedX;
+    CK_ULONG ulOldPasswordLen;
+    CK_BYTE * pOldPassword;
+    CK_ULONG ulOldPublicDataLen;
+    CK_BYTE * pOldPublicData;
+    CK_ULONG ulOldRandomLen;
+    CK_BYTE * pOldRandomA;
+    CK_ULONG ulNewPasswordLen;
+    CK_BYTE * pNewPassword;
+    CK_ULONG ulNewPublicDataLen;
+    CK_BYTE * pNewPublicData;
+    CK_ULONG ulNewRandomLen;
+    CK_BYTE * pNewRandomA;
+};

-typedef ck_object_class_t *CK_OBJECT_CLASS_PTR;
+struct CK_SP800_108_COUNTER_FORMAT {
+    CK_BBOOL bLittleEndian;
+    CK_ULONG ulWidthInBits;
+};

-typedef struct ck_attribute CK_ATTRIBUTE;
-typedef struct ck_attribute *CK_ATTRIBUTE_PTR;
+struct CK_SP800_108_DKM_LENGTH_FORMAT {
+    CK_SP800_108_DKM_LENGTH_METHOD dkmLengthMethod;
+    CK_BBOOL bLittleEndian;
+    CK_ULONG ulWidthInBits;
+};

-typedef struct ck_date CK_DATE;
-typedef struct ck_date *CK_DATE_PTR;
+typedef CK_MECHANISM_TYPE CK_SP800_108_PRF_TYPE;

-typedef ck_mechanism_type_t *CK_MECHANISM_TYPE_PTR;
+struct CK_SP800_108_FEEDBACK_KDF_PARAMS
+{
+    CK_SP800_108_PRF_TYPE prfType;
+    CK_ULONG ulNumberOfDataParams;
+    CK_PRF_DATA_PARAM * pDataParams;
+    CK_ULONG ulIVLen;
+    CK_BYTE * pIV;
+    CK_ULONG ulAdditionalDerivedKeys;
+    CK_DERIVED_KEY * pAdditionalDerivedKeys;
+};

-typedef ck_rsa_pkcs_mgf_type_t *CK_RSA_PKCS_MGF_TYPE_PTR;
+struct CK_TLS12_EXTENDED_MASTER_KEY_DERIVE_PARAMS {
+    CK_MECHANISM_TYPE prfHashMechanism;
+    CK_BYTE * pSessionHash;
+    CK_ULONG ulSessionHashLen;
+    CK_VERSION * pVersion;
+};

-typedef struct ck_mechanism CK_MECHANISM;
-typedef struct ck_mechanism *CK_MECHANISM_PTR;
+struct CK_SP800_108_KDF_PARAMS
+{
+    CK_SP800_108_PRF_TYPE prfType;
+    CK_ULONG ulNumberOfDataParams;
+    CK_PRF_DATA_PARAM * pDataParams;
+    CK_ULONG ulAdditionalDerivedKeys;
+    CK_DERIVED_KEY * pAdditionalDerivedKeys;
+};

-typedef struct ck_mechanism_info CK_MECHANISM_INFO;
-typedef struct ck_mechanism_info *CK_MECHANISM_INFO_PTR;
+struct CK_X2RATCHET_INITIALIZE_PARAMS {
+    CK_BYTE * sk;
+    CK_OBJECT_HANDLE peer_public_prekey;
+    CK_OBJECT_HANDLE peer_public_identity;
+    CK_OBJECT_HANDLE own_public_identity;
+    CK_BBOOL bEncryptedHeader;
+    CK_ULONG eCurve;
+    CK_MECHANISM_TYPE aeadMechanism;
+    CK_X2RATCHET_KDF_TYPE kdfMechanism;
+};

-typedef struct ck_interface CK_INTERFACE;
-typedef struct ck_interface *CK_INTERFACE_PTR;
-typedef struct ck_interface **CK_INTERFACE_PTR_PTR;
+struct CK_X2RATCHET_RESPOND_PARAMS {
+    CK_BYTE * sk;
+    CK_OBJECT_HANDLE own_prekey;
+    CK_OBJECT_HANDLE initiator_identity;
+    CK_OBJECT_HANDLE own_public_identity;
+    CK_BBOOL bEncryptedHeader;
+    CK_ULONG eCurve;
+    CK_MECHANISM_TYPE aeadMechanism;
+    CK_X2RATCHET_KDF_TYPE kdfMechanism;
+};

-typedef struct ck_function_list CK_FUNCTION_LIST;
-typedef struct ck_function_list *CK_FUNCTION_LIST_PTR;
-typedef struct ck_function_list **CK_FUNCTION_LIST_PTR_PTR;
+struct CK_X3DH_INITIATE_PARAMS {
+    CK_X3DH_KDF_TYPE kdf;
+    CK_OBJECT_HANDLE pPeer_identity;
+    CK_OBJECT_HANDLE pPeer_prekey;
+    CK_BYTE * pPrekey_signature;
+    CK_BYTE * pOnetime_key;
+    CK_OBJECT_HANDLE pOwn_identity;
+    CK_OBJECT_HANDLE pOwn_ephemeral;
+};

-typedef struct ck_function_list_3_0 CK_FUNCTION_LIST_3_0;
-typedef struct ck_function_list_3_0 *CK_FUNCTION_LIST_3_0_PTR;
-typedef struct ck_function_list_3_0 **CK_FUNCTION_LIST_3_0_PTR_PTR;
+struct CK_X3DH_RESPOND_PARAMS {
+    CK_X3DH_KDF_TYPE kdf;
+    CK_BYTE * pIdentity_id;
+    CK_BYTE * pPrekey_id;
+    CK_BYTE * pOnetime_id;
+    CK_OBJECT_HANDLE pInitiator_identity;
+    CK_BYTE * pInitiator_ephemeral;
+};

-typedef struct ck_c_initialize_args CK_C_INITIALIZE_ARGS;
-typedef struct ck_c_initialize_args *CK_C_INITIALIZE_ARGS_PTR;
+struct CK_X9_42_DH1_DERIVE_PARAMS {
+    CK_X9_42_DH_KDF_TYPE kdf;
+    CK_ULONG ulOtherInfoLen;
+    CK_BYTE * pOtherInfo;
+    CK_ULONG ulPublicDataLen;
+    CK_BYTE * pPublicData;
+};

-#define NULL_PTR NULL
+struct CK_X9_42_DH2_DERIVE_PARAMS {
+    CK_X9_42_DH_KDF_TYPE kdf;
+    CK_ULONG ulOtherInfoLen;
+    CK_BYTE * pOtherInfo;
+    CK_ULONG ulPublicDataLen;
+    CK_BYTE * pPublicData;
+    CK_ULONG ulPrivateDataLen;
+    CK_OBJECT_HANDLE hPrivateData;
+    CK_ULONG ulPublicDataLen2;
+    CK_BYTE * pPublicData2;
+};

-/* Delete the helper macros defined at the top of the file.  */
-#undef ck_flags_t
-#undef ck_version
+struct CK_X9_42_MQV_DERIVE_PARAMS {
+    CK_X9_42_DH_KDF_TYPE kdf;
+    CK_ULONG ulOtherInfoLen;
+    CK_BYTE * OtherInfo;
+    CK_ULONG ulPublicDataLen;
+    CK_BYTE * PublicData;
+    CK_ULONG ulPrivateDataLen;
+    CK_OBJECT_HANDLE hPrivateData;
+    CK_ULONG ulPublicDataLen2;
+    CK_BYTE * PublicData2;
+    CK_OBJECT_HANDLE publicKey;
+};

-#undef ck_info
-#undef cryptoki_version
-#undef manufacturer_id
-#undef library_description
-#undef library_version
+struct CK_XEDDSA_PARAMS {
+    CK_XEDDSA_HASH_TYPE hash;
+};

-#undef ck_notification_t
-#undef ck_slot_id_t
+/* TLS related structure definitions */
+STRUCTDEF(CK_SSL3_KEY_MAT_OUT);
+STRUCTDEF(CK_SSL3_KEY_MAT_PARAMS);
+STRUCTDEF(CK_SSL3_MASTER_KEY_DERIVE_PARAMS);
+STRUCTDEF(CK_SSL3_RANDOM_DATA);
+STRUCTDEF(CK_TLS_KDF_PARAMS);
+STRUCTDEF(CK_TLS_MAC_PARAMS);
+STRUCTDEF(CK_TLS_PRF_PARAMS);
+STRUCTDEF(CK_TLS12_KEY_MAT_PARAMS);
+STRUCTDEF(CK_TLS12_MASTER_KEY_DERIVE_PARAMS);
+STRUCTDEF(CK_WTLS_KEY_MAT_OUT);
+STRUCTDEF(CK_WTLS_KEY_MAT_PARAMS);
+STRUCTDEF(CK_WTLS_MASTER_KEY_DERIVE_PARAMS);
+STRUCTDEF(CK_WTLS_PRF_PARAMS);
+STRUCTDEF(CK_WTLS_RANDOM_DATA);
+
+struct CK_SSL3_KEY_MAT_OUT {
+    CK_OBJECT_HANDLE hClientMacSecret;
+    CK_OBJECT_HANDLE hServerMacSecret;
+    CK_OBJECT_HANDLE hClientKey;
+    CK_OBJECT_HANDLE hServerKey;
+    CK_BYTE * pIVClient;
+    CK_BYTE * pIVServer;
+};

-#undef ck_slot_info
-#undef slot_description
-#undef hardware_version
-#undef firmware_version
+struct CK_SSL3_RANDOM_DATA {
+    CK_BYTE * pClientRandom;
+    CK_ULONG ulClientRandomLen;
+    CK_BYTE * pServerRandom;
+    CK_ULONG ulServerRandomLen;
+};

-#undef ck_token_info
-#undef serial_number
-#undef max_session_count
-#undef session_count
-#undef max_rw_session_count
-#undef rw_session_count
-#undef max_pin_len
-#undef min_pin_len
-#undef total_public_memory
-#undef free_public_memory
-#undef total_private_memory
-#undef free_private_memory
-#undef utc_time
+struct CK_SSL3_KEY_MAT_PARAMS {
+    CK_ULONG ulMacSizeInBits;
+    CK_ULONG ulKeySizeInBits;
+    CK_ULONG ulIVSizeInBits;
+    CK_BBOOL bIsExport;
+    CK_SSL3_RANDOM_DATA RandomInfo;
+    CK_SSL3_KEY_MAT_OUT * pReturnedKeyMaterial;
+};

-#undef ck_session_handle_t
-#undef ck_user_type_t
-#undef ck_state_t
+struct CK_SSL3_MASTER_KEY_DERIVE_PARAMS {
+    CK_SSL3_RANDOM_DATA RandomInfo;
+    CK_VERSION * pVersion;
+};

-#undef ck_session_info
-#undef slot_id
-#undef device_error
+struct CK_TLS_KDF_PARAMS {
+    CK_MECHANISM_TYPE prfMechanism;
+    CK_BYTE * pLabel;
+    CK_ULONG ulLabelLength;
+    CK_SSL3_RANDOM_DATA RandomInfo;
+    CK_BYTE * pContextData;
+    CK_ULONG ulContextDataLength;
+};

-#undef ck_object_handle_t
-#undef ck_object_class_t
-#undef ck_hw_feature_type_t
-#undef ck_key_type_t
-#undef ck_certificate_type_t
-#undef ck_attribute_type_t
+struct CK_TLS_MAC_PARAMS {
+    CK_MECHANISM_TYPE prfHashMechanism;
+    CK_ULONG ulMacLength;
+    CK_ULONG ulServerOrClient;
+};

-#undef ck_attribute
-#undef value
-#undef value_len
+struct CK_TLS_PRF_PARAMS {
+    CK_BYTE * pSeed;
+    CK_ULONG ulSeedLen;
+    CK_BYTE * pLabel;
+    CK_ULONG ulLabelLen;
+    CK_BYTE * pOutput;
+    CK_ULONG * pulOutputLen;
+};

-#undef ck_date
+struct CK_TLS12_KEY_MAT_PARAMS {
+    CK_ULONG ulMacSizeInBits;
+    CK_ULONG ulKeySizeInBits;
+    CK_ULONG ulIVSizeInBits;
+    CK_BBOOL bIsExport;
+    CK_SSL3_RANDOM_DATA RandomInfo;
+    CK_SSL3_KEY_MAT_OUT * pReturnedKeyMaterial;
+    CK_MECHANISM_TYPE prfHashMechanism;
+};

-#undef ck_mechanism_type_t
+struct CK_TLS12_MASTER_KEY_DERIVE_PARAMS {
+    CK_SSL3_RANDOM_DATA RandomInfo;
+    CK_VERSION * pVersion;
+    CK_MECHANISM_TYPE prfHashMechanism;
+};

-#undef ck_rsa_pkcs_mgf_type_t
+struct CK_WTLS_KEY_MAT_OUT {
+    CK_OBJECT_HANDLE hMacSecret;
+    CK_OBJECT_HANDLE hKey;
+    CK_BYTE * pIV;
+};
+
+struct CK_WTLS_RANDOM_DATA {
+    CK_BYTE * pClientRandom;
+    CK_ULONG ulClientRandomLen;
+    CK_BYTE * pServerRandom;
+    CK_ULONG ulServerRandomLen;
+};
+
+struct CK_WTLS_KEY_MAT_PARAMS {
+    CK_MECHANISM_TYPE DigestMechanism;
+    CK_ULONG ulMacSizeInBits;
+    CK_ULONG ulKeySizeInBits;
+    CK_ULONG ulIVSizeInBits;
+    CK_ULONG ulSequenceNumber;
+    CK_BBOOL bIsExport;
+    CK_WTLS_RANDOM_DATA RandomInfo;
+    CK_WTLS_KEY_MAT_OUT * pReturnedKeyMaterial;
+};

-#undef ck_mechanism
-#undef parameter
-#undef parameter_len
+struct CK_WTLS_MASTER_KEY_DERIVE_PARAMS {
+    CK_MECHANISM_TYPE DigestMechanism;
+    CK_WTLS_RANDOM_DATA RandomInfo;
+    CK_BYTE * pVersion;
+};

-#undef ck_mechanism_info
-#undef min_key_size
-#undef max_key_size
+struct CK_WTLS_PRF_PARAMS {
+    CK_MECHANISM_TYPE DigestMechanism;
+    CK_BYTE * pSeed;
+    CK_ULONG ulSeedLen;
+    CK_BYTE * pLabel;
+    CK_ULONG ulLabelLen;
+    CK_BYTE * pOutput;
+    CK_ULONG * pulOutputLen;
+};

-#undef ck_rv_t
-#undef ck_notify_t
+typedef CK_RV (* CK_C_Initialize)(void *);
+typedef CK_RV (* CK_C_Finalize)(void *);
+typedef CK_RV (* CK_C_GetInfo)(CK_INFO *);
+typedef CK_RV (* CK_C_GetFunctionList)(CK_FUNCTION_LIST **);
+typedef CK_RV (* CK_C_GetSlotList)(CK_BBOOL, CK_SLOT_ID *, CK_ULONG *);
+typedef CK_RV (* CK_C_GetSlotInfo)(CK_SLOT_ID, CK_SLOT_INFO *);
+typedef CK_RV (* CK_C_GetTokenInfo)(CK_SLOT_ID, CK_TOKEN_INFO *);
+typedef CK_RV (* CK_C_GetMechanismList)(CK_SLOT_ID, CK_MECHANISM_TYPE *,
+                                        CK_ULONG *);
+typedef CK_RV (* CK_C_GetMechanismInfo)(CK_SLOT_ID, CK_MECHANISM_TYPE,
+                                        CK_MECHANISM_INFO *);
+typedef CK_RV (* CK_C_InitToken)(CK_SLOT_ID, CK_UTF8CHAR *, CK_ULONG,
+                                 CK_UTF8CHAR *);
+typedef CK_RV (* CK_C_InitPIN)(CK_SESSION_HANDLE, CK_UTF8CHAR *, CK_ULONG);
+typedef CK_RV (* CK_C_SetPIN)(CK_SESSION_HANDLE, CK_UTF8CHAR *, CK_ULONG,
+                              CK_UTF8CHAR *, CK_ULONG);
+typedef CK_RV (* CK_C_OpenSession)(CK_SLOT_ID, CK_FLAGS, void *, CK_NOTIFY,
+                                   CK_SESSION_HANDLE *);
+typedef CK_RV (* CK_C_CloseSession)(CK_SESSION_HANDLE);
+typedef CK_RV (* CK_C_CloseAllSessions)(CK_SLOT_ID);
+typedef CK_RV (* CK_C_GetSessionInfo)(CK_SESSION_HANDLE, CK_SESSION_INFO *);
+typedef CK_RV (* CK_C_GetOperationState)(CK_SESSION_HANDLE, CK_BYTE *,
+                                         CK_ULONG *);
+typedef CK_RV (* CK_C_SetOperationState)(CK_SESSION_HANDLE, CK_BYTE *, CK_ULONG,
+                                         CK_OBJECT_HANDLE, CK_OBJECT_HANDLE);
+typedef CK_RV (* CK_C_Login)(CK_SESSION_HANDLE, CK_USER_TYPE, CK_UTF8CHAR *,
+                             CK_ULONG);
+typedef CK_RV (* CK_C_Logout)(CK_SESSION_HANDLE);
+typedef CK_RV (* CK_C_CreateObject)(CK_SESSION_HANDLE, CK_ATTRIBUTE *, CK_ULONG,
+                                    CK_OBJECT_HANDLE *);
+typedef CK_RV (* CK_C_CopyObject)(CK_SESSION_HANDLE, CK_OBJECT_HANDLE,
+                                  CK_ATTRIBUTE *, CK_ULONG, CK_OBJECT_HANDLE *);
+typedef CK_RV (* CK_C_DestroyObject)(CK_SESSION_HANDLE, CK_OBJECT_HANDLE);
+typedef CK_RV (* CK_C_GetObjectSize)(CK_SESSION_HANDLE, CK_OBJECT_HANDLE,
+                                     CK_ULONG *);
+typedef CK_RV (* CK_C_GetAttributeValue)(CK_SESSION_HANDLE, CK_OBJECT_HANDLE,
+                                         CK_ATTRIBUTE *, CK_ULONG);
+typedef CK_RV (* CK_C_SetAttributeValue)(CK_SESSION_HANDLE, CK_OBJECT_HANDLE,
+                                         CK_ATTRIBUTE *, CK_ULONG);
+typedef CK_RV (* CK_C_FindObjectsInit)(CK_SESSION_HANDLE, CK_ATTRIBUTE *,
+                                       CK_ULONG);
+typedef CK_RV (* CK_C_FindObjects)(CK_SESSION_HANDLE, CK_OBJECT_HANDLE *,
+                                   CK_ULONG, CK_ULONG *);
+typedef CK_RV (* CK_C_FindObjectsFinal)(CK_SESSION_HANDLE);
+typedef CK_RV (* CK_C_EncryptInit)(CK_SESSION_HANDLE, CK_MECHANISM *,
+                                   CK_OBJECT_HANDLE);
+typedef CK_RV (* CK_C_Encrypt)(CK_SESSION_HANDLE, CK_BYTE *, CK_ULONG,
+                               CK_BYTE *, CK_ULONG *);
+typedef CK_RV (* CK_C_EncryptUpdate)(CK_SESSION_HANDLE, CK_BYTE *, CK_ULONG,
+                                     CK_BYTE *, CK_ULONG *);
+typedef CK_RV (* CK_C_EncryptFinal)(CK_SESSION_HANDLE, CK_BYTE *, CK_ULONG *);
+typedef CK_RV (* CK_C_DecryptInit)(CK_SESSION_HANDLE, CK_MECHANISM *,
+                                   CK_OBJECT_HANDLE);
+typedef CK_RV (* CK_C_Decrypt)(CK_SESSION_HANDLE, CK_BYTE *, CK_ULONG,
+                               CK_BYTE *, CK_ULONG *);
+typedef CK_RV (* CK_C_DecryptUpdate)(CK_SESSION_HANDLE, CK_BYTE *, CK_ULONG,
+                                     CK_BYTE *, CK_ULONG *);
+typedef CK_RV (* CK_C_DecryptFinal)(CK_SESSION_HANDLE, CK_BYTE *, CK_ULONG *);
+typedef CK_RV (* CK_C_DigestInit)(CK_SESSION_HANDLE, CK_MECHANISM *);
+typedef CK_RV (* CK_C_Digest)(CK_SESSION_HANDLE, CK_BYTE *, CK_ULONG, CK_BYTE *,
+                              CK_ULONG *);
+typedef CK_RV (* CK_C_DigestUpdate)(CK_SESSION_HANDLE, CK_BYTE *, CK_ULONG);
+typedef CK_RV (* CK_C_DigestKey)(CK_SESSION_HANDLE, CK_OBJECT_HANDLE);
+typedef CK_RV (* CK_C_DigestFinal)(CK_SESSION_HANDLE, CK_BYTE *, CK_ULONG *);
+typedef CK_RV (* CK_C_SignInit)(CK_SESSION_HANDLE, CK_MECHANISM *,
+                                CK_OBJECT_HANDLE);
+typedef CK_RV (* CK_C_Sign)(CK_SESSION_HANDLE, CK_BYTE *, CK_ULONG, CK_BYTE *,
+                            CK_ULONG *);
+typedef CK_RV (* CK_C_SignUpdate)(CK_SESSION_HANDLE, CK_BYTE *, CK_ULONG);
+typedef CK_RV (* CK_C_SignFinal)(CK_SESSION_HANDLE, CK_BYTE *, CK_ULONG *);
+typedef CK_RV (* CK_C_SignRecoverInit)(CK_SESSION_HANDLE, CK_MECHANISM *,
+                                       CK_OBJECT_HANDLE);
+typedef CK_RV (* CK_C_SignRecover)(CK_SESSION_HANDLE, CK_BYTE *, CK_ULONG,
+                                   CK_BYTE *, CK_ULONG *);
+typedef CK_RV (* CK_C_VerifyInit)(CK_SESSION_HANDLE, CK_MECHANISM *,
+                                  CK_OBJECT_HANDLE);
+typedef CK_RV (* CK_C_Verify)(CK_SESSION_HANDLE, CK_BYTE *, CK_ULONG, CK_BYTE *,
+                              CK_ULONG);
+typedef CK_RV (* CK_C_VerifyUpdate)(CK_SESSION_HANDLE, CK_BYTE *, CK_ULONG);
+typedef CK_RV (* CK_C_VerifyFinal)(CK_SESSION_HANDLE, CK_BYTE *, CK_ULONG);
+typedef CK_RV (* CK_C_VerifyRecoverInit)(CK_SESSION_HANDLE, CK_MECHANISM *,
+                                 CK_OBJECT_HANDLE);
+typedef CK_RV (* CK_C_VerifyRecover)(CK_SESSION_HANDLE, CK_BYTE *, CK_ULONG,
+                             CK_BYTE *, CK_ULONG *);
+typedef CK_RV (* CK_C_DigestEncryptUpdate)(CK_SESSION_HANDLE, CK_BYTE *,
+                                           CK_ULONG, CK_BYTE *, CK_ULONG *);
+typedef CK_RV (* CK_C_DecryptDigestUpdate)(CK_SESSION_HANDLE, CK_BYTE *,
+                                           CK_ULONG, CK_BYTE *, CK_ULONG *);
+typedef CK_RV (* CK_C_SignEncryptUpdate)(CK_SESSION_HANDLE, CK_BYTE *, CK_ULONG,
+                                         CK_BYTE *, CK_ULONG *);
+typedef CK_RV (* CK_C_DecryptVerifyUpdate)(CK_SESSION_HANDLE, CK_BYTE *,
+                                           CK_ULONG, CK_BYTE *, CK_ULONG *);
+typedef CK_RV (* CK_C_GenerateKey)(CK_SESSION_HANDLE, CK_MECHANISM *,
+                                   CK_ATTRIBUTE *, CK_ULONG,
+                                   CK_OBJECT_HANDLE *);
+typedef CK_RV (* CK_C_GenerateKeyPair)(CK_SESSION_HANDLE, CK_MECHANISM *,
+                                       CK_ATTRIBUTE *, CK_ULONG, CK_ATTRIBUTE *,
+                                       CK_ULONG, CK_OBJECT_HANDLE *,
+                                       CK_OBJECT_HANDLE *);
+typedef CK_RV (* CK_C_WrapKey)(CK_SESSION_HANDLE, CK_MECHANISM *,
+                               CK_OBJECT_HANDLE, CK_OBJECT_HANDLE, CK_BYTE *,
+                               CK_ULONG *);
+typedef CK_RV (* CK_C_UnwrapKey)(CK_SESSION_HANDLE, CK_MECHANISM *,
+                                 CK_OBJECT_HANDLE, CK_BYTE *, CK_ULONG,
+                                 CK_ATTRIBUTE *, CK_ULONG, CK_OBJECT_HANDLE *);
+typedef CK_RV (* CK_C_DeriveKey)(CK_SESSION_HANDLE, CK_MECHANISM *,
+                                 CK_OBJECT_HANDLE, CK_ATTRIBUTE *, CK_ULONG,
+                                 CK_OBJECT_HANDLE *);
+typedef CK_RV (* CK_C_SeedRandom)(CK_SESSION_HANDLE, CK_BYTE *, CK_ULONG);
+typedef CK_RV (* CK_C_GenerateRandom)(CK_SESSION_HANDLE, CK_BYTE *, CK_ULONG);
+typedef CK_RV (* CK_C_GetFunctionStatus)(CK_SESSION_HANDLE);
+typedef CK_RV (* CK_C_CancelFunction)(CK_SESSION_HANDLE);
+typedef CK_RV (* CK_C_WaitForSlotEvent)(CK_FLAGS, CK_SLOT_ID *, void *);
+typedef CK_RV (* CK_C_GetInterfaceList)(CK_INTERFACE *, CK_ULONG *);
+typedef CK_RV (* CK_C_GetInterface)(CK_UTF8CHAR *, CK_VERSION *,
+                                    CK_INTERFACE **, CK_FLAGS);
+typedef CK_RV (* CK_C_LoginUser)(CK_SESSION_HANDLE, CK_USER_TYPE, CK_UTF8CHAR *,
+                                 CK_ULONG, CK_UTF8CHAR *, CK_ULONG);
+typedef CK_RV (* CK_C_SessionCancel)(CK_SESSION_HANDLE, CK_FLAGS);
+typedef CK_RV (* CK_C_MessageEncryptInit)(CK_SESSION_HANDLE, CK_MECHANISM *,
+                                          CK_OBJECT_HANDLE);
+typedef CK_RV (* CK_C_EncryptMessage)(CK_SESSION_HANDLE, void *, CK_ULONG,
+                                      CK_BYTE *, CK_ULONG, CK_BYTE *, CK_ULONG,
+                                      CK_BYTE *, CK_ULONG *);
+typedef CK_RV (* CK_C_EncryptMessageBegin)(CK_SESSION_HANDLE, void *, CK_ULONG,
+                                           CK_BYTE *, CK_ULONG);
+typedef CK_RV (* CK_C_EncryptMessageNext)(CK_SESSION_HANDLE, void *, CK_ULONG,
+                                          CK_BYTE *, CK_ULONG, CK_BYTE *,
+                                          CK_ULONG *, CK_FLAGS);
+typedef CK_RV (* CK_C_MessageEncryptFinal)(CK_SESSION_HANDLE);
+typedef CK_RV (* CK_C_MessageDecryptInit)(CK_SESSION_HANDLE, CK_MECHANISM *,
+                                          CK_OBJECT_HANDLE);
+typedef CK_RV (* CK_C_DecryptMessage)(CK_SESSION_HANDLE, void *, CK_ULONG,
+                                      CK_BYTE *, CK_ULONG, CK_BYTE *, CK_ULONG,
+                                      CK_BYTE *, CK_ULONG *);
+typedef CK_RV (* CK_C_DecryptMessageBegin)(CK_SESSION_HANDLE, void *, CK_ULONG,
+                                           CK_BYTE *, CK_ULONG);
+typedef CK_RV (* CK_C_DecryptMessageNext)(CK_SESSION_HANDLE, void *, CK_ULONG,
+                                          CK_BYTE *, CK_ULONG, CK_BYTE *,
+                                          CK_ULONG *, CK_FLAGS);
+typedef CK_RV (* CK_C_MessageDecryptFinal)(CK_SESSION_HANDLE);
+typedef CK_RV (* CK_C_MessageSignInit)(CK_SESSION_HANDLE, CK_MECHANISM *,
+                                       CK_OBJECT_HANDLE);
+typedef CK_RV (* CK_C_SignMessage)(CK_SESSION_HANDLE, void *, CK_ULONG,
+                                   CK_BYTE *, CK_ULONG, CK_BYTE *, CK_ULONG *);
+typedef CK_RV (* CK_C_SignMessageBegin)(CK_SESSION_HANDLE, void *, CK_ULONG);
+typedef CK_RV (* CK_C_SignMessageNext)(CK_SESSION_HANDLE, void *, CK_ULONG,
+                                       CK_BYTE *, CK_ULONG, CK_BYTE *,
+                                       CK_ULONG *);
+typedef CK_RV (* CK_C_MessageSignFinal)(CK_SESSION_HANDLE);
+typedef CK_RV (* CK_C_MessageVerifyInit)(CK_SESSION_HANDLE, CK_MECHANISM *,
+                                         CK_OBJECT_HANDLE);
+typedef CK_RV (* CK_C_VerifyMessage)(CK_SESSION_HANDLE, void *, CK_ULONG,
+                                     CK_BYTE *, CK_ULONG, CK_BYTE *, CK_ULONG);
+typedef CK_RV (* CK_C_VerifyMessageBegin)(CK_SESSION_HANDLE, void *, CK_ULONG);
+typedef CK_RV (* CK_C_VerifyMessageNext)(CK_SESSION_HANDLE, void *, CK_ULONG,
+                                         CK_BYTE *, CK_ULONG, CK_BYTE *,
+                                         CK_ULONG);
+typedef CK_RV (* CK_C_MessageVerifyFinal)(CK_SESSION_HANDLE);
+typedef CK_RV (* CK_C_EncapsulateKey)(CK_SESSION_HANDLE, CK_MECHANISM *,
+                                      CK_OBJECT_HANDLE, CK_ATTRIBUTE *,
+                                      CK_ULONG, CK_BYTE *, CK_ULONG *,
+                                      CK_OBJECT_HANDLE *);
+typedef CK_RV (* CK_C_DecapsulateKey)(CK_SESSION_HANDLE, CK_MECHANISM *,
+                                      CK_OBJECT_HANDLE, CK_ATTRIBUTE *,
+                                      CK_ULONG, CK_BYTE *, CK_ULONG,
+                                      CK_OBJECT_HANDLE *);
+typedef CK_RV (* CK_C_VerifySignatureInit)(CK_SESSION_HANDLE, CK_MECHANISM *,
+                                           CK_OBJECT_HANDLE, CK_BYTE *,
+                                           CK_ULONG);
+typedef CK_RV (* CK_C_VerifySignature)(CK_SESSION_HANDLE, CK_BYTE *, CK_ULONG);
+typedef CK_RV (* CK_C_VerifySignatureUpdate)(CK_SESSION_HANDLE, CK_BYTE *,
+                                             CK_ULONG);
+typedef CK_RV (* CK_C_VerifySignatureFinal)(CK_SESSION_HANDLE);
+typedef CK_RV (* CK_C_GetSessionValidationFlags)(CK_SESSION_HANDLE,
+                                                 CK_SESSION_VALIDATION_FLAGS_TYPE,
+                                                 CK_FLAGS *);
+typedef CK_RV (* CK_C_AsyncComplete)(CK_SESSION_HANDLE, CK_UTF8CHAR *,
+                                     CK_ASYNC_DATA *);
+typedef CK_RV (* CK_C_AsyncGetID)(CK_SESSION_HANDLE, CK_UTF8CHAR *, CK_ULONG *);
+typedef CK_RV (* CK_C_AsyncJoin)(CK_SESSION_HANDLE, CK_UTF8CHAR *, CK_ULONG,
+                                 CK_BYTE *, CK_ULONG);
+typedef CK_RV (* CK_C_WrapKeyAuthenticated)(CK_SESSION_HANDLE, CK_MECHANISM *,
+                                            CK_OBJECT_HANDLE, CK_OBJECT_HANDLE,
+                                            CK_BYTE *, CK_ULONG, CK_BYTE *,
+                                            CK_ULONG *);
+typedef CK_RV (* CK_C_UnwrapKeyAuthenticated)(CK_SESSION_HANDLE, CK_MECHANISM *,
+                                              CK_OBJECT_HANDLE, CK_BYTE *,
+                                              CK_ULONG, CK_ATTRIBUTE *,
+                                              CK_ULONG, CK_BYTE *, CK_ULONG,
+                                              CK_OBJECT_HANDLE *);
+
+struct CK_FUNCTION_LIST_3_2 {
+    CK_VERSION version;
+    CK_C_Initialize C_Initialize;
+    CK_C_Finalize C_Finalize;
+    CK_C_GetInfo C_GetInfo;
+    CK_C_GetFunctionList C_GetFunctionList;
+    CK_C_GetSlotList C_GetSlotList;
+    CK_C_GetSlotInfo C_GetSlotInfo;
+    CK_C_GetTokenInfo C_GetTokenInfo;
+    CK_C_GetMechanismList C_GetMechanismList;
+    CK_C_GetMechanismInfo C_GetMechanismInfo;
+    CK_C_InitToken C_InitToken;
+    CK_C_InitPIN C_InitPIN;
+    CK_C_SetPIN C_SetPIN;
+    CK_C_OpenSession C_OpenSession;
+    CK_C_CloseSession C_CloseSession;
+    CK_C_CloseAllSessions C_CloseAllSessions;
+    CK_C_GetSessionInfo C_GetSessionInfo;
+    CK_C_GetOperationState C_GetOperationState;
+    CK_C_SetOperationState C_SetOperationState;
+    CK_C_Login C_Login;
+    CK_C_Logout C_Logout;
+    CK_C_CreateObject C_CreateObject;
+    CK_C_CopyObject C_CopyObject;
+    CK_C_DestroyObject C_DestroyObject;
+    CK_C_GetObjectSize C_GetObjectSize;
+    CK_C_GetAttributeValue C_GetAttributeValue;
+    CK_C_SetAttributeValue C_SetAttributeValue;
+    CK_C_FindObjectsInit C_FindObjectsInit;
+    CK_C_FindObjects C_FindObjects;
+    CK_C_FindObjectsFinal C_FindObjectsFinal;
+    CK_C_EncryptInit C_EncryptInit;
+    CK_C_Encrypt C_Encrypt;
+    CK_C_EncryptUpdate C_EncryptUpdate;
+    CK_C_EncryptFinal C_EncryptFinal;
+    CK_C_DecryptInit C_DecryptInit;
+    CK_C_Decrypt C_Decrypt;
+    CK_C_DecryptUpdate C_DecryptUpdate;
+    CK_C_DecryptFinal C_DecryptFinal;
+    CK_C_DigestInit C_DigestInit;
+    CK_C_Digest C_Digest;
+    CK_C_DigestUpdate C_DigestUpdate;
+    CK_C_DigestKey C_DigestKey;
+    CK_C_DigestFinal C_DigestFinal;
+    CK_C_SignInit C_SignInit;
+    CK_C_Sign C_Sign;
+    CK_C_SignUpdate C_SignUpdate;
+    CK_C_SignFinal C_SignFinal;
+    CK_C_SignRecoverInit C_SignRecoverInit;
+    CK_C_SignRecover C_SignRecover;
+    CK_C_VerifyInit C_VerifyInit;
+    CK_C_Verify C_Verify;
+    CK_C_VerifyUpdate C_VerifyUpdate;
+    CK_C_VerifyFinal C_VerifyFinal;
+    CK_C_VerifyRecoverInit C_VerifyRecoverInit;
+    CK_C_VerifyRecover C_VerifyRecover;
+    CK_C_DigestEncryptUpdate C_DigestEncryptUpdate;
+    CK_C_DecryptDigestUpdate C_DecryptDigestUpdate;
+    CK_C_SignEncryptUpdate C_SignEncryptUpdate;
+    CK_C_DecryptVerifyUpdate C_DecryptVerifyUpdate;
+    CK_C_GenerateKey C_GenerateKey;
+    CK_C_GenerateKeyPair C_GenerateKeyPair;
+    CK_C_WrapKey C_WrapKey;
+    CK_C_UnwrapKey C_UnwrapKey;
+    CK_C_DeriveKey C_DeriveKey;
+    CK_C_SeedRandom C_SeedRandom;
+    CK_C_GenerateRandom C_GenerateRandom;
+    CK_C_GetFunctionStatus C_GetFunctionStatus;
+    CK_C_CancelFunction C_CancelFunction;
+    CK_C_WaitForSlotEvent C_WaitForSlotEvent;
+    CK_C_GetInterfaceList C_GetInterfaceList;
+    CK_C_GetInterface C_GetInterface;
+    CK_C_LoginUser C_LoginUser;
+    CK_C_SessionCancel C_SessionCancel;
+    CK_C_MessageEncryptInit C_MessageEncryptInit;
+    CK_C_EncryptMessage C_EncryptMessage;
+    CK_C_EncryptMessageBegin C_EncryptMessageBegin;
+    CK_C_EncryptMessageNext C_EncryptMessageNext;
+    CK_C_MessageEncryptFinal C_MessageEncryptFinal;
+    CK_C_MessageDecryptInit C_MessageDecryptInit;
+    CK_C_DecryptMessage C_DecryptMessage;
+    CK_C_DecryptMessageBegin C_DecryptMessageBegin;
+    CK_C_DecryptMessageNext C_DecryptMessageNext;
+    CK_C_MessageDecryptFinal C_MessageDecryptFinal;
+    CK_C_MessageSignInit C_MessageSignInit;
+    CK_C_SignMessage C_SignMessage;
+    CK_C_SignMessageBegin C_SignMessageBegin;
+    CK_C_SignMessageNext C_SignMessageNext;
+    CK_C_MessageSignFinal C_MessageSignFinal;
+    CK_C_MessageVerifyInit C_MessageVerifyInit;
+    CK_C_VerifyMessage C_VerifyMessage;
+    CK_C_VerifyMessageBegin C_VerifyMessageBegin;
+    CK_C_VerifyMessageNext C_VerifyMessageNext;
+    CK_C_MessageVerifyFinal C_MessageVerifyFinal;
+    CK_C_EncapsulateKey C_EncapsulateKey;
+    CK_C_DecapsulateKey C_DecapsulateKey;
+    CK_C_VerifySignatureInit C_VerifySignatureInit;
+    CK_C_VerifySignature C_VerifySignature;
+    CK_C_VerifySignatureUpdate C_VerifySignatureUpdate;
+    CK_C_VerifySignatureFinal C_VerifySignatureFinal;
+    CK_C_GetSessionValidationFlags C_GetSessionValidationFlags;
+    CK_C_AsyncComplete C_AsyncComplete;
+    CK_C_AsyncGetID C_AsyncGetID;
+    CK_C_AsyncJoin C_AsyncJoin;
+    CK_C_WrapKeyAuthenticated  C_WrapKeyAuthenticated ;
+    CK_C_UnwrapKeyAuthenticated  C_UnwrapKeyAuthenticated ;
+};

-#undef ck_interface
+struct CK_FUNCTION_LIST_3_0 {
+    CK_VERSION version;
+    CK_C_Initialize C_Initialize;
+    CK_C_Finalize C_Finalize;
+    CK_C_GetInfo C_GetInfo;
+    CK_C_GetFunctionList C_GetFunctionList;
+    CK_C_GetSlotList C_GetSlotList;
+    CK_C_GetSlotInfo C_GetSlotInfo;
+    CK_C_GetTokenInfo C_GetTokenInfo;
+    CK_C_GetMechanismList C_GetMechanismList;
+    CK_C_GetMechanismInfo C_GetMechanismInfo;
+    CK_C_InitToken C_InitToken;
+    CK_C_InitPIN C_InitPIN;
+    CK_C_SetPIN C_SetPIN;
+    CK_C_OpenSession C_OpenSession;
+    CK_C_CloseSession C_CloseSession;
+    CK_C_CloseAllSessions C_CloseAllSessions;
+    CK_C_GetSessionInfo C_GetSessionInfo;
+    CK_C_GetOperationState C_GetOperationState;
+    CK_C_SetOperationState C_SetOperationState;
+    CK_C_Login C_Login;
+    CK_C_Logout C_Logout;
+    CK_C_CreateObject C_CreateObject;
+    CK_C_CopyObject C_CopyObject;
+    CK_C_DestroyObject C_DestroyObject;
+    CK_C_GetObjectSize C_GetObjectSize;
+    CK_C_GetAttributeValue C_GetAttributeValue;
+    CK_C_SetAttributeValue C_SetAttributeValue;
+    CK_C_FindObjectsInit C_FindObjectsInit;
+    CK_C_FindObjects C_FindObjects;
+    CK_C_FindObjectsFinal C_FindObjectsFinal;
+    CK_C_EncryptInit C_EncryptInit;
+    CK_C_Encrypt C_Encrypt;
+    CK_C_EncryptUpdate C_EncryptUpdate;
+    CK_C_EncryptFinal C_EncryptFinal;
+    CK_C_DecryptInit C_DecryptInit;
+    CK_C_Decrypt C_Decrypt;
+    CK_C_DecryptUpdate C_DecryptUpdate;
+    CK_C_DecryptFinal C_DecryptFinal;
+    CK_C_DigestInit C_DigestInit;
+    CK_C_Digest C_Digest;
+    CK_C_DigestUpdate C_DigestUpdate;
+    CK_C_DigestKey C_DigestKey;
+    CK_C_DigestFinal C_DigestFinal;
+    CK_C_SignInit C_SignInit;
+    CK_C_Sign C_Sign;
+    CK_C_SignUpdate C_SignUpdate;
+    CK_C_SignFinal C_SignFinal;
+    CK_C_SignRecoverInit C_SignRecoverInit;
+    CK_C_SignRecover C_SignRecover;
+    CK_C_VerifyInit C_VerifyInit;
+    CK_C_Verify C_Verify;
+    CK_C_VerifyUpdate C_VerifyUpdate;
+    CK_C_VerifyFinal C_VerifyFinal;
+    CK_C_VerifyRecoverInit C_VerifyRecoverInit;
+    CK_C_VerifyRecover C_VerifyRecover;
+    CK_C_DigestEncryptUpdate C_DigestEncryptUpdate;
+    CK_C_DecryptDigestUpdate C_DecryptDigestUpdate;
+    CK_C_SignEncryptUpdate C_SignEncryptUpdate;
+    CK_C_DecryptVerifyUpdate C_DecryptVerifyUpdate;
+    CK_C_GenerateKey C_GenerateKey;
+    CK_C_GenerateKeyPair C_GenerateKeyPair;
+    CK_C_WrapKey C_WrapKey;
+    CK_C_UnwrapKey C_UnwrapKey;
+    CK_C_DeriveKey C_DeriveKey;
+    CK_C_SeedRandom C_SeedRandom;
+    CK_C_GenerateRandom C_GenerateRandom;
+    CK_C_GetFunctionStatus C_GetFunctionStatus;
+    CK_C_CancelFunction C_CancelFunction;
+    CK_C_WaitForSlotEvent C_WaitForSlotEvent;
+    CK_C_GetInterfaceList C_GetInterfaceList;
+    CK_C_GetInterface C_GetInterface;
+    CK_C_LoginUser C_LoginUser;
+    CK_C_SessionCancel C_SessionCancel;
+    CK_C_MessageEncryptInit C_MessageEncryptInit;
+    CK_C_EncryptMessage C_EncryptMessage;
+    CK_C_EncryptMessageBegin C_EncryptMessageBegin;
+    CK_C_EncryptMessageNext C_EncryptMessageNext;
+    CK_C_MessageEncryptFinal C_MessageEncryptFinal;
+    CK_C_MessageDecryptInit C_MessageDecryptInit;
+    CK_C_DecryptMessage C_DecryptMessage;
+    CK_C_DecryptMessageBegin C_DecryptMessageBegin;
+    CK_C_DecryptMessageNext C_DecryptMessageNext;
+    CK_C_MessageDecryptFinal C_MessageDecryptFinal;
+    CK_C_MessageSignInit C_MessageSignInit;
+    CK_C_SignMessage C_SignMessage;
+    CK_C_SignMessageBegin C_SignMessageBegin;
+    CK_C_SignMessageNext C_SignMessageNext;
+    CK_C_MessageSignFinal C_MessageSignFinal;
+    CK_C_MessageVerifyInit C_MessageVerifyInit;
+    CK_C_VerifyMessage C_VerifyMessage;
+    CK_C_VerifyMessageBegin C_VerifyMessageBegin;
+    CK_C_VerifyMessageNext C_VerifyMessageNext;
+    CK_C_MessageVerifyFinal C_MessageVerifyFinal;
+};

-#undef ck_function_list
-#undef ck_function_list_3_0
+struct CK_FUNCTION_LIST {
+    CK_VERSION version;
+    CK_C_Initialize C_Initialize;
+    CK_C_Finalize C_Finalize;
+    CK_C_GetInfo C_GetInfo;
+    CK_C_GetFunctionList C_GetFunctionList;
+    CK_C_GetSlotList C_GetSlotList;
+    CK_C_GetSlotInfo C_GetSlotInfo;
+    CK_C_GetTokenInfo C_GetTokenInfo;
+    CK_C_GetMechanismList C_GetMechanismList;
+    CK_C_GetMechanismInfo C_GetMechanismInfo;
+    CK_C_InitToken C_InitToken;
+    CK_C_InitPIN C_InitPIN;
+    CK_C_SetPIN C_SetPIN;
+    CK_C_OpenSession C_OpenSession;
+    CK_C_CloseSession C_CloseSession;
+    CK_C_CloseAllSessions C_CloseAllSessions;
+    CK_C_GetSessionInfo C_GetSessionInfo;
+    CK_C_GetOperationState C_GetOperationState;
+    CK_C_SetOperationState C_SetOperationState;
+    CK_C_Login C_Login;
+    CK_C_Logout C_Logout;
+    CK_C_CreateObject C_CreateObject;
+    CK_C_CopyObject C_CopyObject;
+    CK_C_DestroyObject C_DestroyObject;
+    CK_C_GetObjectSize C_GetObjectSize;
+    CK_C_GetAttributeValue C_GetAttributeValue;
+    CK_C_SetAttributeValue C_SetAttributeValue;
+    CK_C_FindObjectsInit C_FindObjectsInit;
+    CK_C_FindObjects C_FindObjects;
+    CK_C_FindObjectsFinal C_FindObjectsFinal;
+    CK_C_EncryptInit C_EncryptInit;
+    CK_C_Encrypt C_Encrypt;
+    CK_C_EncryptUpdate C_EncryptUpdate;
+    CK_C_EncryptFinal C_EncryptFinal;
+    CK_C_DecryptInit C_DecryptInit;
+    CK_C_Decrypt C_Decrypt;
+    CK_C_DecryptUpdate C_DecryptUpdate;
+    CK_C_DecryptFinal C_DecryptFinal;
+    CK_C_DigestInit C_DigestInit;
+    CK_C_Digest C_Digest;
+    CK_C_DigestUpdate C_DigestUpdate;
+    CK_C_DigestKey C_DigestKey;
+    CK_C_DigestFinal C_DigestFinal;
+    CK_C_SignInit C_SignInit;
+    CK_C_Sign C_Sign;
+    CK_C_SignUpdate C_SignUpdate;
+    CK_C_SignFinal C_SignFinal;
+    CK_C_SignRecoverInit C_SignRecoverInit;
+    CK_C_SignRecover C_SignRecover;
+    CK_C_VerifyInit C_VerifyInit;
+    CK_C_Verify C_Verify;
+    CK_C_VerifyUpdate C_VerifyUpdate;
+    CK_C_VerifyFinal C_VerifyFinal;
+    CK_C_VerifyRecoverInit C_VerifyRecoverInit;
+    CK_C_VerifyRecover C_VerifyRecover;
+    CK_C_DigestEncryptUpdate C_DigestEncryptUpdate;
+    CK_C_DecryptDigestUpdate C_DecryptDigestUpdate;
+    CK_C_SignEncryptUpdate C_SignEncryptUpdate;
+    CK_C_DecryptVerifyUpdate C_DecryptVerifyUpdate;
+    CK_C_GenerateKey C_GenerateKey;
+    CK_C_GenerateKeyPair C_GenerateKeyPair;
+    CK_C_WrapKey C_WrapKey;
+    CK_C_UnwrapKey C_UnwrapKey;
+    CK_C_DeriveKey C_DeriveKey;
+    CK_C_SeedRandom C_SeedRandom;
+    CK_C_GenerateRandom C_GenerateRandom;
+    CK_C_GetFunctionStatus C_GetFunctionStatus;
+    CK_C_CancelFunction C_CancelFunction;
+    CK_C_WaitForSlotEvent C_WaitForSlotEvent;
+};

-#undef ck_createmutex_t
-#undef ck_destroymutex_t
-#undef ck_lockmutex_t
-#undef ck_unlockmutex_t
-
-#undef ck_c_initialize_args
-#undef create_mutex
-#undef destroy_mutex
-#undef lock_mutex
-#undef unlock_mutex
-#undef reserved
-
-#endif  /* CRYPTOKI_COMPAT */

 /* System dependencies.  */
 #if defined(_WIN32) || defined(CRYPTOKI_FORCE_WIN32)