pkcs11.h 24 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363364365366367368369370371372373374375376377378379380381382383384385386387388389390391392393394395396397398399400401402403404405406407408409410411412413414415416417418419420421422423424425426427428429430431432433434435436437438439440441442443444445446447448449450451452453454455456457458459460461462463464465466467468469470471472473474475476477478479480481482483484485486487488489490491492493494495496497498499500501502503504505506507508509510511512513514515516517518519520521522523524525526527528529530531532533534535536537538539540541
  1. /* pkcs11.h
  2. *
  3. * Copyright (C) 2006-2022 wolfSSL Inc.
  4. *
  5. * This file is part of wolfSSL.
  6. *
  7. * wolfSSL is free software; you can redistribute it and/or modify
  8. * it under the terms of the GNU General Public License as published by
  9. * the Free Software Foundation; either version 2 of the License, or
  10. * (at your option) any later version.
  11. *
  12. * wolfSSL is distributed in the hope that it will be useful,
  13. * but WITHOUT ANY WARRANTY; without even the implied warranty of
  14. * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
  15. * GNU General Public License for more details.
  16. *
  17. * You should have received a copy of the GNU General Public License
  18. * along with this program; if not, write to the Free Software
  19. * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1335, USA
  20. */
  21. #ifndef _PKCS11_H_
  22. #define _PKCS11_H_
  23. #ifdef __cplusplus
  24. extern "C" {
  25. #endif
  26. #ifndef NULL_PTR
  27. #define NULL_PTR 0
  28. #endif
  29. #define CK_TRUE 1
  30. #define CK_FALSE 0
  31. #define CK_INVALID_HANDLE 0UL
  32. #define CKN_SURRENDER 0UL
  33. #define CKF_TOKEN_PRESENT 0x00000001UL
  34. #define CKF_REMOVABLE_DEVICE 0x00000002UL
  35. #define CKF_HW_SLOT 0x00000004UL
  36. #define CKF_HW 0x00000001UL
  37. #define CKF_ENCRYPT 0x00000100UL
  38. #define CKF_DECRYPT 0x00000200UL
  39. #define CKF_DIGEST 0x00000400UL
  40. #define CKF_SIGN 0x00000800UL
  41. #define CKF_SIGN_RECOVER 0x00001000UL
  42. #define CKF_VERIFY 0x00002000UL
  43. #define CKF_VERIFY_RECOVER 0x00004000UL
  44. #define CKF_GENERATE 0x00008000UL
  45. #define CKF_GENERATE_KEY_PAIR 0x00010000UL
  46. #define CKF_WRAP 0x00020000UL
  47. #define CKF_UNWRAP 0x00040000UL
  48. #define CKF_DERIVE 0x00080000UL
  49. #define CKF_EC_F_P 0x00100000UL
  50. #define CKF_EC_F_2M 0x00200000UL
  51. #define CKF_EC_ECPARAMETERS 0x00400000UL
  52. #define CKF_EC_NAMEDCURVE 0x00800000UL
  53. #define CKF_EC_UNCOMPRESS 0x01000000UL
  54. #define CKF_EC_COMPRESS 0x02000000UL
  55. #define CKF_LIBRARY_CANT_CREATE_OS_THREADS 0x00000001UL
  56. #define CKF_OS_LOCKING_OK 0x00000002UL
  57. #define CKU_SO 0UL
  58. #define CKU_USER 1UL
  59. #define CKU_CONTEXT_SPECIFIC 2UL
  60. #define CKF_RW_SESSION 0x00000002UL
  61. #define CKF_SERIAL_SESSION 0x00000004UL
  62. #define CKO_PUBLIC_KEY 0x00000002UL
  63. #define CKO_PRIVATE_KEY 0x00000003UL
  64. #define CKO_SECRET_KEY 0x00000004UL
  65. #define CKK_RSA 0x00000000UL
  66. #define CKK_DH 0x00000002UL
  67. #define CKK_EC 0x00000003UL
  68. #define CKK_GENERIC_SECRET 0x00000010UL
  69. #define CKK_AES 0x0000001FUL
  70. #define CKK_MD5_HMAC 0x00000027UL
  71. #define CKK_SHA_1_HMAC 0x00000028UL
  72. #define CKK_SHA256_HMAC 0x0000002bUL
  73. #define CKK_SHA384_HMAC 0x0000002cUL
  74. #define CKK_SHA512_HMAC 0x0000002dUL
  75. #define CKK_SHA224_HMAC 0x0000002eUL
  76. #define CKA_CLASS 0x00000000UL
  77. #define CKA_TOKEN 0x00000001UL
  78. #define CKA_PRIVATE 0x00000002UL
  79. #define CKA_LABEL 0x00000003UL
  80. #define CKA_VALUE 0x00000011UL
  81. #define CKA_OBJECT_ID 0x00000012UL
  82. #define CKA_OWNER 0x00000084UL
  83. #define CKA_TRUSTED 0x00000086UL
  84. #define CKA_KEY_TYPE 0x00000100UL
  85. #define CKA_ID 0x00000102UL
  86. #define CKA_SENSITIVE 0x00000103UL
  87. #define CKA_ENCRYPT 0x00000104UL
  88. #define CKA_DECRYPT 0x00000105UL
  89. #define CKA_WRAP 0x00000106UL
  90. #define CKA_UNWRAP 0x00000107UL
  91. #define CKA_SIGN 0x00000108UL
  92. #define CKA_SIGN_RECOVER 0x00000109UL
  93. #define CKA_VERIFY 0x0000010AUL
  94. #define CKA_VERIFY_RECOVER 0x0000010BUL
  95. #define CKA_DERIVE 0x0000010CUL
  96. #define CKA_MODULUS 0x00000120UL
  97. #define CKA_MODULUS_BITS 0x00000121UL
  98. #define CKA_PUBLIC_EXPONENT 0x00000122UL
  99. #define CKA_PRIVATE_EXPONENT 0x00000123UL
  100. #define CKA_PRIME_1 0x00000124UL
  101. #define CKA_PRIME_2 0x00000125UL
  102. #define CKA_EXPONENT_1 0x00000126UL
  103. #define CKA_EXPONENT_2 0x00000127UL
  104. #define CKA_COEFFICIENT 0x00000128UL
  105. #define CKA_PUBLIC_KEY_INFO 0x00000129UL
  106. #define CKA_PRIME 0x00000130UL
  107. #define CKA_BASE 0x00000132UL
  108. #define CKA_PRIME_BITS 0x00000133UL
  109. #define CKA_VALUE_BITS 0x00000160UL
  110. #define CKA_VALUE_LEN 0x00000161UL
  111. #define CKA_EXTRACTABLE 0x00000162UL
  112. #define CKA_LOCAL 0x00000163UL
  113. #define CKA_NEVER_EXTRACTABLE 0x00000164UL
  114. #define CKA_ALWAYS_SENSITIVE 0x00000165UL
  115. #define CKA_KEY_GEN_MECHANISM 0x00000166UL
  116. #define CKA_MODIFIABLE 0x00000170UL
  117. #define CKA_COPYABLE 0x00000171UL
  118. #define CKA_DESTROYABLE 0x00000172UL
  119. #define CKA_EC_PARAMS 0x00000180UL
  120. #define CKA_EC_POINT 0x00000181UL
  121. #define CKA_ALWAYS_AUTHENTICATE 0x00000202UL
  122. #define CKA_HW_FEATURE_TYPE 0x00000300UL
  123. #define CKA_RESET_ON_INIT 0x00000301UL
  124. #define CKA_HAS_RESET 0x00000302UL
  125. #define CKM_RSA_PKCS_KEY_PAIR_GEN 0x00000000UL
  126. #define CKM_RSA_X_509 0x00000003UL
  127. #define CKM_DH_PKCS_KEY_PAIR_GEN 0x00000020UL
  128. #define CKM_DH_PKCS_DERIVE 0x00000021UL
  129. #define CKM_MD5_HMAC 0x00000211UL
  130. #define CKM_SHA_1_HMAC 0x00000221UL
  131. #define CKM_SHA256_HMAC 0x00000251UL
  132. #define CKM_SHA224_HMAC 0x00000256UL
  133. #define CKM_SHA384_HMAC 0x00000261UL
  134. #define CKM_SHA512_HMAC 0x00000271UL
  135. #define CKM_GENERIC_SECRET_KEY_GEN 0x00000350UL
  136. #define CKM_EC_KEY_PAIR_GEN 0x00001040UL
  137. #define CKM_ECDSA 0x00001041UL
  138. #define CKM_ECDH1_DERIVE 0x00001050UL
  139. #define CKM_ECDH1_COFACTOR_DERIVE 0x00001051UL
  140. #define CKM_AES_KEY_GEN 0x00001080UL
  141. #define CKM_AES_CBC 0x00001082UL
  142. #define CKM_AES_GCM 0x00001087UL
  143. #define CKR_OK 0x00000000UL
  144. #define CKR_MECHANISM_INVALID 0x00000070UL
  145. #define CKR_SIGNATURE_INVALID 0x000000C0UL
  146. #define CKD_NULL 0x00000001UL
  147. typedef unsigned char CK_BYTE;
  148. typedef CK_BYTE CK_CHAR;
  149. typedef CK_BYTE CK_UTF8CHAR;
  150. typedef CK_BYTE CK_BBOOL;
  151. typedef unsigned long int CK_ULONG;
  152. typedef long int CK_LONG;
  153. typedef CK_ULONG CK_FLAGS;
  154. typedef CK_BYTE* CK_BYTE_PTR;
  155. typedef CK_CHAR* CK_CHAR_PTR;
  156. typedef CK_UTF8CHAR* CK_UTF8CHAR_PTR;
  157. typedef CK_ULONG* CK_ULONG_PTR;
  158. typedef void* CK_VOID_PTR;
  159. typedef CK_VOID_PTR* CK_VOID_PTR_PTR;
  160. typedef CK_ULONG CK_RV;
  161. typedef struct CK_VERSION {
  162. CK_BYTE major;
  163. CK_BYTE minor;
  164. } CK_VERSION;
  165. typedef CK_VERSION* CK_VERSION_PTR;
  166. /* Info Types */
  167. typedef struct CK_INFO {
  168. CK_VERSION cryptokiVersion;
  169. CK_UTF8CHAR manufacturerID[32];
  170. CK_FLAGS flags;
  171. CK_UTF8CHAR libraryDescription[32];
  172. CK_VERSION libraryVersion;
  173. } CK_INFO;
  174. typedef CK_INFO* CK_INFO_PTR;
  175. /* Slot Types */
  176. typedef CK_ULONG CK_SLOT_ID;
  177. typedef CK_SLOT_ID* CK_SLOT_ID_PTR;
  178. typedef struct CK_SLOT_INFO {
  179. CK_UTF8CHAR slotDescription[64];
  180. CK_UTF8CHAR manufacturerID[32];
  181. CK_FLAGS flags;
  182. CK_VERSION hardwareVersion;
  183. CK_VERSION firmwareVersion;
  184. } CK_SLOT_INFO;
  185. typedef CK_SLOT_INFO* CK_SLOT_INFO_PTR;
  186. /* Token Types */
  187. typedef struct CK_TOKEN_INFO {
  188. CK_UTF8CHAR label[32];
  189. CK_UTF8CHAR manufacturerID[32];
  190. CK_UTF8CHAR model[16];
  191. CK_CHAR serialNumber[16];
  192. CK_FLAGS flags;
  193. CK_ULONG ulMaxSessionCount;
  194. CK_ULONG ulSessionCount;
  195. CK_ULONG ulMaxRwSessionCount;
  196. CK_ULONG ulRwSessionCount;
  197. CK_ULONG ulMaxPinLen;
  198. CK_ULONG ulMinPinLen;
  199. CK_ULONG ulTotalPublicMemory;
  200. CK_ULONG ulFreePublicMemory;
  201. CK_ULONG ulTotalPrivateMemory;
  202. CK_ULONG ulFreePrivateMemory;
  203. CK_VERSION hardwareVersion;
  204. CK_VERSION firmwareVersion;
  205. CK_CHAR utcTime[16];
  206. } CK_TOKEN_INFO;
  207. typedef CK_TOKEN_INFO* CK_TOKEN_INFO_PTR;
  208. /* Session Types */
  209. typedef CK_ULONG CK_SESSION_HANDLE;
  210. typedef CK_SESSION_HANDLE* CK_SESSION_HANDLE_PTR;
  211. typedef CK_ULONG CK_USER_TYPE;
  212. typedef CK_ULONG CK_STATE;
  213. typedef struct CK_SESSION_INFO {
  214. CK_SLOT_ID slotID;
  215. CK_STATE state;
  216. CK_FLAGS flags;
  217. CK_ULONG ulDeviceError;
  218. } CK_SESSION_INFO;
  219. typedef CK_SESSION_INFO* CK_SESSION_INFO_PTR;
  220. /* Object Types */
  221. typedef CK_ULONG CK_OBJECT_HANDLE;
  222. typedef CK_OBJECT_HANDLE* CK_OBJECT_HANDLE_PTR;
  223. typedef CK_ULONG CK_OBJECT_CLASS;
  224. typedef CK_OBJECT_CLASS* CK_OBJECT_CLASS_PTR;
  225. typedef CK_ULONG CK_KEY_TYPE;
  226. typedef CK_ULONG CK_ATTRIBUTE_TYPE;
  227. typedef struct CK_ATTRIBUTE {
  228. CK_ATTRIBUTE_TYPE type;
  229. CK_VOID_PTR pValue;
  230. CK_ULONG ulValueLen;
  231. } CK_ATTRIBUTE;
  232. typedef CK_ATTRIBUTE* CK_ATTRIBUTE_PTR;
  233. /* Mechanism Types */
  234. typedef CK_ULONG CK_MECHANISM_TYPE;
  235. typedef CK_MECHANISM_TYPE* CK_MECHANISM_TYPE_PTR;
  236. typedef struct CK_MECHANISM {
  237. CK_MECHANISM_TYPE mechanism;
  238. CK_VOID_PTR pParameter;
  239. CK_ULONG ulParameterLen;
  240. } CK_MECHANISM;
  241. typedef CK_MECHANISM* CK_MECHANISM_PTR;
  242. typedef struct CK_MECHANISM_INFO {
  243. CK_ULONG ulMinKeySize;
  244. CK_ULONG ulMaxKeySize;
  245. CK_FLAGS flags;
  246. } CK_MECHANISM_INFO;
  247. typedef CK_MECHANISM_INFO * CK_MECHANISM_INFO_PTR;
  248. typedef CK_ULONG CK_NOTIFICATION;
  249. typedef CK_RV (*CK_NOTIFY)(CK_SESSION_HANDLE hSession, CK_NOTIFICATION event,
  250. CK_VOID_PTR pApplication);
  251. /* Threading types. */
  252. typedef CK_RV (*CK_CREATEMUTEX)(CK_VOID_PTR_PTR ppMutex);
  253. typedef CK_RV (*CK_DESTROYMUTEX)(CK_VOID_PTR pMutex);
  254. typedef CK_RV (*CK_LOCKMUTEX)(CK_VOID_PTR pMutex);
  255. typedef CK_RV (*CK_UNLOCKMUTEX)(CK_VOID_PTR pMutex);
  256. typedef struct CK_C_INITIALIZE_ARGS {
  257. CK_CREATEMUTEX CreateMutex;
  258. CK_DESTROYMUTEX DestroyMutex;
  259. CK_LOCKMUTEX LockMutex;
  260. CK_UNLOCKMUTEX UnlockMutex;
  261. CK_FLAGS flags;
  262. CK_VOID_PTR pReserved;
  263. } CK_C_INITIALIZE_ARGS;
  264. typedef CK_C_INITIALIZE_ARGS* CK_C_INITIALIZE_ARGS_PTR;
  265. /* Cryptographic algorithm types. */
  266. typedef CK_ULONG CK_EC_KDF_TYPE;
  267. typedef struct CK_ECDH1_DERIVE_PARAMS {
  268. CK_EC_KDF_TYPE kdf;
  269. CK_ULONG ulSharedDataLen;
  270. CK_BYTE_PTR pSharedData;
  271. CK_ULONG ulPublicDataLen;
  272. CK_BYTE_PTR pPublicData;
  273. } CK_ECDH1_DERIVE_PARAMS;
  274. typedef CK_ECDH1_DERIVE_PARAMS* CK_ECDH1_DERIVE_PARAMS_PTR;
  275. typedef struct CK_GCM_PARAMS {
  276. CK_BYTE_PTR pIv;
  277. CK_ULONG ulIvLen;
  278. CK_ULONG ulIvBits;
  279. CK_BYTE_PTR pAAD;
  280. CK_ULONG ulAADLen;
  281. CK_ULONG ulTagBits;
  282. } CK_GCM_PARAMS;
  283. typedef CK_GCM_PARAMS* CK_GCM_PARAMS_PTR;
  284. /* Function list types. */
  285. typedef struct CK_FUNCTION_LIST CK_FUNCTION_LIST;
  286. typedef CK_FUNCTION_LIST* CK_FUNCTION_LIST_PTR;
  287. typedef CK_FUNCTION_LIST_PTR* CK_FUNCTION_LIST_PTR_PTR;
  288. typedef CK_RV (*CK_C_GetFunctionList)(CK_FUNCTION_LIST_PTR_PTR ppFunctionList);
  289. #ifdef HAVE_PKCS11_STATIC
  290. CK_RV C_GetFunctionList(CK_FUNCTION_LIST_PTR_PTR ppFunctionList);
  291. #endif
  292. struct CK_FUNCTION_LIST {
  293. CK_VERSION version;
  294. CK_RV (*C_Initialize)(CK_VOID_PTR pInitArgs);
  295. CK_RV (*C_Finalize)(CK_VOID_PTR pReserved);
  296. CK_RV (*C_GetInfo)(CK_INFO_PTR pInfo);
  297. CK_RV (*C_GetFunctionList)(CK_FUNCTION_LIST_PTR_PTR ppFunctionList);
  298. CK_RV (*C_GetSlotList)(CK_BBOOL tokenPresent, CK_SLOT_ID_PTR pSlotList,
  299. CK_ULONG_PTR pulCount);
  300. CK_RV (*C_GetSlotInfo)(CK_SLOT_ID slotID, CK_SLOT_INFO_PTR pInfo);
  301. CK_RV (*C_GetTokenInfo)(CK_SLOT_ID slotID, CK_TOKEN_INFO_PTR pInfo);
  302. CK_RV (*C_GetMechanismList)(CK_SLOT_ID slotID,
  303. CK_MECHANISM_TYPE_PTR pMechanismList,
  304. CK_ULONG_PTR pulCount);
  305. CK_RV (*C_GetMechanismInfo)(CK_SLOT_ID slotID, CK_MECHANISM_TYPE type,
  306. CK_MECHANISM_INFO_PTR pInfo);
  307. CK_RV (*C_InitToken)(CK_SLOT_ID slotID, CK_UTF8CHAR_PTR pPin,
  308. CK_ULONG ulPinLen, CK_UTF8CHAR_PTR pLabel);
  309. CK_RV (*C_InitPIN)(CK_SESSION_HANDLE hSession, CK_UTF8CHAR_PTR pPin,
  310. CK_ULONG ulPinLen);
  311. CK_RV (*C_SetPIN)(CK_SESSION_HANDLE hSession, CK_UTF8CHAR_PTR pOldPin,
  312. CK_ULONG ulOldLen, CK_UTF8CHAR_PTR pNewPin,
  313. CK_ULONG ulNewLen);
  314. CK_RV (*C_OpenSession)(CK_SLOT_ID slotID, CK_FLAGS flags,
  315. CK_VOID_PTR pApplication, CK_NOTIFY Notify,
  316. CK_SESSION_HANDLE_PTR phSession);
  317. CK_RV (*C_CloseSession)(CK_SESSION_HANDLE hSession);
  318. CK_RV (*C_CloseAllSessions)(CK_SLOT_ID slotID);
  319. CK_RV (*C_GetSessionInfo)(CK_SESSION_HANDLE hSession,
  320. CK_SESSION_INFO_PTR pInfo);
  321. CK_RV (*C_GetOperationState)(CK_SESSION_HANDLE hSession,
  322. CK_BYTE_PTR pOperationState,
  323. CK_ULONG_PTR pulOperationStateLen);
  324. CK_RV (*C_SetOperationState)(CK_SESSION_HANDLE hSession,
  325. CK_BYTE_PTR pOperationState,
  326. CK_ULONG ulOperationStateLen,
  327. CK_OBJECT_HANDLE hEncryptionKey,
  328. CK_OBJECT_HANDLE hAuthenticationKey);
  329. CK_RV (*C_Login)(CK_SESSION_HANDLE hSession, CK_USER_TYPE userType,
  330. CK_UTF8CHAR_PTR pPin, CK_ULONG ulPinLen);
  331. CK_RV (*C_Logout)(CK_SESSION_HANDLE hSession);
  332. CK_RV (*C_CreateObject)(CK_SESSION_HANDLE hSession,
  333. CK_ATTRIBUTE_PTR pTemplate, CK_ULONG ulCount,
  334. CK_OBJECT_HANDLE_PTR phObject);
  335. CK_RV (*C_CopyObject)(CK_SESSION_HANDLE hSession, CK_OBJECT_HANDLE hObject,
  336. CK_ATTRIBUTE_PTR pTemplate, CK_ULONG ulCount,
  337. CK_OBJECT_HANDLE_PTR phNewObject);
  338. CK_RV (*C_DestroyObject)(CK_SESSION_HANDLE hSession,
  339. CK_OBJECT_HANDLE hObject);
  340. CK_RV (*C_GetObjectSize)(CK_SESSION_HANDLE hSession,
  341. CK_OBJECT_HANDLE hObject, CK_ULONG_PTR pulSize);
  342. CK_RV (*C_GetAttributeValue)(CK_SESSION_HANDLE hSession,
  343. CK_OBJECT_HANDLE hObject,
  344. CK_ATTRIBUTE_PTR pTemplate, CK_ULONG ulCount);
  345. CK_RV (*C_SetAttributeValue)(CK_SESSION_HANDLE hSession,
  346. CK_OBJECT_HANDLE hObject,
  347. CK_ATTRIBUTE_PTR pTemplate, CK_ULONG ulCount);
  348. CK_RV (*C_FindObjectsInit)(CK_SESSION_HANDLE hSession,
  349. CK_ATTRIBUTE_PTR pTemplate, CK_ULONG ulCount);
  350. CK_RV (*C_FindObjects)(CK_SESSION_HANDLE hSession,
  351. CK_OBJECT_HANDLE_PTR phObject,
  352. CK_ULONG ulMaxObjectCount,
  353. CK_ULONG_PTR pulObjectCount);
  354. CK_RV (*C_FindObjectsFinal)(CK_SESSION_HANDLE hSession);
  355. CK_RV (*C_EncryptInit)(CK_SESSION_HANDLE hSession,
  356. CK_MECHANISM_PTR pMechanism, CK_OBJECT_HANDLE hKey);
  357. CK_RV (*C_Encrypt)(CK_SESSION_HANDLE hSession, CK_BYTE_PTR pData,
  358. CK_ULONG ulDataLen, CK_BYTE_PTR pEncryptedData,
  359. CK_ULONG_PTR pulEncryptedDataLen);
  360. CK_RV (*C_EncryptUpdate)(CK_SESSION_HANDLE hSession, CK_BYTE_PTR pPart,
  361. CK_ULONG ulPartLen, CK_BYTE_PTR pEncryptedPart,
  362. CK_ULONG_PTR pulEncryptedPartLen);
  363. CK_RV (*C_EncryptFinal)(CK_SESSION_HANDLE hSession,
  364. CK_BYTE_PTR pLastEncryptedPart,
  365. CK_ULONG_PTR pulLastEncryptedPartLen);
  366. CK_RV (*C_DecryptInit)(CK_SESSION_HANDLE hSession,
  367. CK_MECHANISM_PTR pMechanism, CK_OBJECT_HANDLE hKey);
  368. CK_RV (*C_Decrypt)(CK_SESSION_HANDLE hSession, CK_BYTE_PTR pEncryptedData,
  369. CK_ULONG ulEncryptedDataLen, CK_BYTE_PTR pData,
  370. CK_ULONG_PTR pulDataLen);
  371. CK_RV (*C_DecryptUpdate)(CK_SESSION_HANDLE hSession,
  372. CK_BYTE_PTR pEncryptedPart,
  373. CK_ULONG ulEncryptedPartLen, CK_BYTE_PTR pPart,
  374. CK_ULONG_PTR pulPartLen);
  375. CK_RV (*C_DecryptFinal)(CK_SESSION_HANDLE hSession, CK_BYTE_PTR pLastPart,
  376. CK_ULONG_PTR pulLastPartLen);
  377. CK_RV (*C_DigestInit)(CK_SESSION_HANDLE hSession,
  378. CK_MECHANISM_PTR pMechanism);
  379. CK_RV (*C_Digest)(CK_SESSION_HANDLE hSession, CK_BYTE_PTR pData,
  380. CK_ULONG ulDataLen, CK_BYTE_PTR pDigest,
  381. CK_ULONG_PTR pulDigestLen);
  382. CK_RV (*C_DigestUpdate)(CK_SESSION_HANDLE hSession, CK_BYTE_PTR pPart,
  383. CK_ULONG ulPartLen);
  384. CK_RV (*C_DigestKey)(CK_SESSION_HANDLE hSession, CK_OBJECT_HANDLE hKey);
  385. CK_RV (*C_DigestFinal)(CK_SESSION_HANDLE hSession, CK_BYTE_PTR pDigest,
  386. CK_ULONG_PTR pulDigestLen);
  387. CK_RV (*C_SignInit)(CK_SESSION_HANDLE hSession, CK_MECHANISM_PTR pMechanism,
  388. CK_OBJECT_HANDLE hKey);
  389. CK_RV (*C_Sign)(CK_SESSION_HANDLE hSession, CK_BYTE_PTR pData,
  390. CK_ULONG ulDataLen, CK_BYTE_PTR pSignature,
  391. CK_ULONG_PTR pulSignatureLen);
  392. CK_RV (*C_SignUpdate)(CK_SESSION_HANDLE hSession, CK_BYTE_PTR pPart,
  393. CK_ULONG ulPartLen);
  394. CK_RV (*C_SignFinal)(CK_SESSION_HANDLE hSession, CK_BYTE_PTR pSignature,
  395. CK_ULONG_PTR pulSignatureLen);
  396. CK_RV (*C_SignRecoverInit)(CK_SESSION_HANDLE hSession,
  397. CK_MECHANISM_PTR pMechanism,
  398. CK_OBJECT_HANDLE hKey);
  399. CK_RV (*C_SignRecover)(CK_SESSION_HANDLE hSession, CK_BYTE_PTR pData,
  400. CK_ULONG ulDataLen, CK_BYTE_PTR pSignature,
  401. CK_ULONG_PTR pulSignatureLen);
  402. CK_RV (*C_VerifyInit)(CK_SESSION_HANDLE hSession,
  403. CK_MECHANISM_PTR pMechanism, CK_OBJECT_HANDLE hKey);
  404. CK_RV (*C_Verify)(CK_SESSION_HANDLE hSession, CK_BYTE_PTR pData,
  405. CK_ULONG ulDataLen, CK_BYTE_PTR pSignature,
  406. CK_ULONG ulSignatureLen);
  407. CK_RV (*C_VerifyUpdate)(CK_SESSION_HANDLE hSession, CK_BYTE_PTR pPart,
  408. CK_ULONG ulPartLen);
  409. CK_RV (*C_VerifyFinal)(CK_SESSION_HANDLE hSession,
  410. CK_BYTE_PTR pSignature, CK_ULONG ulSignatureLen);
  411. CK_RV (*C_VerifyRecoverInit)(CK_SESSION_HANDLE hSession,
  412. CK_MECHANISM_PTR pMechanism,
  413. CK_OBJECT_HANDLE hKey);
  414. CK_RV (*C_VerifyRecover)(CK_SESSION_HANDLE hSession,
  415. CK_BYTE_PTR pSignature, CK_ULONG ulSignatureLen,
  416. CK_BYTE_PTR pData, CK_ULONG_PTR pulDataLen);
  417. CK_RV (*C_DigestEncryptUpdate)(CK_SESSION_HANDLE hSession,
  418. CK_BYTE_PTR pPart, CK_ULONG ulPartLen,
  419. CK_BYTE_PTR pEncryptedPart,
  420. CK_ULONG_PTR pulEncryptedPartLen);
  421. CK_RV (*C_DecryptDigestUpdate)(CK_SESSION_HANDLE hSession,
  422. CK_BYTE_PTR pEncryptedPart,
  423. CK_ULONG ulEncryptedPartLen,
  424. CK_BYTE_PTR pPart, CK_ULONG_PTR pulPartLen);
  425. CK_RV (*C_SignEncryptUpdate)(CK_SESSION_HANDLE hSession,
  426. CK_BYTE_PTR pPart, CK_ULONG ulPartLen,
  427. CK_BYTE_PTR pEncryptedPart,
  428. CK_ULONG_PTR pulEncryptedPartLen);
  429. CK_RV (*C_DecryptVerifyUpdate)(CK_SESSION_HANDLE hSession,
  430. CK_BYTE_PTR pEncryptedPart,
  431. CK_ULONG ulEncryptedPartLen,
  432. CK_BYTE_PTR pPart, CK_ULONG_PTR pulPartLen);
  433. CK_RV (*C_GenerateKey)(CK_SESSION_HANDLE hSession,
  434. CK_MECHANISM_PTR pMechanism,
  435. CK_ATTRIBUTE_PTR pTemplate, CK_ULONG ulCount,
  436. CK_OBJECT_HANDLE_PTR phKey);
  437. CK_RV (*C_GenerateKeyPair)(CK_SESSION_HANDLE hSession,
  438. CK_MECHANISM_PTR pMechanism,
  439. CK_ATTRIBUTE_PTR pPublicKeyTemplate,
  440. CK_ULONG ulPublicKeyAttributeCount,
  441. CK_ATTRIBUTE_PTR pPrivateKeyTemplate,
  442. CK_ULONG ulPrivateKeyAttributeCount,
  443. CK_OBJECT_HANDLE_PTR phPublicKey,
  444. CK_OBJECT_HANDLE_PTR phPrivateKey);
  445. CK_RV (*C_WrapKey)(CK_SESSION_HANDLE hSession,
  446. CK_MECHANISM_PTR pMechanism,
  447. CK_OBJECT_HANDLE hWrappingKey, CK_OBJECT_HANDLE hKey,
  448. CK_BYTE_PTR pWrappedKey,
  449. CK_ULONG_PTR pulWrappedKeyLen);
  450. CK_RV (*C_UnwrapKey)(CK_SESSION_HANDLE hSession,
  451. CK_MECHANISM_PTR pMechanism,
  452. CK_OBJECT_HANDLE hUnwrappingKey,
  453. CK_BYTE_PTR pWrappedKey, CK_ULONG ulWrappedKeyLen,
  454. CK_ATTRIBUTE_PTR pTemplate,
  455. CK_ULONG ulAttributeCount,
  456. CK_OBJECT_HANDLE_PTR phKey);
  457. CK_RV (*C_DeriveKey)(CK_SESSION_HANDLE hSession,
  458. CK_MECHANISM_PTR pMechanism,
  459. CK_OBJECT_HANDLE hBaseKey,
  460. CK_ATTRIBUTE_PTR pTemplate,
  461. CK_ULONG ulAttributeCount,
  462. CK_OBJECT_HANDLE_PTR phKey);
  463. CK_RV (*C_SeedRandom)(CK_SESSION_HANDLE hSession, CK_BYTE_PTR pSeed,
  464. CK_ULONG ulSeedLen);
  465. CK_RV (*C_GenerateRandom)(CK_SESSION_HANDLE hSession,
  466. CK_BYTE_PTR RandomData, CK_ULONG ulRandomLen);
  467. CK_RV (*C_GetFunctionStatus)(CK_SESSION_HANDLE hSession);
  468. CK_RV (*C_CancelFunction)(CK_SESSION_HANDLE hSession);
  469. CK_RV (*C_WaitForSlotEvent)(CK_FLAGS flags, CK_SLOT_ID_PTR pSlot,
  470. CK_VOID_PTR pRserved);
  471. };
  472. #ifdef __cplusplus
  473. }
  474. #endif
  475. #endif /* _PKCS11_H_ */