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