Source code

Revision control

Copy as Markdown

Other Tools

#
# 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/.
# This file is in part derived from a file "pkcs11f.h" made available
# Fields
# FUNCTION introduces a Cryptoki function
# CK_type specifies and introduces an argument
#
# General-purpose
# C_Initialize initializes the Cryptoki library.
FUNCTION C_Initialize
CK_VOID_PTR pInitArgs # if this is not NULL_PTR, it gets
# cast to CK_C_INITIALIZE_ARGS_PTR
# and dereferenced
# C_Finalize indicates that an application is done with the
# Cryptoki library.
FUNCTION C_Finalize
CK_VOID_PTR pReserved # reserved. Should be NULL_PTR
# C_GetInfo returns general information about Cryptoki.
FUNCTION C_GetInfo
CK_INFO_PTR pInfo # location that receives information
# C_GetFunctionList returns the function list.
FUNCTION C_GetFunctionList
CK_FUNCTION_LIST_PTR_PTR ppFunctionList # receives pointer to function
# list
# Slot and token management
# C_GetSlotList obtains a list of slots in the system.
FUNCTION C_GetSlotList
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
# C_GetSlotInfo obtains information about a particular slot in the
# system.
FUNCTION C_GetSlotInfo
CK_SLOT_ID slotID # the ID of the slot
CK_SLOT_INFO_PTR pInfo # receives the slot information
# C_GetTokenInfo obtains information about a particular token in the
# system.
FUNCTION C_GetTokenInfo
CK_SLOT_ID slotID # ID of the token's slot
CK_TOKEN_INFO_PTR pInfo # receives the token information
# C_GetMechanismList obtains a list of mechanism types supported by a
# token.
FUNCTION C_GetMechanismList
CK_SLOT_ID slotID # ID of token's slot
CK_MECHANISM_TYPE_PTR pMechanismList # gets mech. array
CK_ULONG_PTR pulCount # gets # of mechs.
# C_GetMechanismInfo obtains information about a particular mechanism
# possibly supported by a token.
FUNCTION C_GetMechanismInfo
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
# C_InitToken initializes a token.
FUNCTION C_InitToken
CK_SLOT_ID slotID # ID of the token's slot
CK_CHAR_PTR pPin # the SO's initial PIN
CK_ULONG ulPinLen # length in bytes of the PIN
CK_CHAR_PTR pLabel # 32-byte token label (blank padded)
# C_InitPIN initializes the normal user's PIN.
FUNCTION C_InitPIN
CK_SESSION_HANDLE hSession # the session's handle
CK_CHAR_PTR pPin # the normal user's PIN
CK_ULONG ulPinLen # length in bytes of the PIN
# C_SetPIN modifies the PIN of the user who is logged in.
FUNCTION C_SetPIN
CK_SESSION_HANDLE hSession # the session's handle
CK_CHAR_PTR pOldPin # the old PIN
CK_ULONG ulOldLen # length of the old PIN
CK_CHAR_PTR pNewPin # the new PIN
CK_ULONG ulNewLen # length of the new PIN
# Session management
# C_OpenSession opens a session between an application and a token.
FUNCTION C_OpenSession
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
# C_CloseSession closes a session between an application and a token.
FUNCTION C_CloseSession
CK_SESSION_HANDLE hSession # the session's handle
# C_CloseAllSessions closes all sessions with a token.
FUNCTION C_CloseAllSessions
CK_SLOT_ID slotID # the token's slot
# C_GetSessionInfo obtains information about the session.
FUNCTION C_GetSessionInfo
CK_SESSION_HANDLE hSession # the session's handle
CK_SESSION_INFO_PTR pInfo # receives session info
# C_GetOperationState obtains the state of the cryptographic
# operation in a session.
FUNCTION C_GetOperationState
CK_SESSION_HANDLE hSession # session's handle
CK_BYTE_PTR pOperationState # gets state
CK_ULONG_PTR pulOperationStateLen # gets state length
# C_SetOperationState restores the state of the cryptographic
# operation in a session.
FUNCTION C_SetOperationState
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
# C_Login logs a user into a token.
FUNCTION C_Login
CK_SESSION_HANDLE hSession # the session's handle
CK_USER_TYPE userType # the user type
CK_CHAR_PTR pPin # the user's PIN
CK_ULONG ulPinLen # the length of the PIN
# C_Logout logs a user out from a token.
FUNCTION C_Logout
CK_SESSION_HANDLE hSession # the session's handle
# Object management
# C_CreateObject creates a new object.
FUNCTION C_CreateObject
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.
# C_CopyObject copies an object, creating a new object for the copy.
FUNCTION C_CopyObject
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
# C_DestroyObject destroys an object.
FUNCTION C_DestroyObject
CK_SESSION_HANDLE hSession # the session's handle
CK_OBJECT_HANDLE hObject # the object's handle
# C_GetObjectSize gets the size of an object in bytes.
FUNCTION C_GetObjectSize
CK_SESSION_HANDLE hSession # the session's handle
CK_OBJECT_HANDLE hObject # the object's handle
CK_ULONG_PTR pulSize # receives size of object
# C_GetAttributeValue obtains the value of one or more object
# attributes.
FUNCTION C_GetAttributeValue
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
# C_SetAttributeValue modifies the value of one or more object
# attributes
FUNCTION C_SetAttributeValue
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
# C_FindObjectsInit initializes a search for token and session
# objects that match a template.
FUNCTION C_FindObjectsInit
CK_SESSION_HANDLE hSession # the session's handle
CK_ATTRIBUTE_PTR pTemplate # attribute values to match
CK_ULONG ulCount # attrs in search template
# C_FindObjects continues a search for token and session objects that
# match a template, obtaining additional object handles.
FUNCTION C_FindObjects
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
# C_FindObjectsFinal finishes a search for token and session objects.
FUNCTION C_FindObjectsFinal
CK_SESSION_HANDLE hSession # the session's handle
# Encryption and decryption
# C_EncryptInit initializes an encryption operation.
FUNCTION C_EncryptInit
CK_SESSION_HANDLE hSession # the session's handle
CK_MECHANISM_PTR pMechanism # the encryption mechanism
CK_OBJECT_HANDLE hKey # handle of encryption key
# C_Encrypt encrypts single-part data.
FUNCTION C_Encrypt
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
# C_EncryptUpdate continues a multiple-part encryption operation.
FUNCTION C_EncryptUpdate
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
# C_EncryptFinal finishes a multiple-part encryption operation.
FUNCTION C_EncryptFinal
CK_SESSION_HANDLE hSession # session handle
CK_BYTE_PTR pLastEncryptedPart # last c-text
CK_ULONG_PTR pulLastEncryptedPartLen # gets last size
# C_DecryptInit initializes a decryption operation.
FUNCTION C_DecryptInit
CK_SESSION_HANDLE hSession # the session's handle
CK_MECHANISM_PTR pMechanism # the decryption mechanism
CK_OBJECT_HANDLE hKey # handle of decryption key
# C_Decrypt decrypts encrypted data in a single part.
FUNCTION C_Decrypt
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
# C_DecryptUpdate continues a multiple-part decryption operation.
FUNCTION C_DecryptUpdate
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
# C_DecryptFinal finishes a multiple-part decryption operation.
FUNCTION C_DecryptFinal
CK_SESSION_HANDLE hSession # the session's handle
CK_BYTE_PTR pLastPart # gets plaintext
CK_ULONG_PTR pulLastPartLen # p-text size
# Message digesting
# C_DigestInit initializes a message-digesting operation.
FUNCTION C_DigestInit
CK_SESSION_HANDLE hSession # the session's handle
CK_MECHANISM_PTR pMechanism # the digesting mechanism
# C_Digest digests data in a single part.
FUNCTION C_Digest
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
# C_DigestUpdate continues a multiple-part message-digesting operation.
FUNCTION C_DigestUpdate
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
# C_DigestKey continues a multi-part message-digesting operation, by
# digesting the value of a secret key as part of the data already
# digested.
FUNCTION C_DigestKey
CK_SESSION_HANDLE hSession # the session's handle
CK_OBJECT_HANDLE hKey # secret key to digest
# C_DigestFinal finishes a multiple-part message-digesting operation.
FUNCTION C_DigestFinal
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
# 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.
FUNCTION C_SignInit
CK_SESSION_HANDLE hSession # the session's handle
CK_MECHANISM_PTR pMechanism # the signature mechanism
CK_OBJECT_HANDLE hKey # handle of signature key
# 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.
FUNCTION C_Sign
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
# 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.
FUNCTION C_SignUpdate
CK_SESSION_HANDLE hSession # the session's handle
CK_BYTE_PTR pPart # the data to sign
CK_ULONG ulPartLen # count of bytes to sign
# C_SignFinal finishes a multiple-part signature operation, returning
# the signature.
FUNCTION C_SignFinal
CK_SESSION_HANDLE hSession # the session's handle
CK_BYTE_PTR pSignature # gets the signature
CK_ULONG_PTR pulSignatureLen # gets signature length
# C_SignRecoverInit initializes a signature operation, where the data
# can be recovered from the signature.
FUNCTION C_SignRecoverInit
CK_SESSION_HANDLE hSession # the session's handle
CK_MECHANISM_PTR pMechanism # the signature mechanism
CK_OBJECT_HANDLE hKey # handle of the signature key
# C_SignRecover signs data in a single operation, where the data can
# be recovered from the signature.
FUNCTION C_SignRecover
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
# 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).
FUNCTION C_VerifyInit
CK_SESSION_HANDLE hSession # the session's handle
CK_MECHANISM_PTR pMechanism # the verification mechanism
CK_OBJECT_HANDLE hKey # verification key
# 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.
FUNCTION C_Verify
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
# 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.
FUNCTION C_VerifyUpdate
CK_SESSION_HANDLE hSession # the session's handle
CK_BYTE_PTR pPart # signed data
CK_ULONG ulPartLen # length of signed data
# C_VerifyFinal finishes a multiple-part verification operation,
# checking the signature.
FUNCTION C_VerifyFinal
CK_SESSION_HANDLE hSession # the session's handle
CK_BYTE_PTR pSignature # signature to verify
CK_ULONG ulSignatureLen # signature length
# C_VerifyRecoverInit initializes a signature verification operation,
# where the data is recovered from the signature.
FUNCTION C_VerifyRecoverInit
CK_SESSION_HANDLE hSession # the session's handle
CK_MECHANISM_PTR pMechanism # the verification mechanism
CK_OBJECT_HANDLE hKey # verification key
# C_VerifyRecover verifies a signature in a single-part operation,
# where the data is recovered from the signature.
FUNCTION C_VerifyRecover
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
# Dual-function cryptographic operations
# C_DigestEncryptUpdate continues a multiple-part digesting and
# encryption operation.
FUNCTION C_DigestEncryptUpdate
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
# C_DecryptDigestUpdate continues a multiple-part decryption and
# digesting operation.
FUNCTION C_DecryptDigestUpdate
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
# C_SignEncryptUpdate continues a multiple-part signing and
# encryption operation.
FUNCTION C_SignEncryptUpdate
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
# C_DecryptVerifyUpdate continues a multiple-part decryption and
# verify operation.
FUNCTION C_DecryptVerifyUpdate
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
# Key management
# C_GenerateKey generates a secret key, creating a new key object.
FUNCTION C_GenerateKey
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
# C_GenerateKeyPair generates a public-key/private-key pair, creating
# new key objects.
FUNCTION C_GenerateKeyPair
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
# C_WrapKey wraps (i.e., encrypts) a key.
FUNCTION C_WrapKey
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
# C_UnwrapKey unwraps (decrypts) a wrapped key, creating a new key
# object.
FUNCTION C_UnwrapKey
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
# C_DeriveKey derives a key from a base key, creating a new key object.
FUNCTION C_DeriveKey
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
# Random number generation
# C_SeedRandom mixes additional seed material into the token's random
# number generator.
FUNCTION C_SeedRandom
CK_SESSION_HANDLE hSession # the session's handle
CK_BYTE_PTR pSeed # the seed material
CK_ULONG ulSeedLen # length of seed material
# C_GenerateRandom generates random data.
FUNCTION C_GenerateRandom
CK_SESSION_HANDLE hSession # the session's handle
CK_BYTE_PTR RandomData # receives the random data
CK_ULONG ulRandomLen # # of bytes to generate
# Parallel function management
# C_GetFunctionStatus is a legacy function; it obtains an updated
# status of a function running in parallel with an application.
FUNCTION C_GetFunctionStatus
CK_SESSION_HANDLE hSession # the session's handle
# C_CancelFunction is a legacy function; it cancels a function running
# in parallel.
FUNCTION C_CancelFunction
CK_SESSION_HANDLE hSession # the session's handle
# Functions added in for Cryptoki Version 2.01 or later
# C_WaitForSlotEvent waits for a slot event (token insertion, removal,
# etc.) to occur.
FUNCTION C_WaitForSlotEvent
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
## C_ConfigureSlot passes an installation-specified bytestring to a
## slot.
#FUNCTION C_ConfigureSlot
#CK_SLOT_ID slotID # the slot to configure
#CK_BYTE_PTR pConfig # the configuration string
#CK_ULONG ulConfigLen # length of the config string