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