/* This Source Code Form is subject to the terms of the Mozilla Public
 * License, v. 2.0. If a copy of the MPL was not distributed with this
 * file, You can obtain one at http://mozilla.org/MPL/2.0/. */
/*
 * Copyright (C) 1994-1999 RSA Security Inc. Licence to copy this document
 * is granted provided that it is identified as "RSA Security In.c Public-Key
 * Cryptography Standards (PKCS)" in all material mentioning or referencing
 * this document.
 */
/* This function contains pretty much everything about all the */
/* PKCS #11  function prototypes.  Because this information is */
/* used for more than just declaring function prototypes, the */
/* order of the functions appearing herein is important, and */
/* should not be altered. */

/* General-purpose */

/* C_Initialize initializes the PKCS #11 library. */
CK_PKCS11_FUNCTION_INFO(C_Initialize)
#ifdef CK_NEED_ARG_LIST
(
    CK_VOID_PTR pInitArgs /* if this is not NULL_PTR, it gets
                           * cast to CK_C_INITIALIZE_ARGS_PTR
                           * and dereferenced */
    );
#endif

/* C_Finalize indicates that an application is done with the
 * PKCS #11 library. */
CK_PKCS11_FUNCTION_INFO(C_Finalize)
#ifdef CK_NEED_ARG_LIST
(
    CK_VOID_PTR pReserved /* reserved.  Should be NULL_PTR */
    );
#endif

/* C_GetInfo returns general information about PKCS #11. */
CK_PKCS11_FUNCTION_INFO(C_GetInfo)
#ifdef CK_NEED_ARG_LIST
(
    CK_INFO_PTR pInfo /* location that receives information */
    );
#endif

/* C_GetFunctionList returns the function list. */
CK_PKCS11_FUNCTION_INFO(C_GetFunctionList)
#ifdef CK_NEED_ARG_LIST
(
    CK_FUNCTION_LIST_PTR_PTR ppFunctionList /* receives pointer to
                                             * function list */
    );
#endif

/* Slot and token management */

/* C_GetSlotList obtains a list of slots in the system. */
CK_PKCS11_FUNCTION_INFO(C_GetSlotList)
#ifdef CK_NEED_ARG_LIST
(
    CK_BBOOL tokenPresent,    /* only slots with tokens? */
    CK_SLOT_ID_PTR pSlotList, /* receives array of slot IDs */
    CK_ULONG_PTR pulCount     /* receives number of slots */
    );
#endif

/* C_GetSlotInfo obtains information about a particular slot in
 * the system. */
CK_PKCS11_FUNCTION_INFO(C_GetSlotInfo)
#ifdef CK_NEED_ARG_LIST
(
    CK_SLOT_ID slotID,     /* the ID of the slot */
    CK_SLOT_INFO_PTR pInfo /* receives the slot information */
    );
#endif

/* C_GetTokenInfo obtains information about a particular token
 * in the system. */
CK_PKCS11_FUNCTION_INFO(C_GetTokenInfo)
#ifdef CK_NEED_ARG_LIST
(
    CK_SLOT_ID slotID,      /* ID of the token's slot */
    CK_TOKEN_INFO_PTR pInfo /* receives the token information */
    );
#endif

/* C_GetMechanismList obtains a list of mechanism types
 * supported by a token. */
CK_PKCS11_FUNCTION_INFO(C_GetMechanismList)
#ifdef CK_NEED_ARG_LIST
(
    CK_SLOT_ID slotID,                    /* ID of token's slot */
    CK_MECHANISM_TYPE_PTR pMechanismList, /* gets mech. array */
    CK_ULONG_PTR pulCount                 /* gets # of mechs. */
    );
#endif

/* C_GetMechanismInfo obtains information about a particular
 * mechanism possibly supported by a token. */
CK_PKCS11_FUNCTION_INFO(C_GetMechanismInfo)
#ifdef CK_NEED_ARG_LIST
(
    CK_SLOT_ID slotID,          /* ID of the token's slot */
    CK_MECHANISM_TYPE type,     /* type of mechanism */
    CK_MECHANISM_INFO_PTR pInfo /* receives mechanism info */
    );
#endif

/* C_InitToken initializes a token. */
CK_PKCS11_FUNCTION_INFO(C_InitToken)
#ifdef CK_NEED_ARG_LIST
/* pLabel changed from CK_CHAR_PTR to CK_UTF8CHAR_PTR for v2.10 */
(
    CK_SLOT_ID slotID,     /* ID of the token's slot */
    CK_UTF8CHAR_PTR pPin,  /* the SO's initial PIN */
    CK_ULONG ulPinLen,     /* length in bytes of the PIN */
    CK_UTF8CHAR_PTR pLabel /* 32-byte token label (blank padded) */
    );
#endif

/* C_InitPIN initializes the normal user's PIN. */
CK_PKCS11_FUNCTION_INFO(C_InitPIN)
#ifdef CK_NEED_ARG_LIST
(
    CK_SESSION_HANDLE hSession, /* the session's handle */
    CK_UTF8CHAR_PTR pPin,       /* the normal user's PIN */
    CK_ULONG ulPinLen           /* length in bytes of the PIN */
    );
#endif

