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