/**
 * Copyright(c) 2011 Trusted Logic.   All rights reserved.
 *
 * Redistribution and use in source and binary forms, with or without
 * modification, are permitted provided that the following conditions
 * are met:
 *
 *  * Redistributions of source code must retain the above copyright
 *    notice, this list of conditions and the following disclaimer.
 *  * Redistributions in binary form must reproduce the above copyright
 *    notice, this list of conditions and the following disclaimer in
 *    the documentation and/or other materials provided with the
 *    distribution.
 *  * Neither the name Trusted Logic nor the names of its
 *    contributors may be used to endorse or promote products derived
 *    from this software without specific prior written permission.
 *
 * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
 * "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
 * LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR
 * A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT
 * OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
 * SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
 * LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
 * DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
 * THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
 * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
 * OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
 */

/*
 * This header file contains the definition of the PKCS#11 types and functions
 * supported by the Trusted Foundations Software. This header file is
 * derived from the RSA Security Inc. PKCS #11 Cryptographic Token Interface
 * (Cryptoki)
 */
#ifndef __PKCS11_H__
#define __PKCS11_H__

#ifdef __cplusplus
extern "C" {
#endif

/*------------------------------------------
* Types and constants
*------------------------------------------*/

#include "s_type.h"

#define CK_TRUE true
#define CK_FALSE false

#ifndef FALSE
#define FALSE CK_FALSE
#endif

#ifndef TRUE
#define TRUE CK_TRUE
#endif

#define NULL_PTR NULL

typedef uint8_t      CK_BYTE, *CK_BYTE_PTR;
typedef CK_BYTE      CK_CHAR, *CK_CHAR_PTR;
typedef CK_BYTE      CK_UTF8CHAR, *CK_UTF8CHAR_PTR;
typedef bool         CK_BBOOL;
typedef uint32_t     CK_ULONG, *CK_ULONG_PTR;
typedef int32_t      CK_LONG;
typedef CK_ULONG     CK_FLAGS;
typedef void*        CK_VOID_PTR, *CK_VOID_PTR_PTR;

#define CK_INVALID_HANDLE 0

typedef struct CK_VERSION
{
   CK_BYTE       major;
   CK_BYTE       minor;
}
CK_VERSION, *CK_VERSION_PTR;

typedef struct CK_INFO
{
   CK_VERSION    cryptokiVersion;
   CK_UTF8CHAR   manufacturerID[32];
   CK_FLAGS      flags;
   CK_UTF8CHAR   libraryDescription[32];
   CK_VERSION    libraryVersion;
}
CK_INFO, *CK_INFO_PTR;

typedef CK_ULONG   CK_NOTIFICATION;
typedef CK_ULONG   CK_SLOT_ID, *CK_SLOT_ID_PTR;
typedef CK_ULONG   CK_SESSION_HANDLE, *CK_SESSION_HANDLE_PTR;

typedef CK_ULONG          CK_USER_TYPE;
#define CKU_SO                 0
#define CKU_USER               1
#define CKU_CONTEXT_SPECIFIC   2

typedef CK_ULONG          CK_STATE;
#define CKS_RO_PUBLIC_SESSION  0
#define CKS_RO_USER_FUNCTIONS  1
#define CKS_RW_PUBLIC_SESSION  2
#define CKS_RW_USER_FUNCTIONS  3
#define CKS_RW_SO_FUNCTIONS    4

typedef struct CK_SESSION_INFO
{
   CK_SLOT_ID    slotID;
   CK_STATE      state;
   CK_FLAGS      flags;
   CK_ULONG      ulDeviceError;
}
CK_SESSION_INFO, *CK_SESSION_INFO_PTR;

#define CKF_RW_SESSION          0x00000002
#define CKF_SERIAL_SESSION      0x00000004
#define CKVF_OPEN_SUB_SESSION   0x00000008

typedef CK_ULONG          CK_OBJECT_HANDLE, *CK_OBJECT_HANDLE_PTR;

typedef CK_ULONG          CK_OBJECT_CLASS, *CK_OBJECT_CLASS_PTR;

#define CKO_DATA              0x00000000
#define CKO_PUBLIC_KEY        0x00000002
#define CKO_PRIVATE_KEY       0x00000003
#define CKO_SECRET_KEY        0x00000004

typedef CK_ULONG          CK_KEY_TYPE;

#define CKK_RSA             0x00000000
#define CKK_DSA             0x00000001
#define CKK_DH              0x00000002
#define CKK_EC              0x00000003

#define CKK_GENERIC_SECRET  0x00000010

#define CKK_RC4             0x00000012
#define CKK_DES             0x00000013
#define CKK_DES2            0x00000014
#define CKK_DES3            0x00000015

#define CKK_AES             0x0000001F

#define CKK_VENDOR_DEFINED  0x80000000

typedef CK_ULONG          CK_ATTRIBUTE_TYPE;

#define CKF_ARRAY_ATTRIBUTE    0x40000000

#define CKA_CLASS              0x00000000
#define CKA_TOKEN              0x00000001
#define CKA_PRIVATE            0x00000002
#define CKA_VALUE              0x00000011

#define CKA_OBJECT_ID          0x00000012

#define CKA_KEY_TYPE           0x00000100
#define CKA_ID                 0x00000102
#define CKA_SENSITIVE          0x00000103
#define CKA_ENCRYPT            0x00000104
#define CKA_DECRYPT            0x00000105
#define CKA_WRAP               0x00000106
#define CKA_UNWRAP             0x00000107
#define CKA_SIGN               0x00000108
#define CKA_VERIFY             0x0000010A
#define CKA_DERIVE             0x0000010C
#define CKA_MODULUS            0x00000120
#define CKA_MODULUS_BITS       0x00000121
#define CKA_PUBLIC_EXPONENT    0x00000122
#define CKA_PRIVATE_EXPONENT   0x00000123
#define CKA_PRIME_1            0x00000124
#define CKA_PRIME_2            0x00000125
#define CKA_EXPONENT_1         0x00000126
#define CKA_EXPONENT_2         0x00000127
#define CKA_COEFFICIENT        0x00000128
#define CKA_PRIME              0x00000130
#define CKA_SUBPRIME           0x00000131
#define CKA_BASE               0x00000132

#define CKA_VALUE_BITS         0x00000160
#define CKA_VALUE_LEN          0x00000161

#define CKA_EXTRACTABLE        0x00000162

#define CKA_MODIFIABLE         0x00000170
#define CKA_COPYABLE           0x00000171
#define CKA_ALWAYS_AUTHENTICATE  0x00000202

#define CKA_VENDOR_DEFINED     0x80000000

#define CKAV_ALLOW_NON_SENSITIVE_DERIVED_KEY 0x80000001

typedef struct CK_ATTRIBUTE
{
   CK_ATTRIBUTE_TYPE type;
   void*             pValue;
   CK_ULONG          ulValueLen;
}
CK_ATTRIBUTE, *CK_ATTRIBUTE_PTR;

typedef CK_ULONG          CK_MECHANISM_TYPE, *CK_MECHANISM_TYPE_PTR;

#define CKM_RSA_PKCS_KEY_PAIR_GEN      0x00000000
#define CKM_RSA_PKCS                   0x00000001
#define CKM_RSA_X_509                  0x00000003
#define CKM_MD5_RSA_PKCS               0x00000005
#define CKM_SHA1_RSA_PKCS              0x00000006
#define CKM_RSA_PKCS_OAEP              0x00000009
#define CKM_RSA_PKCS_PSS               0x0000000D
#define CKM_SHA1_RSA_PKCS_PSS          0x0000000E
#define CKM_DSA_KEY_PAIR_GEN           0x00000010
#define CKM_DSA                        0x00000011
#define CKM_DSA_SHA1                   0x00000012
#define CKM_DH_PKCS_KEY_PAIR_GEN       0x00000020
#define CKM_DH_PKCS_DERIVE             0x00000021
#define CKM_SHA256_RSA_PKCS            0x00000040
#define CKM_SHA384_RSA_PKCS            0x00000041
#define CKM_SHA512_RSA_PKCS            0x00000042
#define CKM_SHA256_RSA_PKCS_PSS        0x00000043
#define CKM_SHA384_RSA_PKCS_PSS        0x00000044
#define CKM_SHA512_RSA_PKCS_PSS        0x00000045
#define CKM_SHA224_RSA_PKCS            0x00000046
#define CKM_SHA224_RSA_PKCS_PSS        0x00000047
#define CKM_RC4_KEY_GEN                0x00000110
#define CKM_RC4                        0x00000111
#define CKM_DES_KEY_GEN                0x00000120
#define CKM_DES_ECB                    0x00000121
#define CKM_DES_CBC                    0x00000122
#define CKM_DES_MAC                    0x00000123
#define CKM_DES2_KEY_GEN               0x00000130
#define CKM_DES3_KEY_GEN               0x00000131
#define CKM_DES3_ECB                   0x00000132
#define CKM_DES3_CBC                   0x00000133
#define CKM_DES3_MAC                   0x00000134
#define CKM_MD5                        0x00000210
#define CKM_MD5_HMAC                   0x00000211
#define CKM_SHA_1                      0x00000220
#define CKM_SHA_1_HMAC                 0x00000221
#define CKM_SHA256                     0x00000250
#define CKM_SHA256_HMAC                0x00000251
#define CKM_SHA224                     0x00000255
#define CKM_SHA224_HMAC                0x00000256
#define CKM_SHA384                     0x00000260
#define CKM_SHA384_HMAC                0x00000261
#define CKM_SHA512                     0x00000270
#define CKM_SHA512_HMAC                0x00000271
#define CKM_GENERIC_SECRET_KEY_GEN     0x00000350
#define CKM_AES_KEY_GEN                0x00001080
#define CKM_AES_ECB                    0x00001081
#define CKM_AES_CBC                    0x00001082
#define CKM_AES_MAC                    0x00001083
#define CKM_AES_CTR                    0x00001086
#define CKM_VENDOR_DEFINED             0x80000000
#define CKMV_AES_CTR                   0x80000001

#define CKMV_IMPLEMENTATION_DEFINED_0   0xC0000000
#define CKMV_IMPLEMENTATION_DEFINED_1   0xC0000001
#define CKMV_IMPLEMENTATION_DEFINED_2   0xC0000002
#define CKMV_IMPLEMENTATION_DEFINED_3   0xC0000003
#define CKMV_IMPLEMENTATION_DEFINED_4   0xC0000004
#define CKMV_IMPLEMENTATION_DEFINED_5   0xC0000005
#define CKMV_IMPLEMENTATION_DEFINED_6   0xC0000006
#define CKMV_IMPLEMENTATION_DEFINED_7   0xC0000007
#define CKMV_IMPLEMENTATION_DEFINED_8   0xC0000008
#define CKMV_IMPLEMENTATION_DEFINED_9   0xC0000009
#define CKMV_IMPLEMENTATION_DEFINED_10  0xC000000A
#define CKMV_IMPLEMENTATION_DEFINED_11  0xC000000B
#define CKMV_IMPLEMENTATION_DEFINED_12  0xC000000C
#define CKMV_IMPLEMENTATION_DEFINED_13  0xC000000D
#define CKMV_IMPLEMENTATION_DEFINED_14  0xC000000E
#define CKMV_IMPLEMENTATION_DEFINED_15  0xC000000F

typedef struct CK_MECHANISM
{
   CK_MECHANISM_TYPE mechanism;
   void*             pParameter;
   CK_ULONG          ulParameterLen;  /* in bytes */
}
CK_MECHANISM, *CK_MECHANISM_PTR;

typedef CK_ULONG          CK_RV;

#define CKR_OK                                0x00000000
#define CKR_CANCEL                            0x00000001
#define CKR_HOST_MEMORY                       0x00000002
#define CKR_SLOT_ID_INVALID                   0x00000003
#define CKR_GENERAL_ERROR                     0x00000005
#define CKR_ARGUMENTS_BAD                     0x00000007
#define CKR_ATTRIBUTE_SENSITIVE               0x00000011
#define CKR_ATTRIBUTE_TYPE_INVALID            0x00000012
#define CKR_ATTRIBUTE_VALUE_INVALID           0x00000013
#define CKR_COPY_PROHIBITED                   0x0000001A
#define CKR_DATA_INVALID                      0x00000020
#define CKR_DATA_LEN_RANGE                    0x00000021
#define CKR_DEVICE_ERROR                      0x00000030
#define CKR_DEVICE_MEMORY                     0x00000031
#define CKR_ENCRYPTED_DATA_INVALID            0x00000040
#define CKR_ENCRYPTED_DATA_LEN_RANGE          0x00000041
#define CKR_KEY_HANDLE_INVALID                0x00000060
#define CKR_KEY_SIZE_RANGE                    0x00000062
#define CKR_KEY_TYPE_INCONSISTENT             0x00000063
#define CKR_KEY_FUNCTION_NOT_PERMITTED        0x00000068
#define CKR_KEY_NOT_WRAPPABLE                 0x00000069
#define CKR_MECHANISM_INVALID                 0x00000070
#define CKR_MECHANISM_PARAM_INVALID           0x00000071
#define CKR_OBJECT_HANDLE_INVALID             0x00000082
#define CKR_OPERATION_ACTIVE                  0x00000090
#define CKR_OPERATION_NOT_INITIALIZED         0x00000091
#define CKR_PIN_INCORRECT                     0x000000A0
#define CKR_SESSION_COUNT                     0x000000B1
#define CKR_SESSION_HANDLE_INVALID            0x000000B3
#define CKR_SESSION_PARALLEL_NOT_SUPPORTED    0x000000B4
#define CKR_SESSION_READ_ONLY                 0x000000B5
#define CKR_SIGNATURE_INVALID                 0x000000C0
#define CKR_SIGNATURE_LEN_RANGE               0x000000C1
#define CKR_TEMPLATE_INCOMPLETE               0x000000D0
#define CKR_TEMPLATE_INCONSISTENT             0x000000D1
#define CKR_TOKEN_NOT_PRESENT                 0x000000E0
#define CKR_USER_ALREADY_LOGGED_IN            0x00000100
#define CKR_USER_NOT_LOGGED_IN                0x00000101
#define CKR_USER_TYPE_INVALID                 0x00000103
#define CKR_WRAPPED_KEY_LEN_RANGE             0x00000112
#define CKR_WRAPPING_KEY_HANDLE_INVALID       0x00000113
#define CKR_RANDOM_SEED_NOT_SUPPORTED         0x00000120
#define CKR_RANDOM_NO_RNG                     0x00000121
#define CKR_BUFFER_TOO_SMALL                  0x00000150
#define CKR_CRYPTOKI_NOT_INITIALIZED          0x00000190
#define CKR_CRYPTOKI_ALREADY_INITIALIZED      0x00000191
#define CKR_VENDOR_DEFINED                    0x80000000

typedef CK_RV (*CK_NOTIFY)(
   CK_SESSION_HANDLE hSession,
   CK_NOTIFICATION   event,
   void*       pApplication
);

typedef CK_ULONG CK_RSA_PKCS_MGF_TYPE, *CK_RSA_PKCS_MGF_TYPE_PTR;

#define CKG_MGF1_SHA1         0x00000001
#define CKG_MGF1_SHA256       0x00000002
#define CKG_MGF1_SHA384       0x00000003
#define CKG_MGF1_SHA512       0x00000004
#define CKG_MGF1_SHA224       0x00000005

typedef CK_ULONG CK_RSA_PKCS_OAEP_SOURCE_TYPE, *CK_RSA_PKCS_OAEP_SOURCE_TYPE_PTR;

#define CKZ_DATA_SPECIFIED    0x00000001
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;
   CK_ULONG ulSourceDataLen;
}
CK_RSA_PKCS_OAEP_PARAMS, *CK_RSA_PKCS_OAEP_PARAMS_PTR;