/* C_SetPIN modifies the PIN of the user who is logged in. */
CK_PKCS11_FUNCTION_INFO(C_SetPIN)
#ifdef CK_NEED_ARG_LIST
(
    CK_SESSION_HANDLE hSession, /* the session's handle */
    CK_UTF8CHAR_PTR pOldPin,    /* the old PIN */
    CK_ULONG ulOldLen,          /* length of the old PIN */
    CK_UTF8CHAR_PTR pNewPin,    /* the new PIN */
    CK_ULONG ulNewLen           /* length of the new PIN */
    );
#endif

/* Session management */

/* C_OpenSession opens a session between an application and a
 * token. */
CK_PKCS11_FUNCTION_INFO(C_OpenSession)
#ifdef CK_NEED_ARG_LIST
(
    CK_SLOT_ID slotID,              /* the slot's ID */
    CK_FLAGS flags,                 /* from CK_SESSION_INFO */
    CK_VOID_PTR pApplication,       /* passed to callback */
    CK_NOTIFY Notify,               /* callback function */
    CK_SESSION_HANDLE_PTR phSession /* gets session handle */
    );
#endif

/* C_CloseSession closes a session between an application and a
 * token. */
CK_PKCS11_FUNCTION_INFO(C_CloseSession)
#ifdef CK_NEED_ARG_LIST
(
    CK_SESSION_HANDLE hSession /* the session's handle */
    );
#endif

/* C_CloseAllSessions closes all sessions with a token. */
CK_PKCS11_FUNCTION_INFO(C_CloseAllSessions)
#ifdef CK_NEED_ARG_LIST
(
    CK_SLOT_ID slotID /* the token's slot */
    );
#endif

/* C_GetSessionInfo obtains information about the session. */
CK_PKCS11_FUNCTION_INFO(C_GetSessionInfo)
#ifdef CK_NEED_ARG_LIST
(
    CK_SESSION_HANDLE hSession, /* the session's handle */
    CK_SESSION_INFO_PTR pInfo   /* receives session info */
    );
#endif

/* C_GetOperationState obtains the state of the cryptographic operation
 * in a session. */
CK_PKCS11_FUNCTION_INFO(C_GetOperationState)
#ifdef CK_NEED_ARG_LIST
(
    CK_SESSION_HANDLE hSession,       /* session's handle */
    CK_BYTE_PTR pOperationState,      /* gets state */
    CK_ULONG_PTR pulOperationStateLen /* gets state length */
    );
#endif

/* C_SetOperationState restores the state of the cryptographic
 * operation in a session. */
CK_PKCS11_FUNCTION_INFO(C_SetOperationState)
#ifdef CK_NEED_ARG_LIST
(
    CK_SESSION_HANDLE hSession,         /* session's handle */
    CK_BYTE_PTR pOperationState,        /* holds state */
    CK_ULONG ulOperationStateLen,       /* holds state length */
    CK_OBJECT_HANDLE hEncryptionKey,    /* en/decryption key */
    CK_OBJECT_HANDLE hAuthenticationKey /* sign/verify key */
    );
#endif

/* C_Login logs a user into a token. */
CK_PKCS11_FUNCTION_INFO(C_Login)
#ifdef CK_NEED_ARG_LIST
(
    CK_SESSION_HANDLE hSession, /* the session's handle */
    CK_USER_TYPE userType,      /* the user type */
    CK_UTF8CHAR_PTR pPin,       /* the user's PIN */
    CK_ULONG ulPinLen           /* the length of the PIN */
    );
#endif

/* C_Logout logs a user out from a token. */
CK_PKCS11_FUNCTION_INFO(C_Logout)
#ifdef CK_NEED_ARG_LIST
(
    CK_SESSION_HANDLE hSession /* the session's handle */
    );
#endif

/* Object management */

/* C_CreateObject creates a new object. */
CK_PKCS11_FUNCTION_INFO(C_CreateObject)
#ifdef CK_NEED_ARG_LIST
(
    CK_SESSION_HANDLE hSession,   /* the session's handle */
    CK_ATTRIBUTE_PTR pTemplate,   /* the object's template */
    CK_ULONG ulCount,             /* attributes in template */
    CK_OBJECT_HANDLE_PTR phObject /* gets new object's handle. */
    );
#endif

/* C_CopyObject copies an object, creating a new object for the
 * copy. */
CK_PKCS11_FUNCTION_INFO(C_CopyObject)
#ifdef CK_NEED_ARG_LIST
(
    CK_SESSION_HANDLE hSession,      /* the session's handle */
    CK_OBJECT_HANDLE hObject,        /* the object's handle */
    CK_ATTRIBUTE_PTR pTemplate,      /* template for new object */
    CK_ULONG ulCount,                /* attributes in template */
    CK_OBJECT_HANDLE_PTR phNewObject /* receives handle of copy */
    );
#endif

/* C_DestroyObject destroys an object. */
CK_PKCS11_FUNCTION_INFO(C_DestroyObject)
#ifdef CK_NEED_ARG_LIST
(
    CK_SESSION_HANDLE hSession, /* the session's handle */
    CK_OBJECT_HANDLE hObject    /* the object's handle */
    );
#endif

/* C_GetObjectSize gets the size of an object in bytes. */
CK_PKCS11_FUNCTION_INFO(C_GetObjectSize)
#ifdef CK_NEED_ARG_LIST
(
    CK_SESSION_HANDLE hSession, /* the session's handle */
    CK_OBJECT_HANDLE hObject,   /* the object's handle */
    CK_ULONG_PTR pulSize        /* receives size of object */
    );
