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 #include <stdio.h>
12 #include <stdlib.h>
13 #include <string.h>
14 #include "skf_int.h"
15
16
17
18 SKF_METHOD *skf_method = NULL;
19 SKF_VENDOR *skf_vendor = NULL;
20 extern SKF_VENDOR skf_wisec;
21
22
23 #define SKFerr(f,e)
24
25
SKF_LoadLibrary(LPSTR so_path,LPSTR vendor)26 ULONG SKF_LoadLibrary(LPSTR so_path, LPSTR vendor)
27 {
28 if (skf_method) {
29 SKF_METHOD_free(skf_method);
30 skf_method = NULL;
31 }
32
33 if (!(skf_method = SKF_METHOD_load_library((char *)so_path))) {
34 SKFerr(SKF_F_SKF_LOADLIBRARY, SKF_R_LOAD_LIBRARY_FAILURE);
35 return SAR_FAIL;
36 }
37
38 if (vendor) {
39 if (strcmp((char *)vendor, skf_wisec.name) == 0) {
40 skf_vendor = &skf_wisec;
41 } else {
42 SKFerr(SKF_F_SKF_LOADLIBRARY, SKF_R_UNKNOWN_VENDOR);
43 return SAR_FAIL;
44 }
45 }
46
47 return SAR_OK;
48 }
49
SKF_UnloadLibrary(void)50 ULONG SKF_UnloadLibrary(void)
51 {
52 SKF_METHOD_free(skf_method);
53 skf_method = NULL;
54 skf_vendor = NULL;
55 return SAR_OK;
56 }
57
58 /*
59 static SKF_ERR_REASON skf_errors[] = {
60 { SAR_OK, SKF_R_SUCCESS },
61 { SAR_FAIL, SKF_R_FAILURE },
62 { SAR_UNKNOWNERR, SKF_R_UNKNOWN_ERROR },
63 { SAR_NOTSUPPORTYETERR, SKF_R_OPERATION_NOT_SUPPORTED },
64 { SAR_FILEERR, SKF_R_FILE_ERROR },
65 { SAR_INVALIDHANDLEERR, SKF_R_INVALID_HANDLE },
66 { SAR_INVALIDPARAMERR, SKF_R_INVALID_PARAMETER },
67 { SAR_READFILEERR, SKF_R_READ_FILE_FAILURE },
68 { SAR_WRITEFILEERR, SKF_R_WRITE_FILE_FAILURE },
69 { SAR_NAMELENERR, SKF_R_INVALID_NAME_LENGTH },
70 { SAR_KEYUSAGEERR, SKF_R_INVALID_KEY_USAGE },
71 { SAR_MODULUSLENERR, SKF_R_INVALID_MODULUS_LENGTH },
72 { SAR_NOTINITIALIZEERR, SKF_R_NOT_INITIALIZED },
73 { SAR_OBJERR, SKF_R_INVALID_OBJECT },
74 { SAR_MEMORYERR, SKF_R_MEMORY_ERROR },
75 { SAR_TIMEOUTERR, SKF_R_TIMEOUT },
76 { SAR_INDATALENERR, SKF_R_INVALID_INPUT_LENGTH },
77 { SAR_INDATAERR, SKF_R_INVALID_INPUT_VALUE },
78 { SAR_GENRANDERR, SKF_R_RANDOM_GENERATION_FAILED },
79 { SAR_HASHOBJERR, SKF_R_INVALID_DIGEST_HANDLE },
80 { SAR_HASHERR, SKF_R_DIGEST_ERROR },
81 { SAR_GENRSAKEYERR, SKF_R_RSA_KEY_GENERATION_FAILURE },
82 { SAR_RSAMODULUSLENERR, SKF_R_INVALID_RSA_MODULUS_LENGTH },
83 { SAR_CSPIMPRTPUBKEYERR, SKF_R_CSP_IMPORT_PUBLIC_KEY_ERROR },
84 { SAR_RSAENCERR, SKF_R_RSA_ENCRYPTION_FAILURE },
85 { SAR_RSADECERR, SKF_R_RSA_DECRYPTION_FAILURE },
86 { SAR_HASHNOTEQUALERR, SKF_R_HASH_NOT_EQUAL },
87 { SAR_KEYNOTFOUNTERR, SKF_R_KEY_NOT_FOUND },
88 { SAR_CERTNOTFOUNTERR, SKF_R_CERTIFICATE_NOT_FOUND },
89 { SAR_NOTEXPORTERR, SKF_R_EXPORT_FAILED },
90 { SAR_DECRYPTPADERR, SKF_R_DECRYPT_INVALID_PADDING },
91 { SAR_MACLENERR, SKF_R_INVALID_MAC_LENGTH },
92 { SAR_BUFFER_TOO_SMALL, SKF_R_BUFFER_TOO_SMALL },
93 { SAR_KEYINFOTYPEERR, SKF_R_INVALID_KEY_INFO_TYPE },
94 { SAR_NOT_EVENTERR, SKF_R_NO_EVENT },
95 { SAR_DEVICE_REMOVED, SKF_R_DEVICE_REMOVED },
96 { SAR_PIN_INCORRECT, SKF_R_PIN_INCORRECT },
97 { SAR_PIN_LOCKED, SKF_R_PIN_LOCKED },
98 { SAR_PIN_INVALID, SKF_R_INVALID_PIN },
99 { SAR_PIN_LEN_RANGE, SKF_R_INVALID_PIN_LENGTH },
100 { SAR_USER_ALREADY_LOGGED_IN, SKF_R_USER_ALREADY_LOGGED_IN },
101 { SAR_USER_PIN_NOT_INITIALIZED, SKF_R_USER_PIN_NOT_INITIALIZED },
102 { SAR_USER_TYPE_INVALID, SKF_R_INVALID_USER_TYPE },
103 { SAR_APPLICATION_NAME_INVALID, SKF_R_INVALID_APPLICATION_NAME },
104 { SAR_APPLICATION_EXISTS, SKF_R_APPLICATION_ALREADY_EXIST },
105 { SAR_USER_NOT_LOGGED_IN, SKF_R_USER_NOT_LOGGED_IN },
106 { SAR_APPLICATION_NOT_EXISTS, SKF_R_APPLICATION_NOT_EXIST },
107 { SAR_FILE_ALREADY_EXIST, SKF_R_FILE_ALREADY_EXIST },
108 { SAR_NO_ROOM, SKF_R_NO_SPACE },
109 { SAR_FILE_NOT_EXIST, SKF_R_FILE_NOT_EXIST },
110 };
111 */
112
skf_get_error_reason(ULONG ulError)113 static unsigned long skf_get_error_reason(ULONG ulError)
114 {
115 /*
116 int i;
117 for (i = 0; i < OSSL_NELEM(skf_errors); i++) {
118 if (ulError == skf_errors[i].err) {
119 return skf_errors[i].reason;
120 }
121 }
122 if (skf_vendor) {
123 return skf_vendor->get_error_reason(ulError);
124 }
125 */
126 return 0;
127 }
128
SKF_GetErrorString(ULONG ulError,LPSTR * szErrorStr)129 ULONG SKF_GetErrorString(ULONG ulError, LPSTR *szErrorStr)
130 {
131 unsigned long reason;
132
133 if ((reason = skf_get_error_reason(ulError)) != 0) {
134 //*szErrorStr = (LPSTR)ERR_reason_error_string(reason);
135 } else {
136 *szErrorStr = (LPSTR)"(unknown)";
137 }
138
139 return SAR_OK;
140 }
141
SKF_WaitForDevEvent(LPSTR szDevName,ULONG * pulDevNameLen,ULONG * pulEvent)142 ULONG DEVAPI SKF_WaitForDevEvent(
143 LPSTR szDevName,
144 ULONG *pulDevNameLen,
145 ULONG *pulEvent)
146 {
147 ULONG rv;
148
149 if (!skf_method) {
150 SKFerr(SKF_F_SKF_WAITFORDEVEVENT,
151 SKF_R_SKF_METHOD_NOT_INITIALIZED);
152 return SAR_NOTINITIALIZEERR;
153 }
154
155 if (!skf_method->WaitForDevEvent) {
156 SKFerr(SKF_F_SKF_WAITFORDEVEVENT,
157 SKF_R_FUNCTION_NOT_SUPPORTED);
158 return SAR_NOTSUPPORTYETERR;
159 }
160
161 if ((rv = skf_method->WaitForDevEvent(
162 szDevName,
163 pulDevNameLen,
164 pulEvent)) != SAR_OK) {
165 SKFerr(SKF_F_SKF_WAITFORDEVEVENT, skf_get_error_reason(rv));
166 return rv;
167 }
168
169 return SAR_OK;
170 }
171
SKF_CancelWaitForDevEvent(void)172 ULONG DEVAPI SKF_CancelWaitForDevEvent(
173 void)
174 {
175 ULONG rv;
176
177 if (!skf_method) {
178 SKFerr(SKF_F_SKF_CANCELWAITFORDEVEVENT,
179 SKF_R_SKF_METHOD_NOT_INITIALIZED);
180 return SAR_NOTINITIALIZEERR;
181 }
182
183 if (!skf_method->CancelWaitForDevEvent) {
184 SKFerr(SKF_F_SKF_CANCELWAITFORDEVEVENT,
185 SKF_R_FUNCTION_NOT_SUPPORTED);
186 return SAR_NOTSUPPORTYETERR;
187 }
188
189 if (skf_method->CancelWaitForDevEvent) {
190 return skf_method->CancelWaitForDevEvent();
191 }
192
193 if ((rv = skf_method->CancelWaitForDevEvent()) != SAR_OK) {
194 SKFerr(SKF_F_SKF_CANCELWAITFORDEVEVENT, skf_get_error_reason(rv));
195 return rv;
196 }
197
198 return SAR_OK;
199 }
200
SKF_EnumDev(BOOL bPresent,LPSTR szNameList,ULONG * pulSize)201 ULONG DEVAPI SKF_EnumDev(
202 BOOL bPresent,
203 LPSTR szNameList,
204 ULONG *pulSize)
205 {
206 ULONG rv;
207
208
209 // check output of all enum functions !!!!
210
211 if (!skf_method) {
212 SKFerr(SKF_F_SKF_ENUMDEV,
213 SKF_R_SKF_METHOD_NOT_INITIALIZED);
214 return SAR_NOTINITIALIZEERR;
215 }
216
217 if (!skf_method->EnumDev) {
218 SKFerr(SKF_F_SKF_ENUMDEV,
219 SKF_R_FUNCTION_NOT_SUPPORTED);
220 return SAR_NOTSUPPORTYETERR;
221 }
222
223 if (szNameList) {
224 memset(szNameList, 0, *pulSize);
225 }
226
227 if ((rv = skf_method->EnumDev(
228 bPresent,
229 szNameList,
230 pulSize)) != SAR_OK) {
231 SKFerr(SKF_F_SKF_ENUMDEV, skf_get_error_reason(rv));
232 return rv;
233 }
234
235 return SAR_OK;
236 }
237
SKF_ConnectDev(LPSTR szName,DEVHANDLE * phDev)238 ULONG DEVAPI SKF_ConnectDev(
239 LPSTR szName,
240 DEVHANDLE *phDev)
241 {
242 ULONG rv;
243
244 if (!skf_method) {
245 SKFerr(SKF_F_SKF_CONNECTDEV,
246 SKF_R_SKF_METHOD_NOT_INITIALIZED);
247 return SAR_NOTINITIALIZEERR;
248 }
249
250 if (!skf_method->ConnectDev) {
251 SKFerr(SKF_F_SKF_CONNECTDEV,
252 SKF_R_FUNCTION_NOT_SUPPORTED);
253 return SAR_NOTSUPPORTYETERR;
254 }
255
256 if ((rv = skf_method->ConnectDev(
257 szName,
258 phDev)) != SAR_OK) {
259 SKFerr(SKF_F_SKF_CONNECTDEV, skf_get_error_reason(rv));
260 return rv;
261 }
262
263 return SAR_OK;
264 }
265
SKF_DisConnectDev(DEVHANDLE hDev)266 ULONG DEVAPI SKF_DisConnectDev(
267 DEVHANDLE hDev)
268 {
269 ULONG rv;
270
271 if (!skf_method) {
272 SKFerr(SKF_F_SKF_DISCONNECTDEV,
273 SKF_R_SKF_METHOD_NOT_INITIALIZED);
274 return SAR_NOTINITIALIZEERR;
275 }
276
277 if (!skf_method->DisConnectDev) {
278 SKFerr(SKF_F_SKF_DISCONNECTDEV,
279 SKF_R_FUNCTION_NOT_SUPPORTED);
280 return SAR_NOTSUPPORTYETERR;
281 }
282
283 if ((rv = skf_method->DisConnectDev(
284 hDev)) != SAR_OK) {
285 SKFerr(SKF_F_SKF_DISCONNECTDEV, skf_get_error_reason(rv));
286 return rv;
287 }
288
289 return SAR_OK;
290 }
291
SKF_GetDevState(LPSTR szDevName,ULONG * pulDevState)292 ULONG DEVAPI SKF_GetDevState(
293 LPSTR szDevName,
294 ULONG *pulDevState)
295 {
296 ULONG rv;
297
298 if (!skf_method) {
299 SKFerr(SKF_F_SKF_GETDEVSTATE,
300 SKF_R_SKF_METHOD_NOT_INITIALIZED);
301 return SAR_NOTINITIALIZEERR;
302 }
303
304 if (!skf_method->GetDevState) {
305 SKFerr(SKF_F_SKF_GETDEVSTATE,
306 SKF_R_FUNCTION_NOT_SUPPORTED);
307 return SAR_NOTSUPPORTYETERR;
308 }
309
310 if ((rv = skf_method->GetDevState(
311 szDevName,
312 pulDevState)) != SAR_OK) {
313 SKFerr(SKF_F_SKF_GETDEVSTATE, skf_get_error_reason(rv));
314 return rv;
315 }
316
317 return SAR_OK;
318 }
319
SKF_SetLabel(DEVHANDLE hDev,LPSTR szLabel)320 ULONG DEVAPI SKF_SetLabel(
321 DEVHANDLE hDev,
322 LPSTR szLabel)
323 {
324 ULONG rv;
325
326 if (!skf_method) {
327 SKFerr(SKF_F_SKF_SETLABEL,
328 SKF_R_SKF_METHOD_NOT_INITIALIZED);
329 return SAR_NOTINITIALIZEERR;
330 }
331
332 if (!skf_method->SetLabel) {
333 SKFerr(SKF_F_SKF_SETLABEL,
334 SKF_R_FUNCTION_NOT_SUPPORTED);
335 return SAR_NOTSUPPORTYETERR;
336 }
337
338 if ((rv = skf_method->SetLabel(
339 hDev,
340 szLabel)) != SAR_OK) {
341 SKFerr(SKF_F_SKF_SETLABEL, skf_get_error_reason(rv));
342 return rv;
343 }
344
345 return SAR_OK;
346 }
347
SKF_GetDevInfo(DEVHANDLE hDev,DEVINFO * pDevInfo)348 ULONG DEVAPI SKF_GetDevInfo(
349 DEVHANDLE hDev,
350 DEVINFO *pDevInfo)
351 {
352 ULONG rv;
353
354 if (!skf_method) {
355 SKFerr(SKF_F_SKF_GETDEVINFO,
356 SKF_R_SKF_METHOD_NOT_INITIALIZED);
357 return SAR_NOTINITIALIZEERR;
358 }
359
360 if (!skf_method->GetDevInfo) {
361 SKFerr(SKF_F_SKF_GETDEVINFO,
362 SKF_R_FUNCTION_NOT_SUPPORTED);
363 return SAR_NOTSUPPORTYETERR;
364 }
365
366 memset(pDevInfo, 0, sizeof(DEVINFO));
367
368 if ((rv = skf_method->GetDevInfo(
369 hDev,
370 pDevInfo)) != SAR_OK) {
371 SKFerr(SKF_F_SKF_GETDEVINFO, skf_get_error_reason(rv));
372 printf("rv = %8x\n", rv);
373 return rv;
374 }
375
376 if (skf_vendor) {
377 pDevInfo->AlgSymCap = skf_vendor->get_cipher_cap(pDevInfo->AlgSymCap);
378 pDevInfo->AlgAsymCap = skf_vendor->get_pkey_cap(pDevInfo->AlgAsymCap);
379 pDevInfo->AlgHashCap = skf_vendor->get_digest_cap(pDevInfo->AlgHashCap);
380 pDevInfo->DevAuthAlgId = skf_vendor->get_cipher_cap(pDevInfo->DevAuthAlgId);
381 }
382
383 return SAR_OK;
384 }
385
SKF_LockDev(DEVHANDLE hDev,ULONG ulTimeOut)386 ULONG DEVAPI SKF_LockDev(
387 DEVHANDLE hDev,
388 ULONG ulTimeOut)
389 {
390 ULONG rv;
391
392 if (!skf_method) {
393 SKFerr(SKF_F_SKF_LOCKDEV,
394 SKF_R_SKF_METHOD_NOT_INITIALIZED);
395 return SAR_NOTINITIALIZEERR;
396 }
397
398 if (!skf_method->LockDev) {
399 SKFerr(SKF_F_SKF_LOCKDEV,
400 SKF_R_FUNCTION_NOT_SUPPORTED);
401 return SAR_NOTSUPPORTYETERR;
402 }
403
404 if ((rv = skf_method->LockDev(
405 hDev,
406 ulTimeOut)) != SAR_OK) {
407 SKFerr(SKF_F_SKF_LOCKDEV, skf_get_error_reason(rv));
408 return rv;
409 }
410
411 return SAR_OK;
412 }
413
SKF_UnlockDev(DEVHANDLE hDev)414 ULONG DEVAPI SKF_UnlockDev(
415 DEVHANDLE hDev)
416 {
417 ULONG rv;
418
419 if (!skf_method) {
420 SKFerr(SKF_F_SKF_UNLOCKDEV,
421 SKF_R_SKF_METHOD_NOT_INITIALIZED);
422 return SAR_NOTINITIALIZEERR;
423 }
424
425 if (!skf_method->UnlockDev) {
426 SKFerr(SKF_F_SKF_UNLOCKDEV,
427 SKF_R_FUNCTION_NOT_SUPPORTED);
428 return SAR_NOTSUPPORTYETERR;
429 }
430
431 if ((rv = skf_method->UnlockDev(
432 hDev)) != SAR_OK) {
433 SKFerr(SKF_F_SKF_UNLOCKDEV, skf_get_error_reason(rv));
434 return rv;
435 }
436
437 return SAR_OK;
438 }
439
SKF_Transmit(DEVHANDLE hDev,BYTE * pbCommand,ULONG ulCommandLen,BYTE * pbData,ULONG * pulDataLen)440 ULONG DEVAPI SKF_Transmit(
441 DEVHANDLE hDev,
442 BYTE *pbCommand,
443 ULONG ulCommandLen,
444 BYTE *pbData,
445 ULONG *pulDataLen)
446 {
447 ULONG rv;
448
449 if (!skf_method) {
450 SKFerr(SKF_F_SKF_TRANSMIT,
451 SKF_R_SKF_METHOD_NOT_INITIALIZED);
452 return SAR_NOTINITIALIZEERR;
453 }
454
455 if (!skf_method->Transmit) {
456 SKFerr(SKF_F_SKF_TRANSMIT,
457 SKF_R_FUNCTION_NOT_SUPPORTED);
458 return SAR_NOTSUPPORTYETERR;
459 }
460
461 if ((rv = skf_method->Transmit(
462 hDev,
463 pbCommand,
464 ulCommandLen,
465 pbData,
466 pulDataLen)) != SAR_OK) {
467 SKFerr(SKF_F_SKF_TRANSMIT, skf_get_error_reason(rv));
468 return rv;
469 }
470
471 return SAR_OK;
472 }
473
SKF_ChangeDevAuthKey(DEVHANDLE hDev,BYTE * pbKeyValue,ULONG ulKeyLen)474 ULONG DEVAPI SKF_ChangeDevAuthKey(
475 DEVHANDLE hDev,
476 BYTE *pbKeyValue,
477 ULONG ulKeyLen)
478 {
479 ULONG rv;
480
481 if (!skf_method) {
482 SKFerr(SKF_F_SKF_CHANGEDEVAUTHKEY,
483 SKF_R_SKF_METHOD_NOT_INITIALIZED);
484 return SAR_NOTINITIALIZEERR;
485 }
486
487 if (!skf_method->ChangeDevAuthKey) {
488 SKFerr(SKF_F_SKF_CHANGEDEVAUTHKEY,
489 SKF_R_FUNCTION_NOT_SUPPORTED);
490 return SAR_NOTSUPPORTYETERR;
491 }
492
493 if ((rv = skf_method->ChangeDevAuthKey(
494 hDev,
495 pbKeyValue,
496 ulKeyLen)) != SAR_OK) {
497 SKFerr(SKF_F_SKF_CHANGEDEVAUTHKEY, skf_get_error_reason(rv));
498 return rv;
499 }
500
501 return SAR_OK;
502 }
503
SKF_DevAuth(DEVHANDLE hDev,BYTE * pbAuthData,ULONG ulLen)504 ULONG DEVAPI SKF_DevAuth(
505 DEVHANDLE hDev,
506 BYTE *pbAuthData,
507 ULONG ulLen)
508 {
509 ULONG rv;
510
511 if (!skf_method) {
512 SKFerr(SKF_F_SKF_DEVAUTH,
513 SKF_R_SKF_METHOD_NOT_INITIALIZED);
514 return SAR_NOTINITIALIZEERR;
515 }
516
517 if (!skf_method->DevAuth) {
518 SKFerr(SKF_F_SKF_DEVAUTH,
519 SKF_R_FUNCTION_NOT_SUPPORTED);
520 return SAR_NOTSUPPORTYETERR;
521 }
522
523 if ((rv = skf_method->DevAuth(
524 hDev,
525 pbAuthData,
526 ulLen)) != SAR_OK) {
527 SKFerr(SKF_F_SKF_DEVAUTH, skf_get_error_reason(rv));
528 return rv;
529 }
530
531 return SAR_OK;
532 }
533
SKF_ChangePIN(HAPPLICATION hApplication,ULONG ulPINType,LPSTR szOldPin,LPSTR szNewPin,ULONG * pulRetryCount)534 ULONG DEVAPI SKF_ChangePIN(
535 HAPPLICATION hApplication,
536 ULONG ulPINType,
537 LPSTR szOldPin,
538 LPSTR szNewPin,
539 ULONG *pulRetryCount)
540 {
541 ULONG rv;
542
543 if (!skf_method) {
544 SKFerr(SKF_F_SKF_CHANGEPIN,
545 SKF_R_SKF_METHOD_NOT_INITIALIZED);
546 return SAR_NOTINITIALIZEERR;
547 }
548
549 if (!skf_method->ChangePIN) {
550 SKFerr(SKF_F_SKF_CHANGEPIN,
551 SKF_R_FUNCTION_NOT_SUPPORTED);
552 return SAR_NOTSUPPORTYETERR;
553 }
554
555 if ((rv = skf_method->ChangePIN(
556 hApplication,
557 ulPINType,
558 szOldPin,
559 szNewPin,
560 pulRetryCount)) != SAR_OK) {
561 SKFerr(SKF_F_SKF_CHANGEPIN, skf_get_error_reason(rv));
562 return rv;
563 }
564
565 return SAR_OK;
566 }
567
SKF_GetPINInfo(HAPPLICATION hApplication,ULONG ulPINType,ULONG * pulMaxRetryCount,ULONG * pulRemainRetryCount,BOOL * pbDefaultPin)568 LONG DEVAPI SKF_GetPINInfo(
569 HAPPLICATION hApplication,
570 ULONG ulPINType,
571 ULONG *pulMaxRetryCount,
572 ULONG *pulRemainRetryCount,
573 BOOL *pbDefaultPin)
574 {
575 ULONG rv;
576
577 if (!skf_method) {
578 SKFerr(SKF_F_SKF_GETPININFO,
579 SKF_R_SKF_METHOD_NOT_INITIALIZED);
580 return SAR_NOTINITIALIZEERR;
581 }
582
583 if (!skf_method->GetPINInfo) {
584 SKFerr(SKF_F_SKF_GETPININFO,
585 SKF_R_FUNCTION_NOT_SUPPORTED);
586 return SAR_NOTSUPPORTYETERR;
587 }
588
589 if ((rv = skf_method->GetPINInfo(
590 hApplication,
591 ulPINType,
592 pulMaxRetryCount,
593 pulRemainRetryCount,
594 pbDefaultPin)) != SAR_OK) {
595 SKFerr(SKF_F_SKF_GETPININFO, skf_get_error_reason(rv));
596 return rv;
597 }
598
599 return SAR_OK;
600 }
601
SKF_VerifyPIN(HAPPLICATION hApplication,ULONG ulPINType,LPSTR szPIN,ULONG * pulRetryCount)602 ULONG DEVAPI SKF_VerifyPIN(
603 HAPPLICATION hApplication,
604 ULONG ulPINType,
605 LPSTR szPIN,
606 ULONG *pulRetryCount)
607 {
608 ULONG rv;
609
610 if (!skf_method) {
611 SKFerr(SKF_F_SKF_VERIFYPIN,
612 SKF_R_SKF_METHOD_NOT_INITIALIZED);
613 return SAR_NOTINITIALIZEERR;
614 }
615
616 if (!skf_method->VerifyPIN) {
617 SKFerr(SKF_F_SKF_VERIFYPIN,
618 SKF_R_FUNCTION_NOT_SUPPORTED);
619 return SAR_NOTSUPPORTYETERR;
620 }
621
622 if ((rv = skf_method->VerifyPIN(
623 hApplication,
624 ulPINType,
625 szPIN,
626 pulRetryCount)) != SAR_OK) {
627 SKFerr(SKF_F_SKF_VERIFYPIN, skf_get_error_reason(rv));
628 return rv;
629 }
630
631 return SAR_OK;
632 }
633
SKF_UnblockPIN(HAPPLICATION hApplication,LPSTR szAdminPIN,LPSTR szNewUserPIN,ULONG * pulRetryCount)634 ULONG DEVAPI SKF_UnblockPIN(
635 HAPPLICATION hApplication,
636 LPSTR szAdminPIN,
637 LPSTR szNewUserPIN,
638 ULONG *pulRetryCount)
639 {
640 ULONG rv;
641
642 if (!skf_method) {
643 SKFerr(SKF_F_SKF_UNBLOCKPIN,
644 SKF_R_SKF_METHOD_NOT_INITIALIZED);
645 return SAR_NOTINITIALIZEERR;
646 }
647
648 if (!skf_method->UnblockPIN) {
649 SKFerr(SKF_F_SKF_UNBLOCKPIN,
650 SKF_R_FUNCTION_NOT_SUPPORTED);
651 return SAR_NOTSUPPORTYETERR;
652 }
653
654 if ((rv = skf_method->UnblockPIN(
655 hApplication,
656 szAdminPIN,
657 szNewUserPIN,
658 pulRetryCount)) != SAR_OK) {
659 SKFerr(SKF_F_SKF_UNBLOCKPIN, skf_get_error_reason(rv));
660 return rv;
661 }
662
663 return SAR_OK;
664 }
665
SKF_ClearSecureState(HAPPLICATION hApplication)666 ULONG DEVAPI SKF_ClearSecureState(
667 HAPPLICATION hApplication)
668 {
669 ULONG rv;
670
671 if (!skf_method) {
672 SKFerr(SKF_F_SKF_CLEARSECURESTATE,
673 SKF_R_SKF_METHOD_NOT_INITIALIZED);
674 return SAR_NOTINITIALIZEERR;
675 }
676
677 if (!skf_method->ClearSecureState) {
678 SKFerr(SKF_F_SKF_CLEARSECURESTATE,
679 SKF_R_FUNCTION_NOT_SUPPORTED);
680 return SAR_NOTSUPPORTYETERR;
681 }
682
683 if ((rv = skf_method->ClearSecureState(
684 hApplication)) != SAR_OK) {
685 SKFerr(SKF_F_SKF_CLEARSECURESTATE, skf_get_error_reason(rv));
686 return rv;
687 }
688
689 return SAR_OK;
690 }
691
SKF_CreateApplication(DEVHANDLE hDev,LPSTR szAppName,LPSTR szAdminPin,DWORD dwAdminPinRetryCount,LPSTR szUserPin,DWORD dwUserPinRetryCount,DWORD dwCreateFileRights,HAPPLICATION * phApplication)692 ULONG DEVAPI SKF_CreateApplication(
693 DEVHANDLE hDev,
694 LPSTR szAppName,
695 LPSTR szAdminPin,
696 DWORD dwAdminPinRetryCount,
697 LPSTR szUserPin,
698 DWORD dwUserPinRetryCount,
699 DWORD dwCreateFileRights,
700 HAPPLICATION *phApplication)
701 {
702 ULONG rv;
703
704 if (!skf_method) {
705 SKFerr(SKF_F_SKF_CREATEAPPLICATION,
706 SKF_R_SKF_METHOD_NOT_INITIALIZED);
707 return SAR_NOTINITIALIZEERR;
708 }
709
710 if (!skf_method->CreateApplication) {
711 SKFerr(SKF_F_SKF_CREATEAPPLICATION,
712 SKF_R_FUNCTION_NOT_SUPPORTED);
713 return SAR_NOTSUPPORTYETERR;
714 }
715
716 if ((rv = skf_method->CreateApplication(
717 hDev,
718 szAppName,
719 szAdminPin,
720 dwAdminPinRetryCount,
721 szUserPin,
722 dwUserPinRetryCount,
723 dwCreateFileRights,
724 phApplication)) != SAR_OK) {
725 SKFerr(SKF_F_SKF_CREATEAPPLICATION, skf_get_error_reason(rv));
726 return rv;
727 }
728
729 return SAR_OK;
730 }
731
SKF_EnumApplication(DEVHANDLE hDev,LPSTR szAppName,ULONG * pulSize)732 ULONG DEVAPI SKF_EnumApplication(
733 DEVHANDLE hDev,
734 LPSTR szAppName,
735 ULONG *pulSize)
736 {
737 ULONG rv;
738
739 if (!skf_method) {
740 SKFerr(SKF_F_SKF_ENUMAPPLICATION,
741 SKF_R_SKF_METHOD_NOT_INITIALIZED);
742 return SAR_NOTINITIALIZEERR;
743 }
744
745 if (!skf_method->EnumApplication) {
746 SKFerr(SKF_F_SKF_ENUMAPPLICATION,
747 SKF_R_FUNCTION_NOT_SUPPORTED);
748 return SAR_NOTSUPPORTYETERR;
749 }
750
751 if ((rv = skf_method->EnumApplication(
752 hDev,
753 szAppName,
754 pulSize)) != SAR_OK) {
755 SKFerr(SKF_F_SKF_ENUMAPPLICATION, skf_get_error_reason(rv));
756 return rv;
757 }
758
759 return SAR_OK;
760 }
761
SKF_DeleteApplication(DEVHANDLE hDev,LPSTR szAppName)762 ULONG DEVAPI SKF_DeleteApplication(
763 DEVHANDLE hDev,
764 LPSTR szAppName)
765 {
766 ULONG rv;
767
768 if (!skf_method) {
769 SKFerr(SKF_F_SKF_DELETEAPPLICATION,
770 SKF_R_SKF_METHOD_NOT_INITIALIZED);
771 return SAR_NOTINITIALIZEERR;
772 }
773
774 if (!skf_method->DeleteApplication) {
775 SKFerr(SKF_F_SKF_DELETEAPPLICATION,
776 SKF_R_FUNCTION_NOT_SUPPORTED);
777 return SAR_NOTSUPPORTYETERR;
778 }
779
780 if ((rv = skf_method->DeleteApplication(
781 hDev,
782 szAppName)) != SAR_OK) {
783 SKFerr(SKF_F_SKF_DELETEAPPLICATION, skf_get_error_reason(rv));
784 return rv;
785 }
786
787 return SAR_OK;
788 }
789
SKF_OpenApplication(DEVHANDLE hDev,LPSTR szAppName,HAPPLICATION * phApplication)790 ULONG DEVAPI SKF_OpenApplication(
791 DEVHANDLE hDev,
792 LPSTR szAppName,
793 HAPPLICATION *phApplication)
794 {
795 ULONG rv;
796
797 if (!skf_method) {
798 SKFerr(SKF_F_SKF_OPENAPPLICATION,
799 SKF_R_SKF_METHOD_NOT_INITIALIZED);
800 return SAR_NOTINITIALIZEERR;
801 }
802
803 if (!skf_method->OpenApplication) {
804 SKFerr(SKF_F_SKF_OPENAPPLICATION,
805 SKF_R_FUNCTION_NOT_SUPPORTED);
806 return SAR_NOTSUPPORTYETERR;
807 }
808
809 if ((rv = skf_method->OpenApplication(
810 hDev,
811 szAppName,
812 phApplication)) != SAR_OK) {
813 SKFerr(SKF_F_SKF_OPENAPPLICATION, skf_get_error_reason(rv));
814 return rv;
815 }
816
817 return SAR_OK;
818 }
819
SKF_CloseApplication(HAPPLICATION hApplication)820 ULONG DEVAPI SKF_CloseApplication(
821 HAPPLICATION hApplication)
822 {
823 ULONG rv;
824
825 if (!skf_method) {
826 SKFerr(SKF_F_SKF_CLOSEAPPLICATION,
827 SKF_R_SKF_METHOD_NOT_INITIALIZED);
828 return SAR_NOTINITIALIZEERR;
829 }
830
831 if (!skf_method->CloseApplication) {
832 SKFerr(SKF_F_SKF_CLOSEAPPLICATION,
833 SKF_R_FUNCTION_NOT_SUPPORTED);
834 return SAR_NOTSUPPORTYETERR;
835 }
836
837 if ((rv = skf_method->CloseApplication(
838 hApplication)) != SAR_OK) {
839 SKFerr(SKF_F_SKF_CLOSEAPPLICATION, skf_get_error_reason(rv));
840 return rv;
841 }
842
843 return SAR_OK;
844 }
845
SKF_CreateFile(HAPPLICATION hApplication,LPSTR szFileName,ULONG ulFileSize,ULONG ulReadRights,ULONG ulWriteRights)846 ULONG DEVAPI SKF_CreateFile(
847 HAPPLICATION hApplication,
848 LPSTR szFileName,
849 ULONG ulFileSize,
850 ULONG ulReadRights,
851 ULONG ulWriteRights)
852 {
853 ULONG rv;
854
855 if (!skf_method) {
856 SKFerr(SKF_F_SKF_CREATEFILE,
857 SKF_R_SKF_METHOD_NOT_INITIALIZED);
858 return SAR_NOTINITIALIZEERR;
859 }
860
861 if (!skf_method->CreateObject) {
862 SKFerr(SKF_F_SKF_CREATEFILE,
863 SKF_R_FUNCTION_NOT_SUPPORTED);
864 return SAR_NOTSUPPORTYETERR;
865 }
866
867 if ((rv = skf_method->CreateObject(
868 hApplication,
869 szFileName,
870 ulFileSize,
871 ulReadRights,
872 ulWriteRights)) != SAR_OK) {
873 SKFerr(SKF_F_SKF_CREATEFILE, skf_get_error_reason(rv));
874
875 //LPSTR str = NULL;
876 //printf("error = %08X\n", rv);
877 //SKF_GetErrorString(rv, &str);
878 //printf("error = %s\n", (char *)str);
879
880 return rv;
881 }
882
883 return SAR_OK;
884 }
885
SKF_DeleteFile(HAPPLICATION hApplication,LPSTR szFileName)886 ULONG DEVAPI SKF_DeleteFile(
887 HAPPLICATION hApplication,
888 LPSTR szFileName)
889 {
890 ULONG rv;
891
892 if (!skf_method) {
893 SKFerr(SKF_F_SKF_DELETEFILE,
894 SKF_R_SKF_METHOD_NOT_INITIALIZED);
895 return SAR_NOTINITIALIZEERR;
896 }
897
898 if (!skf_method->DeleteObject) {
899 SKFerr(SKF_F_SKF_DELETEFILE,
900 SKF_R_FUNCTION_NOT_SUPPORTED);
901 return SAR_NOTSUPPORTYETERR;
902 }
903
904 if ((rv = skf_method->DeleteObject(
905 hApplication,
906 szFileName)) != SAR_OK) {
907 SKFerr(SKF_F_SKF_DELETEFILE, skf_get_error_reason(rv));
908 return rv;
909 }
910
911 return SAR_OK;
912 }
913
SKF_EnumFiles(HAPPLICATION hApplication,LPSTR szFileList,ULONG * pulSize)914 ULONG DEVAPI SKF_EnumFiles(
915 HAPPLICATION hApplication,
916 LPSTR szFileList,
917 ULONG *pulSize)
918 {
919 ULONG rv;
920
921 if (!skf_method) {
922 SKFerr(SKF_F_SKF_ENUMFILES,
923 SKF_R_SKF_METHOD_NOT_INITIALIZED);
924 return SAR_NOTINITIALIZEERR;
925 }
926
927 if (!skf_method->EnumObjects) {
928 SKFerr(SKF_F_SKF_ENUMFILES,
929 SKF_R_FUNCTION_NOT_SUPPORTED);
930 return SAR_NOTSUPPORTYETERR;
931 }
932
933 if ((rv = skf_method->EnumObjects(
934 hApplication,
935 szFileList,
936 pulSize)) != SAR_OK) {
937 SKFerr(SKF_F_SKF_ENUMFILES, skf_get_error_reason(rv));
938 return rv;
939 }
940
941 return SAR_OK;
942 }
943
SKF_GetFileInfo(HAPPLICATION hApplication,LPSTR szFileName,FILEATTRIBUTE * pFileInfo)944 ULONG DEVAPI SKF_GetFileInfo(
945 HAPPLICATION hApplication,
946 LPSTR szFileName,
947 FILEATTRIBUTE *pFileInfo)
948 {
949 ULONG rv;
950
951 if (!skf_method) {
952 SKFerr(SKF_F_SKF_GETFILEINFO,
953 SKF_R_SKF_METHOD_NOT_INITIALIZED);
954 return SAR_NOTINITIALIZEERR;
955 }
956
957 if (!skf_method->GetObjectInfo) {
958 SKFerr(SKF_F_SKF_GETFILEINFO,
959 SKF_R_FUNCTION_NOT_SUPPORTED);
960 return SAR_NOTSUPPORTYETERR;
961 }
962
963 memset(pFileInfo, 0, sizeof(FILEATTRIBUTE));
964
965 if ((rv = skf_method->GetObjectInfo(
966 hApplication,
967 szFileName,
968 pFileInfo)) != SAR_OK) {
969 SKFerr(SKF_F_SKF_GETFILEINFO, skf_get_error_reason(rv));
970 return rv;
971 }
972
973 return SAR_OK;
974 }
975
SKF_ReadFile(HAPPLICATION hApplication,LPSTR szFileName,ULONG ulOffset,ULONG ulSize,BYTE * pbOutData,ULONG * pulOutLen)976 ULONG DEVAPI SKF_ReadFile(
977 HAPPLICATION hApplication,
978 LPSTR szFileName,
979 ULONG ulOffset,
980 ULONG ulSize,
981 BYTE *pbOutData,
982 ULONG *pulOutLen)
983 {
984 ULONG rv;
985
986 if (!skf_method) {
987 SKFerr(SKF_F_SKF_READFILE,
988 SKF_R_SKF_METHOD_NOT_INITIALIZED);
989 return SAR_NOTINITIALIZEERR;
990 }
991
992 if (!skf_method->ReadObject) {
993 SKFerr(SKF_F_SKF_READFILE,
994 SKF_R_FUNCTION_NOT_SUPPORTED);
995 return SAR_NOTSUPPORTYETERR;
996 }
997
998 if ((rv = skf_method->ReadObject(
999 hApplication,
1000 szFileName,
1001 ulOffset,
1002 ulSize,
1003 pbOutData,
1004 pulOutLen)) != SAR_OK) {
1005 SKFerr(SKF_F_SKF_READFILE, skf_get_error_reason(rv));
1006 return rv;
1007 }
1008
1009 return SAR_OK;
1010 }
1011
SKF_WriteFile(HAPPLICATION hApplication,LPSTR szFileName,ULONG ulOffset,BYTE * pbData,ULONG ulSize)1012 ULONG DEVAPI SKF_WriteFile(
1013 HAPPLICATION hApplication,
1014 LPSTR szFileName,
1015 ULONG ulOffset,
1016 BYTE *pbData,
1017 ULONG ulSize)
1018 {
1019 ULONG rv;
1020
1021 if (!skf_method) {
1022 SKFerr(SKF_F_SKF_WRITEFILE,
1023 SKF_R_SKF_METHOD_NOT_INITIALIZED);
1024 return SAR_NOTINITIALIZEERR;
1025 }
1026
1027 if (!skf_method->WriteObject) {
1028 SKFerr(SKF_F_SKF_WRITEFILE,
1029 SKF_R_FUNCTION_NOT_SUPPORTED);
1030 return SAR_NOTSUPPORTYETERR;
1031 }
1032
1033 if ((rv = skf_method->WriteObject(
1034 hApplication,
1035 szFileName,
1036 ulOffset,
1037 pbData,
1038 ulSize)) != SAR_OK) {
1039 SKFerr(SKF_F_SKF_WRITEFILE, skf_get_error_reason(rv));
1040
1041 printf("error = %08X\n", rv);
1042
1043 return rv;
1044 }
1045
1046 return SAR_OK;
1047 }
1048
SKF_CreateContainer(HAPPLICATION hApplication,LPSTR szContainerName,HCONTAINER * phContainer)1049 ULONG DEVAPI SKF_CreateContainer(
1050 HAPPLICATION hApplication,
1051 LPSTR szContainerName,
1052 HCONTAINER *phContainer)
1053 {
1054 ULONG rv;
1055
1056 if (!skf_method) {
1057 SKFerr(SKF_F_SKF_CREATECONTAINER,
1058 SKF_R_SKF_METHOD_NOT_INITIALIZED);
1059 return SAR_NOTINITIALIZEERR;
1060 }
1061
1062 if (!skf_method->CreateContainer) {
1063 SKFerr(SKF_F_SKF_CREATECONTAINER,
1064 SKF_R_FUNCTION_NOT_SUPPORTED);
1065 return SAR_NOTSUPPORTYETERR;
1066 }
1067
1068 if ((rv = skf_method->CreateContainer(
1069 hApplication,
1070 szContainerName,
1071 phContainer)) != SAR_OK) {
1072 SKFerr(SKF_F_SKF_CREATECONTAINER, skf_get_error_reason(rv));
1073 return rv;
1074 }
1075
1076 return SAR_OK;
1077 }
1078
SKF_DeleteContainer(HAPPLICATION hApplication,LPSTR szContainerName)1079 ULONG DEVAPI SKF_DeleteContainer(
1080 HAPPLICATION hApplication,
1081 LPSTR szContainerName)
1082 {
1083 ULONG rv;
1084
1085 if (!skf_method) {
1086 SKFerr(SKF_F_SKF_DELETECONTAINER,
1087 SKF_R_SKF_METHOD_NOT_INITIALIZED);
1088 return SAR_NOTINITIALIZEERR;
1089 }
1090
1091 if (!skf_method->DeleteContainer) {
1092 SKFerr(SKF_F_SKF_DELETECONTAINER,
1093 SKF_R_FUNCTION_NOT_SUPPORTED);
1094 return SAR_NOTSUPPORTYETERR;
1095 }
1096
1097 if ((rv = skf_method->DeleteContainer(
1098 hApplication,
1099 szContainerName)) != SAR_OK) {
1100 SKFerr(SKF_F_SKF_DELETECONTAINER, skf_get_error_reason(rv));
1101 return rv;
1102 }
1103
1104 return SAR_OK;
1105 }
1106
SKF_EnumContainer(HAPPLICATION hApplication,LPSTR szContainerName,ULONG * pulSize)1107 ULONG DEVAPI SKF_EnumContainer(
1108 HAPPLICATION hApplication,
1109 LPSTR szContainerName,
1110 ULONG *pulSize)
1111 {
1112 ULONG rv;
1113
1114 if (!skf_method) {
1115 SKFerr(SKF_F_SKF_ENUMCONTAINER,
1116 SKF_R_SKF_METHOD_NOT_INITIALIZED);
1117 return SAR_NOTINITIALIZEERR;
1118 }
1119
1120 if (!skf_method->EnumContainer) {
1121 SKFerr(SKF_F_SKF_ENUMCONTAINER,
1122 SKF_R_FUNCTION_NOT_SUPPORTED);
1123 return SAR_NOTSUPPORTYETERR;
1124 }
1125
1126 if ((rv = skf_method->EnumContainer(
1127 hApplication,
1128 szContainerName,
1129 pulSize)) != SAR_OK) {
1130 SKFerr(SKF_F_SKF_ENUMCONTAINER, skf_get_error_reason(rv));
1131 return rv;
1132 }
1133
1134 return SAR_OK;
1135 }
1136
SKF_OpenContainer(HAPPLICATION hApplication,LPSTR szContainerName,HCONTAINER * phContainer)1137 ULONG DEVAPI SKF_OpenContainer(
1138 HAPPLICATION hApplication,
1139 LPSTR szContainerName,
1140 HCONTAINER *phContainer)
1141 {
1142 ULONG rv;
1143
1144 if (!skf_method) {
1145 SKFerr(SKF_F_SKF_OPENCONTAINER,
1146 SKF_R_SKF_METHOD_NOT_INITIALIZED);
1147 return SAR_NOTINITIALIZEERR;
1148 }
1149
1150 if (!skf_method->OpenContainer) {
1151 SKFerr(SKF_F_SKF_OPENCONTAINER,
1152 SKF_R_FUNCTION_NOT_SUPPORTED);
1153 return SAR_NOTSUPPORTYETERR;
1154 }
1155
1156 if ((rv = skf_method->OpenContainer(
1157 hApplication,
1158 szContainerName,
1159 phContainer)) != SAR_OK) {
1160 SKFerr(SKF_F_SKF_OPENCONTAINER, skf_get_error_reason(rv));
1161 return rv;
1162 }
1163
1164 return SAR_OK;
1165 }
1166
SKF_CloseContainer(HCONTAINER hContainer)1167 ULONG DEVAPI SKF_CloseContainer(
1168 HCONTAINER hContainer)
1169 {
1170 ULONG rv;
1171
1172 if (!skf_method) {
1173 SKFerr(SKF_F_SKF_CLOSECONTAINER,
1174 SKF_R_SKF_METHOD_NOT_INITIALIZED);
1175 return SAR_NOTINITIALIZEERR;
1176 }
1177
1178 if (!skf_method->CloseContainer) {
1179 SKFerr(SKF_F_SKF_CLOSECONTAINER,
1180 SKF_R_FUNCTION_NOT_SUPPORTED);
1181 return SAR_NOTSUPPORTYETERR;
1182 }
1183
1184 if ((rv = skf_method->CloseContainer(
1185 hContainer)) != SAR_OK) {
1186 SKFerr(SKF_F_SKF_CLOSECONTAINER, skf_get_error_reason(rv));
1187 return rv;
1188 }
1189
1190 return SAR_OK;
1191 }
1192
SKF_GetContainerType(HCONTAINER hContainer,ULONG * pulContainerType)1193 ULONG DEVAPI SKF_GetContainerType(
1194 HCONTAINER hContainer,
1195 ULONG *pulContainerType)
1196 {
1197 ULONG rv;
1198
1199 if (!skf_method) {
1200 SKFerr(SKF_F_SKF_GETCONTAINERTYPE,
1201 SKF_R_SKF_METHOD_NOT_INITIALIZED);
1202 return SAR_NOTINITIALIZEERR;
1203 }
1204
1205 if (!skf_method->GetContainerType) {
1206 SKFerr(SKF_F_SKF_GETCONTAINERTYPE,
1207 SKF_R_FUNCTION_NOT_SUPPORTED);
1208 return SAR_NOTSUPPORTYETERR;
1209 }
1210
1211 if ((rv = skf_method->GetContainerType(
1212 hContainer,
1213 pulContainerType)) != SAR_OK) {
1214 SKFerr(SKF_F_SKF_GETCONTAINERTYPE, skf_get_error_reason(rv));
1215 return rv;
1216 }
1217
1218 return SAR_OK;
1219 }
1220
SKF_ImportCertificate(HCONTAINER hContainer,BOOL bExportSignKey,BYTE * pbCert,ULONG ulCertLen)1221 ULONG DEVAPI SKF_ImportCertificate(
1222 HCONTAINER hContainer,
1223 BOOL bExportSignKey,
1224 BYTE *pbCert,
1225 ULONG ulCertLen)
1226 {
1227 ULONG rv;
1228
1229 if (!skf_method) {
1230 SKFerr(SKF_F_SKF_IMPORTCERTIFICATE,
1231 SKF_R_SKF_METHOD_NOT_INITIALIZED);
1232 return SAR_NOTINITIALIZEERR;
1233 }
1234
1235 if (!skf_method->ImportCertificate) {
1236 SKFerr(SKF_F_SKF_IMPORTCERTIFICATE,
1237 SKF_R_FUNCTION_NOT_SUPPORTED);
1238 return SAR_NOTSUPPORTYETERR;
1239 }
1240
1241 if ((rv = skf_method->ImportCertificate(
1242 hContainer,
1243 bExportSignKey,
1244 pbCert,
1245 ulCertLen)) != SAR_OK) {
1246 SKFerr(SKF_F_SKF_IMPORTCERTIFICATE, skf_get_error_reason(rv));
1247 return rv;
1248 }
1249
1250 return SAR_OK;
1251 }
1252
SKF_ExportCertificate(HCONTAINER hContainer,BOOL bSignFlag,BYTE * pbCert,ULONG * pulCertLen)1253 ULONG DEVAPI SKF_ExportCertificate(
1254 HCONTAINER hContainer,
1255 BOOL bSignFlag,
1256 BYTE *pbCert,
1257 ULONG *pulCertLen)
1258 {
1259 ULONG rv;
1260
1261 if (!skf_method) {
1262 SKFerr(SKF_F_SKF_EXPORTCERTIFICATE,
1263 SKF_R_SKF_METHOD_NOT_INITIALIZED);
1264 return SAR_NOTINITIALIZEERR;
1265 }
1266
1267 if (!skf_method->ExportCertificate) {
1268 SKFerr(SKF_F_SKF_EXPORTCERTIFICATE,
1269 SKF_R_FUNCTION_NOT_SUPPORTED);
1270 return SAR_NOTSUPPORTYETERR;
1271 }
1272
1273 if ((rv = skf_method->ExportCertificate(
1274 hContainer,
1275 bSignFlag,
1276 pbCert,
1277 pulCertLen)) != SAR_OK) {
1278 SKFerr(SKF_F_SKF_EXPORTCERTIFICATE, skf_get_error_reason(rv));
1279 return rv;
1280 }
1281
1282 return SAR_OK;
1283 }
1284
SKF_ExportPublicKey(HCONTAINER hContainer,BOOL bSignFlag,BYTE * pbBlob,ULONG * pulBlobLen)1285 ULONG DEVAPI SKF_ExportPublicKey(
1286 HCONTAINER hContainer,
1287 BOOL bSignFlag,
1288 BYTE *pbBlob,
1289 ULONG *pulBlobLen)
1290 {
1291 ULONG rv;
1292
1293 // TODO: check the output length, clear the memmory.
1294 // if pbBlob is NULL, return the length
1295
1296 if (!skf_method) {
1297 SKFerr(SKF_F_SKF_EXPORTPUBLICKEY,
1298 SKF_R_SKF_METHOD_NOT_INITIALIZED);
1299 return SAR_NOTINITIALIZEERR;
1300 }
1301
1302 if (!skf_method->ExportPublicKey) {
1303 SKFerr(SKF_F_SKF_EXPORTPUBLICKEY,
1304 SKF_R_FUNCTION_NOT_SUPPORTED);
1305 return SAR_NOTSUPPORTYETERR;
1306 }
1307
1308 if ((rv = skf_method->ExportPublicKey(
1309 hContainer,
1310 bSignFlag,
1311 pbBlob,
1312 pulBlobLen)) != SAR_OK) {
1313 SKFerr(SKF_F_SKF_EXPORTPUBLICKEY, skf_get_error_reason(rv));
1314 return rv;
1315 }
1316
1317 return SAR_OK;
1318 }
1319
SKF_GenRandom(DEVHANDLE hDev,BYTE * pbRandom,ULONG ulRandomLen)1320 ULONG DEVAPI SKF_GenRandom(
1321 DEVHANDLE hDev,
1322 BYTE *pbRandom,
1323 ULONG ulRandomLen)
1324 {
1325 ULONG rv;
1326
1327 if (!skf_method) {
1328 SKFerr(SKF_F_SKF_GENRANDOM,
1329 SKF_R_SKF_METHOD_NOT_INITIALIZED);
1330 return SAR_NOTINITIALIZEERR;
1331 }
1332
1333 if (!skf_method->GenRandom) {
1334 SKFerr(SKF_F_SKF_GENRANDOM,
1335 SKF_R_FUNCTION_NOT_SUPPORTED);
1336 return SAR_NOTSUPPORTYETERR;
1337 }
1338
1339 if ((rv = skf_method->GenRandom(
1340 hDev,
1341 pbRandom,
1342 ulRandomLen)) != SAR_OK) {
1343 SKFerr(SKF_F_SKF_GENRANDOM, skf_get_error_reason(rv));
1344 return rv;
1345 }
1346
1347 return SAR_OK;
1348 }
1349
SKF_GenExtRSAKey(DEVHANDLE hDev,ULONG ulBitsLen,RSAPRIVATEKEYBLOB * pBlob)1350 ULONG DEVAPI SKF_GenExtRSAKey(
1351 DEVHANDLE hDev,
1352 ULONG ulBitsLen,
1353 RSAPRIVATEKEYBLOB *pBlob)
1354 {
1355 ULONG rv;
1356
1357 if (!skf_method) {
1358 SKFerr(SKF_F_SKF_GENEXTRSAKEY,
1359 SKF_R_SKF_METHOD_NOT_INITIALIZED);
1360 return SAR_NOTINITIALIZEERR;
1361 }
1362
1363 if (!skf_method->GenExtRSAKey) {
1364 SKFerr(SKF_F_SKF_GENEXTRSAKEY,
1365 SKF_R_FUNCTION_NOT_SUPPORTED);
1366 return SAR_NOTSUPPORTYETERR;
1367 }
1368
1369 if ((rv = skf_method->GenExtRSAKey(
1370 hDev,
1371 ulBitsLen,
1372 pBlob)) != SAR_OK) {
1373 SKFerr(SKF_F_SKF_GENEXTRSAKEY, skf_get_error_reason(rv));
1374 return rv;
1375 }
1376
1377 return SAR_OK;
1378 }
1379
SKF_GenRSAKeyPair(HCONTAINER hContainer,ULONG ulBitsLen,RSAPUBLICKEYBLOB * pBlob)1380 ULONG DEVAPI SKF_GenRSAKeyPair(
1381 HCONTAINER hContainer,
1382 ULONG ulBitsLen,
1383 RSAPUBLICKEYBLOB *pBlob)
1384 {
1385 ULONG rv;
1386
1387 if (!skf_method) {
1388 SKFerr(SKF_F_SKF_GENRSAKEYPAIR,
1389 SKF_R_SKF_METHOD_NOT_INITIALIZED);
1390 return SAR_NOTINITIALIZEERR;
1391 }
1392
1393 if (!skf_method->GenRSAKeyPair) {
1394 SKFerr(SKF_F_SKF_GENRSAKEYPAIR,
1395 SKF_R_FUNCTION_NOT_SUPPORTED);
1396 return SAR_NOTSUPPORTYETERR;
1397 }
1398
1399 memset(pBlob, 0, sizeof(RSAPUBLICKEYBLOB));
1400 if ((rv = skf_method->GenRSAKeyPair(
1401 hContainer,
1402 ulBitsLen,
1403 pBlob)) != SAR_OK) {
1404 SKFerr(SKF_F_SKF_GENRSAKEYPAIR, skf_get_error_reason(rv));
1405 return rv;
1406 }
1407
1408 return SAR_OK;
1409 }
1410
SKF_ImportRSAKeyPair(HCONTAINER hContainer,ULONG ulSymAlgId,BYTE * pbWrappedKey,ULONG ulWrappedKeyLen,BYTE * pbEncryptedData,ULONG ulEncryptedDataLen)1411 ULONG DEVAPI SKF_ImportRSAKeyPair(
1412 HCONTAINER hContainer,
1413 ULONG ulSymAlgId,
1414 BYTE *pbWrappedKey,
1415 ULONG ulWrappedKeyLen,
1416 BYTE *pbEncryptedData,
1417 ULONG ulEncryptedDataLen)
1418 {
1419 ULONG rv;
1420
1421 if (!skf_method) {
1422 SKFerr(SKF_F_SKF_IMPORTRSAKEYPAIR,
1423 SKF_R_SKF_METHOD_NOT_INITIALIZED);
1424 return SAR_NOTINITIALIZEERR;
1425 }
1426
1427 if (!skf_method->ImportRSAKeyPair) {
1428 SKFerr(SKF_F_SKF_IMPORTRSAKEYPAIR,
1429 SKF_R_FUNCTION_NOT_SUPPORTED);
1430 return SAR_NOTSUPPORTYETERR;
1431 }
1432
1433 if (skf_vendor) {
1434 if (!(ulSymAlgId = skf_vendor->get_cipher_algor(ulSymAlgId))) {
1435 SKFerr(SKF_F_SKF_IMPORTRSAKEYPAIR,
1436 SKF_R_NOT_SUPPORTED_CIPHER_ALGOR);
1437 return SAR_NOTSUPPORTYETERR;
1438 }
1439 }
1440
1441 if ((rv = skf_method->ImportRSAKeyPair(
1442 hContainer,
1443 ulSymAlgId,
1444 pbWrappedKey,
1445 ulWrappedKeyLen,
1446 pbEncryptedData,
1447 ulEncryptedDataLen)) != SAR_OK) {
1448 SKFerr(SKF_F_SKF_IMPORTRSAKEYPAIR, skf_get_error_reason(rv));
1449 return rv;
1450 }
1451
1452 return SAR_OK;
1453 }
1454
SKF_RSASignData(HCONTAINER hContainer,BYTE * pbData,ULONG ulDataLen,BYTE * pbSignature,ULONG * pulSignLen)1455 ULONG DEVAPI SKF_RSASignData(
1456 HCONTAINER hContainer,
1457 BYTE *pbData,
1458 ULONG ulDataLen,
1459 BYTE *pbSignature,
1460 ULONG *pulSignLen)
1461 {
1462 ULONG rv;
1463
1464 if (!skf_method) {
1465 SKFerr(SKF_F_SKF_RSASIGNDATA,
1466 SKF_R_SKF_METHOD_NOT_INITIALIZED);
1467 return SAR_NOTINITIALIZEERR;
1468 }
1469
1470 if (!skf_method->RSASignData) {
1471 SKFerr(SKF_F_SKF_RSASIGNDATA,
1472 SKF_R_FUNCTION_NOT_SUPPORTED);
1473 return SAR_NOTSUPPORTYETERR;
1474 }
1475
1476 if ((rv = skf_method->RSASignData(
1477 hContainer,
1478 pbData,
1479 ulDataLen,
1480 pbSignature,
1481 pulSignLen)) != SAR_OK) {
1482 SKFerr(SKF_F_SKF_RSASIGNDATA, skf_get_error_reason(rv));
1483 return rv;
1484 }
1485
1486 return SAR_OK;
1487 }
1488
SKF_RSAVerify(DEVHANDLE hDev,RSAPUBLICKEYBLOB * pRSAPubKeyBlob,BYTE * pbData,ULONG ulDataLen,BYTE * pbSignature,ULONG ulSignLen)1489 ULONG DEVAPI SKF_RSAVerify(
1490 DEVHANDLE hDev,
1491 RSAPUBLICKEYBLOB *pRSAPubKeyBlob,
1492 BYTE *pbData,
1493 ULONG ulDataLen,
1494 BYTE *pbSignature,
1495 ULONG ulSignLen)
1496 {
1497 ULONG rv;
1498
1499 if (!skf_method) {
1500 SKFerr(SKF_F_SKF_RSAVERIFY,
1501 SKF_R_SKF_METHOD_NOT_INITIALIZED);
1502 return SAR_NOTINITIALIZEERR;
1503 }
1504
1505 if (!skf_method->RSAVerify) {
1506 SKFerr(SKF_F_SKF_RSAVERIFY,
1507 SKF_R_FUNCTION_NOT_SUPPORTED);
1508 return SAR_NOTSUPPORTYETERR;
1509 }
1510
1511 if ((rv = skf_method->RSAVerify(
1512 hDev,
1513 pRSAPubKeyBlob,
1514 pbData,
1515 ulDataLen,
1516 pbSignature,
1517 ulSignLen)) != SAR_OK) {
1518 SKFerr(SKF_F_SKF_RSAVERIFY, skf_get_error_reason(rv));
1519 return rv;
1520 }
1521
1522 return SAR_OK;
1523 }
1524
SKF_RSAExportSessionKey(HCONTAINER hContainer,ULONG ulAlgId,RSAPUBLICKEYBLOB * pPubKey,BYTE * pbData,ULONG * pulDataLen,HANDLE * phSessionKey)1525 ULONG DEVAPI SKF_RSAExportSessionKey(
1526 HCONTAINER hContainer,
1527 ULONG ulAlgId,
1528 RSAPUBLICKEYBLOB *pPubKey,
1529 BYTE *pbData,
1530 ULONG *pulDataLen,
1531 HANDLE *phSessionKey)
1532 {
1533 ULONG rv;
1534
1535 if (!skf_method) {
1536 SKFerr(SKF_F_SKF_RSAEXPORTSESSIONKEY,
1537 SKF_R_SKF_METHOD_NOT_INITIALIZED);
1538 return SAR_NOTINITIALIZEERR;
1539 }
1540
1541 if (!skf_method->RSAExportSessionKey) {
1542 SKFerr(SKF_F_SKF_RSAEXPORTSESSIONKEY,
1543 SKF_R_FUNCTION_NOT_SUPPORTED);
1544 return SAR_NOTSUPPORTYETERR;
1545 }
1546
1547 if (skf_vendor) {
1548 if (!(ulAlgId = skf_vendor->get_cipher_algor(ulAlgId))) {
1549 SKFerr(SKF_F_SKF_RSAEXPORTSESSIONKEY,
1550 SKF_R_NOT_SUPPORTED_CIPHER_ALGOR);
1551 return SAR_NOTSUPPORTYETERR;
1552 }
1553 }
1554
1555 if ((rv = skf_method->RSAExportSessionKey(
1556 hContainer,
1557 ulAlgId,
1558 pPubKey,
1559 pbData,
1560 pulDataLen,
1561 phSessionKey)) != SAR_OK) {
1562 SKFerr(SKF_F_SKF_RSAEXPORTSESSIONKEY, skf_get_error_reason(rv));
1563 return rv;
1564 }
1565
1566 return SAR_OK;
1567 }
1568
SKF_ExtRSAPubKeyOperation(DEVHANDLE hDev,RSAPUBLICKEYBLOB * pRSAPubKeyBlob,BYTE * pbInput,ULONG ulInputLen,BYTE * pbOutput,ULONG * pulOutputLen)1569 ULONG DEVAPI SKF_ExtRSAPubKeyOperation(
1570 DEVHANDLE hDev,
1571 RSAPUBLICKEYBLOB *pRSAPubKeyBlob,
1572 BYTE *pbInput,
1573 ULONG ulInputLen,
1574 BYTE *pbOutput,
1575 ULONG *pulOutputLen)
1576 {
1577 ULONG rv;
1578
1579 if (!skf_method) {
1580 SKFerr(SKF_F_SKF_EXTRSAPUBKEYOPERATION,
1581 SKF_R_SKF_METHOD_NOT_INITIALIZED);
1582 return SAR_NOTINITIALIZEERR;
1583 }
1584
1585 if (!skf_method->ExtRSAPubKeyOperation) {
1586 SKFerr(SKF_F_SKF_EXTRSAPUBKEYOPERATION,
1587 SKF_R_FUNCTION_NOT_SUPPORTED);
1588 return SAR_NOTSUPPORTYETERR;
1589 }
1590
1591 if ((rv = skf_method->ExtRSAPubKeyOperation(
1592 hDev,
1593 pRSAPubKeyBlob,
1594 pbInput,
1595 ulInputLen,
1596 pbOutput,
1597 pulOutputLen)) != SAR_OK) {
1598 SKFerr(SKF_F_SKF_EXTRSAPUBKEYOPERATION, skf_get_error_reason(rv));
1599 return rv;
1600 }
1601
1602 return SAR_OK;
1603 }
1604
SKF_ExtRSAPriKeyOperation(DEVHANDLE hDev,RSAPRIVATEKEYBLOB * pRSAPriKeyBlob,BYTE * pbInput,ULONG ulInputLen,BYTE * pbOutput,ULONG * pulOutputLen)1605 ULONG DEVAPI SKF_ExtRSAPriKeyOperation(
1606 DEVHANDLE hDev,
1607 RSAPRIVATEKEYBLOB *pRSAPriKeyBlob,
1608 BYTE *pbInput,
1609 ULONG ulInputLen,
1610 BYTE *pbOutput,
1611 ULONG *pulOutputLen)
1612 {
1613 ULONG rv;
1614
1615 if (!skf_method) {
1616 SKFerr(SKF_F_SKF_EXTRSAPRIKEYOPERATION,
1617 SKF_R_SKF_METHOD_NOT_INITIALIZED);
1618 return SAR_NOTINITIALIZEERR;
1619 }
1620
1621 if (!skf_method->ExtRSAPriKeyOperation) {
1622 SKFerr(SKF_F_SKF_EXTRSAPRIKEYOPERATION,
1623 SKF_R_FUNCTION_NOT_SUPPORTED);
1624 return SAR_NOTSUPPORTYETERR;
1625 }
1626
1627 if ((rv = skf_method->ExtRSAPriKeyOperation(
1628 hDev,
1629 pRSAPriKeyBlob,
1630 pbInput,
1631 ulInputLen,
1632 pbOutput,
1633 pulOutputLen)) != SAR_OK) {
1634 SKFerr(SKF_F_SKF_EXTRSAPRIKEYOPERATION, skf_get_error_reason(rv));
1635 return rv;
1636 }
1637
1638 return SAR_OK;
1639 }
1640
SKF_GenECCKeyPair(HCONTAINER hContainer,ULONG ulAlgId,ECCPUBLICKEYBLOB * pBlob)1641 ULONG DEVAPI SKF_GenECCKeyPair(
1642 HCONTAINER hContainer,
1643 ULONG ulAlgId,
1644 ECCPUBLICKEYBLOB *pBlob)
1645 {
1646 ULONG rv;
1647
1648 if (!skf_method) {
1649 SKFerr(SKF_F_SKF_GENECCKEYPAIR,
1650 SKF_R_SKF_METHOD_NOT_INITIALIZED);
1651 return SAR_NOTINITIALIZEERR;
1652 }
1653
1654 if (!skf_method->GenECCKeyPair) {
1655 SKFerr(SKF_F_SKF_GENECCKEYPAIR,
1656 SKF_R_FUNCTION_NOT_SUPPORTED);
1657 return SAR_NOTSUPPORTYETERR;
1658 }
1659
1660 if (skf_vendor) {
1661 if (!(ulAlgId = skf_vendor->get_pkey_algor(ulAlgId))) {
1662 SKFerr(SKF_F_SKF_GENECCKEYPAIR,
1663 SKF_R_NOT_SUPPORTED_PKEY_ALGOR);
1664 return SAR_NOTSUPPORTYETERR;
1665 }
1666 }
1667
1668 memset(pBlob, 0, sizeof(ECCPUBLICKEYBLOB));
1669 if ((rv = skf_method->GenECCKeyPair(
1670 hContainer,
1671 ulAlgId,
1672 pBlob)) != SAR_OK) {
1673 SKFerr(SKF_F_SKF_GENECCKEYPAIR, skf_get_error_reason(rv));
1674 return rv;
1675 }
1676
1677 return SAR_OK;
1678 }
1679
SKF_ImportECCKeyPair(HCONTAINER hContainer,ENVELOPEDKEYBLOB * pEnvelopedKeyBlob)1680 ULONG DEVAPI SKF_ImportECCKeyPair(
1681 HCONTAINER hContainer,
1682 ENVELOPEDKEYBLOB *pEnvelopedKeyBlob)
1683 {
1684 ULONG rv;
1685
1686 if (!skf_method) {
1687 SKFerr(SKF_F_SKF_IMPORTECCKEYPAIR,
1688 SKF_R_SKF_METHOD_NOT_INITIALIZED);
1689 return SAR_NOTINITIALIZEERR;
1690 }
1691
1692 if (!skf_method->ImportECCKeyPair) {
1693 SKFerr(SKF_F_SKF_IMPORTECCKEYPAIR,
1694 SKF_R_FUNCTION_NOT_SUPPORTED);
1695 return SAR_NOTSUPPORTYETERR;
1696 }
1697
1698 if ((rv = skf_method->ImportECCKeyPair(
1699 hContainer,
1700 pEnvelopedKeyBlob)) != SAR_OK) {
1701 SKFerr(SKF_F_SKF_IMPORTECCKEYPAIR, skf_get_error_reason(rv));
1702 printf("%s %d: error = %08X\n", __FILE__, __LINE__, rv);
1703 return rv;
1704 }
1705
1706 return SAR_OK;
1707 }
1708
SKF_ECCSignData(HCONTAINER hContainer,BYTE * pbDigest,ULONG ulDigestLen,ECCSIGNATUREBLOB * pSignature)1709 ULONG DEVAPI SKF_ECCSignData(
1710 HCONTAINER hContainer,
1711 BYTE *pbDigest,
1712 ULONG ulDigestLen,
1713 ECCSIGNATUREBLOB *pSignature)
1714 {
1715 ULONG rv;
1716
1717 if (!skf_method) {
1718 SKFerr(SKF_F_SKF_ECCSIGNDATA,
1719 SKF_R_SKF_METHOD_NOT_INITIALIZED);
1720 return SAR_NOTINITIALIZEERR;
1721 }
1722
1723 if (!skf_method->ECCSignData) {
1724 SKFerr(SKF_F_SKF_ECCSIGNDATA,
1725 SKF_R_FUNCTION_NOT_SUPPORTED);
1726 return SAR_NOTSUPPORTYETERR;
1727 }
1728
1729 if ((rv = skf_method->ECCSignData(
1730 hContainer,
1731 pbDigest,
1732 ulDigestLen,
1733 pSignature)) != SAR_OK) {
1734 SKFerr(SKF_F_SKF_ECCSIGNDATA, skf_get_error_reason(rv));
1735 return rv;
1736 }
1737
1738 return SAR_OK;
1739 }
1740
SKF_ECCVerify(DEVHANDLE hDev,ECCPUBLICKEYBLOB * pECCPubKeyBlob,BYTE * pbData,ULONG ulDataLen,ECCSIGNATUREBLOB * pSignature)1741 ULONG DEVAPI SKF_ECCVerify(
1742 DEVHANDLE hDev,
1743 ECCPUBLICKEYBLOB *pECCPubKeyBlob,
1744 BYTE *pbData,
1745 ULONG ulDataLen,
1746 ECCSIGNATUREBLOB *pSignature)
1747 {
1748 ULONG rv;
1749
1750 if (!skf_method) {
1751 SKFerr(SKF_F_SKF_ECCVERIFY,
1752 SKF_R_SKF_METHOD_NOT_INITIALIZED);
1753 return SAR_NOTINITIALIZEERR;
1754 }
1755
1756 if (!skf_method->ECCVerify) {
1757 SKFerr(SKF_F_SKF_ECCVERIFY,
1758 SKF_R_FUNCTION_NOT_SUPPORTED);
1759 return SAR_NOTSUPPORTYETERR;
1760 }
1761
1762 if ((rv = skf_method->ECCVerify(
1763 hDev,
1764 pECCPubKeyBlob,
1765 pbData,
1766 ulDataLen,
1767 pSignature)) != SAR_OK) {
1768 SKFerr(SKF_F_SKF_ECCVERIFY, skf_get_error_reason(rv));
1769 return rv;
1770 }
1771
1772 return SAR_OK;
1773 }
1774
SKF_ECCExportSessionKey(HCONTAINER hContainer,ULONG ulAlgId,ECCPUBLICKEYBLOB * pPubKey,ECCCIPHERBLOB * pData,HANDLE * phSessionKey)1775 ULONG DEVAPI SKF_ECCExportSessionKey(
1776 HCONTAINER hContainer,
1777 ULONG ulAlgId,
1778 ECCPUBLICKEYBLOB *pPubKey,
1779 ECCCIPHERBLOB *pData,
1780 HANDLE *phSessionKey)
1781 {
1782 ULONG rv;
1783
1784 if (!skf_method) {
1785 SKFerr(SKF_F_SKF_ECCEXPORTSESSIONKEY,
1786 SKF_R_SKF_METHOD_NOT_INITIALIZED);
1787 return SAR_NOTINITIALIZEERR;
1788 }
1789
1790 if (!skf_method->ECCExportSessionKey) {
1791 SKFerr(SKF_F_SKF_ECCEXPORTSESSIONKEY,
1792 SKF_R_FUNCTION_NOT_SUPPORTED);
1793 return SAR_NOTSUPPORTYETERR;
1794 }
1795
1796 if (skf_vendor) {
1797 if (!(ulAlgId = skf_vendor->get_cipher_algor(ulAlgId))) {
1798 SKFerr(SKF_F_SKF_ECCEXPORTSESSIONKEY,
1799 SKF_R_NOT_SUPPORTED_CIPHER_ALGOR);
1800 return SAR_NOTSUPPORTYETERR;
1801 }
1802 }
1803
1804 if ((rv = skf_method->ECCExportSessionKey(
1805 hContainer,
1806 ulAlgId,
1807 pPubKey,
1808 pData,
1809 phSessionKey)) != SAR_OK) {
1810 SKFerr(SKF_F_SKF_ECCEXPORTSESSIONKEY, skf_get_error_reason(rv));
1811 return rv;
1812 }
1813
1814 return SAR_OK;
1815 }
1816
SKF_ECCDecrypt(HCONTAINER hContainer,ECCCIPHERBLOB * pCipherText,BYTE * pbPlainText,ULONG * pulPlainTextLen)1817 ULONG DEVAPI SKF_ECCDecrypt(
1818 HCONTAINER hContainer,
1819 ECCCIPHERBLOB *pCipherText,
1820 BYTE *pbPlainText,
1821 ULONG *pulPlainTextLen)
1822 {
1823 ULONG rv;
1824
1825 if (!skf_method) {
1826 SKFerr(SKF_F_SKF_ECCDECRYPT,
1827 SKF_R_SKF_METHOD_NOT_INITIALIZED);
1828 return SAR_NOTINITIALIZEERR;
1829 }
1830
1831 if (!skf_method->ECCDecrypt) {
1832 SKFerr(SKF_F_SKF_ECCDECRYPT,
1833 SKF_R_FUNCTION_NOT_SUPPORTED);
1834 return SAR_NOTSUPPORTYETERR;
1835 }
1836
1837 if ((rv = skf_method->ECCDecrypt(
1838 hContainer,
1839 pCipherText,
1840 pbPlainText,
1841 pulPlainTextLen)) != SAR_OK) {
1842 SKFerr(SKF_F_SKF_ECCDECRYPT, skf_get_error_reason(rv));
1843 return rv;
1844 }
1845
1846 return SAR_OK;
1847 }
1848
SKF_ExtECCEncrypt(DEVHANDLE hDev,ECCPUBLICKEYBLOB * pECCPubKeyBlob,BYTE * pbPlainText,ULONG ulPlainTextLen,ECCCIPHERBLOB * pCipherText)1849 ULONG DEVAPI SKF_ExtECCEncrypt(
1850 DEVHANDLE hDev,
1851 ECCPUBLICKEYBLOB *pECCPubKeyBlob,
1852 BYTE *pbPlainText,
1853 ULONG ulPlainTextLen,
1854 ECCCIPHERBLOB *pCipherText)
1855 {
1856 ULONG rv;
1857
1858 if (!skf_method) {
1859 SKFerr(SKF_F_SKF_EXTECCENCRYPT,
1860 SKF_R_SKF_METHOD_NOT_INITIALIZED);
1861 return SAR_NOTINITIALIZEERR;
1862 }
1863
1864 if (!skf_method->ExtECCEncrypt) {
1865 SKFerr(SKF_F_SKF_EXTECCENCRYPT,
1866 SKF_R_FUNCTION_NOT_SUPPORTED);
1867 return SAR_NOTSUPPORTYETERR;
1868 }
1869
1870 if ((rv = skf_method->ExtECCEncrypt(
1871 hDev,
1872 pECCPubKeyBlob,
1873 pbPlainText,
1874 ulPlainTextLen,
1875 pCipherText)) != SAR_OK) {
1876 SKFerr(SKF_F_SKF_EXTECCENCRYPT, skf_get_error_reason(rv));
1877 return rv;
1878 }
1879
1880 return SAR_OK;
1881 }
1882
SKF_ExtECCDecrypt(DEVHANDLE hDev,ECCPRIVATEKEYBLOB * pECCPriKeyBlob,ECCCIPHERBLOB * pCipherText,BYTE * pbPlainText,ULONG * pulPlainTextLen)1883 ULONG DEVAPI SKF_ExtECCDecrypt(
1884 DEVHANDLE hDev,
1885 ECCPRIVATEKEYBLOB *pECCPriKeyBlob,
1886 ECCCIPHERBLOB *pCipherText,
1887 BYTE *pbPlainText,
1888 ULONG *pulPlainTextLen)
1889 {
1890 ULONG rv;
1891
1892 if (!skf_method) {
1893 SKFerr(SKF_F_SKF_EXTECCDECRYPT,
1894 SKF_R_SKF_METHOD_NOT_INITIALIZED);
1895 return SAR_NOTINITIALIZEERR;
1896 }
1897
1898 if (!skf_method->ExtECCDecrypt) {
1899 SKFerr(SKF_F_SKF_EXTECCDECRYPT,
1900 SKF_R_FUNCTION_NOT_SUPPORTED);
1901 return SAR_NOTSUPPORTYETERR;
1902 }
1903
1904 if ((rv = skf_method->ExtECCDecrypt(
1905 hDev,
1906 pECCPriKeyBlob,
1907 pCipherText,
1908 pbPlainText,
1909 pulPlainTextLen)) != SAR_OK) {
1910 SKFerr(SKF_F_SKF_EXTECCDECRYPT, skf_get_error_reason(rv));
1911 return rv;
1912 }
1913
1914 return SAR_OK;
1915 }
1916
SKF_ExtECCSign(DEVHANDLE hDev,ECCPRIVATEKEYBLOB * pECCPriKeyBlob,BYTE * pbData,ULONG ulDataLen,ECCSIGNATUREBLOB * pSignature)1917 ULONG DEVAPI SKF_ExtECCSign(
1918 DEVHANDLE hDev,
1919 ECCPRIVATEKEYBLOB *pECCPriKeyBlob,
1920 BYTE *pbData,
1921 ULONG ulDataLen,
1922 ECCSIGNATUREBLOB *pSignature)
1923 {
1924 ULONG rv;
1925
1926 if (!skf_method) {
1927 SKFerr(SKF_F_SKF_EXTECCSIGN,
1928 SKF_R_SKF_METHOD_NOT_INITIALIZED);
1929 return SAR_NOTINITIALIZEERR;
1930 }
1931
1932 if (!skf_method->ExtECCSign) {
1933 SKFerr(SKF_F_SKF_EXTECCSIGN,
1934 SKF_R_FUNCTION_NOT_SUPPORTED);
1935 return SAR_NOTSUPPORTYETERR;
1936 }
1937
1938 if ((rv = skf_method->ExtECCSign(
1939 hDev,
1940 pECCPriKeyBlob,
1941 pbData,
1942 ulDataLen,
1943 pSignature)) != SAR_OK) {
1944 SKFerr(SKF_F_SKF_EXTECCSIGN, skf_get_error_reason(rv));
1945 return rv;
1946 }
1947
1948 return SAR_OK;
1949 }
1950
SKF_ExtECCVerify(DEVHANDLE hDev,ECCPUBLICKEYBLOB * pECCPubKeyBlob,BYTE * pbData,ULONG ulDataLen,ECCSIGNATUREBLOB * pSignature)1951 ULONG DEVAPI SKF_ExtECCVerify(
1952 DEVHANDLE hDev,
1953 ECCPUBLICKEYBLOB *pECCPubKeyBlob,
1954 BYTE *pbData,
1955 ULONG ulDataLen,
1956 ECCSIGNATUREBLOB *pSignature)
1957 {
1958 ULONG rv;
1959
1960 if (!skf_method) {
1961 SKFerr(SKF_F_SKF_EXTECCVERIFY,
1962 SKF_R_SKF_METHOD_NOT_INITIALIZED);
1963 return SAR_NOTINITIALIZEERR;
1964 }
1965
1966 if (!skf_method->ExtECCVerify) {
1967 SKFerr(SKF_F_SKF_EXTECCVERIFY,
1968 SKF_R_FUNCTION_NOT_SUPPORTED);
1969 return SAR_NOTSUPPORTYETERR;
1970 }
1971
1972 if ((rv = skf_method->ExtECCVerify(
1973 hDev,
1974 pECCPubKeyBlob,
1975 pbData,
1976 ulDataLen,
1977 pSignature)) != SAR_OK) {
1978 SKFerr(SKF_F_SKF_EXTECCVERIFY, skf_get_error_reason(rv));
1979 return rv;
1980 }
1981
1982 return SAR_OK;
1983 }
1984
SKF_GenerateAgreementDataWithECC(HCONTAINER hContainer,ULONG ulAlgId,ECCPUBLICKEYBLOB * pTempECCPubKeyBlob,BYTE * pbID,ULONG ulIDLen,HANDLE * phAgreementHandle)1985 ULONG DEVAPI SKF_GenerateAgreementDataWithECC(
1986 HCONTAINER hContainer,
1987 ULONG ulAlgId,
1988 ECCPUBLICKEYBLOB *pTempECCPubKeyBlob,
1989 BYTE *pbID,
1990 ULONG ulIDLen,
1991 HANDLE *phAgreementHandle)
1992 {
1993 ULONG rv;
1994
1995 if (!skf_method) {
1996 SKFerr(SKF_F_SKF_GENERATEAGREEMENTDATAWITHECC,
1997 SKF_R_SKF_METHOD_NOT_INITIALIZED);
1998 return SAR_NOTINITIALIZEERR;
1999 }
2000
2001 if (!skf_method->GenerateAgreementDataWithECC) {
2002 SKFerr(SKF_F_SKF_GENERATEAGREEMENTDATAWITHECC,
2003 SKF_R_FUNCTION_NOT_SUPPORTED);
2004 return SAR_NOTSUPPORTYETERR;
2005 }
2006
2007 if (skf_vendor) {
2008 if (!(ulAlgId = skf_vendor->get_cipher_algor(ulAlgId))) {
2009 SKFerr(SKF_F_SKF_GENERATEAGREEMENTDATAWITHECC,
2010 SKF_R_NOT_SUPPORTED_CIPHER_ALGOR);
2011 return SAR_NOTSUPPORTYETERR;
2012 }
2013 }
2014
2015 if ((rv = skf_method->GenerateAgreementDataWithECC(
2016 hContainer,
2017 ulAlgId,
2018 pTempECCPubKeyBlob,
2019 pbID,
2020 ulIDLen,
2021 phAgreementHandle)) != SAR_OK) {
2022 SKFerr(SKF_F_SKF_GENERATEAGREEMENTDATAWITHECC, skf_get_error_reason(rv));
2023 return rv;
2024 }
2025
2026 return SAR_OK;
2027 }
2028
SKF_GenerateAgreementDataAndKeyWithECC(HANDLE hContainer,ULONG ulAlgId,ECCPUBLICKEYBLOB * pSponsorECCPubKeyBlob,ECCPUBLICKEYBLOB * pSponsorTempECCPubKeyBlob,ECCPUBLICKEYBLOB * pTempECCPubKeyBlob,BYTE * pbID,ULONG ulIDLen,BYTE * pbSponsorID,ULONG ulSponsorIDLen,HANDLE * phKeyHandle)2029 ULONG DEVAPI SKF_GenerateAgreementDataAndKeyWithECC(
2030 HANDLE hContainer,
2031 ULONG ulAlgId,
2032 ECCPUBLICKEYBLOB *pSponsorECCPubKeyBlob,
2033 ECCPUBLICKEYBLOB *pSponsorTempECCPubKeyBlob,
2034 ECCPUBLICKEYBLOB *pTempECCPubKeyBlob,
2035 BYTE *pbID,
2036 ULONG ulIDLen,
2037 BYTE *pbSponsorID,
2038 ULONG ulSponsorIDLen,
2039 HANDLE *phKeyHandle)
2040 {
2041 ULONG rv;
2042
2043 if (!skf_method) {
2044 SKFerr(SKF_F_SKF_GENERATEAGREEMENTDATAANDKEYWITHECC,
2045 SKF_R_SKF_METHOD_NOT_INITIALIZED);
2046 return SAR_NOTINITIALIZEERR;
2047 }
2048
2049 if (!skf_method->GenerateAgreementDataAndKeyWithECC) {
2050 SKFerr(SKF_F_SKF_GENERATEAGREEMENTDATAANDKEYWITHECC,
2051 SKF_R_FUNCTION_NOT_SUPPORTED);
2052 return SAR_NOTSUPPORTYETERR;
2053 }
2054
2055 if (skf_vendor) {
2056 if (!(ulAlgId = skf_vendor->get_cipher_algor(ulAlgId))) {
2057 SKFerr(SKF_F_SKF_GENERATEAGREEMENTDATAANDKEYWITHECC,
2058 SKF_R_NOT_SUPPORTED_CIPHER_ALGOR);
2059 return SAR_NOTSUPPORTYETERR;
2060 }
2061 }
2062
2063 if ((rv = skf_method->GenerateAgreementDataAndKeyWithECC(
2064 hContainer,
2065 ulAlgId,
2066 pSponsorECCPubKeyBlob,
2067 pSponsorTempECCPubKeyBlob,
2068 pTempECCPubKeyBlob,
2069 pbID,
2070 ulIDLen,
2071 pbSponsorID,
2072 ulSponsorIDLen,
2073 phKeyHandle)) != SAR_OK) {
2074 SKFerr(SKF_F_SKF_GENERATEAGREEMENTDATAANDKEYWITHECC, skf_get_error_reason(rv));
2075 return rv;
2076 }
2077
2078 return SAR_OK;
2079 }
2080
SKF_GenerateKeyWithECC(HANDLE hAgreementHandle,ECCPUBLICKEYBLOB * pECCPubKeyBlob,ECCPUBLICKEYBLOB * pTempECCPubKeyBlob,BYTE * pbID,ULONG ulIDLen,HANDLE * phKeyHandle)2081 ULONG DEVAPI SKF_GenerateKeyWithECC(
2082 HANDLE hAgreementHandle,
2083 ECCPUBLICKEYBLOB *pECCPubKeyBlob,
2084 ECCPUBLICKEYBLOB *pTempECCPubKeyBlob,
2085 BYTE *pbID,
2086 ULONG ulIDLen,
2087 HANDLE *phKeyHandle)
2088 {
2089 ULONG rv;
2090
2091 if (!skf_method) {
2092 SKFerr(SKF_F_SKF_GENERATEKEYWITHECC,
2093 SKF_R_SKF_METHOD_NOT_INITIALIZED);
2094 return SAR_NOTINITIALIZEERR;
2095 }
2096
2097 if (!skf_method->GenerateKeyWithECC) {
2098 SKFerr(SKF_F_SKF_GENERATEKEYWITHECC,
2099 SKF_R_FUNCTION_NOT_SUPPORTED);
2100 return SAR_NOTSUPPORTYETERR;
2101 }
2102
2103 if ((rv = skf_method->GenerateKeyWithECC(
2104 hAgreementHandle,
2105 pECCPubKeyBlob,
2106 pTempECCPubKeyBlob,
2107 pbID,
2108 ulIDLen,
2109 phKeyHandle)) != SAR_OK) {
2110 SKFerr(SKF_F_SKF_GENERATEKEYWITHECC, skf_get_error_reason(rv));
2111 return rv;
2112 }
2113
2114 return SAR_OK;
2115 }
2116
SKF_ImportSessionKey(HCONTAINER hContainer,ULONG ulAlgId,BYTE * pbWrapedData,ULONG ulWrapedLen,HANDLE * phKey)2117 ULONG DEVAPI SKF_ImportSessionKey(
2118 HCONTAINER hContainer,
2119 ULONG ulAlgId,
2120 BYTE *pbWrapedData,
2121 ULONG ulWrapedLen,
2122 HANDLE *phKey)
2123 {
2124 ULONG rv;
2125
2126 if (!skf_method) {
2127 SKFerr(SKF_F_SKF_IMPORTSESSIONKEY,
2128 SKF_R_SKF_METHOD_NOT_INITIALIZED);
2129 return SAR_NOTINITIALIZEERR;
2130 }
2131
2132 if (!skf_method->ImportSessionKey) {
2133 SKFerr(SKF_F_SKF_IMPORTSESSIONKEY,
2134 SKF_R_FUNCTION_NOT_SUPPORTED);
2135 return SAR_NOTSUPPORTYETERR;
2136 }
2137
2138 if (skf_vendor) {
2139 if (!(ulAlgId = skf_vendor->get_cipher_algor(ulAlgId))) {
2140 SKFerr(SKF_F_SKF_IMPORTSESSIONKEY,
2141 SKF_R_NOT_SUPPORTED_CIPHER_ALGOR);
2142 return SAR_NOTSUPPORTYETERR;
2143 }
2144 }
2145
2146 if ((rv = skf_method->ImportSessionKey(
2147 hContainer,
2148 ulAlgId,
2149 pbWrapedData,
2150 ulWrapedLen,
2151 phKey)) != SAR_OK) {
2152 SKFerr(SKF_F_SKF_IMPORTSESSIONKEY, skf_get_error_reason(rv));
2153 return rv;
2154 }
2155
2156 return SAR_OK;
2157 }
2158
SKF_SetSymmKey(DEVHANDLE hDev,BYTE * pbKey,ULONG ulAlgID,HANDLE * phKey)2159 ULONG DEVAPI SKF_SetSymmKey(
2160 DEVHANDLE hDev,
2161 BYTE *pbKey,
2162 ULONG ulAlgID,
2163 HANDLE *phKey)
2164 {
2165 ULONG rv;
2166
2167 if (!skf_method) {
2168 SKFerr(SKF_F_SKF_SETSYMMKEY,
2169 SKF_R_SKF_METHOD_NOT_INITIALIZED);
2170 return SAR_NOTINITIALIZEERR;
2171 }
2172
2173 if (!skf_method->SetSymmKey) {
2174 SKFerr(SKF_F_SKF_SETSYMMKEY,
2175 SKF_R_FUNCTION_NOT_SUPPORTED);
2176 return SAR_NOTSUPPORTYETERR;
2177 }
2178
2179 if (skf_vendor) {
2180 if (!(ulAlgID = skf_vendor->get_cipher_algor(ulAlgID))) {
2181 SKFerr(SKF_F_SKF_SETSYMMKEY,
2182 SKF_R_NOT_SUPPORTED_CIPHER_ALGOR);
2183 return SAR_NOTSUPPORTYETERR;
2184 }
2185 }
2186
2187 if ((rv = skf_method->SetSymmKey(
2188 hDev,
2189 pbKey,
2190 ulAlgID,
2191 phKey)) != SAR_OK) {
2192 SKFerr(SKF_F_SKF_SETSYMMKEY, skf_get_error_reason(rv));
2193 return rv;
2194 }
2195
2196 return SAR_OK;
2197 }
2198
SKF_EncryptInit(HANDLE hKey,BLOCKCIPHERPARAM EncryptParam)2199 ULONG DEVAPI SKF_EncryptInit(
2200 HANDLE hKey,
2201 BLOCKCIPHERPARAM EncryptParam)
2202 {
2203 ULONG rv;
2204
2205 if (!skf_method) {
2206 SKFerr(SKF_F_SKF_ENCRYPTINIT,
2207 SKF_R_SKF_METHOD_NOT_INITIALIZED);
2208 return SAR_NOTINITIALIZEERR;
2209 }
2210
2211 if (!skf_method->EncryptInit) {
2212 SKFerr(SKF_F_SKF_ENCRYPTINIT,
2213 SKF_R_FUNCTION_NOT_SUPPORTED);
2214 return SAR_NOTSUPPORTYETERR;
2215 }
2216
2217 if ((rv = skf_method->EncryptInit(
2218 hKey,
2219 EncryptParam)) != SAR_OK) {
2220 SKFerr(SKF_F_SKF_ENCRYPTINIT, skf_get_error_reason(rv));
2221 return rv;
2222 }
2223
2224 return SAR_OK;
2225 }
2226
SKF_Encrypt(HANDLE hKey,BYTE * pbData,ULONG ulDataLen,BYTE * pbEncryptedData,ULONG * pulEncryptedLen)2227 ULONG DEVAPI SKF_Encrypt(
2228 HANDLE hKey,
2229 BYTE *pbData,
2230 ULONG ulDataLen,
2231 BYTE *pbEncryptedData,
2232 ULONG *pulEncryptedLen)
2233 {
2234 ULONG rv;
2235
2236 if (!skf_method) {
2237 SKFerr(SKF_F_SKF_ENCRYPT,
2238 SKF_R_SKF_METHOD_NOT_INITIALIZED);
2239 return SAR_NOTINITIALIZEERR;
2240 }
2241
2242 if (!skf_method->Encrypt) {
2243 SKFerr(SKF_F_SKF_ENCRYPT,
2244 SKF_R_FUNCTION_NOT_SUPPORTED);
2245 return SAR_NOTSUPPORTYETERR;
2246 }
2247
2248 if ((rv = skf_method->Encrypt(
2249 hKey,
2250 pbData,
2251 ulDataLen,
2252 pbEncryptedData,
2253 pulEncryptedLen)) != SAR_OK) {
2254 SKFerr(SKF_F_SKF_ENCRYPT, skf_get_error_reason(rv));
2255 return rv;
2256 }
2257
2258 return SAR_OK;
2259 }
2260
SKF_EncryptUpdate(HANDLE hKey,BYTE * pbData,ULONG ulDataLen,BYTE * pbEncryptedData,ULONG * pulEncryptedLen)2261 ULONG DEVAPI SKF_EncryptUpdate(
2262 HANDLE hKey,
2263 BYTE *pbData,
2264 ULONG ulDataLen,
2265 BYTE *pbEncryptedData,
2266 ULONG *pulEncryptedLen)
2267 {
2268 ULONG rv;
2269
2270 if (!skf_method) {
2271 SKFerr(SKF_F_SKF_ENCRYPTUPDATE,
2272 SKF_R_SKF_METHOD_NOT_INITIALIZED);
2273 return SAR_NOTINITIALIZEERR;
2274 }
2275
2276 if (!skf_method->EncryptUpdate) {
2277 SKFerr(SKF_F_SKF_ENCRYPTUPDATE,
2278 SKF_R_FUNCTION_NOT_SUPPORTED);
2279 return SAR_NOTSUPPORTYETERR;
2280 }
2281
2282 if ((rv = skf_method->EncryptUpdate(
2283 hKey,
2284 pbData,
2285 ulDataLen,
2286 pbEncryptedData,
2287 pulEncryptedLen)) != SAR_OK) {
2288 SKFerr(SKF_F_SKF_ENCRYPTUPDATE, skf_get_error_reason(rv));
2289 return rv;
2290 }
2291
2292 return SAR_OK;
2293 }
2294
SKF_EncryptFinal(HANDLE hKey,BYTE * pbEncryptedData,ULONG * pulEncryptedDataLen)2295 ULONG DEVAPI SKF_EncryptFinal(
2296 HANDLE hKey,
2297 BYTE *pbEncryptedData,
2298 ULONG *pulEncryptedDataLen)
2299 {
2300 ULONG rv;
2301
2302 if (!skf_method) {
2303 SKFerr(SKF_F_SKF_ENCRYPTFINAL,
2304 SKF_R_SKF_METHOD_NOT_INITIALIZED);
2305 return SAR_NOTINITIALIZEERR;
2306 }
2307
2308 if (!skf_method->EncryptFinal) {
2309 SKFerr(SKF_F_SKF_ENCRYPTFINAL,
2310 SKF_R_FUNCTION_NOT_SUPPORTED);
2311 return SAR_NOTSUPPORTYETERR;
2312 }
2313
2314 if ((rv = skf_method->EncryptFinal(
2315 hKey,
2316 pbEncryptedData,
2317 pulEncryptedDataLen)) != SAR_OK) {
2318 SKFerr(SKF_F_SKF_ENCRYPTFINAL, skf_get_error_reason(rv));
2319 return rv;
2320 }
2321
2322 return SAR_OK;
2323 }
2324
SKF_DecryptInit(HANDLE hKey,BLOCKCIPHERPARAM DecryptParam)2325 ULONG DEVAPI SKF_DecryptInit(
2326 HANDLE hKey,
2327 BLOCKCIPHERPARAM DecryptParam)
2328 {
2329 ULONG rv;
2330
2331 if (!skf_method) {
2332 SKFerr(SKF_F_SKF_DECRYPTINIT,
2333 SKF_R_SKF_METHOD_NOT_INITIALIZED);
2334 return SAR_NOTINITIALIZEERR;
2335 }
2336
2337 if (!skf_method->DecryptInit) {
2338 SKFerr(SKF_F_SKF_DECRYPTINIT,
2339 SKF_R_FUNCTION_NOT_SUPPORTED);
2340 return SAR_NOTSUPPORTYETERR;
2341 }
2342
2343 if ((rv = skf_method->DecryptInit(
2344 hKey,
2345 DecryptParam)) != SAR_OK) {
2346 SKFerr(SKF_F_SKF_DECRYPTINIT, skf_get_error_reason(rv));
2347 return rv;
2348 }
2349
2350 return SAR_OK;
2351 }
2352
SKF_Decrypt(HANDLE hKey,BYTE * pbEncryptedData,ULONG ulEncryptedLen,BYTE * pbData,ULONG * pulDataLen)2353 ULONG DEVAPI SKF_Decrypt(
2354 HANDLE hKey,
2355 BYTE *pbEncryptedData,
2356 ULONG ulEncryptedLen,
2357 BYTE *pbData,
2358 ULONG *pulDataLen)
2359 {
2360 ULONG rv;
2361
2362 if (!skf_method) {
2363 SKFerr(SKF_F_SKF_DECRYPT,
2364 SKF_R_SKF_METHOD_NOT_INITIALIZED);
2365 return SAR_NOTINITIALIZEERR;
2366 }
2367
2368 if (!skf_method->Decrypt) {
2369 SKFerr(SKF_F_SKF_DECRYPT,
2370 SKF_R_FUNCTION_NOT_SUPPORTED);
2371 return SAR_NOTSUPPORTYETERR;
2372 }
2373
2374 if ((rv = skf_method->Decrypt(
2375 hKey,
2376 pbEncryptedData,
2377 ulEncryptedLen,
2378 pbData,
2379 pulDataLen)) != SAR_OK) {
2380 SKFerr(SKF_F_SKF_DECRYPT, skf_get_error_reason(rv));
2381 return rv;
2382 }
2383
2384 return SAR_OK;
2385 }
2386
SKF_DecryptUpdate(HANDLE hKey,BYTE * pbEncryptedData,ULONG ulEncryptedLen,BYTE * pbData,ULONG * pulDataLen)2387 ULONG DEVAPI SKF_DecryptUpdate(
2388 HANDLE hKey,
2389 BYTE *pbEncryptedData,
2390 ULONG ulEncryptedLen,
2391 BYTE *pbData,
2392 ULONG *pulDataLen)
2393 {
2394 ULONG rv;
2395
2396 if (!skf_method) {
2397 SKFerr(SKF_F_SKF_DECRYPTUPDATE,
2398 SKF_R_SKF_METHOD_NOT_INITIALIZED);
2399 return SAR_NOTINITIALIZEERR;
2400 }
2401
2402 if (!skf_method->DecryptUpdate) {
2403 SKFerr(SKF_F_SKF_DECRYPTUPDATE,
2404 SKF_R_FUNCTION_NOT_SUPPORTED);
2405 return SAR_NOTSUPPORTYETERR;
2406 }
2407
2408 if ((rv = skf_method->DecryptUpdate(
2409 hKey,
2410 pbEncryptedData,
2411 ulEncryptedLen,
2412 pbData,
2413 pulDataLen)) != SAR_OK) {
2414 SKFerr(SKF_F_SKF_DECRYPTUPDATE, skf_get_error_reason(rv));
2415 return rv;
2416 }
2417
2418 return SAR_OK;
2419 }
2420
SKF_DecryptFinal(HANDLE hKey,BYTE * pbDecryptedData,ULONG * pulDecryptedDataLen)2421 ULONG DEVAPI SKF_DecryptFinal(
2422 HANDLE hKey,
2423 BYTE *pbDecryptedData,
2424 ULONG *pulDecryptedDataLen)
2425 {
2426 ULONG rv;
2427
2428 if (!skf_method) {
2429 SKFerr(SKF_F_SKF_DECRYPTFINAL,
2430 SKF_R_SKF_METHOD_NOT_INITIALIZED);
2431 return SAR_NOTINITIALIZEERR;
2432 }
2433
2434 if (!skf_method->DecryptFinal) {
2435 SKFerr(SKF_F_SKF_DECRYPTFINAL,
2436 SKF_R_FUNCTION_NOT_SUPPORTED);
2437 return SAR_NOTSUPPORTYETERR;
2438 }
2439
2440 if ((rv = skf_method->DecryptFinal(
2441 hKey,
2442 pbDecryptedData,
2443 pulDecryptedDataLen)) != SAR_OK) {
2444 SKFerr(SKF_F_SKF_DECRYPTFINAL, skf_get_error_reason(rv));
2445 return rv;
2446 }
2447
2448 return SAR_OK;
2449 }
2450
SKF_DigestInit(DEVHANDLE hDev,ULONG ulAlgID,ECCPUBLICKEYBLOB * pPubKey,BYTE * pbID,ULONG ulIDLen,HANDLE * phHash)2451 ULONG DEVAPI SKF_DigestInit(
2452 DEVHANDLE hDev,
2453 ULONG ulAlgID,
2454 ECCPUBLICKEYBLOB *pPubKey,
2455 BYTE *pbID,
2456 ULONG ulIDLen,
2457 HANDLE *phHash)
2458 {
2459 ULONG rv;
2460
2461 if (!skf_method) {
2462 SKFerr(SKF_F_SKF_DIGESTINIT,
2463 SKF_R_SKF_METHOD_NOT_INITIALIZED);
2464 return SAR_NOTINITIALIZEERR;
2465 }
2466
2467 if (!skf_method->DigestInit) {
2468 SKFerr(SKF_F_SKF_DIGESTINIT,
2469 SKF_R_FUNCTION_NOT_SUPPORTED);
2470 return SAR_NOTSUPPORTYETERR;
2471 }
2472
2473 if (skf_vendor) {
2474 if (!(ulAlgID = skf_vendor->get_digest_algor(ulAlgID))) {
2475 SKFerr(SKF_F_SKF_DIGESTINIT,
2476 SKF_R_NOT_SUPPORTED_DIGEST_ALGOR);
2477 return SAR_NOTSUPPORTYETERR;
2478 }
2479 }
2480
2481 if ((rv = skf_method->DigestInit(
2482 hDev,
2483 ulAlgID,
2484 pPubKey,
2485 pbID,
2486 ulIDLen,
2487 phHash)) != SAR_OK) {
2488 SKFerr(SKF_F_SKF_DIGESTINIT, skf_get_error_reason(rv));
2489 return rv;
2490 }
2491
2492 return SAR_OK;
2493 }
2494
SKF_Digest(HANDLE hHash,BYTE * pbData,ULONG ulDataLen,BYTE * pbHashData,ULONG * pulHashLen)2495 ULONG DEVAPI SKF_Digest(
2496 HANDLE hHash,
2497 BYTE *pbData,
2498 ULONG ulDataLen,
2499 BYTE *pbHashData,
2500 ULONG *pulHashLen)
2501 {
2502 ULONG rv;
2503
2504 if (!skf_method) {
2505 SKFerr(SKF_F_SKF_DIGEST,
2506 SKF_R_SKF_METHOD_NOT_INITIALIZED);
2507 return SAR_NOTINITIALIZEERR;
2508 }
2509
2510 if (!skf_method->Digest) {
2511 SKFerr(SKF_F_SKF_DIGEST,
2512 SKF_R_FUNCTION_NOT_SUPPORTED);
2513 return SAR_NOTSUPPORTYETERR;
2514 }
2515
2516 if ((rv = skf_method->Digest(
2517 hHash,
2518 pbData,
2519 ulDataLen,
2520 pbHashData,
2521 pulHashLen)) != SAR_OK) {
2522 SKFerr(SKF_F_SKF_DIGEST, skf_get_error_reason(rv));
2523 return rv;
2524 }
2525
2526 return SAR_OK;
2527 }
2528
SKF_DigestUpdate(HANDLE hHash,BYTE * pbData,ULONG ulDataLen)2529 ULONG DEVAPI SKF_DigestUpdate(
2530 HANDLE hHash,
2531 BYTE *pbData,
2532 ULONG ulDataLen)
2533 {
2534 ULONG rv;
2535
2536 if (!skf_method) {
2537 SKFerr(SKF_F_SKF_DIGESTUPDATE,
2538 SKF_R_SKF_METHOD_NOT_INITIALIZED);
2539 return SAR_NOTINITIALIZEERR;
2540 }
2541
2542 if (!skf_method->DigestUpdate) {
2543 SKFerr(SKF_F_SKF_DIGESTUPDATE,
2544 SKF_R_FUNCTION_NOT_SUPPORTED);
2545 return SAR_NOTSUPPORTYETERR;
2546 }
2547
2548 if ((rv = skf_method->DigestUpdate(
2549 hHash,
2550 pbData,
2551 ulDataLen)) != SAR_OK) {
2552 SKFerr(SKF_F_SKF_DIGESTUPDATE, skf_get_error_reason(rv));
2553 return rv;
2554 }
2555
2556 return SAR_OK;
2557 }
2558
SKF_DigestFinal(HANDLE hHash,BYTE * pHashData,ULONG * pulHashLen)2559 ULONG DEVAPI SKF_DigestFinal(
2560 HANDLE hHash,
2561 BYTE *pHashData,
2562 ULONG *pulHashLen)
2563 {
2564 ULONG rv;
2565
2566 if (!skf_method) {
2567 SKFerr(SKF_F_SKF_DIGESTFINAL,
2568 SKF_R_SKF_METHOD_NOT_INITIALIZED);
2569 return SAR_NOTINITIALIZEERR;
2570 }
2571
2572 if (!skf_method->DigestFinal) {
2573 SKFerr(SKF_F_SKF_DIGESTFINAL,
2574 SKF_R_FUNCTION_NOT_SUPPORTED);
2575 return SAR_NOTSUPPORTYETERR;
2576 }
2577
2578 if ((rv = skf_method->DigestFinal(
2579 hHash,
2580 pHashData,
2581 pulHashLen)) != SAR_OK) {
2582 SKFerr(SKF_F_SKF_DIGESTFINAL, skf_get_error_reason(rv));
2583 return rv;
2584 }
2585
2586 return SAR_OK;
2587 }
2588
SKF_MacInit(HANDLE hKey,BLOCKCIPHERPARAM * pMacParam,HANDLE * phMac)2589 ULONG DEVAPI SKF_MacInit(
2590 HANDLE hKey,
2591 BLOCKCIPHERPARAM *pMacParam,
2592 HANDLE *phMac)
2593 {
2594 ULONG rv;
2595
2596 if (!skf_method) {
2597 SKFerr(SKF_F_SKF_MACINIT,
2598 SKF_R_SKF_METHOD_NOT_INITIALIZED);
2599 return SAR_NOTINITIALIZEERR;
2600 }
2601
2602 if (!skf_method->MacInit) {
2603 SKFerr(SKF_F_SKF_MACINIT,
2604 SKF_R_FUNCTION_NOT_SUPPORTED);
2605 return SAR_NOTSUPPORTYETERR;
2606 }
2607
2608 if ((rv = skf_method->MacInit(
2609 hKey,
2610 pMacParam,
2611 phMac)) != SAR_OK) {
2612 SKFerr(SKF_F_SKF_MACINIT, skf_get_error_reason(rv));
2613 return rv;
2614 }
2615
2616 return SAR_OK;
2617 }
2618
SKF_Mac(HANDLE hMac,BYTE * pbData,ULONG ulDataLen,BYTE * pbMacData,ULONG * pulMacLen)2619 ULONG DEVAPI SKF_Mac(
2620 HANDLE hMac,
2621 BYTE *pbData,
2622 ULONG ulDataLen,
2623 BYTE *pbMacData,
2624 ULONG *pulMacLen)
2625 {
2626 ULONG rv;
2627
2628 if (!skf_method) {
2629 SKFerr(SKF_F_SKF_MAC,
2630 SKF_R_SKF_METHOD_NOT_INITIALIZED);
2631 return SAR_NOTINITIALIZEERR;
2632 }
2633
2634 if (!skf_method->Mac) {
2635 SKFerr(SKF_F_SKF_MAC,
2636 SKF_R_FUNCTION_NOT_SUPPORTED);
2637 return SAR_NOTSUPPORTYETERR;
2638 }
2639
2640 if ((rv = skf_method->Mac(
2641 hMac,
2642 pbData,
2643 ulDataLen,
2644 pbMacData,
2645 pulMacLen)) != SAR_OK) {
2646 SKFerr(SKF_F_SKF_MAC, skf_get_error_reason(rv));
2647 return rv;
2648 }
2649
2650 return SAR_OK;
2651 }
2652
SKF_MacUpdate(HANDLE hMac,BYTE * pbData,ULONG ulDataLen)2653 ULONG DEVAPI SKF_MacUpdate(
2654 HANDLE hMac,
2655 BYTE *pbData,
2656 ULONG ulDataLen)
2657 {
2658 ULONG rv;
2659
2660 if (!skf_method) {
2661 SKFerr(SKF_F_SKF_MACUPDATE,
2662 SKF_R_SKF_METHOD_NOT_INITIALIZED);
2663 return SAR_NOTINITIALIZEERR;
2664 }
2665
2666 if (!skf_method->MacUpdate) {
2667 SKFerr(SKF_F_SKF_MACUPDATE,
2668 SKF_R_FUNCTION_NOT_SUPPORTED);
2669 return SAR_NOTSUPPORTYETERR;
2670 }
2671
2672 if ((rv = skf_method->MacUpdate(
2673 hMac,
2674 pbData,
2675 ulDataLen)) != SAR_OK) {
2676 SKFerr(SKF_F_SKF_MACUPDATE, skf_get_error_reason(rv));
2677 return rv;
2678 }
2679
2680 return SAR_OK;
2681 }
2682
SKF_MacFinal(HANDLE hMac,BYTE * pbMacData,ULONG * pulMacDataLen)2683 ULONG DEVAPI SKF_MacFinal(
2684 HANDLE hMac,
2685 BYTE *pbMacData,
2686 ULONG *pulMacDataLen)
2687 {
2688 ULONG rv;
2689
2690 if (!skf_method) {
2691 SKFerr(SKF_F_SKF_MACFINAL,
2692 SKF_R_SKF_METHOD_NOT_INITIALIZED);
2693 return SAR_NOTINITIALIZEERR;
2694 }
2695
2696 if (!skf_method->MacFinal) {
2697 SKFerr(SKF_F_SKF_MACFINAL,
2698 SKF_R_FUNCTION_NOT_SUPPORTED);
2699 return SAR_NOTSUPPORTYETERR;
2700 }
2701
2702 if ((rv = skf_method->MacFinal(
2703 hMac,
2704 pbMacData,
2705 pulMacDataLen)) != SAR_OK) {
2706 SKFerr(SKF_F_SKF_MACFINAL, skf_get_error_reason(rv));
2707 return rv;
2708 }
2709
2710 return SAR_OK;
2711 }
2712
SKF_CloseHandle(HANDLE hHandle)2713 ULONG DEVAPI SKF_CloseHandle(
2714 HANDLE hHandle)
2715 {
2716 ULONG rv;
2717
2718 if (!skf_method) {
2719 SKFerr(SKF_F_SKF_CLOSEHANDLE,
2720 SKF_R_SKF_METHOD_NOT_INITIALIZED);
2721 return SAR_NOTINITIALIZEERR;
2722 }
2723
2724 if (!skf_method->CloseHandle) {
2725 SKFerr(SKF_F_SKF_CLOSEHANDLE,
2726 SKF_R_FUNCTION_NOT_SUPPORTED);
2727 return SAR_NOTSUPPORTYETERR;
2728 }
2729
2730 if ((rv = skf_method->CloseHandle(
2731 hHandle)) != SAR_OK) {
2732 SKFerr(SKF_F_SKF_CLOSEHANDLE, skf_get_error_reason(rv));
2733 return rv;
2734 }
2735
2736 return SAR_OK;
2737 }
2738
2739