1262566Sdes/* $OpenBSD: pkcs11.h,v 1.3 2013/11/26 19:15:09 deraadt Exp $ */
2204861Sdes/* pkcs11.h
3204861Sdes   Copyright 2006, 2007 g10 Code GmbH
4204861Sdes   Copyright 2006 Andreas Jellinghaus
5204861Sdes
6204861Sdes   This file is free software; as a special exception the author gives
7204861Sdes   unlimited permission to copy and/or distribute it, with or without
8204861Sdes   modifications, as long as this notice is preserved.
9204861Sdes
10204861Sdes   This file is distributed in the hope that it will be useful, but
11204861Sdes   WITHOUT ANY WARRANTY, to the extent permitted by law; without even
12204861Sdes   the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR
13204861Sdes   PURPOSE.  */
14204861Sdes
15204861Sdes/* Please submit changes back to the Scute project at
16204861Sdes   http://www.scute.org/ (or send them to marcus@g10code.com), so that
17204861Sdes   they can be picked up by other projects from there as well.  */
18204861Sdes
19204861Sdes/* This file is a modified implementation of the PKCS #11 standard by
20204861Sdes   RSA Security Inc.  It is mostly a drop-in replacement, with the
21204861Sdes   following change:
22204861Sdes
23204861Sdes   This header file does not require any macro definitions by the user
24204861Sdes   (like CK_DEFINE_FUNCTION etc).  In fact, it defines those macros
25204861Sdes   for you (if useful, some are missing, let me know if you need
26204861Sdes   more).
27204861Sdes
28204861Sdes   There is an additional API available that does comply better to the
29204861Sdes   GNU coding standard.  It can be switched on by defining
30204861Sdes   CRYPTOKI_GNU before including this header file.  For this, the
31204861Sdes   following changes are made to the specification:
32204861Sdes
33204861Sdes   All structure types are changed to a "struct ck_foo" where CK_FOO
34204861Sdes   is the type name in PKCS #11.
35204861Sdes
36204861Sdes   All non-structure types are changed to ck_foo_t where CK_FOO is the
37204861Sdes   lowercase version of the type name in PKCS #11.  The basic types
38204861Sdes   (CK_ULONG et al.) are removed without substitute.
39204861Sdes
40204861Sdes   All members of structures are modified in the following way: Type
41204861Sdes   indication prefixes are removed, and underscore characters are
42204861Sdes   inserted before words.  Then the result is lowercased.
43204861Sdes
44204861Sdes   Note that function names are still in the original case, as they
45204861Sdes   need for ABI compatibility.
46204861Sdes
47204861Sdes   CK_FALSE, CK_TRUE and NULL_PTR are removed without substitute.  Use
48204861Sdes   <stdbool.h>.
49204861Sdes
50204861Sdes   If CRYPTOKI_COMPAT is defined before including this header file,
51204861Sdes   then none of the API changes above take place, and the API is the
52204861Sdes   one defined by the PKCS #11 standard.  */
53204861Sdes
54204861Sdes#ifndef PKCS11_H
55204861Sdes#define PKCS11_H 1
56204861Sdes
57204861Sdes#if defined(__cplusplus)
58204861Sdesextern "C" {
59204861Sdes#endif
60204861Sdes
61204861Sdes
62204861Sdes/* The version of cryptoki we implement.  The revision is changed with
63204861Sdes   each modification of this file.  If you do not use the "official"
64204861Sdes   version of this file, please consider deleting the revision macro
65204861Sdes   (you may use a macro with a different name to keep track of your
66204861Sdes   versions).  */
67204861Sdes#define CRYPTOKI_VERSION_MAJOR		2
68204861Sdes#define CRYPTOKI_VERSION_MINOR		20
69204861Sdes#define CRYPTOKI_VERSION_REVISION	6
70204861Sdes
71204861Sdes
72204861Sdes/* Compatibility interface is default, unless CRYPTOKI_GNU is
73204861Sdes   given.  */
74204861Sdes#ifndef CRYPTOKI_GNU
75204861Sdes#ifndef CRYPTOKI_COMPAT
76204861Sdes#define CRYPTOKI_COMPAT 1
77204861Sdes#endif
78204861Sdes#endif
79204861Sdes
80204861Sdes/* System dependencies.  */
81204861Sdes
82204861Sdes#if defined(_WIN32) || defined(CRYPTOKI_FORCE_WIN32)
83204861Sdes
84204861Sdes/* There is a matching pop below.  */
85204861Sdes#pragma pack(push, cryptoki, 1)
86204861Sdes
87204861Sdes#ifdef CRYPTOKI_EXPORTS
88204861Sdes#define CK_SPEC __declspec(dllexport)
89204861Sdes#else
90204861Sdes#define CK_SPEC __declspec(dllimport)
91204861Sdes#endif
92204861Sdes
93204861Sdes#else
94204861Sdes
95204861Sdes#define CK_SPEC
96204861Sdes
97204861Sdes#endif
98204861Sdes
99204861Sdes
100204861Sdes#ifdef CRYPTOKI_COMPAT
101204861Sdes  /* If we are in compatibility mode, switch all exposed names to the
102204861Sdes     PKCS #11 variant.  There are corresponding #undefs below.  */
103204861Sdes
104204861Sdes#define ck_flags_t CK_FLAGS
105204861Sdes#define ck_version _CK_VERSION
106204861Sdes
107204861Sdes#define ck_info _CK_INFO
108204861Sdes#define cryptoki_version cryptokiVersion
109204861Sdes#define manufacturer_id manufacturerID
110204861Sdes#define library_description libraryDescription
111204861Sdes#define library_version libraryVersion
112204861Sdes
113204861Sdes#define ck_notification_t CK_NOTIFICATION
114204861Sdes#define ck_slot_id_t CK_SLOT_ID
115204861Sdes
116204861Sdes#define ck_slot_info _CK_SLOT_INFO
117204861Sdes#define slot_description slotDescription
118204861Sdes#define hardware_version hardwareVersion
119204861Sdes#define firmware_version firmwareVersion
120204861Sdes
121204861Sdes#define ck_token_info _CK_TOKEN_INFO
122204861Sdes#define serial_number serialNumber
123204861Sdes#define max_session_count ulMaxSessionCount
124204861Sdes#define session_count ulSessionCount
125204861Sdes#define max_rw_session_count ulMaxRwSessionCount
126204861Sdes#define rw_session_count ulRwSessionCount
127204861Sdes#define max_pin_len ulMaxPinLen
128204861Sdes#define min_pin_len ulMinPinLen
129204861Sdes#define total_public_memory ulTotalPublicMemory
130204861Sdes#define free_public_memory ulFreePublicMemory
131204861Sdes#define total_private_memory ulTotalPrivateMemory
132204861Sdes#define free_private_memory ulFreePrivateMemory
133204861Sdes#define utc_time utcTime
134204861Sdes
135204861Sdes#define ck_session_handle_t CK_SESSION_HANDLE
136204861Sdes#define ck_user_type_t CK_USER_TYPE
137204861Sdes#define ck_state_t CK_STATE
138204861Sdes
139204861Sdes#define ck_session_info _CK_SESSION_INFO
140204861Sdes#define slot_id slotID
141204861Sdes#define device_error ulDeviceError
142204861Sdes
143204861Sdes#define ck_object_handle_t CK_OBJECT_HANDLE
144204861Sdes#define ck_object_class_t CK_OBJECT_CLASS
145204861Sdes#define ck_hw_feature_type_t CK_HW_FEATURE_TYPE
146204861Sdes#define ck_key_type_t CK_KEY_TYPE
147204861Sdes#define ck_certificate_type_t CK_CERTIFICATE_TYPE
148204861Sdes#define ck_attribute_type_t CK_ATTRIBUTE_TYPE
149204861Sdes
150204861Sdes#define ck_attribute _CK_ATTRIBUTE
151204861Sdes#define value pValue
152204861Sdes#define value_len ulValueLen
153204861Sdes
154204861Sdes#define ck_date _CK_DATE
155204861Sdes
156204861Sdes#define ck_mechanism_type_t CK_MECHANISM_TYPE
157204861Sdes
158204861Sdes#define ck_mechanism _CK_MECHANISM
159204861Sdes#define parameter pParameter
160204861Sdes#define parameter_len ulParameterLen
161204861Sdes
162204861Sdes#define ck_mechanism_info _CK_MECHANISM_INFO
163204861Sdes#define min_key_size ulMinKeySize
164204861Sdes#define max_key_size ulMaxKeySize
165204861Sdes
166204861Sdes#define ck_rv_t CK_RV
167204861Sdes#define ck_notify_t CK_NOTIFY
168204861Sdes
169204861Sdes#define ck_function_list _CK_FUNCTION_LIST
170204861Sdes
171204861Sdes#define ck_createmutex_t CK_CREATEMUTEX
172204861Sdes#define ck_destroymutex_t CK_DESTROYMUTEX
173204861Sdes#define ck_lockmutex_t CK_LOCKMUTEX
174204861Sdes#define ck_unlockmutex_t CK_UNLOCKMUTEX
175204861Sdes
176204861Sdes#define ck_c_initialize_args _CK_C_INITIALIZE_ARGS
177204861Sdes#define create_mutex CreateMutex
178204861Sdes#define destroy_mutex DestroyMutex
179204861Sdes#define lock_mutex LockMutex
180204861Sdes#define unlock_mutex UnlockMutex
181204861Sdes#define reserved pReserved
182204861Sdes
183204861Sdes#endif	/* CRYPTOKI_COMPAT */
184204861Sdes
185204861Sdes
186204861Sdes
187204861Sdestypedef unsigned long ck_flags_t;
188204861Sdes
189204861Sdesstruct ck_version
190204861Sdes{
191204861Sdes  unsigned char major;
192204861Sdes  unsigned char minor;
193204861Sdes};
194204861Sdes
195204861Sdes
196204861Sdesstruct ck_info
197204861Sdes{
198204861Sdes  struct ck_version cryptoki_version;
199204861Sdes  unsigned char manufacturer_id[32];
200204861Sdes  ck_flags_t flags;
201204861Sdes  unsigned char library_description[32];
202204861Sdes  struct ck_version library_version;
203204861Sdes};
204204861Sdes
205204861Sdes
206204861Sdestypedef unsigned long ck_notification_t;
207204861Sdes
208204861Sdes#define CKN_SURRENDER	(0)
209204861Sdes
210204861Sdes
211204861Sdestypedef unsigned long ck_slot_id_t;
212204861Sdes
213204861Sdes
214204861Sdesstruct ck_slot_info
215204861Sdes{
216204861Sdes  unsigned char slot_description[64];
217204861Sdes  unsigned char manufacturer_id[32];
218204861Sdes  ck_flags_t flags;
219204861Sdes  struct ck_version hardware_version;
220204861Sdes  struct ck_version firmware_version;
221204861Sdes};
222204861Sdes
223204861Sdes
224204861Sdes#define CKF_TOKEN_PRESENT	(1 << 0)
225204861Sdes#define CKF_REMOVABLE_DEVICE	(1 << 1)
226204861Sdes#define CKF_HW_SLOT		(1 << 2)
227204861Sdes#define CKF_ARRAY_ATTRIBUTE	(1 << 30)
228204861Sdes
229204861Sdes
230204861Sdesstruct ck_token_info
231204861Sdes{
232204861Sdes  unsigned char label[32];
233204861Sdes  unsigned char manufacturer_id[32];
234204861Sdes  unsigned char model[16];
235204861Sdes  unsigned char serial_number[16];
236204861Sdes  ck_flags_t flags;
237204861Sdes  unsigned long max_session_count;
238204861Sdes  unsigned long session_count;
239204861Sdes  unsigned long max_rw_session_count;
240204861Sdes  unsigned long rw_session_count;
241204861Sdes  unsigned long max_pin_len;
242204861Sdes  unsigned long min_pin_len;
243204861Sdes  unsigned long total_public_memory;
244204861Sdes  unsigned long free_public_memory;
245204861Sdes  unsigned long total_private_memory;
246204861Sdes  unsigned long free_private_memory;
247204861Sdes  struct ck_version hardware_version;
248204861Sdes  struct ck_version firmware_version;
249204861Sdes  unsigned char utc_time[16];
250204861Sdes};
251204861Sdes
252204861Sdes
253204861Sdes#define CKF_RNG					(1 << 0)
254204861Sdes#define CKF_WRITE_PROTECTED			(1 << 1)
255204861Sdes#define CKF_LOGIN_REQUIRED			(1 << 2)
256204861Sdes#define CKF_USER_PIN_INITIALIZED		(1 << 3)
257204861Sdes#define CKF_RESTORE_KEY_NOT_NEEDED		(1 << 5)
258204861Sdes#define CKF_CLOCK_ON_TOKEN			(1 << 6)
259204861Sdes#define CKF_PROTECTED_AUTHENTICATION_PATH	(1 << 8)
260204861Sdes#define CKF_DUAL_CRYPTO_OPERATIONS		(1 << 9)
261204861Sdes#define CKF_TOKEN_INITIALIZED			(1 << 10)
262204861Sdes#define CKF_SECONDARY_AUTHENTICATION		(1 << 11)
263204861Sdes#define CKF_USER_PIN_COUNT_LOW			(1 << 16)
264204861Sdes#define CKF_USER_PIN_FINAL_TRY			(1 << 17)
265204861Sdes#define CKF_USER_PIN_LOCKED			(1 << 18)
266204861Sdes#define CKF_USER_PIN_TO_BE_CHANGED		(1 << 19)
267204861Sdes#define CKF_SO_PIN_COUNT_LOW			(1 << 20)
268204861Sdes#define CKF_SO_PIN_FINAL_TRY			(1 << 21)
269204861Sdes#define CKF_SO_PIN_LOCKED			(1 << 22)
270204861Sdes#define CKF_SO_PIN_TO_BE_CHANGED		(1 << 23)
271204861Sdes
272204861Sdes#define CK_UNAVAILABLE_INFORMATION	((unsigned long) -1)
273204861Sdes#define CK_EFFECTIVELY_INFINITE		(0)
274204861Sdes
275204861Sdes
276204861Sdestypedef unsigned long ck_session_handle_t;
277204861Sdes
278204861Sdes#define CK_INVALID_HANDLE	(0)
279204861Sdes
280204861Sdes
281204861Sdestypedef unsigned long ck_user_type_t;
282204861Sdes
283204861Sdes#define CKU_SO			(0)
284204861Sdes#define CKU_USER		(1)
285204861Sdes#define CKU_CONTEXT_SPECIFIC	(2)
286204861Sdes
287204861Sdes
288204861Sdestypedef unsigned long ck_state_t;
289204861Sdes
290204861Sdes#define CKS_RO_PUBLIC_SESSION	(0)
291204861Sdes#define CKS_RO_USER_FUNCTIONS	(1)
292204861Sdes#define CKS_RW_PUBLIC_SESSION	(2)
293204861Sdes#define CKS_RW_USER_FUNCTIONS	(3)
294204861Sdes#define CKS_RW_SO_FUNCTIONS	(4)
295204861Sdes
296204861Sdes
297204861Sdesstruct ck_session_info
298204861Sdes{
299204861Sdes  ck_slot_id_t slot_id;
300204861Sdes  ck_state_t state;
301204861Sdes  ck_flags_t flags;
302204861Sdes  unsigned long device_error;
303204861Sdes};
304204861Sdes
305204861Sdes#define CKF_RW_SESSION		(1 << 1)
306204861Sdes#define CKF_SERIAL_SESSION	(1 << 2)
307204861Sdes
308204861Sdes
309204861Sdestypedef unsigned long ck_object_handle_t;
310204861Sdes
311204861Sdes
312204861Sdestypedef unsigned long ck_object_class_t;
313204861Sdes
314204861Sdes#define CKO_DATA		(0)
315204861Sdes#define CKO_CERTIFICATE		(1)
316204861Sdes#define CKO_PUBLIC_KEY		(2)
317204861Sdes#define CKO_PRIVATE_KEY		(3)
318204861Sdes#define CKO_SECRET_KEY		(4)
319204861Sdes#define CKO_HW_FEATURE		(5)
320204861Sdes#define CKO_DOMAIN_PARAMETERS	(6)
321204861Sdes#define CKO_MECHANISM		(7)
322262566Sdes#define CKO_VENDOR_DEFINED	(1U << 31)
323204861Sdes
324204861Sdes
325204861Sdestypedef unsigned long ck_hw_feature_type_t;
326204861Sdes
327204861Sdes#define CKH_MONOTONIC_COUNTER	(1)
328204861Sdes#define CKH_CLOCK		(2)
329204861Sdes#define CKH_USER_INTERFACE	(3)
330262566Sdes#define CKH_VENDOR_DEFINED	(1U << 31)
331204861Sdes
332204861Sdes
333204861Sdestypedef unsigned long ck_key_type_t;
334204861Sdes
335204861Sdes#define CKK_RSA			(0)
336204861Sdes#define CKK_DSA			(1)
337204861Sdes#define CKK_DH			(2)
338204861Sdes#define CKK_ECDSA		(3)
339204861Sdes#define CKK_EC			(3)
340204861Sdes#define CKK_X9_42_DH		(4)
341204861Sdes#define CKK_KEA			(5)
342204861Sdes#define CKK_GENERIC_SECRET	(0x10)
343204861Sdes#define CKK_RC2			(0x11)
344204861Sdes#define CKK_RC4			(0x12)
345204861Sdes#define CKK_DES			(0x13)
346204861Sdes#define CKK_DES2		(0x14)
347204861Sdes#define CKK_DES3		(0x15)
348204861Sdes#define CKK_CAST		(0x16)
349204861Sdes#define CKK_CAST3		(0x17)
350204861Sdes#define CKK_CAST128		(0x18)
351204861Sdes#define CKK_RC5			(0x19)
352204861Sdes#define CKK_IDEA		(0x1a)
353204861Sdes#define CKK_SKIPJACK		(0x1b)
354204861Sdes#define CKK_BATON		(0x1c)
355204861Sdes#define CKK_JUNIPER		(0x1d)
356204861Sdes#define CKK_CDMF		(0x1e)
357204861Sdes#define CKK_AES			(0x1f)
358204861Sdes#define CKK_BLOWFISH		(0x20)
359204861Sdes#define CKK_TWOFISH		(0x21)
360262566Sdes#define CKK_VENDOR_DEFINED	(1U << 31)
361204861Sdes
362204861Sdestypedef unsigned long ck_certificate_type_t;
363204861Sdes
364204861Sdes#define CKC_X_509		(0)
365204861Sdes#define CKC_X_509_ATTR_CERT	(1)
366204861Sdes#define CKC_WTLS		(2)
367262566Sdes#define CKC_VENDOR_DEFINED	(1U << 31)
368204861Sdes
369204861Sdes
370204861Sdestypedef unsigned long ck_attribute_type_t;
371204861Sdes
372204861Sdes#define CKA_CLASS			(0)
373204861Sdes#define CKA_TOKEN			(1)
374204861Sdes#define CKA_PRIVATE			(2)
375204861Sdes#define CKA_LABEL			(3)
376204861Sdes#define CKA_APPLICATION			(0x10)
377204861Sdes#define CKA_VALUE			(0x11)
378204861Sdes#define CKA_OBJECT_ID			(0x12)
379204861Sdes#define CKA_CERTIFICATE_TYPE		(0x80)
380204861Sdes#define CKA_ISSUER			(0x81)
381204861Sdes#define CKA_SERIAL_NUMBER		(0x82)
382204861Sdes#define CKA_AC_ISSUER			(0x83)
383204861Sdes#define CKA_OWNER			(0x84)
384204861Sdes#define CKA_ATTR_TYPES			(0x85)
385204861Sdes#define CKA_TRUSTED			(0x86)
386204861Sdes#define CKA_CERTIFICATE_CATEGORY	(0x87)
387204861Sdes#define CKA_JAVA_MIDP_SECURITY_DOMAIN	(0x88)
388204861Sdes#define CKA_URL				(0x89)
389204861Sdes#define CKA_HASH_OF_SUBJECT_PUBLIC_KEY	(0x8a)
390204861Sdes#define CKA_HASH_OF_ISSUER_PUBLIC_KEY	(0x8b)
391204861Sdes#define CKA_CHECK_VALUE			(0x90)
392204861Sdes#define CKA_KEY_TYPE			(0x100)
393204861Sdes#define CKA_SUBJECT			(0x101)
394204861Sdes#define CKA_ID				(0x102)
395204861Sdes#define CKA_SENSITIVE			(0x103)
396204861Sdes#define CKA_ENCRYPT			(0x104)
397204861Sdes#define CKA_DECRYPT			(0x105)
398204861Sdes#define CKA_WRAP			(0x106)
399204861Sdes#define CKA_UNWRAP			(0x107)
400204861Sdes#define CKA_SIGN			(0x108)
401204861Sdes#define CKA_SIGN_RECOVER		(0x109)
402204861Sdes#define CKA_VERIFY			(0x10a)
403204861Sdes#define CKA_VERIFY_RECOVER		(0x10b)
404204861Sdes#define CKA_DERIVE			(0x10c)
405204861Sdes#define CKA_START_DATE			(0x110)
406204861Sdes#define CKA_END_DATE			(0x111)
407204861Sdes#define CKA_MODULUS			(0x120)
408204861Sdes#define CKA_MODULUS_BITS		(0x121)
409204861Sdes#define CKA_PUBLIC_EXPONENT		(0x122)
410204861Sdes#define CKA_PRIVATE_EXPONENT		(0x123)
411204861Sdes#define CKA_PRIME_1			(0x124)
412204861Sdes#define CKA_PRIME_2			(0x125)
413204861Sdes#define CKA_EXPONENT_1			(0x126)
414204861Sdes#define CKA_EXPONENT_2			(0x127)
415204861Sdes#define CKA_COEFFICIENT			(0x128)
416204861Sdes#define CKA_PRIME			(0x130)
417204861Sdes#define CKA_SUBPRIME			(0x131)
418204861Sdes#define CKA_BASE			(0x132)
419204861Sdes#define CKA_PRIME_BITS			(0x133)
420204861Sdes#define CKA_SUB_PRIME_BITS		(0x134)
421204861Sdes#define CKA_VALUE_BITS			(0x160)
422204861Sdes#define CKA_VALUE_LEN			(0x161)
423204861Sdes#define CKA_EXTRACTABLE			(0x162)
424204861Sdes#define CKA_LOCAL			(0x163)
425204861Sdes#define CKA_NEVER_EXTRACTABLE		(0x164)
426204861Sdes#define CKA_ALWAYS_SENSITIVE		(0x165)
427204861Sdes#define CKA_KEY_GEN_MECHANISM		(0x166)
428204861Sdes#define CKA_MODIFIABLE			(0x170)
429204861Sdes#define CKA_ECDSA_PARAMS		(0x180)
430204861Sdes#define CKA_EC_PARAMS			(0x180)
431204861Sdes#define CKA_EC_POINT			(0x181)
432204861Sdes#define CKA_SECONDARY_AUTH		(0x200)
433204861Sdes#define CKA_AUTH_PIN_FLAGS		(0x201)
434204861Sdes#define CKA_ALWAYS_AUTHENTICATE		(0x202)
435204861Sdes#define CKA_WRAP_WITH_TRUSTED		(0x210)
436204861Sdes#define CKA_HW_FEATURE_TYPE		(0x300)
437204861Sdes#define CKA_RESET_ON_INIT		(0x301)
438204861Sdes#define CKA_HAS_RESET			(0x302)
439204861Sdes#define CKA_PIXEL_X			(0x400)
440204861Sdes#define CKA_PIXEL_Y			(0x401)
441204861Sdes#define CKA_RESOLUTION			(0x402)
442204861Sdes#define CKA_CHAR_ROWS			(0x403)
443204861Sdes#define CKA_CHAR_COLUMNS		(0x404)
444204861Sdes#define CKA_COLOR			(0x405)
445204861Sdes#define CKA_BITS_PER_PIXEL		(0x406)
446204861Sdes#define CKA_CHAR_SETS			(0x480)
447204861Sdes#define CKA_ENCODING_METHODS		(0x481)
448204861Sdes#define CKA_MIME_TYPES			(0x482)
449204861Sdes#define CKA_MECHANISM_TYPE		(0x500)
450204861Sdes#define CKA_REQUIRED_CMS_ATTRIBUTES	(0x501)
451204861Sdes#define CKA_DEFAULT_CMS_ATTRIBUTES	(0x502)
452204861Sdes#define CKA_SUPPORTED_CMS_ATTRIBUTES	(0x503)
453204861Sdes#define CKA_WRAP_TEMPLATE		(CKF_ARRAY_ATTRIBUTE | 0x211)
454204861Sdes#define CKA_UNWRAP_TEMPLATE		(CKF_ARRAY_ATTRIBUTE | 0x212)
455204861Sdes#define CKA_ALLOWED_MECHANISMS		(CKF_ARRAY_ATTRIBUTE | 0x600)
456262566Sdes#define CKA_VENDOR_DEFINED		(1U << 31)
457204861Sdes
458204861Sdes
459204861Sdesstruct ck_attribute
460204861Sdes{
461204861Sdes  ck_attribute_type_t type;
462204861Sdes  void *value;
463204861Sdes  unsigned long value_len;
464204861Sdes};
465204861Sdes
466204861Sdes
467204861Sdesstruct ck_date
468204861Sdes{
469204861Sdes  unsigned char year[4];
470204861Sdes  unsigned char month[2];
471204861Sdes  unsigned char day[2];
472204861Sdes};
473204861Sdes
474204861Sdes
475204861Sdestypedef unsigned long ck_mechanism_type_t;
476204861Sdes
477204861Sdes#define CKM_RSA_PKCS_KEY_PAIR_GEN	(0)
478204861Sdes#define CKM_RSA_PKCS			(1)
479204861Sdes#define CKM_RSA_9796			(2)
480204861Sdes#define CKM_RSA_X_509			(3)
481204861Sdes#define CKM_MD2_RSA_PKCS		(4)
482204861Sdes#define CKM_MD5_RSA_PKCS		(5)
483204861Sdes#define CKM_SHA1_RSA_PKCS		(6)
484204861Sdes#define CKM_RIPEMD128_RSA_PKCS		(7)
485204861Sdes#define CKM_RIPEMD160_RSA_PKCS		(8)
486204861Sdes#define CKM_RSA_PKCS_OAEP		(9)
487204861Sdes#define CKM_RSA_X9_31_KEY_PAIR_GEN	(0xa)
488204861Sdes#define CKM_RSA_X9_31			(0xb)
489204861Sdes#define CKM_SHA1_RSA_X9_31		(0xc)
490204861Sdes#define CKM_RSA_PKCS_PSS		(0xd)
491204861Sdes#define CKM_SHA1_RSA_PKCS_PSS		(0xe)
492204861Sdes#define CKM_DSA_KEY_PAIR_GEN		(0x10)
493204861Sdes#define	CKM_DSA				(0x11)
494204861Sdes#define CKM_DSA_SHA1			(0x12)
495204861Sdes#define CKM_DH_PKCS_KEY_PAIR_GEN	(0x20)
496204861Sdes#define CKM_DH_PKCS_DERIVE		(0x21)
497204861Sdes#define	CKM_X9_42_DH_KEY_PAIR_GEN	(0x30)
498204861Sdes#define CKM_X9_42_DH_DERIVE		(0x31)
499204861Sdes#define CKM_X9_42_DH_HYBRID_DERIVE	(0x32)
500204861Sdes#define CKM_X9_42_MQV_DERIVE		(0x33)
501204861Sdes#define CKM_SHA256_RSA_PKCS		(0x40)
502204861Sdes#define CKM_SHA384_RSA_PKCS		(0x41)
503204861Sdes#define CKM_SHA512_RSA_PKCS		(0x42)
504204861Sdes#define CKM_SHA256_RSA_PKCS_PSS		(0x43)
505204861Sdes#define CKM_SHA384_RSA_PKCS_PSS		(0x44)
506204861Sdes#define CKM_SHA512_RSA_PKCS_PSS		(0x45)
507204861Sdes#define CKM_RC2_KEY_GEN			(0x100)
508204861Sdes#define CKM_RC2_ECB			(0x101)
509204861Sdes#define	CKM_RC2_CBC			(0x102)
510204861Sdes#define	CKM_RC2_MAC			(0x103)
511204861Sdes#define CKM_RC2_MAC_GENERAL		(0x104)
512204861Sdes#define CKM_RC2_CBC_PAD			(0x105)
513204861Sdes#define CKM_RC4_KEY_GEN			(0x110)
514204861Sdes#define CKM_RC4				(0x111)
515204861Sdes#define CKM_DES_KEY_GEN			(0x120)
516204861Sdes#define CKM_DES_ECB			(0x121)
517204861Sdes#define CKM_DES_CBC			(0x122)
518204861Sdes#define CKM_DES_MAC			(0x123)
519204861Sdes#define CKM_DES_MAC_GENERAL		(0x124)
520204861Sdes#define CKM_DES_CBC_PAD			(0x125)
521204861Sdes#define CKM_DES2_KEY_GEN		(0x130)
522204861Sdes#define CKM_DES3_KEY_GEN		(0x131)
523204861Sdes#define CKM_DES3_ECB			(0x132)
524204861Sdes#define CKM_DES3_CBC			(0x133)
525204861Sdes#define CKM_DES3_MAC			(0x134)
526204861Sdes#define CKM_DES3_MAC_GENERAL		(0x135)
527204861Sdes#define CKM_DES3_CBC_PAD		(0x136)
528204861Sdes#define CKM_CDMF_KEY_GEN		(0x140)
529204861Sdes#define CKM_CDMF_ECB			(0x141)
530204861Sdes#define CKM_CDMF_CBC			(0x142)
531204861Sdes#define CKM_CDMF_MAC			(0x143)
532204861Sdes#define CKM_CDMF_MAC_GENERAL		(0x144)
533204861Sdes#define CKM_CDMF_CBC_PAD		(0x145)
534204861Sdes#define CKM_MD2				(0x200)
535204861Sdes#define CKM_MD2_HMAC			(0x201)
536204861Sdes#define CKM_MD2_HMAC_GENERAL		(0x202)
537204861Sdes#define CKM_MD5				(0x210)
538204861Sdes#define CKM_MD5_HMAC			(0x211)
539204861Sdes#define CKM_MD5_HMAC_GENERAL		(0x212)
540204861Sdes#define CKM_SHA_1			(0x220)
541204861Sdes#define CKM_SHA_1_HMAC			(0x221)
542204861Sdes#define CKM_SHA_1_HMAC_GENERAL		(0x222)
543204861Sdes#define CKM_RIPEMD128			(0x230)
544204861Sdes#define CKM_RIPEMD128_HMAC		(0x231)
545204861Sdes#define CKM_RIPEMD128_HMAC_GENERAL	(0x232)
546204861Sdes#define CKM_RIPEMD160			(0x240)
547204861Sdes#define CKM_RIPEMD160_HMAC		(0x241)
548204861Sdes#define CKM_RIPEMD160_HMAC_GENERAL	(0x242)
549204861Sdes#define CKM_SHA256			(0x250)
550204861Sdes#define CKM_SHA256_HMAC			(0x251)
551204861Sdes#define CKM_SHA256_HMAC_GENERAL		(0x252)
552204861Sdes#define CKM_SHA384			(0x260)
553204861Sdes#define CKM_SHA384_HMAC			(0x261)
554204861Sdes#define CKM_SHA384_HMAC_GENERAL		(0x262)
555204861Sdes#define CKM_SHA512			(0x270)
556204861Sdes#define CKM_SHA512_HMAC			(0x271)
557204861Sdes#define CKM_SHA512_HMAC_GENERAL		(0x272)
558204861Sdes#define CKM_CAST_KEY_GEN		(0x300)
559204861Sdes#define CKM_CAST_ECB			(0x301)
560204861Sdes#define CKM_CAST_CBC			(0x302)
561204861Sdes#define CKM_CAST_MAC			(0x303)
562204861Sdes#define CKM_CAST_MAC_GENERAL		(0x304)
563204861Sdes#define CKM_CAST_CBC_PAD		(0x305)
564204861Sdes#define CKM_CAST3_KEY_GEN		(0x310)
565204861Sdes#define CKM_CAST3_ECB			(0x311)
566204861Sdes#define CKM_CAST3_CBC			(0x312)
567204861Sdes#define CKM_CAST3_MAC			(0x313)
568204861Sdes#define CKM_CAST3_MAC_GENERAL		(0x314)
569204861Sdes#define CKM_CAST3_CBC_PAD		(0x315)
570204861Sdes#define CKM_CAST5_KEY_GEN		(0x320)
571204861Sdes#define CKM_CAST128_KEY_GEN		(0x320)
572204861Sdes#define CKM_CAST5_ECB			(0x321)
573204861Sdes#define CKM_CAST128_ECB			(0x321)
574204861Sdes#define CKM_CAST5_CBC			(0x322)
575204861Sdes#define CKM_CAST128_CBC			(0x322)
576204861Sdes#define CKM_CAST5_MAC			(0x323)
577204861Sdes#define	CKM_CAST128_MAC			(0x323)
578204861Sdes#define CKM_CAST5_MAC_GENERAL		(0x324)
579204861Sdes#define CKM_CAST128_MAC_GENERAL		(0x324)
580204861Sdes#define CKM_CAST5_CBC_PAD		(0x325)
581204861Sdes#define CKM_CAST128_CBC_PAD		(0x325)
582204861Sdes#define CKM_RC5_KEY_GEN			(0x330)
583204861Sdes#define CKM_RC5_ECB			(0x331)
584204861Sdes#define CKM_RC5_CBC			(0x332)
585204861Sdes#define CKM_RC5_MAC			(0x333)
586204861Sdes#define CKM_RC5_MAC_GENERAL		(0x334)
587204861Sdes#define CKM_RC5_CBC_PAD			(0x335)
588204861Sdes#define CKM_IDEA_KEY_GEN		(0x340)
589204861Sdes#define CKM_IDEA_ECB			(0x341)
590204861Sdes#define	CKM_IDEA_CBC			(0x342)
591204861Sdes#define CKM_IDEA_MAC			(0x343)
592204861Sdes#define CKM_IDEA_MAC_GENERAL		(0x344)
593204861Sdes#define CKM_IDEA_CBC_PAD		(0x345)
594204861Sdes#define CKM_GENERIC_SECRET_KEY_GEN	(0x350)
595204861Sdes#define CKM_CONCATENATE_BASE_AND_KEY	(0x360)
596204861Sdes#define CKM_CONCATENATE_BASE_AND_DATA	(0x362)
597204861Sdes#define CKM_CONCATENATE_DATA_AND_BASE	(0x363)
598204861Sdes#define CKM_XOR_BASE_AND_DATA		(0x364)
599204861Sdes#define CKM_EXTRACT_KEY_FROM_KEY	(0x365)
600204861Sdes#define CKM_SSL3_PRE_MASTER_KEY_GEN	(0x370)
601204861Sdes#define CKM_SSL3_MASTER_KEY_DERIVE	(0x371)
602204861Sdes#define CKM_SSL3_KEY_AND_MAC_DERIVE	(0x372)
603204861Sdes#define CKM_SSL3_MASTER_KEY_DERIVE_DH	(0x373)
604204861Sdes#define CKM_TLS_PRE_MASTER_KEY_GEN	(0x374)
605204861Sdes#define CKM_TLS_MASTER_KEY_DERIVE	(0x375)
606204861Sdes#define CKM_TLS_KEY_AND_MAC_DERIVE	(0x376)
607204861Sdes#define CKM_TLS_MASTER_KEY_DERIVE_DH	(0x377)
608204861Sdes#define CKM_SSL3_MD5_MAC		(0x380)
609204861Sdes#define CKM_SSL3_SHA1_MAC		(0x381)
610204861Sdes#define CKM_MD5_KEY_DERIVATION		(0x390)
611204861Sdes#define CKM_MD2_KEY_DERIVATION		(0x391)
612204861Sdes#define CKM_SHA1_KEY_DERIVATION		(0x392)
613204861Sdes#define CKM_PBE_MD2_DES_CBC		(0x3a0)
614204861Sdes#define CKM_PBE_MD5_DES_CBC		(0x3a1)
615204861Sdes#define CKM_PBE_MD5_CAST_CBC		(0x3a2)
616204861Sdes#define CKM_PBE_MD5_CAST3_CBC		(0x3a3)
617204861Sdes#define CKM_PBE_MD5_CAST5_CBC		(0x3a4)
618204861Sdes#define CKM_PBE_MD5_CAST128_CBC		(0x3a4)
619204861Sdes#define CKM_PBE_SHA1_CAST5_CBC		(0x3a5)
620204861Sdes#define CKM_PBE_SHA1_CAST128_CBC	(0x3a5)
621204861Sdes#define CKM_PBE_SHA1_RC4_128		(0x3a6)
622204861Sdes#define CKM_PBE_SHA1_RC4_40		(0x3a7)
623204861Sdes#define CKM_PBE_SHA1_DES3_EDE_CBC	(0x3a8)
624204861Sdes#define CKM_PBE_SHA1_DES2_EDE_CBC	(0x3a9)
625204861Sdes#define CKM_PBE_SHA1_RC2_128_CBC	(0x3aa)
626204861Sdes#define CKM_PBE_SHA1_RC2_40_CBC		(0x3ab)
627204861Sdes#define CKM_PKCS5_PBKD2			(0x3b0)
628204861Sdes#define CKM_PBA_SHA1_WITH_SHA1_HMAC	(0x3c0)
629204861Sdes#define CKM_KEY_WRAP_LYNKS		(0x400)
630204861Sdes#define CKM_KEY_WRAP_SET_OAEP		(0x401)
631204861Sdes#define CKM_SKIPJACK_KEY_GEN		(0x1000)
632204861Sdes#define CKM_SKIPJACK_ECB64		(0x1001)
633204861Sdes#define CKM_SKIPJACK_CBC64		(0x1002)
634204861Sdes#define CKM_SKIPJACK_OFB64		(0x1003)
635204861Sdes#define CKM_SKIPJACK_CFB64		(0x1004)
636204861Sdes#define CKM_SKIPJACK_CFB32		(0x1005)
637204861Sdes#define CKM_SKIPJACK_CFB16		(0x1006)
638204861Sdes#define CKM_SKIPJACK_CFB8		(0x1007)
639204861Sdes#define CKM_SKIPJACK_WRAP		(0x1008)
640204861Sdes#define CKM_SKIPJACK_PRIVATE_WRAP	(0x1009)
641204861Sdes#define CKM_SKIPJACK_RELAYX		(0x100a)
642204861Sdes#define CKM_KEA_KEY_PAIR_GEN		(0x1010)
643204861Sdes#define CKM_KEA_KEY_DERIVE		(0x1011)
644204861Sdes#define CKM_FORTEZZA_TIMESTAMP		(0x1020)
645204861Sdes#define CKM_BATON_KEY_GEN		(0x1030)
646204861Sdes#define CKM_BATON_ECB128		(0x1031)
647204861Sdes#define CKM_BATON_ECB96			(0x1032)
648204861Sdes#define CKM_BATON_CBC128		(0x1033)
649204861Sdes#define CKM_BATON_COUNTER		(0x1034)
650204861Sdes#define CKM_BATON_SHUFFLE		(0x1035)
651204861Sdes#define CKM_BATON_WRAP			(0x1036)
652204861Sdes#define CKM_ECDSA_KEY_PAIR_GEN		(0x1040)
653204861Sdes#define CKM_EC_KEY_PAIR_GEN		(0x1040)
654204861Sdes#define CKM_ECDSA			(0x1041)
655204861Sdes#define CKM_ECDSA_SHA1			(0x1042)
656204861Sdes#define CKM_ECDH1_DERIVE		(0x1050)
657204861Sdes#define CKM_ECDH1_COFACTOR_DERIVE	(0x1051)
658204861Sdes#define CKM_ECMQV_DERIVE		(0x1052)
659204861Sdes#define CKM_JUNIPER_KEY_GEN		(0x1060)
660204861Sdes#define CKM_JUNIPER_ECB128		(0x1061)
661204861Sdes#define CKM_JUNIPER_CBC128		(0x1062)
662204861Sdes#define CKM_JUNIPER_COUNTER		(0x1063)
663204861Sdes#define CKM_JUNIPER_SHUFFLE		(0x1064)
664204861Sdes#define CKM_JUNIPER_WRAP		(0x1065)
665204861Sdes#define CKM_FASTHASH			(0x1070)
666204861Sdes#define CKM_AES_KEY_GEN			(0x1080)
667204861Sdes#define CKM_AES_ECB			(0x1081)
668204861Sdes#define CKM_AES_CBC			(0x1082)
669204861Sdes#define CKM_AES_MAC			(0x1083)
670204861Sdes#define CKM_AES_MAC_GENERAL		(0x1084)
671204861Sdes#define CKM_AES_CBC_PAD			(0x1085)
672204861Sdes#define CKM_DSA_PARAMETER_GEN		(0x2000)
673204861Sdes#define CKM_DH_PKCS_PARAMETER_GEN	(0x2001)
674204861Sdes#define CKM_X9_42_DH_PARAMETER_GEN	(0x2002)
675262566Sdes#define CKM_VENDOR_DEFINED		(1U << 31)
676204861Sdes
677204861Sdes
678204861Sdesstruct ck_mechanism
679204861Sdes{
680204861Sdes  ck_mechanism_type_t mechanism;
681204861Sdes  void *parameter;
682204861Sdes  unsigned long parameter_len;
683204861Sdes};
684204861Sdes
685204861Sdes
686204861Sdesstruct ck_mechanism_info
687204861Sdes{
688204861Sdes  unsigned long min_key_size;
689204861Sdes  unsigned long max_key_size;
690204861Sdes  ck_flags_t flags;
691204861Sdes};
692204861Sdes
693204861Sdes#define CKF_HW			(1 << 0)
694204861Sdes#define CKF_ENCRYPT		(1 << 8)
695204861Sdes#define CKF_DECRYPT		(1 << 9)
696204861Sdes#define CKF_DIGEST		(1 << 10)
697204861Sdes#define CKF_SIGN		(1 << 11)
698204861Sdes#define CKF_SIGN_RECOVER	(1 << 12)
699204861Sdes#define CKF_VERIFY		(1 << 13)
700204861Sdes#define CKF_VERIFY_RECOVER	(1 << 14)
701204861Sdes#define CKF_GENERATE		(1 << 15)
702204861Sdes#define CKF_GENERATE_KEY_PAIR	(1 << 16)
703204861Sdes#define CKF_WRAP		(1 << 17)
704204861Sdes#define CKF_UNWRAP		(1 << 18)
705204861Sdes#define CKF_DERIVE		(1 << 19)
706262566Sdes#define CKF_EXTENSION		(1U << 31)
707204861Sdes
708204861Sdes
709204861Sdes/* Flags for C_WaitForSlotEvent.  */
710204861Sdes#define CKF_DONT_BLOCK				(1)
711204861Sdes
712204861Sdes
713204861Sdestypedef unsigned long ck_rv_t;
714204861Sdes
715204861Sdes
716204861Sdestypedef ck_rv_t (*ck_notify_t) (ck_session_handle_t session,
717204861Sdes				ck_notification_t event, void *application);
718204861Sdes
719204861Sdes/* Forward reference.  */
720204861Sdesstruct ck_function_list;
721204861Sdes
722204861Sdes#define _CK_DECLARE_FUNCTION(name, args)	\
723204861Sdestypedef ck_rv_t (*CK_ ## name) args;		\
724204861Sdesck_rv_t CK_SPEC name args
725204861Sdes
726204861Sdes_CK_DECLARE_FUNCTION (C_Initialize, (void *init_args));
727204861Sdes_CK_DECLARE_FUNCTION (C_Finalize, (void *reserved));
728204861Sdes_CK_DECLARE_FUNCTION (C_GetInfo, (struct ck_info *info));
729204861Sdes_CK_DECLARE_FUNCTION (C_GetFunctionList,
730204861Sdes		      (struct ck_function_list **function_list));
731204861Sdes
732204861Sdes_CK_DECLARE_FUNCTION (C_GetSlotList,
733204861Sdes		      (unsigned char token_present, ck_slot_id_t *slot_list,
734204861Sdes		       unsigned long *count));
735204861Sdes_CK_DECLARE_FUNCTION (C_GetSlotInfo,
736204861Sdes		      (ck_slot_id_t slot_id, struct ck_slot_info *info));
737204861Sdes_CK_DECLARE_FUNCTION (C_GetTokenInfo,
738204861Sdes		      (ck_slot_id_t slot_id, struct ck_token_info *info));
739204861Sdes_CK_DECLARE_FUNCTION (C_WaitForSlotEvent,
740204861Sdes		      (ck_flags_t flags, ck_slot_id_t *slot, void *reserved));
741204861Sdes_CK_DECLARE_FUNCTION (C_GetMechanismList,
742204861Sdes		      (ck_slot_id_t slot_id,
743204861Sdes		       ck_mechanism_type_t *mechanism_list,
744204861Sdes		       unsigned long *count));
745204861Sdes_CK_DECLARE_FUNCTION (C_GetMechanismInfo,
746204861Sdes		      (ck_slot_id_t slot_id, ck_mechanism_type_t type,
747204861Sdes		       struct ck_mechanism_info *info));
748204861Sdes_CK_DECLARE_FUNCTION (C_InitToken,
749204861Sdes		      (ck_slot_id_t slot_id, unsigned char *pin,
750204861Sdes		       unsigned long pin_len, unsigned char *label));
751204861Sdes_CK_DECLARE_FUNCTION (C_InitPIN,
752204861Sdes		      (ck_session_handle_t session, unsigned char *pin,
753204861Sdes		       unsigned long pin_len));
754204861Sdes_CK_DECLARE_FUNCTION (C_SetPIN,
755204861Sdes		      (ck_session_handle_t session, unsigned char *old_pin,
756204861Sdes		       unsigned long old_len, unsigned char *new_pin,
757204861Sdes		       unsigned long new_len));
758204861Sdes
759204861Sdes_CK_DECLARE_FUNCTION (C_OpenSession,
760204861Sdes		      (ck_slot_id_t slot_id, ck_flags_t flags,
761204861Sdes		       void *application, ck_notify_t notify,
762204861Sdes		       ck_session_handle_t *session));
763204861Sdes_CK_DECLARE_FUNCTION (C_CloseSession, (ck_session_handle_t session));
764204861Sdes_CK_DECLARE_FUNCTION (C_CloseAllSessions, (ck_slot_id_t slot_id));
765204861Sdes_CK_DECLARE_FUNCTION (C_GetSessionInfo,
766204861Sdes		      (ck_session_handle_t session,
767204861Sdes		       struct ck_session_info *info));
768204861Sdes_CK_DECLARE_FUNCTION (C_GetOperationState,
769204861Sdes		      (ck_session_handle_t session,
770204861Sdes		       unsigned char *operation_state,
771204861Sdes		       unsigned long *operation_state_len));
772204861Sdes_CK_DECLARE_FUNCTION (C_SetOperationState,
773204861Sdes		      (ck_session_handle_t session,
774204861Sdes		       unsigned char *operation_state,
775204861Sdes		       unsigned long operation_state_len,
776204861Sdes		       ck_object_handle_t encryption_key,
777204861Sdes		       ck_object_handle_t authentiation_key));
778204861Sdes_CK_DECLARE_FUNCTION (C_Login,
779204861Sdes		      (ck_session_handle_t session, ck_user_type_t user_type,
780204861Sdes		       unsigned char *pin, unsigned long pin_len));
781204861Sdes_CK_DECLARE_FUNCTION (C_Logout, (ck_session_handle_t session));
782204861Sdes
783204861Sdes_CK_DECLARE_FUNCTION (C_CreateObject,
784204861Sdes		      (ck_session_handle_t session,
785204861Sdes		       struct ck_attribute *templ,
786204861Sdes		       unsigned long count, ck_object_handle_t *object));
787204861Sdes_CK_DECLARE_FUNCTION (C_CopyObject,
788204861Sdes		      (ck_session_handle_t session, ck_object_handle_t object,
789204861Sdes		       struct ck_attribute *templ, unsigned long count,
790204861Sdes		       ck_object_handle_t *new_object));
791204861Sdes_CK_DECLARE_FUNCTION (C_DestroyObject,
792204861Sdes		      (ck_session_handle_t session,
793204861Sdes		       ck_object_handle_t object));
794204861Sdes_CK_DECLARE_FUNCTION (C_GetObjectSize,
795204861Sdes		      (ck_session_handle_t session,
796204861Sdes		       ck_object_handle_t object,
797204861Sdes		       unsigned long *size));
798204861Sdes_CK_DECLARE_FUNCTION (C_GetAttributeValue,
799204861Sdes		      (ck_session_handle_t session,
800204861Sdes		       ck_object_handle_t object,
801204861Sdes		       struct ck_attribute *templ,
802204861Sdes		       unsigned long count));
803204861Sdes_CK_DECLARE_FUNCTION (C_SetAttributeValue,
804204861Sdes		      (ck_session_handle_t session,
805204861Sdes		       ck_object_handle_t object,
806204861Sdes		       struct ck_attribute *templ,
807204861Sdes		       unsigned long count));
808204861Sdes_CK_DECLARE_FUNCTION (C_FindObjectsInit,
809204861Sdes		      (ck_session_handle_t session,
810204861Sdes		       struct ck_attribute *templ,
811204861Sdes		       unsigned long count));
812204861Sdes_CK_DECLARE_FUNCTION (C_FindObjects,
813204861Sdes		      (ck_session_handle_t session,
814204861Sdes		       ck_object_handle_t *object,
815204861Sdes		       unsigned long max_object_count,
816204861Sdes		       unsigned long *object_count));
817204861Sdes_CK_DECLARE_FUNCTION (C_FindObjectsFinal,
818204861Sdes		      (ck_session_handle_t session));
819204861Sdes
820204861Sdes_CK_DECLARE_FUNCTION (C_EncryptInit,
821204861Sdes		      (ck_session_handle_t session,
822204861Sdes		       struct ck_mechanism *mechanism,
823204861Sdes		       ck_object_handle_t key));
824204861Sdes_CK_DECLARE_FUNCTION (C_Encrypt,
825204861Sdes		      (ck_session_handle_t session,
826204861Sdes		       unsigned char *data, unsigned long data_len,
827204861Sdes		       unsigned char *encrypted_data,
828204861Sdes		       unsigned long *encrypted_data_len));
829204861Sdes_CK_DECLARE_FUNCTION (C_EncryptUpdate,
830204861Sdes		      (ck_session_handle_t session,
831204861Sdes		       unsigned char *part, unsigned long part_len,
832204861Sdes		       unsigned char *encrypted_part,
833204861Sdes		       unsigned long *encrypted_part_len));
834204861Sdes_CK_DECLARE_FUNCTION (C_EncryptFinal,
835204861Sdes		      (ck_session_handle_t session,
836204861Sdes		       unsigned char *last_encrypted_part,
837204861Sdes		       unsigned long *last_encrypted_part_len));
838204861Sdes
839204861Sdes_CK_DECLARE_FUNCTION (C_DecryptInit,
840204861Sdes		      (ck_session_handle_t session,
841204861Sdes		       struct ck_mechanism *mechanism,
842204861Sdes		       ck_object_handle_t key));
843204861Sdes_CK_DECLARE_FUNCTION (C_Decrypt,
844204861Sdes		      (ck_session_handle_t session,
845204861Sdes		       unsigned char *encrypted_data,
846204861Sdes		       unsigned long encrypted_data_len,
847204861Sdes		       unsigned char *data, unsigned long *data_len));
848204861Sdes_CK_DECLARE_FUNCTION (C_DecryptUpdate,
849204861Sdes		      (ck_session_handle_t session,
850204861Sdes		       unsigned char *encrypted_part,
851204861Sdes		       unsigned long encrypted_part_len,
852204861Sdes		       unsigned char *part, unsigned long *part_len));
853204861Sdes_CK_DECLARE_FUNCTION (C_DecryptFinal,
854204861Sdes		      (ck_session_handle_t session,
855204861Sdes		       unsigned char *last_part,
856204861Sdes		       unsigned long *last_part_len));
857204861Sdes
858204861Sdes_CK_DECLARE_FUNCTION (C_DigestInit,
859204861Sdes		      (ck_session_handle_t session,
860204861Sdes		       struct ck_mechanism *mechanism));
861204861Sdes_CK_DECLARE_FUNCTION (C_Digest,
862204861Sdes		      (ck_session_handle_t session,
863204861Sdes		       unsigned char *data, unsigned long data_len,
864204861Sdes		       unsigned char *digest,
865204861Sdes		       unsigned long *digest_len));
866204861Sdes_CK_DECLARE_FUNCTION (C_DigestUpdate,
867204861Sdes		      (ck_session_handle_t session,
868204861Sdes		       unsigned char *part, unsigned long part_len));
869204861Sdes_CK_DECLARE_FUNCTION (C_DigestKey,
870204861Sdes		      (ck_session_handle_t session, ck_object_handle_t key));
871204861Sdes_CK_DECLARE_FUNCTION (C_DigestFinal,
872204861Sdes		      (ck_session_handle_t session,
873204861Sdes		       unsigned char *digest,
874204861Sdes		       unsigned long *digest_len));
875204861Sdes
876204861Sdes_CK_DECLARE_FUNCTION (C_SignInit,
877204861Sdes		      (ck_session_handle_t session,
878204861Sdes		       struct ck_mechanism *mechanism,
879204861Sdes		       ck_object_handle_t key));
880204861Sdes_CK_DECLARE_FUNCTION (C_Sign,
881204861Sdes		      (ck_session_handle_t session,
882204861Sdes		       unsigned char *data, unsigned long data_len,
883204861Sdes		       unsigned char *signature,
884204861Sdes		       unsigned long *signature_len));
885204861Sdes_CK_DECLARE_FUNCTION (C_SignUpdate,
886204861Sdes		      (ck_session_handle_t session,
887204861Sdes		       unsigned char *part, unsigned long part_len));
888204861Sdes_CK_DECLARE_FUNCTION (C_SignFinal,
889204861Sdes		      (ck_session_handle_t session,
890204861Sdes		       unsigned char *signature,
891204861Sdes		       unsigned long *signature_len));
892204861Sdes_CK_DECLARE_FUNCTION (C_SignRecoverInit,
893204861Sdes		      (ck_session_handle_t session,
894204861Sdes		       struct ck_mechanism *mechanism,
895204861Sdes		       ck_object_handle_t key));
896204861Sdes_CK_DECLARE_FUNCTION (C_SignRecover,
897204861Sdes		      (ck_session_handle_t session,
898204861Sdes		       unsigned char *data, unsigned long data_len,
899204861Sdes		       unsigned char *signature,
900204861Sdes		       unsigned long *signature_len));
901204861Sdes
902204861Sdes_CK_DECLARE_FUNCTION (C_VerifyInit,
903204861Sdes		      (ck_session_handle_t session,
904204861Sdes		       struct ck_mechanism *mechanism,
905204861Sdes		       ck_object_handle_t key));
906204861Sdes_CK_DECLARE_FUNCTION (C_Verify,
907204861Sdes		      (ck_session_handle_t session,
908204861Sdes		       unsigned char *data, unsigned long data_len,
909204861Sdes		       unsigned char *signature,
910204861Sdes		       unsigned long signature_len));
911204861Sdes_CK_DECLARE_FUNCTION (C_VerifyUpdate,
912204861Sdes		      (ck_session_handle_t session,
913204861Sdes		       unsigned char *part, unsigned long part_len));
914204861Sdes_CK_DECLARE_FUNCTION (C_VerifyFinal,
915204861Sdes		      (ck_session_handle_t session,
916204861Sdes		       unsigned char *signature,
917204861Sdes		       unsigned long signature_len));
918204861Sdes_CK_DECLARE_FUNCTION (C_VerifyRecoverInit,
919204861Sdes		      (ck_session_handle_t session,
920204861Sdes		       struct ck_mechanism *mechanism,
921204861Sdes		       ck_object_handle_t key));
922204861Sdes_CK_DECLARE_FUNCTION (C_VerifyRecover,
923204861Sdes		      (ck_session_handle_t session,
924204861Sdes		       unsigned char *signature,
925204861Sdes		       unsigned long signature_len,
926204861Sdes		       unsigned char *data,
927204861Sdes		       unsigned long *data_len));
928204861Sdes
929204861Sdes_CK_DECLARE_FUNCTION (C_DigestEncryptUpdate,
930204861Sdes		      (ck_session_handle_t session,
931204861Sdes		       unsigned char *part, unsigned long part_len,
932204861Sdes		       unsigned char *encrypted_part,
933204861Sdes		       unsigned long *encrypted_part_len));
934204861Sdes_CK_DECLARE_FUNCTION (C_DecryptDigestUpdate,
935204861Sdes		      (ck_session_handle_t session,
936204861Sdes		       unsigned char *encrypted_part,
937204861Sdes		       unsigned long encrypted_part_len,
938204861Sdes		       unsigned char *part,
939204861Sdes		       unsigned long *part_len));
940204861Sdes_CK_DECLARE_FUNCTION (C_SignEncryptUpdate,
941204861Sdes		      (ck_session_handle_t session,
942204861Sdes		       unsigned char *part, unsigned long part_len,
943204861Sdes		       unsigned char *encrypted_part,
944204861Sdes		       unsigned long *encrypted_part_len));
945204861Sdes_CK_DECLARE_FUNCTION (C_DecryptVerifyUpdate,
946204861Sdes		      (ck_session_handle_t session,
947204861Sdes		       unsigned char *encrypted_part,
948204861Sdes		       unsigned long encrypted_part_len,
949204861Sdes		       unsigned char *part,
950204861Sdes		       unsigned long *part_len));
951204861Sdes
952204861Sdes_CK_DECLARE_FUNCTION (C_GenerateKey,
953204861Sdes		      (ck_session_handle_t session,
954204861Sdes		       struct ck_mechanism *mechanism,
955204861Sdes		       struct ck_attribute *templ,
956204861Sdes		       unsigned long count,
957204861Sdes		       ck_object_handle_t *key));
958204861Sdes_CK_DECLARE_FUNCTION (C_GenerateKeyPair,
959204861Sdes		      (ck_session_handle_t session,
960204861Sdes		       struct ck_mechanism *mechanism,
961204861Sdes		       struct ck_attribute *public_key_template,
962204861Sdes		       unsigned long public_key_attribute_count,
963204861Sdes		       struct ck_attribute *private_key_template,
964204861Sdes		       unsigned long private_key_attribute_count,
965204861Sdes		       ck_object_handle_t *public_key,
966204861Sdes		       ck_object_handle_t *private_key));
967204861Sdes_CK_DECLARE_FUNCTION (C_WrapKey,
968204861Sdes		      (ck_session_handle_t session,
969204861Sdes		       struct ck_mechanism *mechanism,
970204861Sdes		       ck_object_handle_t wrapping_key,
971204861Sdes		       ck_object_handle_t key,
972204861Sdes		       unsigned char *wrapped_key,
973204861Sdes		       unsigned long *wrapped_key_len));
974204861Sdes_CK_DECLARE_FUNCTION (C_UnwrapKey,
975204861Sdes		      (ck_session_handle_t session,
976204861Sdes		       struct ck_mechanism *mechanism,
977204861Sdes		       ck_object_handle_t unwrapping_key,
978204861Sdes		       unsigned char *wrapped_key,
979204861Sdes		       unsigned long wrapped_key_len,
980204861Sdes		       struct ck_attribute *templ,
981204861Sdes		       unsigned long attribute_count,
982204861Sdes		       ck_object_handle_t *key));
983204861Sdes_CK_DECLARE_FUNCTION (C_DeriveKey,
984204861Sdes		      (ck_session_handle_t session,
985204861Sdes		       struct ck_mechanism *mechanism,
986204861Sdes		       ck_object_handle_t base_key,
987204861Sdes		       struct ck_attribute *templ,
988204861Sdes		       unsigned long attribute_count,
989204861Sdes		       ck_object_handle_t *key));
990204861Sdes
991204861Sdes_CK_DECLARE_FUNCTION (C_SeedRandom,
992204861Sdes		      (ck_session_handle_t session, unsigned char *seed,
993204861Sdes		       unsigned long seed_len));
994204861Sdes_CK_DECLARE_FUNCTION (C_GenerateRandom,
995204861Sdes		      (ck_session_handle_t session,
996204861Sdes		       unsigned char *random_data,
997204861Sdes		       unsigned long random_len));
998204861Sdes
999204861Sdes_CK_DECLARE_FUNCTION (C_GetFunctionStatus, (ck_session_handle_t session));
1000204861Sdes_CK_DECLARE_FUNCTION (C_CancelFunction, (ck_session_handle_t session));
1001204861Sdes
1002204861Sdes
1003204861Sdesstruct ck_function_list
1004204861Sdes{
1005204861Sdes  struct ck_version version;
1006204861Sdes  CK_C_Initialize C_Initialize;
1007204861Sdes  CK_C_Finalize C_Finalize;
1008204861Sdes  CK_C_GetInfo C_GetInfo;
1009204861Sdes  CK_C_GetFunctionList C_GetFunctionList;
1010204861Sdes  CK_C_GetSlotList C_GetSlotList;
1011204861Sdes  CK_C_GetSlotInfo C_GetSlotInfo;
1012204861Sdes  CK_C_GetTokenInfo C_GetTokenInfo;
1013204861Sdes  CK_C_GetMechanismList C_GetMechanismList;
1014204861Sdes  CK_C_GetMechanismInfo C_GetMechanismInfo;
1015204861Sdes  CK_C_InitToken C_InitToken;
1016204861Sdes  CK_C_InitPIN C_InitPIN;
1017204861Sdes  CK_C_SetPIN C_SetPIN;
1018204861Sdes  CK_C_OpenSession C_OpenSession;
1019204861Sdes  CK_C_CloseSession C_CloseSession;
1020204861Sdes  CK_C_CloseAllSessions C_CloseAllSessions;
1021204861Sdes  CK_C_GetSessionInfo C_GetSessionInfo;
1022204861Sdes  CK_C_GetOperationState C_GetOperationState;
1023204861Sdes  CK_C_SetOperationState C_SetOperationState;
1024204861Sdes  CK_C_Login C_Login;
1025204861Sdes  CK_C_Logout C_Logout;
1026204861Sdes  CK_C_CreateObject C_CreateObject;
1027204861Sdes  CK_C_CopyObject C_CopyObject;
1028204861Sdes  CK_C_DestroyObject C_DestroyObject;
1029204861Sdes  CK_C_GetObjectSize C_GetObjectSize;
1030204861Sdes  CK_C_GetAttributeValue C_GetAttributeValue;
1031204861Sdes  CK_C_SetAttributeValue C_SetAttributeValue;
1032204861Sdes  CK_C_FindObjectsInit C_FindObjectsInit;
1033204861Sdes  CK_C_FindObjects C_FindObjects;
1034204861Sdes  CK_C_FindObjectsFinal C_FindObjectsFinal;
1035204861Sdes  CK_C_EncryptInit C_EncryptInit;
1036204861Sdes  CK_C_Encrypt C_Encrypt;
1037204861Sdes  CK_C_EncryptUpdate C_EncryptUpdate;
1038204861Sdes  CK_C_EncryptFinal C_EncryptFinal;
1039204861Sdes  CK_C_DecryptInit C_DecryptInit;
1040204861Sdes  CK_C_Decrypt C_Decrypt;
1041204861Sdes  CK_C_DecryptUpdate C_DecryptUpdate;
1042204861Sdes  CK_C_DecryptFinal C_DecryptFinal;
1043204861Sdes  CK_C_DigestInit C_DigestInit;
1044204861Sdes  CK_C_Digest C_Digest;
1045204861Sdes  CK_C_DigestUpdate C_DigestUpdate;
1046204861Sdes  CK_C_DigestKey C_DigestKey;
1047204861Sdes  CK_C_DigestFinal C_DigestFinal;
1048204861Sdes  CK_C_SignInit C_SignInit;
1049204861Sdes  CK_C_Sign C_Sign;
1050204861Sdes  CK_C_SignUpdate C_SignUpdate;
1051204861Sdes  CK_C_SignFinal C_SignFinal;
1052204861Sdes  CK_C_SignRecoverInit C_SignRecoverInit;
1053204861Sdes  CK_C_SignRecover C_SignRecover;
1054204861Sdes  CK_C_VerifyInit C_VerifyInit;
1055204861Sdes  CK_C_Verify C_Verify;
1056204861Sdes  CK_C_VerifyUpdate C_VerifyUpdate;
1057204861Sdes  CK_C_VerifyFinal C_VerifyFinal;
1058204861Sdes  CK_C_VerifyRecoverInit C_VerifyRecoverInit;
1059204861Sdes  CK_C_VerifyRecover C_VerifyRecover;
1060204861Sdes  CK_C_DigestEncryptUpdate C_DigestEncryptUpdate;
1061204861Sdes  CK_C_DecryptDigestUpdate C_DecryptDigestUpdate;
1062204861Sdes  CK_C_SignEncryptUpdate C_SignEncryptUpdate;
1063204861Sdes  CK_C_DecryptVerifyUpdate C_DecryptVerifyUpdate;
1064204861Sdes  CK_C_GenerateKey C_GenerateKey;
1065204861Sdes  CK_C_GenerateKeyPair C_GenerateKeyPair;
1066204861Sdes  CK_C_WrapKey C_WrapKey;
1067204861Sdes  CK_C_UnwrapKey C_UnwrapKey;
1068204861Sdes  CK_C_DeriveKey C_DeriveKey;
1069204861Sdes  CK_C_SeedRandom C_SeedRandom;
1070204861Sdes  CK_C_GenerateRandom C_GenerateRandom;
1071204861Sdes  CK_C_GetFunctionStatus C_GetFunctionStatus;
1072204861Sdes  CK_C_CancelFunction C_CancelFunction;
1073204861Sdes  CK_C_WaitForSlotEvent C_WaitForSlotEvent;
1074204861Sdes};
1075204861Sdes
1076204861Sdes
1077204861Sdestypedef ck_rv_t (*ck_createmutex_t) (void **mutex);
1078204861Sdestypedef ck_rv_t (*ck_destroymutex_t) (void *mutex);
1079204861Sdestypedef ck_rv_t (*ck_lockmutex_t) (void *mutex);
1080204861Sdestypedef ck_rv_t (*ck_unlockmutex_t) (void *mutex);
1081204861Sdes
1082204861Sdes
1083204861Sdesstruct ck_c_initialize_args
1084204861Sdes{
1085204861Sdes  ck_createmutex_t create_mutex;
1086204861Sdes  ck_destroymutex_t destroy_mutex;
1087204861Sdes  ck_lockmutex_t lock_mutex;
1088204861Sdes  ck_unlockmutex_t unlock_mutex;
1089204861Sdes  ck_flags_t flags;
1090204861Sdes  void *reserved;
1091204861Sdes};
1092204861Sdes
1093204861Sdes
1094204861Sdes#define CKF_LIBRARY_CANT_CREATE_OS_THREADS	(1 << 0)
1095204861Sdes#define CKF_OS_LOCKING_OK			(1 << 1)
1096204861Sdes
1097204861Sdes#define CKR_OK					(0)
1098204861Sdes#define CKR_CANCEL				(1)
1099204861Sdes#define CKR_HOST_MEMORY				(2)
1100204861Sdes#define CKR_SLOT_ID_INVALID			(3)
1101204861Sdes#define CKR_GENERAL_ERROR			(5)
1102204861Sdes#define CKR_FUNCTION_FAILED			(6)
1103204861Sdes#define CKR_ARGUMENTS_BAD			(7)
1104204861Sdes#define CKR_NO_EVENT				(8)
1105204861Sdes#define CKR_NEED_TO_CREATE_THREADS		(9)
1106204861Sdes#define CKR_CANT_LOCK				(0xa)
1107204861Sdes#define CKR_ATTRIBUTE_READ_ONLY			(0x10)
1108204861Sdes#define CKR_ATTRIBUTE_SENSITIVE			(0x11)
1109204861Sdes#define CKR_ATTRIBUTE_TYPE_INVALID		(0x12)
1110204861Sdes#define CKR_ATTRIBUTE_VALUE_INVALID		(0x13)
1111204861Sdes#define CKR_DATA_INVALID			(0x20)
1112204861Sdes#define CKR_DATA_LEN_RANGE			(0x21)
1113204861Sdes#define CKR_DEVICE_ERROR			(0x30)
1114204861Sdes#define CKR_DEVICE_MEMORY			(0x31)
1115204861Sdes#define CKR_DEVICE_REMOVED			(0x32)
1116204861Sdes#define CKR_ENCRYPTED_DATA_INVALID		(0x40)
1117204861Sdes#define CKR_ENCRYPTED_DATA_LEN_RANGE		(0x41)
1118204861Sdes#define CKR_FUNCTION_CANCELED			(0x50)
1119204861Sdes#define CKR_FUNCTION_NOT_PARALLEL		(0x51)
1120204861Sdes#define CKR_FUNCTION_NOT_SUPPORTED		(0x54)
1121204861Sdes#define CKR_KEY_HANDLE_INVALID			(0x60)
1122204861Sdes#define CKR_KEY_SIZE_RANGE			(0x62)
1123204861Sdes#define CKR_KEY_TYPE_INCONSISTENT		(0x63)
1124204861Sdes#define CKR_KEY_NOT_NEEDED			(0x64)
1125204861Sdes#define CKR_KEY_CHANGED				(0x65)
1126204861Sdes#define CKR_KEY_NEEDED				(0x66)
1127204861Sdes#define CKR_KEY_INDIGESTIBLE			(0x67)
1128204861Sdes#define CKR_KEY_FUNCTION_NOT_PERMITTED		(0x68)
1129204861Sdes#define CKR_KEY_NOT_WRAPPABLE			(0x69)
1130204861Sdes#define CKR_KEY_UNEXTRACTABLE			(0x6a)
1131204861Sdes#define CKR_MECHANISM_INVALID			(0x70)
1132204861Sdes#define CKR_MECHANISM_PARAM_INVALID		(0x71)
1133204861Sdes#define CKR_OBJECT_HANDLE_INVALID		(0x82)
1134204861Sdes#define CKR_OPERATION_ACTIVE			(0x90)
1135204861Sdes#define CKR_OPERATION_NOT_INITIALIZED		(0x91)
1136204861Sdes#define CKR_PIN_INCORRECT			(0xa0)
1137204861Sdes#define CKR_PIN_INVALID				(0xa1)
1138204861Sdes#define CKR_PIN_LEN_RANGE			(0xa2)
1139204861Sdes#define CKR_PIN_EXPIRED				(0xa3)
1140204861Sdes#define CKR_PIN_LOCKED				(0xa4)
1141204861Sdes#define CKR_SESSION_CLOSED			(0xb0)
1142204861Sdes#define CKR_SESSION_COUNT			(0xb1)
1143204861Sdes#define CKR_SESSION_HANDLE_INVALID		(0xb3)
1144204861Sdes#define CKR_SESSION_PARALLEL_NOT_SUPPORTED	(0xb4)
1145204861Sdes#define CKR_SESSION_READ_ONLY			(0xb5)
1146204861Sdes#define CKR_SESSION_EXISTS			(0xb6)
1147204861Sdes#define CKR_SESSION_READ_ONLY_EXISTS		(0xb7)
1148204861Sdes#define CKR_SESSION_READ_WRITE_SO_EXISTS	(0xb8)
1149204861Sdes#define CKR_SIGNATURE_INVALID			(0xc0)
1150204861Sdes#define CKR_SIGNATURE_LEN_RANGE			(0xc1)
1151204861Sdes#define CKR_TEMPLATE_INCOMPLETE			(0xd0)
1152204861Sdes#define CKR_TEMPLATE_INCONSISTENT		(0xd1)
1153204861Sdes#define CKR_TOKEN_NOT_PRESENT			(0xe0)
1154204861Sdes#define CKR_TOKEN_NOT_RECOGNIZED		(0xe1)
1155204861Sdes#define CKR_TOKEN_WRITE_PROTECTED		(0xe2)
1156204861Sdes#define	CKR_UNWRAPPING_KEY_HANDLE_INVALID	(0xf0)
1157204861Sdes#define CKR_UNWRAPPING_KEY_SIZE_RANGE		(0xf1)
1158204861Sdes#define CKR_UNWRAPPING_KEY_TYPE_INCONSISTENT	(0xf2)
1159204861Sdes#define CKR_USER_ALREADY_LOGGED_IN		(0x100)
1160204861Sdes#define CKR_USER_NOT_LOGGED_IN			(0x101)
1161204861Sdes#define CKR_USER_PIN_NOT_INITIALIZED		(0x102)
1162204861Sdes#define CKR_USER_TYPE_INVALID			(0x103)
1163204861Sdes#define CKR_USER_ANOTHER_ALREADY_LOGGED_IN	(0x104)
1164204861Sdes#define CKR_USER_TOO_MANY_TYPES			(0x105)
1165204861Sdes#define CKR_WRAPPED_KEY_INVALID			(0x110)
1166204861Sdes#define CKR_WRAPPED_KEY_LEN_RANGE		(0x112)
1167204861Sdes#define CKR_WRAPPING_KEY_HANDLE_INVALID		(0x113)
1168204861Sdes#define CKR_WRAPPING_KEY_SIZE_RANGE		(0x114)
1169204861Sdes#define CKR_WRAPPING_KEY_TYPE_INCONSISTENT	(0x115)
1170204861Sdes#define CKR_RANDOM_SEED_NOT_SUPPORTED		(0x120)
1171204861Sdes#define CKR_RANDOM_NO_RNG			(0x121)
1172204861Sdes#define CKR_DOMAIN_PARAMS_INVALID		(0x130)
1173204861Sdes#define CKR_BUFFER_TOO_SMALL			(0x150)
1174204861Sdes#define CKR_SAVED_STATE_INVALID			(0x160)
1175204861Sdes#define CKR_INFORMATION_SENSITIVE		(0x170)
1176204861Sdes#define CKR_STATE_UNSAVEABLE			(0x180)
1177204861Sdes#define CKR_CRYPTOKI_NOT_INITIALIZED		(0x190)
1178204861Sdes#define CKR_CRYPTOKI_ALREADY_INITIALIZED	(0x191)
1179204861Sdes#define CKR_MUTEX_BAD				(0x1a0)
1180204861Sdes#define CKR_MUTEX_NOT_LOCKED			(0x1a1)
1181204861Sdes#define CKR_FUNCTION_REJECTED			(0x200)
1182262566Sdes#define CKR_VENDOR_DEFINED			(1U << 31)
1183204861Sdes
1184204861Sdes
1185204861Sdes
1186204861Sdes/* Compatibility layer.  */
1187204861Sdes
1188204861Sdes#ifdef CRYPTOKI_COMPAT
1189204861Sdes
1190204861Sdes#undef CK_DEFINE_FUNCTION
1191204861Sdes#define CK_DEFINE_FUNCTION(retval, name) retval CK_SPEC name
1192204861Sdes
1193204861Sdes/* For NULL.  */
1194204861Sdes#include <stddef.h>
1195204861Sdes
1196204861Sdestypedef unsigned char CK_BYTE;
1197204861Sdestypedef unsigned char CK_CHAR;
1198204861Sdestypedef unsigned char CK_UTF8CHAR;
1199204861Sdestypedef unsigned char CK_BBOOL;
1200204861Sdestypedef unsigned long int CK_ULONG;
1201204861Sdestypedef long int CK_LONG;
1202204861Sdestypedef CK_BYTE *CK_BYTE_PTR;
1203204861Sdestypedef CK_CHAR *CK_CHAR_PTR;
1204204861Sdestypedef CK_UTF8CHAR *CK_UTF8CHAR_PTR;
1205204861Sdestypedef CK_ULONG *CK_ULONG_PTR;
1206204861Sdestypedef void *CK_VOID_PTR;
1207204861Sdestypedef void **CK_VOID_PTR_PTR;
1208204861Sdes#define CK_FALSE 0
1209204861Sdes#define CK_TRUE 1
1210204861Sdes#ifndef CK_DISABLE_TRUE_FALSE
1211204861Sdes#ifndef FALSE
1212204861Sdes#define FALSE 0
1213204861Sdes#endif
1214204861Sdes#ifndef TRUE
1215204861Sdes#define TRUE 1
1216204861Sdes#endif
1217204861Sdes#endif
1218204861Sdes
1219204861Sdestypedef struct ck_version CK_VERSION;
1220204861Sdestypedef struct ck_version *CK_VERSION_PTR;
1221204861Sdes
1222204861Sdestypedef struct ck_info CK_INFO;
1223204861Sdestypedef struct ck_info *CK_INFO_PTR;
1224204861Sdes
1225204861Sdestypedef ck_slot_id_t *CK_SLOT_ID_PTR;
1226204861Sdes
1227204861Sdestypedef struct ck_slot_info CK_SLOT_INFO;
1228204861Sdestypedef struct ck_slot_info *CK_SLOT_INFO_PTR;
1229204861Sdes
1230204861Sdestypedef struct ck_token_info CK_TOKEN_INFO;
1231204861Sdestypedef struct ck_token_info *CK_TOKEN_INFO_PTR;
1232204861Sdes
1233204861Sdestypedef ck_session_handle_t *CK_SESSION_HANDLE_PTR;
1234204861Sdes
1235204861Sdestypedef struct ck_session_info CK_SESSION_INFO;
1236204861Sdestypedef struct ck_session_info *CK_SESSION_INFO_PTR;
1237204861Sdes
1238204861Sdestypedef ck_object_handle_t *CK_OBJECT_HANDLE_PTR;
1239204861Sdes
1240204861Sdestypedef ck_object_class_t *CK_OBJECT_CLASS_PTR;
1241204861Sdes
1242204861Sdestypedef struct ck_attribute CK_ATTRIBUTE;
1243204861Sdestypedef struct ck_attribute *CK_ATTRIBUTE_PTR;
1244204861Sdes
1245204861Sdestypedef struct ck_date CK_DATE;
1246204861Sdestypedef struct ck_date *CK_DATE_PTR;
1247204861Sdes
1248204861Sdestypedef ck_mechanism_type_t *CK_MECHANISM_TYPE_PTR;
1249204861Sdes
1250204861Sdestypedef struct ck_mechanism CK_MECHANISM;
1251204861Sdestypedef struct ck_mechanism *CK_MECHANISM_PTR;
1252204861Sdes
1253204861Sdestypedef struct ck_mechanism_info CK_MECHANISM_INFO;
1254204861Sdestypedef struct ck_mechanism_info *CK_MECHANISM_INFO_PTR;
1255204861Sdes
1256204861Sdestypedef struct ck_function_list CK_FUNCTION_LIST;
1257204861Sdestypedef struct ck_function_list *CK_FUNCTION_LIST_PTR;
1258204861Sdestypedef struct ck_function_list **CK_FUNCTION_LIST_PTR_PTR;
1259204861Sdes
1260204861Sdestypedef struct ck_c_initialize_args CK_C_INITIALIZE_ARGS;
1261204861Sdestypedef struct ck_c_initialize_args *CK_C_INITIALIZE_ARGS_PTR;
1262204861Sdes
1263204861Sdes#define NULL_PTR NULL
1264204861Sdes
1265204861Sdes/* Delete the helper macros defined at the top of the file.  */
1266204861Sdes#undef ck_flags_t
1267204861Sdes#undef ck_version
1268204861Sdes
1269204861Sdes#undef ck_info
1270204861Sdes#undef cryptoki_version
1271204861Sdes#undef manufacturer_id
1272204861Sdes#undef library_description
1273204861Sdes#undef library_version
1274204861Sdes
1275204861Sdes#undef ck_notification_t
1276204861Sdes#undef ck_slot_id_t
1277204861Sdes
1278204861Sdes#undef ck_slot_info
1279204861Sdes#undef slot_description
1280204861Sdes#undef hardware_version
1281204861Sdes#undef firmware_version
1282204861Sdes
1283204861Sdes#undef ck_token_info
1284204861Sdes#undef serial_number
1285204861Sdes#undef max_session_count
1286204861Sdes#undef session_count
1287204861Sdes#undef max_rw_session_count
1288204861Sdes#undef rw_session_count
1289204861Sdes#undef max_pin_len
1290204861Sdes#undef min_pin_len
1291204861Sdes#undef total_public_memory
1292204861Sdes#undef free_public_memory
1293204861Sdes#undef total_private_memory
1294204861Sdes#undef free_private_memory
1295204861Sdes#undef utc_time
1296204861Sdes
1297204861Sdes#undef ck_session_handle_t
1298204861Sdes#undef ck_user_type_t
1299204861Sdes#undef ck_state_t
1300204861Sdes
1301204861Sdes#undef ck_session_info
1302204861Sdes#undef slot_id
1303204861Sdes#undef device_error
1304204861Sdes
1305204861Sdes#undef ck_object_handle_t
1306204861Sdes#undef ck_object_class_t
1307204861Sdes#undef ck_hw_feature_type_t
1308204861Sdes#undef ck_key_type_t
1309204861Sdes#undef ck_certificate_type_t
1310204861Sdes#undef ck_attribute_type_t
1311204861Sdes
1312204861Sdes#undef ck_attribute
1313204861Sdes#undef value
1314204861Sdes#undef value_len
1315204861Sdes
1316204861Sdes#undef ck_date
1317204861Sdes
1318204861Sdes#undef ck_mechanism_type_t
1319204861Sdes
1320204861Sdes#undef ck_mechanism
1321204861Sdes#undef parameter
1322204861Sdes#undef parameter_len
1323204861Sdes
1324204861Sdes#undef ck_mechanism_info
1325204861Sdes#undef min_key_size
1326204861Sdes#undef max_key_size
1327204861Sdes
1328204861Sdes#undef ck_rv_t
1329204861Sdes#undef ck_notify_t
1330204861Sdes
1331204861Sdes#undef ck_function_list
1332204861Sdes
1333204861Sdes#undef ck_createmutex_t
1334204861Sdes#undef ck_destroymutex_t
1335204861Sdes#undef ck_lockmutex_t
1336204861Sdes#undef ck_unlockmutex_t
1337204861Sdes
1338204861Sdes#undef ck_c_initialize_args
1339204861Sdes#undef create_mutex
1340204861Sdes#undef destroy_mutex
1341204861Sdes#undef lock_mutex
1342204861Sdes#undef unlock_mutex
1343204861Sdes#undef reserved
1344204861Sdes
1345204861Sdes#endif	/* CRYPTOKI_COMPAT */
1346204861Sdes
1347204861Sdes
1348204861Sdes/* System dependencies.  */
1349204861Sdes#if defined(_WIN32) || defined(CRYPTOKI_FORCE_WIN32)
1350204861Sdes#pragma pack(pop, cryptoki)
1351204861Sdes#endif
1352204861Sdes
1353204861Sdes#if defined(__cplusplus)
1354204861Sdes}
1355204861Sdes#endif
1356204861Sdes
1357204861Sdes#endif	/* PKCS11_H */
1358