#endif

/* C_GetAttributeValue obtains the value of one or more object
 * attributes. */
CK_PKCS11_FUNCTION_INFO(C_GetAttributeValue)
#ifdef CK_NEED_ARG_LIST
(
    CK_SESSION_HANDLE hSession, /* the session's handle */
    CK_OBJECT_HANDLE hObject,   /* the object's handle */
    CK_ATTRIBUTE_PTR pTemplate, /* specifies attrs; gets vals */
    CK_ULONG ulCount            /* attributes in template */
    );
#endif

/* C_SetAttributeValue modifies the value of one or more object
 * attributes */
CK_PKCS11_FUNCTION_INFO(C_SetAttributeValue)
#ifdef CK_NEED_ARG_LIST
(
    CK_SESSION_HANDLE hSession, /* the session's handle */
    CK_OBJECT_HANDLE hObject,   /* the object's handle */
    CK_ATTRIBUTE_PTR pTemplate, /* specifies attrs and values */
    CK_ULONG ulCount            /* attributes in template */
    );
#endif

/* C_FindObjectsInit initializes a search for token and session
 * objects that match a template. */
CK_PKCS11_FUNCTION_INFO(C_FindObjectsInit)
#ifdef CK_NEED_ARG_LIST
(
    CK_SESSION_HANDLE hSession, /* the session's handle */
    CK_ATTRIBUTE_PTR pTemplate, /* attribute values to match */
    CK_ULONG ulCount            /* attrs in search template */
    );
#endif

/* C_FindObjects continues a search for token and session
 * objects that match a template, obtaining additional object
 * handles. */
CK_PKCS11_FUNCTION_INFO(C_FindObjects)
#ifdef CK_NEED_ARG_LIST
(
    CK_SESSION_HANDLE hSession,    /* session's handle */
    CK_OBJECT_HANDLE_PTR phObject, /* gets obj. handles */
    CK_ULONG ulMaxObjectCount,     /* max handles to get */
    CK_ULONG_PTR pulObjectCount    /* actual # returned */
    );
#endif

/* C_FindObjectsFinal finishes a search for token and session
 * objects. */
CK_PKCS11_FUNCTION_INFO(C_FindObjectsFinal)
#ifdef CK_NEED_ARG_LIST
(
    CK_SESSION_HANDLE hSession /* the session's handle */
    );
#endif

/* Encryption and decryption */

/* C_EncryptInit initializes an encryption operation. */
CK_PKCS11_FUNCTION_INFO(C_EncryptInit)
#ifdef CK_NEED_ARG_LIST
(
    CK_SESSION_HANDLE hSession,  /* the session's handle */
    CK_MECHANISM_PTR pMechanism, /* the encryption mechanism */
    CK_OBJECT_HANDLE hKey        /* handle of encryption key */
    );
#endif

/* C_Encrypt encrypts single-part data. */
CK_PKCS11_FUNCTION_INFO(C_Encrypt)
#ifdef CK_NEED_ARG_LIST
(
    CK_SESSION_HANDLE hSession,      /* session's handle */
    CK_BYTE_PTR pData,               /* the plaintext data */
    CK_ULONG ulDataLen,              /* bytes of plaintext */
    CK_BYTE_PTR pEncryptedData,      /* gets ciphertext */
    CK_ULONG_PTR pulEncryptedDataLen /* gets c-text size */
    );
#endif

/* C_EncryptUpdate continues a multiple-part encryption
 * operation. */
CK_PKCS11_FUNCTION_INFO(C_EncryptUpdate)
#ifdef CK_NEED_ARG_LIST
(
    CK_SESSION_HANDLE hSession,      /* session's handle */
    CK_BYTE_PTR pPart,               /* the plaintext data */
    CK_ULONG ulPartLen,              /* plaintext data len */
    CK_BYTE_PTR pEncryptedPart,      /* gets ciphertext */
    CK_ULONG_PTR pulEncryptedPartLen /* gets c-text size */
    );
#endif

/* C_EncryptFinal finishes a multiple-part encryption
 * operation. */
CK_PKCS11_FUNCTION_INFO(C_EncryptFinal)
#ifdef CK_NEED_ARG_LIST
(
    CK_SESSION_HANDLE hSession,          /* session handle */
    CK_BYTE_PTR pLastEncryptedPart,      /* last c-text */
    CK_ULONG_PTR pulLastEncryptedPartLen /* gets last size */
    );
#endif

/* C_DecryptInit initializes a decryption operation. */
CK_PKCS11_FUNCTION_INFO(C_DecryptInit)
#ifdef CK_NEED_ARG_LIST
(
    CK_SESSION_HANDLE hSession,  /* the session's handle */
    CK_MECHANISM_PTR pMechanism, /* the decryption mechanism */
    CK_OBJECT_HANDLE hKey        /* handle of decryption key */
    );
#endif

/* C_Decrypt decrypts encrypted data in a single part. */
CK_PKCS11_FUNCTION_INFO(C_Decrypt)
#ifdef CK_NEED_ARG_LIST
(
    CK_SESSION_HANDLE hSession,  /* session's handle */
    CK_BYTE_PTR pEncryptedData,  /* ciphertext */
    CK_ULONG ulEncryptedDataLen, /* ciphertext length */
    CK_BYTE_PTR pData,           /* gets plaintext */
    CK_ULONG_PTR pulDataLen      /* gets p-text size */
    );
