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