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