pam_pkcs11 0.6.8

- Main Page
- Data Structures
- Files
- Directories

- File List
- Globals

pkcs11f.h
Go to the documentation of this file.

    00001 /* pkcs11f.h include file for PKCS #11. */
    00002 /* $Revision: 1.4 $ */
    00003
    00004 /* License to copy and use this software is granted provided that it is
    00005  * identified as "RSA Security Inc. PKCS #11 Cryptographic Token Interface
    00006  * (Cryptoki)" in all material mentioning or referencing this software.
    00007
    00008  * License is also granted to make and use derivative works provided that
    00009  * such works are identified as "derived from the RSA Security Inc. PKCS #11
    00010  * Cryptographic Token Interface (Cryptoki)" in all material mentioning or
    00011  * referencing the derived work.
    00012
    00013  * RSA Security Inc. makes no representations concerning either the
    00014  * merchantability of this software or the suitability of this software for
    00015  * any particular purpose. It is provided "as is" without express or implied
    00016  * warranty of any kind.
    00017  */
    00018
    00019 /* This header file contains pretty much everything about all the */
    00020 /* Cryptoki function prototypes.  Because this information is */
    00021 /* used for more than just declaring function prototypes, the */
    00022 /* order of the functions appearing herein is important, and */
    00023 /* should not be altered. */
    00024
    00025 /* General-purpose */
    00026
    00027 /* C_Initialize initializes the Cryptoki library. */
    00028 CK_PKCS11_FUNCTION_INFO(C_Initialize)
    00029 #ifdef CK_NEED_ARG_LIST
    00030     (CK_VOID_PTR pInitArgs      /* if this is not NULL_PTR, it gets
    00031                                  * cast to CK_C_INITIALIZE_ARGS_PTR
    00032                                  * and dereferenced */
    00033     );
    00034 #endif
    00035
    00036
    00037 /* C_Finalize indicates that an application is done with the
    00038  * Cryptoki library. */
    00039 CK_PKCS11_FUNCTION_INFO(C_Finalize)
    00040 #ifdef CK_NEED_ARG_LIST
    00041     (CK_VOID_PTR pReserved      /* reserved.  Should be NULL_PTR */
    00042     );
    00043 #endif
    00044
    00045
    00046 /* C_GetInfo returns general information about Cryptoki. */
    00047 CK_PKCS11_FUNCTION_INFO(C_GetInfo)
    00048 #ifdef CK_NEED_ARG_LIST
    00049     (CK_INFO_PTR pInfo          /* location that receives information */
    00050     );
    00051 #endif
    00052
    00053
    00054 /* C_GetFunctionList returns the function list. */
    00055 CK_PKCS11_FUNCTION_INFO(C_GetFunctionList)
    00056 #ifdef CK_NEED_ARG_LIST
    00057     (CK_FUNCTION_LIST_PTR_PTR ppFunctionList    /* receives pointer to
    00058                                                  * function list */
    00059     );
    00060 #endif
    00061
    00062
    00063
    00064 /* Slot and token management */
    00065
    00066 /* C_GetSlotList obtains a list of slots in the system. */
    00067 CK_PKCS11_FUNCTION_INFO(C_GetSlotList)
    00068 #ifdef CK_NEED_ARG_LIST
    00069     (CK_BBOOL tokenPresent,     /* only slots with tokens? */
    00070      CK_SLOT_ID_PTR pSlotList,  /* receives array of slot IDs */
    00071      CK_ULONG_PTR pulCount      /* receives number of slots */
    00072     );
    00073 #endif
    00074
    00075
    00076 /* C_GetSlotInfo obtains information about a particular slot in
    00077  * the system. */
    00078 CK_PKCS11_FUNCTION_INFO(C_GetSlotInfo)
    00079 #ifdef CK_NEED_ARG_LIST
    00080     (CK_SLOT_ID slotID,         /* the ID of the slot */
    00081      CK_SLOT_INFO_PTR pInfo     /* receives the slot information */
    00082     );
    00083 #endif
    00084
    00085
    00086 /* C_GetTokenInfo obtains information about a particular token
    00087  * in the system. */
    00088 CK_PKCS11_FUNCTION_INFO(C_GetTokenInfo)
    00089 #ifdef CK_NEED_ARG_LIST
    00090     (CK_SLOT_ID slotID,         /* ID of the token's slot */
    00091      CK_TOKEN_INFO_PTR pInfo    /* receives the token information */
    00092     );
    00093 #endif
    00094
    00095
    00096 /* C_GetMechanismList obtains a list of mechanism types
    00097  * supported by a token. */
    00098 CK_PKCS11_FUNCTION_INFO(C_GetMechanismList)
    00099 #ifdef CK_NEED_ARG_LIST
    00100     (CK_SLOT_ID slotID,         /* ID of token's slot */
    00101      CK_MECHANISM_TYPE_PTR pMechanismList,      /* gets mech. array */
    00102      CK_ULONG_PTR pulCount      /* gets # of mechs. */
    00103     );
    00104 #endif
    00105
    00106
    00107 /* C_GetMechanismInfo obtains information about a particular
    00108  * mechanism possibly supported by a token. */
    00109 CK_PKCS11_FUNCTION_INFO(C_GetMechanismInfo)
    00110 #ifdef CK_NEED_ARG_LIST
    00111     (CK_SLOT_ID slotID,         /* ID of the token's slot */
    00112      CK_MECHANISM_TYPE type,    /* type of mechanism */
    00113      CK_MECHANISM_INFO_PTR pInfo        /* receives mechanism info */
    00114     );
    00115 #endif
    00116
    00117
    00118 /* C_InitToken initializes a token. */
    00119 CK_PKCS11_FUNCTION_INFO(C_InitToken)
    00120 #ifdef CK_NEED_ARG_LIST
    00121 /* pLabel changed from CK_CHAR_PTR to CK_UTF8CHAR_PTR for v2.10 */
    00122     (CK_SLOT_ID slotID,         /* ID of the token's slot */
    00123      CK_UTF8CHAR_PTR pPin,      /* the SO's initial PIN */
    00124      CK_ULONG ulPinLen,         /* length in bytes of the PIN */
    00125      CK_UTF8CHAR_PTR pLabel     /* 32-byte token label (blank padded) */
    00126     );
    00127 #endif
    00128
    00129
    00130 /* C_InitPIN initializes the normal user's PIN. */
    00131 CK_PKCS11_FUNCTION_INFO(C_InitPIN)
    00132 #ifdef CK_NEED_ARG_LIST
    00133     (CK_SESSION_HANDLE hSession,        /* the session's handle */
    00134      CK_UTF8CHAR_PTR pPin,      /* the normal user's PIN */
    00135      CK_ULONG ulPinLen          /* length in bytes of the PIN */
    00136     );
    00137 #endif
    00138
    00139
    00140 /* C_SetPIN modifies the PIN of the user who is logged in. */
    00141 CK_PKCS11_FUNCTION_INFO(C_SetPIN)
    00142 #ifdef CK_NEED_ARG_LIST
    00143     (CK_SESSION_HANDLE hSession,        /* the session's handle */
    00144      CK_UTF8CHAR_PTR pOldPin,   /* the old PIN */
    00145      CK_ULONG ulOldLen,         /* length of the old PIN */
    00146      CK_UTF8CHAR_PTR pNewPin,   /* the new PIN */
    00147      CK_ULONG ulNewLen          /* length of the new PIN */
    00148     );
    00149 #endif
    00150
    00151
    00152
    00153 /* Session management */
    00154
    00155 /* C_OpenSession opens a session between an application and a
    00156  * token. */
    00157 CK_PKCS11_FUNCTION_INFO(C_OpenSession)
    00158 #ifdef CK_NEED_ARG_LIST
    00159     (CK_SLOT_ID slotID,         /* the slot's ID */
    00160      CK_FLAGS flags,            /* from CK_SESSION_INFO */
    00161      CK_VOID_PTR pApplication,  /* passed to callback */
    00162      CK_NOTIFY Notify,          /* callback function */
    00163      CK_SESSION_HANDLE_PTR phSession    /* gets session handle */
    00164     );
    00165 #endif
    00166
    00167
    00168 /* C_CloseSession closes a session between an application and a
    00169  * token. */
    00170 CK_PKCS11_FUNCTION_INFO(C_CloseSession)
    00171 #ifdef CK_NEED_ARG_LIST
    00172     (CK_SESSION_HANDLE hSession /* the session's handle */
    00173     );
    00174 #endif
    00175
    00176
    00177 /* C_CloseAllSessions closes all sessions with a token. */
    00178 CK_PKCS11_FUNCTION_INFO(C_CloseAllSessions)
    00179 #ifdef CK_NEED_ARG_LIST
    00180     (CK_SLOT_ID slotID          /* the token's slot */
    00181     );
    00182 #endif
    00183
    00184
    00185 /* C_GetSessionInfo obtains information about the session. */
    00186 CK_PKCS11_FUNCTION_INFO(C_GetSessionInfo)
    00187 #ifdef CK_NEED_ARG_LIST
    00188     (CK_SESSION_HANDLE hSession,        /* the session's handle */
    00189      CK_SESSION_INFO_PTR pInfo  /* receives session info */
    00190     );
    00191 #endif
    00192
    00193
    00194 /* C_GetOperationState obtains the state of the cryptographic operation
    00195  * in a session. */
    00196 CK_PKCS11_FUNCTION_INFO(C_GetOperationState)
    00197 #ifdef CK_NEED_ARG_LIST
    00198     (CK_SESSION_HANDLE hSession,        /* session's handle */
    00199      CK_BYTE_PTR pOperationState,       /* gets state */
    00200      CK_ULONG_PTR pulOperationStateLen  /* gets state length */
    00201     );
    00202 #endif
    00203
    00204
    00205 /* C_SetOperationState restores the state of the cryptographic
    00206  * operation in a session. */
    00207 CK_PKCS11_FUNCTION_INFO(C_SetOperationState)
    00208 #ifdef CK_NEED_ARG_LIST
    00209     (CK_SESSION_HANDLE hSession,        /* session's handle */
    00210      CK_BYTE_PTR pOperationState,       /* holds state */
    00211      CK_ULONG ulOperationStateLen,      /* holds state length */
    00212      CK_OBJECT_HANDLE hEncryptionKey,   /* en/decryption key */
    00213      CK_OBJECT_HANDLE hAuthenticationKey        /* sign/verify key */
    00214     );
    00215 #endif
    00216
    00217
    00218 /* C_Login logs a user into a token. */
    00219 CK_PKCS11_FUNCTION_INFO(C_Login)
    00220 #ifdef CK_NEED_ARG_LIST
    00221     (CK_SESSION_HANDLE hSession,        /* the session's handle */
    00222      CK_USER_TYPE userType,     /* the user type */
    00223      CK_UTF8CHAR_PTR pPin,      /* the user's PIN */
    00224      CK_ULONG ulPinLen          /* the length of the PIN */
    00225     );
    00226 #endif
    00227
    00228
    00229 /* C_Logout logs a user out from a token. */
    00230 CK_PKCS11_FUNCTION_INFO(C_Logout)
    00231 #ifdef CK_NEED_ARG_LIST
    00232     (CK_SESSION_HANDLE hSession /* the session's handle */
    00233     );
    00234 #endif
    00235
    00236
    00237
    00238 /* Object management */
    00239
    00240 /* C_CreateObject creates a new object. */
    00241 CK_PKCS11_FUNCTION_INFO(C_CreateObject)
    00242 #ifdef CK_NEED_ARG_LIST
    00243     (CK_SESSION_HANDLE hSession,        /* the session's handle */
    00244      CK_ATTRIBUTE_PTR pTemplate,        /* the object's template */
    00245      CK_ULONG ulCount,          /* attributes in template */
    00246      CK_OBJECT_HANDLE_PTR phObject      /* gets new object's handle. */
    00247     );
    00248 #endif
    00249
    00250
    00251 /* C_CopyObject copies an object, creating a new object for the
    00252  * copy. */
    00253 CK_PKCS11_FUNCTION_INFO(C_CopyObject)
    00254 #ifdef CK_NEED_ARG_LIST
    00255     (CK_SESSION_HANDLE hSession,        /* the session's handle */
    00256      CK_OBJECT_HANDLE hObject,  /* the object's handle */
    00257      CK_ATTRIBUTE_PTR pTemplate,        /* template for new object */
    00258      CK_ULONG ulCount,          /* attributes in template */
    00259      CK_OBJECT_HANDLE_PTR phNewObject   /* receives handle of copy */
    00260     );
    00261 #endif
    00262
    00263
    00264 /* C_DestroyObject destroys an object. */
    00265 CK_PKCS11_FUNCTION_INFO(C_DestroyObject)
    00266 #ifdef CK_NEED_ARG_LIST
    00267     (CK_SESSION_HANDLE hSession,        /* the session's handle */
    00268      CK_OBJECT_HANDLE hObject   /* the object's handle */
    00269     );
    00270 #endif
    00271
    00272
    00273 /* C_GetObjectSize gets the size of an object in bytes. */
    00274 CK_PKCS11_FUNCTION_INFO(C_GetObjectSize)
    00275 #ifdef CK_NEED_ARG_LIST
    00276     (CK_SESSION_HANDLE hSession,        /* the session's handle */
    00277      CK_OBJECT_HANDLE hObject,  /* the object's handle */
    00278      CK_ULONG_PTR pulSize       /* receives size of object */
    00279     );
    00280 #endif
    00281
    00282
    00283 /* C_GetAttributeValue obtains the value of one or more object
    00284  * attributes. */
    00285 CK_PKCS11_FUNCTION_INFO(C_GetAttributeValue)
    00286 #ifdef CK_NEED_ARG_LIST
    00287     (CK_SESSION_HANDLE hSession,        /* the session's handle */
    00288      CK_OBJECT_HANDLE hObject,  /* the object's handle */
    00289      CK_ATTRIBUTE_PTR pTemplate,        /* specifies attrs; gets vals */
    00290      CK_ULONG ulCount           /* attributes in template */
    00291     );
    00292 #endif
    00293
    00294
    00295 /* C_SetAttributeValue modifies the value of one or more object
    00296  * attributes */
    00297 CK_PKCS11_FUNCTION_INFO(C_SetAttributeValue)
    00298 #ifdef CK_NEED_ARG_LIST
    00299     (CK_SESSION_HANDLE hSession,        /* the session's handle */
    00300      CK_OBJECT_HANDLE hObject,  /* the object's handle */
    00301      CK_ATTRIBUTE_PTR pTemplate,        /* specifies attrs and values */
    00302      CK_ULONG ulCount           /* attributes in template */
    00303     );
    00304 #endif
    00305
    00306
    00307 /* C_FindObjectsInit initializes a search for token and session
    00308  * objects that match a template. */
    00309 CK_PKCS11_FUNCTION_INFO(C_FindObjectsInit)
    00310 #ifdef CK_NEED_ARG_LIST
    00311     (CK_SESSION_HANDLE hSession,        /* the session's handle */
    00312      CK_ATTRIBUTE_PTR pTemplate,        /* attribute values to match */
    00313      CK_ULONG ulCount           /* attrs in search template */
    00314     );
    00315 #endif
    00316
    00317
    00318 /* C_FindObjects continues a search for token and session
    00319  * objects that match a template, obtaining additional object
    00320  * handles. */
    00321 CK_PKCS11_FUNCTION_INFO(C_FindObjects)
    00322 #ifdef CK_NEED_ARG_LIST
    00323     (CK_SESSION_HANDLE hSession,        /* session's handle */
    00324      CK_OBJECT_HANDLE_PTR phObject,     /* gets obj. handles */
    00325      CK_ULONG ulMaxObjectCount, /* max handles to get */
    00326      CK_ULONG_PTR pulObjectCount        /* actual # returned */
    00327     );
    00328 #endif
    00329
    00330
    00331 /* C_FindObjectsFinal finishes a search for token and session
    00332  * objects. */
    00333 CK_PKCS11_FUNCTION_INFO(C_FindObjectsFinal)
    00334 #ifdef CK_NEED_ARG_LIST
    00335     (CK_SESSION_HANDLE hSession /* the session's handle */
    00336     );
    00337 #endif
    00338
    00339
    00340
    00341 /* Encryption and decryption */
    00342
    00343 /* C_EncryptInit initializes an encryption operation. */
    00344 CK_PKCS11_FUNCTION_INFO(C_EncryptInit)
    00345 #ifdef CK_NEED_ARG_LIST
    00346     (CK_SESSION_HANDLE hSession,        /* the session's handle */
    00347      CK_MECHANISM_PTR pMechanism,       /* the encryption mechanism */
    00348      CK_OBJECT_HANDLE hKey      /* handle of encryption key */
    00349     );
    00350 #endif
    00351
    00352
    00353 /* C_Encrypt encrypts single-part data. */
    00354 CK_PKCS11_FUNCTION_INFO(C_Encrypt)
    00355 #ifdef CK_NEED_ARG_LIST
    00356     (CK_SESSION_HANDLE hSession,        /* session's handle */
    00357      CK_BYTE_PTR pData,         /* the plaintext data */
    00358      CK_ULONG ulDataLen,        /* bytes of plaintext */
    00359      CK_BYTE_PTR pEncryptedData,        /* gets ciphertext */
    00360      CK_ULONG_PTR pulEncryptedDataLen   /* gets c-text size */
    00361     );
    00362 #endif
    00363
    00364
    00365 /* C_EncryptUpdate continues a multiple-part encryption
    00366  * operation. */
    00367 CK_PKCS11_FUNCTION_INFO(C_EncryptUpdate)
    00368 #ifdef CK_NEED_ARG_LIST
    00369     (CK_SESSION_HANDLE hSession,        /* session's handle */
    00370      CK_BYTE_PTR pPart,         /* the plaintext data */
    00371      CK_ULONG ulPartLen,        /* plaintext data len */
    00372      CK_BYTE_PTR pEncryptedPart,        /* gets ciphertext */
    00373      CK_ULONG_PTR pulEncryptedPartLen   /* gets c-text size */
    00374     );
    00375 #endif
    00376
    00377
    00378 /* C_EncryptFinal finishes a multiple-part encryption
    00379  * operation. */
    00380 CK_PKCS11_FUNCTION_INFO(C_EncryptFinal)
    00381 #ifdef CK_NEED_ARG_LIST
    00382     (CK_SESSION_HANDLE hSession,        /* session handle */
    00383      CK_BYTE_PTR pLastEncryptedPart,    /* last c-text */
    00384      CK_ULONG_PTR pulLastEncryptedPartLen       /* gets last size */
    00385     );
    00386 #endif
    00387
    00388
    00389 /* C_DecryptInit initializes a decryption operation. */
    00390 CK_PKCS11_FUNCTION_INFO(C_DecryptInit)
    00391 #ifdef CK_NEED_ARG_LIST
    00392     (CK_SESSION_HANDLE hSession,        /* the session's handle */
    00393      CK_MECHANISM_PTR pMechanism,       /* the decryption mechanism */
    00394      CK_OBJECT_HANDLE hKey      /* handle of decryption key */
    00395     );
    00396 #endif
    00397
    00398
    00399 /* C_Decrypt decrypts encrypted data in a single part. */
    00400 CK_PKCS11_FUNCTION_INFO(C_Decrypt)
    00401 #ifdef CK_NEED_ARG_LIST
    00402     (CK_SESSION_HANDLE hSession,        /* session's handle */
    00403      CK_BYTE_PTR pEncryptedData,        /* ciphertext */
    00404      CK_ULONG ulEncryptedDataLen,       /* ciphertext length */
    00405      CK_BYTE_PTR pData,         /* gets plaintext */
    00406      CK_ULONG_PTR pulDataLen    /* gets p-text size */
    00407     );
    00408 #endif
    00409
    00410
    00411 /* C_DecryptUpdate continues a multiple-part decryption
    00412  * operation. */
    00413 CK_PKCS11_FUNCTION_INFO(C_DecryptUpdate)
    00414 #ifdef CK_NEED_ARG_LIST
    00415     (CK_SESSION_HANDLE hSession,        /* session's handle */
    00416      CK_BYTE_PTR pEncryptedPart,        /* encrypted data */
    00417      CK_ULONG ulEncryptedPartLen,       /* input length */
    00418      CK_BYTE_PTR pPart,         /* gets plaintext */
    00419      CK_ULONG_PTR pulPartLen    /* p-text size */
    00420     );
    00421 #endif
    00422
    00423
    00424 /* C_DecryptFinal finishes a multiple-part decryption
    00425  * operation. */
    00426 CK_PKCS11_FUNCTION_INFO(C_DecryptFinal)
    00427 #ifdef CK_NEED_ARG_LIST
    00428     (CK_SESSION_HANDLE hSession,        /* the session's handle */
    00429      CK_BYTE_PTR pLastPart,     /* gets plaintext */
    00430      CK_ULONG_PTR pulLastPartLen        /* p-text size */
    00431     );
    00432 #endif
    00433
    00434
    00435
    00436 /* Message digesting */
    00437
    00438 /* C_DigestInit initializes a message-digesting operation. */
    00439 CK_PKCS11_FUNCTION_INFO(C_DigestInit)
    00440 #ifdef CK_NEED_ARG_LIST
    00441     (CK_SESSION_HANDLE hSession,        /* the session's handle */
    00442      CK_MECHANISM_PTR pMechanism        /* the digesting mechanism */
    00443     );
    00444 #endif
    00445
    00446
    00447 /* C_Digest digests data in a single part. */
    00448 CK_PKCS11_FUNCTION_INFO(C_Digest)
    00449 #ifdef CK_NEED_ARG_LIST
    00450     (CK_SESSION_HANDLE hSession,        /* the session's handle */
    00451      CK_BYTE_PTR pData,         /* data to be digested */
    00452      CK_ULONG ulDataLen,        /* bytes of data to digest */
    00453      CK_BYTE_PTR pDigest,       /* gets the message digest */
    00454      CK_ULONG_PTR pulDigestLen  /* gets digest length */
    00455     );
    00456 #endif
    00457
    00458
    00459 /* C_DigestUpdate continues a multiple-part message-digesting
    00460  * operation. */
    00461 CK_PKCS11_FUNCTION_INFO(C_DigestUpdate)
    00462 #ifdef CK_NEED_ARG_LIST
    00463     (CK_SESSION_HANDLE hSession,        /* the session's handle */
    00464      CK_BYTE_PTR pPart,         /* data to be digested */
    00465      CK_ULONG ulPartLen         /* bytes of data to be digested */
    00466     );
    00467 #endif
    00468
    00469
    00470 /* C_DigestKey continues a multi-part message-digesting
    00471  * operation, by digesting the value of a secret key as part of
    00472  * the data already digested. */
    00473 CK_PKCS11_FUNCTION_INFO(C_DigestKey)
    00474 #ifdef CK_NEED_ARG_LIST
    00475     (CK_SESSION_HANDLE hSession,        /* the session's handle */
    00476      CK_OBJECT_HANDLE hKey      /* secret key to digest */
    00477     );
    00478 #endif
    00479
    00480
    00481 /* C_DigestFinal finishes a multiple-part message-digesting
    00482  * operation. */
    00483 CK_PKCS11_FUNCTION_INFO(C_DigestFinal)
    00484 #ifdef CK_NEED_ARG_LIST
    00485     (CK_SESSION_HANDLE hSession,        /* the session's handle */
    00486      CK_BYTE_PTR pDigest,       /* gets the message digest */
    00487      CK_ULONG_PTR pulDigestLen  /* gets byte count of digest */
    00488     );
    00489 #endif
    00490
    00491
    00492
    00493 /* Signing and MACing */
    00494
    00495 /* C_SignInit initializes a signature (private key encryption)
    00496  * operation, where the signature is (will be) an appendix to
    00497  * the data, and plaintext cannot be recovered from the
    00498  *signature. */
    00499 CK_PKCS11_FUNCTION_INFO(C_SignInit)
    00500 #ifdef CK_NEED_ARG_LIST
    00501     (CK_SESSION_HANDLE hSession,        /* the session's handle */
    00502      CK_MECHANISM_PTR pMechanism,       /* the signature mechanism */
    00503      CK_OBJECT_HANDLE hKey      /* handle of signature key */
    00504     );
    00505 #endif
    00506
    00507
    00508 /* C_Sign signs (encrypts with private key) data in a single
    00509  * part, where the signature is (will be) an appendix to the
    00510  * data, and plaintext cannot be recovered from the signature. */
    00511 CK_PKCS11_FUNCTION_INFO(C_Sign)
    00512 #ifdef CK_NEED_ARG_LIST
    00513     (CK_SESSION_HANDLE hSession,        /* the session's handle */
    00514      CK_BYTE_PTR pData,         /* the data to sign */
    00515      CK_ULONG ulDataLen,        /* count of bytes to sign */
    00516      CK_BYTE_PTR pSignature,    /* gets the signature */
    00517      CK_ULONG_PTR pulSignatureLen       /* gets signature length */
    00518     );
    00519 #endif
    00520
    00521
    00522 /* C_SignUpdate continues a multiple-part signature operation,
    00523  * where the signature is (will be) an appendix to the data,
    00524  * and plaintext cannot be recovered from the signature. */
    00525 CK_PKCS11_FUNCTION_INFO(C_SignUpdate)
    00526 #ifdef CK_NEED_ARG_LIST
    00527     (CK_SESSION_HANDLE hSession,        /* the session's handle */
    00528      CK_BYTE_PTR pPart,         /* the data to sign */
    00529      CK_ULONG ulPartLen         /* count of bytes to sign */
    00530     );
    00531 #endif
    00532
    00533
    00534 /* C_SignFinal finishes a multiple-part signature operation,
    00535  * returning the signature. */
    00536 CK_PKCS11_FUNCTION_INFO(C_SignFinal)
    00537 #ifdef CK_NEED_ARG_LIST
    00538     (CK_SESSION_HANDLE hSession,        /* the session's handle */
    00539      CK_BYTE_PTR pSignature,    /* gets the signature */
    00540      CK_ULONG_PTR pulSignatureLen       /* gets signature length */
    00541     );
    00542 #endif
    00543
    00544
    00545 /* C_SignRecoverInit initializes a signature operation, where
    00546  * the data can be recovered from the signature. */
    00547 CK_PKCS11_FUNCTION_INFO(C_SignRecoverInit)
    00548 #ifdef CK_NEED_ARG_LIST
    00549     (CK_SESSION_HANDLE hSession,        /* the session's handle */
    00550      CK_MECHANISM_PTR pMechanism,       /* the signature mechanism */
    00551      CK_OBJECT_HANDLE hKey      /* handle of the signature key */
    00552     );
    00553 #endif
    00554
    00555
    00556 /* C_SignRecover signs data in a single operation, where the
    00557  * data can be recovered from the signature. */
    00558 CK_PKCS11_FUNCTION_INFO(C_SignRecover)
    00559 #ifdef CK_NEED_ARG_LIST
    00560     (CK_SESSION_HANDLE hSession,        /* the session's handle */
    00561      CK_BYTE_PTR pData,         /* the data to sign */
    00562      CK_ULONG ulDataLen,        /* count of bytes to sign */
    00563      CK_BYTE_PTR pSignature,    /* gets the signature */
    00564      CK_ULONG_PTR pulSignatureLen       /* gets signature length */
    00565     );
    00566 #endif
    00567
    00568
    00569
    00570 /* Verifying signatures and MACs */
    00571
    00572 /* C_VerifyInit initializes a verification operation, where the
    00573  * signature is an appendix to the data, and plaintext cannot
    00574  *  cannot be recovered from the signature (e.g. DSA). */
    00575 CK_PKCS11_FUNCTION_INFO(C_VerifyInit)
    00576 #ifdef CK_NEED_ARG_LIST
    00577     (CK_SESSION_HANDLE hSession,        /* the session's handle */
    00578      CK_MECHANISM_PTR pMechanism,       /* the verification mechanism */
    00579      CK_OBJECT_HANDLE hKey      /* verification key */
    00580     );
    00581 #endif
    00582
    00583
    00584 /* C_Verify verifies a signature in a single-part operation,
    00585  * where the signature is an appendix to the data, and plaintext
    00586  * cannot be recovered from the signature. */
    00587 CK_PKCS11_FUNCTION_INFO(C_Verify)
    00588 #ifdef CK_NEED_ARG_LIST
    00589     (CK_SESSION_HANDLE hSession,        /* the session's handle */
    00590      CK_BYTE_PTR pData,         /* signed data */
    00591      CK_ULONG ulDataLen,        /* length of signed data */
    00592      CK_BYTE_PTR pSignature,    /* signature */
    00593      CK_ULONG ulSignatureLen    /* signature length */
    00594     );
    00595 #endif
    00596
    00597
    00598 /* C_VerifyUpdate continues a multiple-part verification
    00599  * operation, where the signature is an appendix to the data,
    00600  * and plaintext cannot be recovered from the signature. */
    00601 CK_PKCS11_FUNCTION_INFO(C_VerifyUpdate)
    00602 #ifdef CK_NEED_ARG_LIST
    00603     (CK_SESSION_HANDLE hSession,        /* the session's handle */
    00604      CK_BYTE_PTR pPart,         /* signed data */
    00605      CK_ULONG ulPartLen         /* length of signed data */
    00606     );
    00607 #endif
    00608
    00609
    00610 /* C_VerifyFinal finishes a multiple-part verification
    00611  * operation, checking the signature. */
    00612 CK_PKCS11_FUNCTION_INFO(C_VerifyFinal)
    00613 #ifdef CK_NEED_ARG_LIST
    00614     (CK_SESSION_HANDLE hSession,        /* the session's handle */
    00615      CK_BYTE_PTR pSignature,    /* signature to verify */
    00616      CK_ULONG ulSignatureLen    /* signature length */
    00617     );
    00618 #endif
    00619
    00620
    00621 /* C_VerifyRecoverInit initializes a signature verification
    00622  * operation, where the data is recovered from the signature. */
    00623 CK_PKCS11_FUNCTION_INFO(C_VerifyRecoverInit)
    00624 #ifdef CK_NEED_ARG_LIST
    00625     (CK_SESSION_HANDLE hSession,        /* the session's handle */
    00626      CK_MECHANISM_PTR pMechanism,       /* the verification mechanism */
    00627      CK_OBJECT_HANDLE hKey      /* verification key */
    00628     );
    00629 #endif
    00630
    00631
    00632 /* C_VerifyRecover verifies a signature in a single-part
    00633  * operation, where the data is recovered from the signature. */
    00634 CK_PKCS11_FUNCTION_INFO(C_VerifyRecover)
    00635 #ifdef CK_NEED_ARG_LIST
    00636     (CK_SESSION_HANDLE hSession,        /* the session's handle */
    00637      CK_BYTE_PTR pSignature,    /* signature to verify */
    00638      CK_ULONG ulSignatureLen,   /* signature length */
    00639      CK_BYTE_PTR pData,         /* gets signed data */
    00640      CK_ULONG_PTR pulDataLen    /* gets signed data len */
    00641     );
    00642 #endif
    00643
    00644
    00645
    00646 /* Dual-function cryptographic operations */
    00647
    00648 /* C_DigestEncryptUpdate continues a multiple-part digesting
    00649  * and encryption operation. */
    00650 CK_PKCS11_FUNCTION_INFO(C_DigestEncryptUpdate)
    00651 #ifdef CK_NEED_ARG_LIST
    00652     (CK_SESSION_HANDLE hSession,        /* session's handle */
    00653      CK_BYTE_PTR pPart,         /* the plaintext data */
    00654      CK_ULONG ulPartLen,        /* plaintext length */
    00655      CK_BYTE_PTR pEncryptedPart,        /* gets ciphertext */
    00656      CK_ULONG_PTR pulEncryptedPartLen   /* gets c-text length */
    00657     );
    00658 #endif
    00659
    00660
    00661 /* C_DecryptDigestUpdate continues a multiple-part decryption and
    00662  * digesting operation. */
    00663 CK_PKCS11_FUNCTION_INFO(C_DecryptDigestUpdate)
    00664 #ifdef CK_NEED_ARG_LIST
    00665     (CK_SESSION_HANDLE hSession,        /* session's handle */
    00666      CK_BYTE_PTR pEncryptedPart,        /* ciphertext */
    00667      CK_ULONG ulEncryptedPartLen,       /* ciphertext length */
    00668      CK_BYTE_PTR pPart,         /* gets plaintext */
    00669      CK_ULONG_PTR pulPartLen    /* gets plaintext len */
    00670     );
    00671 #endif
    00672
    00673
    00674 /* C_SignEncryptUpdate continues a multiple-part signing and
    00675  * encryption operation. */
    00676 CK_PKCS11_FUNCTION_INFO(C_SignEncryptUpdate)
    00677 #ifdef CK_NEED_ARG_LIST
    00678     (CK_SESSION_HANDLE hSession,        /* session's handle */
    00679      CK_BYTE_PTR pPart,         /* the plaintext data */
    00680      CK_ULONG ulPartLen,        /* plaintext length */
    00681      CK_BYTE_PTR pEncryptedPart,        /* gets ciphertext */
    00682      CK_ULONG_PTR pulEncryptedPartLen   /* gets c-text length */
    00683     );
    00684 #endif
    00685
    00686
    00687 /* C_DecryptVerifyUpdate continues a multiple-part decryption and
    00688  * verify operation. */
    00689 CK_PKCS11_FUNCTION_INFO(C_DecryptVerifyUpdate)
    00690 #ifdef CK_NEED_ARG_LIST
    00691     (CK_SESSION_HANDLE hSession,        /* session's handle */
    00692      CK_BYTE_PTR pEncryptedPart,        /* ciphertext */
    00693      CK_ULONG ulEncryptedPartLen,       /* ciphertext length */
    00694      CK_BYTE_PTR pPart,         /* gets plaintext */
    00695      CK_ULONG_PTR pulPartLen    /* gets p-text length */
    00696     );
    00697 #endif
    00698
    00699
    00700
    00701 /* Key management */
    00702
    00703 /* C_GenerateKey generates a secret key, creating a new key
    00704  * object. */
    00705 CK_PKCS11_FUNCTION_INFO(C_GenerateKey)
    00706 #ifdef CK_NEED_ARG_LIST
    00707     (CK_SESSION_HANDLE hSession,        /* the session's handle */
    00708      CK_MECHANISM_PTR pMechanism,       /* key generation mech. */
    00709      CK_ATTRIBUTE_PTR pTemplate,        /* template for new key */
    00710      CK_ULONG ulCount,          /* # of attrs in template */
    00711      CK_OBJECT_HANDLE_PTR phKey /* gets handle of new key */
    00712     );
    00713 #endif
    00714
    00715
    00716 /* C_GenerateKeyPair generates a public-key/private-key pair,
    00717  * creating new key objects. */
    00718 CK_PKCS11_FUNCTION_INFO(C_GenerateKeyPair)
    00719 #ifdef CK_NEED_ARG_LIST
    00720     (CK_SESSION_HANDLE hSession,        /* session
    00721                                          * handle */
    00722      CK_MECHANISM_PTR pMechanism,       /* key-gen
    00723                                          * mech. */
    00724      CK_ATTRIBUTE_PTR pPublicKeyTemplate,       /* template
    00725                                                  * for pub.
    00726                                                  * key */
    00727      CK_ULONG ulPublicKeyAttributeCount,        /* # pub.
    00728                                                  * attrs. */
    00729      CK_ATTRIBUTE_PTR pPrivateKeyTemplate,      /* template
    00730                                                  * for priv.
    00731                                                  * key */
    00732      CK_ULONG ulPrivateKeyAttributeCount,       /* # priv.
    00733                                                  * attrs. */
    00734      CK_OBJECT_HANDLE_PTR phPublicKey,  /* gets pub.
    00735                                          * key
    00736                                          * handle */
    00737      CK_OBJECT_HANDLE_PTR phPrivateKey  /* gets
    00738                                          * priv. key
    00739                                          * handle */
    00740     );
    00741 #endif
    00742
    00743
    00744 /* C_WrapKey wraps (i.e., encrypts) a key. */
    00745 CK_PKCS11_FUNCTION_INFO(C_WrapKey)
    00746 #ifdef CK_NEED_ARG_LIST
    00747     (CK_SESSION_HANDLE hSession,        /* the session's handle */
    00748      CK_MECHANISM_PTR pMechanism,       /* the wrapping mechanism */
    00749      CK_OBJECT_HANDLE hWrappingKey,     /* wrapping key */
    00750      CK_OBJECT_HANDLE hKey,     /* key to be wrapped */
    00751      CK_BYTE_PTR pWrappedKey,   /* gets wrapped key */
    00752      CK_ULONG_PTR pulWrappedKeyLen      /* gets wrapped key size */
    00753     );
    00754 #endif
    00755
    00756
    00757 /* C_UnwrapKey unwraps (decrypts) a wrapped key, creating a new
    00758  * key object. */
    00759 CK_PKCS11_FUNCTION_INFO(C_UnwrapKey)
    00760 #ifdef CK_NEED_ARG_LIST
    00761     (CK_SESSION_HANDLE hSession,        /* session's handle */
    00762      CK_MECHANISM_PTR pMechanism,       /* unwrapping mech. */
    00763      CK_OBJECT_HANDLE hUnwrappingKey,   /* unwrapping key */
    00764      CK_BYTE_PTR pWrappedKey,   /* the wrapped key */
    00765      CK_ULONG ulWrappedKeyLen,  /* wrapped key len */
    00766      CK_ATTRIBUTE_PTR pTemplate,        /* new key template */
    00767      CK_ULONG ulAttributeCount, /* template length */
    00768      CK_OBJECT_HANDLE_PTR phKey /* gets new handle */
    00769     );
    00770 #endif
    00771
    00772
    00773 /* C_DeriveKey derives a key from a base key, creating a new key
    00774  * object. */
    00775 CK_PKCS11_FUNCTION_INFO(C_DeriveKey)
    00776 #ifdef CK_NEED_ARG_LIST
    00777     (CK_SESSION_HANDLE hSession,        /* session's handle */
    00778      CK_MECHANISM_PTR pMechanism,       /* key deriv. mech. */
    00779      CK_OBJECT_HANDLE hBaseKey, /* base key */
    00780      CK_ATTRIBUTE_PTR pTemplate,        /* new key template */
    00781      CK_ULONG ulAttributeCount, /* template length */
    00782      CK_OBJECT_HANDLE_PTR phKey /* gets new handle */
    00783     );
    00784 #endif
    00785
    00786
    00787
    00788 /* Random number generation */
    00789
    00790 /* C_SeedRandom mixes additional seed material into the token's
    00791  * random number generator. */
    00792 CK_PKCS11_FUNCTION_INFO(C_SeedRandom)
    00793 #ifdef CK_NEED_ARG_LIST
    00794     (CK_SESSION_HANDLE hSession,        /* the session's handle */
    00795      CK_BYTE_PTR pSeed,         /* the seed material */
    00796      CK_ULONG ulSeedLen         /* length of seed material */
    00797     );
    00798 #endif
    00799
    00800
    00801 /* C_GenerateRandom generates random data. */
    00802 CK_PKCS11_FUNCTION_INFO(C_GenerateRandom)
    00803 #ifdef CK_NEED_ARG_LIST
    00804     (CK_SESSION_HANDLE hSession,        /* the session's handle */
    00805      CK_BYTE_PTR RandomData,    /* receives the random data */
    00806      CK_ULONG ulRandomLen       /* # of bytes to generate */
    00807     );
    00808 #endif
    00809
    00810
    00811
    00812 /* Parallel function management */
    00813
    00814 /* C_GetFunctionStatus is a legacy function; it obtains an
    00815  * updated status of a function running in parallel with an
    00816  * application. */
    00817 CK_PKCS11_FUNCTION_INFO(C_GetFunctionStatus)
    00818 #ifdef CK_NEED_ARG_LIST
    00819     (CK_SESSION_HANDLE hSession /* the session's handle */
    00820     );
    00821 #endif
    00822
    00823
    00824 /* C_CancelFunction is a legacy function; it cancels a function
    00825  * running in parallel. */
    00826 CK_PKCS11_FUNCTION_INFO(C_CancelFunction)
    00827 #ifdef CK_NEED_ARG_LIST
    00828     (CK_SESSION_HANDLE hSession /* the session's handle */
    00829     );
    00830 #endif
    00831
    00832
    00833
    00834 /* Functions added in for Cryptoki Version 2.01 or later */
    00835
    00836 /* C_WaitForSlotEvent waits for a slot event (token insertion,
    00837  * removal, etc.) to occur. */
    00838 CK_PKCS11_FUNCTION_INFO(C_WaitForSlotEvent)
    00839 #ifdef CK_NEED_ARG_LIST
    00840     (CK_FLAGS flags,            /* blocking/nonblocking flag */
    00841      CK_SLOT_ID_PTR pSlot,      /* location that receives the slot ID */
    00842      CK_VOID_PTR pRserved       /* reserved.  Should be NULL_PTR */
    00843     );
    00844 #endif