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

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