xref: /freebsd-src/crypto/heimdal/lib/hx509/ref/pkcs11.h (revision 4fe54d7c6acb302aacc6ac18798804b26c882c13)
1*c19800e8SDoug Rabson /* pkcs11.h
2*c19800e8SDoug Rabson    Copyright 2006, 2007 g10 Code GmbH
3*c19800e8SDoug Rabson    Copyright 2006 Andreas Jellinghaus
4*c19800e8SDoug Rabson 
5*c19800e8SDoug Rabson    This file is free software; as a special exception the author gives
6*c19800e8SDoug Rabson    unlimited permission to copy and/or distribute it, with or without
7*c19800e8SDoug Rabson    modifications, as long as this notice is preserved.
8*c19800e8SDoug Rabson 
9*c19800e8SDoug Rabson    This file is distributed in the hope that it will be useful, but
10*c19800e8SDoug Rabson    WITHOUT ANY WARRANTY, to the extent permitted by law; without even
11*c19800e8SDoug Rabson    the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR
12*c19800e8SDoug Rabson    PURPOSE.  */
13*c19800e8SDoug Rabson 
14*c19800e8SDoug Rabson /* Please submit changes back to the Scute project at
15*c19800e8SDoug Rabson    http://www.scute.org/ (or send them to marcus@g10code.com), so that
16*c19800e8SDoug Rabson    they can be picked up by other projects from there as well.  */
17*c19800e8SDoug Rabson 
18*c19800e8SDoug Rabson /* This file is a modified implementation of the PKCS #11 standard by
19*c19800e8SDoug Rabson    RSA Security Inc.  It is mostly a drop-in replacement, with the
20*c19800e8SDoug Rabson    following change:
21*c19800e8SDoug Rabson 
22*c19800e8SDoug Rabson    This header file does not require any macro definitions by the user
23*c19800e8SDoug Rabson    (like CK_DEFINE_FUNCTION etc).  In fact, it defines those macros
24*c19800e8SDoug Rabson    for you (if useful, some are missing, let me know if you need
25*c19800e8SDoug Rabson    more).
26*c19800e8SDoug Rabson 
27*c19800e8SDoug Rabson    There is an additional API available that does comply better to the
28*c19800e8SDoug Rabson    GNU coding standard.  It can be switched on by defining
29*c19800e8SDoug Rabson    CRYPTOKI_GNU before including this header file.  For this, the
30*c19800e8SDoug Rabson    following changes are made to the specification:
31*c19800e8SDoug Rabson 
32*c19800e8SDoug Rabson    All structure types are changed to a "struct ck_foo" where CK_FOO
33*c19800e8SDoug Rabson    is the type name in PKCS #11.
34*c19800e8SDoug Rabson 
35*c19800e8SDoug Rabson    All non-structure types are changed to ck_foo_t where CK_FOO is the
36*c19800e8SDoug Rabson    lowercase version of the type name in PKCS #11.  The basic types
37*c19800e8SDoug Rabson    (CK_ULONG et al.) are removed without substitute.
38*c19800e8SDoug Rabson 
39*c19800e8SDoug Rabson    All members of structures are modified in the following way: Type
40*c19800e8SDoug Rabson    indication prefixes are removed, and underscore characters are
41*c19800e8SDoug Rabson    inserted before words.  Then the result is lowercased.
42*c19800e8SDoug Rabson 
43*c19800e8SDoug Rabson    Note that function names are still in the original case, as they
44*c19800e8SDoug Rabson    need for ABI compatibility.
45*c19800e8SDoug Rabson 
46*c19800e8SDoug Rabson    CK_FALSE, CK_TRUE and NULL_PTR are removed without substitute.  Use
47*c19800e8SDoug Rabson    <stdbool.h>.
48*c19800e8SDoug Rabson 
49*c19800e8SDoug Rabson    If CRYPTOKI_COMPAT is defined before including this header file,
50*c19800e8SDoug Rabson    then none of the API changes above take place, and the API is the
51*c19800e8SDoug Rabson    one defined by the PKCS #11 standard.  */
52*c19800e8SDoug Rabson 
53*c19800e8SDoug Rabson #ifndef PKCS11_H
54*c19800e8SDoug Rabson #define PKCS11_H 1
55*c19800e8SDoug Rabson 
56*c19800e8SDoug Rabson #if defined(__cplusplus)
57*c19800e8SDoug Rabson extern "C" {
58*c19800e8SDoug Rabson #endif
59*c19800e8SDoug Rabson 
60*c19800e8SDoug Rabson 
61*c19800e8SDoug Rabson /* The version of cryptoki we implement.  The revision is changed with
62*c19800e8SDoug Rabson    each modification of this file.  If you do not use the "official"
63*c19800e8SDoug Rabson    version of this file, please consider deleting the revision macro
64*c19800e8SDoug Rabson    (you may use a macro with a different name to keep track of your
65*c19800e8SDoug Rabson    versions).  */
66*c19800e8SDoug Rabson #define CRYPTOKI_VERSION_MAJOR		2
67*c19800e8SDoug Rabson #define CRYPTOKI_VERSION_MINOR		20
68*c19800e8SDoug Rabson #define CRYPTOKI_VERSION_REVISION	6
69*c19800e8SDoug Rabson 
70*c19800e8SDoug Rabson 
71*c19800e8SDoug Rabson /* Compatibility interface is default, unless CRYPTOKI_GNU is
72*c19800e8SDoug Rabson    given.  */
73*c19800e8SDoug Rabson #ifndef CRYPTOKI_GNU
74*c19800e8SDoug Rabson #ifndef CRYPTOKI_COMPAT
75*c19800e8SDoug Rabson #define CRYPTOKI_COMPAT 1
76*c19800e8SDoug Rabson #endif
77*c19800e8SDoug Rabson #endif
78*c19800e8SDoug Rabson 
79*c19800e8SDoug Rabson /* System dependencies.  */
80*c19800e8SDoug Rabson 
81*c19800e8SDoug Rabson #if defined(_WIN32) || defined(CRYPTOKI_FORCE_WIN32)
82*c19800e8SDoug Rabson 
83*c19800e8SDoug Rabson /* There is a matching pop below.  */
84*c19800e8SDoug Rabson #pragma pack(push, cryptoki, 1)
85*c19800e8SDoug Rabson 
86*c19800e8SDoug Rabson #ifdef CRYPTOKI_EXPORTS
87*c19800e8SDoug Rabson #define CK_SPEC __declspec(dllexport)
88*c19800e8SDoug Rabson #else
89*c19800e8SDoug Rabson #define CK_SPEC __declspec(dllimport)
90*c19800e8SDoug Rabson #endif
91*c19800e8SDoug Rabson 
92*c19800e8SDoug Rabson #else
93*c19800e8SDoug Rabson 
94*c19800e8SDoug Rabson #define CK_SPEC
95*c19800e8SDoug Rabson 
96*c19800e8SDoug Rabson #endif
97*c19800e8SDoug Rabson 
98*c19800e8SDoug Rabson 
99*c19800e8SDoug Rabson #ifdef CRYPTOKI_COMPAT
100*c19800e8SDoug Rabson   /* If we are in compatibility mode, switch all exposed names to the
101*c19800e8SDoug Rabson      PKCS #11 variant.  There are corresponding #undefs below.  */
102*c19800e8SDoug Rabson 
103*c19800e8SDoug Rabson #define ck_flags_t CK_FLAGS
104*c19800e8SDoug Rabson #define ck_version _CK_VERSION
105*c19800e8SDoug Rabson 
106*c19800e8SDoug Rabson #define ck_info _CK_INFO
107*c19800e8SDoug Rabson #define cryptoki_version cryptokiVersion
108*c19800e8SDoug Rabson #define manufacturer_id manufacturerID
109*c19800e8SDoug Rabson #define library_description libraryDescription
110*c19800e8SDoug Rabson #define library_version libraryVersion
111*c19800e8SDoug Rabson 
112*c19800e8SDoug Rabson #define ck_notification_t CK_NOTIFICATION
113*c19800e8SDoug Rabson #define ck_slot_id_t CK_SLOT_ID
114*c19800e8SDoug Rabson 
115*c19800e8SDoug Rabson #define ck_slot_info _CK_SLOT_INFO
116*c19800e8SDoug Rabson #define slot_description slotDescription
117*c19800e8SDoug Rabson #define hardware_version hardwareVersion
118*c19800e8SDoug Rabson #define firmware_version firmwareVersion
119*c19800e8SDoug Rabson 
120*c19800e8SDoug Rabson #define ck_token_info _CK_TOKEN_INFO
121*c19800e8SDoug Rabson #define serial_number serialNumber
122*c19800e8SDoug Rabson #define max_session_count ulMaxSessionCount
123*c19800e8SDoug Rabson #define session_count ulSessionCount
124*c19800e8SDoug Rabson #define max_rw_session_count ulMaxRwSessionCount
125*c19800e8SDoug Rabson #define rw_session_count ulRwSessionCount
126*c19800e8SDoug Rabson #define max_pin_len ulMaxPinLen
127*c19800e8SDoug Rabson #define min_pin_len ulMinPinLen
128*c19800e8SDoug Rabson #define total_public_memory ulTotalPublicMemory
129*c19800e8SDoug Rabson #define free_public_memory ulFreePublicMemory
130*c19800e8SDoug Rabson #define total_private_memory ulTotalPrivateMemory
131*c19800e8SDoug Rabson #define free_private_memory ulFreePrivateMemory
132*c19800e8SDoug Rabson #define utc_time utcTime
133*c19800e8SDoug Rabson 
134*c19800e8SDoug Rabson #define ck_session_handle_t CK_SESSION_HANDLE
135*c19800e8SDoug Rabson #define ck_user_type_t CK_USER_TYPE
136*c19800e8SDoug Rabson #define ck_state_t CK_STATE
137*c19800e8SDoug Rabson 
138*c19800e8SDoug Rabson #define ck_session_info _CK_SESSION_INFO
139*c19800e8SDoug Rabson #define slot_id slotID
140*c19800e8SDoug Rabson #define device_error ulDeviceError
141*c19800e8SDoug Rabson 
142*c19800e8SDoug Rabson #define ck_object_handle_t CK_OBJECT_HANDLE
143*c19800e8SDoug Rabson #define ck_object_class_t CK_OBJECT_CLASS
144*c19800e8SDoug Rabson #define ck_hw_feature_type_t CK_HW_FEATURE_TYPE
145*c19800e8SDoug Rabson #define ck_key_type_t CK_KEY_TYPE
146*c19800e8SDoug Rabson #define ck_certificate_type_t CK_CERTIFICATE_TYPE
147*c19800e8SDoug Rabson #define ck_attribute_type_t CK_ATTRIBUTE_TYPE
148*c19800e8SDoug Rabson 
149*c19800e8SDoug Rabson #define ck_attribute _CK_ATTRIBUTE
150*c19800e8SDoug Rabson #define value pValue
151*c19800e8SDoug Rabson #define value_len ulValueLen
152*c19800e8SDoug Rabson 
153*c19800e8SDoug Rabson #define ck_date _CK_DATE
154*c19800e8SDoug Rabson 
155*c19800e8SDoug Rabson #define ck_mechanism_type_t CK_MECHANISM_TYPE
156*c19800e8SDoug Rabson 
157*c19800e8SDoug Rabson #define ck_mechanism _CK_MECHANISM
158*c19800e8SDoug Rabson #define parameter pParameter
159*c19800e8SDoug Rabson #define parameter_len ulParameterLen
160*c19800e8SDoug Rabson 
161*c19800e8SDoug Rabson #define ck_mechanism_info _CK_MECHANISM_INFO
162*c19800e8SDoug Rabson #define min_key_size ulMinKeySize
163*c19800e8SDoug Rabson #define max_key_size ulMaxKeySize
164*c19800e8SDoug Rabson 
165*c19800e8SDoug Rabson #define ck_rv_t CK_RV
166*c19800e8SDoug Rabson #define ck_notify_t CK_NOTIFY
167*c19800e8SDoug Rabson 
168*c19800e8SDoug Rabson #define ck_function_list _CK_FUNCTION_LIST
169*c19800e8SDoug Rabson 
170*c19800e8SDoug Rabson #define ck_createmutex_t CK_CREATEMUTEX
171*c19800e8SDoug Rabson #define ck_destroymutex_t CK_DESTROYMUTEX
172*c19800e8SDoug Rabson #define ck_lockmutex_t CK_LOCKMUTEX
173*c19800e8SDoug Rabson #define ck_unlockmutex_t CK_UNLOCKMUTEX
174*c19800e8SDoug Rabson 
175*c19800e8SDoug Rabson #define ck_c_initialize_args _CK_C_INITIALIZE_ARGS
176*c19800e8SDoug Rabson #define create_mutex CreateMutex
177*c19800e8SDoug Rabson #define destroy_mutex DestroyMutex
178*c19800e8SDoug Rabson #define lock_mutex LockMutex
179*c19800e8SDoug Rabson #define unlock_mutex UnlockMutex
180*c19800e8SDoug Rabson #define reserved pReserved
181*c19800e8SDoug Rabson 
182*c19800e8SDoug Rabson #endif	/* CRYPTOKI_COMPAT */
183*c19800e8SDoug Rabson 
184*c19800e8SDoug Rabson 
185*c19800e8SDoug Rabson 
186*c19800e8SDoug Rabson typedef unsigned long ck_flags_t;
187*c19800e8SDoug Rabson 
188*c19800e8SDoug Rabson struct ck_version
189*c19800e8SDoug Rabson {
190*c19800e8SDoug Rabson   unsigned char major;
191*c19800e8SDoug Rabson   unsigned char minor;
192*c19800e8SDoug Rabson };
193*c19800e8SDoug Rabson 
194*c19800e8SDoug Rabson 
195*c19800e8SDoug Rabson struct ck_info
196*c19800e8SDoug Rabson {
197*c19800e8SDoug Rabson   struct ck_version cryptoki_version;
198*c19800e8SDoug Rabson   unsigned char manufacturer_id[32];
199*c19800e8SDoug Rabson   ck_flags_t flags;
200*c19800e8SDoug Rabson   unsigned char library_description[32];
201*c19800e8SDoug Rabson   struct ck_version library_version;
202*c19800e8SDoug Rabson };
203*c19800e8SDoug Rabson 
204*c19800e8SDoug Rabson 
205*c19800e8SDoug Rabson typedef unsigned long ck_notification_t;
206*c19800e8SDoug Rabson 
207*c19800e8SDoug Rabson #define CKN_SURRENDER	(0)
208*c19800e8SDoug Rabson 
209*c19800e8SDoug Rabson 
210*c19800e8SDoug Rabson typedef unsigned long ck_slot_id_t;
211*c19800e8SDoug Rabson 
212*c19800e8SDoug Rabson 
213*c19800e8SDoug Rabson struct ck_slot_info
214*c19800e8SDoug Rabson {
215*c19800e8SDoug Rabson   unsigned char slot_description[64];
216*c19800e8SDoug Rabson   unsigned char manufacturer_id[32];
217*c19800e8SDoug Rabson   ck_flags_t flags;
218*c19800e8SDoug Rabson   struct ck_version hardware_version;
219*c19800e8SDoug Rabson   struct ck_version firmware_version;
220*c19800e8SDoug Rabson };
221*c19800e8SDoug Rabson 
222*c19800e8SDoug Rabson 
223*c19800e8SDoug Rabson #define CKF_TOKEN_PRESENT	(1 << 0)
224*c19800e8SDoug Rabson #define CKF_REMOVABLE_DEVICE	(1 << 1)
225*c19800e8SDoug Rabson #define CKF_HW_SLOT		(1 << 2)
226*c19800e8SDoug Rabson #define CKF_ARRAY_ATTRIBUTE	(1 << 30)
227*c19800e8SDoug Rabson 
228*c19800e8SDoug Rabson 
229*c19800e8SDoug Rabson struct ck_token_info
230*c19800e8SDoug Rabson {
231*c19800e8SDoug Rabson   unsigned char label[32];
232*c19800e8SDoug Rabson   unsigned char manufacturer_id[32];
233*c19800e8SDoug Rabson   unsigned char model[16];
234*c19800e8SDoug Rabson   unsigned char serial_number[16];
235*c19800e8SDoug Rabson   ck_flags_t flags;
236*c19800e8SDoug Rabson   unsigned long max_session_count;
237*c19800e8SDoug Rabson   unsigned long session_count;
238*c19800e8SDoug Rabson   unsigned long max_rw_session_count;
239*c19800e8SDoug Rabson   unsigned long rw_session_count;
240*c19800e8SDoug Rabson   unsigned long max_pin_len;
241*c19800e8SDoug Rabson   unsigned long min_pin_len;
242*c19800e8SDoug Rabson   unsigned long total_public_memory;
243*c19800e8SDoug Rabson   unsigned long free_public_memory;
244*c19800e8SDoug Rabson   unsigned long total_private_memory;
245*c19800e8SDoug Rabson   unsigned long free_private_memory;
246*c19800e8SDoug Rabson   struct ck_version hardware_version;
247*c19800e8SDoug Rabson   struct ck_version firmware_version;
248*c19800e8SDoug Rabson   unsigned char utc_time[16];
249*c19800e8SDoug Rabson };
250*c19800e8SDoug Rabson 
251*c19800e8SDoug Rabson 
252*c19800e8SDoug Rabson #define CKF_RNG					(1 << 0)
253*c19800e8SDoug Rabson #define CKF_WRITE_PROTECTED			(1 << 1)
254*c19800e8SDoug Rabson #define CKF_LOGIN_REQUIRED			(1 << 2)
255*c19800e8SDoug Rabson #define CKF_USER_PIN_INITIALIZED		(1 << 3)
256*c19800e8SDoug Rabson #define CKF_RESTORE_KEY_NOT_NEEDED		(1 << 5)
257*c19800e8SDoug Rabson #define CKF_CLOCK_ON_TOKEN			(1 << 6)
258*c19800e8SDoug Rabson #define CKF_PROTECTED_AUTHENTICATION_PATH	(1 << 8)
259*c19800e8SDoug Rabson #define CKF_DUAL_CRYPTO_OPERATIONS		(1 << 9)
260*c19800e8SDoug Rabson #define CKF_TOKEN_INITIALIZED			(1 << 10)
261*c19800e8SDoug Rabson #define CKF_SECONDARY_AUTHENTICATION		(1 << 11)
262*c19800e8SDoug Rabson #define CKF_USER_PIN_COUNT_LOW			(1 << 16)
263*c19800e8SDoug Rabson #define CKF_USER_PIN_FINAL_TRY			(1 << 17)
264*c19800e8SDoug Rabson #define CKF_USER_PIN_LOCKED			(1 << 18)
265*c19800e8SDoug Rabson #define CKF_USER_PIN_TO_BE_CHANGED		(1 << 19)
266*c19800e8SDoug Rabson #define CKF_SO_PIN_COUNT_LOW			(1 << 20)
267*c19800e8SDoug Rabson #define CKF_SO_PIN_FINAL_TRY			(1 << 21)
268*c19800e8SDoug Rabson #define CKF_SO_PIN_LOCKED			(1 << 22)
269*c19800e8SDoug Rabson #define CKF_SO_PIN_TO_BE_CHANGED		(1 << 23)
270*c19800e8SDoug Rabson 
271*c19800e8SDoug Rabson #define CK_UNAVAILABLE_INFORMATION	((unsigned long) -1)
272*c19800e8SDoug Rabson #define CK_EFFECTIVELY_INFINITE		(0)
273*c19800e8SDoug Rabson 
274*c19800e8SDoug Rabson 
275*c19800e8SDoug Rabson typedef unsigned long ck_session_handle_t;
276*c19800e8SDoug Rabson 
277*c19800e8SDoug Rabson #define CK_INVALID_HANDLE	(0)
278*c19800e8SDoug Rabson 
279*c19800e8SDoug Rabson 
280*c19800e8SDoug Rabson typedef unsigned long ck_user_type_t;
281*c19800e8SDoug Rabson 
282*c19800e8SDoug Rabson #define CKU_SO			(0)
283*c19800e8SDoug Rabson #define CKU_USER		(1)
284*c19800e8SDoug Rabson #define CKU_CONTEXT_SPECIFIC	(2)
285*c19800e8SDoug Rabson 
286*c19800e8SDoug Rabson 
287*c19800e8SDoug Rabson typedef unsigned long ck_state_t;
288*c19800e8SDoug Rabson 
289*c19800e8SDoug Rabson #define CKS_RO_PUBLIC_SESSION	(0)
290*c19800e8SDoug Rabson #define CKS_RO_USER_FUNCTIONS	(1)
291*c19800e8SDoug Rabson #define CKS_RW_PUBLIC_SESSION	(2)
292*c19800e8SDoug Rabson #define CKS_RW_USER_FUNCTIONS	(3)
293*c19800e8SDoug Rabson #define CKS_RW_SO_FUNCTIONS	(4)
294*c19800e8SDoug Rabson 
295*c19800e8SDoug Rabson 
296*c19800e8SDoug Rabson struct ck_session_info
297*c19800e8SDoug Rabson {
298*c19800e8SDoug Rabson   ck_slot_id_t slot_id;
299*c19800e8SDoug Rabson   ck_state_t state;
300*c19800e8SDoug Rabson   ck_flags_t flags;
301*c19800e8SDoug Rabson   unsigned long device_error;
302*c19800e8SDoug Rabson };
303*c19800e8SDoug Rabson 
304*c19800e8SDoug Rabson #define CKF_RW_SESSION		(1 << 1)
305*c19800e8SDoug Rabson #define CKF_SERIAL_SESSION	(1 << 2)
306*c19800e8SDoug Rabson 
307*c19800e8SDoug Rabson 
308*c19800e8SDoug Rabson typedef unsigned long ck_object_handle_t;
309*c19800e8SDoug Rabson 
310*c19800e8SDoug Rabson 
311*c19800e8SDoug Rabson typedef unsigned long ck_object_class_t;
312*c19800e8SDoug Rabson 
313*c19800e8SDoug Rabson #define CKO_DATA		(0)
314*c19800e8SDoug Rabson #define CKO_CERTIFICATE		(1)
315*c19800e8SDoug Rabson #define CKO_PUBLIC_KEY		(2)
316*c19800e8SDoug Rabson #define CKO_PRIVATE_KEY		(3)
317*c19800e8SDoug Rabson #define CKO_SECRET_KEY		(4)
318*c19800e8SDoug Rabson #define CKO_HW_FEATURE		(5)
319*c19800e8SDoug Rabson #define CKO_DOMAIN_PARAMETERS	(6)
320*c19800e8SDoug Rabson #define CKO_MECHANISM		(7)
321*c19800e8SDoug Rabson #define CKO_VENDOR_DEFINED	((unsigned long) (1 << 31))
322*c19800e8SDoug Rabson 
323*c19800e8SDoug Rabson 
324*c19800e8SDoug Rabson typedef unsigned long ck_hw_feature_type_t;
325*c19800e8SDoug Rabson 
326*c19800e8SDoug Rabson #define CKH_MONOTONIC_COUNTER	(1)
327*c19800e8SDoug Rabson #define CKH_CLOCK		(2)
328*c19800e8SDoug Rabson #define CKH_USER_INTERFACE	(3)
329*c19800e8SDoug Rabson #define CKH_VENDOR_DEFINED	((unsigned long) (1 << 31))
330*c19800e8SDoug Rabson 
331*c19800e8SDoug Rabson 
332*c19800e8SDoug Rabson typedef unsigned long ck_key_type_t;
333*c19800e8SDoug Rabson 
334*c19800e8SDoug Rabson #define CKK_RSA			(0)
335*c19800e8SDoug Rabson #define CKK_DSA			(1)
336*c19800e8SDoug Rabson #define CKK_DH			(2)
337*c19800e8SDoug Rabson #define CKK_ECDSA		(3)
338*c19800e8SDoug Rabson #define CKK_EC			(3)
339*c19800e8SDoug Rabson #define CKK_X9_42_DH		(4)
340*c19800e8SDoug Rabson #define CKK_KEA			(5)
341*c19800e8SDoug Rabson #define CKK_GENERIC_SECRET	(0x10)
342*c19800e8SDoug Rabson #define CKK_RC2			(0x11)
343*c19800e8SDoug Rabson #define CKK_RC4			(0x12)
344*c19800e8SDoug Rabson #define CKK_DES			(0x13)
345*c19800e8SDoug Rabson #define CKK_DES2		(0x14)
346*c19800e8SDoug Rabson #define CKK_DES3		(0x15)
347*c19800e8SDoug Rabson #define CKK_CAST		(0x16)
348*c19800e8SDoug Rabson #define CKK_CAST3		(0x17)
349*c19800e8SDoug Rabson #define CKK_CAST128		(0x18)
350*c19800e8SDoug Rabson #define CKK_RC5			(0x19)
351*c19800e8SDoug Rabson #define CKK_IDEA		(0x1a)
352*c19800e8SDoug Rabson #define CKK_SKIPJACK		(0x1b)
353*c19800e8SDoug Rabson #define CKK_BATON		(0x1c)
354*c19800e8SDoug Rabson #define CKK_JUNIPER		(0x1d)
355*c19800e8SDoug Rabson #define CKK_CDMF		(0x1e)
356*c19800e8SDoug Rabson #define CKK_AES			(0x1f)
357*c19800e8SDoug Rabson #define CKK_BLOWFISH		(0x20)
358*c19800e8SDoug Rabson #define CKK_TWOFISH		(0x21)
359*c19800e8SDoug Rabson #define CKK_VENDOR_DEFINED	((unsigned long) (1 << 31))
360*c19800e8SDoug Rabson 
361*c19800e8SDoug Rabson 
362*c19800e8SDoug Rabson typedef unsigned long ck_certificate_type_t;
363*c19800e8SDoug Rabson 
364*c19800e8SDoug Rabson #define CKC_X_509		(0)
365*c19800e8SDoug Rabson #define CKC_X_509_ATTR_CERT	(1)
366*c19800e8SDoug Rabson #define CKC_WTLS		(2)
367*c19800e8SDoug Rabson #define CKC_VENDOR_DEFINED	((unsigned long) (1 << 31))
368*c19800e8SDoug Rabson 
369*c19800e8SDoug Rabson 
370*c19800e8SDoug Rabson typedef unsigned long ck_attribute_type_t;
371*c19800e8SDoug Rabson 
372*c19800e8SDoug Rabson #define CKA_CLASS			(0)
373*c19800e8SDoug Rabson #define CKA_TOKEN			(1)
374*c19800e8SDoug Rabson #define CKA_PRIVATE			(2)
375*c19800e8SDoug Rabson #define CKA_LABEL			(3)
376*c19800e8SDoug Rabson #define CKA_APPLICATION			(0x10)
377*c19800e8SDoug Rabson #define CKA_VALUE			(0x11)
378*c19800e8SDoug Rabson #define CKA_OBJECT_ID			(0x12)
379*c19800e8SDoug Rabson #define CKA_CERTIFICATE_TYPE		(0x80)
380*c19800e8SDoug Rabson #define CKA_ISSUER			(0x81)
381*c19800e8SDoug Rabson #define CKA_SERIAL_NUMBER		(0x82)
382*c19800e8SDoug Rabson #define CKA_AC_ISSUER			(0x83)
383*c19800e8SDoug Rabson #define CKA_OWNER			(0x84)
384*c19800e8SDoug Rabson #define CKA_ATTR_TYPES			(0x85)
385*c19800e8SDoug Rabson #define CKA_TRUSTED			(0x86)
386*c19800e8SDoug Rabson #define CKA_CERTIFICATE_CATEGORY	(0x87)
387*c19800e8SDoug Rabson #define CKA_JAVA_MIDP_SECURITY_DOMAIN	(0x88)
388*c19800e8SDoug Rabson #define CKA_URL				(0x89)
389*c19800e8SDoug Rabson #define CKA_HASH_OF_SUBJECT_PUBLIC_KEY	(0x8a)
390*c19800e8SDoug Rabson #define CKA_HASH_OF_ISSUER_PUBLIC_KEY	(0x8b)
391*c19800e8SDoug Rabson #define CKA_CHECK_VALUE			(0x90)
392*c19800e8SDoug Rabson #define CKA_KEY_TYPE			(0x100)
393*c19800e8SDoug Rabson #define CKA_SUBJECT			(0x101)
394*c19800e8SDoug Rabson #define CKA_ID				(0x102)
395*c19800e8SDoug Rabson #define CKA_SENSITIVE			(0x103)
396*c19800e8SDoug Rabson #define CKA_ENCRYPT			(0x104)
397*c19800e8SDoug Rabson #define CKA_DECRYPT			(0x105)
398*c19800e8SDoug Rabson #define CKA_WRAP			(0x106)
399*c19800e8SDoug Rabson #define CKA_UNWRAP			(0x107)
400*c19800e8SDoug Rabson #define CKA_SIGN			(0x108)
401*c19800e8SDoug Rabson #define CKA_SIGN_RECOVER		(0x109)
402*c19800e8SDoug Rabson #define CKA_VERIFY			(0x10a)
403*c19800e8SDoug Rabson #define CKA_VERIFY_RECOVER		(0x10b)
404*c19800e8SDoug Rabson #define CKA_DERIVE			(0x10c)
405*c19800e8SDoug Rabson #define CKA_START_DATE			(0x110)
406*c19800e8SDoug Rabson #define CKA_END_DATE			(0x111)
407*c19800e8SDoug Rabson #define CKA_MODULUS			(0x120)
408*c19800e8SDoug Rabson #define CKA_MODULUS_BITS		(0x121)
409*c19800e8SDoug Rabson #define CKA_PUBLIC_EXPONENT		(0x122)
410*c19800e8SDoug Rabson #define CKA_PRIVATE_EXPONENT		(0x123)
411*c19800e8SDoug Rabson #define CKA_PRIME_1			(0x124)
412*c19800e8SDoug Rabson #define CKA_PRIME_2			(0x125)
413*c19800e8SDoug Rabson #define CKA_EXPONENT_1			(0x126)
414*c19800e8SDoug Rabson #define CKA_EXPONENT_2			(0x127)
415*c19800e8SDoug Rabson #define CKA_COEFFICIENT			(0x128)
416*c19800e8SDoug Rabson #define CKA_PRIME			(0x130)
417*c19800e8SDoug Rabson #define CKA_SUBPRIME			(0x131)
418*c19800e8SDoug Rabson #define CKA_BASE			(0x132)
419*c19800e8SDoug Rabson #define CKA_PRIME_BITS			(0x133)
420*c19800e8SDoug Rabson #define CKA_SUB_PRIME_BITS		(0x134)
421*c19800e8SDoug Rabson #define CKA_VALUE_BITS			(0x160)
422*c19800e8SDoug Rabson #define CKA_VALUE_LEN			(0x161)
423*c19800e8SDoug Rabson #define CKA_EXTRACTABLE			(0x162)
424*c19800e8SDoug Rabson #define CKA_LOCAL			(0x163)
425*c19800e8SDoug Rabson #define CKA_NEVER_EXTRACTABLE		(0x164)
426*c19800e8SDoug Rabson #define CKA_ALWAYS_SENSITIVE		(0x165)
427*c19800e8SDoug Rabson #define CKA_KEY_GEN_MECHANISM		(0x166)
428*c19800e8SDoug Rabson #define CKA_MODIFIABLE			(0x170)
429*c19800e8SDoug Rabson #define CKA_ECDSA_PARAMS		(0x180)
430*c19800e8SDoug Rabson #define CKA_EC_PARAMS			(0x180)
431*c19800e8SDoug Rabson #define CKA_EC_POINT			(0x181)
432*c19800e8SDoug Rabson #define CKA_SECONDARY_AUTH		(0x200)
433*c19800e8SDoug Rabson #define CKA_AUTH_PIN_FLAGS		(0x201)
434*c19800e8SDoug Rabson #define CKA_ALWAYS_AUTHENTICATE		(0x202)
435*c19800e8SDoug Rabson #define CKA_WRAP_WITH_TRUSTED		(0x210)
436*c19800e8SDoug Rabson #define CKA_HW_FEATURE_TYPE		(0x300)
437*c19800e8SDoug Rabson #define CKA_RESET_ON_INIT		(0x301)
438*c19800e8SDoug Rabson #define CKA_HAS_RESET			(0x302)
439*c19800e8SDoug Rabson #define CKA_PIXEL_X			(0x400)
440*c19800e8SDoug Rabson #define CKA_PIXEL_Y			(0x401)
441*c19800e8SDoug Rabson #define CKA_RESOLUTION			(0x402)
442*c19800e8SDoug Rabson #define CKA_CHAR_ROWS			(0x403)
443*c19800e8SDoug Rabson #define CKA_CHAR_COLUMNS		(0x404)
444*c19800e8SDoug Rabson #define CKA_COLOR			(0x405)
445*c19800e8SDoug Rabson #define CKA_BITS_PER_PIXEL		(0x406)
446*c19800e8SDoug Rabson #define CKA_CHAR_SETS			(0x480)
447*c19800e8SDoug Rabson #define CKA_ENCODING_METHODS		(0x481)
448*c19800e8SDoug Rabson #define CKA_MIME_TYPES			(0x482)
449*c19800e8SDoug Rabson #define CKA_MECHANISM_TYPE		(0x500)
450*c19800e8SDoug Rabson #define CKA_REQUIRED_CMS_ATTRIBUTES	(0x501)
451*c19800e8SDoug Rabson #define CKA_DEFAULT_CMS_ATTRIBUTES	(0x502)
452*c19800e8SDoug Rabson #define CKA_SUPPORTED_CMS_ATTRIBUTES	(0x503)
453*c19800e8SDoug Rabson #define CKA_WRAP_TEMPLATE		(CKF_ARRAY_ATTRIBUTE | 0x211)
454*c19800e8SDoug Rabson #define CKA_UNWRAP_TEMPLATE		(CKF_ARRAY_ATTRIBUTE | 0x212)
455*c19800e8SDoug Rabson #define CKA_ALLOWED_MECHANISMS		(CKF_ARRAY_ATTRIBUTE | 0x600)
456*c19800e8SDoug Rabson #define CKA_VENDOR_DEFINED		((unsigned long) (1 << 31))
457*c19800e8SDoug Rabson 
458*c19800e8SDoug Rabson 
459*c19800e8SDoug Rabson struct ck_attribute
460*c19800e8SDoug Rabson {
461*c19800e8SDoug Rabson   ck_attribute_type_t type;
462*c19800e8SDoug Rabson   void *value;
463*c19800e8SDoug Rabson   unsigned long value_len;
464*c19800e8SDoug Rabson };
465*c19800e8SDoug Rabson 
466*c19800e8SDoug Rabson 
467*c19800e8SDoug Rabson struct ck_date
468*c19800e8SDoug Rabson {
469*c19800e8SDoug Rabson   unsigned char year[4];
470*c19800e8SDoug Rabson   unsigned char month[2];
471*c19800e8SDoug Rabson   unsigned char day[2];
472*c19800e8SDoug Rabson };
473*c19800e8SDoug Rabson 
474*c19800e8SDoug Rabson 
475*c19800e8SDoug Rabson typedef unsigned long ck_mechanism_type_t;
476*c19800e8SDoug Rabson 
477*c19800e8SDoug Rabson #define CKM_RSA_PKCS_KEY_PAIR_GEN	(0)
478*c19800e8SDoug Rabson #define CKM_RSA_PKCS			(1)
479*c19800e8SDoug Rabson #define CKM_RSA_9796			(2)
480*c19800e8SDoug Rabson #define CKM_RSA_X_509			(3)
481*c19800e8SDoug Rabson #define CKM_MD2_RSA_PKCS		(4)
482*c19800e8SDoug Rabson #define CKM_MD5_RSA_PKCS		(5)
483*c19800e8SDoug Rabson #define CKM_SHA1_RSA_PKCS		(6)
484*c19800e8SDoug Rabson #define CKM_RIPEMD128_RSA_PKCS		(7)
485*c19800e8SDoug Rabson #define CKM_RIPEMD160_RSA_PKCS		(8)
486*c19800e8SDoug Rabson #define CKM_RSA_PKCS_OAEP		(9)
487*c19800e8SDoug Rabson #define CKM_RSA_X9_31_KEY_PAIR_GEN	(0xa)
488*c19800e8SDoug Rabson #define CKM_RSA_X9_31			(0xb)
489*c19800e8SDoug Rabson #define CKM_SHA1_RSA_X9_31		(0xc)
490*c19800e8SDoug Rabson #define CKM_RSA_PKCS_PSS		(0xd)
491*c19800e8SDoug Rabson #define CKM_SHA1_RSA_PKCS_PSS		(0xe)
492*c19800e8SDoug Rabson #define CKM_DSA_KEY_PAIR_GEN		(0x10)
493*c19800e8SDoug Rabson #define	CKM_DSA				(0x11)
494*c19800e8SDoug Rabson #define CKM_DSA_SHA1			(0x12)
495*c19800e8SDoug Rabson #define CKM_DH_PKCS_KEY_PAIR_GEN	(0x20)
496*c19800e8SDoug Rabson #define CKM_DH_PKCS_DERIVE		(0x21)
497*c19800e8SDoug Rabson #define	CKM_X9_42_DH_KEY_PAIR_GEN	(0x30)
498*c19800e8SDoug Rabson #define CKM_X9_42_DH_DERIVE		(0x31)
499*c19800e8SDoug Rabson #define CKM_X9_42_DH_HYBRID_DERIVE	(0x32)
500*c19800e8SDoug Rabson #define CKM_X9_42_MQV_DERIVE		(0x33)
501*c19800e8SDoug Rabson #define CKM_SHA256_RSA_PKCS		(0x40)
502*c19800e8SDoug Rabson #define CKM_SHA384_RSA_PKCS		(0x41)
503*c19800e8SDoug Rabson #define CKM_SHA512_RSA_PKCS		(0x42)
504*c19800e8SDoug Rabson #define CKM_SHA256_RSA_PKCS_PSS		(0x43)
505*c19800e8SDoug Rabson #define CKM_SHA384_RSA_PKCS_PSS		(0x44)
506*c19800e8SDoug Rabson #define CKM_SHA512_RSA_PKCS_PSS		(0x45)
507*c19800e8SDoug Rabson #define CKM_RC2_KEY_GEN			(0x100)
508*c19800e8SDoug Rabson #define CKM_RC2_ECB			(0x101)
509*c19800e8SDoug Rabson #define	CKM_RC2_CBC			(0x102)
510*c19800e8SDoug Rabson #define	CKM_RC2_MAC			(0x103)
511*c19800e8SDoug Rabson #define CKM_RC2_MAC_GENERAL		(0x104)
512*c19800e8SDoug Rabson #define CKM_RC2_CBC_PAD			(0x105)
513*c19800e8SDoug Rabson #define CKM_RC4_KEY_GEN			(0x110)
514*c19800e8SDoug Rabson #define CKM_RC4				(0x111)
515*c19800e8SDoug Rabson #define CKM_DES_KEY_GEN			(0x120)
516*c19800e8SDoug Rabson #define CKM_DES_ECB			(0x121)
517*c19800e8SDoug Rabson #define CKM_DES_CBC			(0x122)
518*c19800e8SDoug Rabson #define CKM_DES_MAC			(0x123)
519*c19800e8SDoug Rabson #define CKM_DES_MAC_GENERAL		(0x124)
520*c19800e8SDoug Rabson #define CKM_DES_CBC_PAD			(0x125)
521*c19800e8SDoug Rabson #define CKM_DES2_KEY_GEN		(0x130)
522*c19800e8SDoug Rabson #define CKM_DES3_KEY_GEN		(0x131)
523*c19800e8SDoug Rabson #define CKM_DES3_ECB			(0x132)
524*c19800e8SDoug Rabson #define CKM_DES3_CBC			(0x133)
525*c19800e8SDoug Rabson #define CKM_DES3_MAC			(0x134)
526*c19800e8SDoug Rabson #define CKM_DES3_MAC_GENERAL		(0x135)
527*c19800e8SDoug Rabson #define CKM_DES3_CBC_PAD		(0x136)
528*c19800e8SDoug Rabson #define CKM_CDMF_KEY_GEN		(0x140)
529*c19800e8SDoug Rabson #define CKM_CDMF_ECB			(0x141)
530*c19800e8SDoug Rabson #define CKM_CDMF_CBC			(0x142)
531*c19800e8SDoug Rabson #define CKM_CDMF_MAC			(0x143)
532*c19800e8SDoug Rabson #define CKM_CDMF_MAC_GENERAL		(0x144)
533*c19800e8SDoug Rabson #define CKM_CDMF_CBC_PAD		(0x145)
534*c19800e8SDoug Rabson #define CKM_MD2				(0x200)
535*c19800e8SDoug Rabson #define CKM_MD2_HMAC			(0x201)
536*c19800e8SDoug Rabson #define CKM_MD2_HMAC_GENERAL		(0x202)
537*c19800e8SDoug Rabson #define CKM_MD5				(0x210)
538*c19800e8SDoug Rabson #define CKM_MD5_HMAC			(0x211)
539*c19800e8SDoug Rabson #define CKM_MD5_HMAC_GENERAL		(0x212)
540*c19800e8SDoug Rabson #define CKM_SHA_1			(0x220)
541*c19800e8SDoug Rabson #define CKM_SHA_1_HMAC			(0x221)
542*c19800e8SDoug Rabson #define CKM_SHA_1_HMAC_GENERAL		(0x222)
543*c19800e8SDoug Rabson #define CKM_RIPEMD128			(0x230)
544*c19800e8SDoug Rabson #define CKM_RIPEMD128_HMAC		(0x231)
545*c19800e8SDoug Rabson #define CKM_RIPEMD128_HMAC_GENERAL	(0x232)
546*c19800e8SDoug Rabson #define CKM_RIPEMD160			(0x240)
547*c19800e8SDoug Rabson #define CKM_RIPEMD160_HMAC		(0x241)
548*c19800e8SDoug Rabson #define CKM_RIPEMD160_HMAC_GENERAL	(0x242)
549*c19800e8SDoug Rabson #define CKM_SHA256			(0x250)
550*c19800e8SDoug Rabson #define CKM_SHA256_HMAC			(0x251)
551*c19800e8SDoug Rabson #define CKM_SHA256_HMAC_GENERAL		(0x252)
552*c19800e8SDoug Rabson #define CKM_SHA384			(0x260)
553*c19800e8SDoug Rabson #define CKM_SHA384_HMAC			(0x261)
554*c19800e8SDoug Rabson #define CKM_SHA384_HMAC_GENERAL		(0x262)
555*c19800e8SDoug Rabson #define CKM_SHA512			(0x270)
556*c19800e8SDoug Rabson #define CKM_SHA512_HMAC			(0x271)
557*c19800e8SDoug Rabson #define CKM_SHA512_HMAC_GENERAL		(0x272)
558*c19800e8SDoug Rabson #define CKM_CAST_KEY_GEN		(0x300)
559*c19800e8SDoug Rabson #define CKM_CAST_ECB			(0x301)
560*c19800e8SDoug Rabson #define CKM_CAST_CBC			(0x302)
561*c19800e8SDoug Rabson #define CKM_CAST_MAC			(0x303)
562*c19800e8SDoug Rabson #define CKM_CAST_MAC_GENERAL		(0x304)
563*c19800e8SDoug Rabson #define CKM_CAST_CBC_PAD		(0x305)
564*c19800e8SDoug Rabson #define CKM_CAST3_KEY_GEN		(0x310)
565*c19800e8SDoug Rabson #define CKM_CAST3_ECB			(0x311)
566*c19800e8SDoug Rabson #define CKM_CAST3_CBC			(0x312)
567*c19800e8SDoug Rabson #define CKM_CAST3_MAC			(0x313)
568*c19800e8SDoug Rabson #define CKM_CAST3_MAC_GENERAL		(0x314)
569*c19800e8SDoug Rabson #define CKM_CAST3_CBC_PAD		(0x315)
570*c19800e8SDoug Rabson #define CKM_CAST5_KEY_GEN		(0x320)
571*c19800e8SDoug Rabson #define CKM_CAST128_KEY_GEN		(0x320)
572*c19800e8SDoug Rabson #define CKM_CAST5_ECB			(0x321)
573*c19800e8SDoug Rabson #define CKM_CAST128_ECB			(0x321)
574*c19800e8SDoug Rabson #define CKM_CAST5_CBC			(0x322)
575*c19800e8SDoug Rabson #define CKM_CAST128_CBC			(0x322)
576*c19800e8SDoug Rabson #define CKM_CAST5_MAC			(0x323)
577*c19800e8SDoug Rabson #define	CKM_CAST128_MAC			(0x323)
578*c19800e8SDoug Rabson #define CKM_CAST5_MAC_GENERAL		(0x324)
579*c19800e8SDoug Rabson #define CKM_CAST128_MAC_GENERAL		(0x324)
580*c19800e8SDoug Rabson #define CKM_CAST5_CBC_PAD		(0x325)
581*c19800e8SDoug Rabson #define CKM_CAST128_CBC_PAD		(0x325)
582*c19800e8SDoug Rabson #define CKM_RC5_KEY_GEN			(0x330)
583*c19800e8SDoug Rabson #define CKM_RC5_ECB			(0x331)
584*c19800e8SDoug Rabson #define CKM_RC5_CBC			(0x332)
585*c19800e8SDoug Rabson #define CKM_RC5_MAC			(0x333)
586*c19800e8SDoug Rabson #define CKM_RC5_MAC_GENERAL		(0x334)
587*c19800e8SDoug Rabson #define CKM_RC5_CBC_PAD			(0x335)
588*c19800e8SDoug Rabson #define CKM_IDEA_KEY_GEN		(0x340)
589*c19800e8SDoug Rabson #define CKM_IDEA_ECB			(0x341)
590*c19800e8SDoug Rabson #define	CKM_IDEA_CBC			(0x342)
591*c19800e8SDoug Rabson #define CKM_IDEA_MAC			(0x343)
592*c19800e8SDoug Rabson #define CKM_IDEA_MAC_GENERAL		(0x344)
593*c19800e8SDoug Rabson #define CKM_IDEA_CBC_PAD		(0x345)
594*c19800e8SDoug Rabson #define CKM_GENERIC_SECRET_KEY_GEN	(0x350)
595*c19800e8SDoug Rabson #define CKM_CONCATENATE_BASE_AND_KEY	(0x360)
596*c19800e8SDoug Rabson #define CKM_CONCATENATE_BASE_AND_DATA	(0x362)
597*c19800e8SDoug Rabson #define CKM_CONCATENATE_DATA_AND_BASE	(0x363)
598*c19800e8SDoug Rabson #define CKM_XOR_BASE_AND_DATA		(0x364)
599*c19800e8SDoug Rabson #define CKM_EXTRACT_KEY_FROM_KEY	(0x365)
600*c19800e8SDoug Rabson #define CKM_SSL3_PRE_MASTER_KEY_GEN	(0x370)
601*c19800e8SDoug Rabson #define CKM_SSL3_MASTER_KEY_DERIVE	(0x371)
602*c19800e8SDoug Rabson #define CKM_SSL3_KEY_AND_MAC_DERIVE	(0x372)
603*c19800e8SDoug Rabson #define CKM_SSL3_MASTER_KEY_DERIVE_DH	(0x373)
604*c19800e8SDoug Rabson #define CKM_TLS_PRE_MASTER_KEY_GEN	(0x374)
605*c19800e8SDoug Rabson #define CKM_TLS_MASTER_KEY_DERIVE	(0x375)
606*c19800e8SDoug Rabson #define CKM_TLS_KEY_AND_MAC_DERIVE	(0x376)
607*c19800e8SDoug Rabson #define CKM_TLS_MASTER_KEY_DERIVE_DH	(0x377)
608*c19800e8SDoug Rabson #define CKM_SSL3_MD5_MAC		(0x380)
609*c19800e8SDoug Rabson #define CKM_SSL3_SHA1_MAC		(0x381)
610*c19800e8SDoug Rabson #define CKM_MD5_KEY_DERIVATION		(0x390)
611*c19800e8SDoug Rabson #define CKM_MD2_KEY_DERIVATION		(0x391)
612*c19800e8SDoug Rabson #define CKM_SHA1_KEY_DERIVATION		(0x392)
613*c19800e8SDoug Rabson #define CKM_PBE_MD2_DES_CBC		(0x3a0)
614*c19800e8SDoug Rabson #define CKM_PBE_MD5_DES_CBC		(0x3a1)
615*c19800e8SDoug Rabson #define CKM_PBE_MD5_CAST_CBC		(0x3a2)
616*c19800e8SDoug Rabson #define CKM_PBE_MD5_CAST3_CBC		(0x3a3)
617*c19800e8SDoug Rabson #define CKM_PBE_MD5_CAST5_CBC		(0x3a4)
618*c19800e8SDoug Rabson #define CKM_PBE_MD5_CAST128_CBC		(0x3a4)
619*c19800e8SDoug Rabson #define CKM_PBE_SHA1_CAST5_CBC		(0x3a5)
620*c19800e8SDoug Rabson #define CKM_PBE_SHA1_CAST128_CBC	(0x3a5)
621*c19800e8SDoug Rabson #define CKM_PBE_SHA1_RC4_128		(0x3a6)
622*c19800e8SDoug Rabson #define CKM_PBE_SHA1_RC4_40		(0x3a7)
623*c19800e8SDoug Rabson #define CKM_PBE_SHA1_DES3_EDE_CBC	(0x3a8)
624*c19800e8SDoug Rabson #define CKM_PBE_SHA1_DES2_EDE_CBC	(0x3a9)
625*c19800e8SDoug Rabson #define CKM_PBE_SHA1_RC2_128_CBC	(0x3aa)
626*c19800e8SDoug Rabson #define CKM_PBE_SHA1_RC2_40_CBC		(0x3ab)
627*c19800e8SDoug Rabson #define CKM_PKCS5_PBKD2			(0x3b0)
628*c19800e8SDoug Rabson #define CKM_PBA_SHA1_WITH_SHA1_HMAC	(0x3c0)
629*c19800e8SDoug Rabson #define CKM_KEY_WRAP_LYNKS		(0x400)
630*c19800e8SDoug Rabson #define CKM_KEY_WRAP_SET_OAEP		(0x401)
631*c19800e8SDoug Rabson #define CKM_SKIPJACK_KEY_GEN		(0x1000)
632*c19800e8SDoug Rabson #define CKM_SKIPJACK_ECB64		(0x1001)
633*c19800e8SDoug Rabson #define CKM_SKIPJACK_CBC64		(0x1002)
634*c19800e8SDoug Rabson #define CKM_SKIPJACK_OFB64		(0x1003)
635*c19800e8SDoug Rabson #define CKM_SKIPJACK_CFB64		(0x1004)
636*c19800e8SDoug Rabson #define CKM_SKIPJACK_CFB32		(0x1005)
637*c19800e8SDoug Rabson #define CKM_SKIPJACK_CFB16		(0x1006)
638*c19800e8SDoug Rabson #define CKM_SKIPJACK_CFB8		(0x1007)
639*c19800e8SDoug Rabson #define CKM_SKIPJACK_WRAP		(0x1008)
640*c19800e8SDoug Rabson #define CKM_SKIPJACK_PRIVATE_WRAP	(0x1009)
641*c19800e8SDoug Rabson #define CKM_SKIPJACK_RELAYX		(0x100a)
642*c19800e8SDoug Rabson #define CKM_KEA_KEY_PAIR_GEN		(0x1010)
643*c19800e8SDoug Rabson #define CKM_KEA_KEY_DERIVE		(0x1011)
644*c19800e8SDoug Rabson #define CKM_FORTEZZA_TIMESTAMP		(0x1020)
645*c19800e8SDoug Rabson #define CKM_BATON_KEY_GEN		(0x1030)
646*c19800e8SDoug Rabson #define CKM_BATON_ECB128		(0x1031)
647*c19800e8SDoug Rabson #define CKM_BATON_ECB96			(0x1032)
648*c19800e8SDoug Rabson #define CKM_BATON_CBC128		(0x1033)
649*c19800e8SDoug Rabson #define CKM_BATON_COUNTER		(0x1034)
650*c19800e8SDoug Rabson #define CKM_BATON_SHUFFLE		(0x1035)
651*c19800e8SDoug Rabson #define CKM_BATON_WRAP			(0x1036)
652*c19800e8SDoug Rabson #define CKM_ECDSA_KEY_PAIR_GEN		(0x1040)
653*c19800e8SDoug Rabson #define CKM_EC_KEY_PAIR_GEN		(0x1040)
654*c19800e8SDoug Rabson #define CKM_ECDSA			(0x1041)
655*c19800e8SDoug Rabson #define CKM_ECDSA_SHA1			(0x1042)
656*c19800e8SDoug Rabson #define CKM_ECDH1_DERIVE		(0x1050)
657*c19800e8SDoug Rabson #define CKM_ECDH1_COFACTOR_DERIVE	(0x1051)
658*c19800e8SDoug Rabson #define CKM_ECMQV_DERIVE		(0x1052)
659*c19800e8SDoug Rabson #define CKM_JUNIPER_KEY_GEN		(0x1060)
660*c19800e8SDoug Rabson #define CKM_JUNIPER_ECB128		(0x1061)
661*c19800e8SDoug Rabson #define CKM_JUNIPER_CBC128		(0x1062)
662*c19800e8SDoug Rabson #define CKM_JUNIPER_COUNTER		(0x1063)
663*c19800e8SDoug Rabson #define CKM_JUNIPER_SHUFFLE		(0x1064)
664*c19800e8SDoug Rabson #define CKM_JUNIPER_WRAP		(0x1065)
665*c19800e8SDoug Rabson #define CKM_FASTHASH			(0x1070)
666*c19800e8SDoug Rabson #define CKM_AES_KEY_GEN			(0x1080)
667*c19800e8SDoug Rabson #define CKM_AES_ECB			(0x1081)
668*c19800e8SDoug Rabson #define CKM_AES_CBC			(0x1082)
669*c19800e8SDoug Rabson #define CKM_AES_MAC			(0x1083)
670*c19800e8SDoug Rabson #define CKM_AES_MAC_GENERAL		(0x1084)
671*c19800e8SDoug Rabson #define CKM_AES_CBC_PAD			(0x1085)
672*c19800e8SDoug Rabson #define CKM_DSA_PARAMETER_GEN		(0x2000)
673*c19800e8SDoug Rabson #define CKM_DH_PKCS_PARAMETER_GEN	(0x2001)
674*c19800e8SDoug Rabson #define CKM_X9_42_DH_PARAMETER_GEN	(0x2002)
675*c19800e8SDoug Rabson #define CKM_VENDOR_DEFINED		((unsigned long) (1 << 31))
676*c19800e8SDoug Rabson 
677*c19800e8SDoug Rabson 
678*c19800e8SDoug Rabson struct ck_mechanism
679*c19800e8SDoug Rabson {
680*c19800e8SDoug Rabson   ck_mechanism_type_t mechanism;
681*c19800e8SDoug Rabson   void *parameter;
682*c19800e8SDoug Rabson   unsigned long parameter_len;
683*c19800e8SDoug Rabson };
684*c19800e8SDoug Rabson 
685*c19800e8SDoug Rabson 
686*c19800e8SDoug Rabson struct ck_mechanism_info
687*c19800e8SDoug Rabson {
688*c19800e8SDoug Rabson   unsigned long min_key_size;
689*c19800e8SDoug Rabson   unsigned long max_key_size;
690*c19800e8SDoug Rabson   ck_flags_t flags;
691*c19800e8SDoug Rabson };
692*c19800e8SDoug Rabson 
693*c19800e8SDoug Rabson #define CKF_HW			(1 << 0)
694*c19800e8SDoug Rabson #define CKF_ENCRYPT		(1 << 8)
695*c19800e8SDoug Rabson #define CKF_DECRYPT		(1 << 9)
696*c19800e8SDoug Rabson #define CKF_DIGEST		(1 << 10)
697*c19800e8SDoug Rabson #define CKF_SIGN		(1 << 11)
698*c19800e8SDoug Rabson #define CKF_SIGN_RECOVER	(1 << 12)
699*c19800e8SDoug Rabson #define CKF_VERIFY		(1 << 13)
700*c19800e8SDoug Rabson #define CKF_VERIFY_RECOVER	(1 << 14)
701*c19800e8SDoug Rabson #define CKF_GENERATE		(1 << 15)
702*c19800e8SDoug Rabson #define CKF_GENERATE_KEY_PAIR	(1 << 16)
703*c19800e8SDoug Rabson #define CKF_WRAP		(1 << 17)
704*c19800e8SDoug Rabson #define CKF_UNWRAP		(1 << 18)
705*c19800e8SDoug Rabson #define CKF_DERIVE		(1 << 19)
706*c19800e8SDoug Rabson #define CKF_EXTENSION		((unsigned long) (1 << 31))
707*c19800e8SDoug Rabson 
708*c19800e8SDoug Rabson 
709*c19800e8SDoug Rabson /* Flags for C_WaitForSlotEvent.  */
710*c19800e8SDoug Rabson #define CKF_DONT_BLOCK				(1)
711*c19800e8SDoug Rabson 
712*c19800e8SDoug Rabson 
713*c19800e8SDoug Rabson typedef unsigned long ck_rv_t;
714*c19800e8SDoug Rabson 
715*c19800e8SDoug Rabson 
716*c19800e8SDoug Rabson typedef ck_rv_t (*ck_notify_t) (ck_session_handle_t session,
717*c19800e8SDoug Rabson 				ck_notification_t event, void *application);
718*c19800e8SDoug Rabson 
719*c19800e8SDoug Rabson /* Forward reference.  */
720*c19800e8SDoug Rabson struct ck_function_list;
721*c19800e8SDoug Rabson 
722*c19800e8SDoug Rabson #define _CK_DECLARE_FUNCTION(name, args)	\
723*c19800e8SDoug Rabson typedef ck_rv_t (*CK_ ## name) args;		\
724*c19800e8SDoug Rabson ck_rv_t CK_SPEC name args
725*c19800e8SDoug Rabson 
726*c19800e8SDoug Rabson _CK_DECLARE_FUNCTION (C_Initialize, (void *init_args));
727*c19800e8SDoug Rabson _CK_DECLARE_FUNCTION (C_Finalize, (void *reserved));
728*c19800e8SDoug Rabson _CK_DECLARE_FUNCTION (C_GetInfo, (struct ck_info *info));
729*c19800e8SDoug Rabson _CK_DECLARE_FUNCTION (C_GetFunctionList,
730*c19800e8SDoug Rabson 		      (struct ck_function_list **function_list));
731*c19800e8SDoug Rabson 
732*c19800e8SDoug Rabson _CK_DECLARE_FUNCTION (C_GetSlotList,
733*c19800e8SDoug Rabson 		      (unsigned char token_present, ck_slot_id_t *slot_list,
734*c19800e8SDoug Rabson 		       unsigned long *count));
735*c19800e8SDoug Rabson _CK_DECLARE_FUNCTION (C_GetSlotInfo,
736*c19800e8SDoug Rabson 		      (ck_slot_id_t slot_id, struct ck_slot_info *info));
737*c19800e8SDoug Rabson _CK_DECLARE_FUNCTION (C_GetTokenInfo,
738*c19800e8SDoug Rabson 		      (ck_slot_id_t slot_id, struct ck_token_info *info));
739*c19800e8SDoug Rabson _CK_DECLARE_FUNCTION (C_WaitForSlotEvent,
740*c19800e8SDoug Rabson 		      (ck_flags_t flags, ck_slot_id_t *slot, void *reserved));
741*c19800e8SDoug Rabson _CK_DECLARE_FUNCTION (C_GetMechanismList,
742*c19800e8SDoug Rabson 		      (ck_slot_id_t slot_id,
743*c19800e8SDoug Rabson 		       ck_mechanism_type_t *mechanism_list,
744*c19800e8SDoug Rabson 		       unsigned long *count));
745*c19800e8SDoug Rabson _CK_DECLARE_FUNCTION (C_GetMechanismInfo,
746*c19800e8SDoug Rabson 		      (ck_slot_id_t slot_id, ck_mechanism_type_t type,
747*c19800e8SDoug Rabson 		       struct ck_mechanism_info *info));
748*c19800e8SDoug Rabson _CK_DECLARE_FUNCTION (C_InitToken,
749*c19800e8SDoug Rabson 		      (ck_slot_id_t slot_id, unsigned char *pin,
750*c19800e8SDoug Rabson 		       unsigned long pin_len, unsigned char *label));
751*c19800e8SDoug Rabson _CK_DECLARE_FUNCTION (C_InitPIN,
752*c19800e8SDoug Rabson 		      (ck_session_handle_t session, unsigned char *pin,
753*c19800e8SDoug Rabson 		       unsigned long pin_len));
754*c19800e8SDoug Rabson _CK_DECLARE_FUNCTION (C_SetPIN,
755*c19800e8SDoug Rabson 		      (ck_session_handle_t session, unsigned char *old_pin,
756*c19800e8SDoug Rabson 		       unsigned long old_len, unsigned char *new_pin,
757*c19800e8SDoug Rabson 		       unsigned long new_len));
758*c19800e8SDoug Rabson 
759*c19800e8SDoug Rabson _CK_DECLARE_FUNCTION (C_OpenSession,
760*c19800e8SDoug Rabson 		      (ck_slot_id_t slot_id, ck_flags_t flags,
761*c19800e8SDoug Rabson 		       void *application, ck_notify_t notify,
762*c19800e8SDoug Rabson 		       ck_session_handle_t *session));
763*c19800e8SDoug Rabson _CK_DECLARE_FUNCTION (C_CloseSession, (ck_session_handle_t session));
764*c19800e8SDoug Rabson _CK_DECLARE_FUNCTION (C_CloseAllSessions, (ck_slot_id_t slot_id));
765*c19800e8SDoug Rabson _CK_DECLARE_FUNCTION (C_GetSessionInfo,
766*c19800e8SDoug Rabson 		      (ck_session_handle_t session,
767*c19800e8SDoug Rabson 		       struct ck_session_info *info));
768*c19800e8SDoug Rabson _CK_DECLARE_FUNCTION (C_GetOperationState,
769*c19800e8SDoug Rabson 		      (ck_session_handle_t session,
770*c19800e8SDoug Rabson 		       unsigned char *operation_state,
771*c19800e8SDoug Rabson 		       unsigned long *operation_state_len));
772*c19800e8SDoug Rabson _CK_DECLARE_FUNCTION (C_SetOperationState,
773*c19800e8SDoug Rabson 		      (ck_session_handle_t session,
774*c19800e8SDoug Rabson 		       unsigned char *operation_state,
775*c19800e8SDoug Rabson 		       unsigned long operation_state_len,
776*c19800e8SDoug Rabson 		       ck_object_handle_t encryption_key,
777*c19800e8SDoug Rabson 		       ck_object_handle_t authentiation_key));
778*c19800e8SDoug Rabson _CK_DECLARE_FUNCTION (C_Login,
779*c19800e8SDoug Rabson 		      (ck_session_handle_t session, ck_user_type_t user_type,
780*c19800e8SDoug Rabson 		       unsigned char *pin, unsigned long pin_len));
781*c19800e8SDoug Rabson _CK_DECLARE_FUNCTION (C_Logout, (ck_session_handle_t session));
782*c19800e8SDoug Rabson 
783*c19800e8SDoug Rabson _CK_DECLARE_FUNCTION (C_CreateObject,
784*c19800e8SDoug Rabson 		      (ck_session_handle_t session,
785*c19800e8SDoug Rabson 		       struct ck_attribute *templ,
786*c19800e8SDoug Rabson 		       unsigned long count, ck_object_handle_t *object));
787*c19800e8SDoug Rabson _CK_DECLARE_FUNCTION (C_CopyObject,
788*c19800e8SDoug Rabson 		      (ck_session_handle_t session, ck_object_handle_t object,
789*c19800e8SDoug Rabson 		       struct ck_attribute *templ, unsigned long count,
790*c19800e8SDoug Rabson 		       ck_object_handle_t *new_object));
791*c19800e8SDoug Rabson _CK_DECLARE_FUNCTION (C_DestroyObject,
792*c19800e8SDoug Rabson 		      (ck_session_handle_t session,
793*c19800e8SDoug Rabson 		       ck_object_handle_t object));
794*c19800e8SDoug Rabson _CK_DECLARE_FUNCTION (C_GetObjectSize,
795*c19800e8SDoug Rabson 		      (ck_session_handle_t session,
796*c19800e8SDoug Rabson 		       ck_object_handle_t object,
797*c19800e8SDoug Rabson 		       unsigned long *size));
798*c19800e8SDoug Rabson _CK_DECLARE_FUNCTION (C_GetAttributeValue,
799*c19800e8SDoug Rabson 		      (ck_session_handle_t session,
800*c19800e8SDoug Rabson 		       ck_object_handle_t object,
801*c19800e8SDoug Rabson 		       struct ck_attribute *templ,
802*c19800e8SDoug Rabson 		       unsigned long count));
803*c19800e8SDoug Rabson _CK_DECLARE_FUNCTION (C_SetAttributeValue,
804*c19800e8SDoug Rabson 		      (ck_session_handle_t session,
805*c19800e8SDoug Rabson 		       ck_object_handle_t object,
806*c19800e8SDoug Rabson 		       struct ck_attribute *templ,
807*c19800e8SDoug Rabson 		       unsigned long count));
808*c19800e8SDoug Rabson _CK_DECLARE_FUNCTION (C_FindObjectsInit,
809*c19800e8SDoug Rabson 		      (ck_session_handle_t session,
810*c19800e8SDoug Rabson 		       struct ck_attribute *templ,
811*c19800e8SDoug Rabson 		       unsigned long count));
812*c19800e8SDoug Rabson _CK_DECLARE_FUNCTION (C_FindObjects,
813*c19800e8SDoug Rabson 		      (ck_session_handle_t session,
814*c19800e8SDoug Rabson 		       ck_object_handle_t *object,
815*c19800e8SDoug Rabson 		       unsigned long max_object_count,
816*c19800e8SDoug Rabson 		       unsigned long *object_count));
817*c19800e8SDoug Rabson _CK_DECLARE_FUNCTION (C_FindObjectsFinal,
818*c19800e8SDoug Rabson 		      (ck_session_handle_t session));
819*c19800e8SDoug Rabson 
820*c19800e8SDoug Rabson _CK_DECLARE_FUNCTION (C_EncryptInit,
821*c19800e8SDoug Rabson 		      (ck_session_handle_t session,
822*c19800e8SDoug Rabson 		       struct ck_mechanism *mechanism,
823*c19800e8SDoug Rabson 		       ck_object_handle_t key));
824*c19800e8SDoug Rabson _CK_DECLARE_FUNCTION (C_Encrypt,
825*c19800e8SDoug Rabson 		      (ck_session_handle_t session,
826*c19800e8SDoug Rabson 		       unsigned char *data, unsigned long data_len,
827*c19800e8SDoug Rabson 		       unsigned char *encrypted_data,
828*c19800e8SDoug Rabson 		       unsigned long *encrypted_data_len));
829*c19800e8SDoug Rabson _CK_DECLARE_FUNCTION (C_EncryptUpdate,
830*c19800e8SDoug Rabson 		      (ck_session_handle_t session,
831*c19800e8SDoug Rabson 		       unsigned char *part, unsigned long part_len,
832*c19800e8SDoug Rabson 		       unsigned char *encrypted_part,
833*c19800e8SDoug Rabson 		       unsigned long *encrypted_part_len));
834*c19800e8SDoug Rabson _CK_DECLARE_FUNCTION (C_EncryptFinal,
835*c19800e8SDoug Rabson 		      (ck_session_handle_t session,
836*c19800e8SDoug Rabson 		       unsigned char *last_encrypted_part,
837*c19800e8SDoug Rabson 		       unsigned long *last_encrypted_part_len));
838*c19800e8SDoug Rabson 
839*c19800e8SDoug Rabson _CK_DECLARE_FUNCTION (C_DecryptInit,
840*c19800e8SDoug Rabson 		      (ck_session_handle_t session,
841*c19800e8SDoug Rabson 		       struct ck_mechanism *mechanism,
842*c19800e8SDoug Rabson 		       ck_object_handle_t key));
843*c19800e8SDoug Rabson _CK_DECLARE_FUNCTION (C_Decrypt,
844*c19800e8SDoug Rabson 		      (ck_session_handle_t session,
845*c19800e8SDoug Rabson 		       unsigned char *encrypted_data,
846*c19800e8SDoug Rabson 		       unsigned long encrypted_data_len,
847*c19800e8SDoug Rabson 		       unsigned char *data, unsigned long *data_len));
848*c19800e8SDoug Rabson _CK_DECLARE_FUNCTION (C_DecryptUpdate,
849*c19800e8SDoug Rabson 		      (ck_session_handle_t session,
850*c19800e8SDoug Rabson 		       unsigned char *encrypted_part,
851*c19800e8SDoug Rabson 		       unsigned long encrypted_part_len,
852*c19800e8SDoug Rabson 		       unsigned char *part, unsigned long *part_len));
853*c19800e8SDoug Rabson _CK_DECLARE_FUNCTION (C_DecryptFinal,
854*c19800e8SDoug Rabson 		      (ck_session_handle_t session,
855*c19800e8SDoug Rabson 		       unsigned char *last_part,
856*c19800e8SDoug Rabson 		       unsigned long *last_part_len));
857*c19800e8SDoug Rabson 
858*c19800e8SDoug Rabson _CK_DECLARE_FUNCTION (C_DigestInit,
859*c19800e8SDoug Rabson 		      (ck_session_handle_t session,
860*c19800e8SDoug Rabson 		       struct ck_mechanism *mechanism));
861*c19800e8SDoug Rabson _CK_DECLARE_FUNCTION (C_Digest,
862*c19800e8SDoug Rabson 		      (ck_session_handle_t session,
863*c19800e8SDoug Rabson 		       unsigned char *data, unsigned long data_len,
864*c19800e8SDoug Rabson 		       unsigned char *digest,
865*c19800e8SDoug Rabson 		       unsigned long *digest_len));
866*c19800e8SDoug Rabson _CK_DECLARE_FUNCTION (C_DigestUpdate,
867*c19800e8SDoug Rabson 		      (ck_session_handle_t session,
868*c19800e8SDoug Rabson 		       unsigned char *part, unsigned long part_len));
869*c19800e8SDoug Rabson _CK_DECLARE_FUNCTION (C_DigestKey,
870*c19800e8SDoug Rabson 		      (ck_session_handle_t session, ck_object_handle_t key));
871*c19800e8SDoug Rabson _CK_DECLARE_FUNCTION (C_DigestFinal,
872*c19800e8SDoug Rabson 		      (ck_session_handle_t session,
873*c19800e8SDoug Rabson 		       unsigned char *digest,
874*c19800e8SDoug Rabson 		       unsigned long *digest_len));
875*c19800e8SDoug Rabson 
876*c19800e8SDoug Rabson _CK_DECLARE_FUNCTION (C_SignInit,
877*c19800e8SDoug Rabson 		      (ck_session_handle_t session,
878*c19800e8SDoug Rabson 		       struct ck_mechanism *mechanism,
879*c19800e8SDoug Rabson 		       ck_object_handle_t key));
880*c19800e8SDoug Rabson _CK_DECLARE_FUNCTION (C_Sign,
881*c19800e8SDoug Rabson 		      (ck_session_handle_t session,
882*c19800e8SDoug Rabson 		       unsigned char *data, unsigned long data_len,
883*c19800e8SDoug Rabson 		       unsigned char *signature,
884*c19800e8SDoug Rabson 		       unsigned long *signature_len));
885*c19800e8SDoug Rabson _CK_DECLARE_FUNCTION (C_SignUpdate,
886*c19800e8SDoug Rabson 		      (ck_session_handle_t session,
887*c19800e8SDoug Rabson 		       unsigned char *part, unsigned long part_len));
888*c19800e8SDoug Rabson _CK_DECLARE_FUNCTION (C_SignFinal,
889*c19800e8SDoug Rabson 		      (ck_session_handle_t session,
890*c19800e8SDoug Rabson 		       unsigned char *signature,
891*c19800e8SDoug Rabson 		       unsigned long *signature_len));
892*c19800e8SDoug Rabson _CK_DECLARE_FUNCTION (C_SignRecoverInit,
893*c19800e8SDoug Rabson 		      (ck_session_handle_t session,
894*c19800e8SDoug Rabson 		       struct ck_mechanism *mechanism,
895*c19800e8SDoug Rabson 		       ck_object_handle_t key));
896*c19800e8SDoug Rabson _CK_DECLARE_FUNCTION (C_SignRecover,
897*c19800e8SDoug Rabson 		      (ck_session_handle_t session,
898*c19800e8SDoug Rabson 		       unsigned char *data, unsigned long data_len,
899*c19800e8SDoug Rabson 		       unsigned char *signature,
900*c19800e8SDoug Rabson 		       unsigned long *signature_len));
901*c19800e8SDoug Rabson 
902*c19800e8SDoug Rabson _CK_DECLARE_FUNCTION (C_VerifyInit,
903*c19800e8SDoug Rabson 		      (ck_session_handle_t session,
904*c19800e8SDoug Rabson 		       struct ck_mechanism *mechanism,
905*c19800e8SDoug Rabson 		       ck_object_handle_t key));
906*c19800e8SDoug Rabson _CK_DECLARE_FUNCTION (C_Verify,
907*c19800e8SDoug Rabson 		      (ck_session_handle_t session,
908*c19800e8SDoug Rabson 		       unsigned char *data, unsigned long data_len,
909*c19800e8SDoug Rabson 		       unsigned char *signature,
910*c19800e8SDoug Rabson 		       unsigned long signature_len));
911*c19800e8SDoug Rabson _CK_DECLARE_FUNCTION (C_VerifyUpdate,
912*c19800e8SDoug Rabson 		      (ck_session_handle_t session,
913*c19800e8SDoug Rabson 		       unsigned char *part, unsigned long part_len));
914*c19800e8SDoug Rabson _CK_DECLARE_FUNCTION (C_VerifyFinal,
915*c19800e8SDoug Rabson 		      (ck_session_handle_t session,
916*c19800e8SDoug Rabson 		       unsigned char *signature,
917*c19800e8SDoug Rabson 		       unsigned long signature_len));
918*c19800e8SDoug Rabson _CK_DECLARE_FUNCTION (C_VerifyRecoverInit,
919*c19800e8SDoug Rabson 		      (ck_session_handle_t session,
920*c19800e8SDoug Rabson 		       struct ck_mechanism *mechanism,
921*c19800e8SDoug Rabson 		       ck_object_handle_t key));
922*c19800e8SDoug Rabson _CK_DECLARE_FUNCTION (C_VerifyRecover,
923*c19800e8SDoug Rabson 		      (ck_session_handle_t session,
924*c19800e8SDoug Rabson 		       unsigned char *signature,
925*c19800e8SDoug Rabson 		       unsigned long signature_len,
926*c19800e8SDoug Rabson 		       unsigned char *data,
927*c19800e8SDoug Rabson 		       unsigned long *data_len));
928*c19800e8SDoug Rabson 
929*c19800e8SDoug Rabson _CK_DECLARE_FUNCTION (C_DigestEncryptUpdate,
930*c19800e8SDoug Rabson 		      (ck_session_handle_t session,
931*c19800e8SDoug Rabson 		       unsigned char *part, unsigned long part_len,
932*c19800e8SDoug Rabson 		       unsigned char *encrypted_part,
933*c19800e8SDoug Rabson 		       unsigned long *encrypted_part_len));
934*c19800e8SDoug Rabson _CK_DECLARE_FUNCTION (C_DecryptDigestUpdate,
935*c19800e8SDoug Rabson 		      (ck_session_handle_t session,
936*c19800e8SDoug Rabson 		       unsigned char *encrypted_part,
937*c19800e8SDoug Rabson 		       unsigned long encrypted_part_len,
938*c19800e8SDoug Rabson 		       unsigned char *part,
939*c19800e8SDoug Rabson 		       unsigned long *part_len));
940*c19800e8SDoug Rabson _CK_DECLARE_FUNCTION (C_SignEncryptUpdate,
941*c19800e8SDoug Rabson 		      (ck_session_handle_t session,
942*c19800e8SDoug Rabson 		       unsigned char *part, unsigned long part_len,
943*c19800e8SDoug Rabson 		       unsigned char *encrypted_part,
944*c19800e8SDoug Rabson 		       unsigned long *encrypted_part_len));
945*c19800e8SDoug Rabson _CK_DECLARE_FUNCTION (C_DecryptVerifyUpdate,
946*c19800e8SDoug Rabson 		      (ck_session_handle_t session,
947*c19800e8SDoug Rabson 		       unsigned char *encrypted_part,
948*c19800e8SDoug Rabson 		       unsigned long encrypted_part_len,
949*c19800e8SDoug Rabson 		       unsigned char *part,
950*c19800e8SDoug Rabson 		       unsigned long *part_len));
951*c19800e8SDoug Rabson 
952*c19800e8SDoug Rabson _CK_DECLARE_FUNCTION (C_GenerateKey,
953*c19800e8SDoug Rabson 		      (ck_session_handle_t session,
954*c19800e8SDoug Rabson 		       struct ck_mechanism *mechanism,
955*c19800e8SDoug Rabson 		       struct ck_attribute *templ,
956*c19800e8SDoug Rabson 		       unsigned long count,
957*c19800e8SDoug Rabson 		       ck_object_handle_t *key));
958*c19800e8SDoug Rabson _CK_DECLARE_FUNCTION (C_GenerateKeyPair,
959*c19800e8SDoug Rabson 		      (ck_session_handle_t session,
960*c19800e8SDoug Rabson 		       struct ck_mechanism *mechanism,
961*c19800e8SDoug Rabson 		       struct ck_attribute *public_key_template,
962*c19800e8SDoug Rabson 		       unsigned long public_key_attribute_count,
963*c19800e8SDoug Rabson 		       struct ck_attribute *private_key_template,
964*c19800e8SDoug Rabson 		       unsigned long private_key_attribute_count,
965*c19800e8SDoug Rabson 		       ck_object_handle_t *public_key,
966*c19800e8SDoug Rabson 		       ck_object_handle_t *private_key));
967*c19800e8SDoug Rabson _CK_DECLARE_FUNCTION (C_WrapKey,
968*c19800e8SDoug Rabson 		      (ck_session_handle_t session,
969*c19800e8SDoug Rabson 		       struct ck_mechanism *mechanism,
970*c19800e8SDoug Rabson 		       ck_object_handle_t wrapping_key,
971*c19800e8SDoug Rabson 		       ck_object_handle_t key,
972*c19800e8SDoug Rabson 		       unsigned char *wrapped_key,
973*c19800e8SDoug Rabson 		       unsigned long *wrapped_key_len));
974*c19800e8SDoug Rabson _CK_DECLARE_FUNCTION (C_UnwrapKey,
975*c19800e8SDoug Rabson 		      (ck_session_handle_t session,
976*c19800e8SDoug Rabson 		       struct ck_mechanism *mechanism,
977*c19800e8SDoug Rabson 		       ck_object_handle_t unwrapping_key,
978*c19800e8SDoug Rabson 		       unsigned char *wrapped_key,
979*c19800e8SDoug Rabson 		       unsigned long wrapped_key_len,
980*c19800e8SDoug Rabson 		       struct ck_attribute *templ,
981*c19800e8SDoug Rabson 		       unsigned long attribute_count,
982*c19800e8SDoug Rabson 		       ck_object_handle_t *key));
983*c19800e8SDoug Rabson _CK_DECLARE_FUNCTION (C_DeriveKey,
984*c19800e8SDoug Rabson 		      (ck_session_handle_t session,
985*c19800e8SDoug Rabson 		       struct ck_mechanism *mechanism,
986*c19800e8SDoug Rabson 		       ck_object_handle_t base_key,
987*c19800e8SDoug Rabson 		       struct ck_attribute *templ,
988*c19800e8SDoug Rabson 		       unsigned long attribute_count,
989*c19800e8SDoug Rabson 		       ck_object_handle_t *key));
990*c19800e8SDoug Rabson 
991*c19800e8SDoug Rabson _CK_DECLARE_FUNCTION (C_SeedRandom,
992*c19800e8SDoug Rabson 		      (ck_session_handle_t session, unsigned char *seed,
993*c19800e8SDoug Rabson 		       unsigned long seed_len));
994*c19800e8SDoug Rabson _CK_DECLARE_FUNCTION (C_GenerateRandom,
995*c19800e8SDoug Rabson 		      (ck_session_handle_t session,
996*c19800e8SDoug Rabson 		       unsigned char *random_data,
997*c19800e8SDoug Rabson 		       unsigned long random_len));
998*c19800e8SDoug Rabson 
999*c19800e8SDoug Rabson _CK_DECLARE_FUNCTION (C_GetFunctionStatus, (ck_session_handle_t session));
1000*c19800e8SDoug Rabson _CK_DECLARE_FUNCTION (C_CancelFunction, (ck_session_handle_t session));
1001*c19800e8SDoug Rabson 
1002*c19800e8SDoug Rabson 
1003*c19800e8SDoug Rabson struct ck_function_list
1004*c19800e8SDoug Rabson {
1005*c19800e8SDoug Rabson   struct ck_version version;
1006*c19800e8SDoug Rabson   CK_C_Initialize C_Initialize;
1007*c19800e8SDoug Rabson   CK_C_Finalize C_Finalize;
1008*c19800e8SDoug Rabson   CK_C_GetInfo C_GetInfo;
1009*c19800e8SDoug Rabson   CK_C_GetFunctionList C_GetFunctionList;
1010*c19800e8SDoug Rabson   CK_C_GetSlotList C_GetSlotList;
1011*c19800e8SDoug Rabson   CK_C_GetSlotInfo C_GetSlotInfo;
1012*c19800e8SDoug Rabson   CK_C_GetTokenInfo C_GetTokenInfo;
1013*c19800e8SDoug Rabson   CK_C_GetMechanismList C_GetMechanismList;
1014*c19800e8SDoug Rabson   CK_C_GetMechanismInfo C_GetMechanismInfo;
1015*c19800e8SDoug Rabson   CK_C_InitToken C_InitToken;
1016*c19800e8SDoug Rabson   CK_C_InitPIN C_InitPIN;
1017*c19800e8SDoug Rabson   CK_C_SetPIN C_SetPIN;
1018*c19800e8SDoug Rabson   CK_C_OpenSession C_OpenSession;
1019*c19800e8SDoug Rabson   CK_C_CloseSession C_CloseSession;
1020*c19800e8SDoug Rabson   CK_C_CloseAllSessions C_CloseAllSessions;
1021*c19800e8SDoug Rabson   CK_C_GetSessionInfo C_GetSessionInfo;
1022*c19800e8SDoug Rabson   CK_C_GetOperationState C_GetOperationState;
1023*c19800e8SDoug Rabson   CK_C_SetOperationState C_SetOperationState;
1024*c19800e8SDoug Rabson   CK_C_Login C_Login;
1025*c19800e8SDoug Rabson   CK_C_Logout C_Logout;
1026*c19800e8SDoug Rabson   CK_C_CreateObject C_CreateObject;
1027*c19800e8SDoug Rabson   CK_C_CopyObject C_CopyObject;
1028*c19800e8SDoug Rabson   CK_C_DestroyObject C_DestroyObject;
1029*c19800e8SDoug Rabson   CK_C_GetObjectSize C_GetObjectSize;
1030*c19800e8SDoug Rabson   CK_C_GetAttributeValue C_GetAttributeValue;
1031*c19800e8SDoug Rabson   CK_C_SetAttributeValue C_SetAttributeValue;
1032*c19800e8SDoug Rabson   CK_C_FindObjectsInit C_FindObjectsInit;
1033*c19800e8SDoug Rabson   CK_C_FindObjects C_FindObjects;
1034*c19800e8SDoug Rabson   CK_C_FindObjectsFinal C_FindObjectsFinal;
1035*c19800e8SDoug Rabson   CK_C_EncryptInit C_EncryptInit;
1036*c19800e8SDoug Rabson   CK_C_Encrypt C_Encrypt;
1037*c19800e8SDoug Rabson   CK_C_EncryptUpdate C_EncryptUpdate;
1038*c19800e8SDoug Rabson   CK_C_EncryptFinal C_EncryptFinal;
1039*c19800e8SDoug Rabson   CK_C_DecryptInit C_DecryptInit;
1040*c19800e8SDoug Rabson   CK_C_Decrypt C_Decrypt;
1041*c19800e8SDoug Rabson   CK_C_DecryptUpdate C_DecryptUpdate;
1042*c19800e8SDoug Rabson   CK_C_DecryptFinal C_DecryptFinal;
1043*c19800e8SDoug Rabson   CK_C_DigestInit C_DigestInit;
1044*c19800e8SDoug Rabson   CK_C_Digest C_Digest;
1045*c19800e8SDoug Rabson   CK_C_DigestUpdate C_DigestUpdate;
1046*c19800e8SDoug Rabson   CK_C_DigestKey C_DigestKey;
1047*c19800e8SDoug Rabson   CK_C_DigestFinal C_DigestFinal;
1048*c19800e8SDoug Rabson   CK_C_SignInit C_SignInit;
1049*c19800e8SDoug Rabson   CK_C_Sign C_Sign;
1050*c19800e8SDoug Rabson   CK_C_SignUpdate C_SignUpdate;
1051*c19800e8SDoug Rabson   CK_C_SignFinal C_SignFinal;
1052*c19800e8SDoug Rabson   CK_C_SignRecoverInit C_SignRecoverInit;
1053*c19800e8SDoug Rabson   CK_C_SignRecover C_SignRecover;
1054*c19800e8SDoug Rabson   CK_C_VerifyInit C_VerifyInit;
1055*c19800e8SDoug Rabson   CK_C_Verify C_Verify;
1056*c19800e8SDoug Rabson   CK_C_VerifyUpdate C_VerifyUpdate;
1057*c19800e8SDoug Rabson   CK_C_VerifyFinal C_VerifyFinal;
1058*c19800e8SDoug Rabson   CK_C_VerifyRecoverInit C_VerifyRecoverInit;
1059*c19800e8SDoug Rabson   CK_C_VerifyRecover C_VerifyRecover;
1060*c19800e8SDoug Rabson   CK_C_DigestEncryptUpdate C_DigestEncryptUpdate;
1061*c19800e8SDoug Rabson   CK_C_DecryptDigestUpdate C_DecryptDigestUpdate;
1062*c19800e8SDoug Rabson   CK_C_SignEncryptUpdate C_SignEncryptUpdate;
1063*c19800e8SDoug Rabson   CK_C_DecryptVerifyUpdate C_DecryptVerifyUpdate;
1064*c19800e8SDoug Rabson   CK_C_GenerateKey C_GenerateKey;
1065*c19800e8SDoug Rabson   CK_C_GenerateKeyPair C_GenerateKeyPair;
1066*c19800e8SDoug Rabson   CK_C_WrapKey C_WrapKey;
1067*c19800e8SDoug Rabson   CK_C_UnwrapKey C_UnwrapKey;
1068*c19800e8SDoug Rabson   CK_C_DeriveKey C_DeriveKey;
1069*c19800e8SDoug Rabson   CK_C_SeedRandom C_SeedRandom;
1070*c19800e8SDoug Rabson   CK_C_GenerateRandom C_GenerateRandom;
1071*c19800e8SDoug Rabson   CK_C_GetFunctionStatus C_GetFunctionStatus;
1072*c19800e8SDoug Rabson   CK_C_CancelFunction C_CancelFunction;
1073*c19800e8SDoug Rabson   CK_C_WaitForSlotEvent C_WaitForSlotEvent;
1074*c19800e8SDoug Rabson };
1075*c19800e8SDoug Rabson 
1076*c19800e8SDoug Rabson 
1077*c19800e8SDoug Rabson typedef ck_rv_t (*ck_createmutex_t) (void **mutex);
1078*c19800e8SDoug Rabson typedef ck_rv_t (*ck_destroymutex_t) (void *mutex);
1079*c19800e8SDoug Rabson typedef ck_rv_t (*ck_lockmutex_t) (void *mutex);
1080*c19800e8SDoug Rabson typedef ck_rv_t (*ck_unlockmutex_t) (void *mutex);
1081*c19800e8SDoug Rabson 
1082*c19800e8SDoug Rabson 
1083*c19800e8SDoug Rabson struct ck_c_initialize_args
1084*c19800e8SDoug Rabson {
1085*c19800e8SDoug Rabson   ck_createmutex_t create_mutex;
1086*c19800e8SDoug Rabson   ck_destroymutex_t destroy_mutex;
1087*c19800e8SDoug Rabson   ck_lockmutex_t lock_mutex;
1088*c19800e8SDoug Rabson   ck_unlockmutex_t unlock_mutex;
1089*c19800e8SDoug Rabson   ck_flags_t flags;
1090*c19800e8SDoug Rabson   void *reserved;
1091*c19800e8SDoug Rabson };
1092*c19800e8SDoug Rabson 
1093*c19800e8SDoug Rabson 
1094*c19800e8SDoug Rabson #define CKF_LIBRARY_CANT_CREATE_OS_THREADS	(1 << 0)
1095*c19800e8SDoug Rabson #define CKF_OS_LOCKING_OK			(1 << 1)
1096*c19800e8SDoug Rabson 
1097*c19800e8SDoug Rabson #define CKR_OK					(0)
1098*c19800e8SDoug Rabson #define CKR_CANCEL				(1)
1099*c19800e8SDoug Rabson #define CKR_HOST_MEMORY				(2)
1100*c19800e8SDoug Rabson #define CKR_SLOT_ID_INVALID			(3)
1101*c19800e8SDoug Rabson #define CKR_GENERAL_ERROR			(5)
1102*c19800e8SDoug Rabson #define CKR_FUNCTION_FAILED			(6)
1103*c19800e8SDoug Rabson #define CKR_ARGUMENTS_BAD			(7)
1104*c19800e8SDoug Rabson #define CKR_NO_EVENT				(8)
1105*c19800e8SDoug Rabson #define CKR_NEED_TO_CREATE_THREADS		(9)
1106*c19800e8SDoug Rabson #define CKR_CANT_LOCK				(0xa)
1107*c19800e8SDoug Rabson #define CKR_ATTRIBUTE_READ_ONLY			(0x10)
1108*c19800e8SDoug Rabson #define CKR_ATTRIBUTE_SENSITIVE			(0x11)
1109*c19800e8SDoug Rabson #define CKR_ATTRIBUTE_TYPE_INVALID		(0x12)
1110*c19800e8SDoug Rabson #define CKR_ATTRIBUTE_VALUE_INVALID		(0x13)
1111*c19800e8SDoug Rabson #define CKR_DATA_INVALID			(0x20)
1112*c19800e8SDoug Rabson #define CKR_DATA_LEN_RANGE			(0x21)
1113*c19800e8SDoug Rabson #define CKR_DEVICE_ERROR			(0x30)
1114*c19800e8SDoug Rabson #define CKR_DEVICE_MEMORY			(0x31)
1115*c19800e8SDoug Rabson #define CKR_DEVICE_REMOVED			(0x32)
1116*c19800e8SDoug Rabson #define CKR_ENCRYPTED_DATA_INVALID		(0x40)
1117*c19800e8SDoug Rabson #define CKR_ENCRYPTED_DATA_LEN_RANGE		(0x41)
1118*c19800e8SDoug Rabson #define CKR_FUNCTION_CANCELED			(0x50)
1119*c19800e8SDoug Rabson #define CKR_FUNCTION_NOT_PARALLEL		(0x51)
1120*c19800e8SDoug Rabson #define CKR_FUNCTION_NOT_SUPPORTED		(0x54)
1121*c19800e8SDoug Rabson #define CKR_KEY_HANDLE_INVALID			(0x60)
1122*c19800e8SDoug Rabson #define CKR_KEY_SIZE_RANGE			(0x62)
1123*c19800e8SDoug Rabson #define CKR_KEY_TYPE_INCONSISTENT		(0x63)
1124*c19800e8SDoug Rabson #define CKR_KEY_NOT_NEEDED			(0x64)
1125*c19800e8SDoug Rabson #define CKR_KEY_CHANGED				(0x65)
1126*c19800e8SDoug Rabson #define CKR_KEY_NEEDED				(0x66)
1127*c19800e8SDoug Rabson #define CKR_KEY_INDIGESTIBLE			(0x67)
1128*c19800e8SDoug Rabson #define CKR_KEY_FUNCTION_NOT_PERMITTED		(0x68)
1129*c19800e8SDoug Rabson #define CKR_KEY_NOT_WRAPPABLE			(0x69)
1130*c19800e8SDoug Rabson #define CKR_KEY_UNEXTRACTABLE			(0x6a)
1131*c19800e8SDoug Rabson #define CKR_MECHANISM_INVALID			(0x70)
1132*c19800e8SDoug Rabson #define CKR_MECHANISM_PARAM_INVALID		(0x71)
1133*c19800e8SDoug Rabson #define CKR_OBJECT_HANDLE_INVALID		(0x82)
1134*c19800e8SDoug Rabson #define CKR_OPERATION_ACTIVE			(0x90)
1135*c19800e8SDoug Rabson #define CKR_OPERATION_NOT_INITIALIZED		(0x91)
1136*c19800e8SDoug Rabson #define CKR_PIN_INCORRECT			(0xa0)
1137*c19800e8SDoug Rabson #define CKR_PIN_INVALID				(0xa1)
1138*c19800e8SDoug Rabson #define CKR_PIN_LEN_RANGE			(0xa2)
1139*c19800e8SDoug Rabson #define CKR_PIN_EXPIRED				(0xa3)
1140*c19800e8SDoug Rabson #define CKR_PIN_LOCKED				(0xa4)
1141*c19800e8SDoug Rabson #define CKR_SESSION_CLOSED			(0xb0)
1142*c19800e8SDoug Rabson #define CKR_SESSION_COUNT			(0xb1)
1143*c19800e8SDoug Rabson #define CKR_SESSION_HANDLE_INVALID		(0xb3)
1144*c19800e8SDoug Rabson #define CKR_SESSION_PARALLEL_NOT_SUPPORTED	(0xb4)
1145*c19800e8SDoug Rabson #define CKR_SESSION_READ_ONLY			(0xb5)
1146*c19800e8SDoug Rabson #define CKR_SESSION_EXISTS			(0xb6)
1147*c19800e8SDoug Rabson #define CKR_SESSION_READ_ONLY_EXISTS		(0xb7)
1148*c19800e8SDoug Rabson #define CKR_SESSION_READ_WRITE_SO_EXISTS	(0xb8)
1149*c19800e8SDoug Rabson #define CKR_SIGNATURE_INVALID			(0xc0)
1150*c19800e8SDoug Rabson #define CKR_SIGNATURE_LEN_RANGE			(0xc1)
1151*c19800e8SDoug Rabson #define CKR_TEMPLATE_INCOMPLETE			(0xd0)
1152*c19800e8SDoug Rabson #define CKR_TEMPLATE_INCONSISTENT		(0xd1)
1153*c19800e8SDoug Rabson #define CKR_TOKEN_NOT_PRESENT			(0xe0)
1154*c19800e8SDoug Rabson #define CKR_TOKEN_NOT_RECOGNIZED		(0xe1)
1155*c19800e8SDoug Rabson #define CKR_TOKEN_WRITE_PROTECTED		(0xe2)
1156*c19800e8SDoug Rabson #define	CKR_UNWRAPPING_KEY_HANDLE_INVALID	(0xf0)
1157*c19800e8SDoug Rabson #define CKR_UNWRAPPING_KEY_SIZE_RANGE		(0xf1)
1158*c19800e8SDoug Rabson #define CKR_UNWRAPPING_KEY_TYPE_INCONSISTENT	(0xf2)
1159*c19800e8SDoug Rabson #define CKR_USER_ALREADY_LOGGED_IN		(0x100)
1160*c19800e8SDoug Rabson #define CKR_USER_NOT_LOGGED_IN			(0x101)
1161*c19800e8SDoug Rabson #define CKR_USER_PIN_NOT_INITIALIZED		(0x102)
1162*c19800e8SDoug Rabson #define CKR_USER_TYPE_INVALID			(0x103)
1163*c19800e8SDoug Rabson #define CKR_USER_ANOTHER_ALREADY_LOGGED_IN	(0x104)
1164*c19800e8SDoug Rabson #define CKR_USER_TOO_MANY_TYPES			(0x105)
1165*c19800e8SDoug Rabson #define CKR_WRAPPED_KEY_INVALID			(0x110)
1166*c19800e8SDoug Rabson #define CKR_WRAPPED_KEY_LEN_RANGE		(0x112)
1167*c19800e8SDoug Rabson #define CKR_WRAPPING_KEY_HANDLE_INVALID		(0x113)
1168*c19800e8SDoug Rabson #define CKR_WRAPPING_KEY_SIZE_RANGE		(0x114)
1169*c19800e8SDoug Rabson #define CKR_WRAPPING_KEY_TYPE_INCONSISTENT	(0x115)
1170*c19800e8SDoug Rabson #define CKR_RANDOM_SEED_NOT_SUPPORTED		(0x120)
1171*c19800e8SDoug Rabson #define CKR_RANDOM_NO_RNG			(0x121)
1172*c19800e8SDoug Rabson #define CKR_DOMAIN_PARAMS_INVALID		(0x130)
1173*c19800e8SDoug Rabson #define CKR_BUFFER_TOO_SMALL			(0x150)
1174*c19800e8SDoug Rabson #define CKR_SAVED_STATE_INVALID			(0x160)
1175*c19800e8SDoug Rabson #define CKR_INFORMATION_SENSITIVE		(0x170)
1176*c19800e8SDoug Rabson #define CKR_STATE_UNSAVEABLE			(0x180)
1177*c19800e8SDoug Rabson #define CKR_CRYPTOKI_NOT_INITIALIZED		(0x190)
1178*c19800e8SDoug Rabson #define CKR_CRYPTOKI_ALREADY_INITIALIZED	(0x191)
1179*c19800e8SDoug Rabson #define CKR_MUTEX_BAD				(0x1a0)
1180*c19800e8SDoug Rabson #define CKR_MUTEX_NOT_LOCKED			(0x1a1)
1181*c19800e8SDoug Rabson #define CKR_FUNCTION_REJECTED			(0x200)
1182*c19800e8SDoug Rabson #define CKR_VENDOR_DEFINED			((unsigned long) (1 << 31))
1183*c19800e8SDoug Rabson 
1184*c19800e8SDoug Rabson 
1185*c19800e8SDoug Rabson 
1186*c19800e8SDoug Rabson /* Compatibility layer.  */
1187*c19800e8SDoug Rabson 
1188*c19800e8SDoug Rabson #ifdef CRYPTOKI_COMPAT
1189*c19800e8SDoug Rabson 
1190*c19800e8SDoug Rabson #undef CK_DEFINE_FUNCTION
1191*c19800e8SDoug Rabson #define CK_DEFINE_FUNCTION(retval, name) retval CK_SPEC name
1192*c19800e8SDoug Rabson 
1193*c19800e8SDoug Rabson /* For NULL.  */
1194*c19800e8SDoug Rabson #include <stddef.h>
1195*c19800e8SDoug Rabson 
1196*c19800e8SDoug Rabson typedef unsigned char CK_BYTE;
1197*c19800e8SDoug Rabson typedef unsigned char CK_CHAR;
1198*c19800e8SDoug Rabson typedef unsigned char CK_UTF8CHAR;
1199*c19800e8SDoug Rabson typedef unsigned char CK_BBOOL;
1200*c19800e8SDoug Rabson typedef unsigned long int CK_ULONG;
1201*c19800e8SDoug Rabson typedef long int CK_LONG;
1202*c19800e8SDoug Rabson typedef CK_BYTE *CK_BYTE_PTR;
1203*c19800e8SDoug Rabson typedef CK_CHAR *CK_CHAR_PTR;
1204*c19800e8SDoug Rabson typedef CK_UTF8CHAR *CK_UTF8CHAR_PTR;
1205*c19800e8SDoug Rabson typedef CK_ULONG *CK_ULONG_PTR;
1206*c19800e8SDoug Rabson typedef void *CK_VOID_PTR;
1207*c19800e8SDoug Rabson typedef void **CK_VOID_PTR_PTR;
1208*c19800e8SDoug Rabson #define CK_FALSE 0
1209*c19800e8SDoug Rabson #define CK_TRUE 1
1210*c19800e8SDoug Rabson #ifndef CK_DISABLE_TRUE_FALSE
1211*c19800e8SDoug Rabson #ifndef FALSE
1212*c19800e8SDoug Rabson #define FALSE 0
1213*c19800e8SDoug Rabson #endif
1214*c19800e8SDoug Rabson #ifndef TRUE
1215*c19800e8SDoug Rabson #define TRUE 1
1216*c19800e8SDoug Rabson #endif
1217*c19800e8SDoug Rabson #endif
1218*c19800e8SDoug Rabson 
1219*c19800e8SDoug Rabson typedef struct ck_version CK_VERSION;
1220*c19800e8SDoug Rabson typedef struct ck_version *CK_VERSION_PTR;
1221*c19800e8SDoug Rabson 
1222*c19800e8SDoug Rabson typedef struct ck_info CK_INFO;
1223*c19800e8SDoug Rabson typedef struct ck_info *CK_INFO_PTR;
1224*c19800e8SDoug Rabson 
1225*c19800e8SDoug Rabson typedef ck_slot_id_t *CK_SLOT_ID_PTR;
1226*c19800e8SDoug Rabson 
1227*c19800e8SDoug Rabson typedef struct ck_slot_info CK_SLOT_INFO;
1228*c19800e8SDoug Rabson typedef struct ck_slot_info *CK_SLOT_INFO_PTR;
1229*c19800e8SDoug Rabson 
1230*c19800e8SDoug Rabson typedef struct ck_token_info CK_TOKEN_INFO;
1231*c19800e8SDoug Rabson typedef struct ck_token_info *CK_TOKEN_INFO_PTR;
1232*c19800e8SDoug Rabson 
1233*c19800e8SDoug Rabson typedef ck_session_handle_t *CK_SESSION_HANDLE_PTR;
1234*c19800e8SDoug Rabson 
1235*c19800e8SDoug Rabson typedef struct ck_session_info CK_SESSION_INFO;
1236*c19800e8SDoug Rabson typedef struct ck_session_info *CK_SESSION_INFO_PTR;
1237*c19800e8SDoug Rabson 
1238*c19800e8SDoug Rabson typedef ck_object_handle_t *CK_OBJECT_HANDLE_PTR;
1239*c19800e8SDoug Rabson 
1240*c19800e8SDoug Rabson typedef ck_object_class_t *CK_OBJECT_CLASS_PTR;
1241*c19800e8SDoug Rabson 
1242*c19800e8SDoug Rabson typedef struct ck_attribute CK_ATTRIBUTE;
1243*c19800e8SDoug Rabson typedef struct ck_attribute *CK_ATTRIBUTE_PTR;
1244*c19800e8SDoug Rabson 
1245*c19800e8SDoug Rabson typedef struct ck_date CK_DATE;
1246*c19800e8SDoug Rabson typedef struct ck_date *CK_DATE_PTR;
1247*c19800e8SDoug Rabson 
1248*c19800e8SDoug Rabson typedef ck_mechanism_type_t *CK_MECHANISM_TYPE_PTR;
1249*c19800e8SDoug Rabson 
1250*c19800e8SDoug Rabson typedef struct ck_mechanism CK_MECHANISM;
1251*c19800e8SDoug Rabson typedef struct ck_mechanism *CK_MECHANISM_PTR;
1252*c19800e8SDoug Rabson 
1253*c19800e8SDoug Rabson typedef struct ck_mechanism_info CK_MECHANISM_INFO;
1254*c19800e8SDoug Rabson typedef struct ck_mechanism_info *CK_MECHANISM_INFO_PTR;
1255*c19800e8SDoug Rabson 
1256*c19800e8SDoug Rabson typedef struct ck_function_list CK_FUNCTION_LIST;
1257*c19800e8SDoug Rabson typedef struct ck_function_list *CK_FUNCTION_LIST_PTR;
1258*c19800e8SDoug Rabson typedef struct ck_function_list **CK_FUNCTION_LIST_PTR_PTR;
1259*c19800e8SDoug Rabson 
1260*c19800e8SDoug Rabson typedef struct ck_c_initialize_args CK_C_INITIALIZE_ARGS;
1261*c19800e8SDoug Rabson typedef struct ck_c_initialize_args *CK_C_INITIALIZE_ARGS_PTR;
1262*c19800e8SDoug Rabson 
1263*c19800e8SDoug Rabson #define NULL_PTR NULL
1264*c19800e8SDoug Rabson 
1265*c19800e8SDoug Rabson /* Delete the helper macros defined at the top of the file.  */
1266*c19800e8SDoug Rabson #undef ck_flags_t
1267*c19800e8SDoug Rabson #undef ck_version
1268*c19800e8SDoug Rabson 
1269*c19800e8SDoug Rabson #undef ck_info
1270*c19800e8SDoug Rabson #undef cryptoki_version
1271*c19800e8SDoug Rabson #undef manufacturer_id
1272*c19800e8SDoug Rabson #undef library_description
1273*c19800e8SDoug Rabson #undef library_version
1274*c19800e8SDoug Rabson 
1275*c19800e8SDoug Rabson #undef ck_notification_t
1276*c19800e8SDoug Rabson #undef ck_slot_id_t
1277*c19800e8SDoug Rabson 
1278*c19800e8SDoug Rabson #undef ck_slot_info
1279*c19800e8SDoug Rabson #undef slot_description
1280*c19800e8SDoug Rabson #undef hardware_version
1281*c19800e8SDoug Rabson #undef firmware_version
1282*c19800e8SDoug Rabson 
1283*c19800e8SDoug Rabson #undef ck_token_info
1284*c19800e8SDoug Rabson #undef serial_number
1285*c19800e8SDoug Rabson #undef max_session_count
1286*c19800e8SDoug Rabson #undef session_count
1287*c19800e8SDoug Rabson #undef max_rw_session_count
1288*c19800e8SDoug Rabson #undef rw_session_count
1289*c19800e8SDoug Rabson #undef max_pin_len
1290*c19800e8SDoug Rabson #undef min_pin_len
1291*c19800e8SDoug Rabson #undef total_public_memory
1292*c19800e8SDoug Rabson #undef free_public_memory
1293*c19800e8SDoug Rabson #undef total_private_memory
1294*c19800e8SDoug Rabson #undef free_private_memory
1295*c19800e8SDoug Rabson #undef utc_time
1296*c19800e8SDoug Rabson 
1297*c19800e8SDoug Rabson #undef ck_session_handle_t
1298*c19800e8SDoug Rabson #undef ck_user_type_t
1299*c19800e8SDoug Rabson #undef ck_state_t
1300*c19800e8SDoug Rabson 
1301*c19800e8SDoug Rabson #undef ck_session_info
1302*c19800e8SDoug Rabson #undef slot_id
1303*c19800e8SDoug Rabson #undef device_error
1304*c19800e8SDoug Rabson 
1305*c19800e8SDoug Rabson #undef ck_object_handle_t
1306*c19800e8SDoug Rabson #undef ck_object_class_t
1307*c19800e8SDoug Rabson #undef ck_hw_feature_type_t
1308*c19800e8SDoug Rabson #undef ck_key_type_t
1309*c19800e8SDoug Rabson #undef ck_certificate_type_t
1310*c19800e8SDoug Rabson #undef ck_attribute_type_t
1311*c19800e8SDoug Rabson 
1312*c19800e8SDoug Rabson #undef ck_attribute
1313*c19800e8SDoug Rabson #undef value
1314*c19800e8SDoug Rabson #undef value_len
1315*c19800e8SDoug Rabson 
1316*c19800e8SDoug Rabson #undef ck_date
1317*c19800e8SDoug Rabson 
1318*c19800e8SDoug Rabson #undef ck_mechanism_type_t
1319*c19800e8SDoug Rabson 
1320*c19800e8SDoug Rabson #undef ck_mechanism
1321*c19800e8SDoug Rabson #undef parameter
1322*c19800e8SDoug Rabson #undef parameter_len
1323*c19800e8SDoug Rabson 
1324*c19800e8SDoug Rabson #undef ck_mechanism_info
1325*c19800e8SDoug Rabson #undef min_key_size
1326*c19800e8SDoug Rabson #undef max_key_size
1327*c19800e8SDoug Rabson 
1328*c19800e8SDoug Rabson #undef ck_rv_t
1329*c19800e8SDoug Rabson #undef ck_notify_t
1330*c19800e8SDoug Rabson 
1331*c19800e8SDoug Rabson #undef ck_function_list
1332*c19800e8SDoug Rabson 
1333*c19800e8SDoug Rabson #undef ck_createmutex_t
1334*c19800e8SDoug Rabson #undef ck_destroymutex_t
1335*c19800e8SDoug Rabson #undef ck_lockmutex_t
1336*c19800e8SDoug Rabson #undef ck_unlockmutex_t
1337*c19800e8SDoug Rabson 
1338*c19800e8SDoug Rabson #undef ck_c_initialize_args
1339*c19800e8SDoug Rabson #undef create_mutex
1340*c19800e8SDoug Rabson #undef destroy_mutex
1341*c19800e8SDoug Rabson #undef lock_mutex
1342*c19800e8SDoug Rabson #undef unlock_mutex
1343*c19800e8SDoug Rabson #undef reserved
1344*c19800e8SDoug Rabson 
1345*c19800e8SDoug Rabson #endif	/* CRYPTOKI_COMPAT */
1346*c19800e8SDoug Rabson 
1347*c19800e8SDoug Rabson 
1348*c19800e8SDoug Rabson /* System dependencies.  */
1349*c19800e8SDoug Rabson #if defined(_WIN32) || defined(CRYPTOKI_FORCE_WIN32)
1350*c19800e8SDoug Rabson #pragma pack(pop, cryptoki)
1351*c19800e8SDoug Rabson #endif
1352*c19800e8SDoug Rabson 
1353*c19800e8SDoug Rabson #if defined(__cplusplus)
1354*c19800e8SDoug Rabson }
1355*c19800e8SDoug Rabson #endif
1356*c19800e8SDoug Rabson 
1357*c19800e8SDoug Rabson #endif	/* PKCS11_H */
1358