• 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 /* This header file is from the official specification with minor
11  * modification.
12  */
13 
14 #ifndef SKFUTIL_SKF_H
15 #define SKFUTIL_SKF_H
16 
17 
18 #include "../sgd.h"
19 
20 
21 #ifdef __cplusplus
22 extern "C" {
23 #endif
24 
25 #pragma pack(1)
26 typedef struct Struct_Version{
27 	BYTE major;
28 	BYTE minor;
29 } VERSION;
30 
31 typedef struct Struct_DEVINFO {
32 	VERSION	Version;
33 	CHAR	Manufacturer[64];
34 	CHAR	Issuer[64];
35 	CHAR	Label[32];
36 	CHAR	SerialNumber[32];
37 	VERSION	HWVersion;
38 	VERSION	FirmwareVersion;
39 	ULONG	AlgSymCap;
40 	ULONG	AlgAsymCap;
41 	ULONG	AlgHashCap;
42 	ULONG	DevAuthAlgId;
43 	ULONG	TotalSpace;
44 	ULONG	FreeSpace;
45 	ULONG	MaxECCBufferSize;
46 	ULONG	MaxBufferSize;
47 	BYTE  	Reserved[64];
48 } DEVINFO, *PDEVINFO;
49 
50 typedef struct Struct_RSAPUBLICKEYBLOB {
51 	ULONG	AlgID;
52 	ULONG	BitLen;
53 	BYTE	Modulus[MAX_RSA_MODULUS_LEN];
54 	BYTE	PublicExponent[MAX_RSA_EXPONENT_LEN];
55 } RSAPUBLICKEYBLOB, *PRSAPUBLICKEYBLOB;
56 
57 typedef struct Struct_RSAPRIVATEKEYBLOB {
58 	ULONG	AlgID;
59 	ULONG	BitLen;
60 	BYTE	Modulus[MAX_RSA_MODULUS_LEN];
61 	BYTE	PublicExponent[MAX_RSA_EXPONENT_LEN];
62 	BYTE	PrivateExponent[MAX_RSA_MODULUS_LEN];
63 	BYTE	Prime1[MAX_RSA_MODULUS_LEN/2];
64 	BYTE	Prime2[MAX_RSA_MODULUS_LEN/2];
65 	BYTE	Prime1Exponent[MAX_RSA_MODULUS_LEN/2];
66 	BYTE	Prime2Exponent[MAX_RSA_MODULUS_LEN/2];
67 	BYTE	Coefficient[MAX_RSA_MODULUS_LEN/2];
68 } RSAPRIVATEKEYBLOB, *PRSAPRIVATEKEYBLOB;
69 
70 typedef struct Struct_ECCPUBLICKEYBLOB {
71 	ULONG	BitLen;
72 	BYTE	XCoordinate[ECC_MAX_XCOORDINATE_BITS_LEN/8];
73 	BYTE	YCoordinate[ECC_MAX_YCOORDINATE_BITS_LEN/8];
74 } ECCPUBLICKEYBLOB, *PECCPUBLICKEYBLOB;
75 
76 typedef struct Struct_ECCPRIVATEKEYBLOB {
77 	ULONG	BitLen;
78 	BYTE	PrivateKey[ECC_MAX_MODULUS_BITS_LEN/8];
79 } ECCPRIVATEKEYBLOB, *PECCPRIVATEKEYBLOB;
80 
81 typedef struct Struct_ECCCIPHERBLOB {
82 	BYTE	XCoordinate[ECC_MAX_XCOORDINATE_BITS_LEN/8];
83 	BYTE	YCoordinate[ECC_MAX_XCOORDINATE_BITS_LEN/8];
84 	BYTE	HASH[32];
85 	ULONG	CipherLen;
86 	BYTE	Cipher[1];
87 } ECCCIPHERBLOB, *PECCCIPHERBLOB;
88 
89 typedef struct Struct_ECCSIGNATUREBLOB {
90 	BYTE	r[ECC_MAX_XCOORDINATE_BITS_LEN/8];
91 	BYTE	s[ECC_MAX_XCOORDINATE_BITS_LEN/8];
92 } ECCSIGNATUREBLOB, *PECCSIGNATUREBLOB;
93 
94 typedef struct Struct_BLOCKCIPHERPARAM {
95 	BYTE	IV[MAX_IV_LEN];
96 	ULONG	IVLen;
97 	ULONG	PaddingType;
98 	ULONG	FeedBitLen;
99 } BLOCKCIPHERPARAM, *PBLOCKCIPHERPARAM;
100 
101 typedef struct SKF_ENVELOPEDKEYBLOB {
102 	ULONG	Version;
103 	ULONG	ulSymmAlgID;
104 	ULONG	ulBits;
105 	BYTE	cbEncryptedPriKey[64];
106 	ECCPUBLICKEYBLOB	PubKey;
107 	ECCCIPHERBLOB		ECCCipherBlob;
108 } ENVELOPEDKEYBLOB, *PENVELOPEDKEYBLOB;
109 
110 typedef struct Struct_FILEATTRIBUTE {
111 	CHAR	FileName[MAX_FILE_NAME_SIZE];
112 	ULONG	FileSize;
113 	ULONG	ReadRights;
114 	ULONG	WriteRights;
115 } FILEATTRIBUTE, *PFILEATTRIBUTE;
116 #pragma pack()
117 
118 /* 7.1.2 */
119 ULONG DEVAPI SKF_WaitForDevEvent(
120 	LPSTR szDevName,
121 	ULONG *pulDevNameLen,
122 	ULONG *pulEvent);
123 
124 /* 7.1.3 */
125 ULONG DEVAPI SKF_CancelWaitForDevEvent(
126 	void);
127 
128 /* 7.1.4 */
129 ULONG DEVAPI SKF_EnumDev(
130 	BOOL bPresent,
131 	LPSTR szNameList,
132 	ULONG *pulSize);
133 
134 /* 7.1.5 */
135 ULONG DEVAPI SKF_ConnectDev(
136 	LPSTR szName,
137 	DEVHANDLE *phDev);
138 
139 /* 7.1.6 */
140 ULONG DEVAPI SKF_DisConnectDev(
141 	DEVHANDLE hDev);
142 
143 /* 7.1.7 */
144 ULONG DEVAPI SKF_GetDevState(
145 	LPSTR szDevName,
146 	ULONG *pulDevState);
147 
148 /* 7.1.8 */
149 ULONG DEVAPI SKF_SetLabel(
150 	DEVHANDLE hDev,
151 	LPSTR szLabel);
152 
153 /* 7.1.9 */
154 ULONG DEVAPI SKF_GetDevInfo(
155 	DEVHANDLE hDev,
156 	DEVINFO *pDevInfo);
157 
158 /* 7.1.10 */
159 ULONG DEVAPI SKF_LockDev(
160 	DEVHANDLE hDev,
161 	ULONG ulTimeOut);
162 
163 /* 7.1.11 */
164 ULONG DEVAPI SKF_UnlockDev(
165 	DEVHANDLE hDev);
166 
167 /* 7.1.12 */
168 ULONG DEVAPI SKF_Transmit(
169 	DEVHANDLE hDev,
170 	BYTE *pbCommand,
171 	ULONG ulCommandLen,
172 	BYTE *pbData,
173 	ULONG *pulDataLen);
174 
175 /* 7.2.2 */
176 ULONG DEVAPI SKF_ChangeDevAuthKey(
177 	DEVHANDLE hDev,
178 	BYTE *pbKeyValue,
179 	ULONG ulKeyLen);
180 
181 /* 7.2.3 */
182 ULONG DEVAPI SKF_DevAuth(
183 	DEVHANDLE hDev,
184 	BYTE *pbAuthData,
185 	ULONG ulLen);
186 
187 /* 7.2.4 */
188 ULONG DEVAPI SKF_ChangePIN(
189 	HAPPLICATION hApplication,
190 	ULONG ulPINType,
191 	LPSTR szOldPin,
192 	LPSTR szNewPin,
193 	ULONG *pulRetryCount);
194 
195 /* 7.2.5 */
196 LONG DEVAPI SKF_GetPINInfo(
197 	HAPPLICATION hApplication,
198 	ULONG ulPINType,
199 	ULONG *pulMaxRetryCount,
200 	ULONG *pulRemainRetryCount,
201 	BOOL *pbDefaultPin);
202 
203 /* 7.2.6 */
204 ULONG DEVAPI SKF_VerifyPIN(
205 	HAPPLICATION hApplication,
206 	ULONG ulPINType,
207 	LPSTR szPIN,
208 	ULONG *pulRetryCount);
209 
210 /* 7.2.7 */
211 ULONG DEVAPI SKF_UnblockPIN(
212 	HAPPLICATION hApplication,
213 	LPSTR szAdminPIN,
214 	LPSTR szNewUserPIN,
215 	ULONG *pulRetryCount);
216 
217 /* 7.2.8 */
218 ULONG DEVAPI SKF_ClearSecureState(
219 	HAPPLICATION hApplication);
220 
221 /* 7.3.2 */
222 ULONG DEVAPI SKF_CreateApplication(
223 	DEVHANDLE hDev,
224 	LPSTR szAppName,
225 	LPSTR szAdminPin,
226 	DWORD dwAdminPinRetryCount,
227 	LPSTR szUserPin,
228 	DWORD dwUserPinRetryCount,
229 	DWORD dwCreateFileRights,
230 	HAPPLICATION *phApplication);
231 
232 /* 7.3.3 */
233 ULONG DEVAPI SKF_EnumApplication(
234 	DEVHANDLE hDev,
235 	LPSTR szAppName,
236 	ULONG *pulSize);
237 
238 /* 7.3.4 */
239 ULONG DEVAPI SKF_DeleteApplication(
240 	DEVHANDLE hDev,
241 	LPSTR szAppName);
242 
243 /* 7.3.5 */
244 ULONG DEVAPI SKF_OpenApplication(
245 	DEVHANDLE hDev,
246 	LPSTR szAppName,
247 	HAPPLICATION *phApplication);
248 
249 /* 7.3.6 */
250 ULONG DEVAPI SKF_CloseApplication(
251 	HAPPLICATION hApplication);
252 
253 /* 7.4.2 */
254 ULONG DEVAPI SKF_CreateFile(
255 	HAPPLICATION hApplication,
256 	LPSTR szFileName,
257 	ULONG ulFileSize,
258 	ULONG ulReadRights,
259 	ULONG ulWriteRights);
260 
261 /* 7.4.3 */
262 ULONG DEVAPI SKF_DeleteFile(
263 	HAPPLICATION hApplication,
264 	LPSTR szFileName);
265 
266 /* 7.4.4 */
267 ULONG DEVAPI SKF_EnumFiles(
268 	HAPPLICATION hApplication,
269 	LPSTR szFileList,
270 	ULONG *pulSize);
271 
272 /* 7.4.5 */
273 ULONG DEVAPI SKF_GetFileInfo(
274 	HAPPLICATION hApplication,
275 	LPSTR szFileName,
276 	FILEATTRIBUTE *pFileInfo);
277 
278 /* 7.4.6 */
279 ULONG DEVAPI SKF_ReadFile(
280 	HAPPLICATION hApplication,
281 	LPSTR szFileName,
282 	ULONG ulOffset,
283 	ULONG ulSize,
284 	BYTE *pbOutData,
285 	ULONG *pulOutLen);
286 
287 /* 7.4.7 */
288 ULONG DEVAPI SKF_WriteFile(
289 	HAPPLICATION hApplication,
290 	LPSTR szFileName,
291 	ULONG ulOffset,
292 	BYTE *pbData,
293 	ULONG ulSize);
294 
295 /* 7.5.2 */
296 ULONG DEVAPI SKF_CreateContainer(
297 	HAPPLICATION hApplication,
298 	LPSTR szContainerName,
299 	HCONTAINER *phContainer);
300 
301 /* 7.5.3 */
302 ULONG DEVAPI SKF_DeleteContainer(
303 	HAPPLICATION hApplication,
304 	LPSTR szContainerName);
305 
306 /* 7.5.4 */
307 ULONG DEVAPI SKF_OpenContainer(
308 	HAPPLICATION hApplication,
309 	LPSTR szContainerName,
310 	HCONTAINER *phContainer);
311 
312 /* 7.5.5 */
313 ULONG DEVAPI SKF_CloseContainer(
314 	HCONTAINER hContainer);
315 
316 /* 7.5.6 */
317 ULONG DEVAPI SKF_EnumContainer(
318 	HAPPLICATION hApplication,
319 	LPSTR szContainerName,
320 	ULONG *pulSize);
321 
322 /* 7.5.7 */
323 ULONG DEVAPI SKF_GetContainerType(
324 	HCONTAINER hContainer,
325 	ULONG *pulContainerType);
326 
327 /* 7.5.8 */
328 ULONG DEVAPI SKF_ImportCertificate(
329 	HCONTAINER hContainer,
330 	BOOL bExportSignKey,
331 	BYTE *pbCert,
332 	ULONG ulCertLen);
333 
334 /* 7.5.9 */
335 ULONG DEVAPI SKF_ExportCertificate(
336 	HCONTAINER hContainer,
337 	BOOL bSignFlag,
338 	BYTE *pbCert,
339 	ULONG *pulCertLen);
340 
341 /* 7.6.2 */
342 ULONG DEVAPI SKF_GenRandom(
343 	DEVHANDLE hDev,
344 	BYTE *pbRandom,
345 	ULONG ulRandomLen);
346 
347 /* 7.6.3 */
348 ULONG DEVAPI SKF_GenExtRSAKey(
349 	DEVHANDLE hDev,
350 	ULONG ulBitsLen,
351 	RSAPRIVATEKEYBLOB *pBlob);
352 
353 /* 7.6.4 */
354 ULONG DEVAPI SKF_GenRSAKeyPair(
355 	HCONTAINER hContainer,
356 	ULONG ulBitsLen,
357 	RSAPUBLICKEYBLOB *pBlob);
358 
359 /* 7.6.5 */
360 ULONG DEVAPI SKF_ImportRSAKeyPair(
361 	HCONTAINER hContainer,
362 	ULONG ulSymAlgId,
363 	BYTE *pbWrappedKey,
364 	ULONG ulWrappedKeyLen,
365 	BYTE *pbEncryptedData,
366 	ULONG ulEncryptedDataLen);
367 
368 /* 7.6.6 */
369 ULONG DEVAPI SKF_RSASignData(
370 	HCONTAINER hContainer,
371 	BYTE *pbData,
372 	ULONG ulDataLen,
373 	BYTE *pbSignature,
374 	ULONG *pulSignLen);
375 
376 /* 7.6.7 */
377 ULONG DEVAPI SKF_RSAVerify(
378 	DEVHANDLE hDev,
379 	RSAPUBLICKEYBLOB *pRSAPubKeyBlob,
380 	BYTE *pbData,
381 	ULONG ulDataLen,
382 	BYTE *pbSignature,
383 	ULONG ulSignLen);
384 
385 /* 7.6.8 */
386 ULONG DEVAPI SKF_RSAExportSessionKey(
387 	HCONTAINER hContainer,
388 	ULONG ulAlgId,
389 	RSAPUBLICKEYBLOB *pPubKey,
390 	BYTE *pbData,
391 	ULONG *pulDataLen,
392 	HANDLE *phSessionKey);
393 
394 /* 7.6.9 */
395 ULONG DEVAPI SKF_ExtRSAPubKeyOperation(
396 	DEVHANDLE hDev,
397 	RSAPUBLICKEYBLOB *pRSAPubKeyBlob,
398 	BYTE *pbInput,
399 	ULONG ulInputLen,
400 	BYTE *pbOutput,
401 	ULONG *pulOutputLen);
402 
403 /* 7.6.10 */
404 ULONG DEVAPI SKF_ExtRSAPriKeyOperation(
405 	DEVHANDLE hDev,
406 	RSAPRIVATEKEYBLOB *pRSAPriKeyBlob,
407 	BYTE *pbInput,
408 	ULONG ulInputLen,
409 	BYTE *pbOutput,
410 	ULONG *pulOutputLen);
411 
412 /* 7.6.11 */
413 ULONG DEVAPI SKF_GenECCKeyPair(
414 	HCONTAINER hContainer,
415 	ULONG ulAlgId,
416 	ECCPUBLICKEYBLOB *pBlob);
417 
418 /* 7.6.12 */
419 ULONG DEVAPI SKF_ImportECCKeyPair(
420 	HCONTAINER hContainer,
421 	ENVELOPEDKEYBLOB *pEnvelopedKeyBlob);
422 
423 /* 7.6.13 */
424 ULONG DEVAPI SKF_ECCSignData(
425 	HCONTAINER hContainer,
426 	BYTE *pbDigest,
427 	ULONG ulDigestLen,
428 	ECCSIGNATUREBLOB *pSignature);
429 
430 #ifdef SKF_HAS_ECCDECRYPT
431 ULONG DEVAPI SKF_ECCDecrypt(
432 	HCONTAINER hContainer,
433 	ECCCIPHERBLOB *pCipherBlob,
434 	BYTE *pbPlainText,
435 	ULONG *pulPlainTextLen);
436 #endif
437 
438 /* 7.6.14 */
439 ULONG DEVAPI SKF_ECCVerify(
440 	DEVHANDLE hDev,
441 	ECCPUBLICKEYBLOB *pECCPubKeyBlob,
442 	BYTE *pbData,
443 	ULONG ulDataLen,
444 	ECCSIGNATUREBLOB *pSignature);
445 
446 /* 7.6.15 */
447 ULONG DEVAPI SKF_ECCExportSessionKey(
448 	HCONTAINER hContainer,
449 	ULONG ulAlgId,
450 	ECCPUBLICKEYBLOB *pPubKey,
451 	ECCCIPHERBLOB *pData,
452 	HANDLE *phSessionKey);
453 
454 /* 7.6.16 */
455 ULONG DEVAPI SKF_ExtECCEncrypt(
456 	DEVHANDLE hDev,
457 	ECCPUBLICKEYBLOB *pECCPubKeyBlob,
458 	BYTE *pbPlainText,
459 	ULONG ulPlainTextLen,
460 	ECCCIPHERBLOB *pCipherText);
461 
462 /* 7.6.17 */
463 ULONG DEVAPI SKF_ExtECCDecrypt(
464 	DEVHANDLE hDev,
465 	ECCPRIVATEKEYBLOB *pECCPriKeyBlob,
466 	ECCCIPHERBLOB *pCipherText,
467 	BYTE *pbPlainText,
468 	ULONG *pulPlainTextLen);
469 
470 /* 7.6.18 */
471 ULONG DEVAPI SKF_ExtECCSign(
472 	DEVHANDLE hDev,
473 	ECCPRIVATEKEYBLOB *pECCPriKeyBlob,
474 	BYTE *pbData,
475 	ULONG ulDataLen,
476 	ECCSIGNATUREBLOB *pSignature);
477 
478 /* 7.6.19 */
479 ULONG DEVAPI SKF_ExtECCVerify(
480 	DEVHANDLE hDev,
481 	ECCPUBLICKEYBLOB *pECCPubKeyBlob,
482 	BYTE *pbData,
483 	ULONG ulDataLen,
484 	ECCSIGNATUREBLOB *pSignature);
485 
486 /* 7.6.20 */
487 ULONG DEVAPI SKF_GenerateAgreementDataWithECC(
488 	HCONTAINER hContainer,
489 	ULONG ulAlgId,
490 	ECCPUBLICKEYBLOB *pTempECCPubKeyBlob,
491 	BYTE *pbID,
492 	ULONG ulIDLen,
493 	HANDLE *phAgreementHandle);
494 
495 /* 7.6.21 */
496 ULONG DEVAPI SKF_GenerateAgreementDataAndKeyWithECC(
497 	HANDLE hContainer,
498 	ULONG ulAlgId,
499 	ECCPUBLICKEYBLOB *pSponsorECCPubKeyBlob,
500 	ECCPUBLICKEYBLOB *pSponsorTempECCPubKeyBlob,
501 	ECCPUBLICKEYBLOB *pTempECCPubKeyBlob,
502 	BYTE *pbID,
503 	ULONG ulIDLen,
504 	BYTE *pbSponsorID,
505 	ULONG ulSponsorIDLen,
506 	HANDLE *phKeyHandle);
507 
508 /* 7.6.22 */
509 ULONG DEVAPI SKF_GenerateKeyWithECC(
510 	HANDLE hAgreementHandle,
511 	ECCPUBLICKEYBLOB *pECCPubKeyBlob,
512 	ECCPUBLICKEYBLOB *pTempECCPubKeyBlob,
513 	BYTE *pbID,
514 	ULONG ulIDLen,
515 	HANDLE *phKeyHandle);
516 
517 /* 7.6.23 */
518 ULONG DEVAPI SKF_ExportPublicKey(
519 	HCONTAINER hContainer,
520 	BOOL bSignFlag,
521 	BYTE *pbBlob,
522 	ULONG *pulBlobLen);
523 
524 /* 7.6.24 */
525 ULONG DEVAPI SKF_ImportSessionKey(
526 	HCONTAINER hContainer,
527 	ULONG ulAlgId,
528 	BYTE *pbWrapedData,
529 	ULONG ulWrapedLen,
530 	HANDLE *phKey);
531 
532 /* 7.6.25 */
533 ULONG DEVAPI SKF_SetSymmKey(
534 	DEVHANDLE hDev,
535 	BYTE *pbKey,
536 	ULONG ulAlgID,
537 	HANDLE *phKey);
538 
539 /* 7.6.26 */
540 ULONG DEVAPI SKF_EncryptInit(
541 	HANDLE hKey,
542 	BLOCKCIPHERPARAM EncryptParam);
543 
544 /* 7.6.27 */
545 ULONG DEVAPI SKF_Encrypt(
546 	HANDLE hKey,
547 	BYTE *pbData,
548 	ULONG ulDataLen,
549 	BYTE *pbEncryptedData,
550 	ULONG *pulEncryptedLen);
551 
552 /* 7.6.28 */
553 ULONG DEVAPI SKF_EncryptUpdate(
554 	HANDLE hKey,
555 	BYTE *pbData,
556 	ULONG ulDataLen,
557 	BYTE *pbEncryptedData,
558 	ULONG *pulEncryptedLen);
559 
560 /* 7.6.29 */
561 ULONG DEVAPI SKF_EncryptFinal(
562 	HANDLE hKey,
563 	BYTE *pbEncryptedData,
564 	ULONG *pulEncryptedDataLen);
565 
566 /* 7.6.30 */
567 ULONG DEVAPI SKF_DecryptInit(
568 	HANDLE hKey,
569 	BLOCKCIPHERPARAM DecryptParam);
570 
571 /* 7.6.31 */
572 ULONG DEVAPI SKF_Decrypt(
573 	HANDLE hKey,
574 	BYTE *pbEncryptedData,
575 	ULONG ulEncryptedLen,
576 	BYTE *pbData,
577 	ULONG *pulDataLen);
578 
579 /* 7.6.32 */
580 ULONG DEVAPI SKF_DecryptUpdate(
581 	HANDLE hKey,
582 	BYTE *pbEncryptedData,
583 	ULONG ulEncryptedLen,
584 	BYTE *pbData,
585 	ULONG *pulDataLen);
586 
587 /* 7.6.33 */
588 ULONG DEVAPI SKF_DecryptFinal(
589 	HANDLE hKey,
590 	BYTE *pbDecryptedData,
591 	ULONG *pulDecryptedDataLen);
592 
593 /* 7.6.34 */
594 ULONG DEVAPI SKF_DigestInit(
595 	DEVHANDLE hDev,
596 	ULONG ulAlgID,
597 	ECCPUBLICKEYBLOB *pPubKey,
598 	BYTE *pbID,
599 	ULONG ulIDLen,
600 	HANDLE *phHash);
601 
602 /* 7.6.35 */
603 ULONG DEVAPI SKF_Digest(
604 	HANDLE hHash,
605 	BYTE *pbData,
606 	ULONG ulDataLen,
607 	BYTE *pbHashData,
608 	ULONG *pulHashLen);
609 
610 /* 7.6.36 */
611 ULONG DEVAPI SKF_DigestUpdate(
612 	HANDLE hHash,
613 	BYTE *pbData,
614 	ULONG ulDataLen);
615 
616 /* 7.6.37 */
617 ULONG DEVAPI SKF_DigestFinal(
618 	HANDLE hHash,
619 	BYTE *pHashData,
620 	ULONG *pulHashLen);
621 
622 /* 7.6.38 */
623 ULONG DEVAPI SKF_MacInit(
624 	HANDLE hKey,
625 	BLOCKCIPHERPARAM *pMacParam,
626 	HANDLE *phMac);
627 
628 /* 7.6.39 */
629 ULONG DEVAPI SKF_Mac(
630 	HANDLE hMac,
631 	BYTE *pbData,
632 	ULONG ulDataLen,
633 	BYTE *pbMacData,
634 	ULONG *pulMacLen);
635 
636 /* 7.6.40 */
637 ULONG DEVAPI SKF_MacUpdate(
638 	HANDLE hMac,
639 	BYTE *pbData,
640 	ULONG ulDataLen);
641 
642 /* 7.6.41 */
643 ULONG DEVAPI SKF_MacFinal(
644 	HANDLE hMac,
645 	BYTE *pbMacData,
646 	ULONG *pulMacDataLen);
647 
648 /* 7.6.42 */
649 ULONG DEVAPI SKF_CloseHandle(
650 	HANDLE hHandle);
651 
652 
653 #define SAR_OK				0x00000000
654 #define SAR_FAIL			0x0A000001
655 #define SAR_UNKNOWNERR			0x0A000002
656 #define SAR_NOTSUPPORTYETERR		0x0A000003
657 #define SAR_FILEERR			0x0A000004
658 #define SAR_INVALIDHANDLEERR		0x0A000005
659 #define SAR_INVALIDPARAMERR		0x0A000006
660 #define SAR_READFILEERR			0x0A000007
661 #define SAR_WRITEFILEERR		0x0A000008
662 #define SAR_NAMELENERR			0x0A000009
663 #define SAR_KEYUSAGEERR			0x0A00000A
664 #define SAR_MODULUSLENERR		0x0A00000B
665 #define SAR_NOTINITIALIZEERR		0x0A00000C
666 #define SAR_OBJERR			0x0A00000D
667 #define SAR_MEMORYERR			0x0A00000E
668 #define SAR_TIMEOUTERR			0x0A00000F
669 #define SAR_INDATALENERR		0x0A000010
670 #define SAR_INDATAERR			0x0A000011
671 #define SAR_GENRANDERR			0x0A000012
672 #define SAR_HASHOBJERR			0x0A000013
673 #define SAR_HASHERR			0x0A000014
674 #define SAR_GENRSAKEYERR		0x0A000015
675 #define SAR_RSAMODULUSLENERR		0x0A000016
676 #define SAR_CSPIMPRTPUBKEYERR		0x0A000017
677 #define SAR_RSAENCERR			0x0A000018
678 #define SAR_RSADECERR			0x0A000019
679 #define SAR_HASHNOTEQUALERR		0x0A00001A
680 #define SAR_KEYNOTFOUNTERR		0x0A00001B
681 #define SAR_CERTNOTFOUNTERR		0x0A00001C
682 #define SAR_NOTEXPORTERR		0x0A00001D
683 #define SAR_DECRYPTPADERR		0x0A00001E
684 #define SAR_MACLENERR			0x0A00001F
685 #define SAR_BUFFER_TOO_SMALL		0x0A000020
686 #define SAR_KEYINFOTYPEERR		0x0A000021
687 #define SAR_NOT_EVENTERR		0x0A000022
688 #define SAR_DEVICE_REMOVED		0x0A000023
689 #define SAR_PIN_INCORRECT		0x0A000024
690 #define SAR_PIN_LOCKED			0x0A000025
691 #define SAR_PIN_INVALID			0x0A000026
692 #define SAR_PIN_LEN_RANGE		0x0A000027
693 #define SAR_USER_ALREADY_LOGGED_IN	0x0A000028
694 #define SAR_USER_PIN_NOT_INITIALIZED	0x0A000029
695 #define SAR_USER_TYPE_INVALID		0x0A00002A
696 #define SAR_APPLICATION_NAME_INVALID	0x0A00002B
697 #define SAR_APPLICATION_EXISTS		0x0A00002C
698 #define SAR_USER_NOT_LOGGED_IN		0x0A00002D
699 #define SAR_APPLICATION_NOT_EXISTS	0x0A00002E
700 #define SAR_FILE_ALREADY_EXIST		0x0A00002F
701 #define SAR_NO_ROOM			0x0A000030
702 #define SAR_FILE_NOT_EXIST		0x0A000031
703 #define SAR_REACH_MAX_CONTAINER_COUNT	0x0A000032
704 
705 
706 #ifdef __cplusplus
707 }
708 #endif
709 #endif
710