PageRenderTime 59ms CodeModel.GetById 19ms RepoModel.GetById 1ms app.codeStats 0ms

/gecko_api/include/pkcs11t.h

http://firefox-mac-pdf.googlecode.com/
C Header | 1774 lines | 984 code | 338 blank | 452 comment | 0 complexity | 9bc0bd3a9436ab739fbf7c3a626e4812 MD5 | raw file
  1. /* ***** BEGIN LICENSE BLOCK *****
  2. * Version: MPL 1.1/GPL 2.0/LGPL 2.1
  3. *
  4. * The contents of this file are subject to the Mozilla Public License Version
  5. * 1.1 (the "License"); you may not use this file except in compliance with
  6. * the License. You may obtain a copy of the License at
  7. * http://www.mozilla.org/MPL/
  8. *
  9. * Software distributed under the License is distributed on an "AS IS" basis,
  10. * WITHOUT WARRANTY OF ANY KIND, either express or implied. See the License
  11. * for the specific language governing rights and limitations under the
  12. * License.
  13. *
  14. * The Original Code is the Netscape security libraries.
  15. *
  16. * The Initial Developer of the Original Code is
  17. * RSA Security, Inc.
  18. * Portions created by the Initial Developer are Copyright (C) 1994-2000
  19. * the Initial Developer. All Rights Reserved.
  20. *
  21. * Contributor(s):
  22. * Dr Vipul Gupta <vipul.gupta@sun.com>, Sun Microsystems Laboratories
  23. *
  24. * Alternatively, the contents of this file may be used under the terms of
  25. * either the GNU General Public License Version 2 or later (the "GPL"), or
  26. * the GNU Lesser General Public License Version 2.1 or later (the "LGPL"),
  27. * in which case the provisions of the GPL or the LGPL are applicable instead
  28. * of those above. If you wish to allow use of your version of this file only
  29. * under the terms of either the GPL or the LGPL, and not to allow others to
  30. * use your version of this file under the terms of the MPL, indicate your
  31. * decision by deleting the provisions above and replace them with the notice
  32. * and other provisions required by the GPL or the LGPL. If you do not delete
  33. * the provisions above, a recipient may use your version of this file under
  34. * the terms of any one of the MPL, the GPL or the LGPL.
  35. *
  36. * ***** END LICENSE BLOCK ***** */
  37. /* License to copy and use this software is granted provided that it is
  38. * identified as "RSA Security Inc. PKCS #11 Cryptographic Token Interface
  39. * (Cryptoki)" in all material mentioning or referencing this software.
  40. * License is also granted to make and use derivative works provided that
  41. * such works are identified as "derived from the RSA Security Inc. PKCS #11
  42. * Cryptographic Token Interface (Cryptoki)" in all material mentioning or
  43. * referencing the derived work.
  44. * RSA Security Inc. makes no representations concerning either the
  45. * merchantability of this software or the suitability of this software for
  46. * any particular purpose. It is provided "as is" without express or implied
  47. * warranty of any kind.
  48. */
  49. #ifndef _PKCS11T_H_
  50. #define _PKCS11T_H_ 1
  51. #define CK_TRUE 1
  52. #define CK_FALSE 0
  53. #include "prtypes.h"
  54. #define CK_PTR *
  55. #define CK_NULL_PTR 0
  56. #define CK_CALLBACK_FUNCTION(rv,func) rv (PR_CALLBACK * func)
  57. #define CK_DECLARE_FUNCTION(rv,func) PR_EXTERN(rv) func
  58. #define CK_DECLARE_FUNCTION_POINTER(rv,func) rv (PR_CALLBACK * func)
  59. #define CK_INVALID_SESSION 0
  60. /* an unsigned 8-bit value */
  61. typedef unsigned char CK_BYTE;
  62. /* an unsigned 8-bit character */
  63. typedef CK_BYTE CK_CHAR;
  64. /* an 8-bit UTF-8 character */
  65. typedef CK_BYTE CK_UTF8CHAR;
  66. /* a BYTE-sized Boolean flag */
  67. typedef CK_BYTE CK_BBOOL;
  68. /* an unsigned value, at least 32 bits long */
  69. typedef unsigned long int CK_ULONG;
  70. /* a signed value, the same size as a CK_ULONG */
  71. /* CK_LONG is new for v2.0 */
  72. typedef long int CK_LONG;
  73. /* at least 32 bits; each bit is a Boolean flag */
  74. typedef CK_ULONG CK_FLAGS;
  75. /* some special values for certain CK_ULONG variables */
  76. #define CK_UNAVAILABLE_INFORMATION (~0UL)
  77. #define CK_EFFECTIVELY_INFINITE 0
  78. typedef CK_BYTE CK_PTR CK_BYTE_PTR;
  79. typedef CK_CHAR CK_PTR CK_CHAR_PTR;
  80. typedef CK_UTF8CHAR CK_PTR CK_UTF8CHAR_PTR;
  81. typedef CK_ULONG CK_PTR CK_ULONG_PTR;
  82. typedef void CK_PTR CK_VOID_PTR;
  83. /* Pointer to a CK_VOID_PTR-- i.e., pointer to pointer to void */
  84. typedef CK_VOID_PTR CK_PTR CK_VOID_PTR_PTR;
  85. /* The following value is always invalid if used as a session */
  86. /* handle or object handle */
  87. #define CK_INVALID_HANDLE 0
  88. /* pack */
  89. #include "pkcs11p.h"
  90. typedef struct CK_VERSION {
  91. CK_BYTE major; /* integer portion of version number */
  92. CK_BYTE minor; /* 1/100ths portion of version number */
  93. } CK_VERSION;
  94. typedef CK_VERSION CK_PTR CK_VERSION_PTR;
  95. typedef struct CK_INFO {
  96. /* manufacturerID and libraryDecription have been changed from
  97. * CK_CHAR to CK_UTF8CHAR for v2.10 */
  98. CK_VERSION cryptokiVersion; /* PKCS #11 interface ver */
  99. CK_UTF8CHAR manufacturerID[32]; /* blank padded */
  100. CK_FLAGS flags; /* must be zero */
  101. /* libraryDescription and libraryVersion are new for v2.0 */
  102. CK_UTF8CHAR libraryDescription[32]; /* blank padded */
  103. CK_VERSION libraryVersion; /* version of library */
  104. } CK_INFO;
  105. typedef CK_INFO CK_PTR CK_INFO_PTR;
  106. /* CK_NOTIFICATION enumerates the types of notifications that
  107. * PKCS #11 provides to an application */
  108. /* CK_NOTIFICATION has been changed from an enum to a CK_ULONG
  109. * for v2.0 */
  110. typedef CK_ULONG CK_NOTIFICATION;
  111. #define CKN_SURRENDER 0
  112. typedef CK_ULONG CK_SLOT_ID;
  113. typedef CK_SLOT_ID CK_PTR CK_SLOT_ID_PTR;
  114. /* CK_SLOT_INFO provides information about a slot */
  115. typedef struct CK_SLOT_INFO {
  116. /* slotDescription and manufacturerID have been changed from
  117. * CK_CHAR to CK_UTF8CHAR for v2.10 */
  118. CK_UTF8CHAR slotDescription[64]; /* blank padded */
  119. CK_UTF8CHAR manufacturerID[32]; /* blank padded */
  120. CK_FLAGS flags;
  121. /* hardwareVersion and firmwareVersion are new for v2.0 */
  122. CK_VERSION hardwareVersion; /* version of hardware */
  123. CK_VERSION firmwareVersion; /* version of firmware */
  124. } CK_SLOT_INFO;
  125. /* flags: bit flags that provide capabilities of the slot
  126. * Bit Flag Mask Meaning
  127. */
  128. #define CKF_TOKEN_PRESENT 0x00000001 /* a token is there */
  129. #define CKF_REMOVABLE_DEVICE 0x00000002 /* removable devices*/
  130. #define CKF_HW_SLOT 0x00000004 /* hardware slot */
  131. typedef CK_SLOT_INFO CK_PTR CK_SLOT_INFO_PTR;
  132. /* CK_TOKEN_INFO provides information about a token */
  133. typedef struct CK_TOKEN_INFO {
  134. /* label, manufacturerID, and model have been changed from
  135. * CK_CHAR to CK_UTF8CHAR for v2.10 */
  136. CK_UTF8CHAR label[32]; /* blank padded */
  137. CK_UTF8CHAR manufacturerID[32]; /* blank padded */
  138. CK_UTF8CHAR model[16]; /* blank padded */
  139. CK_CHAR serialNumber[16]; /* blank padded */
  140. CK_FLAGS flags; /* see below */
  141. /* ulMaxSessionCount, ulSessionCount, ulMaxRwSessionCount,
  142. * ulRwSessionCount, ulMaxPinLen, and ulMinPinLen have all been
  143. * changed from CK_USHORT to CK_ULONG for v2.0 */
  144. CK_ULONG ulMaxSessionCount; /* max open sessions */
  145. CK_ULONG ulSessionCount; /* sess. now open */
  146. CK_ULONG ulMaxRwSessionCount; /* max R/W sessions */
  147. CK_ULONG ulRwSessionCount; /* R/W sess. now open */
  148. CK_ULONG ulMaxPinLen; /* in bytes */
  149. CK_ULONG ulMinPinLen; /* in bytes */
  150. CK_ULONG ulTotalPublicMemory; /* in bytes */
  151. CK_ULONG ulFreePublicMemory; /* in bytes */
  152. CK_ULONG ulTotalPrivateMemory; /* in bytes */
  153. CK_ULONG ulFreePrivateMemory; /* in bytes */
  154. /* hardwareVersion, firmwareVersion, and time are new for
  155. * v2.0 */
  156. CK_VERSION hardwareVersion; /* version of hardware */
  157. CK_VERSION firmwareVersion; /* version of firmware */
  158. CK_CHAR utcTime[16]; /* time */
  159. } CK_TOKEN_INFO;
  160. /* The flags parameter is defined as follows:
  161. * Bit Flag Mask Meaning
  162. */
  163. #define CKF_RNG 0x00000001 /* has random #
  164. * generator */
  165. #define CKF_WRITE_PROTECTED 0x00000002 /* token is
  166. * write-
  167. * protected */
  168. #define CKF_LOGIN_REQUIRED 0x00000004 /* user must
  169. * login */
  170. #define CKF_USER_PIN_INITIALIZED 0x00000008 /* normal user's
  171. * PIN is set */
  172. /* CKF_RESTORE_KEY_NOT_NEEDED is new for v2.0. If it is set,
  173. * that means that *every* time the state of cryptographic
  174. * operations of a session is successfully saved, all keys
  175. * needed to continue those operations are stored in the state */
  176. #define CKF_RESTORE_KEY_NOT_NEEDED 0x00000020
  177. /* CKF_CLOCK_ON_TOKEN is new for v2.0. If it is set, that means
  178. * that the token has some sort of clock. The time on that
  179. * clock is returned in the token info structure */
  180. #define CKF_CLOCK_ON_TOKEN 0x00000040
  181. /* CKF_PROTECTED_AUTHENTICATION_PATH is new for v2.0. If it is
  182. * set, that means that there is some way for the user to login
  183. * without sending a PIN through the PKCS #11 library itself */
  184. #define CKF_PROTECTED_AUTHENTICATION_PATH 0x00000100
  185. /* CKF_DUAL_CRYPTO_OPERATIONS is new for v2.0. If it is true,
  186. * that means that a single session with the token can perform
  187. * dual simultaneous cryptographic operations (digest and
  188. * encrypt; decrypt and digest; sign and encrypt; and decrypt
  189. * and sign) */
  190. #define CKF_DUAL_CRYPTO_OPERATIONS 0x00000200
  191. /* CKF_TOKEN_INITIALIZED if new for v2.10. If it is true, the
  192. * token has been initialized using C_InitializeToken or an
  193. * equivalent mechanism outside the scope of PKCS #11.
  194. * Calling C_InitializeToken when this flag is set will cause
  195. * the token to be reinitialized. */
  196. #define CKF_TOKEN_INITIALIZED 0x00000400
  197. /* CKF_SECONDARY_AUTHENTICATION if new for v2.10. If it is
  198. * true, the token supports secondary authentication for
  199. * private key objects. This flag is deprecated in v2.11 and
  200. onwards. */
  201. #define CKF_SECONDARY_AUTHENTICATION 0x00000800
  202. /* CKF_USER_PIN_COUNT_LOW if new for v2.10. If it is true, an
  203. * incorrect user login PIN has been entered at least once
  204. * since the last successful authentication. */
  205. #define CKF_USER_PIN_COUNT_LOW 0x00010000
  206. /* CKF_USER_PIN_FINAL_TRY if new for v2.10. If it is true,
  207. * supplying an incorrect user PIN will it to become locked. */
  208. #define CKF_USER_PIN_FINAL_TRY 0x00020000
  209. /* CKF_USER_PIN_LOCKED if new for v2.10. If it is true, the
  210. * user PIN has been locked. User login to the token is not
  211. * possible. */
  212. #define CKF_USER_PIN_LOCKED 0x00040000
  213. /* CKF_USER_PIN_TO_BE_CHANGED if new for v2.10. If it is true,
  214. * the user PIN value is the default value set by token
  215. * initialization or manufacturing, or the PIN has been
  216. * expired by the card. */
  217. #define CKF_USER_PIN_TO_BE_CHANGED 0x00080000
  218. /* CKF_SO_PIN_COUNT_LOW if new for v2.10. If it is true, an
  219. * incorrect SO login PIN has been entered at least once since
  220. * the last successful authentication. */
  221. #define CKF_SO_PIN_COUNT_LOW 0x00100000
  222. /* CKF_SO_PIN_FINAL_TRY if new for v2.10. If it is true,
  223. * supplying an incorrect SO PIN will it to become locked. */
  224. #define CKF_SO_PIN_FINAL_TRY 0x00200000
  225. /* CKF_SO_PIN_LOCKED if new for v2.10. If it is true, the SO
  226. * PIN has been locked. SO login to the token is not possible.
  227. */
  228. #define CKF_SO_PIN_LOCKED 0x00400000
  229. /* CKF_SO_PIN_TO_BE_CHANGED if new for v2.10. If it is true,
  230. * the SO PIN value is the default value set by token
  231. * initialization or manufacturing, or the PIN has been
  232. * expired by the card. */
  233. #define CKF_SO_PIN_TO_BE_CHANGED 0x00800000
  234. typedef CK_TOKEN_INFO CK_PTR CK_TOKEN_INFO_PTR;
  235. /* CK_SESSION_HANDLE is a PKCS #11-assigned value that
  236. * identifies a session */
  237. typedef CK_ULONG CK_SESSION_HANDLE;
  238. typedef CK_SESSION_HANDLE CK_PTR CK_SESSION_HANDLE_PTR;
  239. /* CK_USER_TYPE enumerates the types of PKCS #11 users */
  240. /* CK_USER_TYPE has been changed from an enum to a CK_ULONG for
  241. * v2.0 */
  242. typedef CK_ULONG CK_USER_TYPE;
  243. /* Security Officer */
  244. #define CKU_SO 0
  245. /* Normal user */
  246. #define CKU_USER 1
  247. /* Context specific (added in v2.20) */
  248. #define CKU_CONTEXT_SPECIFIC 2
  249. /* CK_STATE enumerates the session states */
  250. /* CK_STATE has been changed from an enum to a CK_ULONG for
  251. * v2.0 */
  252. typedef CK_ULONG CK_STATE;
  253. #define CKS_RO_PUBLIC_SESSION 0
  254. #define CKS_RO_USER_FUNCTIONS 1
  255. #define CKS_RW_PUBLIC_SESSION 2
  256. #define CKS_RW_USER_FUNCTIONS 3
  257. #define CKS_RW_SO_FUNCTIONS 4
  258. /* CK_SESSION_INFO provides information about a session */
  259. typedef struct CK_SESSION_INFO {
  260. CK_SLOT_ID slotID;
  261. CK_STATE state;
  262. CK_FLAGS flags; /* see below */
  263. /* ulDeviceError was changed from CK_USHORT to CK_ULONG for
  264. * v2.0 */
  265. CK_ULONG ulDeviceError; /* device-dependent error code */
  266. } CK_SESSION_INFO;
  267. /* The flags are defined in the following table:
  268. * Bit Flag Mask Meaning
  269. */
  270. #define CKF_RW_SESSION 0x00000002 /* session is r/w */
  271. #define CKF_SERIAL_SESSION 0x00000004 /* no parallel */
  272. typedef CK_SESSION_INFO CK_PTR CK_SESSION_INFO_PTR;
  273. /* CK_OBJECT_HANDLE is a token-specific identifier for an
  274. * object */
  275. typedef CK_ULONG CK_OBJECT_HANDLE;
  276. typedef CK_OBJECT_HANDLE CK_PTR CK_OBJECT_HANDLE_PTR;
  277. /* CK_OBJECT_CLASS is a value that identifies the classes (or
  278. * types) of objects that PKCS #11 recognizes. It is defined
  279. * as follows: */
  280. /* CK_OBJECT_CLASS was changed from CK_USHORT to CK_ULONG for
  281. * v2.0 */
  282. typedef CK_ULONG CK_OBJECT_CLASS;
  283. /* The following classes of objects are defined: */
  284. /* CKO_HW_FEATURE is new for v2.10 */
  285. /* CKO_DOMAIN_PARAMETERS is new for v2.11 */
  286. /* CKO_MECHANISM is new for v2.20 */
  287. #define CKO_DATA 0x00000000
  288. #define CKO_CERTIFICATE 0x00000001
  289. #define CKO_PUBLIC_KEY 0x00000002
  290. #define CKO_PRIVATE_KEY 0x00000003
  291. #define CKO_SECRET_KEY 0x00000004
  292. #define CKO_HW_FEATURE 0x00000005
  293. #define CKO_DOMAIN_PARAMETERS 0x00000006
  294. #define CKO_MECHANISM 0x00000007
  295. #define CKO_VENDOR_DEFINED 0x80000000
  296. typedef CK_OBJECT_CLASS CK_PTR CK_OBJECT_CLASS_PTR;
  297. /* CK_HW_FEATURE_TYPE is new for v2.10. CK_HW_FEATURE_TYPE is a
  298. * value that identifies the hardware feature type of an object
  299. * with CK_OBJECT_CLASS equal to CKO_HW_FEATURE. */
  300. typedef CK_ULONG CK_HW_FEATURE_TYPE;
  301. /* The following hardware feature types are defined */
  302. /* CKH_USER_INTERFACE is new for v2.20 */
  303. #define CKH_MONOTONIC_COUNTER 0x00000001
  304. #define CKH_CLOCK 0x00000002
  305. #define CKH_USER_INTERFACE 0x00000003
  306. #define CKH_VENDOR_DEFINED 0x80000000
  307. /* CK_KEY_TYPE is a value that identifies a key type */
  308. /* CK_KEY_TYPE was changed from CK_USHORT to CK_ULONG for v2.0 */
  309. typedef CK_ULONG CK_KEY_TYPE;
  310. /* the following key types are defined: */
  311. #define CKK_RSA 0x00000000
  312. #define CKK_DSA 0x00000001
  313. #define CKK_DH 0x00000002
  314. /* CKK_ECDSA and CKK_KEA are new for v2.0 */
  315. /* CKK_ECDSA is deprecated in v2.11, CKK_EC is preferred. */
  316. #define CKK_ECDSA 0x00000003
  317. #define CKK_EC 0x00000003
  318. #define CKK_X9_42_DH 0x00000004
  319. #define CKK_KEA 0x00000005
  320. #define CKK_GENERIC_SECRET 0x00000010
  321. #define CKK_RC2 0x00000011
  322. #define CKK_RC4 0x00000012
  323. #define CKK_DES 0x00000013
  324. #define CKK_DES2 0x00000014
  325. #define CKK_DES3 0x00000015
  326. /* all these key types are new for v2.0 */
  327. #define CKK_CAST 0x00000016
  328. #define CKK_CAST3 0x00000017
  329. /* CKK_CAST5 is deprecated in v2.11, CKK_CAST128 is preferred. */
  330. #define CKK_CAST5 0x00000018
  331. #define CKK_CAST128 0x00000018
  332. #define CKK_RC5 0x00000019
  333. #define CKK_IDEA 0x0000001A
  334. #define CKK_SKIPJACK 0x0000001B
  335. #define CKK_BATON 0x0000001C
  336. #define CKK_JUNIPER 0x0000001D
  337. #define CKK_CDMF 0x0000001E
  338. #define CKK_AES 0x0000001F
  339. /* BlowFish and TwoFish are new for v2.20 */
  340. #define CKK_BLOWFISH 0x00000020
  341. #define CKK_TWOFISH 0x00000021
  342. /* Camellia is proposed for v2.20 Amendment 3 */
  343. #define CKK_CAMELLIA 0x00000025
  344. #define CKK_VENDOR_DEFINED 0x80000000
  345. /* CK_CERTIFICATE_TYPE is a value that identifies a certificate
  346. * type */
  347. /* CK_CERTIFICATE_TYPE was changed from CK_USHORT to CK_ULONG
  348. * for v2.0 */
  349. typedef CK_ULONG CK_CERTIFICATE_TYPE;
  350. /* The following certificate types are defined: */
  351. /* CKC_X_509_ATTR_CERT is new for v2.10 */
  352. /* CKC_WTLS is new for v2.20 */
  353. #define CKC_X_509 0x00000000
  354. #define CKC_X_509_ATTR_CERT 0x00000001
  355. #define CKC_WTLS 0x00000002
  356. #define CKC_VENDOR_DEFINED 0x80000000
  357. /* CK_ATTRIBUTE_TYPE is a value that identifies an attribute
  358. * type */
  359. /* CK_ATTRIBUTE_TYPE was changed from CK_USHORT to CK_ULONG for
  360. * v2.0 */
  361. typedef CK_ULONG CK_ATTRIBUTE_TYPE;
  362. /* The CKF_ARRAY_ATTRIBUTE flag identifies an attribute which
  363. consists of an array of values. */
  364. #define CKF_ARRAY_ATTRIBUTE 0x40000000
  365. /* The following attribute types are defined: */
  366. #define CKA_CLASS 0x00000000
  367. #define CKA_TOKEN 0x00000001
  368. #define CKA_PRIVATE 0x00000002
  369. #define CKA_LABEL 0x00000003
  370. #define CKA_APPLICATION 0x00000010
  371. #define CKA_VALUE 0x00000011
  372. /* CKA_OBJECT_ID is new for v2.10 */
  373. #define CKA_OBJECT_ID 0x00000012
  374. #define CKA_CERTIFICATE_TYPE 0x00000080
  375. #define CKA_ISSUER 0x00000081
  376. #define CKA_SERIAL_NUMBER 0x00000082
  377. /* CKA_AC_ISSUER, CKA_OWNER, and CKA_ATTR_TYPES are new
  378. * for v2.10 */
  379. #define CKA_AC_ISSUER 0x00000083
  380. #define CKA_OWNER 0x00000084
  381. #define CKA_ATTR_TYPES 0x00000085
  382. /* CKA_TRUSTED is new for v2.11 */
  383. #define CKA_TRUSTED 0x00000086
  384. /* CKA_CERTIFICATE_CATEGORY ...
  385. * CKA_CHECK_VALUE are new for v2.20 */
  386. #define CKA_CERTIFICATE_CATEGORY 0x00000087
  387. #define CKA_JAVA_MIDP_SECURITY_DOMAIN 0x00000088
  388. #define CKA_URL 0x00000089
  389. #define CKA_HASH_OF_SUBJECT_PUBLIC_KEY 0x0000008A
  390. #define CKA_HASH_OF_ISSUER_PUBLIC_KEY 0x0000008B
  391. #define CKA_CHECK_VALUE 0x00000090
  392. #define CKA_KEY_TYPE 0x00000100
  393. #define CKA_SUBJECT 0x00000101
  394. #define CKA_ID 0x00000102
  395. #define CKA_SENSITIVE 0x00000103
  396. #define CKA_ENCRYPT 0x00000104
  397. #define CKA_DECRYPT 0x00000105
  398. #define CKA_WRAP 0x00000106
  399. #define CKA_UNWRAP 0x00000107
  400. #define CKA_SIGN 0x00000108
  401. #define CKA_SIGN_RECOVER 0x00000109
  402. #define CKA_VERIFY 0x0000010A
  403. #define CKA_VERIFY_RECOVER 0x0000010B
  404. #define CKA_DERIVE 0x0000010C
  405. #define CKA_START_DATE 0x00000110
  406. #define CKA_END_DATE 0x00000111
  407. #define CKA_MODULUS 0x00000120
  408. #define CKA_MODULUS_BITS 0x00000121
  409. #define CKA_PUBLIC_EXPONENT 0x00000122
  410. #define CKA_PRIVATE_EXPONENT 0x00000123
  411. #define CKA_PRIME_1 0x00000124
  412. #define CKA_PRIME_2 0x00000125
  413. #define CKA_EXPONENT_1 0x00000126
  414. #define CKA_EXPONENT_2 0x00000127
  415. #define CKA_COEFFICIENT 0x00000128
  416. #define CKA_PRIME 0x00000130
  417. #define CKA_SUBPRIME 0x00000131
  418. #define CKA_BASE 0x00000132
  419. /* CKA_PRIME_BITS and CKA_SUB_PRIME_BITS are new for v2.11 */
  420. #define CKA_PRIME_BITS 0x00000133
  421. #define CKA_SUBPRIME_BITS 0x00000134
  422. #define CKA_SUB_PRIME_BITS CKA_SUBPRIME_BITS
  423. /* (To retain backwards-compatibility) */
  424. #define CKA_VALUE_BITS 0x00000160
  425. #define CKA_VALUE_LEN 0x00000161
  426. /* CKA_EXTRACTABLE, CKA_LOCAL, CKA_NEVER_EXTRACTABLE,
  427. * CKA_ALWAYS_SENSITIVE, CKA_MODIFIABLE, CKA_ECDSA_PARAMS,
  428. * and CKA_EC_POINT are new for v2.0 */
  429. #define CKA_EXTRACTABLE 0x00000162
  430. #define CKA_LOCAL 0x00000163
  431. #define CKA_NEVER_EXTRACTABLE 0x00000164
  432. #define CKA_ALWAYS_SENSITIVE 0x00000165
  433. /* CKA_KEY_GEN_MECHANISM is new for v2.11 */
  434. #define CKA_KEY_GEN_MECHANISM 0x00000166
  435. #define CKA_MODIFIABLE 0x00000170
  436. /* CKA_ECDSA_PARAMS is deprecated in v2.11,
  437. * CKA_EC_PARAMS is preferred. */
  438. #define CKA_ECDSA_PARAMS 0x00000180
  439. #define CKA_EC_PARAMS 0x00000180
  440. #define CKA_EC_POINT 0x00000181
  441. /* CKA_SECONDARY_AUTH, CKA_AUTH_PIN_FLAGS,
  442. * are new for v2.10. Deprecated in v2.11 and onwards. */
  443. #define CKA_SECONDARY_AUTH 0x00000200
  444. #define CKA_AUTH_PIN_FLAGS 0x00000201
  445. /* CKA_ALWAYS_AUTHENTICATE ...
  446. * CKA_UNWRAP_TEMPLATE are new for v2.20 */
  447. #define CKA_ALWAYS_AUTHENTICATE 0x00000202
  448. #define CKA_WRAP_WITH_TRUSTED 0x00000210
  449. #define CKA_WRAP_TEMPLATE (CKF_ARRAY_ATTRIBUTE|0x00000211)
  450. #define CKA_UNWRAP_TEMPLATE (CKF_ARRAY_ATTRIBUTE|0x00000212)
  451. /* CKA_HW_FEATURE_TYPE, CKA_RESET_ON_INIT, and CKA_HAS_RESET
  452. * are new for v2.10 */
  453. #define CKA_HW_FEATURE_TYPE 0x00000300
  454. #define CKA_RESET_ON_INIT 0x00000301
  455. #define CKA_HAS_RESET 0x00000302
  456. /* The following attributes are new for v2.20 */
  457. #define CKA_PIXEL_X 0x00000400
  458. #define CKA_PIXEL_Y 0x00000401
  459. #define CKA_RESOLUTION 0x00000402
  460. #define CKA_CHAR_ROWS 0x00000403
  461. #define CKA_CHAR_COLUMNS 0x00000404
  462. #define CKA_COLOR 0x00000405
  463. #define CKA_BITS_PER_PIXEL 0x00000406
  464. #define CKA_CHAR_SETS 0x00000480
  465. #define CKA_ENCODING_METHODS 0x00000481
  466. #define CKA_MIME_TYPES 0x00000482
  467. #define CKA_MECHANISM_TYPE 0x00000500
  468. #define CKA_REQUIRED_CMS_ATTRIBUTES 0x00000501
  469. #define CKA_DEFAULT_CMS_ATTRIBUTES 0x00000502
  470. #define CKA_SUPPORTED_CMS_ATTRIBUTES 0x00000503
  471. #define CKA_ALLOWED_MECHANISMS (CKF_ARRAY_ATTRIBUTE|0x00000600)
  472. #define CKA_VENDOR_DEFINED 0x80000000
  473. /* CK_ATTRIBUTE is a structure that includes the type, length
  474. * and value of an attribute */
  475. typedef struct CK_ATTRIBUTE {
  476. CK_ATTRIBUTE_TYPE type;
  477. CK_VOID_PTR pValue;
  478. /* ulValueLen went from CK_USHORT to CK_ULONG for v2.0 */
  479. CK_ULONG ulValueLen; /* in bytes */
  480. } CK_ATTRIBUTE;
  481. typedef CK_ATTRIBUTE CK_PTR CK_ATTRIBUTE_PTR;
  482. /* CK_DATE is a structure that defines a date */
  483. typedef struct CK_DATE{
  484. CK_CHAR year[4]; /* the year ("1900" - "9999") */
  485. CK_CHAR month[2]; /* the month ("01" - "12") */
  486. CK_CHAR day[2]; /* the day ("01" - "31") */
  487. } CK_DATE;
  488. /* CK_MECHANISM_TYPE is a value that identifies a mechanism
  489. * type */
  490. /* CK_MECHANISM_TYPE was changed from CK_USHORT to CK_ULONG for
  491. * v2.0 */
  492. typedef CK_ULONG CK_MECHANISM_TYPE;
  493. /* the following mechanism types are defined: */
  494. #define CKM_RSA_PKCS_KEY_PAIR_GEN 0x00000000
  495. #define CKM_RSA_PKCS 0x00000001
  496. #define CKM_RSA_9796 0x00000002
  497. #define CKM_RSA_X_509 0x00000003
  498. /* CKM_MD2_RSA_PKCS, CKM_MD5_RSA_PKCS, and CKM_SHA1_RSA_PKCS
  499. * are new for v2.0. They are mechanisms which hash and sign */
  500. #define CKM_MD2_RSA_PKCS 0x00000004
  501. #define CKM_MD5_RSA_PKCS 0x00000005
  502. #define CKM_SHA1_RSA_PKCS 0x00000006
  503. /* CKM_RIPEMD128_RSA_PKCS, CKM_RIPEMD160_RSA_PKCS, and
  504. * CKM_RSA_PKCS_OAEP are new for v2.10 */
  505. #define CKM_RIPEMD128_RSA_PKCS 0x00000007
  506. #define CKM_RIPEMD160_RSA_PKCS 0x00000008
  507. #define CKM_RSA_PKCS_OAEP 0x00000009
  508. /* CKM_RSA_X9_31_KEY_PAIR_GEN, CKM_RSA_X9_31, CKM_SHA1_RSA_X9_31,
  509. * CKM_RSA_PKCS_PSS, and CKM_SHA1_RSA_PKCS_PSS are new for v2.11 */
  510. #define CKM_RSA_X9_31_KEY_PAIR_GEN 0x0000000A
  511. #define CKM_RSA_X9_31 0x0000000B
  512. #define CKM_SHA1_RSA_X9_31 0x0000000C
  513. #define CKM_RSA_PKCS_PSS 0x0000000D
  514. #define CKM_SHA1_RSA_PKCS_PSS 0x0000000E
  515. #define CKM_DSA_KEY_PAIR_GEN 0x00000010
  516. #define CKM_DSA 0x00000011
  517. #define CKM_DSA_SHA1 0x00000012
  518. #define CKM_DH_PKCS_KEY_PAIR_GEN 0x00000020
  519. #define CKM_DH_PKCS_DERIVE 0x00000021
  520. /* CKM_X9_42_DH_KEY_PAIR_GEN, CKM_X9_42_DH_DERIVE,
  521. * CKM_X9_42_DH_HYBRID_DERIVE, and CKM_X9_42_MQV_DERIVE are new for
  522. * v2.11 */
  523. #define CKM_X9_42_DH_KEY_PAIR_GEN 0x00000030
  524. #define CKM_X9_42_DH_DERIVE 0x00000031
  525. #define CKM_X9_42_DH_HYBRID_DERIVE 0x00000032
  526. #define CKM_X9_42_MQV_DERIVE 0x00000033
  527. /* CKM_SHA256/384/512 are new for v2.20 */
  528. #define CKM_SHA256_RSA_PKCS 0x00000040
  529. #define CKM_SHA384_RSA_PKCS 0x00000041
  530. #define CKM_SHA512_RSA_PKCS 0x00000042
  531. #define CKM_SHA256_RSA_PKCS_PSS 0x00000043
  532. #define CKM_SHA384_RSA_PKCS_PSS 0x00000044
  533. #define CKM_SHA512_RSA_PKCS_PSS 0x00000045
  534. /* CKM_SHA224 new for v2.20 amendment 3 */
  535. #define CKM_SHA224_RSA_PKCS 0x00000046
  536. #define CKM_SHA224_RSA_PKCS_PSS 0x00000047
  537. #define CKM_RC2_KEY_GEN 0x00000100
  538. #define CKM_RC2_ECB 0x00000101
  539. #define CKM_RC2_CBC 0x00000102
  540. #define CKM_RC2_MAC 0x00000103
  541. /* CKM_RC2_MAC_GENERAL and CKM_RC2_CBC_PAD are new for v2.0 */
  542. #define CKM_RC2_MAC_GENERAL 0x00000104
  543. #define CKM_RC2_CBC_PAD 0x00000105
  544. #define CKM_RC4_KEY_GEN 0x00000110
  545. #define CKM_RC4 0x00000111
  546. #define CKM_DES_KEY_GEN 0x00000120
  547. #define CKM_DES_ECB 0x00000121
  548. #define CKM_DES_CBC 0x00000122
  549. #define CKM_DES_MAC 0x00000123
  550. /* CKM_DES_MAC_GENERAL and CKM_DES_CBC_PAD are new for v2.0 */
  551. #define CKM_DES_MAC_GENERAL 0x00000124
  552. #define CKM_DES_CBC_PAD 0x00000125
  553. #define CKM_DES2_KEY_GEN 0x00000130
  554. #define CKM_DES3_KEY_GEN 0x00000131
  555. #define CKM_DES3_ECB 0x00000132
  556. #define CKM_DES3_CBC 0x00000133
  557. #define CKM_DES3_MAC 0x00000134
  558. /* CKM_DES3_MAC_GENERAL, CKM_DES3_CBC_PAD, CKM_CDMF_KEY_GEN,
  559. * CKM_CDMF_ECB, CKM_CDMF_CBC, CKM_CDMF_MAC,
  560. * CKM_CDMF_MAC_GENERAL, and CKM_CDMF_CBC_PAD are new for v2.0 */
  561. #define CKM_DES3_MAC_GENERAL 0x00000135
  562. #define CKM_DES3_CBC_PAD 0x00000136
  563. #define CKM_CDMF_KEY_GEN 0x00000140
  564. #define CKM_CDMF_ECB 0x00000141
  565. #define CKM_CDMF_CBC 0x00000142
  566. #define CKM_CDMF_MAC 0x00000143
  567. #define CKM_CDMF_MAC_GENERAL 0x00000144
  568. #define CKM_CDMF_CBC_PAD 0x00000145
  569. /* the following four DES mechanisms are new for v2.20 */
  570. #define CKM_DES_OFB64 0x00000150
  571. #define CKM_DES_OFB8 0x00000151
  572. #define CKM_DES_CFB64 0x00000152
  573. #define CKM_DES_CFB8 0x00000153
  574. #define CKM_MD2 0x00000200
  575. /* CKM_MD2_HMAC and CKM_MD2_HMAC_GENERAL are new for v2.0 */
  576. #define CKM_MD2_HMAC 0x00000201
  577. #define CKM_MD2_HMAC_GENERAL 0x00000202
  578. #define CKM_MD5 0x00000210
  579. /* CKM_MD5_HMAC and CKM_MD5_HMAC_GENERAL are new for v2.0 */
  580. #define CKM_MD5_HMAC 0x00000211
  581. #define CKM_MD5_HMAC_GENERAL 0x00000212
  582. #define CKM_SHA_1 0x00000220
  583. /* CKM_SHA_1_HMAC and CKM_SHA_1_HMAC_GENERAL are new for v2.0 */
  584. #define CKM_SHA_1_HMAC 0x00000221
  585. #define CKM_SHA_1_HMAC_GENERAL 0x00000222
  586. /* CKM_RIPEMD128, CKM_RIPEMD128_HMAC,
  587. * CKM_RIPEMD128_HMAC_GENERAL, CKM_RIPEMD160, CKM_RIPEMD160_HMAC,
  588. * and CKM_RIPEMD160_HMAC_GENERAL are new for v2.10 */
  589. #define CKM_RIPEMD128 0x00000230
  590. #define CKM_RIPEMD128_HMAC 0x00000231
  591. #define CKM_RIPEMD128_HMAC_GENERAL 0x00000232
  592. #define CKM_RIPEMD160 0x00000240
  593. #define CKM_RIPEMD160_HMAC 0x00000241
  594. #define CKM_RIPEMD160_HMAC_GENERAL 0x00000242
  595. /* CKM_SHA256/384/512 are new for v2.20 */
  596. #define CKM_SHA256 0x00000250
  597. #define CKM_SHA256_HMAC 0x00000251
  598. #define CKM_SHA256_HMAC_GENERAL 0x00000252
  599. #define CKM_SHA384 0x00000260
  600. #define CKM_SHA384_HMAC 0x00000261
  601. #define CKM_SHA384_HMAC_GENERAL 0x00000262
  602. #define CKM_SHA512 0x00000270
  603. #define CKM_SHA512_HMAC 0x00000271
  604. #define CKM_SHA512_HMAC_GENERAL 0x00000272
  605. /* CKM_SHA224 new for v2.20 amendment 3 */
  606. #define CKM_SHA224 0x00000255
  607. #define CKM_SHA224_HMAC 0x00000256
  608. #define CKM_SHA224_HMAC_GENERAL 0x00000257
  609. /* All of the following mechanisms are new for v2.0 */
  610. /* Note that CAST128 and CAST5 are the same algorithm */
  611. #define CKM_CAST_KEY_GEN 0x00000300
  612. #define CKM_CAST_ECB 0x00000301
  613. #define CKM_CAST_CBC 0x00000302
  614. #define CKM_CAST_MAC 0x00000303
  615. #define CKM_CAST_MAC_GENERAL 0x00000304
  616. #define CKM_CAST_CBC_PAD 0x00000305
  617. #define CKM_CAST3_KEY_GEN 0x00000310
  618. #define CKM_CAST3_ECB 0x00000311
  619. #define CKM_CAST3_CBC 0x00000312
  620. #define CKM_CAST3_MAC 0x00000313
  621. #define CKM_CAST3_MAC_GENERAL 0x00000314
  622. #define CKM_CAST3_CBC_PAD 0x00000315
  623. #define CKM_CAST5_KEY_GEN 0x00000320
  624. #define CKM_CAST128_KEY_GEN 0x00000320
  625. #define CKM_CAST5_ECB 0x00000321
  626. #define CKM_CAST128_ECB 0x00000321
  627. #define CKM_CAST5_CBC 0x00000322
  628. #define CKM_CAST128_CBC 0x00000322
  629. #define CKM_CAST5_MAC 0x00000323
  630. #define CKM_CAST128_MAC 0x00000323
  631. #define CKM_CAST5_MAC_GENERAL 0x00000324
  632. #define CKM_CAST128_MAC_GENERAL 0x00000324
  633. #define CKM_CAST5_CBC_PAD 0x00000325
  634. #define CKM_CAST128_CBC_PAD 0x00000325
  635. #define CKM_RC5_KEY_GEN 0x00000330
  636. #define CKM_RC5_ECB 0x00000331
  637. #define CKM_RC5_CBC 0x00000332
  638. #define CKM_RC5_MAC 0x00000333
  639. #define CKM_RC5_MAC_GENERAL 0x00000334
  640. #define CKM_RC5_CBC_PAD 0x00000335
  641. #define CKM_IDEA_KEY_GEN 0x00000340
  642. #define CKM_IDEA_ECB 0x00000341
  643. #define CKM_IDEA_CBC 0x00000342
  644. #define CKM_IDEA_MAC 0x00000343
  645. #define CKM_IDEA_MAC_GENERAL 0x00000344
  646. #define CKM_IDEA_CBC_PAD 0x00000345
  647. #define CKM_GENERIC_SECRET_KEY_GEN 0x00000350
  648. #define CKM_CONCATENATE_BASE_AND_KEY 0x00000360
  649. #define CKM_CONCATENATE_BASE_AND_DATA 0x00000362
  650. #define CKM_CONCATENATE_DATA_AND_BASE 0x00000363
  651. #define CKM_XOR_BASE_AND_DATA 0x00000364
  652. #define CKM_EXTRACT_KEY_FROM_KEY 0x00000365
  653. #define CKM_SSL3_PRE_MASTER_KEY_GEN 0x00000370
  654. #define CKM_SSL3_MASTER_KEY_DERIVE 0x00000371
  655. #define CKM_SSL3_KEY_AND_MAC_DERIVE 0x00000372
  656. /* CKM_SSL3_MASTER_KEY_DERIVE_DH, CKM_TLS_PRE_MASTER_KEY_GEN,
  657. * CKM_TLS_MASTER_KEY_DERIVE, CKM_TLS_KEY_AND_MAC_DERIVE, and
  658. * CKM_TLS_MASTER_KEY_DERIVE_DH are new for v2.11 */
  659. #define CKM_SSL3_MASTER_KEY_DERIVE_DH 0x00000373
  660. #define CKM_TLS_PRE_MASTER_KEY_GEN 0x00000374
  661. #define CKM_TLS_MASTER_KEY_DERIVE 0x00000375
  662. #define CKM_TLS_KEY_AND_MAC_DERIVE 0x00000376
  663. #define CKM_TLS_MASTER_KEY_DERIVE_DH 0x00000377
  664. /* CKM_TLS_PRF is new for v2.20 */
  665. #define CKM_TLS_PRF 0x00000378
  666. #define CKM_SSL3_MD5_MAC 0x00000380
  667. #define CKM_SSL3_SHA1_MAC 0x00000381
  668. #define CKM_MD5_KEY_DERIVATION 0x00000390
  669. #define CKM_MD2_KEY_DERIVATION 0x00000391
  670. #define CKM_SHA1_KEY_DERIVATION 0x00000392
  671. /* CKM_SHA256/384/512 are new for v2.20 */
  672. #define CKM_SHA256_KEY_DERIVATION 0x00000393
  673. #define CKM_SHA384_KEY_DERIVATION 0x00000394
  674. #define CKM_SHA512_KEY_DERIVATION 0x00000395
  675. /* CKM_SHA224 new for v2.20 amendment 3 */
  676. #define CKM_SHA224_KEY_DERIVATION 0x00000396
  677. #define CKM_PBE_MD2_DES_CBC 0x000003A0
  678. #define CKM_PBE_MD5_DES_CBC 0x000003A1
  679. #define CKM_PBE_MD5_CAST_CBC 0x000003A2
  680. #define CKM_PBE_MD5_CAST3_CBC 0x000003A3
  681. #define CKM_PBE_MD5_CAST5_CBC 0x000003A4
  682. #define CKM_PBE_MD5_CAST128_CBC 0x000003A4
  683. #define CKM_PBE_SHA1_CAST5_CBC 0x000003A5
  684. #define CKM_PBE_SHA1_CAST128_CBC 0x000003A5
  685. #define CKM_PBE_SHA1_RC4_128 0x000003A6
  686. #define CKM_PBE_SHA1_RC4_40 0x000003A7
  687. #define CKM_PBE_SHA1_DES3_EDE_CBC 0x000003A8
  688. #define CKM_PBE_SHA1_DES2_EDE_CBC 0x000003A9
  689. #define CKM_PBE_SHA1_RC2_128_CBC 0x000003AA
  690. #define CKM_PBE_SHA1_RC2_40_CBC 0x000003AB
  691. /* CKM_PKCS5_PBKD2 is new for v2.10 */
  692. #define CKM_PKCS5_PBKD2 0x000003B0
  693. #define CKM_PBA_SHA1_WITH_SHA1_HMAC 0x000003C0
  694. /* WTLS mechanisms are new for v2.20 */
  695. #define CKM_WTLS_PRE_MASTER_KEY_GEN 0x000003D0
  696. #define CKM_WTLS_MASTER_KEY_DERIVE 0x000003D1
  697. #define CKM_WTLS_MASTER_KEY_DERIVE_DH_ECC 0x000003D2
  698. #define CKM_WTLS_PRF 0x000003D3
  699. #define CKM_WTLS_SERVER_KEY_AND_MAC_DERIVE 0x000003D4
  700. #define CKM_WTLS_CLIENT_KEY_AND_MAC_DERIVE 0x000003D5
  701. #define CKM_KEY_WRAP_LYNKS 0x00000400
  702. #define CKM_KEY_WRAP_SET_OAEP 0x00000401
  703. /* CKM_CMS_SIG is new for v2.20 */
  704. #define CKM_CMS_SIG 0x00000500
  705. /* Fortezza mechanisms */
  706. #define CKM_SKIPJACK_KEY_GEN 0x00001000
  707. #define CKM_SKIPJACK_ECB64 0x00001001
  708. #define CKM_SKIPJACK_CBC64 0x00001002
  709. #define CKM_SKIPJACK_OFB64 0x00001003
  710. #define CKM_SKIPJACK_CFB64 0x00001004
  711. #define CKM_SKIPJACK_CFB32 0x00001005
  712. #define CKM_SKIPJACK_CFB16 0x00001006
  713. #define CKM_SKIPJACK_CFB8 0x00001007
  714. #define CKM_SKIPJACK_WRAP 0x00001008
  715. #define CKM_SKIPJACK_PRIVATE_WRAP 0x00001009
  716. #define CKM_SKIPJACK_RELAYX 0x0000100a
  717. #define CKM_KEA_KEY_PAIR_GEN 0x00001010
  718. #define CKM_KEA_KEY_DERIVE 0x00001011
  719. #define CKM_FORTEZZA_TIMESTAMP 0x00001020
  720. #define CKM_BATON_KEY_GEN 0x00001030
  721. #define CKM_BATON_ECB128 0x00001031
  722. #define CKM_BATON_ECB96 0x00001032
  723. #define CKM_BATON_CBC128 0x00001033
  724. #define CKM_BATON_COUNTER 0x00001034
  725. #define CKM_BATON_SHUFFLE 0x00001035
  726. #define CKM_BATON_WRAP 0x00001036
  727. /* CKM_ECDSA_KEY_PAIR_GEN is deprecated in v2.11,
  728. * CKM_EC_KEY_PAIR_GEN is preferred */
  729. #define CKM_ECDSA_KEY_PAIR_GEN 0x00001040
  730. #define CKM_EC_KEY_PAIR_GEN 0x00001040
  731. #define CKM_ECDSA 0x00001041
  732. #define CKM_ECDSA_SHA1 0x00001042
  733. /* CKM_ECDH1_DERIVE, CKM_ECDH1_COFACTOR_DERIVE, and CKM_ECMQV_DERIVE
  734. * are new for v2.11 */
  735. #define CKM_ECDH1_DERIVE 0x00001050
  736. #define CKM_ECDH1_COFACTOR_DERIVE 0x00001051
  737. #define CKM_ECMQV_DERIVE 0x00001052
  738. #define CKM_JUNIPER_KEY_GEN 0x00001060
  739. #define CKM_JUNIPER_ECB128 0x00001061
  740. #define CKM_JUNIPER_CBC128 0x00001062
  741. #define CKM_JUNIPER_COUNTER 0x00001063
  742. #define CKM_JUNIPER_SHUFFLE 0x00001064
  743. #define CKM_JUNIPER_WRAP 0x00001065
  744. #define CKM_FASTHASH 0x00001070
  745. /* CKM_AES_KEY_GEN, CKM_AES_ECB, CKM_AES_CBC, CKM_AES_MAC,
  746. * CKM_AES_MAC_GENERAL, CKM_AES_CBC_PAD, CKM_DSA_PARAMETER_GEN,
  747. * CKM_DH_PKCS_PARAMETER_GEN, and CKM_X9_42_DH_PARAMETER_GEN are
  748. * new for v2.11 */
  749. #define CKM_AES_KEY_GEN 0x00001080
  750. #define CKM_AES_ECB 0x00001081
  751. #define CKM_AES_CBC 0x00001082
  752. #define CKM_AES_MAC 0x00001083
  753. #define CKM_AES_MAC_GENERAL 0x00001084
  754. #define CKM_AES_CBC_PAD 0x00001085
  755. /* BlowFish and TwoFish are new for v2.20 */
  756. #define CKM_BLOWFISH_KEY_GEN 0x00001090
  757. #define CKM_BLOWFISH_CBC 0x00001091
  758. #define CKM_TWOFISH_KEY_GEN 0x00001092
  759. #define CKM_TWOFISH_CBC 0x00001093
  760. /* Camellia is proposed for v2.20 Amendment 3 */
  761. #define CKM_CAMELLIA_KEY_GEN 0x00000550
  762. #define CKM_CAMELLIA_ECB 0x00000551
  763. #define CKM_CAMELLIA_CBC 0x00000552
  764. #define CKM_CAMELLIA_MAC 0x00000553
  765. #define CKM_CAMELLIA_MAC_GENERAL 0x00000554
  766. #define CKM_CAMELLIA_CBC_PAD 0x00000555
  767. #define CKM_CAMELLIA_ECB_ENCRYPT_DATA 0x00000556
  768. #define CKM_CAMELLIA_CBC_ENCRYPT_DATA 0x00000557
  769. /* CKM_xxx_ENCRYPT_DATA mechanisms are new for v2.20 */
  770. #define CKM_DES_ECB_ENCRYPT_DATA 0x00001100
  771. #define CKM_DES_CBC_ENCRYPT_DATA 0x00001101
  772. #define CKM_DES3_ECB_ENCRYPT_DATA 0x00001102
  773. #define CKM_DES3_CBC_ENCRYPT_DATA 0x00001103
  774. #define CKM_AES_ECB_ENCRYPT_DATA 0x00001104
  775. #define CKM_AES_CBC_ENCRYPT_DATA 0x00001105
  776. #define CKM_DSA_PARAMETER_GEN 0x00002000
  777. #define CKM_DH_PKCS_PARAMETER_GEN 0x00002001
  778. #define CKM_X9_42_DH_PARAMETER_GEN 0x00002002
  779. #define CKM_VENDOR_DEFINED 0x80000000
  780. typedef CK_MECHANISM_TYPE CK_PTR CK_MECHANISM_TYPE_PTR;
  781. /* CK_MECHANISM is a structure that specifies a particular
  782. * mechanism */
  783. typedef struct CK_MECHANISM {
  784. CK_MECHANISM_TYPE mechanism;
  785. CK_VOID_PTR pParameter;
  786. /* ulParameterLen was changed from CK_USHORT to CK_ULONG for
  787. * v2.0 */
  788. CK_ULONG ulParameterLen; /* in bytes */
  789. } CK_MECHANISM;
  790. typedef CK_MECHANISM CK_PTR CK_MECHANISM_PTR;
  791. /* CK_MECHANISM_INFO provides information about a particular
  792. * mechanism */
  793. typedef struct CK_MECHANISM_INFO {
  794. CK_ULONG ulMinKeySize;
  795. CK_ULONG ulMaxKeySize;
  796. CK_FLAGS flags;
  797. } CK_MECHANISM_INFO;
  798. /* The flags are defined as follows:
  799. * Bit Flag Mask Meaning */
  800. #define CKF_HW 0x00000001 /* performed by HW */
  801. /* The flags CKF_ENCRYPT, CKF_DECRYPT, CKF_DIGEST, CKF_SIGN,
  802. * CKG_SIGN_RECOVER, CKF_VERIFY, CKF_VERIFY_RECOVER,
  803. * CKF_GENERATE, CKF_GENERATE_KEY_PAIR, CKF_WRAP, CKF_UNWRAP,
  804. * and CKF_DERIVE are new for v2.0. They specify whether or not
  805. * a mechanism can be used for a particular task */
  806. #define CKF_ENCRYPT 0x00000100
  807. #define CKF_DECRYPT 0x00000200
  808. #define CKF_DIGEST 0x00000400
  809. #define CKF_SIGN 0x00000800
  810. #define CKF_SIGN_RECOVER 0x00001000
  811. #define CKF_VERIFY 0x00002000
  812. #define CKF_VERIFY_RECOVER 0x00004000
  813. #define CKF_GENERATE 0x00008000
  814. #define CKF_GENERATE_KEY_PAIR 0x00010000
  815. #define CKF_WRAP 0x00020000
  816. #define CKF_UNWRAP 0x00040000
  817. #define CKF_DERIVE 0x00080000
  818. /* CKF_EC_F_P, CKF_EC_F_2M, CKF_EC_ECPARAMETERS, CKF_EC_NAMEDCURVE,
  819. * CKF_EC_UNCOMPRESS, and CKF_EC_COMPRESS are new for v2.11. They
  820. * describe a token's EC capabilities not available in mechanism
  821. * information. */
  822. #define CKF_EC_F_P 0x00100000
  823. #define CKF_EC_F_2M 0x00200000
  824. #define CKF_EC_ECPARAMETERS 0x00400000
  825. #define CKF_EC_NAMEDCURVE 0x00800000
  826. #define CKF_EC_UNCOMPRESS 0x01000000
  827. #define CKF_EC_COMPRESS 0x02000000
  828. #define CKF_EXTENSION 0x80000000 /* FALSE for this version */
  829. typedef CK_MECHANISM_INFO CK_PTR CK_MECHANISM_INFO_PTR;
  830. /* CK_RV is a value that identifies the return value of a
  831. * PKCS #11 function */
  832. /* CK_RV was changed from CK_USHORT to CK_ULONG for v2.0 */
  833. typedef CK_ULONG CK_RV;
  834. #define CKR_OK 0x00000000
  835. #define CKR_CANCEL 0x00000001
  836. #define CKR_HOST_MEMORY 0x00000002
  837. #define CKR_SLOT_ID_INVALID 0x00000003
  838. /* CKR_FLAGS_INVALID was removed for v2.0 */
  839. /* CKR_GENERAL_ERROR and CKR_FUNCTION_FAILED are new for v2.0 */
  840. #define CKR_GENERAL_ERROR 0x00000005
  841. #define CKR_FUNCTION_FAILED 0x00000006
  842. /* CKR_ARGUMENTS_BAD, CKR_NO_EVENT, CKR_NEED_TO_CREATE_THREADS,
  843. * and CKR_CANT_LOCK are new for v2.01 */
  844. #define CKR_ARGUMENTS_BAD 0x00000007
  845. #define CKR_NO_EVENT 0x00000008
  846. #define CKR_NEED_TO_CREATE_THREADS 0x00000009
  847. #define CKR_CANT_LOCK 0x0000000A
  848. #define CKR_ATTRIBUTE_READ_ONLY 0x00000010
  849. #define CKR_ATTRIBUTE_SENSITIVE 0x00000011
  850. #define CKR_ATTRIBUTE_TYPE_INVALID 0x00000012
  851. #define CKR_ATTRIBUTE_VALUE_INVALID 0x00000013
  852. #define CKR_DATA_INVALID 0x00000020
  853. #define CKR_DATA_LEN_RANGE 0x00000021
  854. #define CKR_DEVICE_ERROR 0x00000030
  855. #define CKR_DEVICE_MEMORY 0x00000031
  856. #define CKR_DEVICE_REMOVED 0x00000032
  857. #define CKR_ENCRYPTED_DATA_INVALID 0x00000040
  858. #define CKR_ENCRYPTED_DATA_LEN_RANGE 0x00000041
  859. #define CKR_FUNCTION_CANCELED 0x00000050
  860. #define CKR_FUNCTION_NOT_PARALLEL 0x00000051
  861. /* CKR_FUNCTION_NOT_SUPPORTED is new for v2.0 */
  862. #define CKR_FUNCTION_NOT_SUPPORTED 0x00000054
  863. #define CKR_KEY_HANDLE_INVALID 0x00000060
  864. /* CKR_KEY_SENSITIVE was removed for v2.0 */
  865. #define CKR_KEY_SIZE_RANGE 0x00000062
  866. #define CKR_KEY_TYPE_INCONSISTENT 0x00000063
  867. /* CKR_KEY_NOT_NEEDED, CKR_KEY_CHANGED, CKR_KEY_NEEDED,
  868. * CKR_KEY_INDIGESTIBLE, CKR_KEY_FUNCTION_NOT_PERMITTED,
  869. * CKR_KEY_NOT_WRAPPABLE, and CKR_KEY_UNEXTRACTABLE are new for
  870. * v2.0 */
  871. #define CKR_KEY_NOT_NEEDED 0x00000064
  872. #define CKR_KEY_CHANGED 0x00000065
  873. #define CKR_KEY_NEEDED 0x00000066
  874. #define CKR_KEY_INDIGESTIBLE 0x00000067
  875. #define CKR_KEY_FUNCTION_NOT_PERMITTED 0x00000068
  876. #define CKR_KEY_NOT_WRAPPABLE 0x00000069
  877. #define CKR_KEY_UNEXTRACTABLE 0x0000006A
  878. #define CKR_MECHANISM_INVALID 0x00000070
  879. #define CKR_MECHANISM_PARAM_INVALID 0x00000071
  880. /* CKR_OBJECT_CLASS_INCONSISTENT and CKR_OBJECT_CLASS_INVALID
  881. * were removed for v2.0 */
  882. #define CKR_OBJECT_HANDLE_INVALID 0x00000082
  883. #define CKR_OPERATION_ACTIVE 0x00000090
  884. #define CKR_OPERATION_NOT_INITIALIZED 0x00000091
  885. #define CKR_PIN_INCORRECT 0x000000A0
  886. #define CKR_PIN_INVALID 0x000000A1
  887. #define CKR_PIN_LEN_RANGE 0x000000A2
  888. /* CKR_PIN_EXPIRED and CKR_PIN_LOCKED are new for v2.0 */
  889. #define CKR_PIN_EXPIRED 0x000000A3
  890. #define CKR_PIN_LOCKED 0x000000A4
  891. #define CKR_SESSION_CLOSED 0x000000B0
  892. #define CKR_SESSION_COUNT 0x000000B1
  893. #define CKR_SESSION_HANDLE_INVALID 0x000000B3
  894. #define CKR_SESSION_PARALLEL_NOT_SUPPORTED 0x000000B4
  895. #define CKR_SESSION_READ_ONLY 0x000000B5
  896. #define CKR_SESSION_EXISTS 0x000000B6
  897. /* CKR_SESSION_READ_ONLY_EXISTS and
  898. * CKR_SESSION_READ_WRITE_SO_EXISTS are new for v2.0 */
  899. #define CKR_SESSION_READ_ONLY_EXISTS 0x000000B7
  900. #define CKR_SESSION_READ_WRITE_SO_EXISTS 0x000000B8
  901. #define CKR_SIGNATURE_INVALID 0x000000C0
  902. #define CKR_SIGNATURE_LEN_RANGE 0x000000C1
  903. #define CKR_TEMPLATE_INCOMPLETE 0x000000D0
  904. #define CKR_TEMPLATE_INCONSISTENT 0x000000D1
  905. #define CKR_TOKEN_NOT_PRESENT 0x000000E0
  906. #define CKR_TOKEN_NOT_RECOGNIZED 0x000000E1
  907. #define CKR_TOKEN_WRITE_PROTECTED 0x000000E2
  908. #define CKR_UNWRAPPING_KEY_HANDLE_INVALID 0x000000F0
  909. #define CKR_UNWRAPPING_KEY_SIZE_RANGE 0x000000F1
  910. #define CKR_UNWRAPPING_KEY_TYPE_INCONSISTENT 0x000000F2
  911. #define CKR_USER_ALREADY_LOGGED_IN 0x00000100
  912. #define CKR_USER_NOT_LOGGED_IN 0x00000101
  913. #define CKR_USER_PIN_NOT_INITIALIZED 0x00000102
  914. #define CKR_USER_TYPE_INVALID 0x00000103
  915. /* CKR_USER_ANOTHER_ALREADY_LOGGED_IN and CKR_USER_TOO_MANY_TYPES
  916. * are new to v2.01 */
  917. #define CKR_USER_ANOTHER_ALREADY_LOGGED_IN 0x00000104
  918. #define CKR_USER_TOO_MANY_TYPES 0x00000105
  919. #define CKR_WRAPPED_KEY_INVALID 0x00000110
  920. #define CKR_WRAPPED_KEY_LEN_RANGE 0x00000112
  921. #define CKR_WRAPPING_KEY_HANDLE_INVALID 0x00000113
  922. #define CKR_WRAPPING_KEY_SIZE_RANGE 0x00000114
  923. #define CKR_WRAPPING_KEY_TYPE_INCONSISTENT 0x00000115
  924. #define CKR_RANDOM_SEED_NOT_SUPPORTED 0x00000120
  925. /* These are new to v2.0 */
  926. #define CKR_RANDOM_NO_RNG 0x00000121
  927. /* These are new to v2.11 */
  928. #define CKR_DOMAIN_PARAMS_INVALID 0x00000130
  929. /* These are new to v2.0 */
  930. #define CKR_BUFFER_TOO_SMALL 0x00000150
  931. #define CKR_SAVED_STATE_INVALID 0x00000160
  932. #define CKR_INFORMATION_SENSITIVE 0x00000170
  933. #define CKR_STATE_UNSAVEABLE 0x00000180
  934. /* These are new to v2.01 */
  935. #define CKR_CRYPTOKI_NOT_INITIALIZED 0x00000190
  936. #define CKR_CRYPTOKI_ALREADY_INITIALIZED 0x00000191
  937. #define CKR_MUTEX_BAD 0x000001A0
  938. #define CKR_MUTEX_NOT_LOCKED 0x000001A1
  939. /* This is new to v2.20 */
  940. #define CKR_FUNCTION_REJECTED 0x00000200
  941. #define CKR_VENDOR_DEFINED 0x80000000
  942. /* CK_NOTIFY is an application callback that processes events */
  943. typedef CK_CALLBACK_FUNCTION(CK_RV, CK_NOTIFY)(
  944. CK_SESSION_HANDLE hSession, /* the session's handle */
  945. CK_NOTIFICATION event,
  946. CK_VOID_PTR pApplication /* passed to C_OpenSession */
  947. );
  948. /* CK_FUNCTION_LIST is a structure holding a PKCS #11 spec
  949. * version and pointers of appropriate types to all the
  950. * PKCS #11 functions */
  951. /* CK_FUNCTION_LIST is new for v2.0 */
  952. typedef struct CK_FUNCTION_LIST CK_FUNCTION_LIST;
  953. typedef CK_FUNCTION_LIST CK_PTR CK_FUNCTION_LIST_PTR;
  954. typedef CK_FUNCTION_LIST_PTR CK_PTR CK_FUNCTION_LIST_PTR_PTR;
  955. /* CK_CREATEMUTEX is an application callback for creating a
  956. * mutex object */
  957. typedef CK_CALLBACK_FUNCTION(CK_RV, CK_CREATEMUTEX)(
  958. CK_VOID_PTR_PTR ppMutex /* location to receive ptr to mutex */
  959. );
  960. /* CK_DESTROYMUTEX is an application callback for destroying a
  961. * mutex object */
  962. typedef CK_CALLBACK_FUNCTION(CK_RV, CK_DESTROYMUTEX)(
  963. CK_VOID_PTR pMutex /* pointer to mutex */
  964. );
  965. /* CK_LOCKMUTEX is an application callback for locking a mutex */
  966. typedef CK_CALLBACK_FUNCTION(CK_RV, CK_LOCKMUTEX)(
  967. CK_VOID_PTR pMutex /* pointer to mutex */
  968. );
  969. /* CK_UNLOCKMUTEX is an application callback for unlocking a
  970. * mutex */
  971. typedef CK_CALLBACK_FUNCTION(CK_RV, CK_UNLOCKMUTEX)(
  972. CK_VOID_PTR pMutex /* pointer to mutex */
  973. );
  974. /* CK_C_INITIALIZE_ARGS provides the optional arguments to
  975. * C_Initialize */
  976. typedef struct CK_C_INITIALIZE_ARGS {
  977. CK_CREATEMUTEX CreateMutex;
  978. CK_DESTROYMUTEX DestroyMutex;
  979. CK_LOCKMUTEX LockMutex;
  980. CK_UNLOCKMUTEX UnlockMutex;
  981. CK_FLAGS flags;
  982. /* The official PKCS #11 spec does not have a 'LibraryParameters' field, but
  983. * a reserved field. NSS needs a way to pass instance-specific information
  984. * to the library (like where to find its config files, etc). This
  985. * information is usually provided by the installer and passed uninterpreted
  986. * by NSS to the library, though NSS does know the specifics of the softoken
  987. * version of this parameter. Most compliant PKCS#11 modules expect this
  988. * parameter to be NULL, and will return CKR_ARGUMENTS_BAD from
  989. * C_Initialize if Library parameters is supplied. */
  990. CK_CHAR_PTR *LibraryParameters;
  991. /* This field is only present if the LibraryParameters is not NULL. It must
  992. * be NULL in all cases */
  993. CK_VOID_PTR pReserved;
  994. } CK_C_INITIALIZE_ARGS;
  995. /* flags: bit flags that provide capabilities of the slot
  996. * Bit Flag Mask Meaning
  997. */
  998. #define CKF_LIBRARY_CANT_CREATE_OS_THREADS 0x00000001
  999. #define CKF_OS_LOCKING_OK 0x00000002
  1000. typedef CK_C_INITIALIZE_ARGS CK_PTR CK_C_INITIALIZE_ARGS_PTR;
  1001. /* additional flags for parameters to functions */
  1002. /* CKF_DONT_BLOCK is for the function C_WaitForSlotEvent */
  1003. #define CKF_DONT_BLOCK 1
  1004. /* CK_RSA_PKCS_OAEP_MGF_TYPE is new for v2.10.
  1005. * CK_RSA_PKCS_OAEP_MGF_TYPE is used to indicate the Message
  1006. * Generation Function (MGF) applied to a message block when
  1007. * formatting a message block for the PKCS #1 OAEP encryption
  1008. * scheme. */
  1009. typedef CK_ULONG CK_RSA_PKCS_MGF_TYPE;
  1010. typedef CK_RSA_PKCS_MGF_TYPE CK_PTR CK_RSA_PKCS_MGF_TYPE_PTR;
  1011. /* The following MGFs are defined */
  1012. /* CKG_MGF1_SHA256, CKG_MGF1_SHA384, and CKG_MGF1_SHA512
  1013. * are new for v2.20 */
  1014. #define CKG_MGF1_SHA1 0x00000001
  1015. #define CKG_MGF1_SHA256 0x00000002
  1016. #define CKG_MGF1_SHA384 0x00000003
  1017. #define CKG_MGF1_SHA512 0x00000004
  1018. /* v2.20 amendment 3 */
  1019. #define CKG_MGF1_SHA224 0x00000005
  1020. /* CK_RSA_PKCS_OAEP_SOURCE_TYPE is new for v2.10.
  1021. * CK_RSA_PKCS_OAEP_SOURCE_TYPE is used to indicate the source
  1022. * of the encoding parameter when formatting a message block
  1023. * for the PKCS #1 OAEP encryption scheme. */
  1024. typedef CK_ULONG CK_RSA_PKCS_OAEP_SOURCE_TYPE;
  1025. typedef CK_RSA_PKCS_OAEP_SOURCE_TYPE CK_PTR CK_RSA_PKCS_OAEP_SOURCE_TYPE_PTR;
  1026. /* The following encoding parameter sources are defined */
  1027. #define CKZ_DATA_SPECIFIED 0x00000001
  1028. /* CK_RSA_PKCS_OAEP_PARAMS is new for v2.10.
  1029. * CK_RSA_PKCS_OAEP_PARAMS provides the parameters to the
  1030. * CKM_RSA_PKCS_OAEP mechanism. */
  1031. typedef struct CK_RSA_PKCS_OAEP_PARAMS {
  1032. CK_MECHANISM_TYPE hashAlg;
  1033. CK_RSA_PKCS_MGF_TYPE mgf;
  1034. CK_RSA_PKCS_OAEP_SOURCE_TYPE source;
  1035. CK_VOID_PTR pSourceData;
  1036. CK_ULONG ulSourceDataLen;
  1037. } CK_RSA_PKCS_OAEP_PARAMS;
  1038. typedef CK_RSA_PKCS_OAEP_PARAMS CK_PTR CK_RSA_PKCS_OAEP_PARAMS_PTR;
  1039. /* CK_RSA_PKCS_PSS_PARAMS is new for v2.11.
  1040. * CK_RSA_PKCS_PSS_PARAMS provides the parameters to the
  1041. * CKM_RSA_PKCS_PSS mechanism(s). */
  1042. typedef struct CK_RSA_PKCS_PSS_PARAMS {
  1043. CK_MECHANISM_TYPE hashAlg;
  1044. CK_RSA_PKCS_MGF_TYPE mgf;
  1045. CK_ULONG sLen;
  1046. } CK_RSA_PKCS_PSS_PARAMS;
  1047. typedef CK_RSA_PKCS_PSS_PARAMS CK_PTR CK_RSA_PKCS_PSS_PARAMS_PTR;
  1048. /* CK_EC_KDF_TYPE is new for v2.11. */
  1049. typedef CK_ULONG CK_EC_KDF_TYPE;
  1050. /* The following EC Key Derivation Functions are defined */
  1051. #define CKD_NULL 0x00000001
  1052. #define CKD_SHA1_KDF 0x00000002
  1053. /* CK_ECDH1_DERIVE_PARAMS is new for v2.11.
  1054. * CK_ECDH1_DERIVE_PARAMS provides the parameters to the
  1055. * CKM_ECDH1_DERIVE and CKM_ECDH1_COFACTOR_DERIVE mechanisms,
  1056. * where each party contributes one key pair.
  1057. */
  1058. typedef struct CK_ECDH1_DERIVE_PARAMS {
  1059. CK_EC_KDF_TYPE kdf;
  1060. CK_ULONG ulSharedDataLen;
  1061. CK_BYTE_PTR pSharedData;
  1062. CK_ULONG ulPublicDataLen;
  1063. CK_BYTE_PTR pPublicData;
  1064. } CK_ECDH1_DERIVE_PARAMS;
  1065. typedef CK_ECDH1_DERIVE_PARAMS CK_PTR CK_ECDH1_DERIVE_PARAMS_PTR;
  1066. /* CK_ECDH2_DERIVE_PARAMS is new for v2.11.
  1067. * CK_ECDH2_DERIVE_PARAMS provides the parameters to the
  1068. * CKM_ECMQV_DERIVE mechanism, where each party contributes two key pairs. */
  1069. typedef struct CK_ECDH2_DERIVE_PARAMS {
  1070. CK_EC_KDF_TYPE kdf;
  1071. CK_ULONG ulSharedDataLen;
  1072. CK_BYTE_PTR pSharedData;
  1073. CK_ULONG ulPublicDataLen;
  1074. CK_BYTE_PTR pPublicData;
  1075. CK_ULONG ulPrivateDataLen;
  1076. CK_OBJECT_HANDLE hPrivateData;
  1077. CK_ULONG ulPublicDataLen2;
  1078. CK_BYTE_PTR pPublicData2;
  1079. } CK_ECDH2_DERIVE_PARAMS;
  1080. typedef CK_ECDH2_DERIVE_PARAMS CK_PTR CK_ECDH2_DERIVE_PARAMS_PTR;
  1081. typedef struct CK_ECMQV_DERIVE_PARAMS {
  1082. CK_EC_KDF_TYPE kdf;
  1083. CK_ULONG ulSharedDataLen;
  1084. CK_BYTE_PTR pSharedData;
  1085. CK_ULONG ulPublicDataLen;
  1086. CK_BYTE_PTR pPublicData;
  1087. CK_ULONG ulPrivateDataLen;
  1088. CK_OBJECT_HANDLE hPrivateData;
  1089. CK_ULONG ulPublicDataLen2;
  1090. CK_BYTE_PTR pPublicData2;
  1091. CK_OBJECT_HANDLE publicKey;
  1092. } CK_ECMQV_DERIVE_PARAMS;
  1093. typedef CK_ECMQV_DERIVE_PARAMS CK_PTR CK_ECMQV_DERIVE_PARAMS_PTR;
  1094. /* Typedefs and defines for the CKM_X9_42_DH_KEY_PAIR_GEN and the
  1095. * CKM_X9_42_DH_PARAMETER_GEN mechanisms (new for PKCS #11 v2.11) */
  1096. typedef CK_ULONG CK_X9_42_DH_KDF_TYPE;
  1097. typedef CK_X9_42_DH_KDF_TYPE CK_PTR CK_X9_42_DH_KDF_TYPE_PTR;
  1098. /* The following X9.42 DH key derivation functions are defined
  1099. (besides CKD_NULL already defined : */
  1100. #define CKD_SHA1_KDF_ASN1 0x00000003
  1101. #define CKD_SHA1_KDF_CONCATENATE 0x00000004
  1102. /* CK_X9_42_DH1_DERIVE_PARAMS is new for v2.11.
  1103. * CK_X9_42_DH1_DERIVE_PARAMS provides the parameters to the
  1104. * CKM_X9_42_DH_DERIVE key derivation mechanism, where each party
  1105. * contributes one key pair */
  1106. typedef struct CK_X9_42_DH1_DERIVE_PARAMS {
  1107. CK_X9_42_DH_KDF_TYPE kdf;
  1108. CK_ULONG ulOtherInfoLen;
  1109. CK_BYTE_PTR pOtherInfo;
  1110. CK_ULONG ulPublicDataLen;
  1111. CK_BYTE_PTR pPublicData;
  1112. } CK_X9_42_DH1_DERIVE_PARAMS;
  1113. typedef struct CK_X9_42_DH1_DERIVE_PARAMS CK_PTR CK_X9_42_DH1_DERIVE_PARAMS_PTR;
  1114. /* CK_X9_42_DH2_DERIVE_PARAMS is new for v2.11.
  1115. * CK_X9_42_DH2_DERIVE_PARAMS provides the parameters to the
  1116. * CKM_X9_42_DH_HYBRID_DERIVE and CKM_X9_42_MQV_DERIVE key derivation
  1117. * mechanisms, where each party contributes two key pairs */
  1118. typedef struct CK_X9_42_DH2_DERIVE_PARAMS {
  1119. CK_X9_42_DH_KDF_TYPE kdf;
  1120. CK_ULONG ulOtherInfoLen;
  1121. CK_BYTE_PTR pOtherInfo;
  1122. CK_ULONG ulPublicDataLen;
  1123. CK_BYTE_PTR pPublicData;
  1124. CK_ULONG ulPrivateDataLen;
  1125. CK_OBJECT_HANDLE hPrivateData;
  1126. CK_ULONG ulPublicDataLen2;
  1127. CK_BYTE_PTR pPublicData2;
  1128. } CK_X9_42_DH2_DERIVE_PARAMS;
  1129. typedef CK_X9_42_DH2_DERIVE_PARAMS CK_PTR CK_X9_42_DH2_DERIVE_PARAMS_PTR;
  1130. typedef struct CK_X9_42_MQV_DERIVE_PARAMS {
  1131. CK_X9_42_DH_KDF_TYPE kdf;
  1132. CK_ULONG ulOtherInfoLen;
  1133. CK_BYTE_PTR pOtherInfo;
  1134. CK_ULONG ulPublicDataLen;
  1135. CK_BYTE_PTR pPublicData;
  1136. CK_ULONG ulPrivateDataLen;
  1137. CK_OBJECT_HANDLE hPrivateData;
  1138. CK_ULONG ulPublicDataLen2;
  1139. CK_BYTE_PTR pPublicData2;
  1140. CK_OBJECT_HANDLE publicKey;
  1141. } CK_X9_42_MQV_DERIVE_PARAMS;
  1142. typedef CK_X9_42_MQV_DERIVE_PARAMS CK_PTR CK_X9_42_MQV_DERIVE_PARAMS_PTR;
  1143. /* CK_KEA_DERIVE_PARAMS provides the parameters to the
  1144. * CKM_KEA_DERIVE mechanism */
  1145. /* CK_KEA_DERIVE_PARAMS is new for v2.0 */
  1146. typedef struct CK_KEA_DERIVE_PARAMS {
  1147. CK_BBOOL isSender;
  1148. CK_ULONG ulRandomLen;
  1149. CK_BYTE_PTR pRandomA;
  1150. CK_BYTE_PTR pRandomB;
  1151. CK_ULONG ulPublicDataLen;
  1152. CK_BYTE_PTR pPublicData;
  1153. } CK_KEA_DERIVE_PARAMS;
  1154. typedef CK_KEA_DERIVE_PARAMS CK_PTR CK_KEA_DERIVE_PARAMS_PTR;
  1155. /* CK_RC2_PARAMS provides the parameters to the CKM_RC2_ECB and
  1156. * CKM_RC2_MAC mechanisms. An instance of CK_RC2_PARAMS just
  1157. * holds the effective keysize */
  1158. typedef CK_ULONG CK_RC2_PARAMS;
  1159. typedef CK_RC2_PARAMS CK_PTR CK_RC2_PARAMS_PTR;
  1160. /* CK_RC2_CBC_PARAMS provides the parameters to the CKM_RC2_CBC
  1161. * mechanism */
  1162. typedef struct CK_RC2_CBC_PARAMS {
  1163. /* ulEffectiveBits was changed from CK_USHORT to CK_ULONG for
  1164. * v2.0 */
  1165. CK_ULONG ulEffectiveBits; /* effective bits (1-1024) */
  1166. CK_BYTE iv[8]; /* IV for CBC mode */
  1167. } CK_RC2_CBC_PARAMS;
  1168. typedef CK_RC2_CBC_PARAMS CK_PTR CK_RC2_CBC_PARAMS_PTR;
  1169. /* CK_RC2_MAC_GENERAL_PARAMS provides the parameters for the
  1170. * CKM_RC2_MAC_GENERAL mechanism */
  1171. /* CK_RC2_MAC_GENERAL_PARAMS is new for v2.0 */
  1172. typedef struct CK_RC2_MAC_GENERAL_PARAMS {
  1173. CK_ULONG ulEffectiveBits; /* effective bits (1-1024) */
  1174. CK_ULONG ulMacLength; /* Length of MAC in bytes */
  1175. } CK_RC2_MAC_GENERAL_PARAMS;
  1176. typedef CK_RC2_MAC_GENERAL_PARAMS CK_PTR \
  1177. CK_RC2_MAC_GENERAL_PARAMS_PTR;
  1178. /* CK_RC5_PARAMS provides the parameters to the CKM_RC5_ECB and
  1179. * CKM_RC5_MAC mechanisms */
  1180. /* CK_RC5_PARAMS is new for v2.0 */
  1181. typedef struct CK_RC5_PARAMS {
  1182. CK_ULONG ulWordsize; /* wordsize in bits */
  1183. CK_ULONG ulRounds; /* number of rounds */
  1184. } CK_RC5_PARAMS;
  1185. typedef CK_RC5_PARAMS CK_PTR CK_RC5_PARAMS_PTR;
  1186. /* CK_RC5_CBC_PARAMS provides the parameters to the CKM_RC5_CBC
  1187. * mechanism */
  1188. /* CK_RC5_CBC_PARAMS is new for v2.0 */
  1189. typedef struct CK_RC5_CBC_PARAMS {
  1190. CK_ULONG ulWordsize; /* wordsize in bits */
  1191. CK_ULONG ulRounds; /* number of rounds */
  1192. CK_BYTE_PTR pIv; /* pointer to IV */
  1193. CK_ULONG ulIvLen; /* length of IV in bytes */
  1194. } CK_RC5_CBC_PARAMS;
  1195. typedef CK_RC5_CBC_PARAMS CK_PTR CK_RC5_CBC_PARAMS_PTR;
  1196. /* CK_RC5_MAC_GENERAL_PARAMS provides the parameters for the
  1197. * CKM_RC5_MAC_GENERAL mechanism */
  1198. /* CK_RC5_MAC_GENERAL_PARAMS is new for v2.0 */
  1199. typedef struct CK_RC5_MAC_GENERAL_PARAMS {
  1200. CK_ULONG ulWordsize; /* wordsize in bits */
  1201. CK_ULONG ulRounds; /* number of rounds */
  1202. CK_ULONG ulMacLength; /* Length of MAC in bytes */
  1203. } CK_RC5_MAC_GENERAL_PARAMS;
  1204. typedef CK_RC5_MAC_GENERAL_PARAMS CK_PTR \
  1205. CK_RC5_MAC_GENERAL_PARAMS_PTR;
  1206. /* CK_MAC_GENERAL_PARAMS provides the parameters to most block
  1207. * ciphers' MAC_GENERAL mechanisms. Its value is the length of
  1208. * the MAC */
  1209. /* CK_MAC_GENERAL_PARAMS is new for v2.0 */
  1210. typedef CK_ULONG CK_MAC_GENERAL_PARAMS;
  1211. typedef CK_MAC_GENERAL_PARAMS CK_PTR CK_MAC_GENERAL_PARAMS_PTR;
  1212. /* CK_DES/AES_ECB/CBC_ENCRYPT_DATA_PARAMS are new for v2.20 */
  1213. typedef struct CK_DES_CBC_ENCRYPT_DATA_PARAMS {
  1214. CK_BYTE iv[8];
  1215. CK_BYTE_PTR pData;
  1216. CK_ULONG length;
  1217. } CK_DES_CBC_ENCRYPT_DATA_PARAMS;
  1218. typedef CK_DES_CBC_ENCRYPT_DATA_PARAMS CK_PTR CK_DES_CBC_ENCRYPT_DATA_PARAMS_PTR;
  1219. typedef struct CK_AES_CBC_ENCRYPT_DATA_PARAMS {
  1220. CK_BYTE iv[16];
  1221. CK_BYTE_PTR pData;
  1222. CK_ULONG length;
  1223. } CK_AES_CBC_ENCRYPT_DATA_PARAMS;
  1224. typedef CK_AES_CBC_ENCRYPT_DATA_PARAMS CK_PTR CK_AES_CBC_ENCRYPT_DATA_PARAMS_PTR;
  1225. /* CK_SKIPJACK_PRIVATE_WRAP_PARAMS provides the parameters to the
  1226. * CKM_SKIPJACK_PRIVATE_WRAP mechanism */
  1227. /* CK_SKIPJACK_PRIVATE_WRAP_PARAMS is new for v2.0 */
  1228. typedef struct CK_SKIPJACK_PRIVATE_WRAP_PARAMS {
  1229. CK_ULONG ulPasswordLen;
  1230. CK_BYTE_PTR pPassword;
  1231. CK_ULONG ulPublicDataLen;
  1232. CK_BYTE_PTR pPublicData;
  1233. CK_ULONG ulPAndGLen;
  1234. CK_ULONG ulQLen;
  1235. CK_ULONG ulRandomLen;
  1236. CK_BYTE_PTR pRandomA;
  1237. CK_BYTE_PTR pPrimeP;
  1238. CK_BYTE_PTR pBaseG;
  1239. CK_BYTE_PTR pSubprimeQ;
  1240. } CK_SKIPJACK_PRIVATE_WRAP_PARAMS;
  1241. typedef CK_SKIPJACK_PRIVATE_WRAP_PARAMS CK_PTR \
  1242. CK_SKIPJACK_PRIVATE_WRAP_PTR;
  1243. /* CK_SKIPJACK_RELAYX_PARAMS provides the parameters to the
  1244. * CKM_SKIPJACK_RELAYX mechanism */
  1245. /* CK_SKIPJACK_RELAYX_PARAMS is new for v2.0 */
  1246. typedef struct CK_SKIPJACK_RELAYX_PARAMS {
  1247. CK_ULONG ulOldWrappedXLen;
  1248. CK_BYTE_PTR pOldWrappedX;
  1249. CK_ULONG ulOldPasswordLen;
  1250. CK_BYTE_PTR pOldPassword;
  1251. CK_ULONG ulOldPublicDataLen;
  1252. CK_BYTE_PTR pOldPublicData;
  1253. CK_ULONG ulOldRandomLen;
  1254. CK_BYTE_PTR pOldRandomA;
  1255. CK_ULONG ulNewPasswordLen;
  1256. CK_BYTE_PTR pNewPassword;
  1257. CK_ULONG ulNewPublicDataLen;
  1258. CK_BYTE_PTR pNewPublicData;
  1259. CK_ULONG ulNewRandomLen;
  1260. CK_BYTE_PTR pNewRandomA;
  1261. } CK_SKIPJACK_RELAYX_PARAMS;
  1262. typedef CK_SKIPJACK_RELAYX_PARAMS CK_PTR \
  1263. CK_SKIPJACK_RELAYX_PARAMS_PTR;
  1264. typedef struct CK_PBE_PARAMS {
  1265. CK_BYTE_PTR pInitVector;
  1266. CK_UTF8CHAR_PTR pPassword;
  1267. CK_ULONG ulPasswordLen;
  1268. CK_BYTE_PTR pSalt;
  1269. CK_ULONG ulSaltLen;
  1270. CK_ULONG ulIteration;
  1271. } CK_PBE_PARAMS;
  1272. typedef CK_PBE_PARAMS CK_PTR CK_PBE_PARAMS_PTR;
  1273. /* CK_KEY_WRAP_SET_OAEP_PARAMS provides the parameters to the
  1274. * CKM_KEY_WRAP_SET_OAEP mechanism */
  1275. /* CK_KEY_WRAP_SET_OAEP_PARAMS is new for v2.0 */
  1276. typedef struct CK_KEY_WRAP_SET_OAEP_PARAMS {
  1277. CK_BYTE bBC; /* block contents byte */
  1278. CK_BYTE_PTR pX; /* extra data */
  1279. CK_ULONG ulXLen; /* length of extra data in bytes */
  1280. } CK_KEY_WRAP_SET_OAEP_PARAMS;
  1281. typedef CK_KEY_WRAP_SET_OAEP_PARAMS CK_PTR \
  1282. CK_KEY_WRAP_SET_OAEP_PARAMS_PTR;
  1283. typedef struct CK_SSL3_RANDOM_DATA {
  1284. CK_BYTE_PTR pClientRandom;
  1285. CK_ULONG ulClientRandomLen;
  1286. CK_BYTE_PTR pServerRandom;
  1287. CK_ULONG ulServerRandomLen;
  1288. } CK_SSL3_RANDOM_DATA;
  1289. typedef struct CK_SSL3_MASTER_KEY_DERIVE_PARAMS {
  1290. CK_SSL3_RANDOM_DATA RandomInfo;
  1291. CK_VERSION_PTR pVersion;
  1292. } CK_SSL3_MASTER_KEY_DERIVE_PARAMS;
  1293. typedef struct CK_SSL3_MASTER_KEY_DERIVE_PARAMS CK_PTR \
  1294. CK_SSL3_MASTER_KEY_DERIVE_PARAMS_PTR;
  1295. typedef struct CK_SSL3_KEY_MAT_OUT {
  1296. CK_OBJECT_HANDLE hClientMacSecret;
  1297. CK_OBJECT_HANDLE hServerMacSecret;
  1298. CK_OBJECT_HANDLE hClientKey;
  1299. CK_OBJECT_HANDLE hServerKey;
  1300. CK_BYTE_PTR pIVClient;
  1301. CK_BYTE_PTR pIVServer;
  1302. } CK_SSL3_KEY_MAT_OUT;
  1303. typedef CK_SSL3_KEY_MAT_OUT CK_PTR CK_SSL3_KEY_MAT_OUT_PTR;
  1304. typedef struct CK_SSL3_KEY_MAT_PARAMS {
  1305. CK_ULONG ulMacSizeInBits;
  1306. CK_ULONG ulKeySizeInBits;
  1307. CK_ULONG ulIVSizeInBits;
  1308. CK_BBOOL bIsExport;
  1309. CK_SSL3_RANDOM_DATA RandomInfo;
  1310. CK_SSL3_KEY_MAT_OUT_PTR pReturnedKeyMaterial;
  1311. } CK_SSL3_KEY_MAT_PARAMS;
  1312. typedef CK_SSL3_KEY_MAT_PARAMS CK_PTR CK_SSL3_KEY_MAT_PARAMS_PTR;
  1313. /* CK_TLS_PRF_PARAMS is new for version 2.20 */
  1314. typedef struct CK_TLS_PRF_PARAMS {
  1315. CK_BYTE_PTR pSeed;
  1316. CK_ULONG ulSeedLen;
  1317. CK_BYTE_PTR pLabel;
  1318. CK_ULONG ulLabelLen;
  1319. CK_BYTE_PTR pOutput;
  1320. CK_ULONG_PTR pulOutputLen;
  1321. } CK_TLS_PRF_PARAMS;
  1322. typedef CK_TLS_PRF_PARAMS CK_PTR CK_TLS_PRF_PARAMS_PTR;
  1323. /* WTLS is new for version 2.20 */
  1324. typedef struct CK_WTLS_RANDOM_DATA {
  1325. CK_BYTE_PTR pClientRandom;
  1326. CK_ULONG ulClientRandomLen;
  1327. CK_BYTE_PTR pServerRandom;
  1328. CK_ULONG ulServerRandomLen;
  1329. } CK_WTLS_RANDOM_DATA;
  1330. typedef CK_WTLS_RANDOM_DATA CK_PTR CK_WTLS_RANDOM_DATA_PTR;
  1331. typedef struct CK_WTLS_MASTER_KEY_DERIVE_PARAMS {
  1332. CK_MECHANISM_TYPE DigestMechanism;
  1333. CK_WTLS_RANDOM_DATA RandomInfo;
  1334. CK_BYTE_PTR pVersion;
  1335. } CK_WTLS_MASTER_KEY_DERIVE_PARAMS;
  1336. typedef CK_WTLS_MASTER_KEY_DERIVE_PARAMS CK_PTR \
  1337. CK_WTLS_MASTER_KEY_DERIVE_PARAMS_PTR;
  1338. typedef struct CK_WTLS_PRF_PARAMS {
  1339. CK_MECHANISM_TYPE DigestMechanism;
  1340. CK_BYTE_PTR pSeed;
  1341. CK_ULONG ulSeedLen;
  1342. CK_BYTE_PTR pLabel;
  1343. CK_ULONG ulLabelLen;
  1344. CK_BYTE_PTR pOutput;
  1345. CK_ULONG_PTR pulOutputLen;
  1346. } CK_WTLS_PRF_PARAMS;
  1347. typedef CK_WTLS_PRF_PARAMS CK_PTR CK_WTLS_PRF_PARAMS_PTR;
  1348. typedef struct CK_WTLS_KEY_MAT_OUT {
  1349. CK_OBJECT_HANDLE hMacSecret;
  1350. CK_OBJECT_HANDLE hKey;
  1351. CK_BYTE_PTR pIV;
  1352. } CK_WTLS_KEY_MAT_OUT;
  1353. typedef CK_WTLS_KEY_MAT_OUT CK_PTR CK_WTLS_KEY_MAT_OUT_PTR;
  1354. typedef struct CK_WTLS_KEY_MAT_PARAMS {
  1355. CK_MECHANISM_TYPE DigestMechanism;
  1356. CK_ULONG ulMacSizeInBits;
  1357. CK_ULONG ulKeySizeInBits;
  1358. CK_ULONG ulIVSizeInBits;
  1359. CK_ULONG ulSequenceNumber;
  1360. CK_BBOOL bIsExport;
  1361. CK_WTLS_RANDOM_DATA RandomInfo;
  1362. CK_WTLS_KEY_MAT_OUT_PTR pReturnedKeyMaterial;
  1363. } CK_WTLS_KEY_MAT_PARAMS;
  1364. typedef CK_WTLS_KEY_MAT_PARAMS CK_PTR CK_WTLS_KEY_MAT_PARAMS_PTR;
  1365. /* CMS is new for version 2.20 */
  1366. typedef struct CK_CMS_SIG_PARAMS {
  1367. CK_OBJECT_HANDLE certificateHandle;
  1368. CK_MECHANISM_PTR pSigningMechanism;
  1369. CK_MECHANISM_PTR pDigestMechanism;
  1370. CK_UTF8CHAR_PTR pContentType;
  1371. CK_BYTE_PTR pRequestedAttributes;
  1372. CK_ULONG ulRequestedAttributesLen;
  1373. CK_BYTE_PTR pRequiredAttributes;
  1374. CK_ULONG ulRequiredAttributesLen;
  1375. } CK_CMS_SIG_PARAMS;
  1376. typedef CK_CMS_SIG_PARAMS CK_PTR CK_CMS_SIG_PARAMS_PTR;
  1377. typedef struct CK_KEY_DERIVATION_STRING_DATA {
  1378. CK_BYTE_PTR pData;
  1379. CK_ULONG ulLen;
  1380. } CK_KEY_DERIVATION_STRING_DATA;
  1381. typedef CK_KEY_DERIVATION_STRING_DATA CK_PTR \
  1382. CK_KEY_DERIVATION_STRING_DATA_PTR;
  1383. /* The CK_EXTRACT_PARAMS is used for the
  1384. * CKM_EXTRACT_KEY_FROM_KEY mechanism. It specifies which bit
  1385. * of the base key should be used as the first bit of the
  1386. * derived key */
  1387. /* CK_EXTRACT_PARAMS is new for v2.0 */
  1388. typedef CK_ULONG CK_EXTRACT_PARAMS;
  1389. typedef CK_EXTRACT_PARAMS CK_PTR CK_EXTRACT_PARAMS_PTR;
  1390. /* CK_PKCS5_PBKD2_PSEUDO_RANDOM_FUNCTION_TYPE is new for v2.10.
  1391. * CK_PKCS5_PBKD2_PSEUDO_RANDOM_FUNCTION_TYPE is used to
  1392. * indicate the Pseudo-Random Function (PRF) used to generate
  1393. * key bits using PKCS #5 PBKDF2. */
  1394. typedef CK_ULONG CK_PKCS5_PBKD2_PSEUDO_RANDOM_FUNCTION_TYPE;
  1395. typedef CK_PKCS5_PBKD2_PSEUDO_RANDOM_FUNCTION_TYPE CK_PTR CK_PKCS5_PBKD2_PSEUDO_RANDOM_FUNCTION_TYPE_PTR;
  1396. /* The following PRFs are defined in PKCS #5 v2.0. */
  1397. #define CKP_PKCS5_PBKD2_HMAC_SHA1 0x00000001
  1398. /* CK_PKCS5_PBKDF2_SALT_SOURCE_TYPE is new for v2.10.
  1399. * CK_PKCS5_PBKDF2_SALT_SOURCE_TYPE is used to indicate the
  1400. * source of the salt value when deriving a key using PKCS #5
  1401. * PBKDF2. */
  1402. typedef CK_ULONG CK_PKCS5_PBKDF2_SALT_SOURCE_TYPE;
  1403. typedef CK_PKCS5_PBKDF2_SALT_SOURCE_TYPE CK_PTR CK_PKCS5_PBKDF2_SALT_SOURCE_TYPE_PTR;
  1404. /* The following salt value sources are defined in PKCS #5 v2.0. */
  1405. #define CKZ_SALT_SPECIFIED 0x00000001
  1406. /* CK_PKCS5_PBKD2_PARAMS is new for v2.10.
  1407. * CK_PKCS5_PBKD2_PARAMS is a structure that provides the
  1408. * parameters to the CKM_PKCS5_PBKD2 mechanism. */
  1409. typedef struct CK_PKCS5_PBKD2_PARAMS {
  1410. CK_PKCS5_PBKDF2_SALT_SOURCE_TYPE saltSource;
  1411. CK_VOID_PTR pSaltSourceData;
  1412. CK_ULONG ulSaltSourceDataLen;
  1413. CK_ULONG iterations;
  1414. CK_PKCS5_PBKD2_PSEUDO_RANDOM_FUNCTION_TYPE prf;
  1415. CK_VOID_PTR pPrfData;
  1416. CK_ULONG ulPrfDataLen;
  1417. CK_UTF8CHAR_PTR pPassword;
  1418. CK_ULONG_PTR ulPasswordLen;
  1419. } CK_PKCS5_PBKD2_PARAMS;
  1420. typedef CK_PKCS5_PBKD2_PARAMS CK_PTR CK_PKCS5_PBKD2_PARAMS_PTR;
  1421. /* NSS Specific defines */
  1422. /* defines that have been deprecated in 2.20, but maintained in our
  1423. * header file for backward compatibility */
  1424. #define CKO_KG_PARAMETERS CKO_DOMAIN_PARAMETERS
  1425. #define CKF_EC_FP CKF_EC_F_P
  1426. /* new in v2.11 deprecated by 2.20 */
  1427. #define CKR_KEY_PARAMS_INVALID 0x0000006B
  1428. /* stuff that for historic reasons is in this header file but should have
  1429. * been in pkcs11n.h */
  1430. #define CKK_INVALID_KEY_TYPE 0xffffffff
  1431. #include "pkcs11n.h"
  1432. /* undo packing */
  1433. #include "pkcs11u.h"
  1434. #endif