Botan
3.6.1
Crypto and TLS for C&
src
lib
prov
pkcs11
pkcs11.h
Go to the documentation of this file.
1
/*
2
* PKCS #11 Cryptographic Token Interface Base Specification Version 2.40 Errata 01
3
* Committee Specification Draft 01 / Public Review Draft 01
4
* 09 December 2015
5
* Copyright (c) OASIS Open 2015. All Rights Reserved.
6
* Source: http://docs.oasis-open.org/pkcs11/pkcs11-base/v2.40/errata01/csprd01/include/pkcs11-v2.40/
7
* Latest version of the specification: http://docs.oasis-open.org/pkcs11/pkcs11-base/v2.40/pkcs11-base-v2.40.html
8
* https://www.oasis-open.org/policies-guidelines/ipr
9
*/
10
11
#ifndef _PKCS11_H_
12
#define _PKCS11_H_ 1
13
14
#ifdef __cplusplus
15
extern
"C"
{
16
#endif
17
18
/* Before including this file (pkcs11.h) (or pkcs11t.h by
19
* itself), 5 platform-specific macros must be defined. These
20
* macros are described below, and typical definitions for them
21
* are also given. Be advised that these definitions can depend
22
* on both the platform and the compiler used (and possibly also
23
* on whether a Cryptoki library is linked statically or
24
* dynamically).
25
*
26
* In addition to defining these 5 macros, the packing convention
27
* for Cryptoki structures should be set. The Cryptoki
28
* convention on packing is that structures should be 1-byte
29
* aligned.
30
*
31
* If you're using Microsoft Developer Studio 5.0 to produce
32
* Win32 stuff, this might be done by using the following
33
* preprocessor directive before including pkcs11.h or pkcs11t.h:
34
*
35
* #pragma pack(push, cryptoki, 1)
36
*
37
* and using the following preprocessor directive after including
38
* pkcs11.h or pkcs11t.h:
39
*
40
* #pragma pack(pop, cryptoki)
41
*
42
* If you're using an earlier version of Microsoft Developer
43
* Studio to produce Win16 stuff, this might be done by using
44
* the following preprocessor directive before including
45
* pkcs11.h or pkcs11t.h:
46
*
47
* #pragma pack(1)
48
*
49
* In a UNIX environment, you're on your own for this. You might
50
* not need to do (or be able to do!) anything.
51
*
52
*
53
* Now for the macros:
54
*
55
*
56
* 1. CK_PTR: The indirection string for making a pointer to an
57
* object. It can be used like this:
58
*
59
* typedef CK_BYTE CK_PTR CK_BYTE_PTR;
60
*
61
* If you're using Microsoft Developer Studio 5.0 to produce
62
* Win32 stuff, it might be defined by:
63
*
64
* #define CK_PTR *
65
*
66
* If you're using an earlier version of Microsoft Developer
67
* Studio to produce Win16 stuff, it might be defined by:
68
*
69
* #define CK_PTR far *
70
*
71
* In a typical UNIX environment, it might be defined by:
72
*
73
* #define CK_PTR *
74
*
75
*
76
* 2. CK_DECLARE_FUNCTION(returnType, name): A macro which makes
77
* an importable Cryptoki library function declaration out of a
78
* return type and a function name. It should be used in the
79
* following fashion:
80
*
81
* extern CK_DECLARE_FUNCTION(CK_RV, C_Initialize)(
82
* CK_VOID_PTR pReserved
83
* );
84
*
85
* If you're using Microsoft Developer Studio 5.0 to declare a
86
* function in a Win32 Cryptoki .dll, it might be defined by:
87
*
88
* #define CK_DECLARE_FUNCTION(returnType, name) \
89
* returnType __declspec(dllimport) name
90
*
91
* If you're using an earlier version of Microsoft Developer
92
* Studio to declare a function in a Win16 Cryptoki .dll, it
93
* might be defined by:
94
*
95
* #define CK_DECLARE_FUNCTION(returnType, name) \
96
* returnType __export _far _pascal name
97
*
98
* In a UNIX environment, it might be defined by:
99
*
100
* #define CK_DECLARE_FUNCTION(returnType, name) \
101
* returnType name
102
*
103
*
104
* 3. CK_DECLARE_FUNCTION_POINTER(returnType, name): A macro
105
* which makes a Cryptoki API function pointer declaration or
106
* function pointer type declaration out of a return type and a
107
* function name. It should be used in the following fashion:
108
*
109
* // Define funcPtr to be a pointer to a Cryptoki API function
110
* // taking arguments args and returning CK_RV.
111
* CK_DECLARE_FUNCTION_POINTER(CK_RV, funcPtr)(args);
112
*
113
* or
114
*
115
* // Define funcPtrType to be the type of a pointer to a
116
* // Cryptoki API function taking arguments args and returning
117
* // CK_RV, and then define funcPtr to be a variable of type
118
* // funcPtrType.
119
* typedef CK_DECLARE_FUNCTION_POINTER(CK_RV, funcPtrType)(args);
120
* funcPtrType funcPtr;
121
*
122
* If you're using Microsoft Developer Studio 5.0 to access
123
* functions in a Win32 Cryptoki .dll, in might be defined by:
124
*
125
* #define CK_DECLARE_FUNCTION_POINTER(returnType, name) \
126
* returnType __declspec(dllimport) (* name)
127
*
128
* If you're using an earlier version of Microsoft Developer
129
* Studio to access functions in a Win16 Cryptoki .dll, it might
130
* be defined by:
131
*
132
* #define CK_DECLARE_FUNCTION_POINTER(returnType, name) \
133
* returnType __export _far _pascal (* name)
134
*
135
* In a UNIX environment, it might be defined by:
136
*
137
* #define CK_DECLARE_FUNCTION_POINTER(returnType, name) \
138
* returnType (* name)
139
*
140
*
141
* 4. CK_CALLBACK_FUNCTION(returnType, name): A macro which makes
142
* a function pointer type for an application callback out of
143
* a return type for the callback and a name for the callback.
144
* It should be used in the following fashion:
145
*
146
* CK_CALLBACK_FUNCTION(CK_RV, myCallback)(args);
147
*
148
* to declare a function pointer, myCallback, to a callback
149
* which takes arguments args and returns a CK_RV. It can also
150
* be used like this:
151
*
152
* typedef CK_CALLBACK_FUNCTION(CK_RV, myCallbackType)(args);
153
* myCallbackType myCallback;
154
*
155
* If you're using Microsoft Developer Studio 5.0 to do Win32
156
* Cryptoki development, it might be defined by:
157
*
158
* #define CK_CALLBACK_FUNCTION(returnType, name) \
159
* returnType (* name)
160
*
161
* If you're using an earlier version of Microsoft Developer
162
* Studio to do Win16 development, it might be defined by:
163
*
164
* #define CK_CALLBACK_FUNCTION(returnType, name) \
165
* returnType _far _pascal (* name)
166
*
167
* In a UNIX environment, it might be defined by:
168
*
169
* #define CK_CALLBACK_FUNCTION(returnType, name) \
170
* returnType (* name)
171
*
172
*
173
* 5. NULL_PTR: This macro is the value of a NULL pointer.
174
*
175
* In any ANSI/ISO C environment (and in many others as well),
176
* this should best be defined by
177
*
178
* #ifndef NULL_PTR
179
* #define NULL_PTR 0
180
* #endif
181
*/
182
183
184
/* All the various Cryptoki types and #define'd values are in the
185
* file pkcs11t.h.
186
*/
187
#include "
pkcs11t.h
"
188
189
#define __PASTE(x,y) x##y
190
191
192
/* ==============================================================
193
* Define the "extern" form of all the entry points.
194
* ==============================================================
195
*/
196
197
#define CK_NEED_ARG_LIST 1
198
#define CK_PKCS11_FUNCTION_INFO(name) \
199
extern CK_DECLARE_FUNCTION(CK_RV, name)
200
201
/* pkcs11f.h has all the information about the Cryptoki
202
* function prototypes.
203
*/
204
#include "
pkcs11f.h
"
205
206
#undef CK_NEED_ARG_LIST
207
#undef CK_PKCS11_FUNCTION_INFO
208
209
210
/* ==============================================================
211
* Define the typedef form of all the entry points. That is, for
212
* each Cryptoki function C_XXX, define a type CK_C_XXX which is
213
* a pointer to that kind of function.
214
* ==============================================================
215
*/
216
217
#define CK_NEED_ARG_LIST 1
218
#define CK_PKCS11_FUNCTION_INFO(name) \
219
typedef CK_DECLARE_FUNCTION_POINTER(CK_RV, __PASTE(CK_,name))
220
221
/* pkcs11f.h has all the information about the Cryptoki
222
* function prototypes.
223
*/
224
#include "
pkcs11f.h
"
225
226
#undef CK_NEED_ARG_LIST
227
#undef CK_PKCS11_FUNCTION_INFO
228
229
230
/* ==============================================================
231
* Define structed vector of entry points. A CK_FUNCTION_LIST
232
* contains a CK_VERSION indicating a library's Cryptoki version
233
* and then a whole slew of function pointers to the routines in
234
* the library. This type was declared, but not defined, in
235
* pkcs11t.h.
236
* ==============================================================
237
*/
238
239
#define CK_PKCS11_FUNCTION_INFO(name) \
240
__PASTE(CK_,name) name;
241
242
struct
CK_FUNCTION_LIST
{
243
244
CK_VERSION
version
;
/* Cryptoki version */
245
246
/* Pile all the function pointers into the CK_FUNCTION_LIST. */
247
/* pkcs11f.h has all the information about the Cryptoki
248
* function prototypes.
249
*/
250
#include "
pkcs11f.h
"
251
252
};
253
254
#undef CK_PKCS11_FUNCTION_INFO
255
256
257
#undef __PASTE
258
259
#ifdef __cplusplus
260
}
261
#endif
262
263
#endif
/* _PKCS11_H_ */
264
pkcs11f.h
pkcs11t.h
CK_FUNCTION_LIST
Definition
pkcs11.h:242
CK_FUNCTION_LIST::version
CK_VERSION version
Definition
pkcs11.h:244
CK_VERSION
Definition
pkcs11t.h:78
Generated by
1.12.0