1 /*
2 * Copyright (C) Internet Systems Consortium, Inc. ("ISC")
3 *
4 * This Source Code Form is subject to the terms of the Mozilla Public
5 * License, v. 2.0. If a copy of the MPL was not distributed with this
6 * file, You can obtain one at http://mozilla.org/MPL/2.0/.
7 *
8 * See the COPYRIGHT file distributed with this work for additional
9 * information regarding copyright ownership.
10 */
11
12 /*! \file */
13
14 /* missing code for WIN32 */
15
16 #include <string.h>
17 #include <windows.h>
18
19 #include <isc/log.h>
20 #include <isc/mem.h>
21 #include <isc/once.h>
22 #include <isc/print.h>
23 #include <isc/stdio.h>
24 #include <isc/thread.h>
25 #include <isc/util.h>
26
27 #include <pk11/internal.h>
28 #include <pk11/pk11.h>
29
30 char *
getpass(const char * prompt)31 getpass(const char *prompt) {
32 static char buf[128];
33 HANDLE h;
34 DWORD cc, mode;
35 int cnt;
36
37 h = GetStdHandle(STD_INPUT_HANDLE);
38 fputs(prompt, stderr);
39 fflush(stderr);
40 fflush(stdout);
41 FlushConsoleInputBuffer(h);
42 GetConsoleMode(h, &mode);
43 SetConsoleMode(h, ENABLE_PROCESSED_INPUT);
44
45 for (cnt = 0; cnt < sizeof(buf) - 1; cnt++) {
46 ReadFile(h, buf + cnt, 1, &cc, NULL);
47 if (buf[cnt] == '\r') {
48 break;
49 }
50 fputc('*', stdout);
51 fflush(stderr);
52 fflush(stdout);
53 }
54
55 SetConsoleMode(h, mode);
56 buf[cnt] = '\0';
57 fputs("\n", stderr);
58 return (buf);
59 }
60
61 /* load PKCS11 DLL */
62
63 static HINSTANCE hPK11 = NULL;
64 static char loaderrmsg[1024];
65
66 CK_RV
pkcs_C_Initialize(CK_VOID_PTR pReserved)67 pkcs_C_Initialize(CK_VOID_PTR pReserved) {
68 CK_C_Initialize sym;
69 const char *lib_name = pk11_get_lib_name();
70
71 if (hPK11 != NULL) {
72 return (CKR_LIBRARY_ALREADY_INITIALIZED);
73 }
74
75 if (lib_name == NULL) {
76 return (CKR_LIBRARY_FAILED_TO_LOAD);
77 }
78 /* Visual Studio conversion issue... */
79 if (*lib_name == ' ') {
80 lib_name++;
81 }
82
83 hPK11 = LoadLibraryA(lib_name);
84
85 if (hPK11 == NULL) {
86 const DWORD err = GetLastError();
87 snprintf(loaderrmsg, sizeof(loaderrmsg),
88 "LoadLibraryA(\"%s\") failed with 0x%X\n", lib_name,
89 err);
90 return (CKR_LIBRARY_FAILED_TO_LOAD);
91 }
92 sym = (CK_C_Initialize)GetProcAddress(hPK11, "C_Initialize");
93 if (sym == NULL) {
94 return (CKR_SYMBOL_RESOLUTION_FAILED);
95 }
96 return ((*sym)(pReserved));
97 }
98
99 char *
pk11_get_load_error_message(void)100 pk11_get_load_error_message(void) {
101 return (loaderrmsg);
102 }
103
104 CK_RV
pkcs_C_Finalize(CK_VOID_PTR pReserved)105 pkcs_C_Finalize(CK_VOID_PTR pReserved) {
106 CK_C_Finalize sym;
107 CK_RV rv;
108
109 if (hPK11 == NULL) {
110 return (CKR_LIBRARY_FAILED_TO_LOAD);
111 }
112 sym = (CK_C_Finalize)GetProcAddress(hPK11, "C_Finalize");
113 if (sym == NULL) {
114 return (CKR_SYMBOL_RESOLUTION_FAILED);
115 }
116 rv = (*sym)(pReserved);
117 if ((rv == CKR_OK) && (FreeLibrary(hPK11) == 0)) {
118 return (CKR_LIBRARY_FAILED_TO_LOAD);
119 }
120 hPK11 = NULL;
121 return (rv);
122 }
123
124 CK_RV
pkcs_C_GetSlotList(CK_BBOOL tokenPresent,CK_SLOT_ID_PTR pSlotList,CK_ULONG_PTR pulCount)125 pkcs_C_GetSlotList(CK_BBOOL tokenPresent, CK_SLOT_ID_PTR pSlotList,
126 CK_ULONG_PTR pulCount) {
127 static CK_C_GetSlotList sym = NULL;
128
129 if (hPK11 == NULL) {
130 return (CKR_LIBRARY_FAILED_TO_LOAD);
131 }
132 if (sym == NULL) {
133 sym = (CK_C_GetSlotList)GetProcAddress(hPK11, "C_GetSlotList");
134 }
135 if (sym == NULL) {
136 return (CKR_SYMBOL_RESOLUTION_FAILED);
137 }
138 return ((*sym)(tokenPresent, pSlotList, pulCount));
139 }
140
141 CK_RV
pkcs_C_GetTokenInfo(CK_SLOT_ID slotID,CK_TOKEN_INFO_PTR pInfo)142 pkcs_C_GetTokenInfo(CK_SLOT_ID slotID, CK_TOKEN_INFO_PTR pInfo) {
143 static CK_C_GetTokenInfo sym = NULL;
144
145 if (hPK11 == NULL) {
146 return (CKR_LIBRARY_FAILED_TO_LOAD);
147 }
148 if (sym == NULL) {
149 sym = (CK_C_GetTokenInfo)GetProcAddress(hPK11, "C_"
150 "GetTokenInfo");
151 }
152 if (sym == NULL) {
153 return (CKR_SYMBOL_RESOLUTION_FAILED);
154 }
155 return ((*sym)(slotID, pInfo));
156 }
157
158 CK_RV
pkcs_C_GetMechanismInfo(CK_SLOT_ID slotID,CK_MECHANISM_TYPE type,CK_MECHANISM_INFO_PTR pInfo)159 pkcs_C_GetMechanismInfo(CK_SLOT_ID slotID, CK_MECHANISM_TYPE type,
160 CK_MECHANISM_INFO_PTR pInfo) {
161 static CK_C_GetMechanismInfo sym = NULL;
162
163 if (hPK11 == NULL) {
164 return (CKR_LIBRARY_FAILED_TO_LOAD);
165 }
166 if (sym == NULL) {
167 sym = (CK_C_GetMechanismInfo)GetProcAddress(hPK11, "C_"
168 "GetMechanis"
169 "mInfo");
170 }
171 if (sym == NULL) {
172 return (CKR_SYMBOL_RESOLUTION_FAILED);
173 }
174 return ((*sym)(slotID, type, pInfo));
175 }
176
177 CK_RV
pkcs_C_OpenSession(CK_SLOT_ID slotID,CK_FLAGS flags,CK_VOID_PTR pApplication,CK_RV (* Notify)(CK_SESSION_HANDLE hSession,CK_NOTIFICATION event,CK_VOID_PTR pApplication),CK_SESSION_HANDLE_PTR phSession)178 pkcs_C_OpenSession(CK_SLOT_ID slotID, CK_FLAGS flags, CK_VOID_PTR pApplication,
179 CK_RV (*Notify)(CK_SESSION_HANDLE hSession,
180 CK_NOTIFICATION event,
181 CK_VOID_PTR pApplication),
182 CK_SESSION_HANDLE_PTR phSession) {
183 static CK_C_OpenSession sym = NULL;
184
185 if (hPK11 == NULL) {
186 hPK11 = LoadLibraryA(pk11_get_lib_name());
187 }
188 if (hPK11 == NULL) {
189 const DWORD err = GetLastError();
190 snprintf(loaderrmsg, sizeof(loaderrmsg),
191 "LoadLibraryA(\"%s\") failed with 0x%X\n",
192 pk11_get_lib_name(), err);
193 return (CKR_LIBRARY_FAILED_TO_LOAD);
194 }
195 if (sym == NULL) {
196 sym = (CK_C_OpenSession)GetProcAddress(hPK11, "C_OpenSession");
197 }
198 if (sym == NULL) {
199 return (CKR_SYMBOL_RESOLUTION_FAILED);
200 }
201 return ((*sym)(slotID, flags, pApplication, Notify, phSession));
202 }
203
204 CK_RV
pkcs_C_CloseSession(CK_SESSION_HANDLE hSession)205 pkcs_C_CloseSession(CK_SESSION_HANDLE hSession) {
206 static CK_C_CloseSession sym = NULL;
207
208 if (hPK11 == NULL) {
209 return (CKR_LIBRARY_FAILED_TO_LOAD);
210 }
211 if (sym == NULL) {
212 sym = (CK_C_CloseSession)GetProcAddress(hPK11, "C_"
213 "CloseSession");
214 }
215 if (sym == NULL) {
216 return (CKR_SYMBOL_RESOLUTION_FAILED);
217 }
218 return ((*sym)(hSession));
219 }
220
221 CK_RV
pkcs_C_Login(CK_SESSION_HANDLE hSession,CK_USER_TYPE userType,CK_CHAR_PTR pPin,CK_ULONG usPinLen)222 pkcs_C_Login(CK_SESSION_HANDLE hSession, CK_USER_TYPE userType,
223 CK_CHAR_PTR pPin, CK_ULONG usPinLen) {
224 static CK_C_Login sym = NULL;
225
226 if (hPK11 == NULL) {
227 return (CKR_LIBRARY_FAILED_TO_LOAD);
228 }
229 if (sym == NULL) {
230 sym = (CK_C_Login)GetProcAddress(hPK11, "C_Login");
231 }
232 if (sym == NULL) {
233 return (CKR_SYMBOL_RESOLUTION_FAILED);
234 }
235 return ((*sym)(hSession, userType, pPin, usPinLen));
236 }
237
238 CK_RV
pkcs_C_Logout(CK_SESSION_HANDLE hSession)239 pkcs_C_Logout(CK_SESSION_HANDLE hSession) {
240 static CK_C_Logout sym = NULL;
241
242 if (hPK11 == NULL) {
243 return (CKR_LIBRARY_FAILED_TO_LOAD);
244 }
245 if (sym == NULL) {
246 sym = (CK_C_Logout)GetProcAddress(hPK11, "C_Logout");
247 }
248 if (sym == NULL) {
249 return (CKR_SYMBOL_RESOLUTION_FAILED);
250 }
251 return ((*sym)(hSession));
252 }
253
254 CK_RV
pkcs_C_CreateObject(CK_SESSION_HANDLE hSession,CK_ATTRIBUTE_PTR pTemplate,CK_ULONG usCount,CK_OBJECT_HANDLE_PTR phObject)255 pkcs_C_CreateObject(CK_SESSION_HANDLE hSession, CK_ATTRIBUTE_PTR pTemplate,
256 CK_ULONG usCount, CK_OBJECT_HANDLE_PTR phObject) {
257 static CK_C_CreateObject sym = NULL;
258
259 if (hPK11 == NULL) {
260 return (CKR_LIBRARY_FAILED_TO_LOAD);
261 }
262 if (sym == NULL) {
263 sym = (CK_C_CreateObject)GetProcAddress(hPK11, "C_"
264 "CreateObject");
265 }
266 if (sym == NULL) {
267 return (CKR_SYMBOL_RESOLUTION_FAILED);
268 }
269 return ((*sym)(hSession, pTemplate, usCount, phObject));
270 }
271
272 CK_RV
pkcs_C_DestroyObject(CK_SESSION_HANDLE hSession,CK_OBJECT_HANDLE hObject)273 pkcs_C_DestroyObject(CK_SESSION_HANDLE hSession, CK_OBJECT_HANDLE hObject) {
274 static CK_C_DestroyObject sym = NULL;
275
276 if (hPK11 == NULL) {
277 return (CKR_LIBRARY_FAILED_TO_LOAD);
278 }
279 if (sym == NULL) {
280 sym = (CK_C_DestroyObject)GetProcAddress(hPK11, "C_"
281 "DestroyObjec"
282 "t");
283 }
284 if (sym == NULL) {
285 return (CKR_SYMBOL_RESOLUTION_FAILED);
286 }
287 return ((*sym)(hSession, hObject));
288 }
289
290 CK_RV
pkcs_C_GetAttributeValue(CK_SESSION_HANDLE hSession,CK_OBJECT_HANDLE hObject,CK_ATTRIBUTE_PTR pTemplate,CK_ULONG usCount)291 pkcs_C_GetAttributeValue(CK_SESSION_HANDLE hSession, CK_OBJECT_HANDLE hObject,
292 CK_ATTRIBUTE_PTR pTemplate, CK_ULONG usCount) {
293 static CK_C_GetAttributeValue sym = NULL;
294
295 if (hPK11 == NULL) {
296 return (CKR_LIBRARY_FAILED_TO_LOAD);
297 }
298 if (sym == NULL) {
299 sym = (CK_C_GetAttributeValue)GetProcAddress(hPK11, "C_"
300 "GetAttribu"
301 "teValue");
302 }
303 if (sym == NULL) {
304 return (CKR_SYMBOL_RESOLUTION_FAILED);
305 }
306 return ((*sym)(hSession, hObject, pTemplate, usCount));
307 }
308
309 CK_RV
pkcs_C_SetAttributeValue(CK_SESSION_HANDLE hSession,CK_OBJECT_HANDLE hObject,CK_ATTRIBUTE_PTR pTemplate,CK_ULONG usCount)310 pkcs_C_SetAttributeValue(CK_SESSION_HANDLE hSession, CK_OBJECT_HANDLE hObject,
311 CK_ATTRIBUTE_PTR pTemplate, CK_ULONG usCount) {
312 static CK_C_SetAttributeValue sym = NULL;
313
314 if (hPK11 == NULL) {
315 return (CKR_LIBRARY_FAILED_TO_LOAD);
316 }
317 if (sym == NULL) {
318 sym = (CK_C_SetAttributeValue)GetProcAddress(hPK11, "C_"
319 "SetAttribu"
320 "teValue");
321 }
322 if (sym == NULL) {
323 return (CKR_SYMBOL_RESOLUTION_FAILED);
324 }
325 return ((*sym)(hSession, hObject, pTemplate, usCount));
326 }
327
328 CK_RV
pkcs_C_FindObjectsInit(CK_SESSION_HANDLE hSession,CK_ATTRIBUTE_PTR pTemplate,CK_ULONG usCount)329 pkcs_C_FindObjectsInit(CK_SESSION_HANDLE hSession, CK_ATTRIBUTE_PTR pTemplate,
330 CK_ULONG usCount) {
331 static CK_C_FindObjectsInit sym = NULL;
332
333 if (hPK11 == NULL) {
334 return (CKR_LIBRARY_FAILED_TO_LOAD);
335 }
336 if (sym == NULL) {
337 sym = (CK_C_FindObjectsInit)GetProcAddress(hPK11, "C_"
338 "FindObjectsI"
339 "nit");
340 }
341 if (sym == NULL) {
342 return (CKR_SYMBOL_RESOLUTION_FAILED);
343 }
344 return ((*sym)(hSession, pTemplate, usCount));
345 }
346
347 CK_RV
pkcs_C_FindObjects(CK_SESSION_HANDLE hSession,CK_OBJECT_HANDLE_PTR phObject,CK_ULONG usMaxObjectCount,CK_ULONG_PTR pusObjectCount)348 pkcs_C_FindObjects(CK_SESSION_HANDLE hSession, CK_OBJECT_HANDLE_PTR phObject,
349 CK_ULONG usMaxObjectCount, CK_ULONG_PTR pusObjectCount) {
350 static CK_C_FindObjects sym = NULL;
351
352 if (hPK11 == NULL) {
353 return (CKR_LIBRARY_FAILED_TO_LOAD);
354 }
355 if (sym == NULL) {
356 sym = (CK_C_FindObjects)GetProcAddress(hPK11, "C_FindObjects");
357 }
358 if (sym == NULL) {
359 return (CKR_SYMBOL_RESOLUTION_FAILED);
360 }
361 return ((*sym)(hSession, phObject, usMaxObjectCount, pusObjectCount));
362 }
363
364 CK_RV
pkcs_C_FindObjectsFinal(CK_SESSION_HANDLE hSession)365 pkcs_C_FindObjectsFinal(CK_SESSION_HANDLE hSession) {
366 static CK_C_FindObjectsFinal sym = NULL;
367
368 if (hPK11 == NULL) {
369 return (CKR_LIBRARY_FAILED_TO_LOAD);
370 }
371 if (sym == NULL) {
372 sym = (CK_C_FindObjectsFinal)GetProcAddress(hPK11, "C_"
373 "FindObjects"
374 "Final");
375 }
376 if (sym == NULL) {
377 return (CKR_SYMBOL_RESOLUTION_FAILED);
378 }
379 return ((*sym)(hSession));
380 }
381
382 CK_RV
pkcs_C_EncryptInit(CK_SESSION_HANDLE hSession,CK_MECHANISM_PTR pMechanism,CK_OBJECT_HANDLE hKey)383 pkcs_C_EncryptInit(CK_SESSION_HANDLE hSession, CK_MECHANISM_PTR pMechanism,
384 CK_OBJECT_HANDLE hKey) {
385 static CK_C_EncryptInit sym = NULL;
386
387 if (hPK11 == NULL) {
388 return (CKR_LIBRARY_FAILED_TO_LOAD);
389 }
390 if (sym == NULL) {
391 sym = (CK_C_EncryptInit)GetProcAddress(hPK11, "C_EncryptInit");
392 }
393 if (sym == NULL) {
394 return (CKR_SYMBOL_RESOLUTION_FAILED);
395 }
396 return ((*sym)(hSession, pMechanism, hKey));
397 }
398
399 CK_RV
pkcs_C_Encrypt(CK_SESSION_HANDLE hSession,CK_BYTE_PTR pData,CK_ULONG ulDataLen,CK_BYTE_PTR pEncryptedData,CK_ULONG_PTR pulEncryptedDataLen)400 pkcs_C_Encrypt(CK_SESSION_HANDLE hSession, CK_BYTE_PTR pData,
401 CK_ULONG ulDataLen, CK_BYTE_PTR pEncryptedData,
402 CK_ULONG_PTR pulEncryptedDataLen) {
403 static CK_C_Encrypt sym = NULL;
404
405 if (hPK11 == NULL) {
406 return (CKR_LIBRARY_FAILED_TO_LOAD);
407 }
408 if (sym == NULL) {
409 sym = (CK_C_Encrypt)GetProcAddress(hPK11, "C_Encrypt");
410 }
411 if (sym == NULL) {
412 return (CKR_SYMBOL_RESOLUTION_FAILED);
413 }
414 return ((*sym)(hSession, pData, ulDataLen, pEncryptedData,
415 pulEncryptedDataLen));
416 }
417
418 CK_RV
pkcs_C_DigestInit(CK_SESSION_HANDLE hSession,CK_MECHANISM_PTR pMechanism)419 pkcs_C_DigestInit(CK_SESSION_HANDLE hSession, CK_MECHANISM_PTR pMechanism) {
420 static CK_C_DigestInit sym = NULL;
421
422 if (hPK11 == NULL) {
423 return (CKR_LIBRARY_FAILED_TO_LOAD);
424 }
425 if (sym == NULL) {
426 sym = (CK_C_DigestInit)GetProcAddress(hPK11, "C_DigestInit");
427 }
428 if (sym == NULL) {
429 return (CKR_SYMBOL_RESOLUTION_FAILED);
430 }
431 return ((*sym)(hSession, pMechanism));
432 }
433
434 CK_RV
pkcs_C_DigestUpdate(CK_SESSION_HANDLE hSession,CK_BYTE_PTR pPart,CK_ULONG ulPartLen)435 pkcs_C_DigestUpdate(CK_SESSION_HANDLE hSession, CK_BYTE_PTR pPart,
436 CK_ULONG ulPartLen) {
437 static CK_C_DigestUpdate sym = NULL;
438
439 if (hPK11 == NULL) {
440 return (CKR_LIBRARY_FAILED_TO_LOAD);
441 }
442 if (sym == NULL) {
443 sym = (CK_C_DigestUpdate)GetProcAddress(hPK11, "C_"
444 "DigestUpdate");
445 }
446 if (sym == NULL) {
447 return (CKR_SYMBOL_RESOLUTION_FAILED);
448 }
449 return ((*sym)(hSession, pPart, ulPartLen));
450 }
451
452 CK_RV
pkcs_C_DigestFinal(CK_SESSION_HANDLE hSession,CK_BYTE_PTR pDigest,CK_ULONG_PTR pulDigestLen)453 pkcs_C_DigestFinal(CK_SESSION_HANDLE hSession, CK_BYTE_PTR pDigest,
454 CK_ULONG_PTR pulDigestLen) {
455 static CK_C_DigestFinal sym = NULL;
456
457 if (hPK11 == NULL) {
458 return (CKR_LIBRARY_FAILED_TO_LOAD);
459 }
460 if (sym == NULL) {
461 sym = (CK_C_DigestFinal)GetProcAddress(hPK11, "C_DigestFinal");
462 }
463 if (sym == NULL) {
464 return (CKR_SYMBOL_RESOLUTION_FAILED);
465 }
466 return ((*sym)(hSession, pDigest, pulDigestLen));
467 }
468
469 CK_RV
pkcs_C_SignInit(CK_SESSION_HANDLE hSession,CK_MECHANISM_PTR pMechanism,CK_OBJECT_HANDLE hKey)470 pkcs_C_SignInit(CK_SESSION_HANDLE hSession, CK_MECHANISM_PTR pMechanism,
471 CK_OBJECT_HANDLE hKey) {
472 static CK_C_SignInit sym = NULL;
473
474 if (hPK11 == NULL) {
475 return (CKR_LIBRARY_FAILED_TO_LOAD);
476 }
477 if (sym == NULL) {
478 sym = (CK_C_SignInit)GetProcAddress(hPK11, "C_SignInit");
479 }
480 if (sym == NULL) {
481 return (CKR_SYMBOL_RESOLUTION_FAILED);
482 }
483 return ((*sym)(hSession, pMechanism, hKey));
484 }
485
486 CK_RV
pkcs_C_Sign(CK_SESSION_HANDLE hSession,CK_BYTE_PTR pData,CK_ULONG ulDataLen,CK_BYTE_PTR pSignature,CK_ULONG_PTR pulSignatureLen)487 pkcs_C_Sign(CK_SESSION_HANDLE hSession, CK_BYTE_PTR pData, CK_ULONG ulDataLen,
488 CK_BYTE_PTR pSignature, CK_ULONG_PTR pulSignatureLen) {
489 static CK_C_Sign sym = NULL;
490
491 if (hPK11 == NULL) {
492 return (CKR_LIBRARY_FAILED_TO_LOAD);
493 }
494 if (sym == NULL) {
495 sym = (CK_C_Sign)GetProcAddress(hPK11, "C_Sign");
496 }
497 if (sym == NULL) {
498 return (CKR_SYMBOL_RESOLUTION_FAILED);
499 }
500 return ((*sym)(hSession, pData, ulDataLen, pSignature,
501 pulSignatureLen));
502 }
503
504 CK_RV
pkcs_C_SignUpdate(CK_SESSION_HANDLE hSession,CK_BYTE_PTR pPart,CK_ULONG ulPartLen)505 pkcs_C_SignUpdate(CK_SESSION_HANDLE hSession, CK_BYTE_PTR pPart,
506 CK_ULONG ulPartLen) {
507 static CK_C_SignUpdate sym = NULL;
508
509 if (hPK11 == NULL) {
510 return (CKR_LIBRARY_FAILED_TO_LOAD);
511 }
512 if (sym == NULL) {
513 sym = (CK_C_SignUpdate)GetProcAddress(hPK11, "C_SignUpdate");
514 }
515 if (sym == NULL) {
516 return (CKR_SYMBOL_RESOLUTION_FAILED);
517 }
518 return ((*sym)(hSession, pPart, ulPartLen));
519 }
520
521 CK_RV
pkcs_C_SignFinal(CK_SESSION_HANDLE hSession,CK_BYTE_PTR pSignature,CK_ULONG_PTR pulSignatureLen)522 pkcs_C_SignFinal(CK_SESSION_HANDLE hSession, CK_BYTE_PTR pSignature,
523 CK_ULONG_PTR pulSignatureLen) {
524 static CK_C_SignFinal sym = NULL;
525
526 if (hPK11 == NULL) {
527 return (CKR_LIBRARY_FAILED_TO_LOAD);
528 }
529 if (sym == NULL) {
530 sym = (CK_C_SignFinal)GetProcAddress(hPK11, "C_SignFinal");
531 }
532 if (sym == NULL) {
533 return (CKR_SYMBOL_RESOLUTION_FAILED);
534 }
535 return ((*sym)(hSession, pSignature, pulSignatureLen));
536 }
537
538 CK_RV
pkcs_C_VerifyInit(CK_SESSION_HANDLE hSession,CK_MECHANISM_PTR pMechanism,CK_OBJECT_HANDLE hKey)539 pkcs_C_VerifyInit(CK_SESSION_HANDLE hSession, CK_MECHANISM_PTR pMechanism,
540 CK_OBJECT_HANDLE hKey) {
541 static CK_C_VerifyInit sym = NULL;
542
543 if (hPK11 == NULL) {
544 return (CKR_LIBRARY_FAILED_TO_LOAD);
545 }
546 if (sym == NULL) {
547 sym = (CK_C_VerifyInit)GetProcAddress(hPK11, "C_VerifyInit");
548 }
549 if (sym == NULL) {
550 return (CKR_SYMBOL_RESOLUTION_FAILED);
551 }
552 return ((*sym)(hSession, pMechanism, hKey));
553 }
554
555 CK_RV
pkcs_C_Verify(CK_SESSION_HANDLE hSession,CK_BYTE_PTR pData,CK_ULONG ulDataLen,CK_BYTE_PTR pSignature,CK_ULONG ulSignatureLen)556 pkcs_C_Verify(CK_SESSION_HANDLE hSession, CK_BYTE_PTR pData, CK_ULONG ulDataLen,
557 CK_BYTE_PTR pSignature, CK_ULONG ulSignatureLen) {
558 static CK_C_Verify sym = NULL;
559
560 if (hPK11 == NULL) {
561 return (CKR_LIBRARY_FAILED_TO_LOAD);
562 }
563 if (sym == NULL) {
564 sym = (CK_C_Verify)GetProcAddress(hPK11, "C_Verify");
565 }
566 if (sym == NULL) {
567 return (CKR_SYMBOL_RESOLUTION_FAILED);
568 }
569 return ((*sym)(hSession, pData, ulDataLen, pSignature, ulSignatureLen));
570 }
571
572 CK_RV
pkcs_C_VerifyUpdate(CK_SESSION_HANDLE hSession,CK_BYTE_PTR pPart,CK_ULONG ulPartLen)573 pkcs_C_VerifyUpdate(CK_SESSION_HANDLE hSession, CK_BYTE_PTR pPart,
574 CK_ULONG ulPartLen) {
575 static CK_C_VerifyUpdate sym = NULL;
576
577 if (hPK11 == NULL) {
578 return (CKR_LIBRARY_FAILED_TO_LOAD);
579 }
580 if (sym == NULL) {
581 sym = (CK_C_VerifyUpdate)GetProcAddress(hPK11, "C_"
582 "VerifyUpdate");
583 }
584 if (sym == NULL) {
585 return (CKR_SYMBOL_RESOLUTION_FAILED);
586 }
587 return ((*sym)(hSession, pPart, ulPartLen));
588 }
589
590 CK_RV
pkcs_C_VerifyFinal(CK_SESSION_HANDLE hSession,CK_BYTE_PTR pSignature,CK_ULONG ulSignatureLen)591 pkcs_C_VerifyFinal(CK_SESSION_HANDLE hSession, CK_BYTE_PTR pSignature,
592 CK_ULONG ulSignatureLen) {
593 static CK_C_VerifyFinal sym = NULL;
594
595 if (hPK11 == NULL) {
596 return (CKR_LIBRARY_FAILED_TO_LOAD);
597 }
598 if (sym == NULL) {
599 sym = (CK_C_VerifyFinal)GetProcAddress(hPK11, "C_VerifyFinal");
600 }
601 if (sym == NULL) {
602 return (CKR_SYMBOL_RESOLUTION_FAILED);
603 }
604 return ((*sym)(hSession, pSignature, ulSignatureLen));
605 }
606
607 CK_RV
pkcs_C_GenerateKey(CK_SESSION_HANDLE hSession,CK_MECHANISM_PTR pMechanism,CK_ATTRIBUTE_PTR pTemplate,CK_ULONG ulCount,CK_OBJECT_HANDLE_PTR phKey)608 pkcs_C_GenerateKey(CK_SESSION_HANDLE hSession, CK_MECHANISM_PTR pMechanism,
609 CK_ATTRIBUTE_PTR pTemplate, CK_ULONG ulCount,
610 CK_OBJECT_HANDLE_PTR phKey) {
611 static CK_C_GenerateKey sym = NULL;
612
613 if (hPK11 == NULL) {
614 return (CKR_LIBRARY_FAILED_TO_LOAD);
615 }
616 if (sym == NULL) {
617 sym = (CK_C_GenerateKey)GetProcAddress(hPK11, "C_GenerateKey");
618 }
619 if (sym == NULL) {
620 return (CKR_SYMBOL_RESOLUTION_FAILED);
621 }
622 return ((*sym)(hSession, pMechanism, pTemplate, ulCount, phKey));
623 }
624
625 CK_RV
pkcs_C_GenerateKeyPair(CK_SESSION_HANDLE hSession,CK_MECHANISM_PTR pMechanism,CK_ATTRIBUTE_PTR pPublicKeyTemplate,CK_ULONG usPublicKeyAttributeCount,CK_ATTRIBUTE_PTR pPrivateKeyTemplate,CK_ULONG usPrivateKeyAttributeCount,CK_OBJECT_HANDLE_PTR phPrivateKey,CK_OBJECT_HANDLE_PTR phPublicKey)626 pkcs_C_GenerateKeyPair(CK_SESSION_HANDLE hSession, CK_MECHANISM_PTR pMechanism,
627 CK_ATTRIBUTE_PTR pPublicKeyTemplate,
628 CK_ULONG usPublicKeyAttributeCount,
629 CK_ATTRIBUTE_PTR pPrivateKeyTemplate,
630 CK_ULONG usPrivateKeyAttributeCount,
631 CK_OBJECT_HANDLE_PTR phPrivateKey,
632 CK_OBJECT_HANDLE_PTR phPublicKey) {
633 static CK_C_GenerateKeyPair sym = NULL;
634
635 if (hPK11 == NULL) {
636 return (CKR_LIBRARY_FAILED_TO_LOAD);
637 }
638 if (sym == NULL) {
639 sym = (CK_C_GenerateKeyPair)GetProcAddress(hPK11, "C_"
640 "GenerateKeyP"
641 "air");
642 }
643 if (sym == NULL) {
644 return (CKR_SYMBOL_RESOLUTION_FAILED);
645 }
646 return ((*sym)(hSession, pMechanism, pPublicKeyTemplate,
647 usPublicKeyAttributeCount, pPrivateKeyTemplate,
648 usPrivateKeyAttributeCount, phPrivateKey, phPublicKey));
649 }
650
651 CK_RV
pkcs_C_DeriveKey(CK_SESSION_HANDLE hSession,CK_MECHANISM_PTR pMechanism,CK_OBJECT_HANDLE hBaseKey,CK_ATTRIBUTE_PTR pTemplate,CK_ULONG ulAttributeCount,CK_OBJECT_HANDLE_PTR phKey)652 pkcs_C_DeriveKey(CK_SESSION_HANDLE hSession, CK_MECHANISM_PTR pMechanism,
653 CK_OBJECT_HANDLE hBaseKey, CK_ATTRIBUTE_PTR pTemplate,
654 CK_ULONG ulAttributeCount, CK_OBJECT_HANDLE_PTR phKey) {
655 static CK_C_DeriveKey sym = NULL;
656
657 if (hPK11 == NULL) {
658 return (CKR_LIBRARY_FAILED_TO_LOAD);
659 }
660 if (sym == NULL) {
661 sym = (CK_C_DeriveKey)GetProcAddress(hPK11, "C_DeriveKey");
662 }
663 if (sym == NULL) {
664 return (CKR_SYMBOL_RESOLUTION_FAILED);
665 }
666 return ((*sym)(hSession, pMechanism, hBaseKey, pTemplate,
667 ulAttributeCount, phKey));
668 }
669
670 CK_RV
pkcs_C_SeedRandom(CK_SESSION_HANDLE hSession,CK_BYTE_PTR pSeed,CK_ULONG ulSeedLen)671 pkcs_C_SeedRandom(CK_SESSION_HANDLE hSession, CK_BYTE_PTR pSeed,
672 CK_ULONG ulSeedLen) {
673 static CK_C_SeedRandom sym = NULL;
674
675 if (hPK11 == NULL) {
676 return (CKR_LIBRARY_FAILED_TO_LOAD);
677 }
678 if (sym == NULL) {
679 sym = (CK_C_SeedRandom)GetProcAddress(hPK11, "C_SeedRandom");
680 }
681 if (sym == NULL) {
682 return (CKR_SYMBOL_RESOLUTION_FAILED);
683 }
684 return ((*sym)(hSession, pSeed, ulSeedLen));
685 }
686
687 CK_RV
pkcs_C_GenerateRandom(CK_SESSION_HANDLE hSession,CK_BYTE_PTR RandomData,CK_ULONG ulRandomLen)688 pkcs_C_GenerateRandom(CK_SESSION_HANDLE hSession, CK_BYTE_PTR RandomData,
689 CK_ULONG ulRandomLen) {
690 static CK_C_GenerateRandom sym = NULL;
691
692 if (hPK11 == NULL) {
693 return (CKR_LIBRARY_FAILED_TO_LOAD);
694 }
695 if (sym == NULL) {
696 sym = (CK_C_GenerateRandom)GetProcAddress(hPK11, "C_"
697 "GenerateRando"
698 "m");
699 }
700 if (sym == NULL) {
701 return (CKR_SYMBOL_RESOLUTION_FAILED);
702 }
703 return ((*sym)(hSession, RandomData, ulRandomLen));
704 }
705