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

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. #ifndef _PKCS11T_H_
  40. #define _PKCS11T_H_ 1
  41. /* an unsigned 8-bit value */
  42. typedef unsigned char  CK_BYTE;
  43. /* an unsigned 8-bit character */
  44. typedef CK_BYTE  CK_CHAR;
  45. /* a BYTE-sized Boolean flag */
  46. typedef CK_BYTE CK_BBOOL;
  47. /* an unsigned value, at least 32 bits long */
  48. typedef unsigned long int CK_ULONG;
  49. /* a signed value, the same size as a CK_ULONG */
  50. /* CK_LONG is new for v2.0 */
  51. typedef long int CK_LONG;
  52. /* at least 32 bits, each bit is a Boolean flag */
  53. typedef CK_ULONG  CK_FLAGS;
  54. /* some special values for certain CK_ULONG variables */
  55. #define CK_UNAVAILABLE_INFORMATION (~0UL)
  56. #define CK_EFFECTIVELY_INFINITE    0
  57. /* these data types are platform/implementation dependent. */
  58. #if defined(XP_WIN) 
  59. #if defined(_WIN32)
  60. #define CK_ENTRY
  61. #define CK_PTR * /* definition for Win32 */ 
  62. #define NULL_PTR  0 /* NULL pointer */
  63. #pragma pack(push, cryptoki, 1)
  64. #else /* win16 */
  65. #if defined(__WATCOMC__)
  66. #define CK_ENTRY
  67. #define CK_PTR * /* definition for Win16 */ 
  68. #define NULL_PTR  0 /* NULL pointer */
  69. #pragma pack(push, 1)
  70. #else /* not Watcom 16-bit */
  71. #define CK_ENTRY
  72. #define CK_PTR * /* definition for Win16 */ 
  73. #define NULL_PTR  0 /* NULL pointer */
  74. #pragma pack(1)
  75. #endif
  76. #endif
  77. #else /* not windows */
  78. #define CK_ENTRY
  79. #define CK_PTR * /* definition for UNIX */ 
  80. #define NULL_PTR  0 /* NULL pointer */
  81. #endif
  82. typedef CK_BYTE     CK_PTR CK_BYTE_PTR;     /* Pointer to a CK_BYTE */
  83. typedef CK_CHAR     CK_PTR CK_CHAR_PTR;     /* Pointer to a CK_CHAR */
  84. typedef CK_ULONG    CK_PTR CK_ULONG_PTR;    /* Pointer to a CK_ULONG */
  85. typedef void        CK_PTR CK_VOID_PTR;     /* Pointer to a void */
  86. typedef CK_VOID_PTR CK_PTR      CK_VOID_PTR_PTR; /* Pointer to a CK_VOID_PTR */
  87. /* The following value is always invalid if used as a session */
  88. /* handle or object handle */
  89. #define CK_INVALID_HANDLE 0
  90. typedef struct CK_VERSION {
  91.     CK_BYTE major; /* integer    portion of the version number */
  92.     CK_BYTE minor;  /* hundredths portion of the version number */
  93. } CK_VERSION;
  94. typedef CK_VERSION CK_PTR CK_VERSION_PTR; /* points to a CK_VERSION */
  95. typedef struct CK_INFO {
  96.     CK_VERSION cryptokiVersion; /* PKCS #11 interface version number */
  97.     CK_CHAR manufacturerID[32]; /* blank padded */
  98.     CK_FLAGS flags; /* must be zero */
  99.     /* libraryDescription and libraryVersion are new for v2.0 */
  100.     CK_CHAR libraryDescription[32]; /* blank padded */
  101.     CK_VERSION libraryVersion; /* version of library */
  102. } CK_INFO;
  103. typedef CK_INFO CK_PTR CK_INFO_PTR; /* points to a CK_INFO structure */
  104. /* CK_NOTIFICATION enumerates the types of notifications 
  105.  * that PKCS #11 provides to an application.  */
  106. /* CK_NOTIFICATION has been changed from an enum to a CK_ULONG for v2.0 */
  107. typedef CK_ULONG CK_NOTIFICATION;
  108. #define CKN_SURRENDER 0
  109. typedef CK_ULONG CK_SLOT_ID;
  110. /* CK_SLOT_ID_PTR points to a CK_SLOT_ID.  */
  111. typedef CK_SLOT_ID CK_PTR CK_SLOT_ID_PTR;
  112. /* CK_SLOT_INFO provides information about a slot. */
  113. typedef struct CK_SLOT_INFO {
  114.     CK_CHAR slotDescription[64]; /* blank padded */
  115.     CK_CHAR manufacturerID[32]; /* blank padded */
  116.     CK_FLAGS flags;
  117.     /* hardwareVersion and firmwareVersion are new for v2.0 */
  118.     CK_VERSION hardwareVersion; /* version of hardware */
  119.     CK_VERSION  firmwareVersion; /* version of firmware */
  120. } CK_SLOT_INFO;
  121. /* flags: bits flags that provide capabilities of the slot.
  122.  * Bit Flag Mask Meaning
  123.  */
  124. #define CKF_TOKEN_PRESENT 0x00000001 /* a token is present in the slot */
  125. #define CKF_REMOVABLE_DEVICE 0x00000002 /* reader supports removable devices*/
  126. #define CKF_HW_SLOT 0x00000004 /* a hardware slot, not a "soft token"*/
  127. /* CK_SLOT_INFO_PTR points to a CK_SLOT_INFO. */
  128. typedef CK_SLOT_INFO CK_PTR CK_SLOT_INFO_PTR;
  129. /* CK_TOKEN_INFO provides information about a token. */
  130. typedef struct CK_TOKEN_INFO {
  131.     CK_CHAR label[32]; /* blank padded */
  132.     CK_CHAR manufacturerID[32]; /* blank padded */
  133.     CK_CHAR model[16]; /* blank padded */
  134.     CK_CHAR serialNumber[16]; /* blank padded */
  135.     CK_FLAGS flags; /* see below */
  136.     /* ulMaxSessionCount, ulSessionCount, ulMaxRwSessionCount,
  137.      * ulRwSessionCount, ulMaxPinLen, and ulMinPinLen have all been
  138.      * changed from CK_USHORT to CK_ULONG for v2.0 */
  139.     CK_ULONG ulMaxSessionCount; /* max open sessions */
  140.     CK_ULONG ulSessionCount; /* sessions currently open */
  141.     CK_ULONG ulMaxRwSessionCount; /* max R/W sessions */
  142.     CK_ULONG ulRwSessionCount; /* R/W sessions currently open */
  143.     CK_ULONG ulMaxPinLen; /* in bytes */
  144.     CK_ULONG ulMinPinLen; /* in bytes */
  145.     CK_ULONG ulTotalPublicMemory; /* in bytes */
  146.     CK_ULONG ulFreePublicMemory; /* in bytes */
  147.     CK_ULONG ulTotalPrivateMemory; /* in bytes */
  148.     CK_ULONG ulFreePrivateMemory; /* in bytes */
  149.     /* hardwareVersion, firmwareVersion, and time are new for v2.0 */
  150.     CK_VERSION hardwareVersion; /* version of hardware */
  151.     CK_VERSION firmwareVersion; /* version of firmware */
  152.     CK_CHAR utcTime[16]; /* time */
  153. } CK_TOKEN_INFO;
  154. /* The flags parameter is defined as follows:
  155.  * Table 7-2, Token Information Flags
  156.  * Bit Flag Mask Meaning 
  157.  */
  158. #define CKF_RNG        0x00000001  /* has random number generator */
  159. #define CKF_WRITE_PROTECTED        0x00000002  /* token is write-protected */
  160. #define CKF_LOGIN_REQUIRED        0x00000004  /* a user must be logged in  */
  161. #define CKF_USER_PIN_INITIALIZED       0x00000008  /* normal user's PIN is initialized */
  162. /* CKF_RESTORE_KEY_NOT_NEEDED is new for v2.0.  If it is set, then that means */
  163. /* that *every* time the state of cryptographic operations of a session is */
  164. /* successfully saved, all keys needed to continue those operations are */
  165. /* stored in the state. */
  166. #define CKF_RESTORE_KEY_NOT_NEEDED   0x00000020  /* key always saved in saved sessions */
  167. /* CKF_CLOCK_ON_TOKEN is new for v2.0.  If it is set, then that means that */
  168. /* the token has some sort of clock.  The time on that clock is returned in */
  169. /* the token info structure. */
  170. #define CKF_CLOCK_ON_TOKEN           0x00000040  /* token has a clock */
  171. /* CKF_PROTECTED_AUTHENTICATION_PATH is new for v2.0.  If it is true, that means */
  172. /* that there is some way for the user to login without sending a PIN through */
  173. /* the PKCS #11 library itself. */
  174. #define CKF_PROTECTED_AUTHENTICATION_PATH 0x00000100  /* token has protected path */
  175. /* CKF_DUAL_CRYPTO_OPERATIONS is new for v2.0.  If it is true, that
  176.  * means that a single session with the token can perform dual
  177.  * simultaneous cryptographic operations (digest and encrypt;
  178.  * decrypt and digest; sign and encrypt; and decrypt and sign) */
  179. #define CKF_DUAL_CRYPTO_OPERATIONS  0x00000200  /* dual crypto operations */
  180. /* CK_TOKEN_INFO_PTR points to a CK_TOKEN_INFO. */
  181. typedef CK_TOKEN_INFO CK_PTR CK_TOKEN_INFO_PTR;
  182. /* CK_SESSION_HANDLE is a PKCS #11-assigned value that identifies a session. */
  183. typedef CK_ULONG  CK_SESSION_HANDLE;
  184. /* CK_SESSION_HANDLE_PTR points to a CK_SESSION_HANDLE. */
  185. typedef CK_SESSION_HANDLE CK_PTR CK_SESSION_HANDLE_PTR; 
  186. /* CK_USER_TYPE enumerates the types of PKCS #11 users */
  187. /* CK_USER_TYPE has been changed from an enum to a CK_ULONG for v2.0 */
  188. typedef CK_ULONG CK_USER_TYPE;
  189. /* Security Officer */
  190. #define CKU_SO 0
  191. /* Normal user */
  192. #define CKU_USER 1
  193. /* CK_STATE enumerates the session states */
  194. /* CK_STATE has been changed from an enum to a CK_ULONG for v2.0 */
  195. typedef CK_ULONG CK_STATE;
  196. #define CKS_RO_PUBLIC_SESSION 0
  197. #define CKS_RO_USER_FUNCTIONS 1
  198. #define CKS_RW_PUBLIC_SESSION 2
  199. #define CKS_RW_SO_FUNCTIONS 3
  200. #define CKS_RW_USER_FUNCTIONS 4
  201. /* CK_SESSION_INFO provides information about a session. */
  202. typedef struct CK_SESSION_INFO {
  203.     CK_SLOT_ID slotID;
  204.     CK_STATE state;
  205.     CK_FLAGS flags; /* see below */
  206.     /* ulDeviceError was changed from CK_USHORT to CK_ULONG for v2.0 */
  207.     CK_ULONG ulDeviceError; /* device-dependent error code */
  208. } CK_SESSION_INFO;
  209. /* The flags are defined in the following table. */
  210. /* Table 7-3, Session Information Flags */
  211. /*  Bit Flag Mask    Meaning
  212.  */
  213. #define CKF_RW_SESSION 0x00000002 /* session is read/write; not R/O */
  214. #define CKF_SERIAL_SESSION 0x00000004 /* session doesn't support parallel */
  215. /* CK_SESSION_INFO_PTR points to a CK_SESSION_INFO. */
  216. typedef CK_SESSION_INFO CK_PTR CK_SESSION_INFO_PTR;
  217. /* CK_OBJECT_HANDLE is a token-specific identifier for an object.  */
  218. typedef CK_ULONG  CK_OBJECT_HANDLE;
  219. /* CK_OBJECT_HANDLE_PTR points to a CK_OBJECT_HANDLE. */
  220. typedef CK_OBJECT_HANDLE CK_PTR CK_OBJECT_HANDLE_PTR;
  221. /* CK_OBJECT_CLASS is a value that identifies the classes (or types) 
  222.  * of objects that PKCS #11 recognizes.  It is defined as follows: */
  223. /* CK_OBJECT_CLASS was changed from CK_USHORT to CK_ULONG for v2.0 */
  224. typedef CK_ULONG CK_OBJECT_CLASS;
  225. /* The following classes of objects are defined: */
  226. #define CKO_DATA            0x00000000
  227. #define CKO_CERTIFICATE     0x00000001
  228. #define CKO_PUBLIC_KEY      0x00000002
  229. #define CKO_PRIVATE_KEY     0x00000003
  230. #define CKO_SECRET_KEY      0x00000004
  231. #define CKO_VENDOR_DEFINED  0x80000000L
  232. /* CK_OBJECT_CLASS_PTR points to a CK_OBJECT_CLASS structure. */
  233. typedef CK_OBJECT_CLASS CK_PTR CK_OBJECT_CLASS_PTR;
  234. /* CK_KEY_TYPE is a value that identifies a key type. */
  235. /* CK_KEY_TYPE was changed from CK_USHORT to CK_ULONG for v2.0 */
  236. typedef CK_ULONG  CK_KEY_TYPE;
  237. /* the following key types are defined: */
  238. #define CKK_RSA 0x00000000
  239. #define CKK_DSA 0x00000001
  240. #define CKK_DH 0x00000002
  241. /* CKK_ECDSA, and CKK_KEA are new for v2.0 */
  242. #define CKK_ECDSA 0x00000003
  243. #define CKK_KEA 0x00000005
  244. #define CKK_GENERIC_SECRET 0x00000010
  245. #define CKK_RC2 0x00000011
  246. #define CKK_RC4 0x00000012
  247. #define CKK_DES 0x00000013
  248. #define CKK_DES2 0x00000014
  249. #define CKK_DES3 0x00000015
  250. /* all these key types are new for v2.0 */
  251. #define CKK_CAST 0x00000016
  252. #define CKK_CAST3 0x00000017
  253. #define CKK_CAST5 0x00000018
  254. #define CKK_RC5 0x00000019
  255. #define CKK_IDEA 0x0000001A
  256. #define CKK_SKIPJACK 0x0000001B
  257. #define CKK_BATON 0x0000001C
  258. #define CKK_JUNIPER 0x0000001D
  259. #define CKK_CDMF 0x0000001E
  260. #define CKK_VENDOR_DEFINED 0x80000000L
  261. /* CK_CERTIFICATE_TYPE is a value that identifies a certificate type. */
  262. /* CK_CERTIFICATE_TYPE was changed from CK_USHORT to CK_ULONG for v2.0 */
  263. typedef CK_ULONG  CK_CERTIFICATE_TYPE;
  264. /* The following certificate types are defined: */
  265. #define CKC_X_509           0x00000000
  266. #define CKC_VENDOR_DEFINED  0x80000000L
  267. /* CK_ATTRIBUTE_TYPE is a value that identifies an attribute type. */
  268. /* CK_ATTRIBUTE_TYPE was changed from CK_USHORT to CK_ULONG for v2.0 */
  269. typedef CK_ULONG CK_ATTRIBUTE_TYPE;
  270. /* The following attribute types are defined: */
  271. #define CKA_CLASS              0x00000000
  272. #define CKA_TOKEN              0x00000001
  273. #define CKA_PRIVATE            0x00000002
  274. #define CKA_LABEL              0x00000003
  275. #define CKA_APPLICATION        0x00000010
  276. #define CKA_VALUE              0x00000011
  277. #define CKA_CERTIFICATE_TYPE   0x00000080
  278. #define CKA_ISSUER             0x00000081
  279. #define CKA_SERIAL_NUMBER      0x00000082
  280. #define CKA_KEY_TYPE           0x00000100
  281. #define CKA_SUBJECT            0x00000101
  282. #define CKA_ID                 0x00000102
  283. #define CKA_SENSITIVE          0x00000103
  284. #define CKA_ENCRYPT            0x00000104
  285. #define CKA_DECRYPT            0x00000105
  286. #define CKA_WRAP               0x00000106
  287. #define CKA_UNWRAP             0x00000107
  288. #define CKA_SIGN               0x00000108
  289. #define CKA_SIGN_RECOVER       0x00000109
  290. #define CKA_VERIFY             0x0000010A
  291. #define CKA_VERIFY_RECOVER     0x0000010B
  292. #define CKA_DERIVE             0x0000010C
  293. #define CKA_START_DATE         0x00000110
  294. #define CKA_END_DATE           0x00000111
  295. #define CKA_MODULUS            0x00000120
  296. #define CKA_MODULUS_BITS       0x00000121
  297. #define CKA_PUBLIC_EXPONENT    0x00000122
  298. #define CKA_PRIVATE_EXPONENT   0x00000123
  299. #define CKA_PRIME_1            0x00000124
  300. #define CKA_PRIME_2            0x00000125
  301. #define CKA_EXPONENT_1         0x00000126
  302. #define CKA_EXPONENT_2         0x00000127
  303. #define CKA_COEFFICIENT        0x00000128
  304. #define CKA_PRIME              0x00000130
  305. #define CKA_SUBPRIME           0x00000131
  306. #define CKA_BASE               0x00000132
  307. #define CKA_VALUE_BITS         0x00000160
  308. #define CKA_VALUE_LEN          0x00000161
  309. /* CKA_EXTRACTABLE, CKA_LOCAL, CKA_NEVER_EXTRACTABLE, CKA_ALWAYS_SENSITIVE, */
  310. /* and CKA_MODIFIABLE are new for v2.0 */
  311. #define CKA_EXTRACTABLE        0x00000162
  312. #define CKA_LOCAL              0x00000163
  313. #define CKA_NEVER_EXTRACTABLE  0x00000164
  314. #define CKA_ALWAYS_SENSITIVE   0x00000165
  315. #define CKA_MODIFIABLE         0x00000170
  316. #define CKA_VENDOR_DEFINED     0x80000000L
  317. /* CK_ATTRIBUTE is a structure that includes the type, length and value 
  318.  * of an attribute.  */
  319. typedef struct CK_ATTRIBUTE {
  320.     CK_ATTRIBUTE_TYPE type;
  321.     CK_VOID_PTR pValue;
  322.     /* ulValueLen was changed from CK_USHORT to CK_ULONG for v2.0 */
  323.     CK_ULONG ulValueLen; /* in bytes */
  324. } CK_ATTRIBUTE;
  325. /* CK_ATTRIBUTE_PTR points to a CK_ATTRIBUTE. */
  326. typedef CK_ATTRIBUTE CK_PTR CK_ATTRIBUTE_PTR;
  327. /* CK_DATE is a structure that defines a date. */
  328. typedef struct CK_DATE{
  329.     CK_CHAR year[4]; /* the year ("1900" - "9999") */
  330.     CK_CHAR month[2]; /* the month ("01" - "12") */
  331.     CK_CHAR day[2]; /* the day   ("01" - "31") */
  332. } CK_DATE;
  333. /* CK_MECHANISM_TYPE is a value that identifies a mechanism type. */
  334. /* CK_MECHANISM_TYPE was changed from CK_USHORT to CK_ULONG for v2.0 */
  335. typedef CK_ULONG CK_MECHANISM_TYPE;
  336. /* the following mechanism types are defined: */
  337. #define CKM_RSA_PKCS_KEY_PAIR_GEN      0x00000000
  338. #define CKM_RSA_PKCS                   0x00000001
  339. #define CKM_RSA_9796                   0x00000002
  340. #define CKM_RSA_X_509                  0x00000003
  341. /* CKM_MD2_RSA_PKCS, CKM_MD5_RSA_PKCS, and CKM_SHA1_RSA_PKCS are */
  342. /* new for v2.0.  They are mechanisms which hash and sign */
  343. #define CKM_MD2_RSA_PKCS               0x00000004
  344. #define CKM_MD5_RSA_PKCS               0x00000005
  345. #define CKM_SHA1_RSA_PKCS              0x00000006
  346. #define CKM_DSA_KEY_PAIR_GEN           0x00000010
  347. #define CKM_DSA                        0x00000011
  348. #define CKM_DSA_SHA1                   0x00000012
  349. #define CKM_DH_PKCS_KEY_PAIR_GEN       0x00000020
  350. #define CKM_DH_PKCS_DERIVE             0x00000021
  351. #define CKM_RC2_KEY_GEN                0x00000100
  352. #define CKM_RC2_ECB                    0x00000101
  353. #define CKM_RC2_CBC                    0x00000102
  354. #define CKM_RC2_MAC                    0x00000103
  355. /* CKM_RC2_MAC_GENERAL and CKM_RC2_CBC_PAD are new to v2.0 */
  356. #define CKM_RC2_MAC_GENERAL            0x00000104
  357. #define CKM_RC2_CBC_PAD                0x00000105
  358. #define CKM_RC4_KEY_GEN                0x00000110
  359. #define CKM_RC4                        0x00000111
  360. #define CKM_DES_KEY_GEN                0x00000120
  361. #define CKM_DES_ECB                    0x00000121
  362. #define CKM_DES_CBC                    0x00000122
  363. #define CKM_DES_MAC                    0x00000123
  364. /* CKM_DES_MAC_GENERAL and CKM_DES_CBC_PAD are new to v2.0 */
  365. #define CKM_DES_MAC_GENERAL            0x00000124
  366. #define CKM_DES_CBC_PAD                0x00000125
  367. #define CKM_DES2_KEY_GEN               0x00000130
  368. #define CKM_DES3_KEY_GEN               0x00000131
  369. #define CKM_DES3_ECB                   0x00000132
  370. #define CKM_DES3_CBC                   0x00000133
  371. #define CKM_DES3_MAC                   0x00000134
  372. /* CKM_DES3_MAC_GENERAL, CKM_DES3_CBC_PAD, CKM_CDMF_KEY_GEN, */
  373. /* CKM_CDMF_ECB, CKM_CDMF_CBC, CKM_CDMF_MAC, CKM_CDMF_MAC_GENERAL, */
  374. /* and CKM_CDMF_CBC_PAD are new to v2.0 */
  375. #define CKM_DES3_MAC_GENERAL           0x00000135
  376. #define CKM_DES3_CBC_PAD               0x00000136
  377. #define CKM_CDMF_KEY_GEN               0x00000140
  378. #define CKM_CDMF_ECB                   0x00000141
  379. #define CKM_CDMF_CBC                   0x00000142
  380. #define CKM_CDMF_MAC                   0x00000143
  381. #define CKM_CDMF_MAC_GENERAL           0x00000144
  382. #define CKM_CDMF_CBC_PAD               0x00000145
  383. #define CKM_MD2                        0x00000200
  384. /* CKM_MD2_HMAC and CKM_MD2_HMAC_GENERAL are new to v2.0 */
  385. #define CKM_MD2_HMAC                   0x00000201
  386. #define CKM_MD2_HMAC_GENERAL           0x00000202
  387. #define CKM_MD5                        0x00000210
  388. /* CKM_MD5_HMAC and CKM_MD5_HMAC_GENERAL are new to v2.0 */
  389. #define CKM_MD5_HMAC                   0x00000211
  390. #define CKM_MD5_HMAC_GENERAL           0x00000212
  391. #define CKM_SHA_1                      0x00000220
  392. /* CKM_SHA_1_HMAC and CKM_SHA_1_HMAC_GENERAL are new to v2.0 */
  393. #define CKM_SHA_1_HMAC                 0x00000221
  394. #define CKM_SHA_1_HMAC_GENERAL         0x00000222
  395. /* All the following mechanisms are new to v2.0 */
  396. #define CKM_CAST_KEY_GEN               0x00000300
  397. #define CKM_CAST_ECB                   0x00000301
  398. #define CKM_CAST_CBC                   0x00000302
  399. #define CKM_CAST_MAC                   0x00000303
  400. #define CKM_CAST_MAC_GENERAL           0x00000304
  401. #define CKM_CAST_CBC_PAD               0x00000305
  402. #define CKM_CAST3_KEY_GEN              0x00000310
  403. #define CKM_CAST3_ECB                  0x00000311
  404. #define CKM_CAST3_CBC                  0x00000312
  405. #define CKM_CAST3_MAC                  0x00000313
  406. #define CKM_CAST3_MAC_GENERAL          0x00000314
  407. #define CKM_CAST3_CBC_PAD              0x00000315
  408. #define CKM_CAST5_KEY_GEN              0x00000320
  409. #define CKM_CAST5_ECB                  0x00000321
  410. #define CKM_CAST5_CBC                  0x00000322
  411. #define CKM_CAST5_MAC                  0x00000323
  412. #define CKM_CAST5_MAC_GENERAL          0x00000324
  413. #define CKM_CAST5_CBC_PAD              0x00000325
  414. #define CKM_RC5_KEY_GEN                0x00000330
  415. #define CKM_RC5_ECB                    0x00000331
  416. #define CKM_RC5_CBC                    0x00000332
  417. #define CKM_RC5_MAC                    0x00000333
  418. #define CKM_RC5_MAC_GENERAL            0x00000334
  419. #define CKM_RC5_CBC_PAD                0x00000335
  420. #define CKM_IDEA_KEY_GEN               0x00000340
  421. #define CKM_IDEA_ECB                   0x00000341
  422. #define CKM_IDEA_CBC                   0x00000342
  423. #define CKM_IDEA_MAC                   0x00000343
  424. #define CKM_IDEA_MAC_GENERAL           0x00000344
  425. #define CKM_IDEA_CBC_PAD               0x00000345
  426. #define CKM_GENERIC_SECRET_KEY_GEN     0x00000350
  427. #define CKM_CONCATENATE_BASE_AND_KEY   0x00000360
  428. #define CKM_CONCATENATE_BASE_AND_DATA  0x00000362
  429. #define CKM_CONCATENATE_DATA_AND_BASE  0x00000363
  430. #define CKM_XOR_BASE_AND_DATA          0x00000364
  431. #define CKM_EXTRACT_KEY_FROM_KEY       0x00000365
  432. #define CKM_SSL3_PRE_MASTER_KEY_GEN    0x00000370
  433. #define CKM_SSL3_MASTER_KEY_DERIVE     0x00000371
  434. #define CKM_SSL3_KEY_AND_MAC_DERIVE    0x00000372
  435. #define CKM_SSL3_MD5_MAC               0x00000380
  436. #define CKM_SSL3_SHA1_MAC              0x00000381
  437. #define CKM_MD5_KEY_DERIVATION         0x00000390
  438. #define CKM_MD2_KEY_DERIVATION         0x00000391
  439. #define CKM_SHA1_KEY_DERIVATION        0x00000392
  440. #define CKM_PBE_MD2_DES_CBC            0x000003A0
  441. #define CKM_PBE_MD5_DES_CBC            0x000003A1
  442. #define CKM_PBE_MD5_CAST_CBC           0x000003A2
  443. #define CKM_PBE_MD5_CAST3_CBC          0x000003A3
  444. #define CKM_PBE_MD5_CAST5_CBC          0x000003A4
  445. #define CKM_PBE_SHA1_CAST5_CBC         0x000003A5
  446. #define CKM_PBE_SHA1_RC4_128           0x000003A6
  447. #define CKM_PBE_SHA1_RC4_40            0x000003A7
  448. #define CKM_PBE_SHA1_DES3_EDE_CBC      0x000003A8
  449. #define CKM_PBE_SHA1_DES2_EDE_CBC      0x000003A9
  450. #define CKM_PBE_SHA1_RC2_128_CBC       0x000003AA
  451. #define CKM_PBE_SHA1_RC2_40_CBC        0x000003AB
  452. #define CKM_KEY_WRAP_LYNKS             0x00000400
  453. #define CKM_KEY_WRAP_SET_OAEP          0x00000401
  454. /* Fortezza mechanisms */
  455. #define CKM_SKIPJACK_KEY_GEN           0x00001000
  456. #define CKM_SKIPJACK_ECB64             0x00001001
  457. #define CKM_SKIPJACK_CBC64             0x00001002
  458. #define CKM_SKIPJACK_OFB64             0x00001003
  459. #define CKM_SKIPJACK_CFB64             0x00001004
  460. #define CKM_SKIPJACK_CFB32             0x00001005
  461. #define CKM_SKIPJACK_CFB16             0x00001006
  462. #define CKM_SKIPJACK_CFB8              0x00001007
  463. #define CKM_SKIPJACK_WRAP              0x00001008
  464. #define CKM_SKIPJACK_PRIVATE_WRAP      0x00001009
  465. #define CKM_SKIPJACK_RELAYX            0x0000100a
  466. #define CKM_KEA_KEY_PAIR_GEN           0x00001010
  467. #define CKM_KEA_KEY_DERIVE             0x00001011
  468. #define CKM_FORTEZZA_TIMESTAMP         0x00001020
  469. #define CKM_BATON_KEY_GEN              0x00001030
  470. #define CKM_BATON_ECB128               0x00001031
  471. #define CKM_BATON_ECB96                0x00001032
  472. #define CKM_BATON_CBC128               0x00001033
  473. #define CKM_BATON_COUNTER              0x00001034
  474. #define CKM_BATON_SHUFFLE              0x00001035
  475. #define CKM_BATON_WRAP                 0x00001036
  476. #define CKM_ECDSA_KEY_PAIR_GEN         0x00001040
  477. #define CKM_ECDSA                      0x00001041
  478. #define CKM_ECDSA_SHA1                 0x00001042
  479. #define CKM_JUNIPER_KEY_GEN            0x00001060
  480. #define CKM_JUNIPER_ECB128             0x00001061
  481. #define CKM_JUNIPER_CBC128             0x00001062
  482. #define CKM_JUNIPER_COUNTER            0x00001063
  483. #define CKM_JUNIPER_SHUFFLE            0x00001064
  484. #define CKM_JUNIPER_WRAP               0x00001065
  485. #define CKM_FASTHASH                   0x00001070
  486. #define CKM_VENDOR_DEFINED        0x80000000L
  487. /* CK_MECHANISM_TYPE_PTR points to a CK_MECHANISM_TYPE structure. */
  488. typedef CK_MECHANISM_TYPE CK_PTR CK_MECHANISM_TYPE_PTR;
  489. /* CK_MECHANISM is a structure that specifies a particular mechanism.  */
  490. typedef struct CK_MECHANISM {
  491.     CK_MECHANISM_TYPE mechanism;
  492.     CK_VOID_PTR pParameter;
  493.     /* ulParameterLen was changed from CK_USHORT to CK_ULONG for v2.0 */
  494.     CK_ULONG ulParameterLen; /* in bytes */
  495. } CK_MECHANISM;
  496. /* CK_MECHANISM_PTR points to a CK_MECHANISM structure. */
  497. typedef CK_MECHANISM CK_PTR CK_MECHANISM_PTR;
  498. /* CK_MECHANISM_INFO provides information about a particular mechanism. */
  499. typedef struct CK_MECHANISM_INFO {
  500.     CK_ULONG ulMinKeySize;
  501.     CK_ULONG ulMaxKeySize;
  502.     CK_FLAGS flags;
  503. } CK_MECHANISM_INFO;
  504. /* The flags are defined as follows.
  505.  * Table 7-4, Mechanism Information FLags
  506.  * Bit Flag Mask Meaning */
  507. #define CKF_HW 0x00000001 /* performed by HW device; not SW */
  508. /* The flags CKF_ENCRYPT, CKF_DECRYPT, CKF_DIGEST, CKF_SIGN, CKG_SIGN_RECOVER, */
  509. /* CKF_VERIFY, CKF_VERIFY_RECOVER, CKF_GENERATE, CKF_GENERATE_KEY_PAIR, CKF_WRAP, */
  510. /* CKF_UNWRAP, and CKF_DERIVE are new for v2.0 */
  511. #define CKF_ENCRYPT 0x00000100 /* can be used with C_EncryptInit */
  512. #define CKF_DECRYPT 0x00000200 /* can be used with C_DecryptInit */
  513. #define CKF_DIGEST 0x00000400 /* can be used with C_DigestInit */
  514. #define CKF_SIGN  0x00000800 /* can be used with C_SignInit */
  515. #define CKF_SIGN_RECOVER 0x00001000 /* can use with C_SignRecoverInit */
  516. #define CKF_VERIFY 0x00002000 /* can be used with C_VerifyInit */
  517. #define CKF_VERIFY_RECOVER 0x00004000 /* can use w/ C_VerifyRecoverInit */
  518. #define CKF_GENERATE 0x00008000L /* can be used with C_GenerateKey */
  519. #define CKF_GENERATE_KEY_PAIR 0x00010000L /* can use with C_GenerateKeyPair */
  520. #define CKF_WRAP 0x00020000L /* can be used with C_WrapKey */
  521. #define CKF_UNWRAP 0x00040000L /* can be used with C_UnwrapKey */
  522. #define CKF_DERIVE 0x00080000L /* can be used with C_DeriveKey */
  523. #define CKF_EXTENSION 0x80000000L /* Must be FALSE for this version */
  524. /* CK_MECHANISM_INFO_PTR points to a CK_MECHANISM_INFO structure. */
  525. typedef CK_MECHANISM_INFO CK_PTR CK_MECHANISM_INFO_PTR;
  526. /* CK_RV is a value that identifies the return value of a PKCS #11 function. */
  527. /* CK_RV was changed from CK_USHORT to CK_ULONG for v2.0 */
  528. typedef CK_ULONG          CK_RV;
  529. #define CKR_OK                                0x00000000
  530. #define CKR_CANCEL                            0x00000001
  531. #define CKR_HOST_MEMORY                       0x00000002
  532. #define CKR_SLOT_ID_INVALID                   0x00000003
  533. /* CKR_FLAGS_INVALID was removed for v2.0 */
  534. /* CKR_GENERAL_ERROR and CKR_FUNCTION_FAILED are new for v2.0 */
  535. #define CKR_GENERAL_ERROR                     0x00000005
  536. #define CKR_FUNCTION_FAILED                   0x00000006
  537. /* CKR_ARGUMENTS_BAD, CKR_NO_EVENT, CKR_NEED_TO_CREATE_THREADS,
  538.  * and CKR_CANT_LOCK are new for v2.01 */
  539. #define CKR_ARGUMENTS_BAD                     0x00000007
  540. #define CKR_NO_EVENT                          0x00000008
  541. #define CKR_NEED_TO_CREATE_THREADS            0x00000009
  542. #define CKR_CANT_LOCK                         0x0000000A
  543. #define CKR_ATTRIBUTE_READ_ONLY               0x00000010
  544. #define CKR_ATTRIBUTE_SENSITIVE               0x00000011
  545. #define CKR_ATTRIBUTE_TYPE_INVALID            0x00000012
  546. #define CKR_ATTRIBUTE_VALUE_INVALID           0x00000013
  547. #define CKR_DATA_INVALID                      0x00000020
  548. #define CKR_DATA_LEN_RANGE                    0x00000021
  549. #define CKR_DEVICE_ERROR                      0x00000030
  550. #define CKR_DEVICE_MEMORY                     0x00000031
  551. #define CKR_DEVICE_REMOVED                    0x00000032
  552. #define CKR_ENCRYPTED_DATA_INVALID            0x00000040
  553. #define CKR_ENCRYPTED_DATA_LEN_RANGE          0x00000041
  554. #define CKR_FUNCTION_CANCELED                 0x00000050
  555. #define CKR_FUNCTION_NOT_PARALLEL             0x00000051
  556. /* CKR_FUNCTION_NOT_SUPPORTED is new for v2.0 */
  557. #define CKR_FUNCTION_NOT_SUPPORTED            0x00000054
  558. #define CKR_KEY_HANDLE_INVALID                0x00000060
  559. /* CKR_KEY_SENSITIVE was removed for v2.0 */
  560. #define CKR_KEY_SIZE_RANGE                    0x00000062
  561. #define CKR_KEY_TYPE_INCONSISTENT             0x00000063
  562. /* CKR_KEY_NOT_NEEDED, CKR_KEY_CHANGED, CKR_KEY_NEEDED,
  563.  * CKR_KEY_INDIGESTIBLE, CKR_KEY_FUNCTION_NOT_PERMITTED,
  564.  * CKR_KEY_NOT_WRAPPABLE, and CKR_KEY_UNEXTRACTABLE are
  565.  * new for v2.0 */
  566. #define CKR_KEY_NOT_NEEDED                    0x00000064
  567. #define CKR_KEY_CHANGED                       0x00000065
  568. #define CKR_KEY_NEEDED                        0x00000066
  569. #define CKR_KEY_INDIGESTIBLE                  0x00000067
  570. #define CKR_KEY_FUNCTION_NOT_PERMITTED        0x00000068
  571. #define CKR_KEY_NOT_WRAPPABLE                 0x00000069
  572. #define CKR_KEY_UNEXTRACTABLE                 0x0000006A
  573. #define CKR_MECHANISM_INVALID                 0x00000070
  574. #define CKR_MECHANISM_PARAM_INVALID           0x00000071
  575. /* CKR_OBJECT_CLASS_INCONSISTENT and CKR_OBJECT_CLASS_INVALID
  576.  * were removed for v2.0 */
  577. #define CKR_OBJECT_HANDLE_INVALID             0x00000082
  578. #define CKR_OPERATION_ACTIVE                  0x00000090
  579. #define CKR_OPERATION_NOT_INITIALIZED         0x00000091
  580. #define CKR_PIN_INCORRECT                     0x000000A0
  581. #define CKR_PIN_INVALID                       0x000000A1
  582. #define CKR_PIN_LEN_RANGE                     0x000000A2
  583. /* CKR_PIN_EXPIRED and CKR_PIN_LOCKED are new for v2.0 */
  584. #define CKR_PIN_EXPIRED                       0x000000A3
  585. #define CKR_PIN_LOCKED                        0x000000A4
  586. #define CKR_SESSION_CLOSED                    0x000000B0
  587. #define CKR_SESSION_COUNT                     0x000000B1
  588. #define CKR_SESSION_HANDLE_INVALID            0x000000B3
  589. #define CKR_SESSION_PARALLEL_NOT_SUPPORTED    0x000000B4
  590. #define CKR_SESSION_READ_ONLY                 0x000000B5
  591. #define CKR_SESSION_EXISTS                    0x000000B6
  592. /* CKR_SESSION_READ_ONLY_EXISTS and CKR_SESSION_READ_WRITE_SO_EXISTS
  593.  * are new for v2.0 */
  594. #define CKR_SESSION_READ_ONLY_EXISTS          0x000000B7
  595. #define CKR_SESSION_READ_WRITE_SO_EXISTS      0x000000B8
  596. #define CKR_SIGNATURE_INVALID                 0x000000C0
  597. #define CKR_SIGNATURE_LEN_RANGE               0x000000C1
  598. #define CKR_TEMPLATE_INCOMPLETE               0x000000D0
  599. #define CKR_TEMPLATE_INCONSISTENT             0x000000D1
  600. #define CKR_TOKEN_NOT_PRESENT                 0x000000E0
  601. #define CKR_TOKEN_NOT_RECOGNIZED              0x000000E1
  602. #define CKR_TOKEN_WRITE_PROTECTED             0x000000E2
  603. #define CKR_UNWRAPPING_KEY_HANDLE_INVALID     0x000000F0
  604. #define CKR_UNWRAPPING_KEY_SIZE_RANGE         0x000000F1
  605. #define CKR_UNWRAPPING_KEY_TYPE_INCONSISTENT  0x000000F2
  606. #define CKR_USER_ALREADY_LOGGED_IN            0x00000100
  607. #define CKR_USER_NOT_LOGGED_IN                0x00000101
  608. #define CKR_USER_PIN_NOT_INITIALIZED          0x00000102
  609. #define CKR_USER_TYPE_INVALID                 0x00000103
  610. /* CKR_USER_ANOTHER_ALREADY_LOGGED_IN and CKR_USER_TOO_MANY_TYPES
  611.  * are new to v2.01 */
  612. #define CKR_USER_ANOTHER_ALREADY_LOGGED_IN    0x00000104
  613. #define CKR_USER_TOO_MANY_TYPES               0x00000105
  614. #define CKR_WRAPPED_KEY_INVALID               0x00000110
  615. #define CKR_WRAPPED_KEY_LEN_RANGE             0x00000112
  616. #define CKR_WRAPPING_KEY_HANDLE_INVALID       0x00000113
  617. #define CKR_WRAPPING_KEY_SIZE_RANGE           0x00000114
  618. #define CKR_WRAPPING_KEY_TYPE_INCONSISTENT    0x00000115
  619. #define CKR_RANDOM_SEED_NOT_SUPPORTED         0x00000120
  620. /* These are new to v2.0 */
  621. #define CKR_RANDOM_NO_RNG                     0x00000121
  622. #define CKR_INSERTION_CALLBACK_SET            0x00000140
  623. #define CKR_INSERTION_CALLBACK_NOT_SUPPORTED  0x00000141
  624. #define CKR_BUFFER_TOO_SMALL                  0x00000150
  625. #define CKR_SAVED_STATE_INVALID               0x00000160
  626. #define CKR_INFORMATION_SENSITIVE             0x00000170
  627. #define CKR_STATE_UNSAVEABLE                  0x00000180
  628. /* These are new to v2.01 */
  629. #define CKR_CRYPTOKI_NOT_INITIALIZED          0x00000190
  630. #define CKR_CRYPTOKI_ALREADY_INITIALIZED      0x00000191
  631. #define CKR_MUTEX_BAD                         0x000001A0
  632. #define CKR_MUTEX_NOT_LOCKED                  0x000001A1
  633. #define CKR_VENDOR_DEFINED                    0x80000000L
  634. /* CK_NOTIFY is an application callback that processes events. */
  635. typedef CK_RV (CK_ENTRY CK_PTR CK_NOTIFY)(
  636.     CK_SESSION_HANDLE hSession, /* the session's handle */
  637.     CK_NOTIFICATION event,
  638.     CK_VOID_PTR pApplication /* same as passed to C_OpenSession. */
  639. );
  640. /* CK_FUNCTION_LIST is going to be a structure holding a PKCS #11 spec */
  641. /* version and pointers of appropriate types to all the PKCS #11 functions. */
  642. /* CK_FUNCTION_LIST is new for v2.0 */
  643. typedef struct CK_FUNCTION_LIST CK_FUNCTION_LIST;
  644. typedef CK_FUNCTION_LIST CK_PTR CK_FUNCTION_LIST_PTR;
  645. typedef CK_FUNCTION_LIST_PTR CK_PTR CK_FUNCTION_LIST_PTR_PTR;
  646. /* CK_CREATEMUTEX is an application callback for creating a mutex */
  647. typedef CK_RV CK_ENTRY (CK_PTR CK_CREATEMUTEX)(
  648.   CK_VOID_PTR_PTR ppMutex  /* location to receive pointer to mutex */
  649. );
  650. /* CK_DESTROYMUTEX is an application callback for destroying a mutex */
  651. typedef CK_RV CK_ENTRY (CK_PTR CK_DESTROYMUTEX)(
  652.   CK_VOID_PTR pMutex  /* pointer to mutex */
  653. );
  654. /* CK_LOCKMUTEX is an application callback for locking a mutex */
  655. typedef CK_RV CK_ENTRY (CK_PTR CK_LOCKMUTEX)(
  656.   CK_VOID_PTR pMutex  /* pointer to mutex */
  657. );
  658. /* CK_UNLOCKMUTEX is an application callback for unlocking a mutex */
  659. typedef CK_RV CK_ENTRY (CK_PTR CK_UNLOCKMUTEX)(
  660.   CK_VOID_PTR pMutex  /* pointer to mutex */
  661. );
  662. /* CK_C_INITIALIZE_ARGS provides the optional arguments to C_Initialize
  663. */
  664. typedef struct CK_C_INITIALIZE_ARGS {
  665.   CK_CREATEMUTEX CreateMutex;
  666.   CK_DESTROYMUTEX DestroyMutex;
  667.   CK_LOCKMUTEX LockMutex;
  668.   CK_UNLOCKMUTEX UnlockMutex;
  669.   CK_FLAGS flags;
  670.   CK_VOID_PTR pReserved;
  671. } CK_C_INITIALIZE_ARGS;
  672. /* flags: bit flags that provide capabilities of the slot
  673.  *      Bit Flag                           Mask       Meaning
  674.  */
  675. #define CKF_LIBRARY_CANT_CREATE_OS_THREADS 0x00000001 /* library may not
  676.                                                        * spawn its own
  677.                                                        * threads */
  678. #define CKF_OS_LOCKING_OK                  0x00000002 /* library can use
  679.                                                        * native operating
  680.                                                        * system thread
  681.                                                        * synchronization */
  682. /* CK_C_INITIALIZE_ARGS_PTR is a pointer to a CK_C_INITIALIZE_ARGS */
  683. typedef CK_C_INITIALIZE_ARGS CK_PTR CK_C_INITIALIZE_ARGS_PTR;
  684. /* additional flags for parameters to functions */
  685. /* CKF_DONT_BLOCK is for the function C_WaitForSlotEvent */
  686. #define CKF_DONT_BLOCK     1
  687. /* CK_KEA_DERIVE_PARAMS provides the parameters to the CKM_KEA_DERIVE 
  688.  * mechanism. */
  689. /* CK_KEA_DERIVE_PARAMS is new for v2.0 */
  690. typedef struct CK_KEA_DERIVE_PARAMS {
  691.     CK_BBOOL isSender;
  692.     CK_ULONG ulRandomLen;
  693.     CK_BYTE_PTR pRandomA;
  694.     CK_BYTE_PTR pRandomB;
  695.     CK_ULONG ulPublicDataLen;
  696.     CK_BYTE_PTR pPublicData;
  697. } CK_KEA_DERIVE_PARAMS;
  698. /* CK_KEA_DERIVE_PARAMS_PTR points to a CK_KEA_DERIVE_PARAMS. */
  699. typedef CK_KEA_DERIVE_PARAMS CK_PTR CK_KEA_DERIVE_PARAMS_PTR;
  700. /* CK_RC2_PARAMS provides the parameters to the CKM_RC2_ECB and CKM_RC2_MAC */
  701. /* mechanisms.  An instance of CK_RC2_PARAMS just holds the effective keysize. */
  702. typedef CK_ULONG CK_RC2_PARAMS;
  703. /* CK_RC2_PARAMS_PTR points to a CK_RC2_PARAMS. */
  704. typedef CK_RC2_PARAMS CK_PTR CK_RC2_PARAMS_PTR;
  705. /* CK_RC2_CBC_PARAMS provides the parameters to the CKM_RC2_CBC mechanism. */
  706. typedef struct CK_RC2_CBC_PARAMS {
  707.     /* ulEffectiveBits was changed from CK_USHORT to CK_ULONG for v2.0 */
  708.     CK_ULONG ulEffectiveBits; /* effective bits (1-1024) */
  709.     CK_BYTE iv[8]; /* IV for CBC mode */
  710. } CK_RC2_CBC_PARAMS;
  711. /* CK_RC2_CBC_PARAMS_PTR points to a CK_RC2_CBC_PARAMS. */
  712. typedef CK_RC2_CBC_PARAMS CK_PTR CK_RC2_CBC_PARAMS_PTR;
  713. /* CK_RC2_MAC_GENERAL_PARAMS provides the parameters for the */
  714. /* CKM_RC2_MAC_GENERAL mechanism. */
  715. /* CK_RC2_MAC_GENERAL_PARAMS is new for v2.0 */
  716. typedef struct CK_RC2_MAC_GENERAL_PARAMS {
  717.     CK_ULONG ulEffectiveBits; /* effective bits (1-1024) */
  718.     CK_ULONG ulMacLength; /* Length of MAC in bytes */
  719. } CK_RC2_MAC_GENERAL_PARAMS;
  720. typedef CK_RC2_MAC_GENERAL_PARAMS CK_PTR CK_RC2_MAC_GENERAL_PARAMS_PTR;
  721. /* CK_RC5_PARAMS provides the parameters to the CKM_RC5_ECB and CKM_RC5_MAC */
  722. /* mechanisms. */
  723. /* CK_RC5_PARAMS is new for v2.0 */
  724. typedef struct CK_RC5_PARAMS {
  725.     CK_ULONG ulWordsize; /* wordsize in bits */
  726.     CK_ULONG ulRounds; /* number of rounds */
  727. } CK_RC5_PARAMS;
  728. /* CK_RC5_PARAMS_PTR points to a CK_RC5_PARAMS. */
  729. typedef CK_RC5_PARAMS CK_PTR CK_RC5_PARAMS_PTR;
  730. /* CK_RC5_CBC_PARAMS provides the parameters to the CKM_RC5_CBC mechanism. */
  731. /* CK_RC5_CBC_PARAMS is new for v2.0 */
  732. typedef struct CK_RC5_CBC_PARAMS {
  733.     CK_ULONG ulWordsize; /* wordsize in bits */
  734.     CK_ULONG ulRounds; /* number of rounds */
  735.     CK_BYTE_PTR pIv; /* pointer to IV */
  736.     CK_ULONG ulIvLen; /* length of IV in bytes */
  737. } CK_RC5_CBC_PARAMS;
  738. /* CK_RC5_CBC_PARAMS_PTR points to a CK_RC5_CBC_PARAMS. */
  739. typedef CK_RC5_CBC_PARAMS CK_PTR CK_RC5_CBC_PARAMS_PTR;
  740. /* CK_RC5_MAC_GENERAL_PARAMS provides the parameters for the */
  741. /* CKM_RC5_MAC_GENERAL mechanism. */
  742. /* CK_RC5_MAC_GENERAL_PARAMS is new for v2.0 */
  743. typedef struct CK_RC5_MAC_GENERAL_PARAMS {
  744.     CK_ULONG ulWordsize; /* wordsize in bits */
  745.     CK_ULONG ulRounds; /* number of rounds */
  746.     CK_ULONG ulMacLength;         /* Length of MAC in bytes */
  747. } CK_RC5_MAC_GENERAL_PARAMS;
  748. typedef CK_RC5_MAC_GENERAL_PARAMS CK_PTR CK_RC5_MAC_GENERAL_PARAMS_PTR;
  749. /* CK_MAC_GENERAL_PARAMS provides the parameters to most block ciphers' */
  750. /* MAC_GENERAL mechanisms.  Its value is the length of the MAC. */
  751. /* CK_MAC_GENERAL_PARAMS is new for v2.0 */
  752. typedef CK_ULONG CK_MAC_GENERAL_PARAMS;
  753. typedef CK_MAC_GENERAL_PARAMS CK_PTR CK_MAC_GENERAL_PARAMS_PTR;
  754. /* CK_SKIPJACK_PRIVATE_WRAP_PARAMS provides the parameters to the
  755.  * CKM_SKIPJACK_PRIVATE_WRAP mechanism */
  756. /* CK_SKIPJACK_PRIVATE_WRAP_PARAMS is new for v2.0 */
  757. typedef struct CK_SKIPJACK_PRIVATE_WRAP_PARAMS {
  758.   CK_ULONG      ulPasswordLen;
  759.   CK_BYTE_PTR   pPassword;
  760.   CK_ULONG      ulPublicDataLen;
  761.   CK_BYTE_PTR   pPublicData;
  762.   CK_ULONG      ulPAndGLen;
  763.   CK_ULONG      ulQLen;
  764.   CK_ULONG      ulRandomLen;
  765.   CK_BYTE_PTR   pRandomA;
  766.   CK_BYTE_PTR   pPrimeP;
  767.   CK_BYTE_PTR   pBaseG;
  768.   CK_BYTE_PTR   pSubprimeQ;
  769. } CK_SKIPJACK_PRIVATE_WRAP_PARAMS;
  770. /* CK_SKIPJACK_PRIVATE_WRAP_PARAMS_PTR points to a 
  771.  * CK_SKIPJACK_PRIVATE_WRAP_PARAMS */
  772. typedef CK_SKIPJACK_PRIVATE_WRAP_PARAMS CK_PTR 
  773.   CK_SKIPJACK_PRIVATE_WRAP_PTR;
  774. /* CK_SKIPJACK_RELAYX_PARAMS provides the parameters to the
  775.  * CKM_SKIPJACK_RELAYX mechanism */
  776. /* CK_SKIPJACK_RELAYX_PARAMS is new for v2.0 */
  777. typedef struct CK_SKIPJACK_RELAYX_PARAMS {
  778.   CK_ULONG      ulOldWrappedXLen;
  779.   CK_BYTE_PTR   pOldWrappedX;
  780.   CK_ULONG      ulOldPasswordLen;
  781.   CK_BYTE_PTR   pOldPassword;
  782.   CK_ULONG      ulOldPublicDataLen;
  783.   CK_BYTE_PTR   pOldPublicData;
  784.   CK_ULONG      ulOldRandomLen;
  785.   CK_BYTE_PTR   pOldRandomA;
  786.   CK_ULONG      ulNewPasswordLen;
  787.   CK_BYTE_PTR   pNewPassword;
  788.   CK_ULONG      ulNewPublicDataLen;
  789.   CK_BYTE_PTR   pNewPublicData;
  790.   CK_ULONG      ulNewRandomLen;
  791.   CK_BYTE_PTR   pNewRandomA;
  792. } CK_SKIPJACK_RELAYX_PARAMS;
  793. /* CK_SKIPJACK_RELAYX_PARAMS_PTR points to a CK_SKIPJACK_RELAYX_PARAMS
  794. */
  795. typedef CK_SKIPJACK_RELAYX_PARAMS CK_PTR CK_SKIPJACK_RELAYX_PARAMS_PTR;
  796. typedef struct CK_PBE_PARAMS {
  797.     CK_CHAR_PTR pInitVector;
  798.     CK_CHAR_PTR pPassword;
  799.     CK_ULONG ulPasswordLen;
  800.     CK_CHAR_PTR pSalt;
  801.     CK_ULONG ulSaltLen;
  802.     CK_ULONG ulIteration;
  803. } CK_PBE_PARAMS;
  804. typedef CK_PBE_PARAMS CK_PTR CK_PBE_PARAMS_PTR;
  805. /* CK_KEY_WRAP_SET_OAEP_PARAMS provides the parameters to the */
  806. /* CKM_KEY_WRAP_SET_OAEP mechanism. */
  807. /* CK_KEY_WRAP_SET_OAEP_PARAMS is new for v2.0 */
  808. typedef struct CK_KEY_WRAP_SET_OAEP_PARAMS {
  809.     CK_BYTE bBC; /* block contents byte */
  810.     CK_BYTE_PTR pX; /* extra data */
  811.     CK_ULONG ulXLen; /* length of extra data in bytes */
  812. } CK_KEY_WRAP_SET_OAEP_PARAMS;
  813. /* CK_KEY_WRAP_SET_OAEP_PARAMS_PTR points to a CK_KEY_WRAP_SET_OAEP_PARAMS. */
  814. typedef CK_KEY_WRAP_SET_OAEP_PARAMS CK_PTR CK_KEY_WRAP_SET_OAEP_PARAMS_PTR;
  815. /* CK_BATON_PARAMS provides the parameters to the CKM_BATON_ECB128, */
  816. /* CKM_BATON_ECB96, CKM_BATON_CBC128, CKM_BATON_COUNTER, and */
  817. /* CKM_BATON_SHUFFLE mechanisms. */
  818. /* CK_BATON_PARAMS is new for v2.0 */
  819. typedef struct CK_BATON_PARAMS {
  820.     CK_BYTE iv[24];
  821. } CK_BATON_PARAMS;
  822. /* CK_BATON_PARAMS_PTR points to a CK_BATON_PARAMS. */
  823. typedef CK_BATON_PARAMS CK_PTR CK_BATON_PARAMS_PTR;
  824. typedef struct CK_SSL3_RANDOM_DATA {
  825.   CK_BYTE_PTR  pClientRandom;
  826.   CK_ULONG     ulClientRandomLen;
  827.   CK_BYTE_PTR  pServerRandom;
  828.   CK_ULONG     ulServerRandomLen;
  829. } CK_SSL3_RANDOM_DATA;
  830. typedef struct CK_SSL3_MASTER_KEY_DERIVE_PARAMS {
  831.   CK_SSL3_RANDOM_DATA RandomInfo;
  832.   CK_VERSION_PTR pVersion;
  833. } CK_SSL3_MASTER_KEY_DERIVE_PARAMS;
  834. typedef struct CK_SSL3_MASTER_KEY_DERIVE_PARAMS CK_PTR 
  835.   CK_SSL3_MASTER_KEY_DERIVE_PARAMS_PTR;
  836. typedef struct CK_SSL3_KEY_MAT_OUT {
  837.   CK_OBJECT_HANDLE hClientMacSecret;
  838.   CK_OBJECT_HANDLE hServerMacSecret;
  839.   CK_OBJECT_HANDLE hClientKey;
  840.   CK_OBJECT_HANDLE hServerKey;
  841.   CK_BYTE_PTR      pIVClient;
  842.   CK_BYTE_PTR      pIVServer;
  843. } CK_SSL3_KEY_MAT_OUT;
  844. typedef CK_SSL3_KEY_MAT_OUT CK_PTR CK_SSL3_KEY_MAT_OUT_PTR;
  845. typedef struct CK_SSL3_KEY_MAT_PARAMS {
  846.   CK_ULONG                ulMacSizeInBits;
  847.   CK_ULONG                ulKeySizeInBits;
  848.   CK_ULONG                ulIVSizeInBits;
  849.   CK_BBOOL                bIsExport;
  850.   CK_SSL3_RANDOM_DATA     RandomInfo;
  851.   CK_SSL3_KEY_MAT_OUT_PTR pReturnedKeyMaterial;
  852. } CK_SSL3_KEY_MAT_PARAMS;
  853. typedef CK_SSL3_KEY_MAT_PARAMS CK_PTR CK_SSL3_KEY_MAT_PARAMS_PTR;
  854. /* The CK_DERIVATION_STRING_DATA is used for bunches of Deriviation 
  855.  * Mechanisms. */
  856. typedef struct CK_KEY_DERIVATION_STRING_DATA {
  857.     CK_BYTE_PTR pData;
  858.     CK_ULONG ulLen;
  859. } CK_KEY_DERIVATION_STRING_DATA;
  860. typedef CK_KEY_DERIVATION_STRING_DATA CK_PTR CK_KEY_DERIVATION_STRING_DATA_PTR;
  861. /* The CK_EXTRACT_PARAMS is used for the CKM_EXTRACT_KEY_FROM_KEY mechanism. */
  862. /* CK_EXTRACT_PARAMS is new for v2.0 */
  863. typedef CK_ULONG CK_EXTRACT_PARAMS;
  864. /* CK_EXTRACT_PARAMS_PTR points to a CK_EXTRACT_PARAMS. */
  865. typedef CK_EXTRACT_PARAMS CK_PTR CK_EXTRACT_PARAMS_PTR;
  866. /* Do not attempt to use these. They are only used by NETSCAPE's internal
  867.  * PKCS #11 interface. Most of these are place holders for other mechanism
  868.  * and will change in the future.
  869.  */
  870. #define CKM_NETSCAPE_PBE_KEY_GEN 0x80000001L
  871. #define CKM_NETSCAPE_PBE_SHA1_DES_CBC 0x80000002L
  872. #define CKM_NETSCAPE_PBE_SHA1_TRIPLE_DES_CBC 0x80000003L
  873. #define CKM_NETSCAPE_PBE_SHA1_40_BIT_RC2_CBC 0x80000004L
  874. #define CKM_NETSCAPE_PBE_SHA1_128_BIT_RC2_CBC 0x80000005L
  875. #define CKM_NETSCAPE_PBE_SHA1_40_BIT_RC4 0x80000006L
  876. #define CKM_NETSCAPE_PBE_SHA1_128_BIT_RC4 0x80000007L
  877. #define CKM_NETSCAPE_PBE_SHA1_FAULTY_3DES_CBC 0x80000008L
  878. #define CKM_TLS_MASTER_KEY_DERIVE 0x80000371L
  879. #define CKM_TLS_KEY_AND_MAC_DERIVE 0x80000372L
  880. /* define used to pass in the database key for DSA private keys */
  881. #define CKA_NETSCAPE_DB 0xD5A0DB00L
  882. #define CKA_NETSCAPE_TRUST 0x80000001L
  883. #if defined(XP_WIN)
  884. #if defined(_WIN32)
  885. #pragma pack(pop, cryptoki)
  886. #else /* win16 */
  887. #if defined(__WATCOMC__)
  888. #pragma pack(pop)
  889. #else /* not Watcom 16-bit */
  890. #pragma pack()
  891. #endif
  892. #endif
  893. #endif
  894. #endif