typedef struct CK_RSA_PKCS_PSS_PARAMS
{
   CK_MECHANISM_TYPE    hashAlg;
   CK_RSA_PKCS_MGF_TYPE mgf;
   CK_ULONG             sLen;
}
CK_RSA_PKCS_PSS_PARAMS, *CK_RSA_PKCS_PSS_PARAMS_PTR;

typedef struct CK_AES_CTR_PARAMS
{
   CK_ULONG ulCounterBits;
   CK_BYTE cb[16];
}
CK_AES_CTR_PARAMS, *CK_AES_CTR_PARAMS_PTR;

/*------------------------------------------
* Functions
*------------------------------------------*/
CK_RV PKCS11_EXPORT C_Initialize(void* pInitArgs);

CK_RV PKCS11_EXPORT C_Finalize(void* pReserved);

CK_RV PKCS11_EXPORT C_GetInfo(CK_INFO* pInfo);

CK_RV PKCS11_EXPORT C_OpenSession(
   CK_SLOT_ID            slotID,
   CK_FLAGS              flags,
   void*                 pApplication,
   CK_NOTIFY             Notify,
   CK_SESSION_HANDLE*    phSession);

CK_RV PKCS11_EXPORT C_CloseSession(
   CK_SESSION_HANDLE hSession);

