1 /*
2  * COPYRIGHT (c) International Business Machines Corp. 2001-2017
3  *
4  * This program is provided under the terms of the Common Public License,
5  * version 1.0 (CPL-1.0). Any use, reproduction or distribution for this
6  * software constitutes recipient's acceptance of CPL-1.0 terms which can be
7  * found in the file LICENSE file or at
8  * https://opensource.org/licenses/cpl1.0.php
9  */
10 
11 //
12 //  API Local control blocks within the PKCS11 Meta API
13 //
14 //
15 
16 
17 #include <pkcs11types.h>
18 #include <limits.h>
19 #include <local_types.h>
20 #include <slotmgr.h>
21 
22 #include "local_types.h"
23 
24 #ifndef _STDLL_H
25 #define _STDLL_H
26 
27 
28 typedef struct {
29     CK_SLOT_ID slotID;
30     CK_SESSION_HANDLE sessionh;
31 } ST_SESSION_T;
32 
33 typedef struct trace_handle_t trace_handle;
34 typedef ST_SESSION_T ST_SESSION_HANDLE;
35 
36 /* CK_FUNCTION_LIST is a structure holding a Cryptoki spec
37  * version and pointers of appropriate types to all the
38  * Cryptoki functions
39  * CK_FUNCTION_LIST is new for v2.0
40  */
41 
42 typedef CK_RV (CK_PTR ST_C_Initialize) (API_Slot_t *sltp, CK_SLOT_ID slotID,
43                                         SLOT_INFO *sinfp, trace_handle t);
44 
45 typedef CK_RV (CK_PTR ST_C_Finalize) (CK_VOID_PTR pReserved);
46 typedef CK_RV (CK_PTR ST_C_Terminate) (void);
47 typedef CK_RV (CK_PTR ST_C_GetInfo) (CK_INFO_PTR pInfo);
48 typedef CK_RV (CK_PTR ST_C_GetFunctionList) (CK_FUNCTION_LIST_PTR_PTR
49                                              ppFunctionList);
50 typedef CK_RV (CK_PTR ST_C_GetSlotList) (CK_BBOOL tokenPresent,
51                                          CK_SLOT_ID_PTR pSlotList,
52                                          CK_ULONG_PTR pusCount);
53 typedef CK_RV (CK_PTR ST_C_GetSlotInfo) (CK_SLOT_ID slotID,
54                                          CK_SLOT_INFO_PTR pInfo);
55 typedef CK_RV (CK_PTR ST_C_GetTokenInfo) (STDLL_TokData_t *tokdata,
56                                           CK_SLOT_ID slotID,
57                                           CK_TOKEN_INFO_PTR pInfo);
58 typedef CK_RV (CK_PTR ST_C_GetMechanismList) (STDLL_TokData_t *tokdata,
59                                               CK_SLOT_ID slotID,
60                                               CK_MECHANISM_TYPE_PTR
61                                               pMechanismList,
62                                               CK_ULONG_PTR pusCount);
63 typedef CK_RV (CK_PTR ST_C_GetMechanismInfo) (STDLL_TokData_t *tokdata,
64                                               CK_SLOT_ID slotID,
65                                               CK_MECHANISM_TYPE type,
66                                               CK_MECHANISM_INFO_PTR pInfo);
67 typedef CK_RV (CK_PTR ST_C_InitToken) (STDLL_TokData_t *tokdata,
68                                        CK_SLOT_ID slotID, CK_CHAR_PTR pPin,
69                                        CK_ULONG usPinLen, CK_CHAR_PTR pLabel);
70 typedef CK_RV (CK_PTR ST_C_InitPIN) (STDLL_TokData_t *tokdata,
71                                      ST_SESSION_T *hSession, CK_CHAR_PTR pPin,
72                                      CK_ULONG usPinLen);
73 typedef CK_RV (CK_PTR ST_C_SetPIN) (STDLL_TokData_t *tokdata,
74                                    ST_SESSION_T *hSession, CK_CHAR_PTR pOldPin,
75                                    CK_ULONG usOldLen, CK_CHAR_PTR pNewPin,
76                                    CK_ULONG usNewLen);
77 
78 // typedef CK_RV        (CK_PTR  ST_C_OpenSession)
79 //                      (CK_SLOT_ID slotID, CK_FLAGS flags,
80 //                       CK_VOID_PTR pApplication,
81 // CK_RV  (*Notify) (CK_SESSION_HANDLE hSession,
82 //                   CK_NOTIFICATION event, CK_VOID_PTR pApplication),
83 //                   CK_SESSION_HANDLE_PTR phSession);
84 
85 typedef CK_RV (CK_PTR ST_C_OpenSession) (STDLL_TokData_t *tokdata,
86                                          CK_SLOT_ID slotID, CK_FLAGS flags,
87                                          CK_SESSION_HANDLE_PTR phSession);
88 
89 typedef CK_RV (CK_PTR ST_C_CloseSession) (STDLL_TokData_t *tokdata,
90                                           ST_SESSION_T *hSession);
91 typedef CK_RV (CK_PTR ST_C_CloseAllSessions) (STDLL_TokData_t *tokdata,
92                                               CK_SLOT_ID slotID);
93 typedef CK_RV (CK_PTR ST_C_GetSessionInfo) (STDLL_TokData_t *tokdata,
94                                             ST_SESSION_T *hSession,
95                                             CK_SESSION_INFO_PTR pInfo);
96 typedef CK_RV (CK_PTR ST_C_GetOperationState) (STDLL_TokData_t *tokdata,
97                                                ST_SESSION_T *hSession,
98                                                CK_BYTE_PTR pOperationState,
99                                                CK_ULONG_PTR
100                                                pulOperationStateLen);
101 typedef CK_RV (CK_PTR ST_C_SetOperationState) (STDLL_TokData_t *tokdata,
102                                                ST_SESSION_T *hSession,
103                                                CK_BYTE_PTR pOperationState,
104                                                CK_ULONG ulOperationStateLen,
105                                                CK_OBJECT_HANDLE hEncryptionKey,
106                                                CK_OBJECT_HANDLE
107                                                hAuthenticationKey);
108 typedef CK_RV (CK_PTR ST_C_Login) (STDLL_TokData_t *tokdata,
109                                    ST_SESSION_T *hSession,
110                                    CK_USER_TYPE userType, CK_CHAR_PTR pPin,
111                                    CK_ULONG usPinLen);
112 typedef CK_RV (CK_PTR ST_C_Logout) (STDLL_TokData_t *tokdata,
113                                     ST_SESSION_T *hSession);
114 typedef CK_RV (CK_PTR ST_C_CreateObject) (STDLL_TokData_t *tokdata,
115                                           ST_SESSION_T *hSession,
116                                           CK_ATTRIBUTE_PTR pTemplate,
117                                           CK_ULONG usCount,
118                                           CK_OBJECT_HANDLE_PTR phObject);
119 
120 typedef CK_RV (CK_PTR ST_C_CopyObject) (STDLL_TokData_t *tokdata,
121                                         ST_SESSION_T *hSession,
122                                         CK_OBJECT_HANDLE hObject,
123                                         CK_ATTRIBUTE_PTR pTemplate,
124                                         CK_ULONG usCount,
125                                         CK_OBJECT_HANDLE_PTR phNewObject);
126 typedef CK_RV (CK_PTR ST_C_DestroyObject) (STDLL_TokData_t *tokdata,
127                                            ST_SESSION_T *hSession,
128                                            CK_OBJECT_HANDLE hObject);
129 typedef CK_RV (CK_PTR ST_C_GetObjectSize) (STDLL_TokData_t *tokdata,
130                                            ST_SESSION_T *hSession,
131                                            CK_OBJECT_HANDLE hObject,
132                                            CK_ULONG_PTR pusSize);
133 typedef CK_RV (CK_PTR ST_C_GetAttributeValue) (STDLL_TokData_t *tokdata,
134                                                ST_SESSION_T *hSession,
135                                                CK_OBJECT_HANDLE hObject,
136                                                CK_ATTRIBUTE_PTR pTemplate,
137                                                CK_ULONG usCount);
138 typedef CK_RV (CK_PTR ST_C_SetAttributeValue) (STDLL_TokData_t *tokdata,
139                                                ST_SESSION_T *hSession,
140                                                CK_OBJECT_HANDLE hObject,
141                                                CK_ATTRIBUTE_PTR pTemplate,
142                                                CK_ULONG usCount);
143 typedef CK_RV (CK_PTR ST_C_FindObjectsInit) (STDLL_TokData_t *tokdata,
144                                              ST_SESSION_T *hSession,
145                                              CK_ATTRIBUTE_PTR pTemplate,
146                                              CK_ULONG usCount);
147 typedef CK_RV (CK_PTR ST_C_FindObjects) (STDLL_TokData_t *tokdata,
148                                          ST_SESSION_T *hSession,
149                                          CK_OBJECT_HANDLE_PTR phObject,
150                                          CK_ULONG usMaxObjectCount,
151                                          CK_ULONG_PTR pusObjectCount);
152 typedef CK_RV (CK_PTR ST_C_FindObjectsFinal) (STDLL_TokData_t *tokdata,
153                                               ST_SESSION_T *hSession);
154 typedef CK_RV (CK_PTR ST_C_EncryptInit) (STDLL_TokData_t *tokdata,
155                                          ST_SESSION_T *hSession,
156                                          CK_MECHANISM_PTR pMechanism,
157                                          CK_OBJECT_HANDLE hKey);
158 typedef CK_RV (CK_PTR ST_C_Encrypt) (STDLL_TokData_t *tokdata,
159                                      ST_SESSION_T *hSession, CK_BYTE_PTR pData,
160                                      CK_ULONG usDataLen,
161                                      CK_BYTE_PTR pEncryptedData,
162                                      CK_ULONG_PTR pusEncryptedDataLen);
163 typedef CK_RV (CK_PTR ST_C_EncryptUpdate) (STDLL_TokData_t *tokdata,
164                                           ST_SESSION_T *hSession,
165                                           CK_BYTE_PTR pPart, CK_ULONG usPartLen,
166                                           CK_BYTE_PTR pEncryptedPart,
167                                           CK_ULONG_PTR pusEncryptedPartLen);
168 typedef CK_RV (CK_PTR ST_C_EncryptFinal) (STDLL_TokData_t *tokdata,
169                                           ST_SESSION_T *hSession,
170                                           CK_BYTE_PTR pLastEncryptedPart,
171                                           CK_ULONG_PTR pusLastEncryptedPartLen);
172 typedef CK_RV (CK_PTR ST_C_DecryptInit) (STDLL_TokData_t *tokdata,
173                                          ST_SESSION_T *hSession,
174                                          CK_MECHANISM_PTR pMechanism,
175                                          CK_OBJECT_HANDLE hKey);
176 typedef CK_RV (CK_PTR ST_C_Decrypt) (STDLL_TokData_t *tokdata,
177                                     ST_SESSION_T *hSession,
178                                     CK_BYTE_PTR pEncryptedData,
179                                     CK_ULONG usEncryptedDataLen,
180                                     CK_BYTE_PTR pData, CK_ULONG_PTR pusDataLen);
181 typedef CK_RV (CK_PTR ST_C_DecryptUpdate) (STDLL_TokData_t *tokdata,
182                                            ST_SESSION_T *hSession,
183                                            CK_BYTE_PTR pEncryptedPart,
184                                            CK_ULONG usEncryptedPartLen,
185                                            CK_BYTE_PTR pPart,
186                                            CK_ULONG_PTR pusPartLen);
187 typedef CK_RV (CK_PTR ST_C_DecryptFinal) (STDLL_TokData_t *tokdata,
188                                           ST_SESSION_T *hSession,
189                                           CK_BYTE_PTR pLastPart,
190                                           CK_ULONG_PTR pusLastPartLen);
191 typedef CK_RV (CK_PTR ST_C_DigestInit) (STDLL_TokData_t *tokdata,
192                                         ST_SESSION_T *hSession,
193                                         CK_MECHANISM_PTR pMechanism);
194 typedef CK_RV (CK_PTR ST_C_Digest) (STDLL_TokData_t *tokdata,
195                                     ST_SESSION_T *hSession, CK_BYTE_PTR pData,
196                                     CK_ULONG usDataLen, CK_BYTE_PTR pDigest,
197                                     CK_ULONG_PTR pusDigestLen);
198 typedef CK_RV (CK_PTR ST_C_DigestUpdate) (STDLL_TokData_t *tokdata,
199                                          ST_SESSION_T *hSession,
200                                          CK_BYTE_PTR pPart, CK_ULONG usPartLen);
201 typedef CK_RV (CK_PTR ST_C_DigestKey) (STDLL_TokData_t *tokdata,
202                                        ST_SESSION_T *hSession,
203                                        CK_OBJECT_HANDLE hKey);
204 typedef CK_RV (CK_PTR ST_C_DigestFinal) (STDLL_TokData_t *tokdata,
205                                          ST_SESSION_T *hSession,
206                                          CK_BYTE_PTR pDigest,
207                                          CK_ULONG_PTR pusDigestLen);
208 typedef CK_RV (CK_PTR ST_C_SignInit) (STDLL_TokData_t *tokdata,
209                                       ST_SESSION_T *hSession,
210                                       CK_MECHANISM_PTR pMechanism,
211                                       CK_OBJECT_HANDLE hKey);
212 typedef CK_RV (CK_PTR ST_C_Sign) (STDLL_TokData_t *tokdata,
213                                   ST_SESSION_T *hSession, CK_BYTE_PTR pData,
214                                   CK_ULONG usDataLen, CK_BYTE_PTR pSignature,
215                                   CK_ULONG_PTR pusSignatureLen);
216 typedef CK_RV (CK_PTR ST_C_SignUpdate) (STDLL_TokData_t *tokdata,
217                                         ST_SESSION_T *hSession,
218                                         CK_BYTE_PTR pPart, CK_ULONG usPartLen);
219 typedef CK_RV (CK_PTR ST_C_SignFinal) (STDLL_TokData_t *tokdata,
220                                        ST_SESSION_T *hSession,
221                                        CK_BYTE_PTR pSignature,
222                                        CK_ULONG_PTR pusSignatureLen);
223 typedef CK_RV (CK_PTR ST_C_SignRecoverInit) (STDLL_TokData_t *tokdata,
224                                              ST_SESSION_T *hSession,
225                                              CK_MECHANISM_PTR pMechanism,
226                                              CK_OBJECT_HANDLE hKey);
227 typedef CK_RV (CK_PTR ST_C_SignRecover) (STDLL_TokData_t *tokdata,
228                                          ST_SESSION_T *hSession,
229                                          CK_BYTE_PTR pData, CK_ULONG usDataLen,
230                                          CK_BYTE_PTR pSignature,
231                                          CK_ULONG_PTR pusSignatureLen);
232 typedef CK_RV (CK_PTR ST_C_VerifyInit) (STDLL_TokData_t *tokdata,
233                                         ST_SESSION_T *hSession,
234                                         CK_MECHANISM_PTR pMechanism,
235                                         CK_OBJECT_HANDLE hKey);
236 typedef CK_RV (CK_PTR ST_C_Verify) (STDLL_TokData_t *tokdata,
237                                     ST_SESSION_T *hSession, CK_BYTE_PTR pData,
238                                     CK_ULONG usDataLen, CK_BYTE_PTR pSignature,
239                                     CK_ULONG usSignatureLen);
240 typedef CK_RV (CK_PTR ST_C_VerifyUpdate) (STDLL_TokData_t *tokdata,
241                                          ST_SESSION_T *hSession,
242                                          CK_BYTE_PTR pPart, CK_ULONG usPartLen);
243 typedef CK_RV (CK_PTR ST_C_VerifyFinal) (STDLL_TokData_t *tokdata,
244                                          ST_SESSION_T *hSession,
245                                          CK_BYTE_PTR pSignature,
246                                          CK_ULONG usSignatureLen);
247 typedef CK_RV (CK_PTR ST_C_VerifyRecoverInit) (STDLL_TokData_t *tokdata,
248                                                ST_SESSION_T *hSession,
249                                                CK_MECHANISM_PTR pMechanism,
250                                                CK_OBJECT_HANDLE hKey);
251 typedef CK_RV (CK_PTR ST_C_VerifyRecover) (STDLL_TokData_t *tokdata,
252                                            ST_SESSION_T *hSession,
253                                            CK_BYTE_PTR pSignature,
254                                            CK_ULONG usSignatureLen,
255                                            CK_BYTE_PTR pData,
256                                            CK_ULONG_PTR pusDataLen);
257 typedef CK_RV (CK_PTR ST_C_DigestEncryptUpdate) (STDLL_TokData_t *tokdata,
258                                                  ST_SESSION_T *hSession,
259                                                  CK_BYTE_PTR pPart,
260                                                  CK_ULONG ulPartLen,
261                                                  CK_BYTE_PTR pEncryptedPart,
262                                                  CK_ULONG_PTR
263                                                  pulEncryptedPartLen);
264 typedef CK_RV (CK_PTR ST_C_DecryptDigestUpdate) (STDLL_TokData_t *tokdata,
265                                                  ST_SESSION_T *hSession,
266                                                  CK_BYTE_PTR pEncryptedPart,
267                                                  CK_ULONG ulEncryptedPartLen,
268                                                  CK_BYTE_PTR pPart,
269                                                  CK_ULONG_PTR pulPartLen);
270 typedef CK_RV (CK_PTR ST_C_SignEncryptUpdate) (STDLL_TokData_t *tokdata,
271                                               ST_SESSION_T *hSession,
272                                               CK_BYTE_PTR pPart,
273                                               CK_ULONG ulPartLen,
274                                               CK_BYTE_PTR pEncryptedPart,
275                                               CK_ULONG_PTR pulEncryptedPartLen);
276 typedef CK_RV (CK_PTR ST_C_DecryptVerifyUpdate) (STDLL_TokData_t *tokdata,
277                                                  ST_SESSION_T *hSession,
278                                                  CK_BYTE_PTR pEncryptedPart,
279                                                  CK_ULONG ulEncryptedPartLen,
280                                                  CK_BYTE_PTR pPart,
281                                                  CK_ULONG_PTR pulPartLen);
282 typedef CK_RV (CK_PTR ST_C_GenerateKey) (STDLL_TokData_t *tokdata,
283                                          ST_SESSION_T *hSession,
284                                          CK_MECHANISM_PTR pMechanism,
285                                          CK_ATTRIBUTE_PTR pTemplate,
286                                          CK_ULONG usCount,
287                                          CK_OBJECT_HANDLE_PTR phKey);
288 typedef CK_RV (CK_PTR ST_C_GenerateKeyPair) (STDLL_TokData_t *tokdata,
289                                              ST_SESSION_T *hSession,
290                                              CK_MECHANISM_PTR pMechanism,
291                                              CK_ATTRIBUTE_PTR pPublicKeyTemplate,
292                                              CK_ULONG usPublicKeyAttributeCount,
293                                              CK_ATTRIBUTE_PTR
294                                              pPrivateKeyTemplate,
295                                              CK_ULONG usPrivateKeyAttributeCount,
296                                              CK_OBJECT_HANDLE_PTR phPrivateKey,
297                                              CK_OBJECT_HANDLE_PTR phPublicKey);
298 typedef CK_RV (CK_PTR ST_C_WrapKey) (STDLL_TokData_t *tokdata,
299                                      ST_SESSION_T *hSession,
300                                      CK_MECHANISM_PTR pMechanism,
301                                      CK_OBJECT_HANDLE hWrappingKey,
302                                      CK_OBJECT_HANDLE hKey,
303                                      CK_BYTE_PTR pWrappedKey,
304                                      CK_ULONG_PTR pusWrappedKeyLen);
305 typedef CK_RV (CK_PTR ST_C_UnwrapKey) (STDLL_TokData_t *tokdata,
306                                        ST_SESSION_T *hSession,
307                                        CK_MECHANISM_PTR pMechanism,
308                                        CK_OBJECT_HANDLE hUnwrappingKey,
309                                        CK_BYTE_PTR pWrappedKey,
310                                        CK_ULONG usWrappedKeyLen,
311                                        CK_ATTRIBUTE_PTR pTemplate,
312                                        CK_ULONG usAttributeCount,
313                                        CK_OBJECT_HANDLE_PTR phKey);
314 typedef CK_RV (CK_PTR ST_C_DeriveKey) (STDLL_TokData_t *tokdata,
315                                        ST_SESSION_T *hSession,
316                                        CK_MECHANISM_PTR pMechanism,
317                                        CK_OBJECT_HANDLE hBaseKey,
318                                        CK_ATTRIBUTE_PTR pTemplate,
319                                        CK_ULONG usAttributeCount,
320                                        CK_OBJECT_HANDLE_PTR phKey);
321 typedef CK_RV (CK_PTR ST_C_SeedRandom) (STDLL_TokData_t *tokdata,
322                                         ST_SESSION_T *hSession,
323                                         CK_BYTE_PTR pSeed, CK_ULONG usSeedLen);
324 typedef CK_RV (CK_PTR ST_C_GenerateRandom) (STDLL_TokData_t *tokdata,
325                                             ST_SESSION_T *hSession,
326                                             CK_BYTE_PTR pRandomData,
327                                             CK_ULONG usRandomLen);
328 typedef CK_RV (CK_PTR ST_C_GetFunctionStatus) (STDLL_TokData_t *tokdata,
329                                                ST_SESSION_T *hSession);
330 typedef CK_RV (CK_PTR ST_C_CancelFunction) (STDLL_TokData_t *tokdata,
331                                             ST_SESSION_T *hSession);
332 typedef CK_RV (CK_PTR ST_Notify) (ST_SESSION_T *hSession,
333                                   CK_NOTIFICATION event,
334                                   CK_VOID_PTR pApplication);
335 typedef CK_RV (CK_PTR ST_C_WaitForSlotEvent) (STDLL_TokData_t *tokdata,
336                                               CK_FLAGS flags,
337                                               CK_SLOT_ID_PTR pSlot,
338                                               CK_VOID_PTR pReserved);
339 
340 
341 
342 struct ST_FCN_LIST {
343 
344     // Need initialization function But it is different than
345     // the C_Initialize
346     ST_C_Initialize ST_Initialize;
347 
348     ST_C_GetTokenInfo ST_GetTokenInfo;
349     ST_C_GetMechanismList ST_GetMechanismList;
350     ST_C_GetMechanismInfo ST_GetMechanismInfo;
351     ST_C_InitToken ST_InitToken;
352     ST_C_InitPIN ST_InitPIN;
353     ST_C_SetPIN ST_SetPIN;
354 
355     ST_C_OpenSession ST_OpenSession;
356     ST_C_CloseSession ST_CloseSession;
357     ST_C_GetSessionInfo ST_GetSessionInfo;
358     ST_C_GetOperationState ST_GetOperationState;        // Not used by Netscape
359     ST_C_SetOperationState ST_SetOperationState;        // Not used by Netscape
360     ST_C_Login ST_Login;
361     ST_C_Logout ST_Logout;
362 
363     ST_C_CreateObject ST_CreateObject;
364     ST_C_CopyObject ST_CopyObject;
365     ST_C_DestroyObject ST_DestroyObject;
366     ST_C_GetObjectSize ST_GetObjectSize;
367     ST_C_GetAttributeValue ST_GetAttributeValue;
368     ST_C_SetAttributeValue ST_SetAttributeValue;
369     ST_C_FindObjectsInit ST_FindObjectsInit;
370     ST_C_FindObjects ST_FindObjects;
371     ST_C_FindObjectsFinal ST_FindObjectsFinal;
372 
373 
374     ST_C_EncryptInit ST_EncryptInit;
375     ST_C_Encrypt ST_Encrypt;
376     ST_C_EncryptUpdate ST_EncryptUpdate;        // Not used by Netscape
377     ST_C_EncryptFinal ST_EncryptFinal;  // Not used by Netscape
378     ST_C_DecryptInit ST_DecryptInit;
379     ST_C_Decrypt ST_Decrypt;
380     ST_C_DecryptUpdate ST_DecryptUpdate;        // Not used by Netscape
381     ST_C_DecryptFinal ST_DecryptFinal;  // Not used by Netscape
382     ST_C_DigestInit ST_DigestInit;
383     ST_C_Digest ST_Digest;
384     ST_C_DigestUpdate ST_DigestUpdate;
385     ST_C_DigestKey ST_DigestKey;
386     ST_C_DigestFinal ST_DigestFinal;
387     ST_C_SignInit ST_SignInit;
388     ST_C_Sign ST_Sign;
389     ST_C_SignUpdate ST_SignUpdate;
390     ST_C_SignFinal ST_SignFinal;
391     ST_C_SignRecoverInit ST_SignRecoverInit;
392     ST_C_SignRecover ST_SignRecover;
393     ST_C_VerifyInit ST_VerifyInit;
394     ST_C_Verify ST_Verify;
395     ST_C_VerifyUpdate ST_VerifyUpdate;
396     ST_C_VerifyFinal ST_VerifyFinal;
397     ST_C_VerifyRecoverInit ST_VerifyRecoverInit;
398     ST_C_VerifyRecover ST_VerifyRecover;
399     ST_C_DigestEncryptUpdate ST_DigestEncryptUpdate;
400     ST_C_DecryptDigestUpdate ST_DecryptDigestUpdate;
401     ST_C_SignEncryptUpdate ST_SignEncryptUpdate;
402     ST_C_DecryptVerifyUpdate ST_DecryptVerifyUpdate;
403     ST_C_GenerateKey ST_GenerateKey;
404     ST_C_GenerateKeyPair ST_GenerateKeyPair;
405     ST_C_WrapKey ST_WrapKey;    // Netscape optionsl will use En/Decrypt
406     ST_C_UnwrapKey ST_UnwrapKey;
407     ST_C_DeriveKey ST_DeriveKey;
408     ST_C_SeedRandom ST_SeedRandom;
409     ST_C_GenerateRandom ST_GenerateRandom;
410     // Question if these have to be implemented for Netscape support
411     ST_C_GetFunctionStatus ST_GetFunctionStatus;
412     ST_C_CancelFunction ST_CancelFunction;
413 
414 };
415 
416 typedef struct ST_FCN_LIST STDLL_FcnList_t;
417 
418 #endif
419