#endif

/* C_DecryptUpdate continues a multiple-part decryption
 * operation. */
CK_PKCS11_FUNCTION_INFO(C_DecryptUpdate)
#ifdef CK_NEED_ARG_LIST
(
    CK_SESSION_HANDLE hSession,  /* session's handle */
    CK_BYTE_PTR pEncryptedPart,  /* encrypted data */
    CK_ULONG ulEncryptedPartLen, /* input length */
    CK_BYTE_PTR pPart,           /* gets plaintext */
    CK_ULONG_PTR pulPartLen      /* p-text size */
    );
#endif

/* C_DecryptFinal finishes a multiple-part decryption
 * operation. */
CK_PKCS11_FUNCTION_INFO(C_DecryptFinal)
#ifdef CK_NEED_ARG_LIST
(
    CK_SESSION_HANDLE hSession, /* the session's handle */
    CK_BYTE_PTR pLastPart,      /* gets plaintext */
    CK_ULONG_PTR pulLastPartLen /* p-text size */
    );
#endif

/* Message digesting */

/* C_DigestInit initializes a message-digesting operation. */
CK_PKCS11_FUNCTION_INFO(C_DigestInit)
#ifdef CK_NEED_ARG_LIST
(
    CK_SESSION_HANDLE hSession, /* the session's handle */
    CK_MECHANISM_PTR pMechanism /* the digesting mechanism */
    );
#endif

/* C_Digest digests data in a single part. */
CK_PKCS11_FUNCTION_INFO(C_Digest)
#ifdef CK_NEED_ARG_LIST
(
    CK_SESSION_HANDLE hSession, /* the session's handle */
    CK_BYTE_PTR pData,          /* data to be digested */
    CK_ULONG ulDataLen,         /* bytes of data to digest */
    CK_BYTE_PTR pDigest,        /* gets the message digest */
    CK_ULONG_PTR pulDigestLen   /* gets digest length */
    );
#endif

/* C_DigestUpdate continues a multiple-part message-digesting
 * operation. */
CK_PKCS11_FUNCTION_INFO(C_DigestUpdate)
#ifdef CK_NEED_ARG_LIST
(
    CK_SESSION_HANDLE hSession, /* the session's handle */
    CK_BYTE_PTR pPart,          /* data to be digested */
    CK_ULONG ulPartLen          /* bytes of data to be digested */
    );
#endif

/* C_DigestKey continues a multi-part message-digesting
 * operation, by digesting the value of a secret key as part of
 * the data already digested. */
CK_PKCS11_FUNCTION_INFO(C_DigestKey)
#ifdef CK_NEED_ARG_LIST
(
    CK_SESSION_HANDLE hSession, /* the session's handle */
    CK_OBJECT_HANDLE hKey       /* secret key to digest */
    );
#endif

/* C_DigestFinal finishes a multiple-part message-digesting
 * operation. */
CK_PKCS11_FUNCTION_INFO(C_DigestFinal)
#ifdef CK_NEED_ARG_LIST
(
    CK_SESSION_HANDLE hSession, /* the session's handle */
    CK_BYTE_PTR pDigest,        /* gets the message digest */
    CK_ULONG_PTR pulDigestLen   /* gets byte count of digest */
    );
#endif

/* Signing and MACing */

/* C_SignInit initializes a signature (private key encryption)
 * operation, where the signature is (will be) an appendix to
 * the data, and plaintext cannot be recovered from the
 *signature. */
CK_PKCS11_FUNCTION_INFO(C_SignInit)
#ifdef CK_NEED_ARG_LIST
(
    CK_SESSION_HANDLE hSession,  /* the session's handle */
    CK_MECHANISM_PTR pMechanism, /* the signature mechanism */
    CK_OBJECT_HANDLE hKey        /* handle of signature key */
    );
#endif

/* C_Sign signs (encrypts with private key) data in a single
 * part, where the signature is (will be) an appendix to the
 * data, and plaintext cannot be recovered from the signature. */
CK_PKCS11_FUNCTION_INFO(C_Sign)
#ifdef CK_NEED_ARG_LIST
(
    CK_SESSION_HANDLE hSession,  /* the session's handle */
    CK_BYTE_PTR pData,           /* the data to sign */
    CK_ULONG ulDataLen,          /* count of bytes to sign */
    CK_BYTE_PTR pSignature,      /* gets the signature */
    CK_ULONG_PTR pulSignatureLen /* gets signature length */
    );
#endif

/* C_SignUpdate continues a multiple-part signature operation,
 * where the signature is (will be) an appendix to the data,
 * and plaintext cannot be recovered from the signature. */
CK_PKCS11_FUNCTION_INFO(C_SignUpdate)
#ifdef CK_NEED_ARG_LIST
(
    CK_SESSION_HANDLE hSession, /* the session's handle */
    CK_BYTE_PTR pPart,          /* the data to sign */
    CK_ULONG ulPartLen          /* count of bytes to sign */
    );
#endif

/* C_SignFinal finishes a multiple-part signature operation,
 * returning the signature. */
CK_PKCS11_FUNCTION_INFO(C_SignFinal)
#ifdef CK_NEED_ARG_LIST
(
    CK_SESSION_HANDLE hSession,  /* the session's handle */
    CK_BYTE_PTR pSignature,      /* gets the signature */
    CK_ULONG_PTR pulSignatureLen /* gets signature length */
    );
