• 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 #include <stdio.h>
12 #include <stdlib.h>
13 #include <string.h>
14 #include "skf.h"
15 #include "skf_ext.h"
16 
17 static char *hDeviceHandle	= "hDeviceHandle";
18 static char *hApplication	= "hApplication";
19 static char *hContainer		= "hContainer";
20 static char *hAgreementHandle	= "AgreementHandle";
21 static char *hKeyHandle		= "KeyHandle";
22 static char *hHashHandle	= "HashHandle";
23 static char *hMacHandle		= "MacHandle";
24 
25 static char *sm2cert_pemstr = "-----BEGIN CERTIFICATE-----\n"
26 "MIICHDCCAcOgAwIBAgIBIzAKBggqgRzPVQGDdTBRMQswCQYDVQQGEwJDTjELMAkG\n"
27 "A1UECAwCQkoxCzAJBgNVBAcMAkJKMQwwCgYDVQQKDANQS1UxCzAJBgNVBAsMAkNT\n"
28 "MQ0wCwYDVQQDDARHTUNBMB4XDTE3MDYxODA4NDMyN1oXDTE4MDYxODA4NDMyN1ow\n"
29 "UzELMAkGA1UEBhMCQ04xCzAJBgNVBAgMAkJKMQwwCgYDVQQKDANQS1UxDTALBgNV\n"
30 "BAsMBFNpZ24xGjAYBgNVBAMMEWNsaWVudEBwa3UuZWR1LmNuMFkwEwYHKoZIzj0C\n"
31 "AQYIKoEcz1UBgi0DQgAEzsZMPwnZFCD75xb8IT02XJCyOShTaEL8o/iQ6ksmG2Ce\n"
32 "MKSPGUcRtlSAU/1hQcFv4j59Csdr03lXiDRfdD72AKOBiTCBhjAJBgNVHRMEAjAA\n"
33 "MAsGA1UdDwQEAwIHgDAsBglghkgBhvhCAQ0EHxYdT3BlblNTTCBHZW5lcmF0ZWQg\n"
34 "Q2VydGlmaWNhdGUwHQYDVR0OBBYEFHbwURtb+xQrmxma7NnHe300//yuMB8GA1Ud\n"
35 "IwQYMBaAFMJhPpIHIHmrPQdEsiK3SaZ60qiPMAoGCCqBHM9VAYN1A0cAMEQCIBhO\n"
36 "uu7R3uMpVcy2r+t/OGYRs7JpQMnNwhGy9dwTm+h8AiA9y4o0fkRLQfuT3RPClX2o\n"
37 "B5vw09GcQVzsjKxhGgHLZw==\n"
38 "-----END CERTIFICATE-----\n";
39 
40 static char *sm2key_pemstr = "-----BEGIN EC PRIVATE KEY-----\n"
41 "MHcCAQEEIAMbqE0bEEoGoicBgR0VISmbbuInWUBMQBtZBFVPD0+aoAoGCCqBHM9V\n"
42 "AYItoUQDQgAEzsZMPwnZFCD75xb8IT02XJCyOShTaEL8o/iQ6ksmG2CeMKSPGUcR\n"
43 "tlSAU/1hQcFv4j59Csdr03lXiDRfdD72AA==\n"
44 "-----END EC PRIVATE KEY-----\n";
45 
46 #define devNameList "DummyDev1\0DummyDev2\0"
47 #define appNameList "App1\0App2\0"
48 #define fileNameList "File1\0File2\0"
49 #define containerNameList "Container1\0Container2\0"
50 
51 
SKF_WaitForDevEvent(LPSTR szDevName,ULONG * pulDevNameLen,ULONG * pulEvent)52 ULONG DEVAPI SKF_WaitForDevEvent(
53 	LPSTR szDevName,
54 	ULONG *pulDevNameLen,
55 	ULONG *pulEvent)
56 {
57 	return SAR_OK;
58 }
59 
SKF_CancelWaitForDevEvent(void)60 ULONG DEVAPI SKF_CancelWaitForDevEvent(
61 	void)
62 {
63 	return SAR_OK;
64 }
65 
SKF_EnumDev(BOOL bPresent,LPSTR szNameList,ULONG * pulSize)66 ULONG DEVAPI SKF_EnumDev(BOOL bPresent,
67 	LPSTR szNameList,
68 	ULONG *pulSize)
69 {
70 	if (!pulSize)
71 		return SAR_INVALIDPARAMERR;
72 	*pulSize = sizeof(devNameList);
73 	if (szNameList)
74 		memcpy(szNameList, devNameList, sizeof(devNameList));
75 	return SAR_OK;
76 }
77 
SKF_ConnectDev(LPSTR szName,DEVHANDLE * phDev)78 ULONG DEVAPI SKF_ConnectDev(
79 	LPSTR szName,
80 	DEVHANDLE *phDev)
81 {
82 	if (!phDev)
83 		return SAR_INVALIDPARAMERR;
84 	*phDev = hDeviceHandle;
85 	return SAR_OK;
86 }
87 
SKF_DisConnectDev(DEVHANDLE hDev)88 ULONG DEVAPI SKF_DisConnectDev(
89 	DEVHANDLE hDev)
90 {
91 	return SAR_OK;
92 }
93 
SKF_GetDevState(LPSTR szDevName,ULONG * pulDevState)94 ULONG DEVAPI SKF_GetDevState(
95 	LPSTR szDevName,
96 	ULONG *pulDevState)
97 {
98 	if (!pulDevState)
99 		return SAR_INVALIDPARAMERR;
100 	*pulDevState = SKF_DEV_STATE_PRESENT;
101 	return SAR_OK;
102 }
103 
SKF_SetLabel(DEVHANDLE hDev,LPSTR szLabel)104 ULONG DEVAPI SKF_SetLabel(
105 	DEVHANDLE hDev,
106 	LPSTR szLabel)
107 {
108 	return SAR_OK;
109 }
110 
SKF_GetDevInfo(DEVHANDLE hDev,DEVINFO * pDevInfo)111 ULONG DEVAPI SKF_GetDevInfo(DEVHANDLE hDev,
112 	DEVINFO *pDevInfo)
113 {
114 	DEVINFO devInfo;
115 
116 	if (!pDevInfo) {
117 		return SAR_INVALIDPARAMERR;
118 	}
119 
120 	memset(&devInfo, 0, sizeof(devInfo));
121 	devInfo.Version.major = 1;
122 	devInfo.Version.minor = 0;
123 	strcpy((char *)&devInfo.Manufacturer, "GmSSL Project (http://gmssl.org)");
124 	strcpy((char *)&devInfo.Issuer, "GmSSL Project (http://gmssl.org)");
125 	strcpy((char *)&devInfo.Label, "SKF Dummy Token");
126 	strcpy((char *)&devInfo.SerialNumber, "1");
127 	devInfo.HWVersion.major = 1;
128 	devInfo.HWVersion.minor = 0;
129 	devInfo.FirmwareVersion.major = 1;
130 	devInfo.FirmwareVersion.minor = 0;
131 	devInfo.AlgSymCap = SGD_SM1|SGD_SSF33|SGD_SM4|SGD_ECB|SGD_CBC|SGD_CFB|SGD_OFB;
132 	devInfo.AlgAsymCap = SGD_RSA|SGD_SM2|SGD_PK_SIGN|SGD_PK_ENC;
133 	devInfo.AlgHashCap = SGD_SM3|SGD_SHA1|SGD_SHA256;
134 	devInfo.DevAuthAlgId = SGD_SM4_ECB;
135 	devInfo.TotalSpace = 64*1024;
136 	devInfo.FreeSpace = 32*1024;
137 	devInfo.MaxECCBufferSize = 100;
138 	devInfo.MaxBufferSize = 128;
139 
140 	memcpy(pDevInfo, &devInfo, sizeof(DEVINFO));
141 	return SAR_OK;
142 }
143 
SKF_LockDev(DEVHANDLE hDev,ULONG ulTimeOut)144 ULONG DEVAPI SKF_LockDev(
145 	DEVHANDLE hDev,
146 	ULONG ulTimeOut)
147 {
148 	return SAR_OK;
149 }
150 
SKF_UnlockDev(DEVHANDLE hDev)151 ULONG DEVAPI SKF_UnlockDev(
152 	DEVHANDLE hDev)
153 {
154 	return SAR_OK;
155 }
156 
SKF_Transmit(DEVHANDLE hDev,BYTE * pbCommand,ULONG ulCommandLen,BYTE * pbData,ULONG * pulDataLen)157 ULONG DEVAPI SKF_Transmit(
158 	DEVHANDLE hDev,
159 	BYTE *pbCommand,
160 	ULONG ulCommandLen,
161 	BYTE *pbData,
162 	ULONG *pulDataLen)
163 {
164 	if (!pulDataLen)
165 		return SAR_INVALIDPARAMERR;
166 	*pulDataLen = ulCommandLen;
167 	return SAR_OK;
168 }
169 
SKF_ChangeDevAuthKey(DEVHANDLE hDev,BYTE * pbKeyValue,ULONG ulKeyLen)170 ULONG DEVAPI SKF_ChangeDevAuthKey(
171 	DEVHANDLE hDev,
172 	BYTE *pbKeyValue,
173 	ULONG ulKeyLen)
174 {
175 	return SAR_OK;
176 }
177 
SKF_DevAuth(DEVHANDLE hDev,BYTE * pbAuthData,ULONG ulLen)178 ULONG DEVAPI SKF_DevAuth(
179 	DEVHANDLE hDev,
180 	BYTE *pbAuthData,
181 	ULONG ulLen)
182 {
183 	return SAR_OK;
184 }
185 
SKF_ChangePIN(HAPPLICATION hApplication,ULONG ulPINType,LPSTR szOldPin,LPSTR szNewPin,ULONG * pulRetryCount)186 ULONG DEVAPI SKF_ChangePIN(
187 	HAPPLICATION hApplication,
188 	ULONG ulPINType,
189 	LPSTR szOldPin,
190 	LPSTR szNewPin,
191 	ULONG *pulRetryCount)
192 {
193 	if (!pulRetryCount)
194 		return SAR_INVALIDPARAMERR;
195 	*pulRetryCount = 100;
196 	return SAR_OK;
197 }
198 
SKF_GetPINInfo(HAPPLICATION hApplication,ULONG ulPINType,ULONG * pulMaxRetryCount,ULONG * pulRemainRetryCount,BOOL * pbDefaultPin)199 LONG DEVAPI SKF_GetPINInfo(
200 	HAPPLICATION hApplication,
201 	ULONG ulPINType,
202 	ULONG *pulMaxRetryCount,
203 	ULONG *pulRemainRetryCount,
204 	BOOL *pbDefaultPin)
205 {
206 	if (!pulMaxRetryCount || !pulRemainRetryCount || !pbDefaultPin)
207 		return SAR_INVALIDPARAMERR;
208 	*pulMaxRetryCount = 100;
209 	*pulRemainRetryCount = 100;
210 	*pbDefaultPin = TRUE;
211 	return SAR_OK;
212 }
213 
SKF_VerifyPIN(HAPPLICATION hApplication,ULONG ulPINType,LPSTR szPIN,ULONG * pulRetryCount)214 ULONG DEVAPI SKF_VerifyPIN(
215 	HAPPLICATION hApplication,
216 	ULONG ulPINType,
217 	LPSTR szPIN,
218 	ULONG *pulRetryCount)
219 {
220 	if (!pulRetryCount)
221 		return SAR_INVALIDPARAMERR;
222 	*pulRetryCount = 100;
223 	return SAR_OK;
224 }
225 
SKF_UnblockPIN(HAPPLICATION hApplication,LPSTR szAdminPIN,LPSTR szNewUserPIN,ULONG * pulRetryCount)226 ULONG DEVAPI SKF_UnblockPIN(
227 	HAPPLICATION hApplication,
228 	LPSTR szAdminPIN,
229 	LPSTR szNewUserPIN,
230 	ULONG *pulRetryCount)
231 {
232 	if (!pulRetryCount)
233 		return SAR_INVALIDPARAMERR;
234 	*pulRetryCount = 100;
235 	return SAR_OK;
236 }
237 
SKF_ClearSecureState(HAPPLICATION hApplication)238 ULONG DEVAPI SKF_ClearSecureState(
239 	HAPPLICATION hApplication)
240 {
241 	return SAR_OK;
242 }
243 
SKF_CreateApplication(DEVHANDLE hDev,LPSTR szAppName,LPSTR szAdminPin,DWORD dwAdminPinRetryCount,LPSTR szUserPin,DWORD dwUserPinRetryCount,DWORD dwCreateFileRights,HAPPLICATION * phApplication)244 ULONG DEVAPI SKF_CreateApplication(
245 	DEVHANDLE hDev,
246 	LPSTR szAppName,
247 	LPSTR szAdminPin,
248 	DWORD dwAdminPinRetryCount,
249 	LPSTR szUserPin,
250 	DWORD dwUserPinRetryCount,
251 	DWORD dwCreateFileRights,
252 	HAPPLICATION *phApplication)
253 {
254 	if (!phApplication)
255 		return SAR_INVALIDPARAMERR;
256 	*phApplication = hApplication;
257 	return SAR_OK;
258 }
259 
SKF_EnumApplication(DEVHANDLE hDev,LPSTR szAppName,ULONG * pulSize)260 ULONG DEVAPI SKF_EnumApplication(DEVHANDLE hDev,
261 	LPSTR szAppName,
262 	ULONG *pulSize)
263 {
264 	if (!pulSize)
265 		return SAR_INVALIDPARAMERR;
266 	*pulSize = sizeof(appNameList);
267 	if (szAppName)
268 		memcpy(szAppName, appNameList, sizeof(appNameList));
269 	return SAR_OK;
270 }
271 
SKF_DeleteApplication(DEVHANDLE hDev,LPSTR szAppName)272 ULONG DEVAPI SKF_DeleteApplication(
273 	DEVHANDLE hDev,
274 	LPSTR szAppName)
275 {
276 	return SAR_OK;
277 }
278 
SKF_OpenApplication(DEVHANDLE hDev,LPSTR szAppName,HAPPLICATION * phApplication)279 ULONG DEVAPI SKF_OpenApplication(
280 	DEVHANDLE hDev,
281 	LPSTR szAppName,
282 	HAPPLICATION *phApplication)
283 {
284 	if (!phApplication)
285 		return SAR_INVALIDPARAMERR;
286 	*phApplication = hApplication;
287 	return SAR_OK;
288 }
289 
SKF_CloseApplication(HAPPLICATION hApplication)290 ULONG DEVAPI SKF_CloseApplication(
291 	HAPPLICATION hApplication)
292 {
293 	return SAR_OK;
294 }
295 
SKF_CreateFile(HAPPLICATION hApplication,LPSTR szFileName,ULONG ulFileSize,ULONG ulReadRights,ULONG ulWriteRights)296 ULONG DEVAPI SKF_CreateFile(
297 	HAPPLICATION hApplication,
298 	LPSTR szFileName,
299 	ULONG ulFileSize,
300 	ULONG ulReadRights,
301 	ULONG ulWriteRights)
302 {
303 	return SAR_OK;
304 }
305 
SKF_DeleteFile(HAPPLICATION hApplication,LPSTR szFileName)306 ULONG DEVAPI SKF_DeleteFile(
307 	HAPPLICATION hApplication,
308 	LPSTR szFileName)
309 {
310 	return SAR_OK;
311 }
312 
SKF_EnumFiles(HAPPLICATION hApplication,LPSTR szFileList,ULONG * pulSize)313 ULONG DEVAPI SKF_EnumFiles(
314 	HAPPLICATION hApplication,
315 	LPSTR szFileList,
316 	ULONG *pulSize)
317 {
318 	if (!pulSize)
319 		return SAR_INVALIDPARAMERR;
320 	*pulSize = sizeof(fileNameList);
321 	if (szFileList)
322 		memcpy(szFileList, fileNameList, sizeof(fileNameList));
323 	return SAR_OK;
324 }
325 
SKF_GetFileInfo(HAPPLICATION hApplication,LPSTR szFileName,FILEATTRIBUTE * pFileInfo)326 ULONG DEVAPI SKF_GetFileInfo(
327 	HAPPLICATION hApplication,
328 	LPSTR szFileName,
329 	FILEATTRIBUTE *pFileInfo)
330 {
331 	if (!pFileInfo)
332 		return SAR_INVALIDPARAMERR;
333 	strcpy((char *)pFileInfo->FileName, "FileName");
334 	pFileInfo->FileSize = 1024;
335 	pFileInfo->ReadRights = SECURE_ANYONE_ACCOUNT;
336 	return SAR_OK;
337 }
338 
SKF_ReadFile(HAPPLICATION hApplication,LPSTR szFileName,ULONG ulOffset,ULONG ulSize,BYTE * pbOutData,ULONG * pulOutLen)339 ULONG DEVAPI SKF_ReadFile(
340 	HAPPLICATION hApplication,
341 	LPSTR szFileName,
342 	ULONG ulOffset,
343 	ULONG ulSize,
344 	BYTE *pbOutData,
345 	ULONG *pulOutLen)
346 {
347 	if (!pbOutData || !pulOutLen)
348 		return SAR_INVALIDPARAMERR;
349 	memset(pbOutData, 'x', ulSize);
350 	*pulOutLen = ulSize;
351 	return SAR_OK;
352 }
353 
SKF_WriteFile(HAPPLICATION hApplication,LPSTR szFileName,ULONG ulOffset,BYTE * pbData,ULONG ulSize)354 ULONG DEVAPI SKF_WriteFile(
355 	HAPPLICATION hApplication,
356 	LPSTR szFileName,
357 	ULONG ulOffset,
358 	BYTE *pbData,
359 	ULONG ulSize)
360 {
361 	return SAR_OK;
362 }
363 
SKF_CreateContainer(HAPPLICATION hApplication,LPSTR szContainerName,HCONTAINER * phContainer)364 ULONG DEVAPI SKF_CreateContainer(
365 	HAPPLICATION hApplication,
366 	LPSTR szContainerName,
367 	HCONTAINER *phContainer)
368 {
369 	if (!phContainer)
370 		return SAR_INVALIDPARAMERR;
371 	*phContainer = hContainer;
372 	return SAR_OK;
373 }
374 
SKF_DeleteContainer(HAPPLICATION hApplication,LPSTR szContainerName)375 ULONG DEVAPI SKF_DeleteContainer(
376 	HAPPLICATION hApplication,
377 	LPSTR szContainerName)
378 {
379 	return SAR_OK;
380 }
381 
SKF_EnumContainer(HAPPLICATION hApplication,LPSTR szContainerName,ULONG * pulSize)382 ULONG DEVAPI SKF_EnumContainer(
383 	HAPPLICATION hApplication,
384 	LPSTR szContainerName,
385 	ULONG *pulSize)
386 {
387 	if (!pulSize)
388 		return SAR_INVALIDPARAMERR;
389 	*pulSize = sizeof(containerNameList);
390 	if (szContainerName)
391 		memcpy(szContainerName, containerNameList, sizeof(containerNameList));
392 	return SAR_OK;
393 }
394 
SKF_OpenContainer(HAPPLICATION hApplication,LPSTR szContainerName,HCONTAINER * phContainer)395 ULONG DEVAPI SKF_OpenContainer(
396 	HAPPLICATION hApplication,
397 	LPSTR szContainerName,
398 	HCONTAINER *phContainer)
399 {
400 	if (!phContainer)
401 		return SAR_INVALIDPARAMERR;
402 	*phContainer = hContainer;
403 	return SAR_OK;
404 }
405 
SKF_CloseContainer(HCONTAINER hContainer)406 ULONG DEVAPI SKF_CloseContainer(
407 	HCONTAINER hContainer)
408 {
409 	return SAR_OK;
410 }
411 
SKF_GetContainerType(HCONTAINER hContainer,ULONG * pulContainerType)412 ULONG DEVAPI SKF_GetContainerType(
413 	HCONTAINER hContainer,
414 	ULONG *pulContainerType)
415 {
416 	if (!pulContainerType)
417 		return SAR_INVALIDPARAMERR;
418 	*pulContainerType = SKF_CONTAINER_TYPE_ECC;
419 	return SAR_OK;
420 }
421 
SKF_ImportCertificate(HCONTAINER hContainer,BOOL bExportSignKey,BYTE * pbCert,ULONG ulCertLen)422 ULONG DEVAPI SKF_ImportCertificate(
423 	HCONTAINER hContainer,
424 	BOOL bExportSignKey,
425 	BYTE *pbCert,
426 	ULONG ulCertLen)
427 {
428 	return SAR_OK;
429 }
430 
SKF_ExportCertificate(HCONTAINER hContainer,BOOL bSignFlag,BYTE * pbCert,ULONG * pulCertLen)431 ULONG DEVAPI SKF_ExportCertificate(
432 	HCONTAINER hContainer,
433 	BOOL bSignFlag,
434 	BYTE *pbCert,
435 	ULONG *pulCertLen)
436 {
437 	*pulCertLen = strlen(sm2cert_pemstr);
438 	memcpy(pbCert, sm2cert_pemstr, *pulCertLen);
439 
440 	return SAR_OK;
441 }
442 
SKF_ExportPublicKey(HCONTAINER hContainer,BOOL bSignFlag,BYTE * pbBlob,ULONG * pulBlobLen)443 ULONG DEVAPI SKF_ExportPublicKey(
444 	HCONTAINER hContainer,
445 	BOOL bSignFlag,
446 	BYTE *pbBlob,
447 	ULONG *pulBlobLen)
448 {
449 	if (!pulBlobLen)
450 		return SAR_INVALIDPARAMERR;
451 	*pulBlobLen = 2048/8;
452 	return SAR_OK;
453 }
454 
SKF_GenRandom(DEVHANDLE hDev,BYTE * pbRandom,ULONG ulRandomLen)455 ULONG DEVAPI SKF_GenRandom(
456 	DEVHANDLE hDev,
457 	BYTE *pbRandom,
458 	ULONG ulRandomLen)
459 {
460 	return SAR_OK;
461 }
462 
SKF_GenExtRSAKey(DEVHANDLE hDev,ULONG ulBitsLen,RSAPRIVATEKEYBLOB * pBlob)463 ULONG DEVAPI SKF_GenExtRSAKey(
464 	DEVHANDLE hDev,
465 	ULONG ulBitsLen,
466 	RSAPRIVATEKEYBLOB *pBlob)
467 {
468 	if (!pBlob)
469 		return SAR_INVALIDPARAMERR;
470 	return SAR_OK;
471 }
472 
SKF_GenRSAKeyPair(HCONTAINER hContainer,ULONG ulBitsLen,RSAPUBLICKEYBLOB * pBlob)473 ULONG DEVAPI SKF_GenRSAKeyPair(
474 	HCONTAINER hContainer,
475 	ULONG ulBitsLen,
476 	RSAPUBLICKEYBLOB *pBlob)
477 {
478 	if (!pBlob)
479 		return SAR_INVALIDPARAMERR;
480 	return SAR_OK;
481 }
482 
SKF_ImportRSAKeyPair(HCONTAINER hContainer,ULONG ulSymAlgId,BYTE * pbWrappedKey,ULONG ulWrappedKeyLen,BYTE * pbEncryptedData,ULONG ulEncryptedDataLen)483 ULONG DEVAPI SKF_ImportRSAKeyPair(
484 	HCONTAINER hContainer,
485 	ULONG ulSymAlgId,
486 	BYTE *pbWrappedKey,
487 	ULONG ulWrappedKeyLen,
488 	BYTE *pbEncryptedData,
489 	ULONG ulEncryptedDataLen)
490 {
491 	return SAR_OK;
492 }
493 
SKF_RSASignData(HCONTAINER hContainer,BYTE * pbData,ULONG ulDataLen,BYTE * pbSignature,ULONG * pulSignLen)494 ULONG DEVAPI SKF_RSASignData(
495 	HCONTAINER hContainer,
496 	BYTE *pbData,
497 	ULONG ulDataLen,
498 	BYTE *pbSignature,
499 	ULONG *pulSignLen)
500 {
501 	if (!pulSignLen)
502 		return SAR_INVALIDPARAMERR;
503 	*pulSignLen = 2048/8;
504 	return SAR_OK;
505 }
506 
SKF_RSAVerify(DEVHANDLE hDev,RSAPUBLICKEYBLOB * pRSAPubKeyBlob,BYTE * pbData,ULONG ulDataLen,BYTE * pbSignature,ULONG ulSignLen)507 ULONG DEVAPI SKF_RSAVerify(
508 	DEVHANDLE hDev,
509 	RSAPUBLICKEYBLOB *pRSAPubKeyBlob,
510 	BYTE *pbData,
511 	ULONG ulDataLen,
512 	BYTE *pbSignature,
513 	ULONG ulSignLen)
514 {
515 	return SAR_OK;
516 }
517 
SKF_RSAExportSessionKey(HCONTAINER hContainer,ULONG ulAlgId,RSAPUBLICKEYBLOB * pPubKey,BYTE * pbData,ULONG * pulDataLen,HANDLE * phSessionKey)518 ULONG DEVAPI SKF_RSAExportSessionKey(
519 	HCONTAINER hContainer,
520 	ULONG ulAlgId,
521 	RSAPUBLICKEYBLOB *pPubKey,
522 	BYTE *pbData,
523 	ULONG *pulDataLen,
524 	HANDLE *phSessionKey)
525 {
526 	if (!pulDataLen || !phSessionKey)
527 		return SAR_INVALIDPARAMERR;
528 	*pulDataLen = 2048/8;
529 	*phSessionKey = hKeyHandle;
530 	return SAR_OK;
531 }
532 
SKF_ExtRSAPubKeyOperation(DEVHANDLE hDev,RSAPUBLICKEYBLOB * pRSAPubKeyBlob,BYTE * pbInput,ULONG ulInputLen,BYTE * pbOutput,ULONG * pulOutputLen)533 ULONG DEVAPI SKF_ExtRSAPubKeyOperation(
534 	DEVHANDLE hDev,
535 	RSAPUBLICKEYBLOB *pRSAPubKeyBlob,
536 	BYTE *pbInput,
537 	ULONG ulInputLen,
538 	BYTE *pbOutput,
539 	ULONG *pulOutputLen)
540 {
541 	if (!pulOutputLen)
542 		return SAR_INVALIDPARAMERR;
543 	*pulOutputLen = 2048/8;
544 	return SAR_OK;
545 }
546 
SKF_ExtRSAPriKeyOperation(DEVHANDLE hDev,RSAPRIVATEKEYBLOB * pRSAPriKeyBlob,BYTE * pbInput,ULONG ulInputLen,BYTE * pbOutput,ULONG * pulOutputLen)547 ULONG DEVAPI SKF_ExtRSAPriKeyOperation(
548 	DEVHANDLE hDev,
549 	RSAPRIVATEKEYBLOB *pRSAPriKeyBlob,
550 	BYTE *pbInput,
551 	ULONG ulInputLen,
552 	BYTE *pbOutput,
553 	ULONG *pulOutputLen)
554 {
555 	if (!pulOutputLen)
556 		return SAR_INVALIDPARAMERR;
557 	*pulOutputLen = 2048/8;
558 	return SAR_OK;
559 }
560 
SKF_GenECCKeyPair(HCONTAINER hContainer,ULONG ulAlgId,ECCPUBLICKEYBLOB * pBlob)561 ULONG DEVAPI SKF_GenECCKeyPair(
562 	HCONTAINER hContainer,
563 	ULONG ulAlgId,
564 	ECCPUBLICKEYBLOB *pBlob)
565 {
566 	if (!pBlob)
567 		return SAR_INVALIDPARAMERR;
568 	return SAR_OK;
569 }
570 
SKF_ImportECCKeyPair(HCONTAINER hContainer,ENVELOPEDKEYBLOB * pEnvelopedKeyBlob)571 ULONG DEVAPI SKF_ImportECCKeyPair(
572 	HCONTAINER hContainer,
573 	ENVELOPEDKEYBLOB *pEnvelopedKeyBlob)
574 {
575 	return SAR_OK;
576 }
577 
SKF_ECCSignData(HCONTAINER hContainer,BYTE * pbDigest,ULONG ulDigestLen,ECCSIGNATUREBLOB * pSignature)578 ULONG DEVAPI SKF_ECCSignData(
579 	HCONTAINER hContainer,
580 	BYTE *pbDigest,
581 	ULONG ulDigestLen,
582 	ECCSIGNATUREBLOB *pSignature)
583 {
584 	return SAR_OK;
585 }
586 
SKF_ECCVerify(DEVHANDLE hDev,ECCPUBLICKEYBLOB * pECCPubKeyBlob,BYTE * pbData,ULONG ulDataLen,ECCSIGNATUREBLOB * pSignature)587 ULONG DEVAPI SKF_ECCVerify(
588 	DEVHANDLE hDev,
589 	ECCPUBLICKEYBLOB *pECCPubKeyBlob,
590 	BYTE *pbData,
591 	ULONG ulDataLen,
592 	ECCSIGNATUREBLOB *pSignature)
593 {
594 	return SAR_OK;
595 }
596 
SKF_ECCExportSessionKey(HCONTAINER hContainer,ULONG ulAlgId,ECCPUBLICKEYBLOB * pPubKey,ECCCIPHERBLOB * pData,HANDLE * phSessionKey)597 ULONG DEVAPI SKF_ECCExportSessionKey(
598 	HCONTAINER hContainer,
599 	ULONG ulAlgId,
600 	ECCPUBLICKEYBLOB *pPubKey,
601 	ECCCIPHERBLOB *pData,
602 	HANDLE *phSessionKey)
603 {
604 	if (!phSessionKey)
605 		return SAR_INVALIDPARAMERR;
606 	*phSessionKey = hKeyHandle;
607 	return SAR_OK;
608 }
609 
SKF_ExtECCEncrypt(DEVHANDLE hDev,ECCPUBLICKEYBLOB * pECCPubKeyBlob,BYTE * pbPlainText,ULONG ulPlainTextLen,ECCCIPHERBLOB * pCipherText)610 ULONG DEVAPI SKF_ExtECCEncrypt(
611 	DEVHANDLE hDev,
612 	ECCPUBLICKEYBLOB *pECCPubKeyBlob,
613 	BYTE *pbPlainText,
614 	ULONG ulPlainTextLen,
615 	ECCCIPHERBLOB *pCipherText)
616 {
617 	return SAR_OK;
618 }
619 
SKF_ExtECCDecrypt(DEVHANDLE hDev,ECCPRIVATEKEYBLOB * pECCPriKeyBlob,ECCCIPHERBLOB * pCipherText,BYTE * pbPlainText,ULONG * pulPlainTextLen)620 ULONG DEVAPI SKF_ExtECCDecrypt(
621 	DEVHANDLE hDev,
622 	ECCPRIVATEKEYBLOB *pECCPriKeyBlob,
623 	ECCCIPHERBLOB *pCipherText,
624 	BYTE *pbPlainText,
625 	ULONG *pulPlainTextLen)
626 {
627 	if (!pulPlainTextLen)
628 		return SAR_INVALIDPARAMERR;
629 	*pulPlainTextLen = 1;
630 	return SAR_OK;
631 }
632 
SKF_ExtECCSign(DEVHANDLE hDev,ECCPRIVATEKEYBLOB * pECCPriKeyBlob,BYTE * pbData,ULONG ulDataLen,ECCSIGNATUREBLOB * pSignature)633 ULONG DEVAPI SKF_ExtECCSign(
634 	DEVHANDLE hDev,
635 	ECCPRIVATEKEYBLOB *pECCPriKeyBlob,
636 	BYTE *pbData,
637 	ULONG ulDataLen,
638 	ECCSIGNATUREBLOB *pSignature)
639 {
640 	if (!pSignature)
641 		return SAR_INVALIDPARAMERR;
642 	return SAR_OK;
643 }
644 
SKF_ExtECCVerify(DEVHANDLE hDev,ECCPUBLICKEYBLOB * pECCPubKeyBlob,BYTE * pbData,ULONG ulDataLen,ECCSIGNATUREBLOB * pSignature)645 ULONG DEVAPI SKF_ExtECCVerify(
646 	DEVHANDLE hDev,
647 	ECCPUBLICKEYBLOB *pECCPubKeyBlob,
648 	BYTE *pbData,
649 	ULONG ulDataLen,
650 	ECCSIGNATUREBLOB *pSignature)
651 {
652 	return SAR_OK;
653 }
654 
SKF_GenerateAgreementDataWithECC(HCONTAINER hContainer,ULONG ulAlgId,ECCPUBLICKEYBLOB * pTempECCPubKeyBlob,BYTE * pbID,ULONG ulIDLen,HANDLE * phAgreementHandle)655 ULONG DEVAPI SKF_GenerateAgreementDataWithECC(
656 	HCONTAINER hContainer,
657 	ULONG ulAlgId,
658 	ECCPUBLICKEYBLOB *pTempECCPubKeyBlob,
659 	BYTE *pbID,
660 	ULONG ulIDLen,
661 	HANDLE *phAgreementHandle)
662 {
663 	if (!phAgreementHandle)
664 		return SAR_INVALIDPARAMERR;
665 	*phAgreementHandle = hAgreementHandle;
666 	return SAR_OK;
667 }
668 
SKF_GenerateAgreementDataAndKeyWithECC(HANDLE hContainer,ULONG ulAlgId,ECCPUBLICKEYBLOB * pSponsorECCPubKeyBlob,ECCPUBLICKEYBLOB * pSponsorTempECCPubKeyBlob,ECCPUBLICKEYBLOB * pTempECCPubKeyBlob,BYTE * pbID,ULONG ulIDLen,BYTE * pbSponsorID,ULONG ulSponsorIDLen,HANDLE * phKeyHandle)669 ULONG DEVAPI SKF_GenerateAgreementDataAndKeyWithECC(
670 	HANDLE hContainer,
671 	ULONG ulAlgId,
672 	ECCPUBLICKEYBLOB *pSponsorECCPubKeyBlob,
673 	ECCPUBLICKEYBLOB *pSponsorTempECCPubKeyBlob,
674 	ECCPUBLICKEYBLOB *pTempECCPubKeyBlob,
675 	BYTE *pbID,
676 	ULONG ulIDLen,
677 	BYTE *pbSponsorID,
678 	ULONG ulSponsorIDLen,
679 	HANDLE *phKeyHandle)
680 {
681 	if (!phKeyHandle)
682 		return SAR_INVALIDPARAMERR;
683 	*phKeyHandle = hKeyHandle;
684 	return SAR_OK;
685 }
686 
SKF_GenerateKeyWithECC(HANDLE hAgreementHandle,ECCPUBLICKEYBLOB * pECCPubKeyBlob,ECCPUBLICKEYBLOB * pTempECCPubKeyBlob,BYTE * pbID,ULONG ulIDLen,HANDLE * phKeyHandle)687 ULONG DEVAPI SKF_GenerateKeyWithECC(
688 	HANDLE hAgreementHandle,
689 	ECCPUBLICKEYBLOB *pECCPubKeyBlob,
690 	ECCPUBLICKEYBLOB *pTempECCPubKeyBlob,
691 	BYTE *pbID,
692 	ULONG ulIDLen,
693 	HANDLE *phKeyHandle)
694 {
695 	if (!phKeyHandle)
696 		return SAR_INVALIDPARAMERR;
697 	*phKeyHandle = hKeyHandle;
698 	return SAR_OK;
699 }
700 
SKF_ImportSessionKey(HCONTAINER hContainer,ULONG ulAlgId,BYTE * pbWrapedData,ULONG ulWrapedLen,HANDLE * phKey)701 ULONG DEVAPI SKF_ImportSessionKey(
702 	HCONTAINER hContainer,
703 	ULONG ulAlgId,
704 	BYTE *pbWrapedData,
705 	ULONG ulWrapedLen,
706 	HANDLE *phKey)
707 {
708 	if (!phKey)
709 		return SAR_INVALIDPARAMERR;
710 	*phKey = hKeyHandle;
711 	return SAR_OK;
712 }
713 
SKF_SetSymmKey(DEVHANDLE hDev,BYTE * pbKey,ULONG ulAlgID,HANDLE * phKey)714 ULONG DEVAPI SKF_SetSymmKey(
715 	DEVHANDLE hDev,
716 	BYTE *pbKey,
717 	ULONG ulAlgID,
718 	HANDLE *phKey)
719 {
720 	if (!phKey)
721 		return SAR_INVALIDPARAMERR;
722 	*phKey = hKeyHandle;
723 	return SAR_OK;
724 }
725 
SKF_EncryptInit(HANDLE hKey,BLOCKCIPHERPARAM EncryptParam)726 ULONG DEVAPI SKF_EncryptInit(
727 	HANDLE hKey,
728 	BLOCKCIPHERPARAM EncryptParam)
729 {
730 	return SAR_OK;
731 }
732 
SKF_Encrypt(HANDLE hKey,BYTE * pbData,ULONG ulDataLen,BYTE * pbEncryptedData,ULONG * pulEncryptedLen)733 ULONG DEVAPI SKF_Encrypt(
734 	HANDLE hKey,
735 	BYTE *pbData,
736 	ULONG ulDataLen,
737 	BYTE *pbEncryptedData,
738 	ULONG *pulEncryptedLen)
739 {
740 	if (!pulEncryptedLen)
741 		return SAR_INVALIDPARAMERR;
742 	*pulEncryptedLen = ulDataLen;
743 	return SAR_OK;
744 }
745 
SKF_EncryptUpdate(HANDLE hKey,BYTE * pbData,ULONG ulDataLen,BYTE * pbEncryptedData,ULONG * pulEncryptedLen)746 ULONG DEVAPI SKF_EncryptUpdate(
747 	HANDLE hKey,
748 	BYTE *pbData,
749 	ULONG ulDataLen,
750 	BYTE *pbEncryptedData,
751 	ULONG *pulEncryptedLen)
752 {
753 	if (!pulEncryptedLen)
754 		return SAR_INVALIDPARAMERR;
755 	*pulEncryptedLen = ulDataLen;
756 	return SAR_OK;
757 }
758 
SKF_EncryptFinal(HANDLE hKey,BYTE * pbEncryptedData,ULONG * pulEncryptedDataLen)759 ULONG DEVAPI SKF_EncryptFinal(
760 	HANDLE hKey,
761 	BYTE *pbEncryptedData,
762 	ULONG *pulEncryptedDataLen)
763 {
764 	if (!pulEncryptedDataLen)
765 		return SAR_INVALIDPARAMERR;
766 	*pulEncryptedDataLen = 0;
767 	return SAR_OK;
768 }
769 
SKF_DecryptInit(HANDLE hKey,BLOCKCIPHERPARAM DecryptParam)770 ULONG DEVAPI SKF_DecryptInit(
771 	HANDLE hKey,
772 	BLOCKCIPHERPARAM DecryptParam)
773 {
774 	return SAR_OK;
775 }
776 
SKF_Decrypt(HANDLE hKey,BYTE * pbEncryptedData,ULONG ulEncryptedLen,BYTE * pbData,ULONG * pulDataLen)777 ULONG DEVAPI SKF_Decrypt(
778 	HANDLE hKey,
779 	BYTE *pbEncryptedData,
780 	ULONG ulEncryptedLen,
781 	BYTE *pbData,
782 	ULONG *pulDataLen)
783 {
784 	if (!pulDataLen)
785 		return SAR_INVALIDPARAMERR;
786 	*pulDataLen = ulEncryptedLen;
787 	return SAR_OK;
788 }
789 
SKF_DecryptUpdate(HANDLE hKey,BYTE * pbEncryptedData,ULONG ulEncryptedLen,BYTE * pbData,ULONG * pulDataLen)790 ULONG DEVAPI SKF_DecryptUpdate(
791 	HANDLE hKey,
792 	BYTE *pbEncryptedData,
793 	ULONG ulEncryptedLen,
794 	BYTE *pbData,
795 	ULONG *pulDataLen)
796 {
797 	if (!pulDataLen)
798 		return SAR_INVALIDPARAMERR;
799 	*pulDataLen = ulEncryptedLen;
800 	return SAR_OK;
801 }
802 
SKF_DecryptFinal(HANDLE hKey,BYTE * pbDecryptedData,ULONG * pulDecryptedDataLen)803 ULONG DEVAPI SKF_DecryptFinal(
804 	HANDLE hKey,
805 	BYTE *pbDecryptedData,
806 	ULONG *pulDecryptedDataLen)
807 {
808 	if (!pulDecryptedDataLen)
809 		return SAR_INVALIDPARAMERR;
810 	*pulDecryptedDataLen = 0;
811 	return SAR_OK;
812 }
813 
SKF_DigestInit(DEVHANDLE hDev,ULONG ulAlgID,ECCPUBLICKEYBLOB * pPubKey,BYTE * pbID,ULONG ulIDLen,HANDLE * phHash)814 ULONG DEVAPI SKF_DigestInit(
815 	DEVHANDLE hDev,
816 	ULONG ulAlgID,
817 	ECCPUBLICKEYBLOB *pPubKey,
818 	BYTE *pbID,
819 	ULONG ulIDLen,
820 	HANDLE *phHash)
821 {
822 	if (!phHash)
823 		return SAR_INVALIDPARAMERR;
824 	*phHash = hHashHandle;
825 	return SAR_OK;
826 }
827 
SKF_Digest(HANDLE hHash,BYTE * pbData,ULONG ulDataLen,BYTE * pbHashData,ULONG * pulHashLen)828 ULONG DEVAPI SKF_Digest(
829 	HANDLE hHash,
830 	BYTE *pbData,
831 	ULONG ulDataLen,
832 	BYTE *pbHashData,
833 	ULONG *pulHashLen)
834 {
835 	if (!pulHashLen)
836 		return SAR_INVALIDPARAMERR;
837 	*pulHashLen = 32;
838 	return SAR_OK;
839 }
840 
SKF_DigestUpdate(HANDLE hHash,BYTE * pbData,ULONG ulDataLen)841 ULONG DEVAPI SKF_DigestUpdate(
842 	HANDLE hHash,
843 	BYTE *pbData,
844 	ULONG ulDataLen)
845 {
846 	return SAR_OK;
847 }
848 
SKF_DigestFinal(HANDLE hHash,BYTE * pbHashData,ULONG * pulHashLen)849 ULONG DEVAPI SKF_DigestFinal(
850 	HANDLE hHash,
851 	BYTE *pbHashData,
852 	ULONG *pulHashLen)
853 {
854 	if (!pulHashLen)
855 		return SAR_INVALIDPARAMERR;
856 	*pulHashLen = 32;
857 	return SAR_OK;
858 }
859 
SKF_MacInit(HANDLE hKey,BLOCKCIPHERPARAM * pMacParam,HANDLE * phMac)860 ULONG DEVAPI SKF_MacInit(
861 	HANDLE hKey,
862 	BLOCKCIPHERPARAM *pMacParam,
863 	HANDLE *phMac)
864 {
865 	if (!phMac)
866 		return SAR_INVALIDPARAMERR;
867 	*phMac = hMacHandle;
868 	return SAR_OK;
869 }
870 
SKF_Mac(HANDLE hMac,BYTE * pbData,ULONG ulDataLen,BYTE * pbMacData,ULONG * pulMacLen)871 ULONG DEVAPI SKF_Mac(
872 	HANDLE hMac,
873 	BYTE *pbData,
874 	ULONG ulDataLen,
875 	BYTE *pbMacData,
876 	ULONG *pulMacLen)
877 {
878 	if (!pulMacLen)
879 		return SAR_INVALIDPARAMERR;
880 	*pulMacLen = 16;
881 	return SAR_OK;
882 }
883 
SKF_MacUpdate(HANDLE hMac,BYTE * pbData,ULONG ulDataLen)884 ULONG DEVAPI SKF_MacUpdate(
885 	HANDLE hMac,
886 	BYTE *pbData,
887 	ULONG ulDataLen)
888 {
889 	return SAR_OK;
890 }
891 
SKF_MacFinal(HANDLE hMac,BYTE * pbMacData,ULONG * pulMacDataLen)892 ULONG DEVAPI SKF_MacFinal(
893 	HANDLE hMac,
894 	BYTE *pbMacData,
895 	ULONG *pulMacDataLen)
896 {
897 	if (!pulMacDataLen)
898 		return SAR_INVALIDPARAMERR;
899 	*pulMacDataLen = 16;
900 	return SAR_OK;
901 }
902 
SKF_CloseHandle(HANDLE hHandle)903 ULONG DEVAPI SKF_CloseHandle(
904 	HANDLE hHandle)
905 {
906 	return SAR_OK;
907 }
908