CK_RV PKCS11_EXPORT C_Login(
   CK_SESSION_HANDLE   hSession,
   CK_USER_TYPE        userType,
   const CK_UTF8CHAR*  pPin,
   CK_ULONG            ulPinLen);

CK_RV PKCS11_EXPORT C_Logout(
   CK_SESSION_HANDLE hSession);

CK_RV PKCS11_EXPORT C_CreateObject(
   CK_SESSION_HANDLE   hSession,
   const CK_ATTRIBUTE* pTemplate,
   CK_ULONG            ulCount,
   CK_OBJECT_HANDLE*   phObject);

CK_RV PKCS11_EXPORT C_DestroyObject(
   CK_SESSION_HANDLE   hSession,
   CK_OBJECT_HANDLE    hObject);

CK_RV PKCS11_EXPORT C_GetAttributeValue(
   CK_SESSION_HANDLE   hSession,
   CK_OBJECT_HANDLE    hObject,
   CK_ATTRIBUTE*       pTemplate,
   CK_ULONG            ulCount);

CK_RV PKCS11_EXPORT C_FindObjectsInit(
   CK_SESSION_HANDLE   hSession,
   const CK_ATTRIBUTE* pTemplate,
   CK_ULONG            ulCount);

CK_RV PKCS11_EXPORT C_FindObjects(
   CK_SESSION_HANDLE   hSession,
   CK_OBJECT_HANDLE*   phObject,
   CK_ULONG            ulMaxObjectCount,
   CK_ULONG*           pulObjectCount);

