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