/* 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