home *** CD-ROM | disk | FTP | other *** search
/ ftp.rsa.com / 2014.05.ftp.rsa.com.tar / ftp.rsa.com / pub / pkcs / pkcs-11 / pkcs11t.h < prev    next >
C/C++ Source or Header  |  2014-05-02  |  38KB  |  980 lines

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