#endif

/* C_SignRecoverInit initializes a signature operation, where
 * the data can be recovered from the signature. */
CK_PKCS11_FUNCTION_INFO(C_SignRecoverInit)
#ifdef CK_NEED_ARG_LIST
(
    CK_SESSION_HANDLE hSession,  /* the session's handle */
    CK_MECHANISM_PTR pMechanism, /* the signature mechanism */
    CK_OBJECT_HANDLE hKey        /* handle of the signature key */
    );
#endif

/* C_SignRecover signs data in a single operation, where the
 * data can be recovered from the signature. */
CK_PKCS11_FUNCTION_INFO(C_SignRecover)
#ifdef CK_NEED_ARG_LIST
(
    CK_SESSION_HANDLE hSession,  /* the session's handle */
    CK_BYTE_PTR pData,           /* the data to sign */
    CK_ULONG ulDataLen,          /* count of bytes to sign */
    CK_BYTE_PTR pSignature,      /* gets the signature */
    CK_ULONG_PTR pulSignatureLen /* gets signature length */
    );
#endif

/* Verifying signatures and MACs */

/* C_VerifyInit initializes a verification operation, where the
 * signature is an appendix to the data, and plaintext cannot
 *  cannot be recovered from the signature (e.g. DSA). */
CK_PKCS11_FUNCTION_INFO(C_VerifyInit)
#ifdef CK_NEED_ARG_LIST
(
    CK_SESSION_HANDLE hSession,  /* the session's handle */
    CK_MECHANISM_PTR pMechanism, /* the verification mechanism */
    CK_OBJECT_HANDLE hKey        /* verification key */
    );
#endif

/* C_Verify verifies a signature in a single-part operation,
 * where the signature is an appendix to the data, and plaintext
 * cannot be recovered from the signature. */
CK_PKCS11_FUNCTION_INFO(C_Verify)
#ifdef CK_NEED_ARG_LIST
(
    CK_SESSION_HANDLE hSession, /* the session's handle */
    CK_BYTE_PTR pData,          /* signed data */
    CK_ULONG ulDataLen,         /* length of signed data */
    CK_BYTE_PTR pSignature,     /* signature */
    CK_ULONG ulSignatureLen     /* signature length*/
    );
#endif

/* C_VerifyUpdate continues a multiple-part verification
 * operation, where the signature is an appendix to the data,
 * and plaintext cannot be recovered from the signature. */
CK_PKCS11_FUNCTION_INFO(C_VerifyUpdate)
#ifdef CK_NEED_ARG_LIST
(
    CK_SESSION_HANDLE hSession, /* the session's handle */
    CK_BYTE_PTR pPart,          /* signed data */
    CK_ULONG ulPartLen          /* length of signed data */
    );
#endif

/* C_VerifyFinal finishes a multiple-part verification
 * operation, checking the signature. */
CK_PKCS11_FUNCTION_INFO(C_VerifyFinal)
#ifdef CK_NEED_ARG_LIST
(
    CK_SESSION_HANDLE hSession, /* the session's handle */
    CK_BYTE_PTR pSignature,     /* signature to verify */
    CK_ULONG ulSignatureLen     /* signature length */
    );
#endif

/* C_VerifyRecoverInit initializes a signature verification
 * operation, where the data is recovered from the signature. */
CK_PKCS11_FUNCTION_INFO(C_VerifyRecoverInit)
#ifdef CK_NEED_ARG_LIST
(
    CK_SESSION_HANDLE hSession,  /* the session's handle */
    CK_MECHANISM_PTR pMechanism, /* the verification mechanism */
    CK_OBJECT_HANDLE hKey        /* verification key */
    );
#endif

/* C_VerifyRecover verifies a signature in a single-part
 * operation, where the data is recovered from the signature. */
CK_PKCS11_FUNCTION_INFO(C_VerifyRecover)
#ifdef CK_NEED_ARG_LIST
(
    CK_SESSION_HANDLE hSession, /* the session's handle */
    CK_BYTE_PTR pSignature,     /* signature to verify */
    CK_ULONG ulSignatureLen,    /* signature length */
    CK_BYTE_PTR pData,          /* gets signed data */
    CK_ULONG_PTR pulDataLen     /* gets signed data len */
    );
#endif

/* Dual-function cryptographic operations */

/* C_DigestEncryptUpdate continues a multiple-part digesting
 * and encryption operation. */
CK_PKCS11_FUNCTION_INFO(C_DigestEncryptUpdate)
#ifdef CK_NEED_ARG_LIST
(
    CK_SESSION_HANDLE hSession,      /* session's handle */
    CK_BYTE_PTR pPart,               /* the plaintext data */
    CK_ULONG ulPartLen,              /* plaintext length */
    CK_BYTE_PTR pEncryptedPart,      /* gets ciphertext */
    CK_ULONG_PTR pulEncryptedPartLen /* gets c-text length */
    );
#endif

/* C_DecryptDigestUpdate continues a multiple-part decryption and
 * digesting operation. */
CK_PKCS11_FUNCTION_INFO(C_DecryptDigestUpdate)
#ifdef CK_NEED_ARG_LIST
(
    CK_SESSION_HANDLE hSession,  /* session's handle */
    CK_BYTE_PTR pEncryptedPart,  /* ciphertext */
    CK_ULONG ulEncryptedPartLen, /* ciphertext length */
    CK_BYTE_PTR pPart,           /* gets plaintext */
    CK_ULONG_PTR pulPartLen      /* gets plaintext len */
    );
