source: lab.git/Dev/utvpn/utvpn-unix-v101-7101-public/src/Mayaqua/pkcs11.h @ 072e48b

trunk
Last change on this file since 072e48b was a1bae3e, checked in by mitty <mitty@…>, 12 years ago
  • copy vendor drop to trunk

git-svn-id: https://lab.mitty.jp/svn/lab/trunk@147 7d2118f6-f56c-43e7-95a2-4bb3031d96e7

  • Property mode set to 100644
File size: 9.4 KB
RevLine 
[a1bae3e]1/* pkcs11.h include file for PKCS #11. */
2/* $Revision: 1.4 $ */
3
4/* License to copy and use this software is granted provided that it is
5 * identified as "RSA Security Inc. PKCS #11 Cryptographic Token Interface
6 * (Cryptoki)" in all material mentioning or referencing this software.
7
8 * License is also granted to make and use derivative works provided that
9 * such works are identified as "derived from the RSA Security Inc. PKCS #11
10 * Cryptographic Token Interface (Cryptoki)" in all material mentioning or
11 * referencing the derived work.
12
13 * RSA Security Inc. makes no representations concerning either the
14 * merchantability of this software or the suitability of this software for
15 * any particular purpose. It is provided "as is" without express or implied
16 * warranty of any kind.
17 */
18
19#ifndef _PKCS11_H_
20#define _PKCS11_H_ 1
21
22#ifdef __cplusplus
23extern "C" {
24#endif
25
26/* Before including this file (pkcs11.h) (or pkcs11t.h by
27 * itself), 6 platform-specific macros must be defined.  These
28 * macros are described below, and typical definitions for them
29 * are also given.  Be advised that these definitions can depend
30 * on both the platform and the compiler used (and possibly also
31 * on whether a Cryptoki library is linked statically or
32 * dynamically).
33 *
34 * In addition to defining these 6 macros, the packing convention
35 * for Cryptoki structures should be set.  The Cryptoki
36 * convention on packing is that structures should be 1-byte
37 * aligned.
38 *
39 * If you're using Microsoft Developer Studio 5.0 to produce
40 * Win32 stuff, this might be done by using the following
41 * preprocessor directive before including pkcs11.h or pkcs11t.h:
42 *
43 * #pragma pack(push, cryptoki, 1)
44 *
45 * and using the following preprocessor directive after including
46 * pkcs11.h or pkcs11t.h:
47 *
48 * #pragma pack(pop, cryptoki)
49 *
50 * If you're using an earlier version of Microsoft Developer
51 * Studio to produce Win16 stuff, this might be done by using
52 * the following preprocessor directive before including
53 * pkcs11.h or pkcs11t.h:
54 *
55 * #pragma pack(1)
56 *
57 * In a UNIX environment, you're on your own for this.  You might
58 * not need to do (or be able to do!) anything.
59 *
60 *
61 * Now for the macros:
62 *
63 *
64 * 1. CK_PTR: The indirection string for making a pointer to an
65 * object.  It can be used like this:
66 *
67 * typedef CK_BYTE CK_PTR CK_BYTE_PTR;
68 *
69 * If you're using Microsoft Developer Studio 5.0 to produce
70 * Win32 stuff, it might be defined by:
71 *
72 * #define CK_PTR *
73 *
74 * If you're using an earlier version of Microsoft Developer
75 * Studio to produce Win16 stuff, it might be defined by:
76 *
77 * #define CK_PTR far *
78 *
79 * In a typical UNIX environment, it might be defined by:
80 *
81 * #define CK_PTR *
82 *
83 *
84 * 2. CK_DEFINE_FUNCTION(returnType, name): A macro which makes
85 * an exportable Cryptoki library function definition out of a
86 * return type and a function name.  It should be used in the
87 * following fashion to define the exposed Cryptoki functions in
88 * a Cryptoki library:
89 *
90 * CK_DEFINE_FUNCTION(CK_RV, C_Initialize)(
91 *   CK_VOID_PTR pReserved
92 * )
93 * {
94 *   ...
95 * }
96 *
97 * If you're using Microsoft Developer Studio 5.0 to define a
98 * function in a Win32 Cryptoki .dll, it might be defined by:
99 *
100 * #define CK_DEFINE_FUNCTION(returnType, name) \
101 *   returnType __declspec(dllexport) name
102 *
103 * If you're using an earlier version of Microsoft Developer
104 * Studio to define a function in a Win16 Cryptoki .dll, it
105 * might be defined by:
106 *
107 * #define CK_DEFINE_FUNCTION(returnType, name) \
108 *   returnType __export _far _pascal name
109 *
110 * In a UNIX environment, it might be defined by:
111 *
112 * #define CK_DEFINE_FUNCTION(returnType, name) \
113 *   returnType name
114 *
115 *
116 * 3. CK_DECLARE_FUNCTION(returnType, name): A macro which makes
117 * an importable Cryptoki library function declaration out of a
118 * return type and a function name.  It should be used in the
119 * following fashion:
120 *
121 * extern CK_DECLARE_FUNCTION(CK_RV, C_Initialize)(
122 *   CK_VOID_PTR pReserved
123 * );
124 *
125 * If you're using Microsoft Developer Studio 5.0 to declare a
126 * function in a Win32 Cryptoki .dll, it might be defined by:
127 *
128 * #define CK_DECLARE_FUNCTION(returnType, name) \
129 *   returnType __declspec(dllimport) name
130 *
131 * If you're using an earlier version of Microsoft Developer
132 * Studio to declare a function in a Win16 Cryptoki .dll, it
133 * might be defined by:
134 *
135 * #define CK_DECLARE_FUNCTION(returnType, name) \
136 *   returnType __export _far _pascal name
137 *
138 * In a UNIX environment, it might be defined by:
139 *
140 * #define CK_DECLARE_FUNCTION(returnType, name) \
141 *   returnType name
142 *
143 *
144 * 4. CK_DECLARE_FUNCTION_POINTER(returnType, name): A macro
145 * which makes a Cryptoki API function pointer declaration or
146 * function pointer type declaration out of a return type and a
147 * function name.  It should be used in the following fashion:
148 *
149 * // Define funcPtr to be a pointer to a Cryptoki API function
150 * // taking arguments args and returning CK_RV.
151 * CK_DECLARE_FUNCTION_POINTER(CK_RV, funcPtr)(args);
152 *
153 * or
154 *
155 * // Define funcPtrType to be the type of a pointer to a
156 * // Cryptoki API function taking arguments args and returning
157 * // CK_RV, and then define funcPtr to be a variable of type
158 * // funcPtrType.
159 * typedef CK_DECLARE_FUNCTION_POINTER(CK_RV, funcPtrType)(args);
160 * funcPtrType funcPtr;
161 *
162 * If you're using Microsoft Developer Studio 5.0 to access
163 * functions in a Win32 Cryptoki .dll, in might be defined by:
164 *
165 * #define CK_DECLARE_FUNCTION_POINTER(returnType, name) \
166 *   returnType __declspec(dllimport) (* name)
167 *
168 * If you're using an earlier version of Microsoft Developer
169 * Studio to access functions in a Win16 Cryptoki .dll, it might
170 * be defined by:
171 *
172 * #define CK_DECLARE_FUNCTION_POINTER(returnType, name) \
173 *   returnType __export _far _pascal (* name)
174 *
175 * In a UNIX environment, it might be defined by:
176 *
177 * #define CK_DECLARE_FUNCTION_POINTER(returnType, name) \
178 *   returnType (* name)
179 *
180 *
181 * 5. CK_CALLBACK_FUNCTION(returnType, name): A macro which makes
182 * a function pointer type for an application callback out of
183 * a return type for the callback and a name for the callback.
184 * It should be used in the following fashion:
185 *
186 * CK_CALLBACK_FUNCTION(CK_RV, myCallback)(args);
187 *
188 * to declare a function pointer, myCallback, to a callback
189 * which takes arguments args and returns a CK_RV.  It can also
190 * be used like this:
191 *
192 * typedef CK_CALLBACK_FUNCTION(CK_RV, myCallbackType)(args);
193 * myCallbackType myCallback;
194 *
195 * If you're using Microsoft Developer Studio 5.0 to do Win32
196 * Cryptoki development, it might be defined by:
197 *
198 * #define CK_CALLBACK_FUNCTION(returnType, name) \
199 *   returnType (* name)
200 *
201 * If you're using an earlier version of Microsoft Developer
202 * Studio to do Win16 development, it might be defined by:
203 *
204 * #define CK_CALLBACK_FUNCTION(returnType, name) \
205 *   returnType _far _pascal (* name)
206 *
207 * In a UNIX environment, it might be defined by:
208 *
209 * #define CK_CALLBACK_FUNCTION(returnType, name) \
210 *   returnType (* name)
211 *
212 *
213 * 6. NULL_PTR: This macro is the value of a NULL pointer.
214 *
215 * In any ANSI/ISO C environment (and in many others as well),
216 * this should best be defined by
217 *
218 * #ifndef NULL_PTR
219 * #define NULL_PTR 0
220 * #endif
221 */
222
223
224/* All the various Cryptoki types and #define'd values are in the
225 * file pkcs11t.h. */
226#include "pkcs11t.h"
227
228#define __PASTE(x,y)      x##y
229
230
231/* ==============================================================
232 * Define the "extern" form of all the entry points.
233 * ==============================================================
234 */
235
236#define CK_NEED_ARG_LIST  1
237#define CK_PKCS11_FUNCTION_INFO(name) \
238  extern CK_DECLARE_FUNCTION(CK_RV, name)
239
240/* pkcs11f.h has all the information about the Cryptoki
241 * function prototypes. */
242#include "pkcs11f.h"
243
244#undef CK_NEED_ARG_LIST
245#undef CK_PKCS11_FUNCTION_INFO
246
247
248/* ==============================================================
249 * Define the typedef form of all the entry points.  That is, for
250 * each Cryptoki function C_XXX, define a type CK_C_XXX which is
251 * a pointer to that kind of function.
252 * ==============================================================
253 */
254
255#define CK_NEED_ARG_LIST  1
256#define CK_PKCS11_FUNCTION_INFO(name) \
257  typedef CK_DECLARE_FUNCTION_POINTER(CK_RV, __PASTE(CK_,name))
258
259/* pkcs11f.h has all the information about the Cryptoki
260 * function prototypes. */
261#include "pkcs11f.h"
262
263#undef CK_NEED_ARG_LIST
264#undef CK_PKCS11_FUNCTION_INFO
265
266
267/* ==============================================================
268 * Define structed vector of entry points.  A CK_FUNCTION_LIST
269 * contains a CK_VERSION indicating a library's Cryptoki version
270 * and then a whole slew of function pointers to the routines in
271 * the library.  This type was declared, but not defined, in
272 * pkcs11t.h.
273 * ==============================================================
274 */
275
276#define CK_PKCS11_FUNCTION_INFO(name) \
277  __PASTE(CK_,name) name;
278 
279struct CK_FUNCTION_LIST {
280
281  CK_VERSION    version;  /* Cryptoki version */
282
283/* Pile all the function pointers into the CK_FUNCTION_LIST. */
284/* pkcs11f.h has all the information about the Cryptoki
285 * function prototypes. */
286#include "pkcs11f.h"
287
288};
289
290#undef CK_PKCS11_FUNCTION_INFO
291
292
293#undef __PASTE
294
295#ifdef __cplusplus
296}
297#endif
298
299#endif
Note: See TracBrowser for help on using the repository browser.