mirror of
https://github.com/guanzhi/GmSSL.git
synced 2026-08-09 15:33:58 +08:00
fast SMS4 with Intel AVX2/KNC-NI
This commit is contained in:
BIN
engines/skf/a.out
Executable file
BIN
engines/skf/a.out
Executable file
Binary file not shown.
@@ -143,9 +143,6 @@ typedef HANDLE HCONTAINER;
|
||||
#define SECURE_USER_ACCOUNT 0x00000010
|
||||
#define SECURE_ANYONE_ACCOUNT 0x000000FF
|
||||
|
||||
#define DEV_ABSENT_STATE 0x00000000
|
||||
#define DEV_PRESENT_STATE 0x00000001
|
||||
#define DEV_UNKNOW_STATE 0x00000010
|
||||
|
||||
|
||||
|
||||
@@ -259,6 +256,10 @@ ULONG DEVAPI SKF_EnumDev(BOOL bPresent,
|
||||
ULONG DEVAPI SKF_ConnectDev(LPSTR szName,
|
||||
DEVHANDLE *phDev);
|
||||
ULONG DEVAPI SKF_DisConnectDev(DEVHANDLE hDev);
|
||||
|
||||
#define DEV_ABSENT_STATE 0x00000000
|
||||
#define DEV_PRESENT_STATE 0x00000001
|
||||
#define DEV_UNKNOW_STATE 0x00000010
|
||||
ULONG DEVAPI SKF_GetDevState(LPSTR szDevName,
|
||||
ULONG *pulDevState);
|
||||
ULONG DEVAPI SKF_SetLabel(DEVHANDLE hDev,
|
||||
@@ -354,17 +355,30 @@ ULONG DEVAPI SKF_OpenContainer(HAPPLICATION hApplication,
|
||||
LPSTR szContainerName,
|
||||
HCONTAINER *phContainer);
|
||||
ULONG DEVAPI SKF_CloseContainer(HCONTAINER hContainer);
|
||||
|
||||
#define CONTAINER_TYPE_UNDEF 0
|
||||
#define CONTAINER_TYPE_RSA 1
|
||||
#define CONTAINER_TYPE_ECC 2
|
||||
ULONG DEVAPI SKF_GetContainerType(HCONTAINER hContainer,
|
||||
ULONG *pulContainerType);
|
||||
|
||||
ULONG DEVAPI SKF_ImportCertificate(HCONTAINER hContainer,
|
||||
BOOL bSignFlag,
|
||||
BOOL bExportSignKey,
|
||||
BYTE *pbCert,
|
||||
ULONG ulCertLen);
|
||||
|
||||
ULONG DEVAPI SKF_ExportCertificate(HCONTAINER hContainer,
|
||||
BOOL bSignFlag,
|
||||
BYTE *pbCert,
|
||||
ULONG *pulCertLen);
|
||||
|
||||
ULONG DEVAPI SKF_ExportPublicKey(HCONTAINER hContainer,
|
||||
BOOL bSignFlag,
|
||||
BYTE *pbBlob,
|
||||
ULONG *pulBlobLen);
|
||||
|
||||
|
||||
|
||||
ULONG DEVAPI SKF_GenRandom(DEVHANDLE hDev,
|
||||
BYTE *pbRandom,
|
||||
ULONG ulRandomLen);
|
||||
@@ -409,14 +423,16 @@ ULONG DEVAPI SKF_ExtRSAPriKeyOperation(DEVHANDLE hDev,
|
||||
ULONG ulInputLen,
|
||||
BYTE *pbOutput,
|
||||
ULONG *pulOutputLen);
|
||||
|
||||
ULONG DEVAPI SKF_GenECCKeyPair(HCONTAINER hContainer,
|
||||
ULONG ulAlgId,
|
||||
ECCPUBLICKEYBLOB *pBlob);
|
||||
ULONG DEVAPI SKF_ImportECCKeyPair(HCONTAINER hContainer,
|
||||
PENVELOPEDKEYBLOB pEnvelopedKeyBlob);
|
||||
|
||||
ULONG DEVAPI SKF_ECCSignData(HCONTAINER hContainer,
|
||||
BYTE *pbData,
|
||||
ULONG ulDataLen,
|
||||
BYTE *pbDigest,
|
||||
ULONG ulDigestLen,
|
||||
PECCSIGNATUREBLOB pSignature);
|
||||
|
||||
ULONG DEVAPI SKF_ECCVerify(DEVHANDLE hDev,
|
||||
@@ -439,7 +455,7 @@ ULONG DEVAPI SKF_ExtECCDecrypt(DEVHANDLE hDev,
|
||||
PECCCIPHERBLOB pCipherText,
|
||||
BYTE *pbPlainText,
|
||||
ULONG *pulPlainTextLen);
|
||||
ULONG DEVAPI SKF_ExtECCSign(DEVHANDLE hDev,
|
||||
ULONG DEVAPI SKF_ExtECCSign(DEVHANDLE hDev,
|
||||
ECCPRIVATEKEYBLOB *pECCPriKeyBlob,
|
||||
BYTE *pbData,
|
||||
ULONG ulDataLen,
|
||||
@@ -449,6 +465,7 @@ ULONG DEVAPI SKF_ExtECCVerify(DEVHANDLE hDev,
|
||||
BYTE *pbData,
|
||||
ULONG ulDataLen,
|
||||
PECCSIGNATUREBLOB pSignature);
|
||||
|
||||
ULONG DEVAPI SKF_GenerateAgreementDataWithECC(HCONTAINER hContainer,
|
||||
ULONG ulAlgId,
|
||||
ECCPUBLICKEYBLOB *pTempECCPubKeyBlob,
|
||||
@@ -471,10 +488,8 @@ ULONG DEVAPI SKF_GenerateKeyWithECC(HANDLE hAgreementHandle,
|
||||
BYTE *pbID,
|
||||
ULONG ulIDLen,
|
||||
HANDLE *phKeyHandle);
|
||||
ULONG DEVAPI SKF_ExportPublicKey(HCONTAINER hContainer,
|
||||
BOOL bSignFlag,
|
||||
BYTE *pbBlob,
|
||||
ULONG *pulBlobLen);
|
||||
|
||||
|
||||
ULONG DEVAPI SKF_ImportSessionKey(HCONTAINER hContainer,
|
||||
ULONG ulAlgId,
|
||||
BYTE *pbWrapedData,
|
||||
@@ -484,6 +499,7 @@ ULONG DEVAPI SKF_SetSymmKey(DEVHANDLE hDev,
|
||||
BYTE *pbKey,
|
||||
ULONG ulAlgID,
|
||||
HANDLE *phKey);
|
||||
|
||||
ULONG DEVAPI SKF_EncryptInit(HANDLE hKey,
|
||||
BLOCKCIPHERPARAM EncryptParam);
|
||||
ULONG DEVAPI SKF_Encrypt(HANDLE hKey,
|
||||
@@ -514,6 +530,7 @@ ULONG DEVAPI SKF_DecryptUpdate(HANDLE hKey,
|
||||
ULONG DEVAPI SKF_DecryptFinal(HANDLE hKey,
|
||||
BYTE *pbDecryptedData,
|
||||
ULONG *pulDecryptedDataLen);
|
||||
|
||||
ULONG DEVAPI SKF_DigestInit(DEVHANDLE hDev,
|
||||
ULONG ulAlgID,
|
||||
ECCPUBLICKEYBLOB *pPubKey,
|
||||
|
||||
@@ -2,24 +2,14 @@
|
||||
#include <string.h>
|
||||
#include "skf.h"
|
||||
|
||||
#define DEV_NAME "dev0"
|
||||
#define DEV_NAME "skf-soft-token"
|
||||
#define DEV_NAME_LIST DEV_NAME"\0"
|
||||
#define APP_NAME "app0"
|
||||
#define APP_NAME "default-app"
|
||||
#define APP_NAME_LIST APP_NAME"\0"
|
||||
#define CONTAINER_NAME "container0"
|
||||
#define CONTAINER_NAME_LIST CONTAINER_NAME"\0"
|
||||
#define CONTAINER_TYPE_UNDEF 0
|
||||
#define CONTAINER_TYPE_RSA 1
|
||||
#define CONTAINER_TYPE_ECC 2
|
||||
|
||||
|
||||
int default_dev = 1;
|
||||
int default_app = 1;
|
||||
int default_container = 1;
|
||||
DEVHANDLE DEV_HANDLE = &default_dev;
|
||||
HAPPLICATION APP_HANDLE = &default_app;
|
||||
HCONTAINER CONTAINER_HANDLE = &default_container;
|
||||
|
||||
|
||||
ULONG DEVAPI SKF_WaitForDevEvent(LPSTR szDevName,
|
||||
ULONG *pulDevNameLen, ULONG *pulEvent)
|
||||
@@ -36,39 +26,12 @@ ULONG DEVAPI SKF_EnumDev(BOOL bPresent,
|
||||
LPSTR szNameList,
|
||||
ULONG *pulSize)
|
||||
{
|
||||
if (!szNameList) {
|
||||
*pulSize = sizeof(DEV_NAME_LIST);
|
||||
return SAR_OK;
|
||||
}
|
||||
|
||||
if (*pulSize < sizeof(DEV_NAME_LIST)) {
|
||||
return SAR_BUFFER_TOO_SMALL;
|
||||
}
|
||||
|
||||
memcpy(szNameList, DEV_NAME_LIST, sizeof(DEV_NAME_LIST));
|
||||
*pulSize = sizeof(DEV_NAME_LIST);
|
||||
|
||||
return SAR_OK;
|
||||
}
|
||||
|
||||
ULONG DEVAPI SKF_ConnectDev(LPSTR szName,
|
||||
DEVHANDLE *phDev)
|
||||
{
|
||||
printf("%s\n", (char *)szName);
|
||||
|
||||
|
||||
if (!phDev) {
|
||||
printf("shit\n");
|
||||
return SAR_INVALIDPARAMERR;
|
||||
}
|
||||
|
||||
if (memcmp(szName, DEV_NAME, sizeof(DEV_NAME))) {
|
||||
printf("%s %s\n", szName, DEV_NAME);
|
||||
return SAR_FAIL;
|
||||
}
|
||||
|
||||
*phDev = DEV_HANDLE;
|
||||
|
||||
return SAR_OK;
|
||||
}
|
||||
|
||||
@@ -80,23 +43,17 @@ ULONG DEVAPI SKF_DisConnectDev(DEVHANDLE hDev)
|
||||
ULONG DEVAPI SKF_GetDevState(LPSTR szDevName,
|
||||
ULONG *pulDevState)
|
||||
{
|
||||
if (!szDevName || !pulDevState) {
|
||||
if (!pulDevState) {
|
||||
return SAR_INVALIDPARAMERR;
|
||||
}
|
||||
|
||||
if (memcmp(szDevName, DEV_NAME, sizeof(DEV_NAME))) {
|
||||
return SAR_FAIL;
|
||||
}
|
||||
|
||||
*pulDevState = DEV_PRESENT_STATE;
|
||||
|
||||
return SAR_OK;
|
||||
}
|
||||
|
||||
ULONG DEVAPI SKF_SetLabel(DEVHANDLE hDev,
|
||||
LPSTR szLabel)
|
||||
{
|
||||
return SAR_NOTSUPPORTYETERR;
|
||||
return SAR_OK;
|
||||
}
|
||||
|
||||
ULONG DEVAPI SKF_GetDevInfo(DEVHANDLE hDev,
|
||||
@@ -131,12 +88,12 @@ ULONG DEVAPI SKF_GetDevInfo(DEVHANDLE hDev,
|
||||
ULONG DEVAPI SKF_LockDev(DEVHANDLE hDev,
|
||||
ULONG ulTimeOut)
|
||||
{
|
||||
return SAR_NOTSUPPORTYETERR;
|
||||
return SAR_OK;
|
||||
}
|
||||
|
||||
ULONG DEVAPI SKF_UnlockDev(DEVHANDLE hDev)
|
||||
{
|
||||
return SAR_NOTSUPPORTYETERR;
|
||||
return SAR_OK;
|
||||
}
|
||||
|
||||
ULONG DEVAPI SKF_Transmit(DEVHANDLE hDev,
|
||||
@@ -145,14 +102,14 @@ ULONG DEVAPI SKF_Transmit(DEVHANDLE hDev,
|
||||
BYTE *pbData,
|
||||
ULONG *pulDataLen)
|
||||
{
|
||||
return SAR_NOTSUPPORTYETERR;
|
||||
return SAR_OK;
|
||||
}
|
||||
|
||||
ULONG DEVAPI SKF_ChangeDevAuthKey(DEVHANDLE hDev,
|
||||
BYTE *pbKeyValue,
|
||||
ULONG ulKeyLen)
|
||||
{
|
||||
return SAR_NOTSUPPORTYETERR;
|
||||
return SAR_OK;
|
||||
}
|
||||
|
||||
ULONG DEVAPI SKF_DevAuth(DEVHANDLE hDev,
|
||||
@@ -168,7 +125,7 @@ ULONG DEVAPI SKF_ChangePIN(HAPPLICATION hApplication,
|
||||
LPSTR szNewPin,
|
||||
ULONG *pulRetryCount)
|
||||
{
|
||||
return SAR_NOTSUPPORTYETERR;
|
||||
return SAR_OK;
|
||||
}
|
||||
|
||||
LONG DEVAPI SKF_GetPINInfo(HAPPLICATION hApplication,
|
||||
@@ -193,12 +150,12 @@ ULONG DEVAPI SKF_UnblockPIN(HAPPLICATION hApplication,
|
||||
LPSTR szNewUserPIN,
|
||||
ULONG *pulRetryCount)
|
||||
{
|
||||
return SAR_NOTSUPPORTYETERR;
|
||||
return SAR_OK;
|
||||
}
|
||||
|
||||
ULONG DEVAPI SKF_ClearSecureState(HAPPLICATION hApplication)
|
||||
{
|
||||
return SAR_NOTSUPPORTYETERR;
|
||||
return SAR_OK;
|
||||
}
|
||||
|
||||
ULONG DEVAPI SKF_CreateApplication(DEVHANDLE hDev,
|
||||
@@ -210,7 +167,7 @@ ULONG DEVAPI SKF_CreateApplication(DEVHANDLE hDev,
|
||||
DWORD dwCreateFileRights,
|
||||
HAPPLICATION *phApplication)
|
||||
{
|
||||
return SAR_NOTSUPPORTYETERR;
|
||||
return SAR_OK;
|
||||
}
|
||||
|
||||
ULONG DEVAPI SKF_EnumApplication(DEVHANDLE hDev,
|
||||
@@ -221,45 +178,31 @@ ULONG DEVAPI SKF_EnumApplication(DEVHANDLE hDev,
|
||||
*pulSize = sizeof(APP_NAME_LIST);
|
||||
return SAR_OK;
|
||||
}
|
||||
|
||||
if (*pulSize < sizeof(APP_NAME_LIST)) {
|
||||
return SAR_BUFFER_TOO_SMALL;
|
||||
}
|
||||
|
||||
memcpy(szAppName, APP_NAME_LIST, sizeof(APP_NAME_LIST));
|
||||
|
||||
return SAR_OK;
|
||||
}
|
||||
|
||||
ULONG DEVAPI SKF_DeleteApplication(DEVHANDLE hDev,
|
||||
LPSTR szAppName)
|
||||
{
|
||||
return SAR_NOTSUPPORTYETERR;
|
||||
return SAR_OK;
|
||||
}
|
||||
|
||||
ULONG DEVAPI SKF_OpenApplication(DEVHANDLE hDev,
|
||||
LPSTR szAppName,
|
||||
HAPPLICATION *phApplication)
|
||||
{
|
||||
if (!szAppName || !phApplication) {
|
||||
if (!phApplication) {
|
||||
return SAR_INVALIDPARAMERR;
|
||||
}
|
||||
|
||||
if (hDev != DEV_HANDLE || memcmp(szAppName, APP_NAME, sizeof(APP_NAME))) {
|
||||
return SAR_FAIL;
|
||||
}
|
||||
|
||||
*phApplication = APP_HANDLE;
|
||||
|
||||
return SAR_OK;
|
||||
}
|
||||
|
||||
ULONG DEVAPI SKF_CloseApplication(HAPPLICATION hApplication)
|
||||
{
|
||||
if (hApplication != APP_HANDLE) {
|
||||
return SAR_FAIL;
|
||||
}
|
||||
|
||||
return SAR_OK;
|
||||
}
|
||||
|
||||
@@ -315,13 +258,13 @@ ULONG DEVAPI SKF_CreateContainer(HAPPLICATION hApplication,
|
||||
LPSTR szContainerName,
|
||||
HCONTAINER *phContainer)
|
||||
{
|
||||
return SAR_NOTSUPPORTYETERR;
|
||||
return SAR_OK;
|
||||
}
|
||||
|
||||
ULONG DEVAPI SKF_DeleteContainer(HAPPLICATION hApplication,
|
||||
LPSTR szContainerName)
|
||||
{
|
||||
return SAR_NOTSUPPORTYETERR;
|
||||
return SAR_OK;
|
||||
}
|
||||
|
||||
ULONG DEVAPI SKF_EnumContainer(HAPPLICATION hApplication,
|
||||
@@ -331,22 +274,14 @@ ULONG DEVAPI SKF_EnumContainer(HAPPLICATION hApplication,
|
||||
if (!pulSize) {
|
||||
return SAR_INVALIDPARAMERR;
|
||||
}
|
||||
|
||||
if (hApplication != APP_HANDLE) {
|
||||
return SAR_FAIL;
|
||||
}
|
||||
|
||||
if (!szContainerName) {
|
||||
*pulSize = sizeof(CONTAINER_NAME_LIST);
|
||||
return SAR_OK;
|
||||
}
|
||||
|
||||
if (*pulSize < sizeof(CONTAINER_NAME_LIST)) {
|
||||
return SAR_BUFFER_TOO_SMALL;
|
||||
}
|
||||
|
||||
memcpy(szContainerName, CONTAINER_NAME_LIST, sizeof(CONTAINER_NAME_LIST));
|
||||
|
||||
return SAR_OK;
|
||||
}
|
||||
|
||||
@@ -354,25 +289,11 @@ ULONG DEVAPI SKF_OpenContainer(HAPPLICATION hApplication,
|
||||
LPSTR szContainerName,
|
||||
HCONTAINER *phContainer)
|
||||
{
|
||||
if (!szContainerName || !phContainer) {
|
||||
return SAR_INVALIDPARAMERR;
|
||||
}
|
||||
|
||||
if (hApplication != APP_HANDLE || memcmp(szContainerName, CONTAINER_NAME, sizeof(CONTAINER_NAME))) {
|
||||
return SAR_FAIL;
|
||||
}
|
||||
|
||||
*phContainer = CONTAINER_HANDLE;
|
||||
|
||||
return SAR_OK;
|
||||
}
|
||||
|
||||
ULONG DEVAPI SKF_CloseContainer(HCONTAINER hContainer)
|
||||
{
|
||||
if (hContainer != CONTAINER_HANDLE) {
|
||||
return SAR_FAIL;
|
||||
}
|
||||
|
||||
return SAR_OK;
|
||||
}
|
||||
|
||||
@@ -382,13 +303,7 @@ ULONG DEVAPI SKF_GetContainerType(HCONTAINER hContainer,
|
||||
if (!pulContainerType) {
|
||||
return SAR_INVALIDPARAMERR;
|
||||
}
|
||||
|
||||
if (hContainer != CONTAINER_HANDLE) {
|
||||
return SAR_FAIL;
|
||||
}
|
||||
|
||||
*pulContainerType = CONTAINER_TYPE_UNDEF;
|
||||
|
||||
*pulContainerType = CONTAINER_TYPE_ECC;
|
||||
return SAR_OK;
|
||||
}
|
||||
|
||||
@@ -397,7 +312,7 @@ ULONG DEVAPI SKF_ImportCertificate(HCONTAINER hContainer,
|
||||
BYTE *pbCert,
|
||||
ULONG ulCertLen)
|
||||
{
|
||||
return SAR_NOTSUPPORTYETERR;
|
||||
return SAR_OK;
|
||||
}
|
||||
|
||||
ULONG DEVAPI SKF_ExportCertificate(HCONTAINER hContainer,
|
||||
@@ -412,19 +327,6 @@ ULONG DEVAPI SKF_GenRandom(DEVHANDLE hDev,
|
||||
BYTE *pbRandom,
|
||||
ULONG ulRandomLen)
|
||||
{
|
||||
/*
|
||||
if (!pbRandom || ulRandomLen > 100 * 1024 * 1024) {
|
||||
return SAR_INVALIDPARAMERR;
|
||||
}
|
||||
|
||||
if (hDev != DEV_HANDLE) {
|
||||
return SAR_FAIL;
|
||||
}
|
||||
|
||||
if (!RAND_pseudo_bytes(pbRandom, ulRandomLen)) {
|
||||
return SAR_GENRANDERR;
|
||||
}
|
||||
*/
|
||||
return SAR_OK;
|
||||
}
|
||||
|
||||
@@ -632,13 +534,13 @@ ULONG DEVAPI SKF_SetSymmKey(DEVHANDLE hDev,
|
||||
ULONG ulAlgID,
|
||||
HANDLE *phKey)
|
||||
{
|
||||
return SAR_NOTSUPPORTYETERR;
|
||||
return SAR_OK;
|
||||
}
|
||||
|
||||
ULONG DEVAPI SKF_EncryptInit(HANDLE hKey,
|
||||
BLOCKCIPHERPARAM EncryptParam)
|
||||
{
|
||||
return SAR_NOTSUPPORTYETERR;
|
||||
return SAR_OK;
|
||||
}
|
||||
|
||||
ULONG DEVAPI SKF_Encrypt(HANDLE hKey,
|
||||
@@ -647,7 +549,7 @@ ULONG DEVAPI SKF_Encrypt(HANDLE hKey,
|
||||
BYTE *pbEncryptedData,
|
||||
ULONG *pulEncryptedLen)
|
||||
{
|
||||
return SAR_NOTSUPPORTYETERR;
|
||||
return SAR_OK;
|
||||
}
|
||||
|
||||
ULONG DEVAPI SKF_EncryptUpdate(HANDLE hKey,
|
||||
@@ -656,20 +558,20 @@ ULONG DEVAPI SKF_EncryptUpdate(HANDLE hKey,
|
||||
BYTE *pbEncryptedData,
|
||||
ULONG *pulEncryptedLen)
|
||||
{
|
||||
return SAR_NOTSUPPORTYETERR;
|
||||
return SAR_OK;
|
||||
}
|
||||
|
||||
ULONG DEVAPI SKF_EncryptFinal(HANDLE hKey,
|
||||
BYTE *pbEncryptedData,
|
||||
ULONG *pulEncryptedDataLen)
|
||||
{
|
||||
return SAR_NOTSUPPORTYETERR;
|
||||
return SAR_OK;
|
||||
}
|
||||
|
||||
ULONG DEVAPI SKF_DecryptInit(HANDLE hKey,
|
||||
BLOCKCIPHERPARAM DecryptParam)
|
||||
{
|
||||
return SAR_NOTSUPPORTYETERR;
|
||||
return SAR_OK;
|
||||
}
|
||||
|
||||
ULONG DEVAPI SKF_Decrypt(HANDLE hKey,
|
||||
@@ -678,7 +580,7 @@ ULONG DEVAPI SKF_Decrypt(HANDLE hKey,
|
||||
BYTE *pbData,
|
||||
ULONG *pulDataLen)
|
||||
{
|
||||
return SAR_NOTSUPPORTYETERR;
|
||||
return SAR_OK;
|
||||
}
|
||||
|
||||
ULONG DEVAPI SKF_DecryptUpdate(HANDLE hKey,
|
||||
@@ -687,14 +589,14 @@ ULONG DEVAPI SKF_DecryptUpdate(HANDLE hKey,
|
||||
BYTE *pbData,
|
||||
ULONG *pulDataLen)
|
||||
{
|
||||
return SAR_NOTSUPPORTYETERR;
|
||||
return SAR_OK;
|
||||
}
|
||||
|
||||
ULONG DEVAPI SKF_DecryptFinal(HANDLE hKey,
|
||||
BYTE *pbDecryptedData,
|
||||
ULONG *pulDecryptedDataLen)
|
||||
{
|
||||
return SAR_NOTSUPPORTYETERR;
|
||||
return SAR_OK;
|
||||
}
|
||||
|
||||
ULONG DEVAPI SKF_DigestInit(DEVHANDLE hDev,
|
||||
@@ -4,45 +4,81 @@
|
||||
#include <assert.h>
|
||||
#include "skf.h"
|
||||
|
||||
#define AUTH_RAND_LEN 16
|
||||
#define AUTH_DATA_LEN 16
|
||||
#define AUTH_KEY_LEN 16
|
||||
|
||||
int main(int argc, char **argv)
|
||||
{
|
||||
ULONG rv;
|
||||
BYTE buf[2048];
|
||||
ULONG len;
|
||||
|
||||
BOOL bPresent = TRUE;
|
||||
CHAR devNameList[256];
|
||||
LPSTR devName;
|
||||
DEVHANDLE hDev;
|
||||
DEVHANDLE hDev = NULL;
|
||||
ULONG devState;
|
||||
char *devStateStr;
|
||||
DEVINFO devInfo;
|
||||
BYTE authData[16];
|
||||
|
||||
|
||||
BYTE authRand[AUTH_RAND_LEN];
|
||||
BYTE authData[AUTH_DATA_LEN];
|
||||
BYTE authKey[AUTH_KEY_LEN];
|
||||
BLOCKCIPHERPARAM authParam;
|
||||
HANDLE hAuthKey = NULL;
|
||||
|
||||
CHAR appNameList[256];
|
||||
LPSTR appName;
|
||||
HAPPLICATION hApp;
|
||||
HAPPLICATION hApp = NULL;
|
||||
|
||||
CHAR containerNameList[256];
|
||||
LPSTR containerName;
|
||||
HCONTAINER hContainer;
|
||||
HCONTAINER hContainer = NULL;
|
||||
ULONG containerType;
|
||||
char *containerTypeStr;
|
||||
|
||||
BYTE dgst[32];
|
||||
ULONG dgstLen = sizeof(dgst);
|
||||
ECCSIGNATUREBLOB sigblob;
|
||||
|
||||
|
||||
len = sizeof(devNameList);
|
||||
rv = SKF_EnumDev(bPresent, devNameList, &len);
|
||||
assert(rv == SAR_OK);
|
||||
if ((rv = SKF_EnumDev(bPresent, devNameList, &len)) != SAR_OK) {
|
||||
goto end;
|
||||
}
|
||||
|
||||
devName = devNameList;
|
||||
printf(" Device Name : %s\n", devName);
|
||||
printf("Device Name : %s\n", devName);
|
||||
|
||||
rv = SKF_GetDevState(devName, &devState);
|
||||
assert(rv == SAR_OK);
|
||||
printf(" Device State: %ld\n", devState);
|
||||
|
||||
rv = SKF_ConnectDev(devName, &hDev);
|
||||
assert(rv == SAR_OK);
|
||||
if ((rv = SKF_GetDevState(devName, &devState)) != SAR_OK) {
|
||||
goto end;
|
||||
}
|
||||
|
||||
rv = SKF_GetDevInfo(hDev, &devInfo);
|
||||
assert(rv == SAR_OK);
|
||||
|
||||
switch (devState) {
|
||||
case DEV_ABSENT_STATE:
|
||||
devStateStr = "DEV_ABSENT_STATE";
|
||||
break;
|
||||
case DEV_PRESENT_STATE:
|
||||
devStateStr = "DEV_PRESENT_STATE";
|
||||
break;
|
||||
case DEV_UNKNOW_STATE:
|
||||
devStateStr = "DEV_UNKNOW_STATE";
|
||||
break;
|
||||
default:
|
||||
devStateStr = "(undefined)";
|
||||
}
|
||||
printf("Device State: %s\n", devStateStr);
|
||||
|
||||
if ((rv = SKF_ConnectDev(devName, &hDev)) != SAR_OK) {
|
||||
goto end;
|
||||
}
|
||||
|
||||
if ((rv = SKF_GetDevInfo(hDev, &devInfo)) != SAR_OK) {
|
||||
goto end;
|
||||
}
|
||||
|
||||
printf("Device Info:\n");
|
||||
printf(" Device Version : %d.%d\n", devInfo.Version.major, devInfo.Version.minor);
|
||||
printf(" Manufacturer : %s\n", devInfo.Manufacturer);
|
||||
printf(" Issuer : %s\n", devInfo.Issuer);
|
||||
@@ -54,67 +90,119 @@ int main(int argc, char **argv)
|
||||
printf(" AlgAsymCap : 0x%08x\n", devInfo.AlgAsymCap);
|
||||
printf(" AlgHashCap : 0x%08x\n", devInfo.AlgHashCap);
|
||||
printf(" AlgHashCap : 0x%08x\n", devInfo.DevAuthAlgId);
|
||||
printf(" Total Space : %ld\n", devInfo.TotalSpace);
|
||||
printf(" Free Space : %ld\n", devInfo.FreeSpace);
|
||||
printf(" MaxECCBuffer : %ld\n", devInfo.MaxECCBufferSize);
|
||||
printf(" MaxBuffer : %ld\n", devInfo.MaxBufferSize);
|
||||
printf(" Total Space : %u\n", devInfo.TotalSpace);
|
||||
printf(" Free Space : %u\n", devInfo.FreeSpace);
|
||||
printf(" MaxECCBuffer : %u\n", devInfo.MaxECCBufferSize);
|
||||
printf(" MaxBuffer : %u\n", devInfo.MaxBufferSize);
|
||||
|
||||
|
||||
/* Device Authentication */
|
||||
if ((rv = SKF_GenRandom(hDev, authRand, sizeof(authRand))) != SAR_OK) {
|
||||
fprintf(stderr, "error: %s %d\n", __FILE__, __LINE__);
|
||||
goto end;
|
||||
}
|
||||
|
||||
ULONG ulAuthAlgId = devInfo.DevAuthAlgId;
|
||||
unsigned char pbAuthKey[16] = {0};
|
||||
if ((rv = SKF_SetSymmKey(hDev, authKey, devInfo.DevAuthAlgId, &hAuthKey)) != SAR_OK) {
|
||||
fprintf(stderr, "error: %s %d\n", __FILE__, __LINE__);
|
||||
goto end;
|
||||
}
|
||||
|
||||
bzero(&authParam, sizeof(authParam));
|
||||
if ((rv = SKF_EncryptInit(hAuthKey, authParam)) != SAR_OK) {
|
||||
fprintf(stderr, "error: %s %d\n", __FILE__, __LINE__);
|
||||
goto end;
|
||||
}
|
||||
|
||||
if ((rv = SKF_Encrypt(hAuthKey, authRand, sizeof(authRand), authData, &len)) != SAR_OK) {
|
||||
fprintf(stderr, "error: %s %d\n", __FILE__, __LINE__);
|
||||
goto end;
|
||||
}
|
||||
|
||||
if ((rv = SKF_DevAuth(hDev, authData, len)) != SAR_OK) {
|
||||
fprintf(stderr, "error: %s %d\n", __FILE__, __LINE__);
|
||||
goto end;
|
||||
}
|
||||
|
||||
printf("Device Authentication Passed.\n");
|
||||
|
||||
/* get the DevAuth challenge from GenRandom API
|
||||
* encrypt challenge with DevAuthKey
|
||||
*/
|
||||
rv = SKF_GenRandom(hDev, authRandom, sizeof(authRandom));
|
||||
|
||||
|
||||
rv = SKF_EncryptInit(hKey, param);
|
||||
|
||||
rv = SKF_Encrypt(hKey, authRandom, 16, authResponse, &ulAuthLen);
|
||||
|
||||
|
||||
rv = SKF_DevAuth(hDev, authData, authDataLen);
|
||||
assert(rv == SAR_OK);
|
||||
|
||||
|
||||
/*
|
||||
*/
|
||||
/* Open Application */
|
||||
|
||||
len = sizeof(appNameList);
|
||||
rv = SKF_EnumApplication(hDev, appNameList, &len);
|
||||
assert(rv == SAR_OK);
|
||||
|
||||
if ((rv = SKF_EnumApplication(hDev, appNameList, &len)) != SAR_OK) {
|
||||
goto end;
|
||||
}
|
||||
|
||||
appName = appNameList;
|
||||
printf("Application Name : %s\n", appName);
|
||||
|
||||
rv = SKF_OpenApplication(hDev, appName, &hApp);
|
||||
assert(rv == SAR_OK);
|
||||
|
||||
if ((rv = SKF_OpenApplication(hDev, appName, &hApp)) != SAR_OK) {
|
||||
goto end;
|
||||
}
|
||||
|
||||
/* Open Containter */
|
||||
|
||||
len = sizeof(containerNameList);
|
||||
rv = SKF_EnumContainer(hApp, containerNameList, &len);
|
||||
assert(rv == SAR_OK);
|
||||
|
||||
if ((rv = SKF_EnumContainer(hApp, containerNameList, &len)) != SAR_OK) {
|
||||
goto end;
|
||||
}
|
||||
|
||||
containerName = containerNameList;
|
||||
printf("Container Name: %s\n", containerName);
|
||||
|
||||
rv = SKF_OpenContainer(hApp, containerName, &hContainer);
|
||||
assert(rv == SAR_OK);
|
||||
if ((rv = SKF_OpenContainer(hApp, containerName, &hContainer)) != SAR_OK) {
|
||||
goto end;
|
||||
}
|
||||
|
||||
rv = SKF_GetContainerType(hContainer, &containerType);
|
||||
assert(rv == SAR_OK);
|
||||
if ((rv = SKF_GetContainerType(hContainer, &containerType)) != SAR_OK) {
|
||||
goto end;
|
||||
}
|
||||
|
||||
printf("Container Type: %ld\n", containerType);
|
||||
switch (containerType) {
|
||||
case CONTAINER_TYPE_UNDEF:
|
||||
containerTypeStr = "Undef";
|
||||
break;
|
||||
case CONTAINER_TYPE_RSA:
|
||||
containerTypeStr = "RSA";
|
||||
break;
|
||||
case CONTAINER_TYPE_ECC:
|
||||
containerTypeStr = "ECC";
|
||||
break;
|
||||
default:
|
||||
containerTypeStr = "(error)";
|
||||
}
|
||||
printf("Container Type: %s\n", containerTypeStr);
|
||||
|
||||
|
||||
rv = SKF_CloseContainer(hContainer);
|
||||
assert(rv == SAR_OK);
|
||||
/* Sign */
|
||||
if ((rv = SKF_ECCSignData(hContainer, dgst, dgstLen, &sigblob)) != SAR_OK) {
|
||||
goto end;
|
||||
}
|
||||
|
||||
rv = SKF_CloseApplication(hApp);
|
||||
assert(rv == SAR_OK);
|
||||
/* Export Signing Public Key */
|
||||
if ((rv = SKF_ExportPublicKey(hContainer, TRUE, buf, &len)) != SAR_OK) {
|
||||
goto end;
|
||||
}
|
||||
|
||||
printf("Success\n");
|
||||
end:
|
||||
//SKF_CloseContainer(hContainer);
|
||||
//SKF_CloseApplication(hApp);
|
||||
return 0;
|
||||
}
|
||||
|
||||
int open_container(const char *dev, const char *app, const char *container,
|
||||
const unsigned char *authkey, size_t authkeylen)
|
||||
{
|
||||
DEVHANDLE hDev = NULL;
|
||||
DEVINFO devInfo;
|
||||
HAPPLICATION hApp = NULL;
|
||||
HCONTAINER hContainer = NULL;
|
||||
|
||||
|
||||
|
||||
return 0;
|
||||
}
|
||||
|
||||
|
||||
|
||||
BIN
engines/skf/skftest.o
Normal file
BIN
engines/skf/skftest.o
Normal file
Binary file not shown.
Reference in New Issue
Block a user