CK_RV PKCS11_EXPORT C_FindObjectsFinal(
   CK_SESSION_HANDLE hSession);

CK_RV PKCS11_EXPORT C_EncryptInit(
   CK_SESSION_HANDLE   hSession,
   const CK_MECHANISM* pMechanism,
   CK_OBJECT_HANDLE    hKey);

CK_RV PKCS11_EXPORT C_Encrypt(
   CK_SESSION_HANDLE hSession,
   const CK_BYTE*    pData,
   CK_ULONG          ulDataLen,
   CK_BYTE*          pEncryptedData,
   CK_ULONG*         pulEncryptedDataLen);

CK_RV PKCS11_EXPORT C_EncryptUpdate(
   CK_SESSION_HANDLE hSession,
   const CK_BYTE*    pPart,
   CK_ULONG          ulPartLen,
   CK_BYTE*          pEncryptedPart,
   CK_ULONG*         pulEncryptedPartLen);

CK_RV PKCS11_EXPORT C_EncryptFinal(
   CK_SESSION_HANDLE hSession,
   CK_BYTE*          pLastEncryptedPart,
   CK_ULONG*         pulLastEncryptedPartLen);

CK_RV PKCS11_EXPORT C_DecryptInit(
   CK_SESSION_HANDLE   hSession,
   const CK_MECHANISM* pMechanism,
   CK_OBJECT_HANDLE    hKey);

