home *** CD-ROM | disk | FTP | other *** search
/ ftp.rsa.com / 2014.05.ftp.rsa.com.tar / ftp.rsa.com / pub / pkcs / pkcs-11 / pkcs11f.h < prev    next >
C/C++ Source or Header  |  2014-05-02  |  27KB  |  846 lines

  1. /* This function contains pretty much everything about all */
  2. /* the Cryptoki function prototypes. */
  3.  
  4.  
  5.  
  6. /* General-purpose */
  7.  
  8. /* C_Initialize initializes the Cryptoki library. */
  9. CK_EXTERN _CK_RV CK_FUNC(C_Initialize)
  10. #ifdef CK_NEED_ARG_LIST
  11. (
  12.   CK_VOID_PTR   pReserved  /* reserved.  Should be NULL_PTR */
  13. );
  14. #endif
  15.  
  16.  
  17. /* C_Finalize indicates that an application is done with the Cryptoki
  18.  * library. */
  19. CK_EXTERN _CK_RV CK_FUNC(C_Finalize)
  20. #ifdef CK_NEED_ARG_LIST
  21. (
  22.   CK_VOID_PTR   pReserved  /* reserved.  Should be NULL_PTR */
  23. );
  24. #endif
  25.  
  26.  
  27. /* C_GetInfo returns general information about Cryptoki. */
  28. CK_EXTERN _CK_RV CK_FUNC(C_GetInfo)
  29. #ifdef CK_NEED_ARG_LIST
  30. (
  31.   CK_INFO_PTR   pInfo  /* location that receives the information */
  32. );
  33. #endif
  34.  
  35.  
  36. /* C_GetFunctionList returns the function list. */
  37. CK_EXTERN _CK_RV CK_FUNC(C_GetFunctionList)
  38. #ifdef CK_NEED_ARG_LIST
  39. (
  40.   CK_FUNCTION_LIST_PTR_PTR ppFunctionList  /* receives ptr to function list */
  41. );
  42. #endif
  43.  
  44.  
  45.  
  46. /* Slot and token management */
  47.  
  48. /* C_GetSlotList obtains a list of slots in the system. */
  49. CK_EXTERN _CK_RV CK_FUNC(C_GetSlotList)
  50. #ifdef CK_NEED_ARG_LIST
  51. (
  52.   CK_BBOOL       tokenPresent,  /* only slots with token present */
  53.   CK_SLOT_ID_PTR pSlotList,     /* receives the array of slot IDs */
  54.   CK_ULONG_PTR   pulCount       /* receives the number of slots */
  55. );
  56. #endif
  57.  
  58.  
  59. /* C_GetSlotInfo obtains information about a particular slot in the system. */
  60. CK_EXTERN _CK_RV CK_FUNC(C_GetSlotInfo)
  61. #ifdef CK_NEED_ARG_LIST
  62. (
  63.   CK_SLOT_ID       slotID,  /* the ID of the slot */
  64.   CK_SLOT_INFO_PTR pInfo    /* receives the slot information */
  65. );
  66. #endif
  67.  
  68.  
  69. /* C_GetTokenInfo obtains information about a particular token in the
  70.  * system. */
  71. CK_EXTERN _CK_RV CK_FUNC(C_GetTokenInfo)
  72. #ifdef CK_NEED_ARG_LIST
  73. (
  74.   CK_SLOT_ID        slotID,  /* ID of the token's slot */
  75.   CK_TOKEN_INFO_PTR pInfo    /* receives the token information */
  76. );
  77. #endif
  78.  
  79.  
  80. /* C_GetMechanismList obtains a list of mechanism types supported by
  81.  * a token. */
  82. CK_EXTERN _CK_RV CK_FUNC(C_GetMechanismList)
  83. #ifdef CK_NEED_ARG_LIST
  84. (
  85.   CK_SLOT_ID            slotID,          /* ID of the token's slot */
  86.   CK_MECHANISM_TYPE_PTR pMechanismList,  /* receives mech. types array */
  87.   CK_ULONG_PTR          pulCount         /* receives number of mechs. */
  88. );
  89. #endif
  90.  
  91.  
  92. /* C_GetMechanismInfo obtains information about a particular mechanism 
  93.  * possibly supported by a token. */
  94. CK_EXTERN _CK_RV CK_FUNC(C_GetMechanismInfo)
  95. #ifdef CK_NEED_ARG_LIST
  96. (
  97.   CK_SLOT_ID            slotID,  /* ID of the token's slot */
  98.   CK_MECHANISM_TYPE     type,    /* type of mechanism */
  99.   CK_MECHANISM_INFO_PTR pInfo    /* receives mechanism information */
  100. );
  101. #endif
  102.  
  103.  
  104. /* C_InitToken initializes a token. */
  105. CK_EXTERN _CK_RV CK_FUNC(C_InitToken)
  106. #ifdef CK_NEED_ARG_LIST
  107. (
  108.   CK_SLOT_ID     slotID,    /* ID of the token's slot */
  109.   CK_CHAR_PTR    pPin,      /* the SO's initial PIN */
  110.   CK_ULONG       ulPinLen,  /* length in bytes of the PIN */
  111.   CK_CHAR_PTR    pLabel     /* 32-byte token label (blank padded) */
  112. );
  113. #endif
  114.  
  115.  
  116. /* C_InitPIN initializes the normal user's PIN. */
  117. CK_EXTERN _CK_RV CK_FUNC(C_InitPIN)
  118. #ifdef CK_NEED_ARG_LIST
  119. (
  120.   CK_SESSION_HANDLE hSession,  /* the session's handle */
  121.   CK_CHAR_PTR       pPin,      /* the normal user's PIN */
  122.   CK_ULONG          ulPinLen   /* length in bytes of the PIN */
  123. );
  124. #endif
  125.  
  126.  
  127. /* C_SetPIN modifies the PIN of user that is currently logged in. */
  128. CK_EXTERN _CK_RV CK_FUNC(C_SetPIN)
  129. #ifdef CK_NEED_ARG_LIST
  130. (
  131.   CK_SESSION_HANDLE hSession,  /* the session's handle */
  132.   CK_CHAR_PTR       pOldPin,   /* the old PIN */
  133.   CK_ULONG          ulOldLen,  /* length of the old PIN */
  134.   CK_CHAR_PTR       pNewPin,   /* the new PIN */
  135.   CK_ULONG          ulNewLen   /* length of the new PIN */
  136. );
  137. #endif
  138.  
  139.  
  140.  
  141. /* Session management */
  142.  
  143. /* C_OpenSession opens a session between an application and a token. */
  144. CK_EXTERN _CK_RV CK_FUNC(C_OpenSession)
  145. #ifdef CK_NEED_ARG_LIST
  146. (
  147.   CK_SLOT_ID            slotID,        /* the slot's ID */
  148.   CK_FLAGS              flags,         /* defined in CK_SESSION_INFO */
  149.   CK_VOID_PTR           pApplication,  /* pointer passed to callback */
  150.   CK_NOTIFY             Notify,        /* notification callback function */
  151.   CK_SESSION_HANDLE_PTR phSession      /* receives new session handle */
  152. );
  153. #endif
  154.  
  155.  
  156. /* C_CloseSession closes a session between an application and a token. */
  157. CK_EXTERN _CK_RV CK_FUNC(C_CloseSession)
  158. #ifdef CK_NEED_ARG_LIST
  159. (
  160.   CK_SESSION_HANDLE hSession  /* the session's handle */
  161. );
  162. #endif
  163.  
  164.  
  165. /* C_CloseAllSessions closes all sessions with a token. */
  166. CK_EXTERN _CK_RV CK_FUNC(C_CloseAllSessions)
  167. #ifdef CK_NEED_ARG_LIST
  168. (
  169.   CK_SLOT_ID     slotID  /* the token's slot */
  170. );
  171. #endif
  172.  
  173.  
  174. /* C_GetSessionInfo obtains information about the session. */
  175. CK_EXTERN _CK_RV CK_FUNC(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 information */
  180. );
  181. #endif
  182.  
  183.  
  184. /* C_GetOperationState obtains the state of the cryptographic operation
  185.  * in a session. */
  186. CK_EXTERN _CK_RV CK_FUNC(C_GetOperationState)
  187. #ifdef CK_NEED_ARG_LIST
  188. (
  189.   CK_SESSION_HANDLE hSession,             /* the session's handle */
  190.   CK_BYTE_PTR       pOperationState,      /* location receiving state */
  191.   CK_ULONG_PTR      pulOperationStateLen  /* location receiving state length */
  192. );
  193. #endif
  194.  
  195.  
  196. /* C_SetOperationState restores the state of the cryptographic operation
  197.  * in a session. */
  198. CK_EXTERN _CK_RV CK_FUNC(C_SetOperationState)
  199. #ifdef CK_NEED_ARG_LIST
  200. (
  201.   CK_SESSION_HANDLE hSession,            /* the session's handle */
  202.   CK_BYTE_PTR      pOperationState,      /* the location holding the state */
  203.   CK_ULONG         ulOperationStateLen,  /* location holding state length */
  204.   CK_OBJECT_HANDLE hEncryptionKey,       /* handle of en/decryption key */
  205.   CK_OBJECT_HANDLE hAuthenticationKey    /* handle of sign/verify key */
  206. );
  207. #endif
  208.  
  209.  
  210. /* C_Login logs a user into a token. */
  211. CK_EXTERN _CK_RV CK_FUNC(C_Login)
  212. #ifdef CK_NEED_ARG_LIST
  213. (
  214.   CK_SESSION_HANDLE hSession,  /* the session's handle */
  215.   CK_USER_TYPE      userType,  /* the user type */
  216.   CK_CHAR_PTR       pPin,      /* the user's PIN */
  217.   CK_ULONG          ulPinLen   /* the length of the PIN */
  218. );
  219. #endif
  220.  
  221.  
  222. /* C_Logout logs a user out from a token. */
  223. CK_EXTERN _CK_RV CK_FUNC(C_Logout)
  224. #ifdef CK_NEED_ARG_LIST
  225. (
  226.   CK_SESSION_HANDLE hSession  /* the session's handle */
  227. );
  228. #endif
  229.  
  230.  
  231.  
  232. /* Object management */
  233.  
  234. /* C_CreateObject creates a new object. */
  235. CK_EXTERN _CK_RV CK_FUNC(C_CreateObject)
  236. #ifdef CK_NEED_ARG_LIST
  237. (
  238.   CK_SESSION_HANDLE hSession,    /* the session's handle */
  239.   CK_ATTRIBUTE_PTR  pTemplate,   /* the object's template */
  240.   CK_ULONG          ulCount,     /* attributes in template */
  241.   CK_OBJECT_HANDLE_PTR phObject  /* receives new object's handle. */
  242. );
  243. #endif
  244.  
  245.  
  246. /* C_CopyObject copies an object, creating a new object for the copy. */
  247. CK_EXTERN _CK_RV CK_FUNC(C_CopyObject)
  248. #ifdef CK_NEED_ARG_LIST
  249. (
  250.   CK_SESSION_HANDLE    hSession,    /* the session's handle */
  251.   CK_OBJECT_HANDLE     hObject,     /* the object's handle */
  252.   CK_ATTRIBUTE_PTR     pTemplate,   /* template for new object */
  253.   CK_ULONG             ulCount,     /* attributes in template */
  254.   CK_OBJECT_HANDLE_PTR phNewObject  /* receives handle of copy */
  255. );
  256. #endif
  257.  
  258.  
  259. /* C_DestroyObject destroys an object. */
  260. CK_EXTERN _CK_RV CK_FUNC(C_DestroyObject)
  261. #ifdef CK_NEED_ARG_LIST
  262. (
  263.   CK_SESSION_HANDLE hSession,  /* the session's handle */
  264.   CK_OBJECT_HANDLE  hObject    /* the object's handle */
  265. );
  266. #endif
  267.  
  268.  
  269. /* C_GetObjectSize gets the size of an object in bytes. */
  270. CK_EXTERN _CK_RV CK_FUNC(C_GetObjectSize)
  271. #ifdef CK_NEED_ARG_LIST
  272. (
  273.   CK_SESSION_HANDLE hSession,  /* the session's handle */
  274.   CK_OBJECT_HANDLE  hObject,   /* the object's handle */
  275.   CK_ULONG_PTR      pulSize    /* receives size of object */
  276. );
  277. #endif
  278.  
  279.  
  280. /* C_GetAttributeValue obtains the value of one or more object attributes. */
  281. CK_EXTERN _CK_RV CK_FUNC(C_GetAttributeValue)
  282. #ifdef CK_NEED_ARG_LIST
  283. (
  284.   CK_SESSION_HANDLE hSession,   /* the session's handle */
  285.   CK_OBJECT_HANDLE  hObject,    /* the object's handle */
  286.   CK_ATTRIBUTE_PTR  pTemplate,  /* specifies attributes, gets values */
  287.   CK_ULONG          ulCount     /* attributes in template */
  288. );
  289. #endif
  290.  
  291.  
  292. /* C_SetAttributeValue modifies the value of one or more object attributes */
  293. CK_EXTERN _CK_RV CK_FUNC(C_SetAttributeValue)
  294. #ifdef CK_NEED_ARG_LIST
  295. (
  296.   CK_SESSION_HANDLE hSession,   /* the session's handle */
  297.   CK_OBJECT_HANDLE  hObject,    /* the object's handle */
  298.   CK_ATTRIBUTE_PTR  pTemplate,  /* specifies attributes and values */
  299.   CK_ULONG          ulCount     /* attributes in template */
  300. );
  301. #endif
  302.  
  303.  
  304. /* C_FindObjectsInit initializes a search for token and session objects 
  305.  * that match a template. */
  306. CK_EXTERN _CK_RV CK_FUNC(C_FindObjectsInit)
  307. #ifdef CK_NEED_ARG_LIST
  308. (
  309.   CK_SESSION_HANDLE hSession,   /* the session's handle */
  310.   CK_ATTRIBUTE_PTR  pTemplate,  /* attribute values to match */
  311.   CK_ULONG          ulCount     /* attributes in search template */
  312. );
  313. #endif
  314.  
  315.  
  316. /* C_FindObjects continues a search for token and session objects 
  317.  * that match a template, obtaining additional object handles. */
  318. CK_EXTERN _CK_RV CK_FUNC(C_FindObjects)
  319. #ifdef CK_NEED_ARG_LIST
  320. (
  321.  CK_SESSION_HANDLE    hSession,          /* the session's handle */
  322.  CK_OBJECT_HANDLE_PTR phObject,          /* receives object handle array */
  323.  CK_ULONG             ulMaxObjectCount,  /* max handles to be returned */
  324.  CK_ULONG_PTR         pulObjectCount     /* actual number returned */
  325. );
  326. #endif
  327.  
  328.  
  329. /* C_FindObjectsFinal finishes a search for token and session objects. */
  330. CK_EXTERN _CK_RV CK_FUNC(C_FindObjectsFinal)
  331. #ifdef CK_NEED_ARG_LIST
  332. (
  333.   CK_SESSION_HANDLE hSession  /* the session's handle */
  334. );
  335. #endif
  336.  
  337.  
  338.  
  339. /* Encryption and decryption */
  340.  
  341. /* C_EncryptInit initializes an encryption operation. */
  342. CK_EXTERN _CK_RV CK_FUNC(C_EncryptInit)
  343. #ifdef CK_NEED_ARG_LIST
  344. (
  345.   CK_SESSION_HANDLE hSession,    /* the session's handle */
  346.   CK_MECHANISM_PTR  pMechanism,  /* the encryption mechanism */
  347.   CK_OBJECT_HANDLE  hKey         /* handle of encryption key */
  348. );
  349. #endif
  350.  
  351.  
  352. /* C_Encrypt encrypts single-part data. */
  353. CK_EXTERN _CK_RV CK_FUNC(C_Encrypt)
  354. #ifdef CK_NEED_ARG_LIST
  355. (
  356.   CK_SESSION_HANDLE hSession,            /* the session's handle */
  357.   CK_BYTE_PTR       pData,               /* the plaintext data */
  358.   CK_ULONG          ulDataLen,           /* bytes of plaintext data */
  359.   CK_BYTE_PTR       pEncryptedData,      /* receives encrypted data */
  360.   CK_ULONG_PTR      pulEncryptedDataLen  /* receives encrypted byte count */
  361. );
  362. #endif
  363.  
  364.  
  365. /* C_EncryptUpdate continues a multiple-part encryption operation. */
  366. CK_EXTERN _CK_RV CK_FUNC(C_EncryptUpdate)
  367. #ifdef CK_NEED_ARG_LIST
  368. (
  369.   CK_SESSION_HANDLE hSession,           /* the session's handle */
  370.   CK_BYTE_PTR       pPart,              /* the plaintext data */
  371.   CK_ULONG          ulPartLen,          /* bytes of plaintext data */
  372.   CK_BYTE_PTR       pEncryptedPart,     /* receives encrypted data */
  373.   CK_ULONG_PTR      pulEncryptedPartLen /* receives encrypted byte count */
  374. );
  375. #endif
  376.  
  377.  
  378. /* C_EncryptFinal finishes a multiple-part encryption operation. */
  379. CK_EXTERN _CK_RV CK_FUNC(C_EncryptFinal)
  380. #ifdef CK_NEED_ARG_LIST
  381. (
  382.   CK_SESSION_HANDLE hSession,                /* the session's handle */
  383.   CK_BYTE_PTR       pLastEncryptedPart,      /* receives encrypted last part */
  384.   CK_ULONG_PTR      pulLastEncryptedPartLen  /* receives byte count */
  385. );
  386. #endif
  387.  
  388.  
  389. /* C_DecryptInit initializes a decryption operation. */
  390. CK_EXTERN _CK_RV CK_FUNC(C_DecryptInit)
  391. #ifdef CK_NEED_ARG_LIST
  392. (
  393.   CK_SESSION_HANDLE hSession,    /* the session's handle */
  394.   CK_MECHANISM_PTR  pMechanism,  /* the decryption mechanism */
  395.   CK_OBJECT_HANDLE  hKey         /* handle of the decryption key */
  396. );
  397. #endif
  398.  
  399.  
  400. /* C_Decrypt decrypts encrypted data in a single part. */
  401. CK_EXTERN _CK_RV CK_FUNC(C_Decrypt)
  402. #ifdef CK_NEED_ARG_LIST
  403. (
  404.   CK_SESSION_HANDLE hSession,           /* the session's handle */
  405.   CK_BYTE_PTR       pEncryptedData,     /* input encrypted data */
  406.   CK_ULONG          ulEncryptedDataLen, /* count of bytes of input */
  407.   CK_BYTE_PTR       pData,              /* receives decrypted output */
  408.   CK_ULONG_PTR      pulDataLen          /* receives decrypted byte count */
  409. );
  410. #endif
  411.  
  412.  
  413. /* C_DecryptUpdate continues a multiple-part decryption operation. */
  414. CK_EXTERN _CK_RV CK_FUNC(C_DecryptUpdate)
  415. #ifdef CK_NEED_ARG_LIST
  416. (
  417.   CK_SESSION_HANDLE hSession,            /* the session's handle */
  418.   CK_BYTE_PTR       pEncryptedPart,      /* input encrypted data */
  419.   CK_ULONG          ulEncryptedPartLen,  /* count of bytes of input */
  420.   CK_BYTE_PTR       pPart,               /* receives decrypted output */
  421.   CK_ULONG_PTR      pulPartLen           /* receives decrypted byte count */
  422. );
  423. #endif
  424.  
  425.  
  426. /* C_DecryptFinal finishes a multiple-part decryption operation. */
  427. CK_EXTERN _CK_RV CK_FUNC(C_DecryptFinal)
  428. #ifdef CK_NEED_ARG_LIST
  429. (
  430.   CK_SESSION_HANDLE hSession,       /* the session's handle */
  431.   CK_BYTE_PTR       pLastPart,      /* receives decrypted output */
  432.   CK_ULONG_PTR      pulLastPartLen  /* receives decrypted byte count */
  433. );
  434. #endif
  435.  
  436.  
  437.  
  438. /* Message digesting */
  439.  
  440. /* C_DigestInit initializes a message-digesting operation. */
  441. CK_EXTERN _CK_RV CK_FUNC(C_DigestInit)
  442. #ifdef CK_NEED_ARG_LIST
  443. (
  444.   CK_SESSION_HANDLE hSession,   /* the session's handle */
  445.   CK_MECHANISM_PTR  pMechanism  /* the digesting mechanism */
  446. );
  447. #endif
  448.  
  449.  
  450. /* C_Digest digests data in a single part. */
  451. CK_EXTERN _CK_RV CK_FUNC(C_Digest)
  452. #ifdef CK_NEED_ARG_LIST
  453. (
  454.   CK_SESSION_HANDLE hSession,     /* the session's handle */
  455.   CK_BYTE_PTR       pData,        /* data to be digested */
  456.   CK_ULONG          ulDataLen,    /* bytes of data to be digested */
  457.   CK_BYTE_PTR       pDigest,      /* receives the message digest */
  458.   CK_ULONG_PTR      pulDigestLen  /* receives byte length of digest */
  459. );
  460. #endif
  461.  
  462.  
  463. /* C_DigestUpdate continues a multiple-part message-digesting operation. */
  464. CK_EXTERN _CK_RV CK_FUNC(C_DigestUpdate)
  465. #ifdef CK_NEED_ARG_LIST
  466. (
  467.   CK_SESSION_HANDLE hSession,  /* the session's handle */
  468.   CK_BYTE_PTR       pPart,     /* data to be digested */
  469.   CK_ULONG          ulPartLen  /* bytes of data to be digested */
  470. );
  471. #endif
  472.  
  473.  
  474. /* C_DigestKey continues a multi-part message-digesting operation, by
  475.  * digesting the value of a secret key as part of the data already digested.
  476.  */
  477. CK_EXTERN _CK_RV CK_FUNC(C_DigestKey)
  478. #ifdef CK_NEED_ARG_LIST
  479. (
  480.   CK_SESSION_HANDLE hSession,  /* the session's handle */
  481.   CK_OBJECT_HANDLE  hKey       /* handle of secret key to digest */
  482. );
  483. #endif
  484.  
  485.  
  486. /* C_DigestFinal finishes a multiple-part message-digesting operation. */
  487. CK_EXTERN _CK_RV CK_FUNC(C_DigestFinal)
  488. #ifdef CK_NEED_ARG_LIST
  489. (
  490.   CK_SESSION_HANDLE hSession,     /* the session's handle */
  491.   CK_BYTE_PTR       pDigest,      /* receives the message digest */
  492.   CK_ULONG_PTR      pulDigestLen  /* receives byte count of digest */
  493. );
  494. #endif
  495.  
  496.  
  497.  
  498. /* Signing and MACing */
  499.  
  500. /* C_SignInit initializes a signature (private key encryption) operation,
  501.  * where the signature is (will be) an appendix to the data, 
  502.  * and plaintext cannot be recovered from the signature */
  503. CK_EXTERN _CK_RV CK_FUNC(C_SignInit)
  504. #ifdef CK_NEED_ARG_LIST
  505. (
  506.   CK_SESSION_HANDLE hSession,    /* the session's handle */
  507.   CK_MECHANISM_PTR  pMechanism,  /* the signature mechanism */
  508.   CK_OBJECT_HANDLE  hKey         /* handle of the signature key */
  509. );
  510. #endif
  511.  
  512.  
  513. /* C_Sign signs (encrypts with private key) data in a single part,
  514.  * where the signature is (will be) an appendix to the data, 
  515.  * and plaintext cannot be recovered from the signature */
  516. CK_EXTERN _CK_RV CK_FUNC(C_Sign)
  517. #ifdef CK_NEED_ARG_LIST
  518. (
  519.   CK_SESSION_HANDLE hSession,        /* the session's handle */
  520.   CK_BYTE_PTR       pData,           /* the data (digest) to be signed */
  521.   CK_ULONG          ulDataLen,       /* count of bytes to be signed */
  522.   CK_BYTE_PTR       pSignature,      /* receives the signature */
  523.   CK_ULONG_PTR      pulSignatureLen  /* receives byte count of signature */
  524. );
  525. #endif
  526.  
  527.  
  528. /* C_SignUpdate continues a multiple-part signature operation,
  529.  * where the signature is (will be) an appendix to the data, 
  530.  * and plaintext cannot be recovered from the signature */
  531. CK_EXTERN _CK_RV CK_FUNC(C_SignUpdate)
  532. #ifdef CK_NEED_ARG_LIST
  533. (
  534.   CK_SESSION_HANDLE hSession,  /* the session's handle */
  535.   CK_BYTE_PTR       pPart,     /* the data (digest) to be signed */
  536.   CK_ULONG          ulPartLen  /* count of bytes to be signed */
  537. );
  538. #endif
  539.  
  540.  
  541. /* C_SignFinal finishes a multiple-part signature operation, 
  542.  * returning the signature. */
  543. CK_EXTERN _CK_RV CK_FUNC(C_SignFinal)
  544. #ifdef CK_NEED_ARG_LIST
  545. (
  546.   CK_SESSION_HANDLE hSession,        /* the session's handle */
  547.   CK_BYTE_PTR       pSignature,      /* receives the signature */
  548.   CK_ULONG_PTR      pulSignatureLen  /* receives byte count of signature */
  549. );
  550. #endif
  551.  
  552.  
  553. /* C_SignRecoverInit initializes a signature operation,
  554.  * where the (digest) data can be recovered from the signature. 
  555.  * E.g. encryption with the user's private key */
  556. CK_EXTERN _CK_RV CK_FUNC(C_SignRecoverInit)
  557. #ifdef CK_NEED_ARG_LIST
  558. (
  559.   CK_SESSION_HANDLE hSession,   /* the session's handle */
  560.   CK_MECHANISM_PTR  pMechanism, /* the signature mechanism */
  561.   CK_OBJECT_HANDLE  hKey        /* handle of the signature key */
  562. );
  563. #endif
  564.  
  565.  
  566. /* C_SignRecover signs data in a single operation
  567.  * where the (digest) data can be recovered from the signature. 
  568.  * E.g. encryption with the user's private key */
  569. CK_EXTERN _CK_RV CK_FUNC(C_SignRecover)
  570. #ifdef CK_NEED_ARG_LIST
  571. (
  572.   CK_SESSION_HANDLE hSession,        /* the session's handle */
  573.   CK_BYTE_PTR       pData,           /* the data (digest) to be signed */
  574.   CK_ULONG          ulDataLen,       /* count of bytes to be signed */
  575.   CK_BYTE_PTR       pSignature,      /* receives the signature */
  576.   CK_ULONG_PTR      pulSignatureLen  /* receives byte count of signature */
  577. );
  578. #endif
  579.  
  580.  
  581.  
  582. /* Verifying signatures and MACs */
  583.  
  584. /* C_VerifyInit initializes a verification operation, 
  585.  * where the signature is an appendix to the data, 
  586.  * and plaintext cannot be recovered from the signature (e.g. DSA) */
  587. CK_EXTERN _CK_RV CK_FUNC(C_VerifyInit)
  588. #ifdef CK_NEED_ARG_LIST
  589. (
  590.   CK_SESSION_HANDLE hSession,    /* the session's handle */
  591.   CK_MECHANISM_PTR  pMechanism,  /* the verification mechanism */
  592.   CK_OBJECT_HANDLE  hKey         /* handle of the verification key */ 
  593. );
  594. #endif
  595.  
  596.  
  597. /* C_Verify verifies a signature in a single-part operation, 
  598.  * where the signature is an appendix to the data, 
  599.  * and plaintext cannot be recovered from the signature */
  600. CK_EXTERN _CK_RV CK_FUNC(C_Verify)
  601. #ifdef CK_NEED_ARG_LIST
  602. (
  603.   CK_SESSION_HANDLE hSession,       /* the session's handle */
  604.   CK_BYTE_PTR       pData,          /* plaintext data (digest) to compare */
  605.   CK_ULONG          ulDataLen,      /* length of data (digest) in bytes */
  606.   CK_BYTE_PTR       pSignature,     /* the signature to be verified */
  607.   CK_ULONG          ulSignatureLen  /* count of bytes of signature */
  608. );
  609. #endif
  610.  
  611.  
  612. /* C_VerifyUpdate continues a multiple-part verification operation, 
  613.  * where the signature is an appendix to the data, 
  614.  * and plaintext cannot be recovered from the signature */
  615. CK_EXTERN _CK_RV CK_FUNC(C_VerifyUpdate)
  616. #ifdef CK_NEED_ARG_LIST
  617. (
  618.   CK_SESSION_HANDLE hSession,  /* the session's handle */
  619.   CK_BYTE_PTR       pPart,     /* plaintext data (digest) to compare */
  620.   CK_ULONG          ulPartLen  /* length of data (digest) in bytes */
  621. );
  622. #endif
  623.  
  624.  
  625. /* C_VerifyFinal finishes a multiple-part verification operation, 
  626.  * checking the signature. */
  627. CK_EXTERN _CK_RV CK_FUNC(C_VerifyFinal)
  628. #ifdef CK_NEED_ARG_LIST
  629. (
  630.   CK_SESSION_HANDLE hSession,       /* the session's handle */
  631.   CK_BYTE_PTR       pSignature,     /* the signature to be verified */
  632.   CK_ULONG          ulSignatureLen  /* count of bytes of signature */
  633. );
  634. #endif
  635.  
  636.  
  637. /* C_VerifyRecoverInit initializes a signature verification operation, 
  638.  * where the data is recovered from the signature. 
  639.  * E.g. Decryption with the user's public key */
  640. CK_EXTERN _CK_RV CK_FUNC(C_VerifyRecoverInit)
  641. #ifdef CK_NEED_ARG_LIST
  642. (
  643.   CK_SESSION_HANDLE hSession,    /* the session's handle */
  644.   CK_MECHANISM_PTR  pMechanism,  /* the verification mechanism */
  645.   CK_OBJECT_HANDLE  hKey         /* handle of the verification key */
  646. );
  647. #endif
  648.  
  649.  
  650. /* C_VerifyRecover verifies a signature in a single-part operation, 
  651.  * where the data is recovered from the signature. 
  652.  * E.g. Decryption with the user's public key */
  653. CK_EXTERN _CK_RV CK_FUNC(C_VerifyRecover)
  654. #ifdef CK_NEED_ARG_LIST
  655. (
  656.   CK_SESSION_HANDLE hSession,        /* the session's handle */
  657.   CK_BYTE_PTR       pSignature,      /* the signature to be verified */
  658.   CK_ULONG          ulSignatureLen,  /* count of bytes of signature */
  659.   CK_BYTE_PTR       pData,           /* receives decrypted data (digest) */
  660.   CK_ULONG_PTR      pulDataLen       /* receives byte count of data */
  661. );
  662. #endif
  663.  
  664.  
  665.  
  666. /* Dual-function cryptographic operations */
  667.  
  668. /* C_DigestEncryptUpdate continues a multiple-part digesting and encryption operation. */
  669. CK_EXTERN _CK_RV CK_FUNC(C_DigestEncryptUpdate)
  670. #ifdef CK_NEED_ARG_LIST
  671. (
  672.   CK_SESSION_HANDLE hSession,            /* the session's handle */
  673.   CK_BYTE_PTR       pPart,               /* the plaintext data */
  674.   CK_ULONG          ulPartLen,           /* bytes of plaintext data */
  675.   CK_BYTE_PTR       pEncryptedPart,      /* receives encrypted data */
  676.   CK_ULONG_PTR      pulEncryptedPartLen  /* receives encrypted byte count */
  677. );
  678. #endif
  679.  
  680.  
  681. /* C_DecryptDigestUpdate continues a multiple-part decryption and
  682.  * digesting operation. */
  683. CK_EXTERN _CK_RV CK_FUNC(C_DecryptDigestUpdate)
  684. #ifdef CK_NEED_ARG_LIST
  685. (
  686.   CK_SESSION_HANDLE hSession,            /* the session's handle */
  687.   CK_BYTE_PTR       pEncryptedPart,      /* input encrypted data */
  688.   CK_ULONG          ulEncryptedPartLen,  /* count of bytes of input */
  689.   CK_BYTE_PTR       pPart,               /* receives decrypted output */
  690.   CK_ULONG_PTR      pulPartLen           /* receives decrypted byte count */
  691. );
  692. #endif
  693.  
  694.  
  695. /* C_SignEncryptUpdate continues a multiple-part signing and
  696.  * encryption operation. */
  697. CK_EXTERN _CK_RV CK_FUNC(C_SignEncryptUpdate)
  698. #ifdef CK_NEED_ARG_LIST
  699. (
  700.   CK_SESSION_HANDLE hSession,            /* the session's handle */
  701.   CK_BYTE_PTR       pPart,               /* the plaintext data */
  702.   CK_ULONG          ulPartLen,           /* bytes of plaintext data */
  703.   CK_BYTE_PTR       pEncryptedPart,      /* receives encrypted data */
  704.   CK_ULONG_PTR      pulEncryptedPartLen  /* receives encrypted byte count */
  705. );
  706. #endif
  707.  
  708.  
  709. /* C_DecryptVerifyUpdate continues a multiple-part decryption and
  710.  * verify operation. */
  711. CK_EXTERN _CK_RV CK_FUNC(C_DecryptVerifyUpdate)
  712. #ifdef CK_NEED_ARG_LIST
  713. (
  714.   CK_SESSION_HANDLE hSession,            /* the session's handle */
  715.   CK_BYTE_PTR       pEncryptedPart,      /* input encrypted data */
  716.   CK_ULONG          ulEncryptedPartLen,  /* count of byes of input */
  717.   CK_BYTE_PTR       pPart,               /* receives decrypted output */
  718.   CK_ULONG_PTR      pulPartLen           /* receives decrypted byte count */
  719. );
  720. #endif
  721.  
  722.  
  723.  
  724. /* Key management */
  725.  
  726. /* C_GenerateKey generates a secret key, creating a new key object. */
  727. CK_EXTERN _CK_RV CK_FUNC(C_GenerateKey)
  728. #ifdef CK_NEED_ARG_LIST
  729. (
  730.   CK_SESSION_HANDLE    hSession,    /* the session's handle */
  731.   CK_MECHANISM_PTR     pMechanism,  /* the key generation mechanism */
  732.   CK_ATTRIBUTE_PTR     pTemplate,   /* template for the new key */
  733.   CK_ULONG             ulCount,     /* number of attributes in template */
  734.   CK_OBJECT_HANDLE_PTR phKey        /* receives handle of new key */
  735. );
  736. #endif
  737.  
  738.  
  739. /* C_GenerateKeyPair generates a public-key/private-key pair, 
  740.  * creating new key objects. */
  741. CK_EXTERN _CK_RV CK_FUNC(C_GenerateKeyPair)
  742. #ifdef CK_NEED_ARG_LIST
  743. (
  744.   CK_SESSION_HANDLE    hSession,                    /* the session's handle */
  745.   CK_MECHANISM_PTR     pMechanism,                  /* the key gen. mech. */
  746.   CK_ATTRIBUTE_PTR     pPublicKeyTemplate,          /* pub. attr. template */
  747.   CK_ULONG             ulPublicKeyAttributeCount,   /* # of pub. attrs. */
  748.   CK_ATTRIBUTE_PTR     pPrivateKeyTemplate,         /* priv. attr. template */
  749.   CK_ULONG             ulPrivateKeyAttributeCount,  /* # of priv. attrs. */
  750.   CK_OBJECT_HANDLE_PTR phPublicKey,                 /* gets pub. key handle */
  751.   CK_OBJECT_HANDLE_PTR phPrivateKey                 /* gets priv. key handle */
  752. );
  753. #endif
  754.  
  755.  
  756. /* C_WrapKey wraps (i.e., encrypts) a key. */
  757. CK_EXTERN _CK_RV CK_FUNC(C_WrapKey)
  758. #ifdef CK_NEED_ARG_LIST
  759. (
  760.   CK_SESSION_HANDLE hSession,        /* the session's handle */
  761.   CK_MECHANISM_PTR  pMechanism,      /* the wrapping mechanism */
  762.   CK_OBJECT_HANDLE  hWrappingKey,    /* handle of the wrapping key */
  763.   CK_OBJECT_HANDLE  hKey,            /* handle of the key to be wrapped */
  764.   CK_BYTE_PTR       pWrappedKey,     /* receives the wrapped key */
  765.   CK_ULONG_PTR      pulWrappedKeyLen /* receives byte size of wrapped key */
  766. );
  767. #endif
  768.  
  769.  
  770. /* C_UnwrapKey unwraps (decrypts) a wrapped key, creating a new key object. */
  771. CK_EXTERN _CK_RV CK_FUNC(C_UnwrapKey)
  772. #ifdef CK_NEED_ARG_LIST
  773. (
  774.   CK_SESSION_HANDLE    hSession,          /* the session's handle */
  775.   CK_MECHANISM_PTR     pMechanism,        /* the unwrapping mechanism */
  776.   CK_OBJECT_HANDLE     hUnwrappingKey,    /* handle of the unwrapping key */
  777.   CK_BYTE_PTR          pWrappedKey,       /* the wrapped key */
  778.   CK_ULONG             ulWrappedKeyLen,   /* bytes length of wrapped key */
  779.   CK_ATTRIBUTE_PTR     pTemplate,         /* template for the new key */
  780.   CK_ULONG             ulAttributeCount,  /* # of attributes in template */
  781.   CK_OBJECT_HANDLE_PTR phKey              /* gets handle of recovered key */
  782. );
  783. #endif
  784.  
  785.  
  786. /* C_DeriveKey derives a key from a base key, creating a new key object. */
  787. CK_EXTERN _CK_RV CK_FUNC(C_DeriveKey)
  788. #ifdef CK_NEED_ARG_LIST
  789. (
  790.   CK_SESSION_HANDLE    hSession,          /* the session's handle */
  791.   CK_MECHANISM_PTR     pMechanism,        /* the key derivation mechanism */
  792.   CK_OBJECT_HANDLE     hBaseKey,          /* handle of the base key */
  793.   CK_ATTRIBUTE_PTR     pTemplate,         /* template for the new key */
  794.   CK_ULONG             ulAttributeCount,  /* # of attributes in template */
  795.   CK_OBJECT_HANDLE_PTR phKey              /* gets handle of derived key */
  796. );
  797. #endif
  798.  
  799.  
  800.  
  801. /* Random number generation */
  802.  
  803. /* C_SeedRandom mixes additional seed material into the token's random number 
  804.  * generator. */
  805. CK_EXTERN _CK_RV CK_FUNC(C_SeedRandom)
  806. #ifdef CK_NEED_ARG_LIST
  807. (
  808.   CK_SESSION_HANDLE hSession,  /* the session's handle */
  809.   CK_BYTE_PTR       pSeed,     /* the seed material */
  810.   CK_ULONG          ulSeedLen  /* count of bytes of seed material */
  811. );
  812. #endif
  813.  
  814.  
  815. /* C_GenerateRandom generates random data. */
  816. CK_EXTERN _CK_RV CK_FUNC(C_GenerateRandom)
  817. #ifdef CK_NEED_ARG_LIST
  818. (
  819.   CK_SESSION_HANDLE hSession,    /* the session's handle */
  820.   CK_BYTE_PTR       RandomData,  /* receives the random data */
  821.   CK_ULONG          ulRandomLen  /* number of bytes to be generated */
  822. );
  823. #endif
  824.  
  825.  
  826.  
  827. /* Parallel function management */
  828.  
  829. /* C_GetFunctionStatus obtains an updated status of a function running 
  830.  * in parallel with an application. */
  831. CK_EXTERN _CK_RV CK_FUNC(C_GetFunctionStatus)
  832. #ifdef CK_NEED_ARG_LIST
  833. (
  834.   CK_SESSION_HANDLE hSession  /* the session's handle */
  835. );
  836. #endif
  837.  
  838.  
  839. /* C_CancelFunction cancels a function running in parallel. */
  840. CK_EXTERN _CK_RV CK_FUNC(C_CancelFunction)
  841. #ifdef CK_NEED_ARG_LIST
  842. (
  843.   CK_SESSION_HANDLE hSession  /* the session's handle */
  844. );
  845. #endif
  846.