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