CK_RV PKCS11_EXPORT C_Decrypt(
   CK_SESSION_HANDLE hSession,
   const CK_BYTE*    pEncryptedData,
   CK_ULONG          ulEncryptedDataLen,
   CK_BYTE*          pData,
   CK_ULONG*         pulDataLen);

CK_RV PKCS11_EXPORT C_DecryptUpdate(
   CK_SESSION_HANDLE hSession,
   const CK_BYTE*    pEncryptedPart,
   CK_ULONG          ulEncryptedPartLen,
   CK_BYTE*          pPart,
   CK_ULONG*         pulPartLen);

CK_RV PKCS11_EXPORT C_DecryptFinal(
   CK_SESSION_HANDLE hSession,
   CK_BYTE*          pLastPart,
   CK_ULONG*         pulLastPartLen);

CK_RV PKCS11_EXPORT C_DigestInit(
   CK_SESSION_HANDLE   hSession,
   const CK_MECHANISM* pMechanism);

CK_RV PKCS11_EXPORT C_Digest(
   CK_SESSION_HANDLE hSession,
   const CK_BYTE*    pData,
   CK_ULONG          ulDataLen,
   CK_BYTE*          pDigest,
   CK_ULONG*         pulDigestLen);

CK_RV PKCS11_EXPORT C_DigestUpdate(
   CK_SESSION_HANDLE hSession,
   const CK_BYTE*    pPart,
   CK_ULONG          ulPartLen);