#endif

/* C_SignEncryptUpdate continues a multiple-part signing and
 * encryption operation. */
CK_PKCS11_FUNCTION_INFO(C_SignEncryptUpdate)
#ifdef CK_NEED_ARG_LIST
(
    CK_SESSION_HANDLE hSession,      /* session's handle */
    CK_BYTE_PTR pPart,               /* the plaintext data */
    CK_ULONG ulPartLen,              /* plaintext length */
    CK_BYTE_PTR pEncryptedPart,      /* gets ciphertext */
    CK_ULONG_PTR pulEncryptedPartLen /* gets c-text length */
    );
#endif

/* C_DecryptVerifyUpdate continues a multiple-part decryption and
 * verify operation. */
CK_PKCS11_FUNCTION_INFO(C_DecryptVerifyUpdate)
#ifdef CK_NEED_ARG_LIST
(
    CK_SESSION_HANDLE hSession,  /* session's handle */
    CK_BYTE_PTR pEncryptedPart,  /* ciphertext */
    CK_ULONG ulEncryptedPartLen, /* ciphertext length */
    CK_BYTE_PTR pPart,           /* gets plaintext */
    CK_ULONG_PTR pulPartLen      /* gets p-text length */
    );
#endif

/* Key management */

/* C_GenerateKey generates a secret key, creating a new key
 * object. */
CK_PKCS11_FUNCTION_INFO(C_GenerateKey)
#ifdef CK_NEED_ARG_LIST
(
    CK_SESSION_HANDLE hSession,  /* the session's handle */
    CK_MECHANISM_PTR pMechanism, /* key generation mech. */
    CK_ATTRIBUTE_PTR pTemplate,  /* template for new key */
    CK_ULONG ulCount,            /* # of attrs in template */
    CK_OBJECT_HANDLE_PTR phKey   /* gets handle of new key */
    );
#endif

/* C_GenerateKeyPair generates a public-key/private-key pair,
 * creating new key objects. */
CK_PKCS11_FUNCTION_INFO(C_GenerateKeyPair)
#ifdef CK_NEED_ARG_LIST
(
    CK_SESSION_HANDLE hSession,           /* session handle */
    CK_MECHANISM_PTR pMechanism,          /* key-gen mech. */
    CK_ATTRIBUTE_PTR pPublicKeyTemplate,  /* template for pub. key */
    CK_ULONG ulPublicKeyAttributeCount,   /* # pub. attrs. */
    CK_ATTRIBUTE_PTR pPrivateKeyTemplate, /* template for priv. key */
    CK_ULONG ulPrivateKeyAttributeCount,  /* # priv. attrs. */
    CK_OBJECT_HANDLE_PTR phPublicKey,     /* gets pub. key handle */
    CK_OBJECT_HANDLE_PTR phPrivateKey     /* gets priv. key handle */
    );
#endif

/* C_WrapKey wraps (i.e., encrypts) a key. */
CK_PKCS11_FUNCTION_INFO(C_WrapKey)
#ifdef CK_NEED_ARG_LIST
(
    CK_SESSION_HANDLE hSession,    /* the session's handle */
    CK_MECHANISM_PTR pMechanism,   /* the wrapping mechanism */
    CK_OBJECT_HANDLE hWrappingKey, /* wrapping key */
    CK_OBJECT_HANDLE hKey,         /* key to be wrapped */
    CK_BYTE_PTR pWrappedKey,       /* gets wrapped key */
    CK_ULONG_PTR pulWrappedKeyLen  /* gets wrapped key size */
    );
#endif

/* C_UnwrapKey unwraps (decrypts) a wrapped key, creating a new
 * key object. */
CK_PKCS11_FUNCTION_INFO(C_UnwrapKey)
#ifdef CK_NEED_ARG_LIST
(
    CK_SESSION_HANDLE hSession,      /* session's handle */
    CK_MECHANISM_PTR pMechanism,     /* unwrapping mech. */
    CK_OBJECT_HANDLE hUnwrappingKey, /* unwrapping key */
    CK_BYTE_PTR pWrappedKey,         /* the wrapped key */
    CK_ULONG ulWrappedKeyLen,        /* wrapped key len */
    CK_ATTRIBUTE_PTR pTemplate,      /* new key template */
    CK_ULONG ulAttributeCount,       /* template length */
    CK_OBJECT_HANDLE_PTR phKey       /* gets new handle */
    );
#endif

/* C_DeriveKey derives a key from a base key, creating a new key
 * object. */
CK_PKCS11_FUNCTION_INFO(C_DeriveKey)
#ifdef CK_NEED_ARG_LIST
(
    CK_SESSION_HANDLE hSession,  /* session's handle */
    CK_MECHANISM_PTR pMechanism, /* key deriv. mech. */
    CK_OBJECT_HANDLE hBaseKey,   /* base key */
    CK_ATTRIBUTE_PTR pTemplate,  /* new key template */
    CK_ULONG ulAttributeCount,   /* template length */
    CK_OBJECT_HANDLE_PTR phKey   /* gets new handle */
    );
#endif

/* Random number generation */

/* C_SeedRandom mixes additional seed material into the token's
 * random number generator. */
