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

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