xref: /minix3/external/bsd/bind/dist/lib/isc/include/pk11/pk11.h (revision 00b67f09dd46474d133c95011a48590a8e8f94c7)
1*00b67f09SDavid van Moolenbroek /*	$NetBSD: pk11.h,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 #ifndef PK11_PK11_H
20*00b67f09SDavid van Moolenbroek #define PK11_PK11_H 1
21*00b67f09SDavid van Moolenbroek 
22*00b67f09SDavid van Moolenbroek /*! \file pk11/pk11.h */
23*00b67f09SDavid van Moolenbroek 
24*00b67f09SDavid van Moolenbroek #include <isc/lang.h>
25*00b67f09SDavid van Moolenbroek #include <isc/magic.h>
26*00b67f09SDavid van Moolenbroek #include <isc/types.h>
27*00b67f09SDavid van Moolenbroek 
28*00b67f09SDavid van Moolenbroek #define PK11_FATALCHECK(func, args) \
29*00b67f09SDavid van Moolenbroek 	((void) (((rv = (func) args) == CKR_OK) || \
30*00b67f09SDavid van Moolenbroek 		 ((pk11_error_fatalcheck)(__FILE__, __LINE__, #func, rv), 0)))
31*00b67f09SDavid van Moolenbroek 
32*00b67f09SDavid van Moolenbroek #include <pkcs11/cryptoki.h>
33*00b67f09SDavid van Moolenbroek 
34*00b67f09SDavid van Moolenbroek ISC_LANG_BEGINDECLS
35*00b67f09SDavid van Moolenbroek 
36*00b67f09SDavid van Moolenbroek #define SES_MAGIC	ISC_MAGIC('P','K','S','S')
37*00b67f09SDavid van Moolenbroek #define TOK_MAGIC	ISC_MAGIC('P','K','T','K')
38*00b67f09SDavid van Moolenbroek 
39*00b67f09SDavid van Moolenbroek #define VALID_SES(x)	ISC_MAGIC_VALID(x, SES_MAGIC)
40*00b67f09SDavid van Moolenbroek #define VALID_TOK(x)	ISC_MAGIC_VALID(x, TOK_MAGIC)
41*00b67f09SDavid van Moolenbroek 
42*00b67f09SDavid van Moolenbroek typedef struct pk11_context pk11_context_t;
43*00b67f09SDavid van Moolenbroek 
44*00b67f09SDavid van Moolenbroek struct pk11_object {
45*00b67f09SDavid van Moolenbroek 	CK_OBJECT_HANDLE	object;
46*00b67f09SDavid van Moolenbroek 	CK_SLOT_ID		slot;
47*00b67f09SDavid van Moolenbroek 	CK_BBOOL		ontoken;
48*00b67f09SDavid van Moolenbroek 	CK_BBOOL		reqlogon;
49*00b67f09SDavid van Moolenbroek 	CK_BYTE			attrcnt;
50*00b67f09SDavid van Moolenbroek 	CK_ATTRIBUTE		*repr;
51*00b67f09SDavid van Moolenbroek };
52*00b67f09SDavid van Moolenbroek 
53*00b67f09SDavid van Moolenbroek struct pk11_context {
54*00b67f09SDavid van Moolenbroek 	void			*handle;
55*00b67f09SDavid van Moolenbroek 	CK_SESSION_HANDLE	session;
56*00b67f09SDavid van Moolenbroek 	CK_BBOOL		ontoken;
57*00b67f09SDavid van Moolenbroek 	CK_OBJECT_HANDLE	object;
58*00b67f09SDavid van Moolenbroek #ifndef PKCS11CRYPTOWITHHMAC
59*00b67f09SDavid van Moolenbroek 	unsigned char		*key;
60*00b67f09SDavid van Moolenbroek #endif
61*00b67f09SDavid van Moolenbroek };
62*00b67f09SDavid van Moolenbroek 
63*00b67f09SDavid van Moolenbroek typedef struct pk11_object pk11_object_t;
64*00b67f09SDavid van Moolenbroek 
65*00b67f09SDavid van Moolenbroek typedef enum {
66*00b67f09SDavid van Moolenbroek 	OP_ANY = 0,
67*00b67f09SDavid van Moolenbroek 	OP_RAND = 1,
68*00b67f09SDavid van Moolenbroek 	OP_RSA = 2,
69*00b67f09SDavid van Moolenbroek 	OP_DSA = 3,
70*00b67f09SDavid van Moolenbroek 	OP_DH = 4,
71*00b67f09SDavid van Moolenbroek 	OP_DIGEST = 5,
72*00b67f09SDavid van Moolenbroek 	OP_EC = 6,
73*00b67f09SDavid van Moolenbroek 	OP_GOST = 7,
74*00b67f09SDavid van Moolenbroek 	OP_AES = 8,
75*00b67f09SDavid van Moolenbroek 	OP_MAX = 9
76*00b67f09SDavid van Moolenbroek } pk11_optype_t;
77*00b67f09SDavid van Moolenbroek 
78*00b67f09SDavid van Moolenbroek /*%
79*00b67f09SDavid van Moolenbroek  * Function prototypes
80*00b67f09SDavid van Moolenbroek  */
81*00b67f09SDavid van Moolenbroek 
82*00b67f09SDavid van Moolenbroek void pk11_set_lib_name(const char *lib_name);
83*00b67f09SDavid van Moolenbroek /*%<
84*00b67f09SDavid van Moolenbroek  * Set the PKCS#11 provider (aka library) path/name.
85*00b67f09SDavid van Moolenbroek  */
86*00b67f09SDavid van Moolenbroek 
87*00b67f09SDavid van Moolenbroek isc_result_t pk11_initialize(isc_mem_t *mctx, const char *engine);
88*00b67f09SDavid van Moolenbroek /*%<
89*00b67f09SDavid van Moolenbroek  * Initialize PKCS#11 device
90*00b67f09SDavid van Moolenbroek  *
91*00b67f09SDavid van Moolenbroek  * mctx:   memory context to attach to pk11_mctx.
92*00b67f09SDavid van Moolenbroek  * engine: PKCS#11 provider (aka library) path/name.
93*00b67f09SDavid van Moolenbroek  *
94*00b67f09SDavid van Moolenbroek  * returns:
95*00b67f09SDavid van Moolenbroek  *         ISC_R_SUCCESS
96*00b67f09SDavid van Moolenbroek  *         PK11_R_NOPROVIDER: can't load the provider
97*00b67f09SDavid van Moolenbroek  *         PK11_R_INITFAILED: C_Initialize() failed
98*00b67f09SDavid van Moolenbroek  *         PK11_R_NORANDOMSERVICE: can't find required random service
99*00b67f09SDavid van Moolenbroek  *         PK11_R_NODIGESTSERVICE: can't find required digest service
100*00b67f09SDavid van Moolenbroek  *         PK11_R_NOAESSERVICE: can't find required AES service
101*00b67f09SDavid van Moolenbroek  */
102*00b67f09SDavid van Moolenbroek 
103*00b67f09SDavid van Moolenbroek isc_result_t pk11_get_session(pk11_context_t *ctx,
104*00b67f09SDavid van Moolenbroek 			      pk11_optype_t optype,
105*00b67f09SDavid van Moolenbroek 			      isc_boolean_t need_services,
106*00b67f09SDavid van Moolenbroek 			      isc_boolean_t rw,
107*00b67f09SDavid van Moolenbroek 			      isc_boolean_t logon,
108*00b67f09SDavid van Moolenbroek 			      const char *pin,
109*00b67f09SDavid van Moolenbroek 			      CK_SLOT_ID slot);
110*00b67f09SDavid van Moolenbroek /*%<
111*00b67f09SDavid van Moolenbroek  * Initialize PKCS#11 device and acquire a session.
112*00b67f09SDavid van Moolenbroek  *
113*00b67f09SDavid van Moolenbroek  * need_services:
114*00b67f09SDavid van Moolenbroek  * 	  if ISC_TRUE, this session requires full PKCS#11 API
115*00b67f09SDavid van Moolenbroek  * 	  support including random and digest services, and
116*00b67f09SDavid van Moolenbroek  * 	  the lack of these services will cause the session not
117*00b67f09SDavid van Moolenbroek  * 	  to be initialized.  If ISC_FALSE, the function will return
118*00b67f09SDavid van Moolenbroek  * 	  an error code indicating the missing service, but the
119*00b67f09SDavid van Moolenbroek  * 	  session will be usable for other purposes.
120*00b67f09SDavid van Moolenbroek  * rw:    if ISC_TRUE, session will be read/write (useful for
121*00b67f09SDavid van Moolenbroek  *        generating or destroying keys); otherwise read-only.
122*00b67f09SDavid van Moolenbroek  * login: indicates whether to log in to the device
123*00b67f09SDavid van Moolenbroek  * pin:   optional PIN, overriding any PIN currently associated
124*00b67f09SDavid van Moolenbroek  *        with the
125*00b67f09SDavid van Moolenbroek  * slot:  device slot ID
126*00b67f09SDavid van Moolenbroek  */
127*00b67f09SDavid van Moolenbroek 
128*00b67f09SDavid van Moolenbroek void pk11_return_session(pk11_context_t *ctx);
129*00b67f09SDavid van Moolenbroek /*%<
130*00b67f09SDavid van Moolenbroek  * Release an active PKCS#11 session for reuse.
131*00b67f09SDavid van Moolenbroek  */
132*00b67f09SDavid van Moolenbroek 
133*00b67f09SDavid van Moolenbroek isc_result_t pk11_finalize(void);
134*00b67f09SDavid van Moolenbroek /*%<
135*00b67f09SDavid van Moolenbroek  * Shut down PKCS#11 device and free all sessions.
136*00b67f09SDavid van Moolenbroek  */
137*00b67f09SDavid van Moolenbroek 
138*00b67f09SDavid van Moolenbroek isc_result_t pk11_rand_bytes(unsigned char *buf, int num);
139*00b67f09SDavid van Moolenbroek 
140*00b67f09SDavid van Moolenbroek void pk11_rand_seed_fromfile(const char *randomfile);
141*00b67f09SDavid van Moolenbroek 
142*00b67f09SDavid van Moolenbroek isc_result_t pk11_parse_uri(pk11_object_t *obj, const char *label,
143*00b67f09SDavid van Moolenbroek 			    isc_mem_t *mctx, pk11_optype_t optype);
144*00b67f09SDavid van Moolenbroek 
145*00b67f09SDavid van Moolenbroek ISC_PLATFORM_NORETURN_PRE void
146*00b67f09SDavid van Moolenbroek pk11_error_fatalcheck(const char *file, int line,
147*00b67f09SDavid van Moolenbroek 		      const char *funcname, CK_RV rv)
148*00b67f09SDavid van Moolenbroek ISC_PLATFORM_NORETURN_POST;
149*00b67f09SDavid van Moolenbroek 
150*00b67f09SDavid van Moolenbroek void pk11_dump_tokens(void);
151*00b67f09SDavid van Moolenbroek 
152*00b67f09SDavid van Moolenbroek CK_RV
153*00b67f09SDavid van Moolenbroek pkcs_C_Initialize(CK_VOID_PTR pReserved);
154*00b67f09SDavid van Moolenbroek 
155*00b67f09SDavid van Moolenbroek CK_RV
156*00b67f09SDavid van Moolenbroek pkcs_C_Finalize(CK_VOID_PTR pReserved);
157*00b67f09SDavid van Moolenbroek 
158*00b67f09SDavid van Moolenbroek CK_RV
159*00b67f09SDavid van Moolenbroek pkcs_C_GetSlotList(CK_BBOOL tokenPresent, CK_SLOT_ID_PTR pSlotList,
160*00b67f09SDavid van Moolenbroek 		   CK_ULONG_PTR pulCount);
161*00b67f09SDavid van Moolenbroek 
162*00b67f09SDavid van Moolenbroek CK_RV
163*00b67f09SDavid van Moolenbroek pkcs_C_GetTokenInfo(CK_SLOT_ID slotID, CK_TOKEN_INFO_PTR pInfo);
164*00b67f09SDavid van Moolenbroek 
165*00b67f09SDavid van Moolenbroek CK_RV
166*00b67f09SDavid van Moolenbroek pkcs_C_GetMechanismInfo(CK_SLOT_ID slotID, CK_MECHANISM_TYPE type,
167*00b67f09SDavid van Moolenbroek 			CK_MECHANISM_INFO_PTR pInfo);
168*00b67f09SDavid van Moolenbroek 
169*00b67f09SDavid van Moolenbroek CK_RV
170*00b67f09SDavid van Moolenbroek pkcs_C_OpenSession(CK_SLOT_ID slotID, CK_FLAGS flags,
171*00b67f09SDavid van Moolenbroek 		   CK_VOID_PTR pApplication,
172*00b67f09SDavid van Moolenbroek 		   CK_RV  (*Notify) (CK_SESSION_HANDLE hSession,
173*00b67f09SDavid van Moolenbroek 				     CK_NOTIFICATION event,
174*00b67f09SDavid van Moolenbroek 				     CK_VOID_PTR pApplication),
175*00b67f09SDavid van Moolenbroek 		   CK_SESSION_HANDLE_PTR phSession);
176*00b67f09SDavid van Moolenbroek 
177*00b67f09SDavid van Moolenbroek CK_RV
178*00b67f09SDavid van Moolenbroek pkcs_C_CloseSession(CK_SESSION_HANDLE hSession);
179*00b67f09SDavid van Moolenbroek 
180*00b67f09SDavid van Moolenbroek CK_RV
181*00b67f09SDavid van Moolenbroek pkcs_C_Login(CK_SESSION_HANDLE hSession, CK_USER_TYPE userType,
182*00b67f09SDavid van Moolenbroek 	     CK_CHAR_PTR pPin, CK_ULONG usPinLen);
183*00b67f09SDavid van Moolenbroek 
184*00b67f09SDavid van Moolenbroek CK_RV
185*00b67f09SDavid van Moolenbroek pkcs_C_Logout(CK_SESSION_HANDLE hSession);
186*00b67f09SDavid van Moolenbroek 
187*00b67f09SDavid van Moolenbroek CK_RV
188*00b67f09SDavid van Moolenbroek pkcs_C_CreateObject(CK_SESSION_HANDLE hSession, CK_ATTRIBUTE_PTR pTemplate,
189*00b67f09SDavid van Moolenbroek 		    CK_ULONG usCount, CK_OBJECT_HANDLE_PTR phObject);
190*00b67f09SDavid van Moolenbroek 
191*00b67f09SDavid van Moolenbroek CK_RV
192*00b67f09SDavid van Moolenbroek pkcs_C_DestroyObject(CK_SESSION_HANDLE hSession, CK_OBJECT_HANDLE hObject);
193*00b67f09SDavid van Moolenbroek 
194*00b67f09SDavid van Moolenbroek CK_RV
195*00b67f09SDavid van Moolenbroek pkcs_C_GetAttributeValue(CK_SESSION_HANDLE hSession, CK_OBJECT_HANDLE hObject,
196*00b67f09SDavid van Moolenbroek 			 CK_ATTRIBUTE_PTR pTemplate, CK_ULONG usCount);
197*00b67f09SDavid van Moolenbroek 
198*00b67f09SDavid van Moolenbroek CK_RV
199*00b67f09SDavid van Moolenbroek pkcs_C_SetAttributeValue(CK_SESSION_HANDLE hSession, CK_OBJECT_HANDLE hObject,
200*00b67f09SDavid van Moolenbroek 			 CK_ATTRIBUTE_PTR pTemplate, CK_ULONG usCount);
201*00b67f09SDavid van Moolenbroek 
202*00b67f09SDavid van Moolenbroek CK_RV
203*00b67f09SDavid van Moolenbroek pkcs_C_FindObjectsInit(CK_SESSION_HANDLE hSession, CK_ATTRIBUTE_PTR pTemplate,
204*00b67f09SDavid van Moolenbroek 		       CK_ULONG usCount);
205*00b67f09SDavid van Moolenbroek 
206*00b67f09SDavid van Moolenbroek CK_RV
207*00b67f09SDavid van Moolenbroek pkcs_C_FindObjects(CK_SESSION_HANDLE hSession, CK_OBJECT_HANDLE_PTR phObject,
208*00b67f09SDavid van Moolenbroek 		   CK_ULONG usMaxObjectCount, CK_ULONG_PTR pusObjectCount);
209*00b67f09SDavid van Moolenbroek 
210*00b67f09SDavid van Moolenbroek CK_RV
211*00b67f09SDavid van Moolenbroek pkcs_C_FindObjectsFinal(CK_SESSION_HANDLE hSession);
212*00b67f09SDavid van Moolenbroek 
213*00b67f09SDavid van Moolenbroek CK_RV
214*00b67f09SDavid van Moolenbroek pkcs_C_EncryptInit(CK_SESSION_HANDLE hSession, CK_MECHANISM_PTR pMechanism,
215*00b67f09SDavid van Moolenbroek 		   CK_OBJECT_HANDLE hKey);
216*00b67f09SDavid van Moolenbroek 
217*00b67f09SDavid van Moolenbroek CK_RV
218*00b67f09SDavid van Moolenbroek pkcs_C_Encrypt(CK_SESSION_HANDLE hSession, CK_BYTE_PTR pData,
219*00b67f09SDavid van Moolenbroek 	       CK_ULONG ulDataLen, CK_BYTE_PTR pEncryptedData,
220*00b67f09SDavid van Moolenbroek 	       CK_ULONG_PTR pulEncryptedDataLen);
221*00b67f09SDavid van Moolenbroek 
222*00b67f09SDavid van Moolenbroek CK_RV
223*00b67f09SDavid van Moolenbroek pkcs_C_DigestInit(CK_SESSION_HANDLE hSession, CK_MECHANISM_PTR pMechanism);
224*00b67f09SDavid van Moolenbroek 
225*00b67f09SDavid van Moolenbroek CK_RV
226*00b67f09SDavid van Moolenbroek pkcs_C_DigestUpdate(CK_SESSION_HANDLE hSession, CK_BYTE_PTR pPart,
227*00b67f09SDavid van Moolenbroek 		    CK_ULONG ulPartLen);
228*00b67f09SDavid van Moolenbroek 
229*00b67f09SDavid van Moolenbroek CK_RV
230*00b67f09SDavid van Moolenbroek pkcs_C_DigestFinal(CK_SESSION_HANDLE hSession, CK_BYTE_PTR pDigest,
231*00b67f09SDavid van Moolenbroek 		   CK_ULONG_PTR pulDigestLen);
232*00b67f09SDavid van Moolenbroek 
233*00b67f09SDavid van Moolenbroek CK_RV
234*00b67f09SDavid van Moolenbroek pkcs_C_SignInit(CK_SESSION_HANDLE hSession, CK_MECHANISM_PTR pMechanism,
235*00b67f09SDavid van Moolenbroek 		CK_OBJECT_HANDLE hKey);
236*00b67f09SDavid van Moolenbroek 
237*00b67f09SDavid van Moolenbroek CK_RV
238*00b67f09SDavid van Moolenbroek pkcs_C_Sign(CK_SESSION_HANDLE hSession, CK_BYTE_PTR pData,
239*00b67f09SDavid van Moolenbroek 	    CK_ULONG ulDataLen, CK_BYTE_PTR pSignature,
240*00b67f09SDavid van Moolenbroek 	    CK_ULONG_PTR pulSignatureLen);
241*00b67f09SDavid van Moolenbroek 
242*00b67f09SDavid van Moolenbroek CK_RV
243*00b67f09SDavid van Moolenbroek pkcs_C_SignUpdate(CK_SESSION_HANDLE hSession, CK_BYTE_PTR pPart,
244*00b67f09SDavid van Moolenbroek 		  CK_ULONG ulPartLen);
245*00b67f09SDavid van Moolenbroek 
246*00b67f09SDavid van Moolenbroek CK_RV
247*00b67f09SDavid van Moolenbroek pkcs_C_SignFinal(CK_SESSION_HANDLE hSession, CK_BYTE_PTR pSignature,
248*00b67f09SDavid van Moolenbroek 		 CK_ULONG_PTR pulSignatureLen);
249*00b67f09SDavid van Moolenbroek 
250*00b67f09SDavid van Moolenbroek CK_RV
251*00b67f09SDavid van Moolenbroek pkcs_C_VerifyInit(CK_SESSION_HANDLE hSession, CK_MECHANISM_PTR pMechanism,
252*00b67f09SDavid van Moolenbroek 		  CK_OBJECT_HANDLE hKey);
253*00b67f09SDavid van Moolenbroek 
254*00b67f09SDavid van Moolenbroek CK_RV
255*00b67f09SDavid van Moolenbroek pkcs_C_Verify(CK_SESSION_HANDLE hSession, CK_BYTE_PTR pData,
256*00b67f09SDavid van Moolenbroek 	      CK_ULONG ulDataLen, CK_BYTE_PTR pSignature,
257*00b67f09SDavid van Moolenbroek 	      CK_ULONG ulSignatureLen);
258*00b67f09SDavid van Moolenbroek 
259*00b67f09SDavid van Moolenbroek CK_RV
260*00b67f09SDavid van Moolenbroek pkcs_C_VerifyUpdate(CK_SESSION_HANDLE hSession, CK_BYTE_PTR pPart,
261*00b67f09SDavid van Moolenbroek 		    CK_ULONG ulPartLen);
262*00b67f09SDavid van Moolenbroek 
263*00b67f09SDavid van Moolenbroek CK_RV
264*00b67f09SDavid van Moolenbroek pkcs_C_VerifyFinal(CK_SESSION_HANDLE hSession, CK_BYTE_PTR pSignature,
265*00b67f09SDavid van Moolenbroek 		   CK_ULONG ulSignatureLen);
266*00b67f09SDavid van Moolenbroek 
267*00b67f09SDavid van Moolenbroek CK_RV
268*00b67f09SDavid van Moolenbroek pkcs_C_GenerateKey(CK_SESSION_HANDLE hSession, CK_MECHANISM_PTR pMechanism,
269*00b67f09SDavid van Moolenbroek 		   CK_ATTRIBUTE_PTR pTemplate, CK_ULONG ulCount,
270*00b67f09SDavid van Moolenbroek 		   CK_OBJECT_HANDLE_PTR phKey);
271*00b67f09SDavid van Moolenbroek 
272*00b67f09SDavid van Moolenbroek CK_RV
273*00b67f09SDavid van Moolenbroek pkcs_C_GenerateKeyPair(CK_SESSION_HANDLE hSession,
274*00b67f09SDavid van Moolenbroek 		       CK_MECHANISM_PTR pMechanism,
275*00b67f09SDavid van Moolenbroek 		       CK_ATTRIBUTE_PTR pPublicKeyTemplate,
276*00b67f09SDavid van Moolenbroek 		       CK_ULONG usPublicKeyAttributeCount,
277*00b67f09SDavid van Moolenbroek 		       CK_ATTRIBUTE_PTR pPrivateKeyTemplate,
278*00b67f09SDavid van Moolenbroek 		       CK_ULONG usPrivateKeyAttributeCount,
279*00b67f09SDavid van Moolenbroek 		       CK_OBJECT_HANDLE_PTR phPrivateKey,
280*00b67f09SDavid van Moolenbroek 		       CK_OBJECT_HANDLE_PTR phPublicKey);
281*00b67f09SDavid van Moolenbroek 
282*00b67f09SDavid van Moolenbroek CK_RV
283*00b67f09SDavid van Moolenbroek pkcs_C_DeriveKey(CK_SESSION_HANDLE hSession, CK_MECHANISM_PTR pMechanism,
284*00b67f09SDavid van Moolenbroek 		 CK_OBJECT_HANDLE hBaseKey, CK_ATTRIBUTE_PTR pTemplate,
285*00b67f09SDavid van Moolenbroek 		 CK_ULONG ulAttributeCount, CK_OBJECT_HANDLE_PTR phKey);
286*00b67f09SDavid van Moolenbroek 
287*00b67f09SDavid van Moolenbroek CK_RV
288*00b67f09SDavid van Moolenbroek pkcs_C_SeedRandom(CK_SESSION_HANDLE hSession, CK_BYTE_PTR pSeed,
289*00b67f09SDavid van Moolenbroek 		  CK_ULONG ulSeedLen);
290*00b67f09SDavid van Moolenbroek 
291*00b67f09SDavid van Moolenbroek CK_RV
292*00b67f09SDavid van Moolenbroek pkcs_C_GenerateRandom(CK_SESSION_HANDLE hSession, CK_BYTE_PTR RandomData,
293*00b67f09SDavid van Moolenbroek 		      CK_ULONG ulRandomLen);
294*00b67f09SDavid van Moolenbroek 
295*00b67f09SDavid van Moolenbroek ISC_LANG_ENDDECLS
296*00b67f09SDavid van Moolenbroek 
297*00b67f09SDavid van Moolenbroek #endif /* PK11_PK11_H */
298