• Home
  • Line#
  • Scopes#
  • Navigate#
  • Raw
  • Download
1 /*
2  *  Copyright 2014-2022 The GmSSL Project. All Rights Reserved.
3  *
4  *  Licensed under the Apache License, Version 2.0 (the License); you may
5  *  not use this file except in compliance with the License.
6  *
7  *  http://www.apache.org/licenses/LICENSE-2.0
8  */
9 
10 
11 #ifndef SKFUTIL_SKF_INT_H
12 #define SKFUTIL_SKF_INT_H
13 
14 #include "../sgd.h"
15 #include "skf.h"
16 
17 
18 typedef ULONG (DEVAPI *SKF_WaitForDevEvent_FuncPtr)(
19 	LPSTR szDevName,
20 	ULONG *pulDevNameLen,
21 	ULONG *pulEvent);
22 
23 typedef ULONG (DEVAPI *SKF_CancelWaitForDevEvent_FuncPtr)(
24 	void);
25 
26 typedef ULONG (DEVAPI *SKF_EnumDev_FuncPtr)(
27 	BOOL bPresent,
28 	LPSTR szNameList,
29 	ULONG *pulSize);
30 
31 typedef ULONG (DEVAPI *SKF_ConnectDev_FuncPtr)(
32 	LPSTR szName,
33 	DEVHANDLE *phDev);
34 
35 typedef ULONG (DEVAPI *SKF_DisConnectDev_FuncPtr)(
36 	DEVHANDLE hDev);
37 
38 typedef ULONG (DEVAPI *SKF_GetDevState_FuncPtr)(
39 	LPSTR szDevName,
40 	ULONG *pulDevState);
41 
42 typedef ULONG (DEVAPI *SKF_SetLabel_FuncPtr)(
43 	DEVHANDLE hDev,
44 	LPSTR szLabel);
45 
46 typedef ULONG (DEVAPI *SKF_GetDevInfo_FuncPtr)(
47 	DEVHANDLE hDev,
48 	DEVINFO *pDevInfo);
49 
50 typedef ULONG (DEVAPI *SKF_LockDev_FuncPtr)(
51 	DEVHANDLE hDev,
52 	ULONG ulTimeOut);
53 
54 typedef ULONG (DEVAPI *SKF_UnlockDev_FuncPtr)(
55 	DEVHANDLE hDev);
56 
57 typedef ULONG (DEVAPI *SKF_Transmit_FuncPtr)(
58 	DEVHANDLE hDev,
59 	BYTE *pbCommand,
60 	ULONG ulCommandLen,
61 	BYTE *pbData,
62 	ULONG *pulDataLen);
63 
64 typedef ULONG (DEVAPI *SKF_ChangeDevAuthKey_FuncPtr)(
65 	DEVHANDLE hDev,
66 	BYTE *pbKeyValue,
67 	ULONG ulKeyLen);
68 
69 typedef ULONG (DEVAPI *SKF_DevAuth_FuncPtr)(
70 	DEVHANDLE hDev,
71 	BYTE *pbAuthData,
72 	ULONG ulLen);
73 
74 typedef ULONG (DEVAPI *SKF_ChangePIN_FuncPtr)(
75 	HAPPLICATION hApplication,
76 	ULONG ulPINType,
77 	LPSTR szOldPin,
78 	LPSTR szNewPin,
79 	ULONG *pulRetryCount);
80 
81 typedef LONG (DEVAPI *SKF_GetPINInfo_FuncPtr)(
82 	HAPPLICATION hApplication,
83 	ULONG ulPINType,
84 	ULONG *pulMaxRetryCount,
85 	ULONG *pulRemainRetryCount,
86 	BOOL *pbDefaultPin);
87 
88 typedef ULONG (DEVAPI *SKF_VerifyPIN_FuncPtr)(
89 	HAPPLICATION hApplication,
90 	ULONG ulPINType,
91 	LPSTR szPIN,
92 	ULONG *pulRetryCount);
93 
94 typedef ULONG (DEVAPI *SKF_UnblockPIN_FuncPtr)(
95 	HAPPLICATION hApplication,
96 	LPSTR szAdminPIN,
97 	LPSTR szNewUserPIN,
98 	ULONG *pulRetryCount);
99 
100 typedef ULONG (DEVAPI *SKF_ClearSecureState_FuncPtr)(
101 	HAPPLICATION hApplication);
102 
103 typedef ULONG (DEVAPI *SKF_CreateApplication_FuncPtr)(
104 	DEVHANDLE hDev,
105 	LPSTR szAppName,
106 	LPSTR szAdminPin,
107 	DWORD dwAdminPinRetryCount,
108 	LPSTR szUserPin,
109 	DWORD dwUserPinRetryCount,
110 	DWORD dwCreateFileRights,
111 	HAPPLICATION *phApplication);
112 
113 typedef ULONG (DEVAPI *SKF_EnumApplication_FuncPtr)(
114 	DEVHANDLE hDev,
115 	LPSTR szAppName,
116 	ULONG *pulSize);
117 
118 typedef ULONG (DEVAPI *SKF_DeleteApplication_FuncPtr)(
119 	DEVHANDLE hDev,
120 	LPSTR szAppName);
121 
122 typedef ULONG (DEVAPI *SKF_OpenApplication_FuncPtr)(
123 	DEVHANDLE hDev,
124 	LPSTR szAppName,
125 	HAPPLICATION *phApplication);
126 
127 typedef ULONG (DEVAPI *SKF_CloseApplication_FuncPtr)(
128 	HAPPLICATION hApplication);
129 
130 typedef ULONG (DEVAPI *SKF_CreateObject_FuncPtr)(
131 	HAPPLICATION hApplication,
132 	LPSTR szFileName,
133 	ULONG ulFileSize,
134 	ULONG ulReadRights,
135 	ULONG ulWriteRights);
136 
137 typedef ULONG (DEVAPI *SKF_DeleteObject_FuncPtr)(
138 	HAPPLICATION hApplication,
139 	LPSTR szFileName);
140 
141 typedef ULONG (DEVAPI *SKF_EnumObjects_FuncPtr)(
142 	HAPPLICATION hApplication,
143 	LPSTR szFileList,
144 	ULONG *pulSize);
145 
146 typedef ULONG (DEVAPI *SKF_GetObjectInfo_FuncPtr)(
147 	HAPPLICATION hApplication,
148 	LPSTR szFileName,
149 	FILEATTRIBUTE *pFileInfo);
150 
151 typedef ULONG (DEVAPI *SKF_ReadObject_FuncPtr)(
152 	HAPPLICATION hApplication,
153 	LPSTR szFileName,
154 	ULONG ulOffset,
155 	ULONG ulSize,
156 	BYTE *pbOutData,
157 	ULONG *pulOutLen);
158 
159 typedef ULONG (DEVAPI *SKF_WriteObject_FuncPtr)(
160 	HAPPLICATION hApplication,
161 	LPSTR szFileName,
162 	ULONG ulOffset,
163 	BYTE *pbData,
164 	ULONG ulSize);
165 
166 typedef ULONG (DEVAPI *SKF_CreateContainer_FuncPtr)(
167 	HAPPLICATION hApplication,
168 	LPSTR szContainerName,
169 	HCONTAINER *phContainer);
170 
171 typedef ULONG (DEVAPI *SKF_DeleteContainer_FuncPtr)(
172 	HAPPLICATION hApplication,
173 	LPSTR szContainerName);
174 
175 typedef ULONG (DEVAPI *SKF_EnumContainer_FuncPtr)(
176 	HAPPLICATION hApplication,
177 	LPSTR szContainerName,
178 	ULONG *pulSize);
179 
180 typedef ULONG (DEVAPI *SKF_OpenContainer_FuncPtr)(
181 	HAPPLICATION hApplication,
182 	LPSTR szContainerName,
183 	HCONTAINER *phContainer);
184 
185 typedef ULONG (DEVAPI *SKF_CloseContainer_FuncPtr)(
186 	HCONTAINER hContainer);
187 
188 typedef ULONG (DEVAPI *SKF_GetContainerType_FuncPtr)(
189 	HCONTAINER hContainer,
190 	ULONG *pulContainerType);
191 
192 typedef ULONG (DEVAPI *SKF_ImportCertificate_FuncPtr)(
193 	HCONTAINER hContainer,
194 	BOOL bExportSignKey,
195 	BYTE *pbCert,
196 	ULONG ulCertLen);
197 
198 typedef ULONG (DEVAPI *SKF_ExportCertificate_FuncPtr)(
199 	HCONTAINER hContainer,
200 	BOOL bSignFlag,
201 	BYTE *pbCert,
202 	ULONG *pulCertLen);
203 
204 typedef ULONG (DEVAPI *SKF_ExportPublicKey_FuncPtr)(
205 	HCONTAINER hContainer,
206 	BOOL bSignFlag,
207 	BYTE *pbBlob,
208 	ULONG *pulBlobLen);
209 
210 typedef ULONG (DEVAPI *SKF_GenRandom_FuncPtr)(
211 	DEVHANDLE hDev,
212 	BYTE *pbRandom,
213 	ULONG ulRandomLen);
214 
215 typedef ULONG (DEVAPI *SKF_GenExtRSAKey_FuncPtr)(
216 	DEVHANDLE hDev,
217 	ULONG ulBitsLen,
218 	RSAPRIVATEKEYBLOB *pBlob);
219 
220 typedef ULONG (DEVAPI *SKF_GenRSAKeyPair_FuncPtr)(
221 	HCONTAINER hContainer,
222 	ULONG ulBitsLen,
223 	RSAPUBLICKEYBLOB *pBlob);
224 
225 typedef ULONG (DEVAPI *SKF_ImportRSAKeyPair_FuncPtr)(
226 	HCONTAINER hContainer,
227 	ULONG ulSymAlgId,
228 	BYTE *pbWrappedKey,
229 	ULONG ulWrappedKeyLen,
230 	BYTE *pbEncryptedData,
231 	ULONG ulEncryptedDataLen);
232 
233 typedef ULONG (DEVAPI *SKF_RSASignData_FuncPtr)(
234 	HCONTAINER hContainer,
235 	BYTE *pbData,
236 	ULONG ulDataLen,
237 	BYTE *pbSignature,
238 	ULONG *pulSignLen);
239 
240 typedef ULONG (DEVAPI *SKF_RSAVerify_FuncPtr)(
241 	DEVHANDLE hDev,
242 	RSAPUBLICKEYBLOB *pRSAPubKeyBlob,
243 	BYTE *pbData,
244 	ULONG ulDataLen,
245 	BYTE *pbSignature,
246 	ULONG ulSignLen);
247 
248 typedef ULONG (DEVAPI *SKF_RSAExportSessionKey_FuncPtr)(
249 	HCONTAINER hContainer,
250 	ULONG ulAlgId,
251 	RSAPUBLICKEYBLOB *pPubKey,
252 	BYTE *pbData,
253 	ULONG *pulDataLen,
254 	HANDLE *phSessionKey);
255 
256 typedef ULONG (DEVAPI *SKF_ExtRSAPubKeyOperation_FuncPtr)(
257 	DEVHANDLE hDev,
258 	RSAPUBLICKEYBLOB *pRSAPubKeyBlob,
259 	BYTE *pbInput,
260 	ULONG ulInputLen,
261 	BYTE *pbOutput,
262 	ULONG *pulOutputLen);
263 
264 typedef ULONG (DEVAPI *SKF_ExtRSAPriKeyOperation_FuncPtr)(
265 	DEVHANDLE hDev,
266 	RSAPRIVATEKEYBLOB *pRSAPriKeyBlob,
267 	BYTE *pbInput,
268 	ULONG ulInputLen,
269 	BYTE *pbOutput,
270 	ULONG *pulOutputLen);
271 
272 typedef ULONG (DEVAPI *SKF_GenECCKeyPair_FuncPtr)(
273 	HCONTAINER hContainer,
274 	ULONG ulAlgId,
275 	ECCPUBLICKEYBLOB *pBlob);
276 
277 typedef ULONG (DEVAPI *SKF_ImportECCKeyPair_FuncPtr)(
278 	HCONTAINER hContainer,
279 	ENVELOPEDKEYBLOB *pEnvelopedKeyBlob);
280 
281 typedef ULONG (DEVAPI *SKF_ECCSignData_FuncPtr)(
282 	HCONTAINER hContainer,
283 	BYTE *pbDigest,
284 	ULONG ulDigestLen,
285 	ECCSIGNATUREBLOB *pSignature);
286 
287 typedef ULONG (DEVAPI *SKF_ECCVerify_FuncPtr)(
288 	DEVHANDLE hDev,
289 	ECCPUBLICKEYBLOB *pECCPubKeyBlob,
290 	BYTE *pbData,
291 	ULONG ulDataLen,
292 	ECCSIGNATUREBLOB *pSignature);
293 
294 typedef ULONG (DEVAPI *SKF_ECCExportSessionKey_FuncPtr)(
295 	HCONTAINER hContainer,
296 	ULONG ulAlgId,
297 	ECCPUBLICKEYBLOB *pPubKey,
298 	ECCCIPHERBLOB *pData,
299 	HANDLE *phSessionKey);
300 
301 typedef ULONG (DEVAPI *SKF_ExtECCEncrypt_FuncPtr)(
302 	DEVHANDLE hDev,
303 	ECCPUBLICKEYBLOB *pECCPubKeyBlob,
304 	BYTE *pbPlainText,
305 	ULONG ulPlainTextLen,
306 	ECCCIPHERBLOB *pCipherText);
307 
308 typedef ULONG (DEVAPI *SKF_ECCDecrypt_FuncPtr)(
309 	HCONTAINER hContainer,
310 	ECCCIPHERBLOB *pCipherText,
311 	BYTE *pbPlainText,
312 	ULONG *pulPlainTextLen);
313 
314 typedef ULONG (DEVAPI *SKF_ExtECCDecrypt_FuncPtr)(
315 	DEVHANDLE hDev,
316 	ECCPRIVATEKEYBLOB *pECCPriKeyBlob,
317 	ECCCIPHERBLOB *pCipherText,
318 	BYTE *pbPlainText,
319 	ULONG *pulPlainTextLen);
320 
321 typedef ULONG (DEVAPI *SKF_ExtECCSign_FuncPtr)(
322 	DEVHANDLE hDev,
323 	ECCPRIVATEKEYBLOB *pECCPriKeyBlob,
324 	BYTE *pbData,
325 	ULONG ulDataLen,
326 	ECCSIGNATUREBLOB *pSignature);
327 
328 typedef ULONG (DEVAPI *SKF_ExtECCVerify_FuncPtr)(
329 	DEVHANDLE hDev,
330 	ECCPUBLICKEYBLOB *pECCPubKeyBlob,
331 	BYTE *pbData,
332 	ULONG ulDataLen,
333 	ECCSIGNATUREBLOB *pSignature);
334 
335 typedef ULONG (DEVAPI *SKF_GenerateAgreementDataWithECC_FuncPtr)(
336 	HCONTAINER hContainer,
337 	ULONG ulAlgId,
338 	ECCPUBLICKEYBLOB *pTempECCPubKeyBlob,
339 	BYTE *pbID,
340 	ULONG ulIDLen,
341 	HANDLE *phAgreementHandle);
342 
343 typedef ULONG (DEVAPI *SKF_GenerateAgreementDataAndKeyWithECC_FuncPtr)(
344 	HANDLE hContainer,
345 	ULONG ulAlgId,
346 	ECCPUBLICKEYBLOB *pSponsorECCPubKeyBlob,
347 	ECCPUBLICKEYBLOB *pSponsorTempECCPubKeyBlob,
348 	ECCPUBLICKEYBLOB *pTempECCPubKeyBlob,
349 	BYTE *pbID,
350 	ULONG ulIDLen,
351 	BYTE *pbSponsorID,
352 	ULONG ulSponsorIDLen,
353 	HANDLE *phKeyHandle);
354 
355 typedef ULONG (DEVAPI *SKF_GenerateKeyWithECC_FuncPtr)(
356 	HANDLE hAgreementHandle,
357 	ECCPUBLICKEYBLOB *pECCPubKeyBlob,
358 	ECCPUBLICKEYBLOB *pTempECCPubKeyBlob,
359 	BYTE *pbID,
360 	ULONG ulIDLen,
361 	HANDLE *phKeyHandle);
362 
363 typedef ULONG (DEVAPI *SKF_ImportSessionKey_FuncPtr)(
364 	HCONTAINER hContainer,
365 	ULONG ulAlgId,
366 	BYTE *pbWrapedData,
367 	ULONG ulWrapedLen,
368 	HANDLE *phKey);
369 
370 typedef ULONG (DEVAPI *SKF_SetSymmKey_FuncPtr)(
371 	DEVHANDLE hDev,
372 	BYTE *pbKey,
373 	ULONG ulAlgID,
374 	HANDLE *phKey);
375 
376 typedef ULONG (DEVAPI *SKF_EncryptInit_FuncPtr)(
377 	HANDLE hKey,
378 	BLOCKCIPHERPARAM EncryptParam);
379 
380 typedef ULONG (DEVAPI *SKF_Encrypt_FuncPtr)(
381 	HANDLE hKey,
382 	BYTE *pbData,
383 	ULONG ulDataLen,
384 	BYTE *pbEncryptedData,
385 	ULONG *pulEncryptedLen);
386 
387 typedef ULONG (DEVAPI *SKF_EncryptUpdate_FuncPtr)(
388 	HANDLE hKey,
389 	BYTE *pbData,
390 	ULONG ulDataLen,
391 	BYTE *pbEncryptedData,
392 	ULONG *pulEncryptedLen);
393 
394 typedef ULONG (DEVAPI *SKF_EncryptFinal_FuncPtr)(
395 	HANDLE hKey,
396 	BYTE *pbEncryptedData,
397 	ULONG *pulEncryptedDataLen);
398 
399 typedef ULONG (DEVAPI *SKF_DecryptInit_FuncPtr)(
400 	HANDLE hKey,
401 	BLOCKCIPHERPARAM DecryptParam);
402 
403 typedef ULONG (DEVAPI *SKF_Decrypt_FuncPtr)(
404 	HANDLE hKey,
405 	BYTE *pbEncryptedData,
406 	ULONG ulEncryptedLen,
407 	BYTE *pbData,
408 	ULONG *pulDataLen);
409 
410 typedef ULONG (DEVAPI *SKF_DecryptUpdate_FuncPtr)(
411 	HANDLE hKey,
412 	BYTE *pbEncryptedData,
413 	ULONG ulEncryptedLen,
414 	BYTE *pbData,
415 	ULONG *pulDataLen);
416 
417 typedef ULONG (DEVAPI *SKF_DecryptFinal_FuncPtr)(
418 	HANDLE hKey,
419 	BYTE *pbDecryptedData,
420 	ULONG *pulDecryptedDataLen);
421 
422 typedef ULONG (DEVAPI *SKF_DigestInit_FuncPtr)(
423 	DEVHANDLE hDev,
424 	ULONG ulAlgID,
425 	ECCPUBLICKEYBLOB *pPubKey,
426 	BYTE *pbID,
427 	ULONG ulIDLen,
428 	HANDLE *phHash);
429 
430 typedef ULONG (DEVAPI *SKF_Digest_FuncPtr)(
431 	HANDLE hHash,
432 	BYTE *pbData,
433 	ULONG ulDataLen,
434 	BYTE *pbHashData,
435 	ULONG *pulHashLen);
436 
437 typedef ULONG (DEVAPI *SKF_DigestUpdate_FuncPtr)(
438 	HANDLE hHash,
439 	BYTE *pbData,
440 	ULONG ulDataLen);
441 
442 typedef ULONG (DEVAPI *SKF_DigestFinal_FuncPtr)(
443 	HANDLE hHash,
444 	BYTE *pHashData,
445 	ULONG *pulHashLen);
446 
447 typedef ULONG (DEVAPI *SKF_MacInit_FuncPtr)(
448 	HANDLE hKey,
449 	BLOCKCIPHERPARAM *pMacParam,
450 	HANDLE *phMac);
451 
452 typedef ULONG (DEVAPI *SKF_Mac_FuncPtr)(
453 	HANDLE hMac,
454 	BYTE *pbData,
455 	ULONG ulDataLen,
456 	BYTE *pbMacData,
457 	ULONG *pulMacLen);
458 
459 typedef ULONG (DEVAPI *SKF_MacUpdate_FuncPtr)(
460 	HANDLE hMac,
461 	BYTE *pbData,
462 	ULONG ulDataLen);
463 
464 typedef ULONG (DEVAPI *SKF_MacFinal_FuncPtr)(
465 	HANDLE hMac,
466 	BYTE *pbMacData,
467 	ULONG *pulMacDataLen);
468 
469 typedef ULONG (DEVAPI *SKF_CloseHandle_FuncPtr)(
470 	HANDLE hHandle);
471 
472 
473 typedef struct skf_method_st {
474 	char *name;
475 	void *dso;
476 	SKF_WaitForDevEvent_FuncPtr WaitForDevEvent;
477 	SKF_CancelWaitForDevEvent_FuncPtr CancelWaitForDevEvent;
478 	SKF_EnumDev_FuncPtr EnumDev;
479 	SKF_ConnectDev_FuncPtr ConnectDev;
480 	SKF_DisConnectDev_FuncPtr DisConnectDev;
481 	SKF_GetDevState_FuncPtr GetDevState;
482 	SKF_SetLabel_FuncPtr SetLabel;
483 	SKF_GetDevInfo_FuncPtr GetDevInfo;
484 	SKF_LockDev_FuncPtr LockDev;
485 	SKF_UnlockDev_FuncPtr UnlockDev;
486 	SKF_Transmit_FuncPtr Transmit;
487 	SKF_ChangeDevAuthKey_FuncPtr ChangeDevAuthKey;
488 	SKF_DevAuth_FuncPtr DevAuth;
489 	SKF_ChangePIN_FuncPtr ChangePIN;
490 	SKF_GetPINInfo_FuncPtr GetPINInfo;
491 	SKF_VerifyPIN_FuncPtr VerifyPIN;
492 	SKF_UnblockPIN_FuncPtr UnblockPIN;
493 	SKF_ClearSecureState_FuncPtr ClearSecureState;
494 	SKF_CreateApplication_FuncPtr CreateApplication;
495 	SKF_EnumApplication_FuncPtr EnumApplication;
496 	SKF_DeleteApplication_FuncPtr DeleteApplication;
497 	SKF_OpenApplication_FuncPtr OpenApplication;
498 	SKF_CloseApplication_FuncPtr CloseApplication;
499 	SKF_CreateObject_FuncPtr CreateObject;
500 	SKF_DeleteObject_FuncPtr DeleteObject;
501 	SKF_EnumObjects_FuncPtr EnumObjects;
502 	SKF_GetObjectInfo_FuncPtr GetObjectInfo;
503 	SKF_ReadObject_FuncPtr ReadObject;
504 	SKF_WriteObject_FuncPtr WriteObject;
505 	SKF_CreateContainer_FuncPtr CreateContainer;
506 	SKF_DeleteContainer_FuncPtr DeleteContainer;
507 	SKF_EnumContainer_FuncPtr EnumContainer;
508 	SKF_OpenContainer_FuncPtr OpenContainer;
509 	SKF_CloseContainer_FuncPtr CloseContainer;
510 	SKF_GetContainerType_FuncPtr GetContainerType;
511 	SKF_ImportCertificate_FuncPtr ImportCertificate;
512 	SKF_ExportCertificate_FuncPtr ExportCertificate;
513 	SKF_ExportPublicKey_FuncPtr ExportPublicKey;
514 	SKF_GenRandom_FuncPtr GenRandom;
515 	SKF_GenExtRSAKey_FuncPtr GenExtRSAKey;
516 	SKF_GenRSAKeyPair_FuncPtr GenRSAKeyPair;
517 	SKF_ImportRSAKeyPair_FuncPtr ImportRSAKeyPair;
518 	SKF_RSASignData_FuncPtr RSASignData;
519 	SKF_RSAVerify_FuncPtr RSAVerify;
520 	SKF_RSAExportSessionKey_FuncPtr RSAExportSessionKey;
521 	SKF_ExtRSAPubKeyOperation_FuncPtr ExtRSAPubKeyOperation;
522 	SKF_ExtRSAPriKeyOperation_FuncPtr ExtRSAPriKeyOperation;
523 	SKF_GenECCKeyPair_FuncPtr GenECCKeyPair;
524 	SKF_ImportECCKeyPair_FuncPtr ImportECCKeyPair;
525 	SKF_ECCSignData_FuncPtr ECCSignData;
526 	SKF_ECCVerify_FuncPtr ECCVerify;
527 	SKF_ECCExportSessionKey_FuncPtr ECCExportSessionKey;
528 	SKF_ExtECCEncrypt_FuncPtr ExtECCEncrypt;
529 	SKF_ExtECCDecrypt_FuncPtr ExtECCDecrypt;
530 	SKF_ECCDecrypt_FuncPtr ECCDecrypt;
531 	SKF_ExtECCSign_FuncPtr ExtECCSign;
532 	SKF_ExtECCVerify_FuncPtr ExtECCVerify;
533 	SKF_GenerateAgreementDataWithECC_FuncPtr GenerateAgreementDataWithECC;
534 	SKF_GenerateAgreementDataAndKeyWithECC_FuncPtr GenerateAgreementDataAndKeyWithECC;
535 	SKF_GenerateKeyWithECC_FuncPtr GenerateKeyWithECC;
536 	SKF_ImportSessionKey_FuncPtr ImportSessionKey;
537 	SKF_SetSymmKey_FuncPtr SetSymmKey;
538 	SKF_EncryptInit_FuncPtr EncryptInit;
539 	SKF_Encrypt_FuncPtr Encrypt;
540 	SKF_EncryptUpdate_FuncPtr EncryptUpdate;
541 	SKF_EncryptFinal_FuncPtr EncryptFinal;
542 	SKF_DecryptInit_FuncPtr DecryptInit;
543 	SKF_Decrypt_FuncPtr Decrypt;
544 	SKF_DecryptUpdate_FuncPtr DecryptUpdate;
545 	SKF_DecryptFinal_FuncPtr DecryptFinal;
546 	SKF_DigestInit_FuncPtr DigestInit;
547 	SKF_Digest_FuncPtr Digest;
548 	SKF_DigestUpdate_FuncPtr DigestUpdate;
549 	SKF_DigestFinal_FuncPtr DigestFinal;
550 	SKF_MacInit_FuncPtr MacInit;
551 	SKF_Mac_FuncPtr Mac;
552 	SKF_MacUpdate_FuncPtr MacUpdate;
553 	SKF_MacFinal_FuncPtr MacFinal;
554 	SKF_CloseHandle_FuncPtr CloseHandle;
555 } SKF_METHOD;
556 
557 SKF_METHOD *SKF_METHOD_load_library(const char *so_path);
558 void SKF_METHOD_free(SKF_METHOD *meth);
559 
560 
561 typedef struct skf_vendor_st {
562 	char *name;
563 	unsigned int authrand_length;
564 	ULONG (*get_cipher_algor)(ULONG vendor_id);
565 	ULONG (*get_cipher_cap)(ULONG vendor_cap);
566 	ULONG (*get_digest_algor)(ULONG vendor_id);
567 	ULONG (*get_digest_cap)(ULONG vendor_cap);
568 	ULONG (*get_pkey_algor)(ULONG vendor_id);
569 	ULONG (*get_pkey_cap)(ULONG vendor_cap);
570 	unsigned long (*get_error_reason)(ULONG err);
571 } SKF_VENDOR;
572 
573 typedef struct {
574 	ULONG err;
575 	unsigned long reason;
576 } SKF_ERR_REASON;
577 
578 #endif
579