CK_PKCS11_FUNCTION_INFO(C_SeedRandom)
#ifdef CK_NEED_ARG_LIST
(
    CK_SESSION_HANDLE hSession, /* the session's handle */
    CK_BYTE_PTR pSeed,          /* the seed material */
    CK_ULONG ulSeedLen          /* length of seed material */
    );
#endif

/* C_GenerateRandom generates random data. */
CK_PKCS11_FUNCTION_INFO(C_GenerateRandom)
#ifdef CK_NEED_ARG_LIST
(
    CK_SESSION_HANDLE hSession, /* the session's handle */
    CK_BYTE_PTR RandomData,     /* receives the random data */
    CK_ULONG ulRandomLen        /* # of bytes to generate */
    );
#endif

/* Parallel function management */

/* C_GetFunctionStatus is a legacy function; it obtains an
 * updated status of a function running in parallel with an
 * application. */
CK_PKCS11_FUNCTION_INFO(C_GetFunctionStatus)
#ifdef CK_NEED_ARG_LIST
(
    CK_SESSION_HANDLE hSession /* the session's handle */
    );
#endif

/* C_CancelFunction is a legacy function; it cancels a function
 * running in parallel. */
CK_PKCS11_FUNCTION_INFO(C_CancelFunction)
#ifdef CK_NEED_ARG_LIST
(
    CK_SESSION_HANDLE hSession /* the session's handle */
    );
#endif

/* Functions added in for PKCS #11 Version 2.01 or later */

/* C_WaitForSlotEvent waits for a slot event (token insertion,
 * removal, etc.) to occur. */
CK_PKCS11_FUNCTION_INFO(C_WaitForSlotEvent)
#ifdef CK_NEED_ARG_LIST
(
    CK_FLAGS flags,       /* blocking/nonblocking flag */
    CK_SLOT_ID_PTR pSlot, /* location that receives the slot ID */
    CK_VOID_PTR pRserved  /* reserved.  Should be NULL_PTR */
    );
#endif

#if defined(CK_PKCS11_3_0) && !defined(CK_PKCS11_2_0_ONLY)
CK_PKCS11_FUNCTION_INFO(C_GetInterfaceList)
#ifdef CK_NEED_ARG_LIST
(
    CK_INTERFACE_PTR interfaces,
    CK_ULONG_PTR pulCount);
#endif

CK_PKCS11_FUNCTION_INFO(C_GetInterface)
#ifdef CK_NEED_ARG_LIST
(
    CK_UTF8CHAR_PTR pInterfaceName,
    CK_VERSION_PTR pVersion,
    CK_INTERFACE_PTR_PTR ppInterface,
    CK_FLAGS flags);
#endif

CK_PKCS11_FUNCTION_INFO(C_LoginUser)
#ifdef CK_NEED_ARG_LIST
(
    CK_SESSION_HANDLE hSession,
    CK_USER_TYPE userType,
    CK_CHAR_PTR pPin,
    CK_ULONG ulPinLen,
    CK_UTF8CHAR_PTR pUsername,
    CK_ULONG ulUsernameLen);
#endif

CK_PKCS11_FUNCTION_INFO(C_SessionCancel)
#ifdef CK_NEED_ARG_LIST
(
    CK_SESSION_HANDLE hSession,
    CK_FLAGS flags);
#endif

CK_PKCS11_FUNCTION_INFO(C_MessageEncryptInit)
#ifdef CK_NEED_ARG_LIST
(
    CK_SESSION_HANDLE hSession,
    CK_MECHANISM_PTR pMechanism,
    CK_OBJECT_HANDLE hKey);
#endif

CK_PKCS11_FUNCTION_INFO(C_EncryptMessage)
#ifdef CK_NEED_ARG_LIST
(
    CK_SESSION_HANDLE hSession,
    CK_VOID_PTR pParameter,
    CK_ULONG ulParameterLen,
    CK_BYTE_PTR pAssociatedData,
    CK_ULONG ulAssociatedDataLen,
    CK_BYTE_PTR pPlaintext,
    CK_ULONG ulPlaintextLen,
    CK_BYTE_PTR pCiphertext,
    CK_ULONG_PTR pulCiphertextLen);
#endif

CK_PKCS11_FUNCTION_INFO(C_EncryptMessageBegin)
#ifdef CK_NEED_ARG_LIST
(
    CK_SESSION_HANDLE hSession,
    CK_VOID_PTR pParameter,
    CK_ULONG ulParameterLen,
    CK_BYTE_PTR pAssociatedData,
    CK_ULONG ulAssociatedDataLen);
#endif

CK_PKCS11_FUNCTION_INFO(C_EncryptMessageNext)
#ifdef CK_NEED_ARG_LIST
(
    CK_SESSION_HANDLE hSession,
    CK_VOID_PTR pParameter,
    CK_ULONG ulParameterLen,
    CK_BYTE_PTR pPlaintextPart,
    CK_ULONG ulPlaintextPartLen,
    CK_BYTE_PTR pCiphertextPart,
    CK_ULONG_PTR pulCiphertextPartLen,
    CK_FLAGS flags);
#endif

CK_PKCS11_FUNCTION_INFO(C_MessageEncryptFinal)
#ifdef CK_NEED_ARG_LIST
(
    CK_SESSION_HANDLE hSession);
#endif

