tor-browser

The Tor Browser
git clone https://git.dasho.dev/tor-browser.git
Log | Files | Refs | README | LICENSE

pkcs11f.h (34719B)


      1 /* This Source Code Form is subject to the terms of the Mozilla Public
      2 * License, v. 2.0. If a copy of the MPL was not distributed with this
      3 * file, You can obtain one at http://mozilla.org/MPL/2.0/. */
      4 /*
      5 * Copyright (C) 1994-1999 RSA Security Inc. Licence to copy this document
      6 * is granted provided that it is identified as "RSA Security In.c Public-Key
      7 * Cryptography Standards (PKCS)" in all material mentioning or referencing
      8 * this document.
      9 */
     10 /* This function contains pretty much everything about all the */
     11 /* PKCS #11  function prototypes.  Because this information is */
     12 /* used for more than just declaring function prototypes, the */
     13 /* order of the functions appearing herein is important, and */
     14 /* should not be altered. */
     15 
     16 /* General-purpose */
     17 
     18 /* C_Initialize initializes the PKCS #11 library. */
     19 CK_PKCS11_FUNCTION_INFO(C_Initialize)
     20 #ifdef CK_NEED_ARG_LIST
     21 (
     22    CK_VOID_PTR pInitArgs /* if this is not NULL_PTR, it gets
     23                           * cast to CK_C_INITIALIZE_ARGS_PTR
     24                           * and dereferenced */
     25 );
     26 #endif
     27 
     28 /* C_Finalize indicates that an application is done with the
     29 * PKCS #11 library. */
     30 CK_PKCS11_FUNCTION_INFO(C_Finalize)
     31 #ifdef CK_NEED_ARG_LIST
     32 (
     33    CK_VOID_PTR pReserved /* reserved.  Should be NULL_PTR */
     34 );
     35 #endif
     36 
     37 /* C_GetInfo returns general information about PKCS #11. */
     38 CK_PKCS11_FUNCTION_INFO(C_GetInfo)
     39 #ifdef CK_NEED_ARG_LIST
     40 (
     41    CK_INFO_PTR pInfo /* location that receives information */
     42 );
     43 #endif
     44 
     45 /* C_GetFunctionList returns the function list. */
     46 CK_PKCS11_FUNCTION_INFO(C_GetFunctionList)
     47 #ifdef CK_NEED_ARG_LIST
     48 (
     49    CK_FUNCTION_LIST_PTR_PTR ppFunctionList /* receives pointer to
     50                                             * function list */
     51 );
     52 #endif
     53 
     54 /* Slot and token management */
     55 
     56 /* C_GetSlotList obtains a list of slots in the system. */
     57 CK_PKCS11_FUNCTION_INFO(C_GetSlotList)
     58 #ifdef CK_NEED_ARG_LIST
     59 (
     60    CK_BBOOL tokenPresent,    /* only slots with tokens? */
     61    CK_SLOT_ID_PTR pSlotList, /* receives array of slot IDs */
     62    CK_ULONG_PTR pulCount     /* receives number of slots */
     63 );
     64 #endif
     65 
     66 /* C_GetSlotInfo obtains information about a particular slot in
     67 * the system. */
     68 CK_PKCS11_FUNCTION_INFO(C_GetSlotInfo)
     69 #ifdef CK_NEED_ARG_LIST
     70 (
     71    CK_SLOT_ID slotID,     /* the ID of the slot */
     72    CK_SLOT_INFO_PTR pInfo /* receives the slot information */
     73 );
     74 #endif
     75 
     76 /* C_GetTokenInfo obtains information about a particular token
     77 * in the system. */
     78 CK_PKCS11_FUNCTION_INFO(C_GetTokenInfo)
     79 #ifdef CK_NEED_ARG_LIST
     80 (
     81    CK_SLOT_ID slotID,      /* ID of the token's slot */
     82    CK_TOKEN_INFO_PTR pInfo /* receives the token information */
     83 );
     84 #endif
     85 
     86 /* C_GetMechanismList obtains a list of mechanism types
     87 * supported by a token. */
     88 CK_PKCS11_FUNCTION_INFO(C_GetMechanismList)
     89 #ifdef CK_NEED_ARG_LIST
     90 (
     91    CK_SLOT_ID slotID,                    /* ID of token's slot */
     92    CK_MECHANISM_TYPE_PTR pMechanismList, /* gets mech. array */
     93    CK_ULONG_PTR pulCount                 /* gets # of mechs. */
     94 );
     95 #endif
     96 
     97 /* C_GetMechanismInfo obtains information about a particular
     98 * mechanism possibly supported by a token. */
     99 CK_PKCS11_FUNCTION_INFO(C_GetMechanismInfo)
    100 #ifdef CK_NEED_ARG_LIST
    101 (
    102    CK_SLOT_ID slotID,          /* ID of the token's slot */
    103    CK_MECHANISM_TYPE type,     /* type of mechanism */
    104    CK_MECHANISM_INFO_PTR pInfo /* receives mechanism info */
    105 );
    106 #endif
    107 
    108 /* C_InitToken initializes a token. */
    109 CK_PKCS11_FUNCTION_INFO(C_InitToken)
    110 #ifdef CK_NEED_ARG_LIST
    111 /* pLabel changed from CK_CHAR_PTR to CK_UTF8CHAR_PTR for v2.10 */
    112 (
    113    CK_SLOT_ID slotID,     /* ID of the token's slot */
    114    CK_UTF8CHAR_PTR pPin,  /* the SO's initial PIN */
    115    CK_ULONG ulPinLen,     /* length in bytes of the PIN */
    116    CK_UTF8CHAR_PTR pLabel /* 32-byte token label (blank padded) */
    117 );
    118 #endif
    119 
    120 /* C_InitPIN initializes the normal user's PIN. */
    121 CK_PKCS11_FUNCTION_INFO(C_InitPIN)
    122 #ifdef CK_NEED_ARG_LIST
    123 (
    124    CK_SESSION_HANDLE hSession, /* the session's handle */
    125    CK_UTF8CHAR_PTR pPin,       /* the normal user's PIN */
    126    CK_ULONG ulPinLen           /* length in bytes of the PIN */
    127 );
    128 #endif
    129 
    130 /* C_SetPIN modifies the PIN of the user who is logged in. */
    131 CK_PKCS11_FUNCTION_INFO(C_SetPIN)
    132 #ifdef CK_NEED_ARG_LIST
    133 (
    134    CK_SESSION_HANDLE hSession, /* the session's handle */
    135    CK_UTF8CHAR_PTR pOldPin,    /* the old PIN */
    136    CK_ULONG ulOldLen,          /* length of the old PIN */
    137    CK_UTF8CHAR_PTR pNewPin,    /* the new PIN */
    138    CK_ULONG ulNewLen           /* length of the new PIN */
    139 );
    140 #endif
    141 
    142 /* Session management */
    143 
    144 /* C_OpenSession opens a session between an application and a
    145 * token. */
    146 CK_PKCS11_FUNCTION_INFO(C_OpenSession)
    147 #ifdef CK_NEED_ARG_LIST
    148 (
    149    CK_SLOT_ID slotID,              /* the slot's ID */
    150    CK_FLAGS flags,                 /* from CK_SESSION_INFO */
    151    CK_VOID_PTR pApplication,       /* passed to callback */
    152    CK_NOTIFY Notify,               /* callback function */
    153    CK_SESSION_HANDLE_PTR phSession /* gets session handle */
    154 );
    155 #endif
    156 
    157 /* C_CloseSession closes a session between an application and a
    158 * token. */
    159 CK_PKCS11_FUNCTION_INFO(C_CloseSession)
    160 #ifdef CK_NEED_ARG_LIST
    161 (
    162    CK_SESSION_HANDLE hSession /* the session's handle */
    163 );
    164 #endif
    165 
    166 /* C_CloseAllSessions closes all sessions with a token. */
    167 CK_PKCS11_FUNCTION_INFO(C_CloseAllSessions)
    168 #ifdef CK_NEED_ARG_LIST
    169 (
    170    CK_SLOT_ID slotID /* the token's slot */
    171 );
    172 #endif
    173 
    174 /* C_GetSessionInfo obtains information about the session. */
    175 CK_PKCS11_FUNCTION_INFO(C_GetSessionInfo)
    176 #ifdef CK_NEED_ARG_LIST
    177 (
    178    CK_SESSION_HANDLE hSession, /* the session's handle */
    179    CK_SESSION_INFO_PTR pInfo   /* receives session info */
    180 );
    181 #endif
    182 
    183 /* C_GetOperationState obtains the state of the cryptographic operation
    184 * in a session. */
    185 CK_PKCS11_FUNCTION_INFO(C_GetOperationState)
    186 #ifdef CK_NEED_ARG_LIST
    187 (
    188    CK_SESSION_HANDLE hSession,       /* session's handle */
    189    CK_BYTE_PTR pOperationState,      /* gets state */
    190    CK_ULONG_PTR pulOperationStateLen /* gets state length */
    191 );
    192 #endif
    193 
    194 /* C_SetOperationState restores the state of the cryptographic
    195 * operation in a session. */
    196 CK_PKCS11_FUNCTION_INFO(C_SetOperationState)
    197 #ifdef CK_NEED_ARG_LIST
    198 (
    199    CK_SESSION_HANDLE hSession,         /* session's handle */
    200    CK_BYTE_PTR pOperationState,        /* holds state */
    201    CK_ULONG ulOperationStateLen,       /* holds state length */
    202    CK_OBJECT_HANDLE hEncryptionKey,    /* en/decryption key */
    203    CK_OBJECT_HANDLE hAuthenticationKey /* sign/verify key */
    204 );
    205 #endif
    206 
    207 /* C_Login logs a user into a token. */
    208 CK_PKCS11_FUNCTION_INFO(C_Login)
    209 #ifdef CK_NEED_ARG_LIST
    210 (
    211    CK_SESSION_HANDLE hSession, /* the session's handle */
    212    CK_USER_TYPE userType,      /* the user type */
    213    CK_UTF8CHAR_PTR pPin,       /* the user's PIN */
    214    CK_ULONG ulPinLen           /* the length of the PIN */
    215 );
    216 #endif
    217 
    218 /* C_Logout logs a user out from a token. */
    219 CK_PKCS11_FUNCTION_INFO(C_Logout)
    220 #ifdef CK_NEED_ARG_LIST
    221 (
    222    CK_SESSION_HANDLE hSession /* the session's handle */
    223 );
    224 #endif
    225 
    226 /* Object management */
    227 
    228 /* C_CreateObject creates a new object. */
    229 CK_PKCS11_FUNCTION_INFO(C_CreateObject)
    230 #ifdef CK_NEED_ARG_LIST
    231 (
    232    CK_SESSION_HANDLE hSession,   /* the session's handle */
    233    CK_ATTRIBUTE_PTR pTemplate,   /* the object's template */
    234    CK_ULONG ulCount,             /* attributes in template */
    235    CK_OBJECT_HANDLE_PTR phObject /* gets new object's handle. */
    236 );
    237 #endif
    238 
    239 /* C_CopyObject copies an object, creating a new object for the
    240 * copy. */
    241 CK_PKCS11_FUNCTION_INFO(C_CopyObject)
    242 #ifdef CK_NEED_ARG_LIST
    243 (
    244    CK_SESSION_HANDLE hSession,      /* the session's handle */
    245    CK_OBJECT_HANDLE hObject,        /* the object's handle */
    246    CK_ATTRIBUTE_PTR pTemplate,      /* template for new object */
    247    CK_ULONG ulCount,                /* attributes in template */
    248    CK_OBJECT_HANDLE_PTR phNewObject /* receives handle of copy */
    249 );
    250 #endif
    251 
    252 /* C_DestroyObject destroys an object. */
    253 CK_PKCS11_FUNCTION_INFO(C_DestroyObject)
    254 #ifdef CK_NEED_ARG_LIST
    255 (
    256    CK_SESSION_HANDLE hSession, /* the session's handle */
    257    CK_OBJECT_HANDLE hObject    /* the object's handle */
    258 );
    259 #endif
    260 
    261 /* C_GetObjectSize gets the size of an object in bytes. */
    262 CK_PKCS11_FUNCTION_INFO(C_GetObjectSize)
    263 #ifdef CK_NEED_ARG_LIST
    264 (
    265    CK_SESSION_HANDLE hSession, /* the session's handle */
    266    CK_OBJECT_HANDLE hObject,   /* the object's handle */
    267    CK_ULONG_PTR pulSize        /* receives size of object */
    268 );
    269 #endif
    270 
    271 /* C_GetAttributeValue obtains the value of one or more object
    272 * attributes. */
    273 CK_PKCS11_FUNCTION_INFO(C_GetAttributeValue)
    274 #ifdef CK_NEED_ARG_LIST
    275 (
    276    CK_SESSION_HANDLE hSession, /* the session's handle */
    277    CK_OBJECT_HANDLE hObject,   /* the object's handle */
    278    CK_ATTRIBUTE_PTR pTemplate, /* specifies attrs; gets vals */
    279    CK_ULONG ulCount            /* attributes in template */
    280 );
    281 #endif
    282 
    283 /* C_SetAttributeValue modifies the value of one or more object
    284 * attributes */
    285 CK_PKCS11_FUNCTION_INFO(C_SetAttributeValue)
    286 #ifdef CK_NEED_ARG_LIST
    287 (
    288    CK_SESSION_HANDLE hSession, /* the session's handle */
    289    CK_OBJECT_HANDLE hObject,   /* the object's handle */
    290    CK_ATTRIBUTE_PTR pTemplate, /* specifies attrs and values */
    291    CK_ULONG ulCount            /* attributes in template */
    292 );
    293 #endif
    294 
    295 /* C_FindObjectsInit initializes a search for token and session
    296 * objects that match a template. */
    297 CK_PKCS11_FUNCTION_INFO(C_FindObjectsInit)
    298 #ifdef CK_NEED_ARG_LIST
    299 (
    300    CK_SESSION_HANDLE hSession, /* the session's handle */
    301    CK_ATTRIBUTE_PTR pTemplate, /* attribute values to match */
    302    CK_ULONG ulCount            /* attrs in search template */
    303 );
    304 #endif
    305 
    306 /* C_FindObjects continues a search for token and session
    307 * objects that match a template, obtaining additional object
    308 * handles. */
    309 CK_PKCS11_FUNCTION_INFO(C_FindObjects)
    310 #ifdef CK_NEED_ARG_LIST
    311 (
    312    CK_SESSION_HANDLE hSession,    /* session's handle */
    313    CK_OBJECT_HANDLE_PTR phObject, /* gets obj. handles */
    314    CK_ULONG ulMaxObjectCount,     /* max handles to get */
    315    CK_ULONG_PTR pulObjectCount    /* actual # returned */
    316 );
    317 #endif
    318 
    319 /* C_FindObjectsFinal finishes a search for token and session
    320 * objects. */
    321 CK_PKCS11_FUNCTION_INFO(C_FindObjectsFinal)
    322 #ifdef CK_NEED_ARG_LIST
    323 (
    324    CK_SESSION_HANDLE hSession /* the session's handle */
    325 );
    326 #endif
    327 
    328 /* Encryption and decryption */
    329 
    330 /* C_EncryptInit initializes an encryption operation. */
    331 CK_PKCS11_FUNCTION_INFO(C_EncryptInit)
    332 #ifdef CK_NEED_ARG_LIST
    333 (
    334    CK_SESSION_HANDLE hSession,  /* the session's handle */
    335    CK_MECHANISM_PTR pMechanism, /* the encryption mechanism */
    336    CK_OBJECT_HANDLE hKey        /* handle of encryption key */
    337 );
    338 #endif
    339 
    340 /* C_Encrypt encrypts single-part data. */
    341 CK_PKCS11_FUNCTION_INFO(C_Encrypt)
    342 #ifdef CK_NEED_ARG_LIST
    343 (
    344    CK_SESSION_HANDLE hSession,      /* session's handle */
    345    CK_BYTE_PTR pData,               /* the plaintext data */
    346    CK_ULONG ulDataLen,              /* bytes of plaintext */
    347    CK_BYTE_PTR pEncryptedData,      /* gets ciphertext */
    348    CK_ULONG_PTR pulEncryptedDataLen /* gets c-text size */
    349 );
    350 #endif
    351 
    352 /* C_EncryptUpdate continues a multiple-part encryption
    353 * operation. */
    354 CK_PKCS11_FUNCTION_INFO(C_EncryptUpdate)
    355 #ifdef CK_NEED_ARG_LIST
    356 (
    357    CK_SESSION_HANDLE hSession,      /* session's handle */
    358    CK_BYTE_PTR pPart,               /* the plaintext data */
    359    CK_ULONG ulPartLen,              /* plaintext data len */
    360    CK_BYTE_PTR pEncryptedPart,      /* gets ciphertext */
    361    CK_ULONG_PTR pulEncryptedPartLen /* gets c-text size */
    362 );
    363 #endif
    364 
    365 /* C_EncryptFinal finishes a multiple-part encryption
    366 * operation. */
    367 CK_PKCS11_FUNCTION_INFO(C_EncryptFinal)
    368 #ifdef CK_NEED_ARG_LIST
    369 (
    370    CK_SESSION_HANDLE hSession,          /* session handle */
    371    CK_BYTE_PTR pLastEncryptedPart,      /* last c-text */
    372    CK_ULONG_PTR pulLastEncryptedPartLen /* gets last size */
    373 );
    374 #endif
    375 
    376 /* C_DecryptInit initializes a decryption operation. */
    377 CK_PKCS11_FUNCTION_INFO(C_DecryptInit)
    378 #ifdef CK_NEED_ARG_LIST
    379 (
    380    CK_SESSION_HANDLE hSession,  /* the session's handle */
    381    CK_MECHANISM_PTR pMechanism, /* the decryption mechanism */
    382    CK_OBJECT_HANDLE hKey        /* handle of decryption key */
    383 );
    384 #endif
    385 
    386 /* C_Decrypt decrypts encrypted data in a single part. */
    387 CK_PKCS11_FUNCTION_INFO(C_Decrypt)
    388 #ifdef CK_NEED_ARG_LIST
    389 (
    390    CK_SESSION_HANDLE hSession,  /* session's handle */
    391    CK_BYTE_PTR pEncryptedData,  /* ciphertext */
    392    CK_ULONG ulEncryptedDataLen, /* ciphertext length */
    393    CK_BYTE_PTR pData,           /* gets plaintext */
    394    CK_ULONG_PTR pulDataLen      /* gets p-text size */
    395 );
    396 #endif
    397 
    398 /* C_DecryptUpdate continues a multiple-part decryption
    399 * operation. */
    400 CK_PKCS11_FUNCTION_INFO(C_DecryptUpdate)
    401 #ifdef CK_NEED_ARG_LIST
    402 (
    403    CK_SESSION_HANDLE hSession,  /* session's handle */
    404    CK_BYTE_PTR pEncryptedPart,  /* encrypted data */
    405    CK_ULONG ulEncryptedPartLen, /* input length */
    406    CK_BYTE_PTR pPart,           /* gets plaintext */
    407    CK_ULONG_PTR pulPartLen      /* p-text size */
    408 );
    409 #endif
    410 
    411 /* C_DecryptFinal finishes a multiple-part decryption
    412 * operation. */
    413 CK_PKCS11_FUNCTION_INFO(C_DecryptFinal)
    414 #ifdef CK_NEED_ARG_LIST
    415 (
    416    CK_SESSION_HANDLE hSession, /* the session's handle */
    417    CK_BYTE_PTR pLastPart,      /* gets plaintext */
    418    CK_ULONG_PTR pulLastPartLen /* p-text size */
    419 );
    420 #endif
    421 
    422 /* Message digesting */
    423 
    424 /* C_DigestInit initializes a message-digesting operation. */
    425 CK_PKCS11_FUNCTION_INFO(C_DigestInit)
    426 #ifdef CK_NEED_ARG_LIST
    427 (
    428    CK_SESSION_HANDLE hSession, /* the session's handle */
    429    CK_MECHANISM_PTR pMechanism /* the digesting mechanism */
    430 );
    431 #endif
    432 
    433 /* C_Digest digests data in a single part. */
    434 CK_PKCS11_FUNCTION_INFO(C_Digest)
    435 #ifdef CK_NEED_ARG_LIST
    436 (
    437    CK_SESSION_HANDLE hSession, /* the session's handle */
    438    CK_BYTE_PTR pData,          /* data to be digested */
    439    CK_ULONG ulDataLen,         /* bytes of data to digest */
    440    CK_BYTE_PTR pDigest,        /* gets the message digest */
    441    CK_ULONG_PTR pulDigestLen   /* gets digest length */
    442 );
    443 #endif
    444 
    445 /* C_DigestUpdate continues a multiple-part message-digesting
    446 * operation. */
    447 CK_PKCS11_FUNCTION_INFO(C_DigestUpdate)
    448 #ifdef CK_NEED_ARG_LIST
    449 (
    450    CK_SESSION_HANDLE hSession, /* the session's handle */
    451    CK_BYTE_PTR pPart,          /* data to be digested */
    452    CK_ULONG ulPartLen          /* bytes of data to be digested */
    453 );
    454 #endif
    455 
    456 /* C_DigestKey continues a multi-part message-digesting
    457 * operation, by digesting the value of a secret key as part of
    458 * the data already digested. */
    459 CK_PKCS11_FUNCTION_INFO(C_DigestKey)
    460 #ifdef CK_NEED_ARG_LIST
    461 (
    462    CK_SESSION_HANDLE hSession, /* the session's handle */
    463    CK_OBJECT_HANDLE hKey       /* secret key to digest */
    464 );
    465 #endif
    466 
    467 /* C_DigestFinal finishes a multiple-part message-digesting
    468 * operation. */
    469 CK_PKCS11_FUNCTION_INFO(C_DigestFinal)
    470 #ifdef CK_NEED_ARG_LIST
    471 (
    472    CK_SESSION_HANDLE hSession, /* the session's handle */
    473    CK_BYTE_PTR pDigest,        /* gets the message digest */
    474    CK_ULONG_PTR pulDigestLen   /* gets byte count of digest */
    475 );
    476 #endif
    477 
    478 /* Signing and MACing */
    479 
    480 /* C_SignInit initializes a signature (private key encryption)
    481 * operation, where the signature is (will be) an appendix to
    482 * the data, and plaintext cannot be recovered from the
    483 *signature. */
    484 CK_PKCS11_FUNCTION_INFO(C_SignInit)
    485 #ifdef CK_NEED_ARG_LIST
    486 (
    487    CK_SESSION_HANDLE hSession,  /* the session's handle */
    488    CK_MECHANISM_PTR pMechanism, /* the signature mechanism */
    489    CK_OBJECT_HANDLE hKey        /* handle of signature key */
    490 );
    491 #endif
    492 
    493 /* C_Sign signs (encrypts with private key) data in a single
    494 * part, where the signature is (will be) an appendix to the
    495 * data, and plaintext cannot be recovered from the signature. */
    496 CK_PKCS11_FUNCTION_INFO(C_Sign)
    497 #ifdef CK_NEED_ARG_LIST
    498 (
    499    CK_SESSION_HANDLE hSession,  /* the session's handle */
    500    CK_BYTE_PTR pData,           /* the data to sign */
    501    CK_ULONG ulDataLen,          /* count of bytes to sign */
    502    CK_BYTE_PTR pSignature,      /* gets the signature */
    503    CK_ULONG_PTR pulSignatureLen /* gets signature length */
    504 );
    505 #endif
    506 
    507 /* C_SignUpdate continues a multiple-part signature operation,
    508 * where the signature is (will be) an appendix to the data,
    509 * and plaintext cannot be recovered from the signature. */
    510 CK_PKCS11_FUNCTION_INFO(C_SignUpdate)
    511 #ifdef CK_NEED_ARG_LIST
    512 (
    513    CK_SESSION_HANDLE hSession, /* the session's handle */
    514    CK_BYTE_PTR pPart,          /* the data to sign */
    515    CK_ULONG ulPartLen          /* count of bytes to sign */
    516 );
    517 #endif
    518 
    519 /* C_SignFinal finishes a multiple-part signature operation,
    520 * returning the signature. */
    521 CK_PKCS11_FUNCTION_INFO(C_SignFinal)
    522 #ifdef CK_NEED_ARG_LIST
    523 (
    524    CK_SESSION_HANDLE hSession,  /* the session's handle */
    525    CK_BYTE_PTR pSignature,      /* gets the signature */
    526    CK_ULONG_PTR pulSignatureLen /* gets signature length */
    527 );
    528 #endif
    529 
    530 /* C_SignRecoverInit initializes a signature operation, where
    531 * the data can be recovered from the signature. */
    532 CK_PKCS11_FUNCTION_INFO(C_SignRecoverInit)
    533 #ifdef CK_NEED_ARG_LIST
    534 (
    535    CK_SESSION_HANDLE hSession,  /* the session's handle */
    536    CK_MECHANISM_PTR pMechanism, /* the signature mechanism */
    537    CK_OBJECT_HANDLE hKey        /* handle of the signature key */
    538 );
    539 #endif
    540 
    541 /* C_SignRecover signs data in a single operation, where the
    542 * data can be recovered from the signature. */
    543 CK_PKCS11_FUNCTION_INFO(C_SignRecover)
    544 #ifdef CK_NEED_ARG_LIST
    545 (
    546    CK_SESSION_HANDLE hSession,  /* the session's handle */
    547    CK_BYTE_PTR pData,           /* the data to sign */
    548    CK_ULONG ulDataLen,          /* count of bytes to sign */
    549    CK_BYTE_PTR pSignature,      /* gets the signature */
    550    CK_ULONG_PTR pulSignatureLen /* gets signature length */
    551 );
    552 #endif
    553 
    554 /* Verifying signatures and MACs */
    555 
    556 /* C_VerifyInit initializes a verification operation, where the
    557 * signature is an appendix to the data, and plaintext cannot
    558 *  cannot be recovered from the signature (e.g. DSA). */
    559 CK_PKCS11_FUNCTION_INFO(C_VerifyInit)
    560 #ifdef CK_NEED_ARG_LIST
    561 (
    562    CK_SESSION_HANDLE hSession,  /* the session's handle */
    563    CK_MECHANISM_PTR pMechanism, /* the verification mechanism */
    564    CK_OBJECT_HANDLE hKey        /* verification key */
    565 );
    566 #endif
    567 
    568 /* C_Verify verifies a signature in a single-part operation,
    569 * where the signature is an appendix to the data, and plaintext
    570 * cannot be recovered from the signature. */
    571 CK_PKCS11_FUNCTION_INFO(C_Verify)
    572 #ifdef CK_NEED_ARG_LIST
    573 (
    574    CK_SESSION_HANDLE hSession, /* the session's handle */
    575    CK_BYTE_PTR pData,          /* signed data */
    576    CK_ULONG ulDataLen,         /* length of signed data */
    577    CK_BYTE_PTR pSignature,     /* signature */
    578    CK_ULONG ulSignatureLen     /* signature length*/
    579 );
    580 #endif
    581 
    582 /* C_VerifyUpdate continues a multiple-part verification
    583 * operation, where the signature is an appendix to the data,
    584 * and plaintext cannot be recovered from the signature. */
    585 CK_PKCS11_FUNCTION_INFO(C_VerifyUpdate)
    586 #ifdef CK_NEED_ARG_LIST
    587 (
    588    CK_SESSION_HANDLE hSession, /* the session's handle */
    589    CK_BYTE_PTR pPart,          /* signed data */
    590    CK_ULONG ulPartLen          /* length of signed data */
    591 );
    592 #endif
    593 
    594 /* C_VerifyFinal finishes a multiple-part verification
    595 * operation, checking the signature. */
    596 CK_PKCS11_FUNCTION_INFO(C_VerifyFinal)
    597 #ifdef CK_NEED_ARG_LIST
    598 (
    599    CK_SESSION_HANDLE hSession, /* the session's handle */
    600    CK_BYTE_PTR pSignature,     /* signature to verify */
    601    CK_ULONG ulSignatureLen     /* signature length */
    602 );
    603 #endif
    604 
    605 /* C_VerifyRecoverInit initializes a signature verification
    606 * operation, where the data is recovered from the signature. */
    607 CK_PKCS11_FUNCTION_INFO(C_VerifyRecoverInit)
    608 #ifdef CK_NEED_ARG_LIST
    609 (
    610    CK_SESSION_HANDLE hSession,  /* the session's handle */
    611    CK_MECHANISM_PTR pMechanism, /* the verification mechanism */
    612    CK_OBJECT_HANDLE hKey        /* verification key */
    613 );
    614 #endif
    615 
    616 /* C_VerifyRecover verifies a signature in a single-part
    617 * operation, where the data is recovered from the signature. */
    618 CK_PKCS11_FUNCTION_INFO(C_VerifyRecover)
    619 #ifdef CK_NEED_ARG_LIST
    620 (
    621    CK_SESSION_HANDLE hSession, /* the session's handle */
    622    CK_BYTE_PTR pSignature,     /* signature to verify */
    623    CK_ULONG ulSignatureLen,    /* signature length */
    624    CK_BYTE_PTR pData,          /* gets signed data */
    625    CK_ULONG_PTR pulDataLen     /* gets signed data len */
    626 );
    627 #endif
    628 
    629 /* Dual-function cryptographic operations */
    630 
    631 /* C_DigestEncryptUpdate continues a multiple-part digesting
    632 * and encryption operation. */
    633 CK_PKCS11_FUNCTION_INFO(C_DigestEncryptUpdate)
    634 #ifdef CK_NEED_ARG_LIST
    635 (
    636    CK_SESSION_HANDLE hSession,      /* session's handle */
    637    CK_BYTE_PTR pPart,               /* the plaintext data */
    638    CK_ULONG ulPartLen,              /* plaintext length */
    639    CK_BYTE_PTR pEncryptedPart,      /* gets ciphertext */
    640    CK_ULONG_PTR pulEncryptedPartLen /* gets c-text length */
    641 );
    642 #endif
    643 
    644 /* C_DecryptDigestUpdate continues a multiple-part decryption and
    645 * digesting operation. */
    646 CK_PKCS11_FUNCTION_INFO(C_DecryptDigestUpdate)
    647 #ifdef CK_NEED_ARG_LIST
    648 (
    649    CK_SESSION_HANDLE hSession,  /* session's handle */
    650    CK_BYTE_PTR pEncryptedPart,  /* ciphertext */
    651    CK_ULONG ulEncryptedPartLen, /* ciphertext length */
    652    CK_BYTE_PTR pPart,           /* gets plaintext */
    653    CK_ULONG_PTR pulPartLen      /* gets plaintext len */
    654 );
    655 #endif
    656 
    657 /* C_SignEncryptUpdate continues a multiple-part signing and
    658 * encryption operation. */
    659 CK_PKCS11_FUNCTION_INFO(C_SignEncryptUpdate)
    660 #ifdef CK_NEED_ARG_LIST
    661 (
    662    CK_SESSION_HANDLE hSession,      /* session's handle */
    663    CK_BYTE_PTR pPart,               /* the plaintext data */
    664    CK_ULONG ulPartLen,              /* plaintext length */
    665    CK_BYTE_PTR pEncryptedPart,      /* gets ciphertext */
    666    CK_ULONG_PTR pulEncryptedPartLen /* gets c-text length */
    667 );
    668 #endif
    669 
    670 /* C_DecryptVerifyUpdate continues a multiple-part decryption and
    671 * verify operation. */
    672 CK_PKCS11_FUNCTION_INFO(C_DecryptVerifyUpdate)
    673 #ifdef CK_NEED_ARG_LIST
    674 (
    675    CK_SESSION_HANDLE hSession,  /* session's handle */
    676    CK_BYTE_PTR pEncryptedPart,  /* ciphertext */
    677    CK_ULONG ulEncryptedPartLen, /* ciphertext length */
    678    CK_BYTE_PTR pPart,           /* gets plaintext */
    679    CK_ULONG_PTR pulPartLen      /* gets p-text length */
    680 );
    681 #endif
    682 
    683 /* Key management */
    684 
    685 /* C_GenerateKey generates a secret key, creating a new key
    686 * object. */
    687 CK_PKCS11_FUNCTION_INFO(C_GenerateKey)
    688 #ifdef CK_NEED_ARG_LIST
    689 (
    690    CK_SESSION_HANDLE hSession,  /* the session's handle */
    691    CK_MECHANISM_PTR pMechanism, /* key generation mech. */
    692    CK_ATTRIBUTE_PTR pTemplate,  /* template for new key */
    693    CK_ULONG ulCount,            /* # of attrs in template */
    694    CK_OBJECT_HANDLE_PTR phKey   /* gets handle of new key */
    695 );
    696 #endif
    697 
    698 /* C_GenerateKeyPair generates a public-key/private-key pair,
    699 * creating new key objects. */
    700 CK_PKCS11_FUNCTION_INFO(C_GenerateKeyPair)
    701 #ifdef CK_NEED_ARG_LIST
    702 (
    703    CK_SESSION_HANDLE hSession,           /* session handle */
    704    CK_MECHANISM_PTR pMechanism,          /* key-gen mech. */
    705    CK_ATTRIBUTE_PTR pPublicKeyTemplate,  /* template for pub. key */
    706    CK_ULONG ulPublicKeyAttributeCount,   /* # pub. attrs. */
    707    CK_ATTRIBUTE_PTR pPrivateKeyTemplate, /* template for priv. key */
    708    CK_ULONG ulPrivateKeyAttributeCount,  /* # priv. attrs. */
    709    CK_OBJECT_HANDLE_PTR phPublicKey,     /* gets pub. key handle */
    710    CK_OBJECT_HANDLE_PTR phPrivateKey     /* gets priv. key handle */
    711 );
    712 #endif
    713 
    714 /* C_WrapKey wraps (i.e., encrypts) a key. */
    715 CK_PKCS11_FUNCTION_INFO(C_WrapKey)
    716 #ifdef CK_NEED_ARG_LIST
    717 (
    718    CK_SESSION_HANDLE hSession,    /* the session's handle */
    719    CK_MECHANISM_PTR pMechanism,   /* the wrapping mechanism */
    720    CK_OBJECT_HANDLE hWrappingKey, /* wrapping key */
    721    CK_OBJECT_HANDLE hKey,         /* key to be wrapped */
    722    CK_BYTE_PTR pWrappedKey,       /* gets wrapped key */
    723    CK_ULONG_PTR pulWrappedKeyLen  /* gets wrapped key size */
    724 );
    725 #endif
    726 
    727 /* C_UnwrapKey unwraps (decrypts) a wrapped key, creating a new
    728 * key object. */
    729 CK_PKCS11_FUNCTION_INFO(C_UnwrapKey)
    730 #ifdef CK_NEED_ARG_LIST
    731 (
    732    CK_SESSION_HANDLE hSession,      /* session's handle */
    733    CK_MECHANISM_PTR pMechanism,     /* unwrapping mech. */
    734    CK_OBJECT_HANDLE hUnwrappingKey, /* unwrapping key */
    735    CK_BYTE_PTR pWrappedKey,         /* the wrapped key */
    736    CK_ULONG ulWrappedKeyLen,        /* wrapped key len */
    737    CK_ATTRIBUTE_PTR pTemplate,      /* new key template */
    738    CK_ULONG ulAttributeCount,       /* template length */
    739    CK_OBJECT_HANDLE_PTR phKey       /* gets new handle */
    740 );
    741 #endif
    742 
    743 /* C_DeriveKey derives a key from a base key, creating a new key
    744 * object. */
    745 CK_PKCS11_FUNCTION_INFO(C_DeriveKey)
    746 #ifdef CK_NEED_ARG_LIST
    747 (
    748    CK_SESSION_HANDLE hSession,  /* session's handle */
    749    CK_MECHANISM_PTR pMechanism, /* key deriv. mech. */
    750    CK_OBJECT_HANDLE hBaseKey,   /* base key */
    751    CK_ATTRIBUTE_PTR pTemplate,  /* new key template */
    752    CK_ULONG ulAttributeCount,   /* template length */
    753    CK_OBJECT_HANDLE_PTR phKey   /* gets new handle */
    754 );
    755 #endif
    756 
    757 /* Random number generation */
    758 
    759 /* C_SeedRandom mixes additional seed material into the token's
    760 * random number generator. */
    761 CK_PKCS11_FUNCTION_INFO(C_SeedRandom)
    762 #ifdef CK_NEED_ARG_LIST
    763 (
    764    CK_SESSION_HANDLE hSession, /* the session's handle */
    765    CK_BYTE_PTR pSeed,          /* the seed material */
    766    CK_ULONG ulSeedLen          /* length of seed material */
    767 );
    768 #endif
    769 
    770 /* C_GenerateRandom generates random data. */
    771 CK_PKCS11_FUNCTION_INFO(C_GenerateRandom)
    772 #ifdef CK_NEED_ARG_LIST
    773 (
    774    CK_SESSION_HANDLE hSession, /* the session's handle */
    775    CK_BYTE_PTR RandomData,     /* receives the random data */
    776    CK_ULONG ulRandomLen        /* # of bytes to generate */
    777 );
    778 #endif
    779 
    780 /* Parallel function management */
    781 
    782 /* C_GetFunctionStatus is a legacy function; it obtains an
    783 * updated status of a function running in parallel with an
    784 * application. */
    785 CK_PKCS11_FUNCTION_INFO(C_GetFunctionStatus)
    786 #ifdef CK_NEED_ARG_LIST
    787 (
    788    CK_SESSION_HANDLE hSession /* the session's handle */
    789 );
    790 #endif
    791 
    792 /* C_CancelFunction is a legacy function; it cancels a function
    793 * running in parallel. */
    794 CK_PKCS11_FUNCTION_INFO(C_CancelFunction)
    795 #ifdef CK_NEED_ARG_LIST
    796 (
    797    CK_SESSION_HANDLE hSession /* the session's handle */
    798 );
    799 #endif
    800 
    801 /* Functions added in for PKCS #11 Version 2.01 or later */
    802 
    803 /* C_WaitForSlotEvent waits for a slot event (token insertion,
    804 * removal, etc.) to occur. */
    805 CK_PKCS11_FUNCTION_INFO(C_WaitForSlotEvent)
    806 #ifdef CK_NEED_ARG_LIST
    807 (
    808    CK_FLAGS flags,       /* blocking/nonblocking flag */
    809    CK_SLOT_ID_PTR pSlot, /* location that receives the slot ID */
    810    CK_VOID_PTR pRserved  /* reserved.  Should be NULL_PTR */
    811 );
    812 #endif
    813 
    814 #if (defined(CK_PKCS11_3_0) || defined(CK_PKCS11_3_2)) && !defined(CK_PKCS11_2_0_ONLY)
    815 CK_PKCS11_FUNCTION_INFO(C_GetInterfaceList)
    816 #ifdef CK_NEED_ARG_LIST
    817 (
    818    CK_INTERFACE_PTR interfaces,
    819    CK_ULONG_PTR pulCount);
    820 #endif
    821 
    822 CK_PKCS11_FUNCTION_INFO(C_GetInterface)
    823 #ifdef CK_NEED_ARG_LIST
    824 (
    825    CK_UTF8CHAR_PTR pInterfaceName,
    826    CK_VERSION_PTR pVersion,
    827    CK_INTERFACE_PTR_PTR ppInterface,
    828    CK_FLAGS flags);
    829 #endif
    830 
    831 CK_PKCS11_FUNCTION_INFO(C_LoginUser)
    832 #ifdef CK_NEED_ARG_LIST
    833 (
    834    CK_SESSION_HANDLE hSession,
    835    CK_USER_TYPE userType,
    836    CK_CHAR_PTR pPin,
    837    CK_ULONG ulPinLen,
    838    CK_UTF8CHAR_PTR pUsername,
    839    CK_ULONG ulUsernameLen);
    840 #endif
    841 
    842 CK_PKCS11_FUNCTION_INFO(C_SessionCancel)
    843 #ifdef CK_NEED_ARG_LIST
    844 (
    845    CK_SESSION_HANDLE hSession,
    846    CK_FLAGS flags);
    847 #endif
    848 
    849 CK_PKCS11_FUNCTION_INFO(C_MessageEncryptInit)
    850 #ifdef CK_NEED_ARG_LIST
    851 (
    852    CK_SESSION_HANDLE hSession,
    853    CK_MECHANISM_PTR pMechanism,
    854    CK_OBJECT_HANDLE hKey);
    855 #endif
    856 
    857 CK_PKCS11_FUNCTION_INFO(C_EncryptMessage)
    858 #ifdef CK_NEED_ARG_LIST
    859 (
    860    CK_SESSION_HANDLE hSession,
    861    CK_VOID_PTR pParameter,
    862    CK_ULONG ulParameterLen,
    863    CK_BYTE_PTR pAssociatedData,
    864    CK_ULONG ulAssociatedDataLen,
    865    CK_BYTE_PTR pPlaintext,
    866    CK_ULONG ulPlaintextLen,
    867    CK_BYTE_PTR pCiphertext,
    868    CK_ULONG_PTR pulCiphertextLen);
    869 #endif
    870 
    871 CK_PKCS11_FUNCTION_INFO(C_EncryptMessageBegin)
    872 #ifdef CK_NEED_ARG_LIST
    873 (
    874    CK_SESSION_HANDLE hSession,
    875    CK_VOID_PTR pParameter,
    876    CK_ULONG ulParameterLen,
    877    CK_BYTE_PTR pAssociatedData,
    878    CK_ULONG ulAssociatedDataLen);
    879 #endif
    880 
    881 CK_PKCS11_FUNCTION_INFO(C_EncryptMessageNext)
    882 #ifdef CK_NEED_ARG_LIST
    883 (
    884    CK_SESSION_HANDLE hSession,
    885    CK_VOID_PTR pParameter,
    886    CK_ULONG ulParameterLen,
    887    CK_BYTE_PTR pPlaintextPart,
    888    CK_ULONG ulPlaintextPartLen,
    889    CK_BYTE_PTR pCiphertextPart,
    890    CK_ULONG_PTR pulCiphertextPartLen,
    891    CK_FLAGS flags);
    892 #endif
    893 
    894 CK_PKCS11_FUNCTION_INFO(C_MessageEncryptFinal)
    895 #ifdef CK_NEED_ARG_LIST
    896 (
    897    CK_SESSION_HANDLE hSession);
    898 #endif
    899 
    900 CK_PKCS11_FUNCTION_INFO(C_MessageDecryptInit)
    901 #ifdef CK_NEED_ARG_LIST
    902 (
    903    CK_SESSION_HANDLE hSession,
    904    CK_MECHANISM_PTR pMechanism,
    905    CK_OBJECT_HANDLE hKey);
    906 #endif
    907 
    908 CK_PKCS11_FUNCTION_INFO(C_DecryptMessage)
    909 #ifdef CK_NEED_ARG_LIST
    910 (
    911    CK_SESSION_HANDLE hSession,
    912    CK_VOID_PTR pParameter,
    913    CK_ULONG ulParameterLen,
    914    CK_BYTE_PTR pAssociatedData,
    915    CK_ULONG ulAssociatedDataLen,
    916    CK_BYTE_PTR pCiphertext,
    917    CK_ULONG ulCiphertextLen,
    918    CK_BYTE_PTR pPlaintext,
    919    CK_ULONG_PTR pulPlaintextLen);
    920 #endif
    921 
    922 CK_PKCS11_FUNCTION_INFO(C_DecryptMessageBegin)
    923 #ifdef CK_NEED_ARG_LIST
    924 (
    925    CK_SESSION_HANDLE hSession,
    926    CK_VOID_PTR pParameter,
    927    CK_ULONG ulParameterLen,
    928    CK_BYTE_PTR pAssociatedData,
    929    CK_ULONG ulAssociatedDataLen);
    930 #endif
    931 
    932 CK_PKCS11_FUNCTION_INFO(C_DecryptMessageNext)
    933 #ifdef CK_NEED_ARG_LIST
    934 (
    935    CK_SESSION_HANDLE hSession,
    936    CK_VOID_PTR pParameter,
    937    CK_ULONG ulParameterLen,
    938    CK_BYTE_PTR pCiphertextPart,
    939    CK_ULONG ulCiphertextPartLen,
    940    CK_BYTE_PTR pPlaintextPart,
    941    CK_ULONG_PTR pulPlaintextPartLen,
    942    CK_FLAGS flags);
    943 #endif
    944 
    945 CK_PKCS11_FUNCTION_INFO(C_MessageDecryptFinal)
    946 #ifdef CK_NEED_ARG_LIST
    947 (
    948    CK_SESSION_HANDLE hSession);
    949 #endif
    950 
    951 CK_PKCS11_FUNCTION_INFO(C_MessageSignInit)
    952 #ifdef CK_NEED_ARG_LIST
    953 (
    954    CK_SESSION_HANDLE hSession,
    955    CK_MECHANISM_PTR pMechanism,
    956    CK_OBJECT_HANDLE hKey);
    957 #endif
    958 
    959 CK_PKCS11_FUNCTION_INFO(C_SignMessage)
    960 #ifdef CK_NEED_ARG_LIST
    961 (
    962    CK_SESSION_HANDLE hSession,
    963    CK_VOID_PTR pParameter,
    964    CK_ULONG ulParameterLen,
    965    CK_BYTE_PTR pData,
    966    CK_ULONG ulDataLen,
    967 
    968    CK_BYTE_PTR pSignature,
    969    CK_ULONG_PTR pulSignatureLen);
    970 #endif
    971 
    972 CK_PKCS11_FUNCTION_INFO(C_SignMessageBegin)
    973 #ifdef CK_NEED_ARG_LIST
    974 (
    975    CK_SESSION_HANDLE hSession,
    976    CK_VOID_PTR pParameter,
    977    CK_ULONG ulParameterLen);
    978 #endif
    979 
    980 CK_PKCS11_FUNCTION_INFO(C_SignMessageNext)
    981 #ifdef CK_NEED_ARG_LIST
    982 (
    983    CK_SESSION_HANDLE hSession,
    984    CK_VOID_PTR pParameter,
    985    CK_ULONG ulParameterLen,
    986    CK_BYTE_PTR pData,
    987    CK_ULONG ulDataLen,
    988    CK_BYTE_PTR pSignature,
    989    CK_ULONG_PTR pulSignatureLen);
    990 #endif
    991 
    992 CK_PKCS11_FUNCTION_INFO(C_MessageSignFinal)
    993 #ifdef CK_NEED_ARG_LIST
    994 (
    995    CK_SESSION_HANDLE hSession);
    996 #endif
    997 
    998 CK_PKCS11_FUNCTION_INFO(C_MessageVerifyInit)
    999 #ifdef CK_NEED_ARG_LIST
   1000 (
   1001    CK_SESSION_HANDLE hSession,
   1002    CK_MECHANISM_PTR pMechanism,
   1003    CK_OBJECT_HANDLE hKey);
   1004 #endif
   1005 
   1006 CK_PKCS11_FUNCTION_INFO(C_VerifyMessage)
   1007 #ifdef CK_NEED_ARG_LIST
   1008 (
   1009    CK_SESSION_HANDLE hSession,
   1010    CK_VOID_PTR pParameter,
   1011    CK_ULONG ulParameterLen,
   1012    CK_BYTE_PTR pData,
   1013    CK_ULONG ulDataLen,
   1014    CK_BYTE_PTR pSignature,
   1015    CK_ULONG ulSignatureLen);
   1016 #endif
   1017 
   1018 CK_PKCS11_FUNCTION_INFO(C_VerifyMessageBegin)
   1019 #ifdef CK_NEED_ARG_LIST
   1020 (
   1021    CK_SESSION_HANDLE hSession,
   1022    CK_VOID_PTR pParameter,
   1023    CK_ULONG ulParameterLen);
   1024 #endif
   1025 
   1026 CK_PKCS11_FUNCTION_INFO(C_VerifyMessageNext)
   1027 #ifdef CK_NEED_ARG_LIST
   1028 (
   1029    CK_SESSION_HANDLE hSession,
   1030    CK_VOID_PTR pParameter,
   1031    CK_ULONG ulParameterLen,
   1032    CK_BYTE_PTR pData,
   1033    CK_ULONG ulDataLen,
   1034    CK_BYTE_PTR pSignature,
   1035    CK_ULONG ulSignatureLen);
   1036 #endif
   1037 
   1038 CK_PKCS11_FUNCTION_INFO(C_MessageVerifyFinal)
   1039 #ifdef CK_NEED_ARG_LIST
   1040 (
   1041    CK_SESSION_HANDLE hSession);
   1042 #endif
   1043 
   1044 #if defined(CK_PKCS11_3_2) && !defined(CK_PKCS11_3_0_ONLY)
   1045 CK_PKCS11_FUNCTION_INFO(C_EncapsulateKey)
   1046 #ifdef CK_NEED_ARG_LIST
   1047 (
   1048    CK_SESSION_HANDLE hSession,
   1049    CK_MECHANISM_PTR pMechanism,
   1050    CK_OBJECT_HANDLE hPublicKey,
   1051    CK_ATTRIBUTE_PTR pTemplate,
   1052    CK_ULONG ulAttributeCount,
   1053    CK_BYTE_PTR pCiphertext,
   1054    CK_ULONG_PTR pulCiphertextLen,
   1055    CK_OBJECT_HANDLE_PTR phKey);
   1056 #endif
   1057 
   1058 CK_PKCS11_FUNCTION_INFO(C_DecapsulateKey)
   1059 #ifdef CK_NEED_ARG_LIST
   1060 (
   1061    CK_SESSION_HANDLE hSession,
   1062    CK_MECHANISM_PTR pMechanism,
   1063    CK_OBJECT_HANDLE hPrivateKey,
   1064    CK_ATTRIBUTE_PTR pTemplate,
   1065    CK_ULONG ulAttributeCount,
   1066    CK_BYTE_PTR pCiphertext,
   1067    CK_ULONG ulCiphertextLen,
   1068    CK_OBJECT_HANDLE_PTR phKey);
   1069 #endif
   1070 
   1071 CK_PKCS11_FUNCTION_INFO(C_VerifySignatureInit)
   1072 #ifdef CK_NEED_ARG_LIST
   1073 (
   1074    CK_SESSION_HANDLE hSession,
   1075    CK_MECHANISM_PTR pMechanism,
   1076    CK_OBJECT_HANDLE hKey,
   1077    CK_BYTE_PTR pSignature,
   1078    CK_ULONG ulSignatureLen);
   1079 #endif
   1080 
   1081 CK_PKCS11_FUNCTION_INFO(C_VerifySignature)
   1082 #ifdef CK_NEED_ARG_LIST
   1083 (
   1084    CK_SESSION_HANDLE hSession,
   1085    CK_BYTE_PTR pData,
   1086    CK_ULONG ulDataLen);
   1087 #endif
   1088 
   1089 CK_PKCS11_FUNCTION_INFO(C_VerifySignatureUpdate)
   1090 #ifdef CK_NEED_ARG_LIST
   1091 (
   1092    CK_SESSION_HANDLE hSession,
   1093    CK_BYTE_PTR pPart,
   1094    CK_ULONG ulPartLen);
   1095 #endif
   1096 
   1097 CK_PKCS11_FUNCTION_INFO(C_VerifySignatureFinal)
   1098 #ifdef CK_NEED_ARG_LIST
   1099 (
   1100    CK_SESSION_HANDLE hSession);
   1101 #endif
   1102 
   1103 CK_PKCS11_FUNCTION_INFO(C_GetSessionValidationFlags)
   1104 #ifdef CK_NEED_ARG_LIST
   1105 (
   1106    CK_SESSION_HANDLE hSession,
   1107    CK_SESSION_VALIDATION_FLAGS_TYPE type,
   1108    CK_FLAGS_PTR pFlags);
   1109 #endif
   1110 
   1111 CK_PKCS11_FUNCTION_INFO(C_AsyncComplete)
   1112 #ifdef CK_NEED_ARG_LIST
   1113 (
   1114    CK_SESSION_HANDLE hSession,
   1115    CK_UTF8CHAR_PTR pFunctionName,
   1116    CK_ASYNC_DATA_PTR pResult);
   1117 #endif
   1118 
   1119 CK_PKCS11_FUNCTION_INFO(C_AsyncGetID)
   1120 #ifdef CK_NEED_ARG_LIST
   1121 (
   1122    CK_SESSION_HANDLE hSession,
   1123    CK_UTF8CHAR_PTR pFunctionName,
   1124    CK_ULONG_PTR pulID);
   1125 #endif
   1126 
   1127 CK_PKCS11_FUNCTION_INFO(C_AsyncJoin)
   1128 #ifdef CK_NEED_ARG_LIST
   1129 (
   1130    CK_SESSION_HANDLE hSession,
   1131    CK_UTF8CHAR_PTR pFunctionName,
   1132    CK_ULONG ulID,
   1133    CK_BYTE_PTR pData,
   1134    CK_ULONG ulData);
   1135 #endif
   1136 
   1137 CK_PKCS11_FUNCTION_INFO(C_WrapKeyAuthenticated)
   1138 #ifdef CK_NEED_ARG_LIST
   1139 (
   1140    CK_SESSION_HANDLE hSession,
   1141    CK_MECHANISM_PTR pMechanism,
   1142    CK_OBJECT_HANDLE hWrappingKey,
   1143    CK_OBJECT_HANDLE hKey,
   1144    CK_BYTE_PTR pAssociatedData,
   1145    CK_ULONG ulAssociatedDataLen,
   1146    CK_BYTE_PTR pWrappedKey,
   1147    CK_ULONG_PTR pulWrappedKeyLen);
   1148 #endif
   1149 
   1150 CK_PKCS11_FUNCTION_INFO(C_UnwrapKeyAuthenticated)
   1151 #ifdef CK_NEED_ARG_LIST
   1152 (
   1153    CK_SESSION_HANDLE hSession,
   1154    CK_MECHANISM_PTR pMechanism,
   1155    CK_OBJECT_HANDLE hUnwrappingKey,
   1156    CK_BYTE_PTR pWrappedKey,
   1157    CK_ULONG ulWrappedKeyLen,
   1158    CK_ATTRIBUTE_PTR pTemplate,
   1159    CK_ULONG ulAttributeCount,
   1160    CK_BYTE_PTR pAssociatedData,
   1161    CK_ULONG ulAssociatedDataLen,
   1162    CK_OBJECT_HANDLE_PTR phKey);
   1163 #endif
   1164 
   1165 #endif
   1166 #endif