pkcs11f.h
上传用户:lyxiangda
上传日期:2007-01-12
资源大小:3042k
文件大小:29k
源码类别:

CA认证

开发平台:

WINDOWS

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