1 /* Copyright (c) OASIS Open 2016. All Rights Reserved./
2  * Copyright (C) 2017  for the binding: Carsten Blüggel <carblue@geekmail.de>
3  * /Distributed under the terms of the OASIS IPR Policy,
4  * [http://www.oasis-open.org/policies-guidelines/ipr], AS-IS, WITHOUT ANY
5  * IMPLIED OR EXPRESS WARRANTY; there is no warranty of MERCHANTABILITY, FITNESS FOR A
6  * PARTICULAR PURPOSE or NONINFRINGEMENT of the rights of others.
7  */
8 
9 /* Latest version of the specification:
10  * http://docs.oasis-open.org/pkcs11/pkcs11-base/v2.40/pkcs11-base-v2.40.html
11  */
12 
13 /* See top of pkcs11.h for information about the macros that
14  * must be defined and the structure-packing conventions that
15  * must be set before including this file.
16  */
17 
18 /*
19 Written in the D programming language.
20 For git maintenance (ensure at least one congruent line with originating C header):
21 #define _PKCS11T_H_ 1
22 */
23 
24 module pkcs11.pkcs11t;
25 
26 import core.stdc.config; // : c_ulong, c_long;
27 import pkcs11.pkcs11f;
28 
29 extern(C) nothrow @nogc @system :
30 
31 
32 enum CRYPTOKI_VERSION_MAJOR          = 2;
33 enum CRYPTOKI_VERSION_MINOR          = 40;
34 enum CRYPTOKI_VERSION_AMENDMENT      = 0;
35 
36 enum ubyte CK_TRUE         = 1;
37 enum ubyte CK_FALSE        = 0;
38 enum void* NULL_PTR        = null;
39 
40 /* an unsigned 8-bit value */
41 alias ubyte             CK_BYTE;
42 
43 /* an unsigned 8-bit character */
44 alias CK_BYTE           CK_CHAR;
45 
46 /* an 8-bit UTF-8 character */
47 alias CK_BYTE           CK_UTF8CHAR;
48 
49 /* a BYTE-sized Boolean flag */
50 alias CK_BYTE           CK_BBOOL;
51 
52 /* an unsigned value, at least 32 bits long */
53 alias c_ulong           CK_ULONG;
54 
55 /* a signed value, the same size as a CK_ULONG */
56 alias c_long            CK_LONG;
57 
58 /* at least 32 bits; each bit is a Boolean flag */
59 alias CK_ULONG          CK_FLAGS;
60 
61 
62 /* some special values for certain CK_ULONG variables */
63 enum CK_UNAVAILABLE_INFORMATION      = (~0UL);
64 enum CK_EFFECTIVELY_INFINITE         = 0UL;
65 
66 
67 alias CK_BYTE     *   CK_BYTE_PTR;
68 alias CK_CHAR     *   CK_CHAR_PTR;
69 alias CK_UTF8CHAR *   CK_UTF8CHAR_PTR;
70 alias CK_ULONG    *   CK_ULONG_PTR;
71 alias void        *   CK_VOID_PTR;
72 
73 /* Pointer to a CK_VOID_PTR-- i.e., pointer to pointer to void */
74 alias CK_VOID_PTR *   CK_VOID_PTR_PTR;
75 
76 
77 /* The following value is always invalid if used as a session
78  * handle or object handle
79  */
80 enum CK_INVALID_HANDLE       = 0UL;
81 
82 
83 struct CK_VERSION {
84   CK_BYTE       major;  /* integer portion of version number */
85   CK_BYTE       minor;  /* 1/100ths portion of version number */
86 }
87 
88 alias CK_VERSION * CK_VERSION_PTR;
89 
90 
91 struct CK_INFO {
92   CK_VERSION       cryptokiVersion;     /* Cryptoki interface ver */
93   CK_UTF8CHAR[32]  manufacturerID;      /* blank padded */
94   CK_FLAGS         flags;               /* must be zero */
95   CK_UTF8CHAR[32]  libraryDescription;  /* blank padded */
96   CK_VERSION       libraryVersion;      /* version of library */
97 }
98 
99 alias CK_INFO *    CK_INFO_PTR;
100 
101 
102 /* CK_NOTIFICATION enumerates the types of notifications that
103  * Cryptoki provides to an application
104  */
105 alias CK_ULONG CK_NOTIFICATION;
106 enum CKN_SURRENDER           = 0UL;
107 enum CKN_OTP_CHANGED         = 1UL;
108 
109 alias CK_ULONG          CK_SLOT_ID;
110 
111 alias CK_SLOT_ID * CK_SLOT_ID_PTR;
112 
113 
114 /* CK_SLOT_INFO provides information about a slot */
115 struct CK_SLOT_INFO {
116   CK_UTF8CHAR[64]   slotDescription;  /* blank padded */
117   CK_UTF8CHAR[32]   manufacturerID;   /* blank padded */
118   CK_FLAGS          flags;
119 
120   CK_VERSION        hardwareVersion;  /* version of hardware */
121   CK_VERSION        firmwareVersion;  /* version of firmware */
122 }
123 
124 /* flags: bit flags that provide capabilities of the slot
125  *      Bit Flag              Mask        Meaning
126  */
127 enum CKF_TOKEN_PRESENT     = 0x00000001UL;  /* a token is there */
128 enum CKF_REMOVABLE_DEVICE  = 0x00000002UL;  /* removable devices*/
129 enum CKF_HW_SLOT           = 0x00000004UL;  /* hardware slot */
130 
131 alias CK_SLOT_INFO * CK_SLOT_INFO_PTR;
132 
133 
134 /* CK_TOKEN_INFO provides information about a token */
135 struct CK_TOKEN_INFO {
136   CK_UTF8CHAR[32]  label;              /* blank padded */
137   CK_UTF8CHAR[32]  manufacturerID;     /* blank padded */
138   CK_UTF8CHAR[16]  model;              /* blank padded */
139   CK_CHAR[16]      serialNumber;       /* blank padded */
140   CK_FLAGS         flags;              /* see below */
141 
142   CK_ULONG      ulMaxSessionCount;     /* max open sessions */
143   CK_ULONG      ulSessionCount;        /* sess. now open */
144   CK_ULONG      ulMaxRwSessionCount;   /* max R/W sessions */
145   CK_ULONG      ulRwSessionCount;      /* R/W sess. now open */
146   CK_ULONG      ulMaxPinLen;           /* in bytes */
147   CK_ULONG      ulMinPinLen;           /* in bytes */
148   CK_ULONG      ulTotalPublicMemory;   /* in bytes */
149   CK_ULONG      ulFreePublicMemory;    /* in bytes */
150   CK_ULONG      ulTotalPrivateMemory;  /* in bytes */
151   CK_ULONG      ulFreePrivateMemory;   /* in bytes */
152   CK_VERSION    hardwareVersion;       /* version of hardware */
153   CK_VERSION    firmwareVersion;       /* version of firmware */
154   CK_CHAR[16]   utcTime;           /* time */
155 }
156 
157 /* The flags parameter is defined as follows:
158  *      Bit Flag                    Mask        Meaning
159  */
160 enum CKF_RNG                     = 0x00000001UL;  /* has random # generator */
161 enum CKF_WRITE_PROTECTED         = 0x00000002UL;  /* token is write-protected */
162 enum CKF_LOGIN_REQUIRED          = 0x00000004UL;  /* user must login */
163 enum CKF_USER_PIN_INITIALIZED    = 0x00000008UL;  /* normal user's PIN is set */
164 
165 /* CKF_RESTORE_KEY_NOT_NEEDED.  If it is set,
166  * that means that *every* time the state of cryptographic
167  * operations of a session is successfully saved, all keys
168  * needed to continue those operations are stored in the state
169  */
170 enum CKF_RESTORE_KEY_NOT_NEEDED  = 0x00000020UL;
171 
172 /* CKF_CLOCK_ON_TOKEN.  If it is set, that means
173  * that the token has some sort of clock.  The time on that
174  * clock is returned in the token info structure
175  */
176 enum CKF_CLOCK_ON_TOKEN          = 0x00000040UL;
177 
178 /* CKF_PROTECTED_AUTHENTICATION_PATH.  If it is
179  * set, that means that there is some way for the user to login
180  * without sending a PIN through the Cryptoki library itself
181  */
182 enum CKF_PROTECTED_AUTHENTICATION_PATH = 0x00000100UL;
183 
184 /* CKF_DUAL_CRYPTO_OPERATIONS.  If it is true,
185  * that means that a single session with the token can perform
186  * dual simultaneous cryptographic operations (digest and
187  * encrypt; decrypt and digest; sign and encrypt; and decrypt
188  * and sign)
189  */
190 enum CKF_DUAL_CRYPTO_OPERATIONS  = 0x00000200UL;
191 
192 /* CKF_TOKEN_INITIALIZED. If it is true, the
193  * token has been initialized using C_InitializeToken or an
194  * equivalent mechanism outside the scope of PKCS #11.
195  * Calling C_InitializeToken when this flag is set will cause
196  * the token to be reinitialized.
197  */
198 enum CKF_TOKEN_INITIALIZED       = 0x00000400UL;
199 
200 /* CKF_SECONDARY_AUTHENTICATION. If it is
201  * true, the token supports secondary authentication for
202  * private key objects.
203  */
204 enum CKF_SECONDARY_AUTHENTICATION  = 0x00000800UL;
205 
206 /* CKF_USER_PIN_COUNT_LOW. If it is true, an
207  * incorrect user login PIN has been entered at least once
208  * since the last successful authentication.
209  */
210 enum CKF_USER_PIN_COUNT_LOW       = 0x00010000UL;
211 
212 /* CKF_USER_PIN_FINAL_TRY. If it is true,
213  * supplying an incorrect user PIN will it to become locked.
214  */
215 enum CKF_USER_PIN_FINAL_TRY       = 0x00020000UL;
216 
217 /* CKF_USER_PIN_LOCKED. If it is true, the
218  * user PIN has been locked. User login to the token is not
219  * possible.
220  */
221 enum CKF_USER_PIN_LOCKED          = 0x00040000UL;
222 
223 /* CKF_USER_PIN_TO_BE_CHANGED. If it is true,
224  * the user PIN value is the default value set by token
225  * initialization or manufacturing, or the PIN has been
226  * expired by the card.
227  */
228 enum CKF_USER_PIN_TO_BE_CHANGED   = 0x00080000UL;
229 
230 /* CKF_SO_PIN_COUNT_LOW. If it is true, an
231  * incorrect SO login PIN has been entered at least once since
232  * the last successful authentication.
233  */
234 enum CKF_SO_PIN_COUNT_LOW         = 0x00100000UL;
235 
236 /* CKF_SO_PIN_FINAL_TRY. If it is true,
237  * supplying an incorrect SO PIN will it to become locked.
238  */
239 enum CKF_SO_PIN_FINAL_TRY         = 0x00200000UL;
240 
241 /* CKF_SO_PIN_LOCKED. If it is true, the SO
242  * PIN has been locked. SO login to the token is not possible.
243  */
244 enum CKF_SO_PIN_LOCKED            = 0x00400000UL;
245 
246 /* CKF_SO_PIN_TO_BE_CHANGED. If it is true,
247  * the SO PIN value is the default value set by token
248  * initialization or manufacturing, or the PIN has been
249  * expired by the card.
250  */
251 enum CKF_SO_PIN_TO_BE_CHANGED     = 0x00800000UL;
252 
253 enum CKF_ERROR_STATE              = 0x01000000UL;
254 
255 alias CK_TOKEN_INFO * CK_TOKEN_INFO_PTR;
256 
257 
258 /* CK_SESSION_HANDLE is a Cryptoki-assigned value that
259  * identifies a session
260  */
261 alias CK_ULONG          CK_SESSION_HANDLE;
262 
263 alias CK_SESSION_HANDLE * CK_SESSION_HANDLE_PTR;
264 
265 
266 /* CK_USER_TYPE enumerates the types of Cryptoki users */
267 alias CK_ULONG          CK_USER_TYPE;
268 /* Security Officer */
269 enum CKU_SO                  = 0UL;
270 /* Normal user */
271 enum CKU_USER                = 1UL;
272 /* Context specific */
273 enum CKU_CONTEXT_SPECIFIC    = 2UL;
274 
275 /* CK_STATE enumerates the session states */
276 alias CK_ULONG          CK_STATE;
277 enum CKS_RO_PUBLIC_SESSION   = 0UL;
278 enum CKS_RO_USER_FUNCTIONS   = 1UL;
279 enum CKS_RW_PUBLIC_SESSION   = 2UL;
280 enum CKS_RW_USER_FUNCTIONS   = 3UL;
281 enum CKS_RW_SO_FUNCTIONS     = 4UL;
282 
283 /* CK_SESSION_INFO provides information about a session */
284 struct CK_SESSION_INFO {
285   CK_SLOT_ID    slotID;
286   CK_STATE      state;
287   CK_FLAGS      flags;          /* see below */
288   CK_ULONG      ulDeviceError;  /* device-dependent error code */
289 }
290 
291 /* The flags are defined in the following table:
292  *      Bit Flag                Mask        Meaning
293  */
294 enum CKF_RW_SESSION          = 0x00000002UL; /* session is r/w */
295 enum CKF_SERIAL_SESSION      = 0x00000004UL; /* no parallel    */
296 
297 alias CK_SESSION_INFO * CK_SESSION_INFO_PTR;
298 
299 
300 /* CK_OBJECT_HANDLE is a token-specific identifier for an
301  * object
302  */
303 alias CK_ULONG          CK_OBJECT_HANDLE;
304 
305 alias CK_OBJECT_HANDLE * CK_OBJECT_HANDLE_PTR;
306 
307 
308 /* CK_OBJECT_CLASS is a value that identifies the classes (or
309  * types) of objects that Cryptoki recognizes.  It is defined
310  * as follows:
311  */
312 alias CK_ULONG          CK_OBJECT_CLASS;
313 
314 /* The following classes of objects are defined: */
315 enum CKO_DATA              = 0x00000000UL;
316 enum CKO_CERTIFICATE       = 0x00000001UL;
317 enum CKO_PUBLIC_KEY        = 0x00000002UL;
318 enum CKO_PRIVATE_KEY       = 0x00000003UL;
319 enum CKO_SECRET_KEY        = 0x00000004UL;
320 enum CKO_HW_FEATURE        = 0x00000005UL;
321 enum CKO_DOMAIN_PARAMETERS = 0x00000006UL;
322 enum CKO_MECHANISM         = 0x00000007UL;
323 enum CKO_OTP_KEY           = 0x00000008UL;
324 
325 enum CKO_VENDOR_DEFINED    = 0x80000000UL;
326 
327 alias CK_OBJECT_CLASS * CK_OBJECT_CLASS_PTR;
328 
329 /* CK_HW_FEATURE_TYPE is a value that identifies the hardware feature type
330  * of an object with CK_OBJECT_CLASS equal to CKO_HW_FEATURE.
331  */
332 alias CK_ULONG          CK_HW_FEATURE_TYPE;
333 
334 /* The following hardware feature types are defined */
335 enum CKH_MONOTONIC_COUNTER  = 0x00000001UL;
336 enum CKH_CLOCK              = 0x00000002UL;
337 enum CKH_USER_INTERFACE     = 0x00000003UL;
338 enum CKH_VENDOR_DEFINED     = 0x80000000UL;
339 
340 /* CK_KEY_TYPE is a value that identifies a key type */
341 alias CK_ULONG          CK_KEY_TYPE;
342 
343 /* the following key types are defined: */
344 enum CKK_RSA                 = 0x00000000UL;
345 enum CKK_DSA                 = 0x00000001UL;
346 enum CKK_DH                  = 0x00000002UL;
347 enum CKK_ECDSA               = 0x00000003UL; /* Deprecated */
348 enum CKK_EC                  = 0x00000003UL;
349 enum CKK_X9_42_DH            = 0x00000004UL;
350 enum CKK_KEA                 = 0x00000005UL;
351 enum CKK_GENERIC_SECRET      = 0x00000010UL;
352 enum CKK_RC2                 = 0x00000011UL;
353 enum CKK_RC4                 = 0x00000012UL;
354 enum CKK_DES                 = 0x00000013UL;
355 enum CKK_DES2                = 0x00000014UL;
356 enum CKK_DES3                = 0x00000015UL;
357 enum CKK_CAST                = 0x00000016UL;
358 enum CKK_CAST3               = 0x00000017UL;
359 enum CKK_CAST5               = 0x00000018UL; /* Deprecated */
360 enum CKK_CAST128             = 0x00000018UL;
361 enum CKK_RC5                 = 0x00000019UL;
362 enum CKK_IDEA                = 0x0000001AUL;
363 enum CKK_SKIPJACK            = 0x0000001BUL;
364 enum CKK_BATON               = 0x0000001CUL;
365 enum CKK_JUNIPER             = 0x0000001DUL;
366 enum CKK_CDMF                = 0x0000001EUL;
367 enum CKK_AES                 = 0x0000001FUL;
368 enum CKK_BLOWFISH            = 0x00000020UL;
369 enum CKK_TWOFISH             = 0x00000021UL;
370 enum CKK_SECURID             = 0x00000022UL;
371 enum CKK_HOTP                = 0x00000023UL;
372 enum CKK_ACTI                = 0x00000024UL;
373 enum CKK_CAMELLIA            = 0x00000025UL;
374 enum CKK_ARIA                = 0x00000026UL;
375 
376 enum CKK_MD5_HMAC            = 0x00000027UL;
377 enum CKK_SHA_1_HMAC          = 0x00000028UL;
378 enum CKK_RIPEMD128_HMAC      = 0x00000029UL;
379 enum CKK_RIPEMD160_HMAC      = 0x0000002AUL;
380 enum CKK_SHA256_HMAC         = 0x0000002BUL;
381 enum CKK_SHA384_HMAC         = 0x0000002CUL;
382 enum CKK_SHA512_HMAC         = 0x0000002DUL;
383 enum CKK_SHA224_HMAC         = 0x0000002EUL;
384 
385 enum CKK_SEED                = 0x0000002FUL;
386 enum CKK_GOSTR3410           = 0x00000030UL;
387 enum CKK_GOSTR3411           = 0x00000031UL;
388 enum CKK_GOST28147           = 0x00000032UL;
389 
390 
391 
392 enum CKK_VENDOR_DEFINED      = 0x80000000UL;
393 
394 
395 /* CK_CERTIFICATE_TYPE is a value that identifies a certificate
396  * type
397  */
398 alias CK_ULONG          CK_CERTIFICATE_TYPE;
399 
400 enum CK_CERTIFICATE_CATEGORY_UNSPECIFIED     = 0UL;
401 enum CK_CERTIFICATE_CATEGORY_TOKEN_USER      = 1UL;
402 enum CK_CERTIFICATE_CATEGORY_AUTHORITY       = 2UL;
403 enum CK_CERTIFICATE_CATEGORY_OTHER_ENTITY    = 3UL;
404 
405 enum CK_SECURITY_DOMAIN_UNSPECIFIED     = 0UL;
406 enum CK_SECURITY_DOMAIN_MANUFACTURER    = 1UL;
407 enum CK_SECURITY_DOMAIN_OPERATOR        = 2UL;
408 enum CK_SECURITY_DOMAIN_THIRD_PARTY     = 3UL;
409 
410 
411 /* The following certificate types are defined: */
412 enum CKC_X_509               = 0x00000000UL;
413 enum CKC_X_509_ATTR_CERT     = 0x00000001UL;
414 enum CKC_WTLS                = 0x00000002UL;
415 enum CKC_VENDOR_DEFINED      = 0x80000000UL;
416 
417 
418 /* CK_ATTRIBUTE_TYPE is a value that identifies an attribute
419  * type
420  */
421 alias CK_ULONG          CK_ATTRIBUTE_TYPE;
422 
423 /* The CKF_ARRAY_ATTRIBUTE flag identifies an attribute which
424  * consists of an array of values.
425  */
426 enum CKF_ARRAY_ATTRIBUTE     = 0x40000000UL;
427 
428 /* The following OTP-related defines relate to the CKA_OTP_FORMAT attribute */
429 enum CK_OTP_FORMAT_DECIMAL           = 0UL;
430 enum CK_OTP_FORMAT_HEXADECIMAL       = 1UL;
431 enum CK_OTP_FORMAT_ALPHANUMERIC      = 2UL;
432 enum CK_OTP_FORMAT_BINARY            = 3UL;
433 
434 /* The following OTP-related defines relate to the CKA_OTP_..._REQUIREMENT
435  * attributes
436  */
437 enum CK_OTP_PARAM_IGNORED            = 0UL;
438 enum CK_OTP_PARAM_OPTIONAL           = 1UL;
439 enum CK_OTP_PARAM_MANDATORY          = 2UL;
440 
441 /* The following attribute types are defined: */
442 enum CKA_CLASS              = 0x00000000UL;
443 enum CKA_TOKEN              = 0x00000001UL;
444 enum CKA_PRIVATE            = 0x00000002UL;
445 enum CKA_LABEL              = 0x00000003UL;
446 enum CKA_APPLICATION        = 0x00000010UL;
447 enum CKA_VALUE              = 0x00000011UL;
448 enum CKA_OBJECT_ID          = 0x00000012UL;
449 enum CKA_CERTIFICATE_TYPE   = 0x00000080UL;
450 enum CKA_ISSUER             = 0x00000081UL;
451 enum CKA_SERIAL_NUMBER      = 0x00000082UL;
452 enum CKA_AC_ISSUER          = 0x00000083UL;
453 enum CKA_OWNER              = 0x00000084UL;
454 enum CKA_ATTR_TYPES         = 0x00000085UL;
455 enum CKA_TRUSTED            = 0x00000086UL;
456 enum CKA_CERTIFICATE_CATEGORY        = 0x00000087UL;
457 enum CKA_JAVA_MIDP_SECURITY_DOMAIN   = 0x00000088UL;
458 enum CKA_URL                         = 0x00000089UL;
459 enum CKA_HASH_OF_SUBJECT_PUBLIC_KEY  = 0x0000008AUL;
460 enum CKA_HASH_OF_ISSUER_PUBLIC_KEY   = 0x0000008BUL;
461 enum CKA_NAME_HASH_ALGORITHM         = 0x0000008CUL;
462 enum CKA_CHECK_VALUE                 = 0x00000090UL;
463 
464 enum CKA_KEY_TYPE           = 0x00000100UL;
465 enum CKA_SUBJECT            = 0x00000101UL;
466 enum CKA_ID                 = 0x00000102UL;
467 enum CKA_SENSITIVE          = 0x00000103UL;
468 enum CKA_ENCRYPT            = 0x00000104UL;
469 enum CKA_DECRYPT            = 0x00000105UL;
470 enum CKA_WRAP               = 0x00000106UL;
471 enum CKA_UNWRAP             = 0x00000107UL;
472 enum CKA_SIGN               = 0x00000108UL;
473 enum CKA_SIGN_RECOVER       = 0x00000109UL;
474 enum CKA_VERIFY             = 0x0000010AUL;
475 enum CKA_VERIFY_RECOVER     = 0x0000010BUL;
476 enum CKA_DERIVE             = 0x0000010CUL;
477 enum CKA_START_DATE         = 0x00000110UL;
478 enum CKA_END_DATE           = 0x00000111UL;
479 enum CKA_MODULUS            = 0x00000120UL;
480 enum CKA_MODULUS_BITS       = 0x00000121UL;
481 enum CKA_PUBLIC_EXPONENT    = 0x00000122UL;
482 enum CKA_PRIVATE_EXPONENT   = 0x00000123UL;
483 enum CKA_PRIME_1            = 0x00000124UL;
484 enum CKA_PRIME_2            = 0x00000125UL;
485 enum CKA_EXPONENT_1         = 0x00000126UL;
486 enum CKA_EXPONENT_2         = 0x00000127UL;
487 enum CKA_COEFFICIENT        = 0x00000128UL;
488 enum CKA_PUBLIC_KEY_INFO    = 0x00000129UL;
489 enum CKA_PRIME              = 0x00000130UL;
490 enum CKA_SUBPRIME           = 0x00000131UL;
491 enum CKA_BASE               = 0x00000132UL;
492 
493 enum CKA_PRIME_BITS         = 0x00000133UL;
494 enum CKA_SUBPRIME_BITS      = 0x00000134UL;
495 enum CKA_SUB_PRIME_BITS     = CKA_SUBPRIME_BITS;
496 
497 enum CKA_VALUE_BITS         = 0x00000160UL;
498 enum CKA_VALUE_LEN          = 0x00000161UL;
499 enum CKA_EXTRACTABLE        = 0x00000162UL;
500 enum CKA_LOCAL              = 0x00000163UL;
501 enum CKA_NEVER_EXTRACTABLE  = 0x00000164UL;
502 enum CKA_ALWAYS_SENSITIVE   = 0x00000165UL;
503 enum CKA_KEY_GEN_MECHANISM  = 0x00000166UL;
504 
505 enum CKA_MODIFIABLE         = 0x00000170UL;
506 enum CKA_COPYABLE           = 0x00000171UL;
507 
508 enum CKA_DESTROYABLE        = 0x00000172UL;
509 
510 enum CKA_ECDSA_PARAMS       = 0x00000180UL; /* Deprecated */
511 enum CKA_EC_PARAMS          = 0x00000180UL;
512 
513 enum CKA_EC_POINT           = 0x00000181UL;
514 
515 enum CKA_SECONDARY_AUTH     = 0x00000200UL; /* Deprecated */
516 enum CKA_AUTH_PIN_FLAGS     = 0x00000201UL; /* Deprecated */
517 
518 enum CKA_ALWAYS_AUTHENTICATE  = 0x00000202UL;
519 
520 enum CKA_WRAP_WITH_TRUSTED    = 0x00000210UL;
521 enum CKA_WRAP_TEMPLATE        = (CKF_ARRAY_ATTRIBUTE|0x00000211UL);
522 enum CKA_UNWRAP_TEMPLATE      = (CKF_ARRAY_ATTRIBUTE|0x00000212UL);
523 enum CKA_DERIVE_TEMPLATE      = (CKF_ARRAY_ATTRIBUTE|0x00000213UL);
524 
525 enum CKA_OTP_FORMAT                = 0x00000220UL;
526 enum CKA_OTP_LENGTH                = 0x00000221UL;
527 enum CKA_OTP_TIME_INTERVAL         = 0x00000222UL;
528 enum CKA_OTP_USER_FRIENDLY_MODE    = 0x00000223UL;
529 enum CKA_OTP_CHALLENGE_REQUIREMENT = 0x00000224UL;
530 enum CKA_OTP_TIME_REQUIREMENT      = 0x00000225UL;
531 enum CKA_OTP_COUNTER_REQUIREMENT   = 0x00000226UL;
532 enum CKA_OTP_PIN_REQUIREMENT       = 0x00000227UL;
533 enum CKA_OTP_COUNTER               = 0x0000022EUL;
534 enum CKA_OTP_TIME                  = 0x0000022FUL;
535 enum CKA_OTP_USER_IDENTIFIER       = 0x0000022AUL;
536 enum CKA_OTP_SERVICE_IDENTIFIER    = 0x0000022BUL;
537 enum CKA_OTP_SERVICE_LOGO          = 0x0000022CUL;
538 enum CKA_OTP_SERVICE_LOGO_TYPE     = 0x0000022DUL;
539 
540 enum CKA_GOSTR3410_PARAMS            = 0x00000250UL;
541 enum CKA_GOSTR3411_PARAMS            = 0x00000251UL;
542 enum CKA_GOST28147_PARAMS            = 0x00000252UL;
543 
544 enum CKA_HW_FEATURE_TYPE             = 0x00000300UL;
545 enum CKA_RESET_ON_INIT               = 0x00000301UL;
546 enum CKA_HAS_RESET                   = 0x00000302UL;
547 
548 enum CKA_PIXEL_X                     = 0x00000400UL;
549 enum CKA_PIXEL_Y                     = 0x00000401UL;
550 enum CKA_RESOLUTION                  = 0x00000402UL;
551 enum CKA_CHAR_ROWS                   = 0x00000403UL;
552 enum CKA_CHAR_COLUMNS                = 0x00000404UL;
553 enum CKA_COLOR                       = 0x00000405UL;
554 enum CKA_BITS_PER_PIXEL              = 0x00000406UL;
555 enum CKA_CHAR_SETS                   = 0x00000480UL;
556 enum CKA_ENCODING_METHODS            = 0x00000481UL;
557 enum CKA_MIME_TYPES                  = 0x00000482UL;
558 enum CKA_MECHANISM_TYPE              = 0x00000500UL;
559 enum CKA_REQUIRED_CMS_ATTRIBUTES     = 0x00000501UL;
560 enum CKA_DEFAULT_CMS_ATTRIBUTES      = 0x00000502UL;
561 enum CKA_SUPPORTED_CMS_ATTRIBUTES    = 0x00000503UL;
562 enum CKA_ALLOWED_MECHANISMS          = (CKF_ARRAY_ATTRIBUTE|0x00000600UL);
563 
564 enum CKA_VENDOR_DEFINED              = 0x80000000UL;
565 
566 /* CK_ATTRIBUTE is a structure that includes the type, length
567  * and value of an attribute
568  */
569 struct CK_ATTRIBUTE {
570   CK_ATTRIBUTE_TYPE type;
571   CK_VOID_PTR       pValue;
572   CK_ULONG          ulValueLen;  /* in bytes */
573 }
574 
575 alias CK_ATTRIBUTE * CK_ATTRIBUTE_PTR;
576 
577 /* CK_DATE is a structure that defines a date */
578 struct CK_DATE{
579   CK_CHAR[4]       year;   /* the year ("1900" - "9999") */
580   CK_CHAR[2]       month;  /* the month ("01" - "12") */
581   CK_CHAR[2]       day;    /* the day   ("01" - "31") */
582 }
583 
584 
585 /* CK_MECHANISM_TYPE is a value that identifies a mechanism
586  * type
587  */
588 alias CK_ULONG          CK_MECHANISM_TYPE;
589 
590 /* the following mechanism types are defined: */
591 enum CKM_RSA_PKCS_KEY_PAIR_GEN      = 0x00000000UL;
592 enum CKM_RSA_PKCS                   = 0x00000001UL;
593 enum CKM_RSA_9796                   = 0x00000002UL;
594 enum CKM_RSA_X_509                  = 0x00000003UL;
595 
596 enum CKM_MD2_RSA_PKCS               = 0x00000004UL;
597 enum CKM_MD5_RSA_PKCS               = 0x00000005UL;
598 enum CKM_SHA1_RSA_PKCS              = 0x00000006UL;
599 
600 enum CKM_RIPEMD128_RSA_PKCS         = 0x00000007UL;
601 enum CKM_RIPEMD160_RSA_PKCS         = 0x00000008UL;
602 enum CKM_RSA_PKCS_OAEP              = 0x00000009UL;
603 
604 enum CKM_RSA_X9_31_KEY_PAIR_GEN     = 0x0000000AUL;
605 enum CKM_RSA_X9_31                  = 0x0000000BUL;
606 enum CKM_SHA1_RSA_X9_31             = 0x0000000CUL;
607 enum CKM_RSA_PKCS_PSS               = 0x0000000DUL;
608 enum CKM_SHA1_RSA_PKCS_PSS          = 0x0000000EUL;
609 
610 enum CKM_DSA_KEY_PAIR_GEN           = 0x00000010UL;
611 enum CKM_DSA                        = 0x00000011UL;
612 enum CKM_DSA_SHA1                   = 0x00000012UL;
613 enum CKM_DSA_SHA224                 = 0x00000013UL;
614 enum CKM_DSA_SHA256                 = 0x00000014UL;
615 enum CKM_DSA_SHA384                 = 0x00000015UL;
616 enum CKM_DSA_SHA512                 = 0x00000016UL;
617 
618 enum CKM_DH_PKCS_KEY_PAIR_GEN       = 0x00000020UL;
619 enum CKM_DH_PKCS_DERIVE             = 0x00000021UL;
620 
621 enum CKM_X9_42_DH_KEY_PAIR_GEN      = 0x00000030UL;
622 enum CKM_X9_42_DH_DERIVE            = 0x00000031UL;
623 enum CKM_X9_42_DH_HYBRID_DERIVE     = 0x00000032UL;
624 enum CKM_X9_42_MQV_DERIVE           = 0x00000033UL;
625 
626 enum CKM_SHA256_RSA_PKCS            = 0x00000040UL;
627 enum CKM_SHA384_RSA_PKCS            = 0x00000041UL;
628 enum CKM_SHA512_RSA_PKCS            = 0x00000042UL;
629 enum CKM_SHA256_RSA_PKCS_PSS        = 0x00000043UL;
630 enum CKM_SHA384_RSA_PKCS_PSS        = 0x00000044UL;
631 enum CKM_SHA512_RSA_PKCS_PSS        = 0x00000045UL;
632 
633 enum CKM_SHA224_RSA_PKCS            = 0x00000046UL;
634 enum CKM_SHA224_RSA_PKCS_PSS        = 0x00000047UL;
635 
636 enum CKM_SHA512_224                 = 0x00000048UL;
637 enum CKM_SHA512_224_HMAC            = 0x00000049UL;
638 enum CKM_SHA512_224_HMAC_GENERAL    = 0x0000004AUL;
639 enum CKM_SHA512_224_KEY_DERIVATION  = 0x0000004BUL;
640 enum CKM_SHA512_256                 = 0x0000004CUL;
641 enum CKM_SHA512_256_HMAC            = 0x0000004DUL;
642 enum CKM_SHA512_256_HMAC_GENERAL    = 0x0000004EUL;
643 enum CKM_SHA512_256_KEY_DERIVATION  = 0x0000004FUL;
644 
645 enum CKM_SHA512_T                   = 0x00000050UL;
646 enum CKM_SHA512_T_HMAC              = 0x00000051UL;
647 enum CKM_SHA512_T_HMAC_GENERAL      = 0x00000052UL;
648 enum CKM_SHA512_T_KEY_DERIVATION    = 0x00000053UL;
649 
650 enum CKM_RC2_KEY_GEN                = 0x00000100UL;
651 enum CKM_RC2_ECB                    = 0x00000101UL;
652 enum CKM_RC2_CBC                    = 0x00000102UL;
653 enum CKM_RC2_MAC                    = 0x00000103UL;
654 
655 enum CKM_RC2_MAC_GENERAL            = 0x00000104UL;
656 enum CKM_RC2_CBC_PAD                = 0x00000105UL;
657 
658 enum CKM_RC4_KEY_GEN                = 0x00000110UL;
659 enum CKM_RC4                        = 0x00000111UL;
660 enum CKM_DES_KEY_GEN                = 0x00000120UL;
661 enum CKM_DES_ECB                    = 0x00000121UL;
662 enum CKM_DES_CBC                    = 0x00000122UL;
663 enum CKM_DES_MAC                    = 0x00000123UL;
664 
665 enum CKM_DES_MAC_GENERAL            = 0x00000124UL;
666 enum CKM_DES_CBC_PAD                = 0x00000125UL;
667 
668 enum CKM_DES2_KEY_GEN               = 0x00000130UL;
669 enum CKM_DES3_KEY_GEN               = 0x00000131UL;
670 enum CKM_DES3_ECB                   = 0x00000132UL;
671 enum CKM_DES3_CBC                   = 0x00000133UL;
672 enum CKM_DES3_MAC                   = 0x00000134UL;
673 
674 enum CKM_DES3_MAC_GENERAL           = 0x00000135UL;
675 enum CKM_DES3_CBC_PAD               = 0x00000136UL;
676 enum CKM_DES3_CMAC_GENERAL          = 0x00000137UL;
677 enum CKM_DES3_CMAC                  = 0x00000138UL;
678 enum CKM_CDMF_KEY_GEN               = 0x00000140UL;
679 enum CKM_CDMF_ECB                   = 0x00000141UL;
680 enum CKM_CDMF_CBC                   = 0x00000142UL;
681 enum CKM_CDMF_MAC                   = 0x00000143UL;
682 enum CKM_CDMF_MAC_GENERAL           = 0x00000144UL;
683 enum CKM_CDMF_CBC_PAD               = 0x00000145UL;
684 
685 enum CKM_DES_OFB64                  = 0x00000150UL;
686 enum CKM_DES_OFB8                   = 0x00000151UL;
687 enum CKM_DES_CFB64                  = 0x00000152UL;
688 enum CKM_DES_CFB8                   = 0x00000153UL;
689 
690 enum CKM_MD2                        = 0x00000200UL;
691 
692 enum CKM_MD2_HMAC                   = 0x00000201UL;
693 enum CKM_MD2_HMAC_GENERAL           = 0x00000202UL;
694 
695 enum CKM_MD5                        = 0x00000210UL;
696 
697 enum CKM_MD5_HMAC                   = 0x00000211UL;
698 enum CKM_MD5_HMAC_GENERAL           = 0x00000212UL;
699 
700 enum CKM_SHA_1                      = 0x00000220UL;
701 
702 enum CKM_SHA_1_HMAC                 = 0x00000221UL;
703 enum CKM_SHA_1_HMAC_GENERAL         = 0x00000222UL;
704 
705 enum CKM_RIPEMD128                  = 0x00000230UL;
706 enum CKM_RIPEMD128_HMAC             = 0x00000231UL;
707 enum CKM_RIPEMD128_HMAC_GENERAL     = 0x00000232UL;
708 enum CKM_RIPEMD160                  = 0x00000240UL;
709 enum CKM_RIPEMD160_HMAC             = 0x00000241UL;
710 enum CKM_RIPEMD160_HMAC_GENERAL     = 0x00000242UL;
711 
712 enum CKM_SHA256                     = 0x00000250UL;
713 enum CKM_SHA256_HMAC                = 0x00000251UL;
714 enum CKM_SHA256_HMAC_GENERAL        = 0x00000252UL;
715 enum CKM_SHA224                     = 0x00000255UL;
716 enum CKM_SHA224_HMAC                = 0x00000256UL;
717 enum CKM_SHA224_HMAC_GENERAL        = 0x00000257UL;
718 enum CKM_SHA384                     = 0x00000260UL;
719 enum CKM_SHA384_HMAC                = 0x00000261UL;
720 enum CKM_SHA384_HMAC_GENERAL        = 0x00000262UL;
721 enum CKM_SHA512                     = 0x00000270UL;
722 enum CKM_SHA512_HMAC                = 0x00000271UL;
723 enum CKM_SHA512_HMAC_GENERAL        = 0x00000272UL;
724 enum CKM_SECURID_KEY_GEN            = 0x00000280UL;
725 enum CKM_SECURID                    = 0x00000282UL;
726 enum CKM_HOTP_KEY_GEN               = 0x00000290UL;
727 enum CKM_HOTP                       = 0x00000291UL;
728 enum CKM_ACTI                       = 0x000002A0UL;
729 enum CKM_ACTI_KEY_GEN               = 0x000002A1UL;
730 
731 enum CKM_CAST_KEY_GEN               = 0x00000300UL;
732 enum CKM_CAST_ECB                   = 0x00000301UL;
733 enum CKM_CAST_CBC                   = 0x00000302UL;
734 enum CKM_CAST_MAC                   = 0x00000303UL;
735 enum CKM_CAST_MAC_GENERAL           = 0x00000304UL;
736 enum CKM_CAST_CBC_PAD               = 0x00000305UL;
737 enum CKM_CAST3_KEY_GEN              = 0x00000310UL;
738 enum CKM_CAST3_ECB                  = 0x00000311UL;
739 enum CKM_CAST3_CBC                  = 0x00000312UL;
740 enum CKM_CAST3_MAC                  = 0x00000313UL;
741 enum CKM_CAST3_MAC_GENERAL          = 0x00000314UL;
742 enum CKM_CAST3_CBC_PAD              = 0x00000315UL;
743 /* Note that CAST128 and CAST5 are the same algorithm */
744 enum CKM_CAST5_KEY_GEN              = 0x00000320UL;
745 enum CKM_CAST128_KEY_GEN            = 0x00000320UL;
746 enum CKM_CAST5_ECB                  = 0x00000321UL;
747 enum CKM_CAST128_ECB                = 0x00000321UL;
748 enum CKM_CAST5_CBC                  = 0x00000322UL; /* Deprecated */
749 enum CKM_CAST128_CBC                = 0x00000322UL;
750 enum CKM_CAST5_MAC                  = 0x00000323UL; /* Deprecated */
751 enum CKM_CAST128_MAC                = 0x00000323UL;
752 enum CKM_CAST5_MAC_GENERAL          = 0x00000324UL; /* Deprecated */
753 enum CKM_CAST128_MAC_GENERAL        = 0x00000324UL;
754 enum CKM_CAST5_CBC_PAD              = 0x00000325UL; /* Deprecated */
755 enum CKM_CAST128_CBC_PAD            = 0x00000325UL;
756 enum CKM_RC5_KEY_GEN                = 0x00000330UL;
757 enum CKM_RC5_ECB                    = 0x00000331UL;
758 enum CKM_RC5_CBC                    = 0x00000332UL;
759 enum CKM_RC5_MAC                    = 0x00000333UL;
760 enum CKM_RC5_MAC_GENERAL            = 0x00000334UL;
761 enum CKM_RC5_CBC_PAD                = 0x00000335UL;
762 enum CKM_IDEA_KEY_GEN               = 0x00000340UL;
763 enum CKM_IDEA_ECB                   = 0x00000341UL;
764 enum CKM_IDEA_CBC                   = 0x00000342UL;
765 enum CKM_IDEA_MAC                   = 0x00000343UL;
766 enum CKM_IDEA_MAC_GENERAL           = 0x00000344UL;
767 enum CKM_IDEA_CBC_PAD               = 0x00000345UL;
768 enum CKM_GENERIC_SECRET_KEY_GEN     = 0x00000350UL;
769 enum CKM_CONCATENATE_BASE_AND_KEY   = 0x00000360UL;
770 enum CKM_CONCATENATE_BASE_AND_DATA  = 0x00000362UL;
771 enum CKM_CONCATENATE_DATA_AND_BASE  = 0x00000363UL;
772 enum CKM_XOR_BASE_AND_DATA          = 0x00000364UL;
773 enum CKM_EXTRACT_KEY_FROM_KEY       = 0x00000365UL;
774 enum CKM_SSL3_PRE_MASTER_KEY_GEN    = 0x00000370UL;
775 enum CKM_SSL3_MASTER_KEY_DERIVE     = 0x00000371UL;
776 enum CKM_SSL3_KEY_AND_MAC_DERIVE    = 0x00000372UL;
777 
778 enum CKM_SSL3_MASTER_KEY_DERIVE_DH  = 0x00000373UL;
779 enum CKM_TLS_PRE_MASTER_KEY_GEN     = 0x00000374UL;
780 enum CKM_TLS_MASTER_KEY_DERIVE      = 0x00000375UL;
781 enum CKM_TLS_KEY_AND_MAC_DERIVE     = 0x00000376UL;
782 enum CKM_TLS_MASTER_KEY_DERIVE_DH   = 0x00000377UL;
783 
784 enum CKM_TLS_PRF                    = 0x00000378UL;
785 
786 enum CKM_SSL3_MD5_MAC               = 0x00000380UL;
787 enum CKM_SSL3_SHA1_MAC              = 0x00000381UL;
788 enum CKM_MD5_KEY_DERIVATION         = 0x00000390UL;
789 enum CKM_MD2_KEY_DERIVATION         = 0x00000391UL;
790 enum CKM_SHA1_KEY_DERIVATION        = 0x00000392UL;
791 
792 enum CKM_SHA256_KEY_DERIVATION      = 0x00000393UL;
793 enum CKM_SHA384_KEY_DERIVATION      = 0x00000394UL;
794 enum CKM_SHA512_KEY_DERIVATION      = 0x00000395UL;
795 enum CKM_SHA224_KEY_DERIVATION      = 0x00000396UL;
796 
797 enum CKM_PBE_MD2_DES_CBC            = 0x000003A0UL;
798 enum CKM_PBE_MD5_DES_CBC            = 0x000003A1UL;
799 enum CKM_PBE_MD5_CAST_CBC           = 0x000003A2UL;
800 enum CKM_PBE_MD5_CAST3_CBC          = 0x000003A3UL;
801 enum CKM_PBE_MD5_CAST5_CBC          = 0x000003A4UL; /* Deprecated */
802 enum CKM_PBE_MD5_CAST128_CBC        = 0x000003A4UL;
803 enum CKM_PBE_SHA1_CAST5_CBC         = 0x000003A5UL; /* Deprecated */
804 enum CKM_PBE_SHA1_CAST128_CBC       = 0x000003A5UL;
805 enum CKM_PBE_SHA1_RC4_128           = 0x000003A6UL;
806 enum CKM_PBE_SHA1_RC4_40            = 0x000003A7UL;
807 enum CKM_PBE_SHA1_DES3_EDE_CBC      = 0x000003A8UL;
808 enum CKM_PBE_SHA1_DES2_EDE_CBC      = 0x000003A9UL;
809 enum CKM_PBE_SHA1_RC2_128_CBC       = 0x000003AAUL;
810 enum CKM_PBE_SHA1_RC2_40_CBC        = 0x000003ABUL;
811 
812 enum CKM_PKCS5_PBKD2                = 0x000003B0UL;
813 
814 enum CKM_PBA_SHA1_WITH_SHA1_HMAC    = 0x000003C0UL;
815 
816 enum CKM_WTLS_PRE_MASTER_KEY_GEN         = 0x000003D0UL;
817 enum CKM_WTLS_MASTER_KEY_DERIVE          = 0x000003D1UL;
818 enum CKM_WTLS_MASTER_KEY_DERIVE_DH_ECC   = 0x000003D2UL;
819 enum CKM_WTLS_PRF                        = 0x000003D3UL;
820 enum CKM_WTLS_SERVER_KEY_AND_MAC_DERIVE  = 0x000003D4UL;
821 enum CKM_WTLS_CLIENT_KEY_AND_MAC_DERIVE  = 0x000003D5UL;
822 
823 enum CKM_TLS10_MAC_SERVER                = 0x000003D6UL;
824 enum CKM_TLS10_MAC_CLIENT                = 0x000003D7UL;
825 enum CKM_TLS12_MAC                       = 0x000003D8UL;
826 enum CKM_TLS12_KDF                       = 0x000003D9UL;
827 enum CKM_TLS12_MASTER_KEY_DERIVE         = 0x000003E0UL;
828 enum CKM_TLS12_KEY_AND_MAC_DERIVE        = 0x000003E1UL;
829 enum CKM_TLS12_MASTER_KEY_DERIVE_DH      = 0x000003E2UL;
830 enum CKM_TLS12_KEY_SAFE_DERIVE           = 0x000003E3UL;
831 enum CKM_TLS_MAC                         = 0x000003E4UL;
832 enum CKM_TLS_KDF                         = 0x000003E5UL;
833 
834 enum CKM_KEY_WRAP_LYNKS             = 0x00000400UL;
835 enum CKM_KEY_WRAP_SET_OAEP          = 0x00000401UL;
836 
837 enum CKM_CMS_SIG                    = 0x00000500UL;
838 enum CKM_KIP_DERIVE                 = 0x00000510UL;
839 enum CKM_KIP_WRAP                   = 0x00000511UL;
840 enum CKM_KIP_MAC                    = 0x00000512UL;
841 
842 enum CKM_CAMELLIA_KEY_GEN           = 0x00000550UL;
843 enum CKM_CAMELLIA_ECB               = 0x00000551UL;
844 enum CKM_CAMELLIA_CBC               = 0x00000552UL;
845 enum CKM_CAMELLIA_MAC               = 0x00000553UL;
846 enum CKM_CAMELLIA_MAC_GENERAL       = 0x00000554UL;
847 enum CKM_CAMELLIA_CBC_PAD           = 0x00000555UL;
848 enum CKM_CAMELLIA_ECB_ENCRYPT_DATA  = 0x00000556UL;
849 enum CKM_CAMELLIA_CBC_ENCRYPT_DATA  = 0x00000557UL;
850 enum CKM_CAMELLIA_CTR               = 0x00000558UL;
851 
852 enum CKM_ARIA_KEY_GEN               = 0x00000560UL;
853 enum CKM_ARIA_ECB                   = 0x00000561UL;
854 enum CKM_ARIA_CBC                   = 0x00000562UL;
855 enum CKM_ARIA_MAC                   = 0x00000563UL;
856 enum CKM_ARIA_MAC_GENERAL           = 0x00000564UL;
857 enum CKM_ARIA_CBC_PAD               = 0x00000565UL;
858 enum CKM_ARIA_ECB_ENCRYPT_DATA      = 0x00000566UL;
859 enum CKM_ARIA_CBC_ENCRYPT_DATA      = 0x00000567UL;
860 
861 enum CKM_SEED_KEY_GEN               = 0x00000650UL;
862 enum CKM_SEED_ECB                   = 0x00000651UL;
863 enum CKM_SEED_CBC                   = 0x00000652UL;
864 enum CKM_SEED_MAC                   = 0x00000653UL;
865 enum CKM_SEED_MAC_GENERAL           = 0x00000654UL;
866 enum CKM_SEED_CBC_PAD               = 0x00000655UL;
867 enum CKM_SEED_ECB_ENCRYPT_DATA      = 0x00000656UL;
868 enum CKM_SEED_CBC_ENCRYPT_DATA      = 0x00000657UL;
869 
870 enum CKM_SKIPJACK_KEY_GEN           = 0x00001000UL;
871 enum CKM_SKIPJACK_ECB64             = 0x00001001UL;
872 enum CKM_SKIPJACK_CBC64             = 0x00001002UL;
873 enum CKM_SKIPJACK_OFB64             = 0x00001003UL;
874 enum CKM_SKIPJACK_CFB64             = 0x00001004UL;
875 enum CKM_SKIPJACK_CFB32             = 0x00001005UL;
876 enum CKM_SKIPJACK_CFB16             = 0x00001006UL;
877 enum CKM_SKIPJACK_CFB8              = 0x00001007UL;
878 enum CKM_SKIPJACK_WRAP              = 0x00001008UL;
879 enum CKM_SKIPJACK_PRIVATE_WRAP      = 0x00001009UL;
880 enum CKM_SKIPJACK_RELAYX            = 0x0000100aUL;
881 enum CKM_KEA_KEY_PAIR_GEN           = 0x00001010UL;
882 enum CKM_KEA_KEY_DERIVE             = 0x00001011UL;
883 enum CKM_KEA_DERIVE                 = 0x00001012UL;
884 enum CKM_FORTEZZA_TIMESTAMP         = 0x00001020UL;
885 enum CKM_BATON_KEY_GEN              = 0x00001030UL;
886 enum CKM_BATON_ECB128               = 0x00001031UL;
887 enum CKM_BATON_ECB96                = 0x00001032UL;
888 enum CKM_BATON_CBC128               = 0x00001033UL;
889 enum CKM_BATON_COUNTER              = 0x00001034UL;
890 enum CKM_BATON_SHUFFLE              = 0x00001035UL;
891 enum CKM_BATON_WRAP                 = 0x00001036UL;
892 
893 enum CKM_ECDSA_KEY_PAIR_GEN         = 0x00001040UL; /* Deprecated */
894 enum CKM_EC_KEY_PAIR_GEN            = 0x00001040UL;
895 
896 enum CKM_ECDSA                      = 0x00001041UL;
897 enum CKM_ECDSA_SHA1                 = 0x00001042UL;
898 enum CKM_ECDSA_SHA224               = 0x00001043UL;
899 enum CKM_ECDSA_SHA256               = 0x00001044UL;
900 enum CKM_ECDSA_SHA384               = 0x00001045UL;
901 enum CKM_ECDSA_SHA512               = 0x00001046UL;
902 
903 enum CKM_ECDH1_DERIVE               = 0x00001050UL;
904 enum CKM_ECDH1_COFACTOR_DERIVE      = 0x00001051UL;
905 enum CKM_ECMQV_DERIVE               = 0x00001052UL;
906 
907 enum CKM_ECDH_AES_KEY_WRAP          = 0x00001053UL;
908 enum CKM_RSA_AES_KEY_WRAP           = 0x00001054UL;
909 
910 enum CKM_JUNIPER_KEY_GEN            = 0x00001060UL;
911 enum CKM_JUNIPER_ECB128             = 0x00001061UL;
912 enum CKM_JUNIPER_CBC128             = 0x00001062UL;
913 enum CKM_JUNIPER_COUNTER            = 0x00001063UL;
914 enum CKM_JUNIPER_SHUFFLE            = 0x00001064UL;
915 enum CKM_JUNIPER_WRAP               = 0x00001065UL;
916 enum CKM_FASTHASH                   = 0x00001070UL;
917 
918 enum CKM_AES_KEY_GEN                = 0x00001080UL;
919 enum CKM_AES_ECB                    = 0x00001081UL;
920 enum CKM_AES_CBC                    = 0x00001082UL;
921 enum CKM_AES_MAC                    = 0x00001083UL;
922 enum CKM_AES_MAC_GENERAL            = 0x00001084UL;
923 enum CKM_AES_CBC_PAD                = 0x00001085UL;
924 enum CKM_AES_CTR                    = 0x00001086UL;
925 enum CKM_AES_GCM                    = 0x00001087UL;
926 enum CKM_AES_CCM                    = 0x00001088UL;
927 enum CKM_AES_CTS                    = 0x00001089UL;
928 enum CKM_AES_CMAC                   = 0x0000108AUL;
929 enum CKM_AES_CMAC_GENERAL           = 0x0000108BUL;
930 
931 enum CKM_AES_XCBC_MAC               = 0x0000108CUL;
932 enum CKM_AES_XCBC_MAC_96            = 0x0000108DUL;
933 enum CKM_AES_GMAC                   = 0x0000108EUL;
934 
935 enum CKM_BLOWFISH_KEY_GEN           = 0x00001090UL;
936 enum CKM_BLOWFISH_CBC               = 0x00001091UL;
937 enum CKM_TWOFISH_KEY_GEN            = 0x00001092UL;
938 enum CKM_TWOFISH_CBC                = 0x00001093UL;
939 enum CKM_BLOWFISH_CBC_PAD           = 0x00001094UL;
940 enum CKM_TWOFISH_CBC_PAD            = 0x00001095UL;
941 
942 enum CKM_DES_ECB_ENCRYPT_DATA       = 0x00001100UL;
943 enum CKM_DES_CBC_ENCRYPT_DATA       = 0x00001101UL;
944 enum CKM_DES3_ECB_ENCRYPT_DATA      = 0x00001102UL;
945 enum CKM_DES3_CBC_ENCRYPT_DATA      = 0x00001103UL;
946 enum CKM_AES_ECB_ENCRYPT_DATA       = 0x00001104UL;
947 enum CKM_AES_CBC_ENCRYPT_DATA       = 0x00001105UL;
948 
949 enum CKM_GOSTR3410_KEY_PAIR_GEN     = 0x00001200UL;
950 enum CKM_GOSTR3410                  = 0x00001201UL;
951 enum CKM_GOSTR3410_WITH_GOSTR3411   = 0x00001202UL;
952 enum CKM_GOSTR3410_KEY_WRAP         = 0x00001203UL;
953 enum CKM_GOSTR3410_DERIVE           = 0x00001204UL;
954 enum CKM_GOSTR3411                  = 0x00001210UL;
955 enum CKM_GOSTR3411_HMAC             = 0x00001211UL;
956 enum CKM_GOST28147_KEY_GEN          = 0x00001220UL;
957 enum CKM_GOST28147_ECB              = 0x00001221UL;
958 enum CKM_GOST28147                  = 0x00001222UL;
959 enum CKM_GOST28147_MAC              = 0x00001223UL;
960 enum CKM_GOST28147_KEY_WRAP         = 0x00001224UL;
961 
962 enum CKM_DSA_PARAMETER_GEN          = 0x00002000UL;
963 enum CKM_DH_PKCS_PARAMETER_GEN      = 0x00002001UL;
964 enum CKM_X9_42_DH_PARAMETER_GEN     = 0x00002002UL;
965 enum CKM_DSA_PROBABLISTIC_PARAMETER_GEN    = 0x00002003UL;
966 enum CKM_DSA_SHAWE_TAYLOR_PARAMETER_GEN    = 0x00002004UL;
967 
968 enum CKM_AES_OFB                    = 0x00002104UL;
969 enum CKM_AES_CFB64                  = 0x00002105UL;
970 enum CKM_AES_CFB8                   = 0x00002106UL;
971 enum CKM_AES_CFB128                 = 0x00002107UL;
972 
973 enum CKM_AES_CFB1                   = 0x00002108UL;
974 enum CKM_AES_KEY_WRAP               = 0x00002109UL;     /* WAS: 0x00001090 */
975 enum CKM_AES_KEY_WRAP_PAD           = 0x0000210AUL;     /* WAS: 0x00001091 */
976 
977 enum CKM_RSA_PKCS_TPM_1_1           = 0x00004001UL;
978 enum CKM_RSA_PKCS_OAEP_TPM_1_1      = 0x00004002UL;
979 
980 enum CKM_VENDOR_DEFINED             = 0x80000000UL;
981 
982 alias CK_MECHANISM_TYPE * CK_MECHANISM_TYPE_PTR;
983 
984 
985 /* CK_MECHANISM is a structure that specifies a particular
986  * mechanism
987  */
988 struct CK_MECHANISM {
989   CK_MECHANISM_TYPE mechanism;
990   CK_VOID_PTR       pParameter;
991   CK_ULONG          ulParameterLen;  /* in bytes */
992 }
993 
994 alias CK_MECHANISM * CK_MECHANISM_PTR;
995 
996 
997 /* CK_MECHANISM_INFO provides information about a particular
998  * mechanism
999  */
1000 struct CK_MECHANISM_INFO {
1001     CK_ULONG    ulMinKeySize;
1002     CK_ULONG    ulMaxKeySize;
1003     CK_FLAGS    flags;
1004 }
1005 
1006 /* The flags are defined as follows:
1007  *      Bit Flag               Mask          Meaning */
1008 enum CKF_HW                 = 0x00000001UL;  /* performed by HW */
1009 
1010 /* Specify whether or not a mechanism can be used for a particular task */
1011 enum CKF_ENCRYPT            = 0x00000100UL;
1012 enum CKF_DECRYPT            = 0x00000200UL;
1013 enum CKF_DIGEST             = 0x00000400UL;
1014 enum CKF_SIGN               = 0x00000800UL;
1015 enum CKF_SIGN_RECOVER       = 0x00001000UL;
1016 enum CKF_VERIFY             = 0x00002000UL;
1017 enum CKF_VERIFY_RECOVER     = 0x00004000UL;
1018 enum CKF_GENERATE           = 0x00008000UL;
1019 enum CKF_GENERATE_KEY_PAIR  = 0x00010000UL;
1020 enum CKF_WRAP               = 0x00020000UL;
1021 enum CKF_UNWRAP             = 0x00040000UL;
1022 enum CKF_DERIVE             = 0x00080000UL;
1023 
1024 /* Describe a token's EC capabilities not available in mechanism
1025  * information.
1026  */
1027 enum CKF_EC_F_P             = 0x00100000UL;
1028 enum CKF_EC_F_2M            = 0x00200000UL;
1029 enum CKF_EC_ECPARAMETERS    = 0x00400000UL;
1030 enum CKF_EC_NAMEDCURVE      = 0x00800000UL;
1031 enum CKF_EC_UNCOMPRESS      = 0x01000000UL;
1032 enum CKF_EC_COMPRESS        = 0x02000000UL;
1033 
1034 enum CKF_EXTENSION          = 0x80000000UL;
1035 
1036 alias CK_MECHANISM_INFO * CK_MECHANISM_INFO_PTR;
1037 
1038 /* CK_RV is a value that identifies the return value of a
1039  * Cryptoki function
1040  */
1041 alias CK_ULONG          CK_RV;
1042 
1043 enum CKR_OK                                = 0x00000000UL;
1044 enum CKR_CANCEL                            = 0x00000001UL;
1045 enum CKR_HOST_MEMORY                       = 0x00000002UL;
1046 enum CKR_SLOT_ID_INVALID                   = 0x00000003UL;
1047 
1048 enum CKR_GENERAL_ERROR                     = 0x00000005UL;
1049 enum CKR_FUNCTION_FAILED                   = 0x00000006UL;
1050 
1051 enum CKR_ARGUMENTS_BAD                     = 0x00000007UL;
1052 enum CKR_NO_EVENT                          = 0x00000008UL;
1053 enum CKR_NEED_TO_CREATE_THREADS            = 0x00000009UL;
1054 enum CKR_CANT_LOCK                         = 0x0000000AUL;
1055 
1056 enum CKR_ATTRIBUTE_READ_ONLY               = 0x00000010UL;
1057 enum CKR_ATTRIBUTE_SENSITIVE               = 0x00000011UL;
1058 enum CKR_ATTRIBUTE_TYPE_INVALID            = 0x00000012UL;
1059 enum CKR_ATTRIBUTE_VALUE_INVALID           = 0x00000013UL;
1060 
1061 enum CKR_ACTION_PROHIBITED                 = 0x0000001BUL;
1062 
1063 enum CKR_DATA_INVALID                      = 0x00000020UL;
1064 enum CKR_DATA_LEN_RANGE                    = 0x00000021UL;
1065 enum CKR_DEVICE_ERROR                      = 0x00000030UL;
1066 enum CKR_DEVICE_MEMORY                     = 0x00000031UL;
1067 enum CKR_DEVICE_REMOVED                    = 0x00000032UL;
1068 enum CKR_ENCRYPTED_DATA_INVALID            = 0x00000040UL;
1069 enum CKR_ENCRYPTED_DATA_LEN_RANGE          = 0x00000041UL;
1070 enum CKR_FUNCTION_CANCELED                 = 0x00000050UL;
1071 enum CKR_FUNCTION_NOT_PARALLEL             = 0x00000051UL;
1072 
1073 enum CKR_FUNCTION_NOT_SUPPORTED            = 0x00000054UL;
1074 
1075 enum CKR_KEY_HANDLE_INVALID                = 0x00000060UL;
1076 
1077 enum CKR_KEY_SIZE_RANGE                    = 0x00000062UL;
1078 enum CKR_KEY_TYPE_INCONSISTENT             = 0x00000063UL;
1079 
1080 enum CKR_KEY_NOT_NEEDED                    = 0x00000064UL;
1081 enum CKR_KEY_CHANGED                       = 0x00000065UL;
1082 enum CKR_KEY_NEEDED                        = 0x00000066UL;
1083 enum CKR_KEY_INDIGESTIBLE                  = 0x00000067UL;
1084 enum CKR_KEY_FUNCTION_NOT_PERMITTED        = 0x00000068UL;
1085 enum CKR_KEY_NOT_WRAPPABLE                 = 0x00000069UL;
1086 enum CKR_KEY_UNEXTRACTABLE                 = 0x0000006AUL;
1087 
1088 enum CKR_MECHANISM_INVALID                 = 0x00000070UL;
1089 enum CKR_MECHANISM_PARAM_INVALID           = 0x00000071UL;
1090 
1091 enum CKR_OBJECT_HANDLE_INVALID             = 0x00000082UL;
1092 enum CKR_OPERATION_ACTIVE                  = 0x00000090UL;
1093 enum CKR_OPERATION_NOT_INITIALIZED         = 0x00000091UL;
1094 enum CKR_PIN_INCORRECT                     = 0x000000A0UL;
1095 enum CKR_PIN_INVALID                       = 0x000000A1UL;
1096 enum CKR_PIN_LEN_RANGE                     = 0x000000A2UL;
1097 
1098 enum CKR_PIN_EXPIRED                       = 0x000000A3UL;
1099 enum CKR_PIN_LOCKED                        = 0x000000A4UL;
1100 
1101 enum CKR_SESSION_CLOSED                    = 0x000000B0UL;
1102 enum CKR_SESSION_COUNT                     = 0x000000B1UL;
1103 enum CKR_SESSION_HANDLE_INVALID            = 0x000000B3UL;
1104 enum CKR_SESSION_PARALLEL_NOT_SUPPORTED    = 0x000000B4UL;
1105 enum CKR_SESSION_READ_ONLY                 = 0x000000B5UL;
1106 enum CKR_SESSION_EXISTS                    = 0x000000B6UL;
1107 
1108 enum CKR_SESSION_READ_ONLY_EXISTS          = 0x000000B7UL;
1109 enum CKR_SESSION_READ_WRITE_SO_EXISTS      = 0x000000B8UL;
1110 
1111 enum CKR_SIGNATURE_INVALID                 = 0x000000C0UL;
1112 enum CKR_SIGNATURE_LEN_RANGE               = 0x000000C1UL;
1113 enum CKR_TEMPLATE_INCOMPLETE               = 0x000000D0UL;
1114 enum CKR_TEMPLATE_INCONSISTENT             = 0x000000D1UL;
1115 enum CKR_TOKEN_NOT_PRESENT                 = 0x000000E0UL;
1116 enum CKR_TOKEN_NOT_RECOGNIZED              = 0x000000E1UL;
1117 enum CKR_TOKEN_WRITE_PROTECTED             = 0x000000E2UL;
1118 enum CKR_UNWRAPPING_KEY_HANDLE_INVALID     = 0x000000F0UL;
1119 enum CKR_UNWRAPPING_KEY_SIZE_RANGE         = 0x000000F1UL;
1120 enum CKR_UNWRAPPING_KEY_TYPE_INCONSISTENT  = 0x000000F2UL;
1121 enum CKR_USER_ALREADY_LOGGED_IN            = 0x00000100UL;
1122 enum CKR_USER_NOT_LOGGED_IN                = 0x00000101UL;
1123 enum CKR_USER_PIN_NOT_INITIALIZED          = 0x00000102UL;
1124 enum CKR_USER_TYPE_INVALID                 = 0x00000103UL;
1125 
1126 enum CKR_USER_ANOTHER_ALREADY_LOGGED_IN    = 0x00000104UL;
1127 enum CKR_USER_TOO_MANY_TYPES               = 0x00000105UL;
1128 
1129 enum CKR_WRAPPED_KEY_INVALID               = 0x00000110UL;
1130 enum CKR_WRAPPED_KEY_LEN_RANGE             = 0x00000112UL;
1131 enum CKR_WRAPPING_KEY_HANDLE_INVALID       = 0x00000113UL;
1132 enum CKR_WRAPPING_KEY_SIZE_RANGE           = 0x00000114UL;
1133 enum CKR_WRAPPING_KEY_TYPE_INCONSISTENT    = 0x00000115UL;
1134 enum CKR_RANDOM_SEED_NOT_SUPPORTED         = 0x00000120UL;
1135 
1136 enum CKR_RANDOM_NO_RNG                     = 0x00000121UL;
1137 
1138 enum CKR_DOMAIN_PARAMS_INVALID             = 0x00000130UL;
1139 
1140 enum CKR_CURVE_NOT_SUPPORTED               = 0x00000140UL;
1141 
1142 enum CKR_BUFFER_TOO_SMALL                  = 0x00000150UL;
1143 enum CKR_SAVED_STATE_INVALID               = 0x00000160UL;
1144 enum CKR_INFORMATION_SENSITIVE             = 0x00000170UL;
1145 enum CKR_STATE_UNSAVEABLE                  = 0x00000180UL;
1146 
1147 enum CKR_CRYPTOKI_NOT_INITIALIZED          = 0x00000190UL;
1148 enum CKR_CRYPTOKI_ALREADY_INITIALIZED      = 0x00000191UL;
1149 enum CKR_MUTEX_BAD                         = 0x000001A0UL;
1150 enum CKR_MUTEX_NOT_LOCKED                  = 0x000001A1UL;
1151 
1152 enum CKR_NEW_PIN_MODE                      = 0x000001B0UL;
1153 enum CKR_NEXT_OTP                          = 0x000001B1UL;
1154 
1155 enum CKR_EXCEEDED_MAX_ITERATIONS           = 0x000001B5UL;
1156 enum CKR_FIPS_SELF_TEST_FAILED             = 0x000001B6UL;
1157 enum CKR_LIBRARY_LOAD_FAILED               = 0x000001B7UL;
1158 enum CKR_PIN_TOO_WEAK                      = 0x000001B8UL;
1159 enum CKR_PUBLIC_KEY_INVALID                = 0x000001B9UL;
1160 
1161 enum CKR_FUNCTION_REJECTED                 = 0x00000200UL;
1162 
1163 enum CKR_VENDOR_DEFINED                    = 0x80000000UL;
1164 
1165 
1166 /* CK_NOTIFY is an application callback that processes events */
1167 alias  CK_NOTIFY = CK_RV function(
1168   CK_SESSION_HANDLE hSession,     /* the session's handle */
1169   CK_NOTIFICATION   event,
1170   CK_VOID_PTR       pApplication  /* passed to C_OpenSession */
1171 );
1172 
1173 
1174 /* CK_FUNCTION_LIST is a structure holding a Cryptoki spec
1175  * version and pointers of appropriate types to all the
1176  * Cryptoki functions
1177  */
1178 //typedef struct CK_FUNCTION_LIST CK_FUNCTION_LIST;
1179 
1180 alias CK_FUNCTION_LIST * CK_FUNCTION_LIST_PTR;
1181 
1182 alias CK_FUNCTION_LIST_PTR * CK_FUNCTION_LIST_PTR_PTR;
1183 
1184 
1185 /* CK_CREATEMUTEX is an application callback for creating a
1186  * mutex object
1187  */
1188 alias  CK_CREATEMUTEX = CK_RV function(
1189   CK_VOID_PTR_PTR ppMutex  /* location to receive ptr to mutex */
1190 );
1191 
1192 
1193 /* CK_DESTROYMUTEX is an application callback for destroying a
1194  * mutex object
1195  */
1196 alias  CK_DESTROYMUTEX = CK_RV function(
1197   CK_VOID_PTR pMutex  /* pointer to mutex */
1198 );
1199 
1200 
1201 /* CK_LOCKMUTEX is an application callback for locking a mutex */
1202 alias  CK_LOCKMUTEX = CK_RV function(
1203   CK_VOID_PTR pMutex  /* pointer to mutex */
1204 );
1205 
1206 
1207 /* CK_UNLOCKMUTEX is an application callback for unlocking a
1208  * mutex
1209  */
1210 alias  CK_UNLOCKMUTEX = CK_RV function(
1211   CK_VOID_PTR pMutex  /* pointer to mutex */
1212 );
1213 
1214 
1215 /* CK_C_INITIALIZE_ARGS provides the optional arguments to
1216  * C_Initialize
1217  */
1218 struct CK_C_INITIALIZE_ARGS {
1219   CK_CREATEMUTEX CreateMutex;
1220   CK_DESTROYMUTEX DestroyMutex;
1221   CK_LOCKMUTEX LockMutex;
1222   CK_UNLOCKMUTEX UnlockMutex;
1223   CK_FLAGS flags;
1224   CK_VOID_PTR pReserved;
1225 }
1226 
1227 /* flags: bit flags that provide capabilities of the slot
1228  *      Bit Flag                           Mask       Meaning
1229  */
1230 enum CKF_LIBRARY_CANT_CREATE_OS_THREADS = 0x00000001UL;
1231 enum CKF_OS_LOCKING_OK                  = 0x00000002UL;
1232 
1233 alias CK_C_INITIALIZE_ARGS * CK_C_INITIALIZE_ARGS_PTR;
1234 
1235 
1236 /* additional flags for parameters to functions */
1237 
1238 /* CKF_DONT_BLOCK is for the function C_WaitForSlotEvent */
1239 enum CKF_DONT_BLOCK     = 1;
1240 
1241 /* CK_RSA_PKCS_MGF_TYPE  is used to indicate the Message
1242  * Generation Function (MGF) applied to a message block when
1243  * formatting a message block for the PKCS #1 OAEP encryption
1244  * scheme.
1245  */
1246 alias CK_ULONG  CK_RSA_PKCS_MGF_TYPE;
1247 
1248 alias CK_RSA_PKCS_MGF_TYPE *  CK_RSA_PKCS_MGF_TYPE_PTR;
1249 
1250 /* The following MGFs are defined */
1251 enum CKG_MGF1_SHA1         = 0x00000001UL;
1252 enum CKG_MGF1_SHA256       = 0x00000002UL;
1253 enum CKG_MGF1_SHA384       = 0x00000003UL;
1254 enum CKG_MGF1_SHA512       = 0x00000004UL;
1255 enum CKG_MGF1_SHA224       = 0x00000005UL;
1256 
1257 /* CK_RSA_PKCS_OAEP_SOURCE_TYPE  is used to indicate the source
1258  * of the encoding parameter when formatting a message block
1259  * for the PKCS #1 OAEP encryption scheme.
1260  */
1261 alias CK_ULONG  CK_RSA_PKCS_OAEP_SOURCE_TYPE;
1262 
1263 alias CK_RSA_PKCS_OAEP_SOURCE_TYPE *  CK_RSA_PKCS_OAEP_SOURCE_TYPE_PTR;
1264 
1265 /* The following encoding parameter sources are defined */
1266 enum CKZ_DATA_SPECIFIED    = 0x00000001UL;
1267 
1268 /* CK_RSA_PKCS_OAEP_PARAMS provides the parameters to the
1269  * CKM_RSA_PKCS_OAEP mechanism.
1270  */
1271 struct CK_RSA_PKCS_OAEP_PARAMS {
1272         CK_MECHANISM_TYPE hashAlg;
1273         CK_RSA_PKCS_MGF_TYPE mgf;
1274         CK_RSA_PKCS_OAEP_SOURCE_TYPE source;
1275         CK_VOID_PTR pSourceData;
1276         CK_ULONG ulSourceDataLen;
1277 }
1278 
1279 alias CK_RSA_PKCS_OAEP_PARAMS * CK_RSA_PKCS_OAEP_PARAMS_PTR;
1280 
1281 /* CK_RSA_PKCS_PSS_PARAMS provides the parameters to the
1282  * CKM_RSA_PKCS_PSS mechanism(s).
1283  */
1284 struct CK_RSA_PKCS_PSS_PARAMS {
1285         CK_MECHANISM_TYPE    hashAlg;
1286         CK_RSA_PKCS_MGF_TYPE mgf;
1287         CK_ULONG             sLen;
1288 }
1289 
1290 alias CK_RSA_PKCS_PSS_PARAMS * CK_RSA_PKCS_PSS_PARAMS_PTR;
1291 
1292 alias CK_ULONG CK_EC_KDF_TYPE;
1293 
1294 /* The following EC Key Derivation Functions are defined */
1295 enum CKD_NULL                 = 0x00000001UL;
1296 enum CKD_SHA1_KDF             = 0x00000002UL;
1297 
1298 /* The following X9.42 DH key derivation functions are defined */
1299 enum CKD_SHA1_KDF_ASN1        = 0x00000003UL;
1300 enum CKD_SHA1_KDF_CONCATENATE = 0x00000004UL;
1301 enum CKD_SHA224_KDF           = 0x00000005UL;
1302 enum CKD_SHA256_KDF           = 0x00000006UL;
1303 enum CKD_SHA384_KDF           = 0x00000007UL;
1304 enum CKD_SHA512_KDF           = 0x00000008UL;
1305 enum CKD_CPDIVERSIFY_KDF      = 0x00000009UL;
1306 
1307 
1308 /* CK_ECDH1_DERIVE_PARAMS provides the parameters to the
1309  * CKM_ECDH1_DERIVE and CKM_ECDH1_COFACTOR_DERIVE mechanisms,
1310  * where each party contributes one key pair.
1311  */
1312 struct CK_ECDH1_DERIVE_PARAMS {
1313   CK_EC_KDF_TYPE kdf;
1314   CK_ULONG ulSharedDataLen;
1315   CK_BYTE_PTR pSharedData;
1316   CK_ULONG ulPublicDataLen;
1317   CK_BYTE_PTR pPublicData;
1318 }
1319 
1320 alias CK_ECDH1_DERIVE_PARAMS * CK_ECDH1_DERIVE_PARAMS_PTR;
1321 
1322 /*
1323  * CK_ECDH2_DERIVE_PARAMS provides the parameters to the
1324  * CKM_ECMQV_DERIVE mechanism, where each party contributes two key pairs.
1325  */
1326 struct CK_ECDH2_DERIVE_PARAMS {
1327   CK_EC_KDF_TYPE kdf;
1328   CK_ULONG ulSharedDataLen;
1329   CK_BYTE_PTR pSharedData;
1330   CK_ULONG ulPublicDataLen;
1331   CK_BYTE_PTR pPublicData;
1332   CK_ULONG ulPrivateDataLen;
1333   CK_OBJECT_HANDLE hPrivateData;
1334   CK_ULONG ulPublicDataLen2;
1335   CK_BYTE_PTR pPublicData2;
1336 }
1337 
1338 alias CK_ECDH2_DERIVE_PARAMS * CK_ECDH2_DERIVE_PARAMS_PTR;
1339 
1340 struct CK_ECMQV_DERIVE_PARAMS {
1341   CK_EC_KDF_TYPE kdf;
1342   CK_ULONG ulSharedDataLen;
1343   CK_BYTE_PTR pSharedData;
1344   CK_ULONG ulPublicDataLen;
1345   CK_BYTE_PTR pPublicData;
1346   CK_ULONG ulPrivateDataLen;
1347   CK_OBJECT_HANDLE hPrivateData;
1348   CK_ULONG ulPublicDataLen2;
1349   CK_BYTE_PTR pPublicData2;
1350   CK_OBJECT_HANDLE publicKey;
1351 }
1352 
1353 alias CK_ECMQV_DERIVE_PARAMS * CK_ECMQV_DERIVE_PARAMS_PTR;
1354 
1355 /* Typedefs and defines for the CKM_X9_42_DH_KEY_PAIR_GEN and the
1356  * CKM_X9_42_DH_PARAMETER_GEN mechanisms
1357  */
1358 alias CK_ULONG CK_X9_42_DH_KDF_TYPE;
1359 alias CK_X9_42_DH_KDF_TYPE * CK_X9_42_DH_KDF_TYPE_PTR;
1360 
1361 /* CK_X9_42_DH1_DERIVE_PARAMS provides the parameters to the
1362  * CKM_X9_42_DH_DERIVE key derivation mechanism, where each party
1363  * contributes one key pair
1364  */
1365 struct CK_X9_42_DH1_DERIVE_PARAMS {
1366   CK_X9_42_DH_KDF_TYPE kdf;
1367   CK_ULONG ulOtherInfoLen;
1368   CK_BYTE_PTR pOtherInfo;
1369   CK_ULONG ulPublicDataLen;
1370   CK_BYTE_PTR pPublicData;
1371 }
1372 
1373 alias CK_X9_42_DH1_DERIVE_PARAMS * CK_X9_42_DH1_DERIVE_PARAMS_PTR;
1374 
1375 /* CK_X9_42_DH2_DERIVE_PARAMS provides the parameters to the
1376  * CKM_X9_42_DH_HYBRID_DERIVE and CKM_X9_42_MQV_DERIVE key derivation
1377  * mechanisms, where each party contributes two key pairs
1378  */
1379 struct CK_X9_42_DH2_DERIVE_PARAMS {
1380   CK_X9_42_DH_KDF_TYPE kdf;
1381   CK_ULONG ulOtherInfoLen;
1382   CK_BYTE_PTR pOtherInfo;
1383   CK_ULONG ulPublicDataLen;
1384   CK_BYTE_PTR pPublicData;
1385   CK_ULONG ulPrivateDataLen;
1386   CK_OBJECT_HANDLE hPrivateData;
1387   CK_ULONG ulPublicDataLen2;
1388   CK_BYTE_PTR pPublicData2;
1389 }
1390 
1391 alias CK_X9_42_DH2_DERIVE_PARAMS * CK_X9_42_DH2_DERIVE_PARAMS_PTR;
1392 
1393 struct CK_X9_42_MQV_DERIVE_PARAMS {
1394   CK_X9_42_DH_KDF_TYPE kdf;
1395   CK_ULONG ulOtherInfoLen;
1396   CK_BYTE_PTR pOtherInfo;
1397   CK_ULONG ulPublicDataLen;
1398   CK_BYTE_PTR pPublicData;
1399   CK_ULONG ulPrivateDataLen;
1400   CK_OBJECT_HANDLE hPrivateData;
1401   CK_ULONG ulPublicDataLen2;
1402   CK_BYTE_PTR pPublicData2;
1403   CK_OBJECT_HANDLE publicKey;
1404 }
1405 
1406 alias CK_X9_42_MQV_DERIVE_PARAMS * CK_X9_42_MQV_DERIVE_PARAMS_PTR;
1407 
1408 /* CK_KEA_DERIVE_PARAMS provides the parameters to the
1409  * CKM_KEA_DERIVE mechanism
1410  */
1411 struct CK_KEA_DERIVE_PARAMS {
1412   CK_BBOOL      isSender;
1413   CK_ULONG      ulRandomLen;
1414   CK_BYTE_PTR   pRandomA;
1415   CK_BYTE_PTR   pRandomB;
1416   CK_ULONG      ulPublicDataLen;
1417   CK_BYTE_PTR   pPublicData;
1418 }
1419 
1420 alias CK_KEA_DERIVE_PARAMS * CK_KEA_DERIVE_PARAMS_PTR;
1421 
1422 
1423 /* CK_RC2_PARAMS provides the parameters to the CKM_RC2_ECB and
1424  * CKM_RC2_MAC mechanisms.  An instance of CK_RC2_PARAMS just
1425  * holds the effective keysize
1426  */
1427 alias CK_ULONG          CK_RC2_PARAMS;
1428 
1429 alias CK_RC2_PARAMS * CK_RC2_PARAMS_PTR;
1430 
1431 
1432 /* CK_RC2_CBC_PARAMS provides the parameters to the CKM_RC2_CBC
1433  * mechanism
1434  */
1435 struct CK_RC2_CBC_PARAMS {
1436   CK_ULONG         ulEffectiveBits;  /* effective bits (1-1024) */
1437   CK_BYTE[8]       iv;               /* IV for CBC mode */
1438 }
1439 
1440 alias CK_RC2_CBC_PARAMS * CK_RC2_CBC_PARAMS_PTR;
1441 
1442 
1443 /* CK_RC2_MAC_GENERAL_PARAMS provides the parameters for the
1444  * CKM_RC2_MAC_GENERAL mechanism
1445  */
1446 struct CK_RC2_MAC_GENERAL_PARAMS {
1447   CK_ULONG      ulEffectiveBits;  /* effective bits (1-1024) */
1448   CK_ULONG      ulMacLength;      /* Length of MAC in bytes */
1449 }
1450 
1451 alias CK_RC2_MAC_GENERAL_PARAMS *  CK_RC2_MAC_GENERAL_PARAMS_PTR;
1452 
1453 
1454 /* CK_RC5_PARAMS provides the parameters to the CKM_RC5_ECB and
1455  * CKM_RC5_MAC mechanisms
1456  */
1457 struct CK_RC5_PARAMS {
1458   CK_ULONG      ulWordsize;  /* wordsize in bits */
1459   CK_ULONG      ulRounds;    /* number of rounds */
1460 }
1461 
1462 alias CK_RC5_PARAMS * CK_RC5_PARAMS_PTR;
1463 
1464 
1465 /* CK_RC5_CBC_PARAMS provides the parameters to the CKM_RC5_CBC
1466  * mechanism
1467  */
1468 struct CK_RC5_CBC_PARAMS {
1469   CK_ULONG      ulWordsize;  /* wordsize in bits */
1470   CK_ULONG      ulRounds;    /* number of rounds */
1471   CK_BYTE_PTR   pIv;         /* pointer to IV */
1472   CK_ULONG      ulIvLen;     /* length of IV in bytes */
1473 }
1474 
1475 alias CK_RC5_CBC_PARAMS * CK_RC5_CBC_PARAMS_PTR;
1476 
1477 
1478 /* CK_RC5_MAC_GENERAL_PARAMS provides the parameters for the
1479  * CKM_RC5_MAC_GENERAL mechanism
1480  */
1481 struct CK_RC5_MAC_GENERAL_PARAMS {
1482   CK_ULONG      ulWordsize;   /* wordsize in bits */
1483   CK_ULONG      ulRounds;     /* number of rounds */
1484   CK_ULONG      ulMacLength;  /* Length of MAC in bytes */
1485 }
1486 
1487 alias CK_RC5_MAC_GENERAL_PARAMS *  CK_RC5_MAC_GENERAL_PARAMS_PTR;
1488 
1489 /* CK_MAC_GENERAL_PARAMS provides the parameters to most block
1490  * ciphers' MAC_GENERAL mechanisms.  Its value is the length of
1491  * the MAC
1492  */
1493 alias CK_ULONG          CK_MAC_GENERAL_PARAMS;
1494 
1495 alias CK_MAC_GENERAL_PARAMS * CK_MAC_GENERAL_PARAMS_PTR;
1496 
1497 struct CK_DES_CBC_ENCRYPT_DATA_PARAMS {
1498   CK_BYTE[8]   iv;
1499   CK_BYTE_PTR  pData;
1500   CK_ULONG     length;
1501 }
1502 
1503 alias CK_DES_CBC_ENCRYPT_DATA_PARAMS * CK_DES_CBC_ENCRYPT_DATA_PARAMS_PTR;
1504 
1505 struct CK_AES_CBC_ENCRYPT_DATA_PARAMS {
1506   CK_BYTE[16]  iv;
1507   CK_BYTE_PTR  pData;
1508   CK_ULONG     length;
1509 }
1510 
1511 alias CK_AES_CBC_ENCRYPT_DATA_PARAMS * CK_AES_CBC_ENCRYPT_DATA_PARAMS_PTR;
1512 
1513 /* CK_SKIPJACK_PRIVATE_WRAP_PARAMS provides the parameters to the
1514  * CKM_SKIPJACK_PRIVATE_WRAP mechanism
1515  */
1516 struct CK_SKIPJACK_PRIVATE_WRAP_PARAMS {
1517   CK_ULONG      ulPasswordLen;
1518   CK_BYTE_PTR   pPassword;
1519   CK_ULONG      ulPublicDataLen;
1520   CK_BYTE_PTR   pPublicData;
1521   CK_ULONG      ulPAndGLen;
1522   CK_ULONG      ulQLen;
1523   CK_ULONG      ulRandomLen;
1524   CK_BYTE_PTR   pRandomA;
1525   CK_BYTE_PTR   pPrimeP;
1526   CK_BYTE_PTR   pBaseG;
1527   CK_BYTE_PTR   pSubprimeQ;
1528 }
1529 
1530 alias CK_SKIPJACK_PRIVATE_WRAP_PARAMS *  CK_SKIPJACK_PRIVATE_WRAP_PARAMS_PTR;
1531 
1532 
1533 /* CK_SKIPJACK_RELAYX_PARAMS provides the parameters to the
1534  * CKM_SKIPJACK_RELAYX mechanism
1535  */
1536 struct CK_SKIPJACK_RELAYX_PARAMS {
1537   CK_ULONG      ulOldWrappedXLen;
1538   CK_BYTE_PTR   pOldWrappedX;
1539   CK_ULONG      ulOldPasswordLen;
1540   CK_BYTE_PTR   pOldPassword;
1541   CK_ULONG      ulOldPublicDataLen;
1542   CK_BYTE_PTR   pOldPublicData;
1543   CK_ULONG      ulOldRandomLen;
1544   CK_BYTE_PTR   pOldRandomA;
1545   CK_ULONG      ulNewPasswordLen;
1546   CK_BYTE_PTR   pNewPassword;
1547   CK_ULONG      ulNewPublicDataLen;
1548   CK_BYTE_PTR   pNewPublicData;
1549   CK_ULONG      ulNewRandomLen;
1550   CK_BYTE_PTR   pNewRandomA;
1551 }
1552 
1553 alias CK_SKIPJACK_RELAYX_PARAMS *  CK_SKIPJACK_RELAYX_PARAMS_PTR;
1554 
1555 
1556 struct CK_PBE_PARAMS {
1557   CK_BYTE_PTR      pInitVector;
1558   CK_UTF8CHAR_PTR  pPassword;
1559   CK_ULONG         ulPasswordLen;
1560   CK_BYTE_PTR      pSalt;
1561   CK_ULONG         ulSaltLen;
1562   CK_ULONG         ulIteration;
1563 }
1564 
1565 alias CK_PBE_PARAMS * CK_PBE_PARAMS_PTR;
1566 
1567 
1568 /* CK_KEY_WRAP_SET_OAEP_PARAMS provides the parameters to the
1569  * CKM_KEY_WRAP_SET_OAEP mechanism
1570  */
1571 struct CK_KEY_WRAP_SET_OAEP_PARAMS {
1572   CK_BYTE       bBC;     /* block contents byte */
1573   CK_BYTE_PTR   pX;      /* extra data */
1574   CK_ULONG      ulXLen;  /* length of extra data in bytes */
1575 }
1576 
1577 alias CK_KEY_WRAP_SET_OAEP_PARAMS * CK_KEY_WRAP_SET_OAEP_PARAMS_PTR;
1578 
1579 struct CK_SSL3_RANDOM_DATA {
1580   CK_BYTE_PTR  pClientRandom;
1581   CK_ULONG     ulClientRandomLen;
1582   CK_BYTE_PTR  pServerRandom;
1583   CK_ULONG     ulServerRandomLen;
1584 }
1585 
1586 
1587 struct CK_SSL3_MASTER_KEY_DERIVE_PARAMS {
1588   CK_SSL3_RANDOM_DATA RandomInfo;
1589   CK_VERSION_PTR pVersion;
1590 }
1591 
1592 alias CK_SSL3_MASTER_KEY_DERIVE_PARAMS *  CK_SSL3_MASTER_KEY_DERIVE_PARAMS_PTR;
1593 
1594 struct CK_SSL3_KEY_MAT_OUT {
1595   CK_OBJECT_HANDLE hClientMacSecret;
1596   CK_OBJECT_HANDLE hServerMacSecret;
1597   CK_OBJECT_HANDLE hClientKey;
1598   CK_OBJECT_HANDLE hServerKey;
1599   CK_BYTE_PTR      pIVClient;
1600   CK_BYTE_PTR      pIVServer;
1601 }
1602 
1603 alias CK_SSL3_KEY_MAT_OUT * CK_SSL3_KEY_MAT_OUT_PTR;
1604 
1605 
1606 struct CK_SSL3_KEY_MAT_PARAMS {
1607   CK_ULONG                ulMacSizeInBits;
1608   CK_ULONG                ulKeySizeInBits;
1609   CK_ULONG                ulIVSizeInBits;
1610   CK_BBOOL                bIsExport;
1611   CK_SSL3_RANDOM_DATA     RandomInfo;
1612   CK_SSL3_KEY_MAT_OUT_PTR pReturnedKeyMaterial;
1613 }
1614 
1615 alias CK_SSL3_KEY_MAT_PARAMS * CK_SSL3_KEY_MAT_PARAMS_PTR;
1616 
1617 struct CK_TLS_PRF_PARAMS {
1618   CK_BYTE_PTR  pSeed;
1619   CK_ULONG     ulSeedLen;
1620   CK_BYTE_PTR  pLabel;
1621   CK_ULONG     ulLabelLen;
1622   CK_BYTE_PTR  pOutput;
1623   CK_ULONG_PTR pulOutputLen;
1624 }
1625 
1626 alias CK_TLS_PRF_PARAMS * CK_TLS_PRF_PARAMS_PTR;
1627 
1628 struct CK_WTLS_RANDOM_DATA {
1629   CK_BYTE_PTR pClientRandom;
1630   CK_ULONG    ulClientRandomLen;
1631   CK_BYTE_PTR pServerRandom;
1632   CK_ULONG    ulServerRandomLen;
1633 }
1634 
1635 alias CK_WTLS_RANDOM_DATA * CK_WTLS_RANDOM_DATA_PTR;
1636 
1637 struct CK_WTLS_MASTER_KEY_DERIVE_PARAMS {
1638   CK_MECHANISM_TYPE   DigestMechanism;
1639   CK_WTLS_RANDOM_DATA RandomInfo;
1640   CK_BYTE_PTR         pVersion;
1641 }
1642 
1643 alias CK_WTLS_MASTER_KEY_DERIVE_PARAMS *  CK_WTLS_MASTER_KEY_DERIVE_PARAMS_PTR;
1644 
1645 struct CK_WTLS_PRF_PARAMS {
1646   CK_MECHANISM_TYPE DigestMechanism;
1647   CK_BYTE_PTR       pSeed;
1648   CK_ULONG          ulSeedLen;
1649   CK_BYTE_PTR       pLabel;
1650   CK_ULONG          ulLabelLen;
1651   CK_BYTE_PTR       pOutput;
1652   CK_ULONG_PTR      pulOutputLen;
1653 }
1654 
1655 alias CK_WTLS_PRF_PARAMS * CK_WTLS_PRF_PARAMS_PTR;
1656 
1657 struct CK_WTLS_KEY_MAT_OUT {
1658   CK_OBJECT_HANDLE hMacSecret;
1659   CK_OBJECT_HANDLE hKey;
1660   CK_BYTE_PTR      pIV;
1661 }
1662 
1663 alias CK_WTLS_KEY_MAT_OUT * CK_WTLS_KEY_MAT_OUT_PTR;
1664 
1665 struct CK_WTLS_KEY_MAT_PARAMS {
1666   CK_MECHANISM_TYPE       DigestMechanism;
1667   CK_ULONG                ulMacSizeInBits;
1668   CK_ULONG                ulKeySizeInBits;
1669   CK_ULONG                ulIVSizeInBits;
1670   CK_ULONG                ulSequenceNumber;
1671   CK_BBOOL                bIsExport;
1672   CK_WTLS_RANDOM_DATA     RandomInfo;
1673   CK_WTLS_KEY_MAT_OUT_PTR pReturnedKeyMaterial;
1674 }
1675 
1676 alias CK_WTLS_KEY_MAT_PARAMS * CK_WTLS_KEY_MAT_PARAMS_PTR;
1677 
1678 struct CK_CMS_SIG_PARAMS {
1679   CK_OBJECT_HANDLE      certificateHandle;
1680   CK_MECHANISM_PTR      pSigningMechanism;
1681   CK_MECHANISM_PTR      pDigestMechanism;
1682   CK_UTF8CHAR_PTR       pContentType;
1683   CK_BYTE_PTR           pRequestedAttributes;
1684   CK_ULONG              ulRequestedAttributesLen;
1685   CK_BYTE_PTR           pRequiredAttributes;
1686   CK_ULONG              ulRequiredAttributesLen;
1687 }
1688 
1689 alias CK_CMS_SIG_PARAMS * CK_CMS_SIG_PARAMS_PTR;
1690 
1691 struct CK_KEY_DERIVATION_STRING_DATA {
1692   CK_BYTE_PTR pData;
1693   CK_ULONG    ulLen;
1694 }
1695 
1696 alias CK_KEY_DERIVATION_STRING_DATA *  CK_KEY_DERIVATION_STRING_DATA_PTR;
1697 
1698 
1699 /* The CK_EXTRACT_PARAMS is used for the
1700  * CKM_EXTRACT_KEY_FROM_KEY mechanism.  It specifies which bit
1701  * of the base key should be used as the first bit of the
1702  * derived key
1703  */
1704 alias CK_ULONG CK_EXTRACT_PARAMS;
1705 
1706 alias CK_EXTRACT_PARAMS * CK_EXTRACT_PARAMS_PTR;
1707 
1708 /* CK_PKCS5_PBKD2_PSEUDO_RANDOM_FUNCTION_TYPE is used to
1709  * indicate the Pseudo-Random Function (PRF) used to generate
1710  * key bits using PKCS #5 PBKDF2.
1711  */
1712 alias CK_ULONG CK_PKCS5_PBKD2_PSEUDO_RANDOM_FUNCTION_TYPE;
1713 
1714 alias CK_PKCS5_PBKD2_PSEUDO_RANDOM_FUNCTION_TYPE *  CK_PKCS5_PBKD2_PSEUDO_RANDOM_FUNCTION_TYPE_PTR;
1715 
1716 enum CKP_PKCS5_PBKD2_HMAC_SHA1          = 0x00000001UL;
1717 enum CKP_PKCS5_PBKD2_HMAC_GOSTR3411     = 0x00000002UL;
1718 enum CKP_PKCS5_PBKD2_HMAC_SHA224        = 0x00000003UL;
1719 enum CKP_PKCS5_PBKD2_HMAC_SHA256        = 0x00000004UL;
1720 enum CKP_PKCS5_PBKD2_HMAC_SHA384        = 0x00000005UL;
1721 enum CKP_PKCS5_PBKD2_HMAC_SHA512        = 0x00000006UL;
1722 enum CKP_PKCS5_PBKD2_HMAC_SHA512_224    = 0x00000007UL;
1723 enum CKP_PKCS5_PBKD2_HMAC_SHA512_256    = 0x00000008UL;
1724 
1725 /* CK_PKCS5_PBKDF2_SALT_SOURCE_TYPE is used to indicate the
1726  * source of the salt value when deriving a key using PKCS #5
1727  * PBKDF2.
1728  */
1729 alias CK_ULONG CK_PKCS5_PBKDF2_SALT_SOURCE_TYPE;
1730 
1731 alias CK_PKCS5_PBKDF2_SALT_SOURCE_TYPE *  CK_PKCS5_PBKDF2_SALT_SOURCE_TYPE_PTR;
1732 
1733 /* The following salt value sources are defined in PKCS #5 v2.0. */
1734 enum CKZ_SALT_SPECIFIED        = 0x00000001UL;
1735 
1736 /* CK_PKCS5_PBKD2_PARAMS is a structure that provides the
1737  * parameters to the CKM_PKCS5_PBKD2 mechanism.
1738  */
1739 struct CK_PKCS5_PBKD2_PARAMS {
1740         CK_PKCS5_PBKDF2_SALT_SOURCE_TYPE           saltSource;
1741         CK_VOID_PTR                                pSaltSourceData;
1742         CK_ULONG                                   ulSaltSourceDataLen;
1743         CK_ULONG                                   iterations;
1744         CK_PKCS5_PBKD2_PSEUDO_RANDOM_FUNCTION_TYPE prf;
1745         CK_VOID_PTR                                pPrfData;
1746         CK_ULONG                                   ulPrfDataLen;
1747         CK_UTF8CHAR_PTR                            pPassword;
1748         CK_ULONG_PTR                               ulPasswordLen;
1749 }
1750 
1751 alias CK_PKCS5_PBKD2_PARAMS * CK_PKCS5_PBKD2_PARAMS_PTR;
1752 
1753 /* CK_PKCS5_PBKD2_PARAMS2 is a corrected version of the CK_PKCS5_PBKD2_PARAMS
1754  * structure that provides the parameters to the CKM_PKCS5_PBKD2 mechanism
1755  * noting that the ulPasswordLen field is a CK_ULONG and not a CK_ULONG_PTR.
1756  */
1757 struct CK_PKCS5_PBKD2_PARAMS2 {
1758         CK_PKCS5_PBKDF2_SALT_SOURCE_TYPE saltSource;
1759         CK_VOID_PTR pSaltSourceData;
1760         CK_ULONG ulSaltSourceDataLen;
1761         CK_ULONG iterations;
1762         CK_PKCS5_PBKD2_PSEUDO_RANDOM_FUNCTION_TYPE prf;
1763         CK_VOID_PTR pPrfData;
1764         CK_ULONG ulPrfDataLen;
1765         CK_UTF8CHAR_PTR pPassword;
1766         CK_ULONG ulPasswordLen;
1767 }
1768 
1769 alias CK_PKCS5_PBKD2_PARAMS2 * CK_PKCS5_PBKD2_PARAMS2_PTR;
1770 
1771 alias CK_ULONG CK_OTP_PARAM_TYPE;
1772 alias CK_OTP_PARAM_TYPE CK_PARAM_TYPE; /* backward compatibility */
1773 
1774 struct CK_OTP_PARAM {
1775     CK_OTP_PARAM_TYPE type;
1776     CK_VOID_PTR pValue;
1777     CK_ULONG ulValueLen;
1778 }
1779 
1780 alias CK_OTP_PARAM * CK_OTP_PARAM_PTR;
1781 
1782 struct CK_OTP_PARAMS {
1783     CK_OTP_PARAM_PTR pParams;
1784     CK_ULONG ulCount;
1785 }
1786 
1787 alias CK_OTP_PARAMS * CK_OTP_PARAMS_PTR;
1788 
1789 struct CK_OTP_SIGNATURE_INFO {
1790     CK_OTP_PARAM_PTR pParams;
1791     CK_ULONG ulCount;
1792 }
1793 
1794 alias CK_OTP_SIGNATURE_INFO * CK_OTP_SIGNATURE_INFO_PTR;
1795 
1796 enum CK_OTP_VALUE          = 0UL;
1797 enum CK_OTP_PIN            = 1UL;
1798 enum CK_OTP_CHALLENGE      = 2UL;
1799 enum CK_OTP_TIME           = 3UL;
1800 enum CK_OTP_COUNTER        = 4UL;
1801 enum CK_OTP_FLAGS          = 5UL;
1802 enum CK_OTP_OUTPUT_LENGTH  = 6UL;
1803 enum CK_OTP_OUTPUT_FORMAT  = 7UL;
1804 
1805 enum CKF_NEXT_OTP          = 0x00000001UL;
1806 enum CKF_EXCLUDE_TIME      = 0x00000002UL;
1807 enum CKF_EXCLUDE_COUNTER   = 0x00000004UL;
1808 enum CKF_EXCLUDE_CHALLENGE = 0x00000008UL;
1809 enum CKF_EXCLUDE_PIN       = 0x00000010UL;
1810 enum CKF_USER_FRIENDLY_OTP = 0x00000020UL;
1811 
1812 struct CK_KIP_PARAMS {
1813     CK_MECHANISM_PTR  pMechanism;
1814     CK_OBJECT_HANDLE  hKey;
1815     CK_BYTE_PTR       pSeed;
1816     CK_ULONG          ulSeedLen;
1817 }
1818 
1819 alias CK_KIP_PARAMS * CK_KIP_PARAMS_PTR;
1820 
1821 struct CK_AES_CTR_PARAMS {
1822     CK_ULONG     ulCounterBits;
1823     CK_BYTE[16]  cb;
1824 }
1825 
1826 alias CK_AES_CTR_PARAMS * CK_AES_CTR_PARAMS_PTR;
1827 
1828 struct CK_GCM_PARAMS {
1829     CK_BYTE_PTR       pIv;
1830     CK_ULONG          ulIvLen;
1831     CK_ULONG          ulIvBits;
1832     CK_BYTE_PTR       pAAD;
1833     CK_ULONG          ulAADLen;
1834     CK_ULONG          ulTagBits;
1835 }
1836 
1837 alias CK_GCM_PARAMS * CK_GCM_PARAMS_PTR;
1838 
1839 struct CK_CCM_PARAMS {
1840     CK_ULONG          ulDataLen;
1841     CK_BYTE_PTR       pNonce;
1842     CK_ULONG          ulNonceLen;
1843     CK_BYTE_PTR       pAAD;
1844     CK_ULONG          ulAADLen;
1845     CK_ULONG          ulMACLen;
1846 }
1847 
1848 alias CK_CCM_PARAMS * CK_CCM_PARAMS_PTR;
1849 
1850 /* Deprecated. Use CK_GCM_PARAMS */
1851 struct CK_AES_GCM_PARAMS {
1852   CK_BYTE_PTR pIv;
1853   CK_ULONG ulIvLen;
1854   CK_ULONG ulIvBits;
1855   CK_BYTE_PTR pAAD;
1856   CK_ULONG ulAADLen;
1857   CK_ULONG ulTagBits;
1858 }
1859 
1860 alias CK_AES_GCM_PARAMS * CK_AES_GCM_PARAMS_PTR;
1861 
1862 /* Deprecated. Use CK_CCM_PARAMS */
1863 struct CK_AES_CCM_PARAMS {
1864     CK_ULONG          ulDataLen;
1865     CK_BYTE_PTR       pNonce;
1866     CK_ULONG          ulNonceLen;
1867     CK_BYTE_PTR       pAAD;
1868     CK_ULONG          ulAADLen;
1869     CK_ULONG          ulMACLen;
1870 }
1871 
1872 alias CK_AES_CCM_PARAMS * CK_AES_CCM_PARAMS_PTR;
1873 
1874 struct CK_CAMELLIA_CTR_PARAMS {
1875     CK_ULONG          ulCounterBits;
1876     CK_BYTE[16]       cb;
1877 }
1878 
1879 alias CK_CAMELLIA_CTR_PARAMS * CK_CAMELLIA_CTR_PARAMS_PTR;
1880 
1881 struct CK_CAMELLIA_CBC_ENCRYPT_DATA_PARAMS {
1882     CK_BYTE[16]       iv;
1883     CK_BYTE_PTR       pData;
1884     CK_ULONG          length;
1885 }
1886 
1887 alias CK_CAMELLIA_CBC_ENCRYPT_DATA_PARAMS *  CK_CAMELLIA_CBC_ENCRYPT_DATA_PARAMS_PTR;
1888 
1889 struct CK_ARIA_CBC_ENCRYPT_DATA_PARAMS {
1890     CK_BYTE[16]       iv;
1891     CK_BYTE_PTR       pData;
1892     CK_ULONG          length;
1893 }
1894 
1895 alias CK_ARIA_CBC_ENCRYPT_DATA_PARAMS *  CK_ARIA_CBC_ENCRYPT_DATA_PARAMS_PTR;
1896 
1897 struct CK_DSA_PARAMETER_GEN_PARAM {
1898     CK_MECHANISM_TYPE  hash;
1899     CK_BYTE_PTR        pSeed;
1900     CK_ULONG           ulSeedLen;
1901     CK_ULONG           ulIndex;
1902 }
1903 
1904 alias CK_DSA_PARAMETER_GEN_PARAM * CK_DSA_PARAMETER_GEN_PARAM_PTR;
1905 
1906 struct CK_ECDH_AES_KEY_WRAP_PARAMS {
1907     CK_ULONG           ulAESKeyBits;
1908     CK_EC_KDF_TYPE     kdf;
1909     CK_ULONG           ulSharedDataLen;
1910     CK_BYTE_PTR        pSharedData;
1911 }
1912 
1913 alias CK_ECDH_AES_KEY_WRAP_PARAMS * CK_ECDH_AES_KEY_WRAP_PARAMS_PTR;
1914 
1915 alias CK_ULONG CK_JAVA_MIDP_SECURITY_DOMAIN;
1916 
1917 alias CK_ULONG CK_CERTIFICATE_CATEGORY;
1918 
1919 struct CK_RSA_AES_KEY_WRAP_PARAMS {
1920     CK_ULONG                      ulAESKeyBits;
1921     CK_RSA_PKCS_OAEP_PARAMS_PTR   pOAEPParams;
1922 }
1923 
1924 alias CK_RSA_AES_KEY_WRAP_PARAMS * CK_RSA_AES_KEY_WRAP_PARAMS_PTR;
1925 
1926 struct CK_TLS12_MASTER_KEY_DERIVE_PARAMS {
1927     CK_SSL3_RANDOM_DATA       RandomInfo;
1928     CK_VERSION_PTR            pVersion;
1929     CK_MECHANISM_TYPE         prfHashMechanism;
1930 }
1931 
1932 alias CK_TLS12_MASTER_KEY_DERIVE_PARAMS *  CK_TLS12_MASTER_KEY_DERIVE_PARAMS_PTR;
1933 
1934 struct CK_TLS12_KEY_MAT_PARAMS {
1935     CK_ULONG                  ulMacSizeInBits;
1936     CK_ULONG                  ulKeySizeInBits;
1937     CK_ULONG                  ulIVSizeInBits;
1938     CK_BBOOL                  bIsExport;
1939     CK_SSL3_RANDOM_DATA       RandomInfo;
1940     CK_SSL3_KEY_MAT_OUT_PTR   pReturnedKeyMaterial;
1941     CK_MECHANISM_TYPE         prfHashMechanism;
1942 }
1943 
1944 alias CK_TLS12_KEY_MAT_PARAMS * CK_TLS12_KEY_MAT_PARAMS_PTR;
1945 
1946 struct CK_TLS_KDF_PARAMS {
1947     CK_MECHANISM_TYPE         prfMechanism;
1948     CK_BYTE_PTR               pLabel;
1949     CK_ULONG                  ulLabelLength;
1950     CK_SSL3_RANDOM_DATA       RandomInfo;
1951     CK_BYTE_PTR               pContextData;
1952     CK_ULONG                  ulContextDataLength;
1953 }
1954 
1955 alias CK_TLS_KDF_PARAMS * CK_TLS_KDF_PARAMS_PTR;
1956 
1957 struct CK_TLS_MAC_PARAMS {
1958     CK_MECHANISM_TYPE         prfHashMechanism;
1959     CK_ULONG                  ulMacLength;
1960     CK_ULONG                  ulServerOrClient;
1961 }
1962 
1963 alias CK_TLS_MAC_PARAMS * CK_TLS_MAC_PARAMS_PTR;
1964 
1965 struct CK_GOSTR3410_DERIVE_PARAMS {
1966     CK_EC_KDF_TYPE            kdf;
1967     CK_BYTE_PTR               pPublicData;
1968     CK_ULONG                  ulPublicDataLen;
1969     CK_BYTE_PTR               pUKM;
1970     CK_ULONG                  ulUKMLen;
1971 }
1972 
1973 alias CK_GOSTR3410_DERIVE_PARAMS * CK_GOSTR3410_DERIVE_PARAMS_PTR;
1974 
1975 struct CK_GOSTR3410_KEY_WRAP_PARAMS {
1976     CK_BYTE_PTR               pWrapOID;
1977     CK_ULONG                  ulWrapOIDLen;
1978     CK_BYTE_PTR               pUKM;
1979     CK_ULONG                  ulUKMLen;
1980     CK_OBJECT_HANDLE          hKey;
1981 }
1982 
1983 alias CK_GOSTR3410_KEY_WRAP_PARAMS * CK_GOSTR3410_KEY_WRAP_PARAMS_PTR;
1984 
1985 struct CK_SEED_CBC_ENCRYPT_DATA_PARAMS {
1986     CK_BYTE[16]               iv;
1987     CK_BYTE_PTR               pData;
1988     CK_ULONG                  length;
1989 }
1990 
1991 alias CK_SEED_CBC_ENCRYPT_DATA_PARAMS *  CK_SEED_CBC_ENCRYPT_DATA_PARAMS_PTR;
1992 
1993 struct CK_FUNCTION_LIST {
1994 	version (Windows) {
1995 		align(1) :
1996 		CK_VERSION  version_;  /* Cryptoki version */
1997 		mixin CK_FUNCTION_LIST_FENTRIES;
1998 	}
1999 	else {
2000 		CK_VERSION  version_;  /* Cryptoki version */
2001 		mixin CK_FUNCTION_LIST_FENTRIES;
2002 	}
2003 }