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