CK_RV PKCS11_EXPORT C_DigestFinal(
   CK_SESSION_HANDLE hSession,
   CK_BYTE*          pDigest,
   CK_ULONG*         pulDigestLen);

CK_RV PKCS11_EXPORT C_SignInit(
   CK_SESSION_HANDLE   hSession,
   const CK_MECHANISM* pMechanism,
   CK_OBJECT_HANDLE    hKey);

CK_RV PKCS11_EXPORT C_Sign(
   CK_SESSION_HANDLE  hSession,
   const CK_BYTE*     pData,
   CK_ULONG           ulDataLen,
   CK_BYTE*           pSignature,
   CK_ULONG*          pulSignatureLen);

CK_RV PKCS11_EXPORT C_SignUpdate(
   CK_SESSION_HANDLE hSession,
   const CK_BYTE*    pPart,
   CK_ULONG          ulPartLen);

CK_RV PKCS11_EXPORT C_SignFinal(
   CK_SESSION_HANDLE hSession,
   CK_BYTE*          pSignature,
   CK_ULONG*         pulSignatureLen);

CK_RV PKCS11_EXPORT C_VerifyInit(
   CK_SESSION_HANDLE   hSession,
   const CK_MECHANISM* pMechanism,
   CK_OBJECT_HANDLE    hKey);

CK_RV PKCS11_EXPORT C_Verify(
   CK_SESSION_HANDLE hSession,
   const CK_BYTE*    pData,
   CK_ULONG          ulDataLen,
   CK_BYTE*          pSignature,
   CK_ULONG          ulSignatureLen);

CK_RV PKCS11_EXPORT C_VerifyUpdate(
   CK_SESSION_HANDLE hSession,
   const CK_BYTE*    pPart,
   CK_ULONG          ulPartLen);

CK_RV PKCS11_EXPORT C_VerifyFinal(
   CK_SESSION_HANDLE hSession,
   const CK_BYTE*          pSignature,
   CK_ULONG          ulSignatureLen);

CK_RV PKCS11_EXPORT C_GenerateKey(
   CK_SESSION_HANDLE   hSession,
   const CK_MECHANISM* pMechanism,
   const CK_ATTRIBUTE* pTemplate,
   CK_ULONG            ulCount,
   CK_OBJECT_HANDLE*   phKey);

CK_RV PKCS11_EXPORT C_GenerateKeyPair(
   CK_SESSION_HANDLE    hSession,
   const CK_MECHANISM*  pMechanism,
   const CK_ATTRIBUTE*  pPublicKeyTemplate,
   CK_ULONG             ulPublicKeyAttributeCount,
   const CK_ATTRIBUTE*  pPrivateKeyTemplate,
   CK_ULONG             ulPrivateKeyAttributeCount,
   CK_OBJECT_HANDLE*    phPublicKey,
   CK_OBJECT_HANDLE*    phPrivateKey);

CK_RV PKCS11_EXPORT C_DeriveKey(
   CK_SESSION_HANDLE    hSession,
   const CK_MECHANISM*  pMechanism,
   CK_OBJECT_HANDLE     hBaseKey,
   const CK_ATTRIBUTE*  pTemplate,
   CK_ULONG             ulAttributeCount,
   CK_OBJECT_HANDLE*    phKey);

CK_RV PKCS11_EXPORT C_SeedRandom(
   CK_SESSION_HANDLE hSession,
   const CK_BYTE*    pSeed,
   CK_ULONG          ulSeedLen);

CK_RV PKCS11_EXPORT C_GenerateRandom(
   CK_SESSION_HANDLE hSession,
   CK_BYTE*          pRandomData,
   CK_ULONG          ulRandomLen);

CK_RV PKCS11_EXPORT C_CloseObjectHandle(
   CK_SESSION_HANDLE hSession,
   CK_OBJECT_HANDLE    hObject);

CK_RV PKCS11_EXPORT C_CopyObject(
   CK_SESSION_HANDLE    hSession,
   CK_OBJECT_HANDLE     hObject,
   const CK_ATTRIBUTE*  pTemplate,
   CK_ULONG             ulAttributeCount,
   CK_OBJECT_HANDLE*    phNewObject);

#ifdef __cplusplus
}
#endif

#endif /* __PKCS11_H__ */