CK_PKCS11_FUNCTION_INFO(C_MessageDecryptInit)
#ifdef CK_NEED_ARG_LIST
(
    CK_SESSION_HANDLE hSession,
    CK_MECHANISM_PTR pMechanism,
    CK_OBJECT_HANDLE hKey);
#endif

CK_PKCS11_FUNCTION_INFO(C_DecryptMessage)
#ifdef CK_NEED_ARG_LIST
(
    CK_SESSION_HANDLE hSession,
    CK_VOID_PTR pParameter,
    CK_ULONG ulParameterLen,
    CK_BYTE_PTR pAssociatedData,
    CK_ULONG ulAssociatedDataLen,
    CK_BYTE_PTR pCiphertext,
    CK_ULONG ulCiphertextLen,
    CK_BYTE_PTR pPlaintext,
    CK_ULONG_PTR pulPlaintextLen);
#endif

CK_PKCS11_FUNCTION_INFO(C_DecryptMessageBegin)
#ifdef CK_NEED_ARG_LIST
(
    CK_SESSION_HANDLE hSession,
    CK_VOID_PTR pParameter,
    CK_ULONG ulParameterLen,
    CK_BYTE_PTR pAssociatedData,
    CK_ULONG ulAssociatedDataLen);
#endif

CK_PKCS11_FUNCTION_INFO(C_DecryptMessageNext)
#ifdef CK_NEED_ARG_LIST
(
    CK_SESSION_HANDLE hSession,
    CK_VOID_PTR pParameter,
    CK_ULONG ulParameterLen,
    CK_BYTE_PTR pCiphertextPart,
    CK_ULONG ulCiphertextPartLen,
    CK_BYTE_PTR pPlaintextPart,
    CK_ULONG_PTR pulPlaintextPartLen,
    CK_FLAGS flags);
#endif

CK_PKCS11_FUNCTION_INFO(C_MessageDecryptFinal)
#ifdef CK_NEED_ARG_LIST
(
    CK_SESSION_HANDLE hSession);
#endif

CK_PKCS11_FUNCTION_INFO(C_MessageSignInit)
#ifdef CK_NEED_ARG_LIST
(
    CK_SESSION_HANDLE hSession,
    CK_MECHANISM_PTR pMechanism,
    CK_OBJECT_HANDLE hKey);
#endif

CK_PKCS11_FUNCTION_INFO(C_SignMessage)
#ifdef CK_NEED_ARG_LIST
(
    CK_SESSION_HANDLE hSession,
    CK_VOID_PTR pParameter,
    CK_ULONG ulParameterLen,
    CK_BYTE_PTR pData,
    CK_ULONG ulDataLen,

    CK_BYTE_PTR pSignature,
    CK_ULONG_PTR pulSignatureLen);
#endif

CK_PKCS11_FUNCTION_INFO(C_SignMessageBegin)
#ifdef CK_NEED_ARG_LIST
(
    CK_SESSION_HANDLE hSession,
    CK_VOID_PTR pParameter,
    CK_ULONG ulParameterLen);
#endif

CK_PKCS11_FUNCTION_INFO(C_SignMessageNext)
#ifdef CK_NEED_ARG_LIST
(
    CK_SESSION_HANDLE hSession,
    CK_VOID_PTR pParameter,
    CK_ULONG ulParameterLen,
    CK_BYTE_PTR pData,
    CK_ULONG ulDataLen,
    CK_BYTE_PTR pSignature,
    CK_ULONG_PTR pulSignatureLen);
#endif

CK_PKCS11_FUNCTION_INFO(C_MessageSignFinal)
#ifdef CK_NEED_ARG_LIST
(
    CK_SESSION_HANDLE hSession);
#endif

CK_PKCS11_FUNCTION_INFO(C_MessageVerifyInit)
#ifdef CK_NEED_ARG_LIST
(
    CK_SESSION_HANDLE hSession,
    CK_MECHANISM_PTR pMechanism,
    CK_OBJECT_HANDLE hKey);
#endif

CK_PKCS11_FUNCTION_INFO(C_VerifyMessage)
#ifdef CK_NEED_ARG_LIST
(
    CK_SESSION_HANDLE hSession,
    CK_VOID_PTR pParameter,
    CK_ULONG ulParameterLen,
    CK_BYTE_PTR pData,
    CK_ULONG ulDataLen,
    CK_BYTE_PTR pSignature,
    CK_ULONG ulSignatureLen);
#endif

CK_PKCS11_FUNCTION_INFO(C_VerifyMessageBegin)
#ifdef CK_NEED_ARG_LIST
(
    CK_SESSION_HANDLE hSession,
    CK_VOID_PTR pParameter,
    CK_ULONG ulParameterLen);
#endif

CK_PKCS11_FUNCTION_INFO(C_VerifyMessageNext)
#ifdef CK_NEED_ARG_LIST
(
    CK_SESSION_HANDLE hSession,
    CK_VOID_PTR pParameter,
    CK_ULONG ulParameterLen,
    CK_BYTE_PTR pData,
    CK_ULONG ulDataLen,
    CK_BYTE_PTR pSignature,
    CK_ULONG ulSignatureLen);
#endif

CK_PKCS11_FUNCTION_INFO(C_MessageVerifyFinal)
#ifdef CK_NEED_ARG_LIST
(
    CK_SESSION_HANDLE hSession);
#endif

#endif
