pkcs11-helper
pkcs11h-core.h
Go to the documentation of this file.
1 /*
2  * Copyright (c) 2005-2011 Alon Bar-Lev <alon.barlev@gmail.com>
3  * All rights reserved.
4  *
5  * This software is available to you under a choice of one of two
6  * licenses. You may choose to be licensed under the terms of the GNU
7  * General Public License (GPL) Version 2, or the BSD license.
8  *
9  * GNU General Public License (GPL) Version 2
10  * ===========================================
11  * This program is free software; you can redistribute it and/or modify
12  * it under the terms of the GNU General Public License version 2
13  * as published by the Free Software Foundation.
14  *
15  * This program is distributed in the hope that it will be useful,
16  * but WITHOUT ANY WARRANTY; without even the implied warranty of
17  * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
18  * GNU General Public License for more details.
19  *
20  * You should have received a copy of the GNU General Public License
21  * along with this program (see the file COPYING.GPL included with this
22  * distribution); if not, write to the Free Software Foundation, Inc.,
23  * 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA.
24  *
25  * BSD License
26  * ============
27  * Redistribution and use in source and binary forms, with or without
28  * modification, are permitted provided that the following conditions are met:
29  *
30  * o Redistributions of source code must retain the above copyright notice,
31  * this list of conditions and the following disclaimer.
32  * o Redistributions in binary form must reproduce the above copyright
33  * notice, this list of conditions and the following disclaimer in the
34  * documentation and/or other materials provided with the distribution.
35  * o Neither the name of the Alon Bar-Lev nor the names of its
36  * contributors may be used to endorse or promote products derived from
37  * this software without specific prior written permission.
38  *
39  * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS"
40  * AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
41  * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
42  * ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT OWNER OR CONTRIBUTORS BE
43  * LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR
44  * CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF
45  * SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS
46  * INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN
47  * CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE)
48  * ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE
49  * POSSIBILITY OF SUCH DAMAGE.
50  */
51 
67 #ifndef __PKCS11H_BASE_H
68 #define __PKCS11H_BASE_H
69 
70 #include <stdarg.h>
71 #include <time.h>
72 
76 
77 #if defined(__cplusplus)
78 extern "C" {
79 #endif
80 
88 #define PKCS11H_FEATURE_MASK_ENGINE_CRYPTO_OPENSSL (1<< 0)
89 
90 #define PKCS11H_FEATURE_MASK_ENGINE_CRYPTO_GNUTLS (1<< 1)
91 
92 #define PKCS11H_FEATURE_MASK_ENGINE_CRYPTO_CRYPTOAPI (1<< 2)
93 
97 #define PKCS11H_FEATURE_MASK_ENGINE_CRYPTO_WIN32 (1<< 2)
98 
99 #define PKCS11H_FEATURE_MASK_DEBUG (1<< 3)
100 
101 #define PKCS11H_FEATURE_MASK_THREADING (1<< 4)
102 
103 #define PKCS11H_FEATURE_MASK_TOKEN (1<< 5)
104 
105 #define PKCS11H_FEATURE_MASK_DATA (1<< 6)
106 
107 #define PKCS11H_FEATURE_MASK_CERTIFICATE (1<< 7)
108 
109 #define PKCS11H_FEATURE_MASK_SLOTEVENT (1<< 8)
110 
111 #define PKCS11H_FEATURE_MASK_OPENSSL (1<< 9)
112 
113 #define PKCS11H_FEATURE_MASK_ENGINE_CRYPTO_POLARSSL (1<< 10)
114 
124 #define PKCS11H_LOG_DEBUG2 5
125 
126 #define PKCS11H_LOG_DEBUG1 4
127 
128 #define PKCS11H_LOG_INFO 3
129 
130 #define PKCS11H_LOG_WARN 2
131 
132 #define PKCS11H_LOG_ERROR 1
133 
134 #define PKCS11H_LOG_QUIET 0
135 
138 #define PKCS11H_PIN_CACHE_INFINITE -1
139 
146 #define PKCS11H_PRIVATEMODE_MASK_AUTO (0)
147 
148 #define PKCS11H_PRIVATEMODE_MASK_SIGN (1<<0)
149 
150 #define PKCS11H_PRIVATEMODE_MASK_RECOVER (1<<1)
151 
152 #define PKCS11H_PRIVATEMODE_MASK_DECRYPT (1<<2)
153 
154 #define PKCS11H_PRIVATEMODE_MASK_UNWRAP (1<<3)
155 
162 /* Auto select by provider information. */
163 #define PKCS11H_SLOTEVENT_METHOD_AUTO 0
164 
165 #define PKCS11H_SLOTEVENT_METHOD_TRIGGER 1
166 
167 #define PKCS11H_SLOTEVENT_METHOD_POLL 2
168 
169 #define PKCS11H_SLOTEVENT_METHOD_FETCH 3
170 
178 #define PKCS11H_PROMPT_MASK_ALLOW_PIN_PROMPT (1<<0)
179 
180 #define PKCS11H_PROMPT_MASK_ALLOW_TOKEN_PROMPT (1<<1)
181 
182 #define PKCS11H_PROMPT_MASK_ALLOW_ALL ( \
183  PKCS11H_PROMPT_MASK_ALLOW_PIN_PROMPT | \
184  PKCS11H_PROMPT_MASK_ALLOW_TOKEN_PROMPT \
185  )
186 
194 #define PKCS11H_ENUM_METHOD_CACHE 0
195 
196 #define PKCS11H_ENUM_METHOD_CACHE_EXIST 1
197 
198 #define PKCS11H_ENUM_METHOD_RELOAD 2
199 
201 struct pkcs11h_token_id_s;
202 
207 
215 typedef void (*pkcs11h_hook_log_t)(
216  IN void * const global_data,
217  IN const unsigned flags,
218  IN const char * const format,
219  IN va_list args
220 );
221 
226 typedef void (*pkcs11h_hook_slotevent_t)(
227  IN void * const global_data
228 );
229 
238 typedef PKCS11H_BOOL (*pkcs11h_hook_token_prompt_t)(
239  IN void * const global_data,
240  IN void * const user_data,
241  IN const pkcs11h_token_id_t token,
242  IN const unsigned retry
243 );
244 
255 typedef PKCS11H_BOOL (*pkcs11h_hook_pin_prompt_t)(
256  IN void * const global_data,
257  IN void * const user_data,
258  IN const pkcs11h_token_id_t token,
259  IN const unsigned retry,
260  OUT char * const pin,
261  IN const size_t pin_max
262 );
263 
269  char display[1024];
271  char manufacturerID[sizeof (((CK_TOKEN_INFO *)NULL)->manufacturerID)+1];
273  char model[sizeof (((CK_TOKEN_INFO *)NULL)->model)+1];
275  char serialNumber[sizeof (((CK_TOKEN_INFO *)NULL)->serialNumber)+1];
277  char label[sizeof (((CK_TOKEN_INFO *)NULL)->label)+1];
278 };
279 
285 const char *
287  IN const CK_RV rv
288 );
289 
294 unsigned int
295 pkcs11h_getVersion (void);
296 
301 unsigned int
302 pkcs11h_getFeatures (void);
303 
310 CK_RV
311 pkcs11h_initialize (void);
312 
318 CK_RV
319 pkcs11h_terminate (void);
320 
325 void
327  IN const unsigned flags
328 );
329 
334 unsigned
335 pkcs11h_getLogLevel (void);
336 
349 CK_RV
351  IN const PKCS11H_BOOL safe
352 );
353 
360 CK_RV
362  IN const pkcs11h_hook_log_t hook,
363  IN void * const global_data
364 );
365 
377 CK_RV
379  IN const pkcs11h_hook_slotevent_t hook,
380  IN void * const global_data
381 );
382 
391 CK_RV
393  IN const pkcs11h_hook_token_prompt_t hook,
394  IN void * const global_data
395 );
396 
405 CK_RV
407  IN const pkcs11h_hook_pin_prompt_t hook,
408  IN void * const global_data
409 );
410 
417 CK_RV
419  IN const PKCS11H_BOOL allow_protected_auth
420 );
421 
428 CK_RV
430  IN const int pin_cache_period
431 );
432 
439 CK_RV
441  IN const unsigned max_retries
442 );
443 
457 CK_RV
459  IN const char * const reference,
460  IN const char * const provider_location,
461  IN const PKCS11H_BOOL allow_protected_auth,
462  IN const unsigned mask_private_mode,
463  IN const unsigned slot_event_method,
464  IN const unsigned slot_poll_interval,
465  IN const PKCS11H_BOOL cert_is_private
466 );
467 
474 CK_RV
476  IN const char * const reference
477 );
478 
490 CK_RV
491 pkcs11h_forkFixup (void);
492 
504 CK_RV
505 pkcs11h_plugAndPlay (void);
506 
511 CK_RV
512 pkcs11h_logout (void);
513 
514 #ifdef __cplusplus
515 }
516 #endif
517 
520 #endif /* __PKCS11H_BASE_H */
CK_RV pkcs11h_logout(void)
Logout from all sessions.
char serialNumber[sizeof(((CK_TOKEN_INFO *) NULL) ->serialNumber)+1]
Definition: pkcs11h-core.h:275
const char * pkcs11h_getMessage(IN const CK_RV rv)
Get message by return value.
PKCS11H_BOOL(* pkcs11h_hook_token_prompt_t)(IN void *const global_data, IN void *const user_data, IN const pkcs11h_token_id_t token, IN const unsigned retry)
Token prompt hook.
Definition: pkcs11h-core.h:238
unsigned pkcs11h_getLogLevel(void)
Get current log level.
char model[sizeof(((CK_TOKEN_INFO *) NULL) ->model)+1]
Definition: pkcs11h-core.h:273
char manufacturerID[sizeof(((CK_TOKEN_INFO *) NULL) ->manufacturerID)+1]
Definition: pkcs11h-core.h:271
CK_RV pkcs11h_plugAndPlay(void)
Handle slot rescan.
char display[1024]
Definition: pkcs11h-core.h:269
CK_RV pkcs11h_addProvider(IN const char *const reference, IN const char *const provider_location, IN const PKCS11H_BOOL allow_protected_auth, IN const unsigned mask_private_mode, IN const unsigned slot_event_method, IN const unsigned slot_poll_interval, IN const PKCS11H_BOOL cert_is_private)
Add a PKCS#11 provider.
CK_RV pkcs11h_setMaxLoginRetries(IN const unsigned max_retries)
Set global login retries attempts.
Token identifier.
Definition: pkcs11h-core.h:267
PKCS11H_BOOL(* pkcs11h_hook_pin_prompt_t)(IN void *const global_data, IN void *const user_data, IN const pkcs11h_token_id_t token, IN const unsigned retry, OUT char *const pin, IN const size_t pin_max)
PIN prompt hook.
Definition: pkcs11h-core.h:255
CK_RV pkcs11h_forkFixup(void)
Handle special case of POSIX fork()
unsigned int pkcs11h_getFeatures(void)
Get features of library.
CK_RV pkcs11h_setTokenPromptHook(IN const pkcs11h_hook_token_prompt_t hook, IN void *const global_data)
Set a token prompt callback.
CK_RV pkcs11h_setPINCachePeriod(IN const int pin_cache_period)
Set global PIN cache timeout.
CK_RV pkcs11h_setPINPromptHook(IN const pkcs11h_hook_pin_prompt_t hook, IN void *const global_data)
Set a pin prompt callback.
pkcs11-helper core.
CK_RV pkcs11h_initialize(void)
Inititalize helper interface.
CK_RV pkcs11h_terminate(void)
Terminate helper interface.
CK_RV pkcs11h_setProtectedAuthentication(IN const PKCS11H_BOOL allow_protected_auth)
Set global protected authentication mode.
CK_RV pkcs11h_setSlotEventHook(IN const pkcs11h_hook_slotevent_t hook, IN void *const global_data)
Set a slot event callback.
void(* pkcs11h_hook_slotevent_t)(IN void *const global_data)
Slotevent hook.
Definition: pkcs11h-core.h:226
CK_RV pkcs11h_removeProvider(IN const char *const reference)
Delete a PKCS#11 provider.
CK_RV pkcs11h_setForkMode(IN const PKCS11H_BOOL safe)
How does the foked process bahaves after POSIX fork()
void(* pkcs11h_hook_log_t)(IN void *const global_data, IN const unsigned flags, IN const char *const format, IN va_list args)
Log hook.
Definition: pkcs11h-core.h:215
CK_RV pkcs11h_setLogHook(IN const pkcs11h_hook_log_t hook, IN void *const global_data)
Set a log callback.
unsigned int pkcs11h_getVersion(void)
Get version of library.
void pkcs11h_setLogLevel(IN const unsigned flags)
Set current log level of the helper.
pkcs11-helper engines definitions.
struct pkcs11h_token_id_s * pkcs11h_token_id_t
Token identifier.
Definition: pkcs11h-core.h:206
pkcs11-helper core definitions.
char label[sizeof(((CK_TOKEN_INFO *) NULL) ->label)+1]
Definition: pkcs11h-core.h:277

pkcs11-helper, Copyright (C) Alon Bar-Lev <alon.barlev@gmail.com>OpenSC-Project.org Logo