mirror of
https://github.com/guanzhi/GmSSL.git
synced 2026-05-17 13:56:25 +08:00
1549
src/skf/skf.c
1549
src/skf/skf.c
File diff suppressed because it is too large
Load Diff
1403
src/skf/skf.h
1403
src/skf/skf.h
File diff suppressed because it is too large
Load Diff
@@ -1,5 +1,5 @@
|
||||
/*
|
||||
* Copyright 2014-2022 The GmSSL Project. All Rights Reserved.
|
||||
* Copyright 2022 The GmSSL Project. All Rights Reserved.
|
||||
*
|
||||
* Licensed under the Apache License, Version 2.0 (the License); you may
|
||||
* not use this file except in compliance with the License.
|
||||
@@ -7,7 +7,6 @@
|
||||
* http://www.apache.org/licenses/LICENSE-2.0
|
||||
*/
|
||||
|
||||
|
||||
|
||||
#include <stdio.h>
|
||||
#include <stdlib.h>
|
||||
|
||||
1121
src/skf/skf_ext.c
1121
src/skf/skf_ext.c
File diff suppressed because it is too large
Load Diff
@@ -1,5 +1,5 @@
|
||||
/*
|
||||
* Copyright 2014-2022 The GmSSL Project. All Rights Reserved.
|
||||
* Copyright 2022 The GmSSL Project. All Rights Reserved.
|
||||
*
|
||||
* Licensed under the Apache License, Version 2.0 (the License); you may
|
||||
* not use this file except in compliance with the License.
|
||||
@@ -7,89 +7,88 @@
|
||||
* http://www.apache.org/licenses/LICENSE-2.0
|
||||
*/
|
||||
|
||||
|
||||
|
||||
#ifndef SKFUTIL_SKF_EXT_H
|
||||
#define SKFUTIL_SKF_EXT_H
|
||||
|
||||
|
||||
#include <stdio.h>
|
||||
#include "skf.h"
|
||||
|
||||
|
||||
#define SKF_NO_PADDING 0
|
||||
#define SKF_PKCS5_PADDING 1
|
||||
|
||||
#define SKF_DEV_STATE_ABSENT 0x00000000
|
||||
#define SKF_DEV_STATE_PRESENT 0x00000001
|
||||
#define SKF_DEV_STATE_UNKNOW 0x00000010
|
||||
|
||||
#define SKF_CONTAINER_TYPE_UNDEF 0
|
||||
#define SKF_CONTAINER_TYPE_RSA 1
|
||||
#define SKF_CONTAINER_TYPE_ECC 2
|
||||
|
||||
#define SKF_ENVELOPEDKEYBLOB_VERSION 1
|
||||
#define SKF_AUTHKEY_LENGTH 16
|
||||
#define SKF_AUTHRAND_LENGTH 16
|
||||
#define SKF_MAX_FILE_SIZE (256*1024)
|
||||
#define SKF_MAX_CERTIFICATE_SIZE (8*1024)
|
||||
|
||||
|
||||
#define SKF_DEFAULT_ADMIN_PIN_RETRY_COUNT 6
|
||||
#define SKF_DEFAULT_USER_PIN_RETRY_COUNT 6
|
||||
|
||||
#ifdef __cplusplus
|
||||
extern "C" {
|
||||
#endif
|
||||
|
||||
typedef struct {
|
||||
union {
|
||||
ECCPUBLICKEYBLOB ecc;
|
||||
RSAPUBLICKEYBLOB rsa;
|
||||
} u;
|
||||
} SKF_PUBLICKEYBLOB;
|
||||
#define SKF_MAX_PUBLICKEYBOLB_LENGTH sizeof(SKF_PUBLICKEYBLOB)
|
||||
|
||||
typedef struct {
|
||||
char *name;
|
||||
unsigned char *buf;
|
||||
int offset;
|
||||
int length;
|
||||
} SKF_FILE_OP_PARAMS;
|
||||
|
||||
|
||||
ULONG DEVAPI SKF_LoadLibrary(LPSTR so_path, LPSTR vendor);
|
||||
ULONG DEVAPI SKF_UnloadLibrary(void);
|
||||
ULONG DEVAPI SKF_OpenDevice(LPSTR devName, BYTE authKey[16], DEVINFO *devInfo, DEVHANDLE *phDev);
|
||||
ULONG DEVAPI SKF_CloseDevice(DEVHANDLE hDev);
|
||||
ULONG DEVAPI SKF_GetDevStateName(ULONG ulDevState, LPSTR *szName);
|
||||
ULONG DEVAPI SKF_GetContainerTypeName(ULONG ulContainerType, LPSTR *szName);
|
||||
ULONG DEVAPI SKF_GetAlgorName(ULONG ulAlgID, LPSTR *szName);
|
||||
ULONG DEVAPI SKF_PrintDevInfo(FILE *fp, const DEVINFO *devInfo);
|
||||
ULONG DEVAPI SKF_PrintRSAPublicKey(FILE *fp, const RSAPUBLICKEYBLOB *blob);
|
||||
ULONG DEVAPI SKF_PrintRSAPrivateKey(FILE *fp, const RSAPRIVATEKEYBLOB *blob);
|
||||
ULONG DEVAPI SKF_PrintECCPublicKey(FILE *fp, const ECCPUBLICKEYBLOB *blob);
|
||||
ULONG DEVAPI SKF_PrintECCPrivateKey(FILE *fp, const ECCPRIVATEKEYBLOB *blob);
|
||||
ULONG DEVAPI SKF_PrintECCCipher(FILE *fp, const ECCCIPHERBLOB *blob);
|
||||
ULONG DEVAPI SKF_PrintECCSignature(FILE *fp, const ECCSIGNATUREBLOB *blob);
|
||||
ULONG DEVAPI SKF_GetErrorString(ULONG ulError, LPSTR *szErrorStr);
|
||||
ULONG DEVAPI SKF_NewECCCipher(ULONG ulCipherLen, ECCCIPHERBLOB **cipherBlob);
|
||||
ULONG DEVAPI SKF_NewEnvelopedKey(ULONG ulCipherLen, ENVELOPEDKEYBLOB **envelopedKeyBlob);
|
||||
|
||||
/*
|
||||
ULONG DEVAPI SKF_ImportECCPrivateKey(DEVHANDLE hDev, HCONTAINER hContainer, EC_KEY *ec_key, ULONG symmAlgId);
|
||||
ULONG DEVAPI SKF_ImportRSAPrivateKey(DEVHANDLE hDev, HCONTAINER hContainer, RSA *rsa, ULONG symmAlgId);
|
||||
ULONG DEVAPI SKF_ImportPrivateKey(DEVHANDLE hDev, HCONTAINER hContainer, EVP_PKEY *pkey, ULONG symmAlgId);
|
||||
ULONG DEVAPI SKF_ExportECCPublicKey(HCONTAINER hContainer, BOOL bSign, EC_KEY **pp);
|
||||
ULONG DEVAPI SKF_ExportRSAPublicKey(HCONTAINER hContainer, BOOL bSign, RSA **pp);
|
||||
ULONG DEVAPI SKF_ExportEVPPublicKey(HCONTAINER hContainer, BOOL bSign, EVP_PKEY **pp);
|
||||
ULONG DEVAPI SKF_ImportX509CertificateByKeyUsage(HCONTAINER hContainer, X509 *x509);
|
||||
ULONG DEVAPI SKF_ImportX509Certificate(HCONTAINER hContainer, BOOL bSign, X509 *x509);
|
||||
ULONG DEVAPI SKF_ExportX509Certificate(HCONTAINER hContainer, BOOL bSign, X509 **px509);
|
||||
*/
|
||||
|
||||
|
||||
#ifdef __cplusplus
|
||||
}
|
||||
#endif
|
||||
#endif
|
||||
|
||||
#ifndef SKFUTIL_SKF_EXT_H
|
||||
#define SKFUTIL_SKF_EXT_H
|
||||
|
||||
|
||||
#include <stdio.h>
|
||||
#include "skf.h"
|
||||
|
||||
|
||||
#define SKF_NO_PADDING 0
|
||||
#define SKF_PKCS5_PADDING 1
|
||||
|
||||
#define SKF_DEV_STATE_ABSENT 0x00000000
|
||||
#define SKF_DEV_STATE_PRESENT 0x00000001
|
||||
#define SKF_DEV_STATE_UNKNOW 0x00000010
|
||||
|
||||
#define SKF_CONTAINER_TYPE_UNDEF 0
|
||||
#define SKF_CONTAINER_TYPE_RSA 1
|
||||
#define SKF_CONTAINER_TYPE_ECC 2
|
||||
|
||||
#define SKF_ENVELOPEDKEYBLOB_VERSION 1
|
||||
#define SKF_AUTHKEY_LENGTH 16
|
||||
#define SKF_AUTHRAND_LENGTH 16
|
||||
#define SKF_MAX_FILE_SIZE (256*1024)
|
||||
#define SKF_MAX_CERTIFICATE_SIZE (8*1024)
|
||||
|
||||
|
||||
#define SKF_DEFAULT_ADMIN_PIN_RETRY_COUNT 6
|
||||
#define SKF_DEFAULT_USER_PIN_RETRY_COUNT 6
|
||||
|
||||
#ifdef __cplusplus
|
||||
extern "C" {
|
||||
#endif
|
||||
|
||||
typedef struct {
|
||||
union {
|
||||
ECCPUBLICKEYBLOB ecc;
|
||||
RSAPUBLICKEYBLOB rsa;
|
||||
} u;
|
||||
} SKF_PUBLICKEYBLOB;
|
||||
#define SKF_MAX_PUBLICKEYBOLB_LENGTH sizeof(SKF_PUBLICKEYBLOB)
|
||||
|
||||
typedef struct {
|
||||
char *name;
|
||||
unsigned char *buf;
|
||||
int offset;
|
||||
int length;
|
||||
} SKF_FILE_OP_PARAMS;
|
||||
|
||||
|
||||
ULONG DEVAPI SKF_LoadLibrary(LPSTR so_path, LPSTR vendor);
|
||||
ULONG DEVAPI SKF_UnloadLibrary(void);
|
||||
ULONG DEVAPI SKF_OpenDevice(LPSTR devName, BYTE authKey[16], DEVINFO *devInfo, DEVHANDLE *phDev);
|
||||
ULONG DEVAPI SKF_CloseDevice(DEVHANDLE hDev);
|
||||
ULONG DEVAPI SKF_GetDevStateName(ULONG ulDevState, LPSTR *szName);
|
||||
ULONG DEVAPI SKF_GetContainerTypeName(ULONG ulContainerType, LPSTR *szName);
|
||||
ULONG DEVAPI SKF_GetAlgorName(ULONG ulAlgID, LPSTR *szName);
|
||||
ULONG DEVAPI SKF_PrintDevInfo(FILE *fp, const DEVINFO *devInfo);
|
||||
ULONG DEVAPI SKF_PrintRSAPublicKey(FILE *fp, const RSAPUBLICKEYBLOB *blob);
|
||||
ULONG DEVAPI SKF_PrintRSAPrivateKey(FILE *fp, const RSAPRIVATEKEYBLOB *blob);
|
||||
ULONG DEVAPI SKF_PrintECCPublicKey(FILE *fp, const ECCPUBLICKEYBLOB *blob);
|
||||
ULONG DEVAPI SKF_PrintECCPrivateKey(FILE *fp, const ECCPRIVATEKEYBLOB *blob);
|
||||
ULONG DEVAPI SKF_PrintECCCipher(FILE *fp, const ECCCIPHERBLOB *blob);
|
||||
ULONG DEVAPI SKF_PrintECCSignature(FILE *fp, const ECCSIGNATUREBLOB *blob);
|
||||
ULONG DEVAPI SKF_GetErrorString(ULONG ulError, LPSTR *szErrorStr);
|
||||
ULONG DEVAPI SKF_NewECCCipher(ULONG ulCipherLen, ECCCIPHERBLOB **cipherBlob);
|
||||
ULONG DEVAPI SKF_NewEnvelopedKey(ULONG ulCipherLen, ENVELOPEDKEYBLOB **envelopedKeyBlob);
|
||||
|
||||
/*
|
||||
ULONG DEVAPI SKF_ImportECCPrivateKey(DEVHANDLE hDev, HCONTAINER hContainer, EC_KEY *ec_key, ULONG symmAlgId);
|
||||
ULONG DEVAPI SKF_ImportRSAPrivateKey(DEVHANDLE hDev, HCONTAINER hContainer, RSA *rsa, ULONG symmAlgId);
|
||||
ULONG DEVAPI SKF_ImportPrivateKey(DEVHANDLE hDev, HCONTAINER hContainer, EVP_PKEY *pkey, ULONG symmAlgId);
|
||||
ULONG DEVAPI SKF_ExportECCPublicKey(HCONTAINER hContainer, BOOL bSign, EC_KEY **pp);
|
||||
ULONG DEVAPI SKF_ExportRSAPublicKey(HCONTAINER hContainer, BOOL bSign, RSA **pp);
|
||||
ULONG DEVAPI SKF_ExportEVPPublicKey(HCONTAINER hContainer, BOOL bSign, EVP_PKEY **pp);
|
||||
ULONG DEVAPI SKF_ImportX509CertificateByKeyUsage(HCONTAINER hContainer, X509 *x509);
|
||||
ULONG DEVAPI SKF_ImportX509Certificate(HCONTAINER hContainer, BOOL bSign, X509 *x509);
|
||||
ULONG DEVAPI SKF_ExportX509Certificate(HCONTAINER hContainer, BOOL bSign, X509 **px509);
|
||||
*/
|
||||
|
||||
|
||||
#ifdef __cplusplus
|
||||
}
|
||||
#endif
|
||||
#endif
|
||||
|
||||
1141
src/skf/skf_int.h
1141
src/skf/skf_int.h
File diff suppressed because it is too large
Load Diff
5461
src/skf/skf_lib.c
5461
src/skf/skf_lib.c
File diff suppressed because it is too large
Load Diff
@@ -1,5 +1,5 @@
|
||||
/*
|
||||
* Copyright 2014-2022 The GmSSL Project. All Rights Reserved.
|
||||
* Copyright 2022 The GmSSL Project. All Rights Reserved.
|
||||
*
|
||||
* Licensed under the Apache License, Version 2.0 (the License); you may
|
||||
* not use this file except in compliance with the License.
|
||||
@@ -7,132 +7,131 @@
|
||||
* http://www.apache.org/licenses/LICENSE-2.0
|
||||
*/
|
||||
|
||||
|
||||
|
||||
#include <stdio.h>
|
||||
#include <string.h>
|
||||
#include <stdlib.h>
|
||||
#include <dlfcn.h>
|
||||
#include "skf.h"
|
||||
#include "skf_ext.h"
|
||||
#include "skf_int.h"
|
||||
|
||||
#define SKFerr(e,r)
|
||||
|
||||
#define SKF_METHOD_BIND_FUNCTION_EX(func,name) \
|
||||
skf->func = (SKF_##func##_FuncPtr)dlsym(skf->dso, "SKF_"#name)
|
||||
|
||||
#define SKF_METHOD_BIND_FUNCTION(func) \
|
||||
SKF_METHOD_BIND_FUNCTION_EX(func,func)
|
||||
|
||||
|
||||
SKF_METHOD *SKF_METHOD_load_library(const char *so_path)
|
||||
{
|
||||
SKF_METHOD *ret = NULL;
|
||||
SKF_METHOD *skf = NULL;
|
||||
|
||||
if (!(skf = malloc(sizeof(*skf)))) {
|
||||
SKFerr(SKF_F_SKF_METHOD_LOAD_LIBRARY, ERR_R_MALLOC_FAILURE);
|
||||
goto end;
|
||||
}
|
||||
if (!(skf->dso = dlopen(so_path, RTLD_LAZY))) {
|
||||
SKFerr(SKF_F_SKF_METHOD_LOAD_LIBRARY, SKF_R_DSO_LOAD_FAILURE);
|
||||
goto end;
|
||||
}
|
||||
|
||||
SKF_METHOD_BIND_FUNCTION(WaitForDevEvent);
|
||||
SKF_METHOD_BIND_FUNCTION(CancelWaitForDevEvent);
|
||||
SKF_METHOD_BIND_FUNCTION(EnumDev);
|
||||
SKF_METHOD_BIND_FUNCTION(ConnectDev);
|
||||
SKF_METHOD_BIND_FUNCTION(DisConnectDev);
|
||||
SKF_METHOD_BIND_FUNCTION(GetDevState);
|
||||
SKF_METHOD_BIND_FUNCTION(SetLabel);
|
||||
SKF_METHOD_BIND_FUNCTION(GetDevInfo);
|
||||
SKF_METHOD_BIND_FUNCTION(LockDev);
|
||||
SKF_METHOD_BIND_FUNCTION(UnlockDev);
|
||||
SKF_METHOD_BIND_FUNCTION(Transmit);
|
||||
SKF_METHOD_BIND_FUNCTION(ChangeDevAuthKey);
|
||||
SKF_METHOD_BIND_FUNCTION(DevAuth);
|
||||
SKF_METHOD_BIND_FUNCTION(ChangePIN);
|
||||
SKF_METHOD_BIND_FUNCTION(GetPINInfo);
|
||||
SKF_METHOD_BIND_FUNCTION(VerifyPIN);
|
||||
SKF_METHOD_BIND_FUNCTION(UnblockPIN);
|
||||
SKF_METHOD_BIND_FUNCTION(ClearSecureState);
|
||||
SKF_METHOD_BIND_FUNCTION(CreateApplication);
|
||||
SKF_METHOD_BIND_FUNCTION(EnumApplication);
|
||||
SKF_METHOD_BIND_FUNCTION(DeleteApplication);
|
||||
SKF_METHOD_BIND_FUNCTION(OpenApplication);
|
||||
SKF_METHOD_BIND_FUNCTION(CloseApplication);
|
||||
SKF_METHOD_BIND_FUNCTION_EX(CreateObject,CreateFile);
|
||||
SKF_METHOD_BIND_FUNCTION_EX(DeleteObject,DeleteFile);
|
||||
SKF_METHOD_BIND_FUNCTION_EX(EnumObjects,EnumFiles);
|
||||
SKF_METHOD_BIND_FUNCTION_EX(GetObjectInfo,GetFileInfo);
|
||||
SKF_METHOD_BIND_FUNCTION_EX(ReadObject,ReadFile);
|
||||
SKF_METHOD_BIND_FUNCTION_EX(WriteObject,WriteFile);
|
||||
SKF_METHOD_BIND_FUNCTION(CreateContainer);
|
||||
SKF_METHOD_BIND_FUNCTION(DeleteContainer);
|
||||
SKF_METHOD_BIND_FUNCTION(EnumContainer);
|
||||
SKF_METHOD_BIND_FUNCTION(OpenContainer);
|
||||
SKF_METHOD_BIND_FUNCTION(CloseContainer);
|
||||
SKF_METHOD_BIND_FUNCTION(GetContainerType);
|
||||
SKF_METHOD_BIND_FUNCTION(ImportCertificate);
|
||||
SKF_METHOD_BIND_FUNCTION(ExportCertificate);
|
||||
SKF_METHOD_BIND_FUNCTION(ExportPublicKey);
|
||||
SKF_METHOD_BIND_FUNCTION(GenRandom);
|
||||
SKF_METHOD_BIND_FUNCTION(GenExtRSAKey);
|
||||
SKF_METHOD_BIND_FUNCTION(GenRSAKeyPair);
|
||||
SKF_METHOD_BIND_FUNCTION(ImportRSAKeyPair);
|
||||
SKF_METHOD_BIND_FUNCTION(RSASignData);
|
||||
SKF_METHOD_BIND_FUNCTION(RSAVerify);
|
||||
SKF_METHOD_BIND_FUNCTION(RSAExportSessionKey);
|
||||
SKF_METHOD_BIND_FUNCTION(ExtRSAPubKeyOperation);
|
||||
SKF_METHOD_BIND_FUNCTION(ExtRSAPriKeyOperation);
|
||||
SKF_METHOD_BIND_FUNCTION(GenECCKeyPair);
|
||||
SKF_METHOD_BIND_FUNCTION(ImportECCKeyPair);
|
||||
SKF_METHOD_BIND_FUNCTION(ECCSignData);
|
||||
SKF_METHOD_BIND_FUNCTION(ECCVerify);
|
||||
SKF_METHOD_BIND_FUNCTION(ECCExportSessionKey);
|
||||
SKF_METHOD_BIND_FUNCTION(ExtECCEncrypt);
|
||||
SKF_METHOD_BIND_FUNCTION(ExtECCDecrypt);
|
||||
SKF_METHOD_BIND_FUNCTION(ExtECCSign);
|
||||
SKF_METHOD_BIND_FUNCTION(ExtECCVerify);
|
||||
SKF_METHOD_BIND_FUNCTION(GenerateAgreementDataWithECC);
|
||||
SKF_METHOD_BIND_FUNCTION(GenerateAgreementDataAndKeyWithECC);
|
||||
SKF_METHOD_BIND_FUNCTION(GenerateKeyWithECC);
|
||||
SKF_METHOD_BIND_FUNCTION(ImportSessionKey);
|
||||
SKF_METHOD_BIND_FUNCTION(SetSymmKey);
|
||||
SKF_METHOD_BIND_FUNCTION(EncryptInit);
|
||||
SKF_METHOD_BIND_FUNCTION(Encrypt);
|
||||
SKF_METHOD_BIND_FUNCTION(EncryptUpdate);
|
||||
SKF_METHOD_BIND_FUNCTION(EncryptFinal);
|
||||
SKF_METHOD_BIND_FUNCTION(DecryptInit);
|
||||
SKF_METHOD_BIND_FUNCTION(Decrypt);
|
||||
SKF_METHOD_BIND_FUNCTION(DecryptUpdate);
|
||||
SKF_METHOD_BIND_FUNCTION(DecryptFinal);
|
||||
SKF_METHOD_BIND_FUNCTION(DigestInit);
|
||||
SKF_METHOD_BIND_FUNCTION(Digest);
|
||||
SKF_METHOD_BIND_FUNCTION(DigestUpdate);
|
||||
SKF_METHOD_BIND_FUNCTION(DigestFinal);
|
||||
SKF_METHOD_BIND_FUNCTION(MacInit);
|
||||
SKF_METHOD_BIND_FUNCTION(Mac);
|
||||
SKF_METHOD_BIND_FUNCTION(MacUpdate);
|
||||
SKF_METHOD_BIND_FUNCTION(MacFinal);
|
||||
SKF_METHOD_BIND_FUNCTION(CloseHandle);
|
||||
#ifdef SKF_HAS_ECCDECRYPT
|
||||
SKF_METHOD_BIND_FUNCTION(ECCDecrypt);
|
||||
#endif
|
||||
|
||||
ret = skf;
|
||||
skf = NULL;
|
||||
|
||||
end:
|
||||
SKF_METHOD_free(skf);
|
||||
return ret;
|
||||
}
|
||||
|
||||
void SKF_METHOD_free(SKF_METHOD *meth)
|
||||
{
|
||||
if (meth)
|
||||
free(meth->dso);
|
||||
free(meth);
|
||||
}
|
||||
|
||||
#include <stdio.h>
|
||||
#include <string.h>
|
||||
#include <stdlib.h>
|
||||
#include <dlfcn.h>
|
||||
#include "skf.h"
|
||||
#include "skf_ext.h"
|
||||
#include "skf_int.h"
|
||||
|
||||
#define SKFerr(e,r)
|
||||
|
||||
#define SKF_METHOD_BIND_FUNCTION_EX(func,name) \
|
||||
skf->func = (SKF_##func##_FuncPtr)dlsym(skf->dso, "SKF_"#name)
|
||||
|
||||
#define SKF_METHOD_BIND_FUNCTION(func) \
|
||||
SKF_METHOD_BIND_FUNCTION_EX(func,func)
|
||||
|
||||
|
||||
SKF_METHOD *SKF_METHOD_load_library(const char *so_path)
|
||||
{
|
||||
SKF_METHOD *ret = NULL;
|
||||
SKF_METHOD *skf = NULL;
|
||||
|
||||
if (!(skf = malloc(sizeof(*skf)))) {
|
||||
SKFerr(SKF_F_SKF_METHOD_LOAD_LIBRARY, ERR_R_MALLOC_FAILURE);
|
||||
goto end;
|
||||
}
|
||||
if (!(skf->dso = dlopen(so_path, RTLD_LAZY))) {
|
||||
SKFerr(SKF_F_SKF_METHOD_LOAD_LIBRARY, SKF_R_DSO_LOAD_FAILURE);
|
||||
goto end;
|
||||
}
|
||||
|
||||
SKF_METHOD_BIND_FUNCTION(WaitForDevEvent);
|
||||
SKF_METHOD_BIND_FUNCTION(CancelWaitForDevEvent);
|
||||
SKF_METHOD_BIND_FUNCTION(EnumDev);
|
||||
SKF_METHOD_BIND_FUNCTION(ConnectDev);
|
||||
SKF_METHOD_BIND_FUNCTION(DisConnectDev);
|
||||
SKF_METHOD_BIND_FUNCTION(GetDevState);
|
||||
SKF_METHOD_BIND_FUNCTION(SetLabel);
|
||||
SKF_METHOD_BIND_FUNCTION(GetDevInfo);
|
||||
SKF_METHOD_BIND_FUNCTION(LockDev);
|
||||
SKF_METHOD_BIND_FUNCTION(UnlockDev);
|
||||
SKF_METHOD_BIND_FUNCTION(Transmit);
|
||||
SKF_METHOD_BIND_FUNCTION(ChangeDevAuthKey);
|
||||
SKF_METHOD_BIND_FUNCTION(DevAuth);
|
||||
SKF_METHOD_BIND_FUNCTION(ChangePIN);
|
||||
SKF_METHOD_BIND_FUNCTION(GetPINInfo);
|
||||
SKF_METHOD_BIND_FUNCTION(VerifyPIN);
|
||||
SKF_METHOD_BIND_FUNCTION(UnblockPIN);
|
||||
SKF_METHOD_BIND_FUNCTION(ClearSecureState);
|
||||
SKF_METHOD_BIND_FUNCTION(CreateApplication);
|
||||
SKF_METHOD_BIND_FUNCTION(EnumApplication);
|
||||
SKF_METHOD_BIND_FUNCTION(DeleteApplication);
|
||||
SKF_METHOD_BIND_FUNCTION(OpenApplication);
|
||||
SKF_METHOD_BIND_FUNCTION(CloseApplication);
|
||||
SKF_METHOD_BIND_FUNCTION_EX(CreateObject,CreateFile);
|
||||
SKF_METHOD_BIND_FUNCTION_EX(DeleteObject,DeleteFile);
|
||||
SKF_METHOD_BIND_FUNCTION_EX(EnumObjects,EnumFiles);
|
||||
SKF_METHOD_BIND_FUNCTION_EX(GetObjectInfo,GetFileInfo);
|
||||
SKF_METHOD_BIND_FUNCTION_EX(ReadObject,ReadFile);
|
||||
SKF_METHOD_BIND_FUNCTION_EX(WriteObject,WriteFile);
|
||||
SKF_METHOD_BIND_FUNCTION(CreateContainer);
|
||||
SKF_METHOD_BIND_FUNCTION(DeleteContainer);
|
||||
SKF_METHOD_BIND_FUNCTION(EnumContainer);
|
||||
SKF_METHOD_BIND_FUNCTION(OpenContainer);
|
||||
SKF_METHOD_BIND_FUNCTION(CloseContainer);
|
||||
SKF_METHOD_BIND_FUNCTION(GetContainerType);
|
||||
SKF_METHOD_BIND_FUNCTION(ImportCertificate);
|
||||
SKF_METHOD_BIND_FUNCTION(ExportCertificate);
|
||||
SKF_METHOD_BIND_FUNCTION(ExportPublicKey);
|
||||
SKF_METHOD_BIND_FUNCTION(GenRandom);
|
||||
SKF_METHOD_BIND_FUNCTION(GenExtRSAKey);
|
||||
SKF_METHOD_BIND_FUNCTION(GenRSAKeyPair);
|
||||
SKF_METHOD_BIND_FUNCTION(ImportRSAKeyPair);
|
||||
SKF_METHOD_BIND_FUNCTION(RSASignData);
|
||||
SKF_METHOD_BIND_FUNCTION(RSAVerify);
|
||||
SKF_METHOD_BIND_FUNCTION(RSAExportSessionKey);
|
||||
SKF_METHOD_BIND_FUNCTION(ExtRSAPubKeyOperation);
|
||||
SKF_METHOD_BIND_FUNCTION(ExtRSAPriKeyOperation);
|
||||
SKF_METHOD_BIND_FUNCTION(GenECCKeyPair);
|
||||
SKF_METHOD_BIND_FUNCTION(ImportECCKeyPair);
|
||||
SKF_METHOD_BIND_FUNCTION(ECCSignData);
|
||||
SKF_METHOD_BIND_FUNCTION(ECCVerify);
|
||||
SKF_METHOD_BIND_FUNCTION(ECCExportSessionKey);
|
||||
SKF_METHOD_BIND_FUNCTION(ExtECCEncrypt);
|
||||
SKF_METHOD_BIND_FUNCTION(ExtECCDecrypt);
|
||||
SKF_METHOD_BIND_FUNCTION(ExtECCSign);
|
||||
SKF_METHOD_BIND_FUNCTION(ExtECCVerify);
|
||||
SKF_METHOD_BIND_FUNCTION(GenerateAgreementDataWithECC);
|
||||
SKF_METHOD_BIND_FUNCTION(GenerateAgreementDataAndKeyWithECC);
|
||||
SKF_METHOD_BIND_FUNCTION(GenerateKeyWithECC);
|
||||
SKF_METHOD_BIND_FUNCTION(ImportSessionKey);
|
||||
SKF_METHOD_BIND_FUNCTION(SetSymmKey);
|
||||
SKF_METHOD_BIND_FUNCTION(EncryptInit);
|
||||
SKF_METHOD_BIND_FUNCTION(Encrypt);
|
||||
SKF_METHOD_BIND_FUNCTION(EncryptUpdate);
|
||||
SKF_METHOD_BIND_FUNCTION(EncryptFinal);
|
||||
SKF_METHOD_BIND_FUNCTION(DecryptInit);
|
||||
SKF_METHOD_BIND_FUNCTION(Decrypt);
|
||||
SKF_METHOD_BIND_FUNCTION(DecryptUpdate);
|
||||
SKF_METHOD_BIND_FUNCTION(DecryptFinal);
|
||||
SKF_METHOD_BIND_FUNCTION(DigestInit);
|
||||
SKF_METHOD_BIND_FUNCTION(Digest);
|
||||
SKF_METHOD_BIND_FUNCTION(DigestUpdate);
|
||||
SKF_METHOD_BIND_FUNCTION(DigestFinal);
|
||||
SKF_METHOD_BIND_FUNCTION(MacInit);
|
||||
SKF_METHOD_BIND_FUNCTION(Mac);
|
||||
SKF_METHOD_BIND_FUNCTION(MacUpdate);
|
||||
SKF_METHOD_BIND_FUNCTION(MacFinal);
|
||||
SKF_METHOD_BIND_FUNCTION(CloseHandle);
|
||||
#ifdef SKF_HAS_ECCDECRYPT
|
||||
SKF_METHOD_BIND_FUNCTION(ECCDecrypt);
|
||||
#endif
|
||||
|
||||
ret = skf;
|
||||
skf = NULL;
|
||||
|
||||
end:
|
||||
SKF_METHOD_free(skf);
|
||||
return ret;
|
||||
}
|
||||
|
||||
void SKF_METHOD_free(SKF_METHOD *meth)
|
||||
{
|
||||
if (meth)
|
||||
free(meth->dso);
|
||||
free(meth);
|
||||
}
|
||||
|
||||
@@ -1,5 +1,5 @@
|
||||
/*
|
||||
* Copyright 2014-2022 The GmSSL Project. All Rights Reserved.
|
||||
* Copyright 2022 The GmSSL Project. All Rights Reserved.
|
||||
*
|
||||
* Licensed under the Apache License, Version 2.0 (the License); you may
|
||||
* not use this file except in compliance with the License.
|
||||
@@ -7,281 +7,280 @@
|
||||
* http://www.apache.org/licenses/LICENSE-2.0
|
||||
*/
|
||||
|
||||
|
||||
|
||||
#include <stdio.h>
|
||||
#include <stdlib.h>
|
||||
#include <string.h>
|
||||
#include <limits.h>
|
||||
#include <gmssl/error.h>
|
||||
#include "skf.h"
|
||||
#include "skf_int.h"
|
||||
#include "skf_ext.h"
|
||||
|
||||
|
||||
|
||||
static char *skf_algor_name(ULONG ulAlgID)
|
||||
{
|
||||
switch (ulAlgID) {
|
||||
case SGD_SM1_ECB: return "sm1-ecb";
|
||||
case SGD_SM1_CBC: return "sm1-cbc";
|
||||
case SGD_SM1_CFB: return "sm1-cfb";
|
||||
case SGD_SM1_OFB: return "sm1-ofb128";
|
||||
case SGD_SM1_MAC: return "sm1-mac";
|
||||
case SGD_SM4_ECB: return "sms4-ecb";
|
||||
case SGD_SM4_CBC: return "sms4-cbc";
|
||||
case SGD_SM4_CFB: return "sms4-cfb";
|
||||
case SGD_SM4_OFB: return "sms4-ofb128";
|
||||
case SGD_SM4_MAC: return "sms4-mac";
|
||||
case SGD_SSF33_ECB: return "ssf33-ecb";
|
||||
case SGD_SSF33_CBC: return "ssf33-cbc";
|
||||
case SGD_SSF33_CFB: return "ssf33-cfb";
|
||||
case SGD_SSF33_OFB: return "ssf33-ofb128";
|
||||
case SGD_SSF33_MAC: return "ssf33-mac";
|
||||
case SGD_RSA: return "rsa";
|
||||
case SGD_SM2_1: return "sm2sign";
|
||||
case SGD_SM2_2: return "sm2encrypt";
|
||||
case SGD_SM2_3: return "sm2keyagreement";
|
||||
case SGD_SM3: return "sm3";
|
||||
case SGD_SHA1: return "sha1";
|
||||
case SGD_SHA256: return "sha256";
|
||||
}
|
||||
return NULL;
|
||||
}
|
||||
|
||||
ULONG SKF_GetDevStateName(ULONG ulDevState, LPSTR *szDevStateName)
|
||||
{
|
||||
if (!szDevStateName) {
|
||||
return SAR_INDATALENERR;
|
||||
}
|
||||
|
||||
switch (ulDevState) {
|
||||
case SKF_DEV_STATE_ABSENT:
|
||||
*szDevStateName = (LPSTR)"Absent";
|
||||
break;
|
||||
case SKF_DEV_STATE_PRESENT:
|
||||
*szDevStateName = (LPSTR)"Present";
|
||||
break;
|
||||
case SKF_DEV_STATE_UNKNOW:
|
||||
*szDevStateName = (LPSTR)"Unknown";
|
||||
break;
|
||||
default:
|
||||
*szDevStateName = (LPSTR)"(Error)";
|
||||
return SAR_INDATALENERR;
|
||||
}
|
||||
|
||||
return SAR_OK;
|
||||
}
|
||||
|
||||
ULONG SKF_GetContainerTypeName(ULONG ulContainerType, LPSTR *szName)
|
||||
{
|
||||
switch (ulContainerType) {
|
||||
case SKF_CONTAINER_TYPE_UNDEF:
|
||||
*szName = (LPSTR)"(undef)";
|
||||
break;
|
||||
case SKF_CONTAINER_TYPE_RSA:
|
||||
*szName = (LPSTR)"RSA";
|
||||
break;
|
||||
case SKF_CONTAINER_TYPE_ECC:
|
||||
*szName = (LPSTR)"EC";
|
||||
break;
|
||||
default:
|
||||
*szName = (LPSTR)"(unknown)";
|
||||
}
|
||||
/* always success for help functions */
|
||||
return SAR_OK;
|
||||
}
|
||||
|
||||
typedef struct {
|
||||
ULONG id;
|
||||
char *name;
|
||||
} table_item_t;
|
||||
|
||||
static table_item_t skf_cipher_caps[] = {
|
||||
{ SGD_SM1_ECB, "sm1-ecb" },
|
||||
{ SGD_SM1_CBC, "sm1-cbc" },
|
||||
{ SGD_SM1_CFB, "sm1-cfb" },
|
||||
{ SGD_SM1_OFB, "sm1-ofb128" },
|
||||
{ SGD_SM1_MAC, "cbcmac-sm1" },
|
||||
{ SGD_SSF33_ECB, "ssf33-ecb" },
|
||||
{ SGD_SSF33_CBC, "ssf33-cbc" },
|
||||
{ SGD_SSF33_CFB, "ssf33-cfb" },
|
||||
{ SGD_SSF33_OFB, "ssf33-ofb128" },
|
||||
{ SGD_SSF33_MAC, "cbcmac-ssf33" },
|
||||
{ SGD_SM4_ECB, "sms4-ecb" },
|
||||
{ SGD_SM4_CBC, "sms4-cbc" },
|
||||
{ SGD_SM4_CFB, "sms4-cfb" },
|
||||
{ SGD_SM4_OFB, "sms4-ofb128" },
|
||||
{ SGD_SM4_MAC, "cbcmac-sms4" },
|
||||
{ SGD_ZUC_EEA3, "zuc_128eea3" },
|
||||
{ SGD_ZUC_EIA3, "zuc_128eia3" }
|
||||
};
|
||||
|
||||
static table_item_t skf_digest_caps[] = {
|
||||
{ SGD_SM3, "sm3" },
|
||||
{ SGD_SHA1, "sha1" },
|
||||
{ SGD_SHA256, "sha256" },
|
||||
};
|
||||
|
||||
static table_item_t skf_pkey_caps[] = {
|
||||
{ SGD_RSA_SIGN, "rsa" },
|
||||
{ SGD_RSA_ENC, "rsaEncryption" },
|
||||
{ SGD_SM2_1, "sm2sign" },
|
||||
{ SGD_SM2_2, "sm2exchange" },
|
||||
{ SGD_SM2_3, "sm2encrypt" }
|
||||
};
|
||||
|
||||
ULONG SKF_PrintDevInfo(FILE *fp, const DEVINFO *devInfo)
|
||||
{
|
||||
size_t i, n;
|
||||
int fmt = 0, ind = 4;
|
||||
|
||||
format_print(fp, fmt, ind, "Version: %d.%d\n", devInfo->Version.major, devInfo->Version.minor);
|
||||
format_print(fp, fmt, ind, "Manufacturer: %s\n", devInfo->Manufacturer);
|
||||
format_print(fp, fmt, ind, "Issuer: %s\n", devInfo->Issuer);
|
||||
format_print(fp, fmt, ind, "Label: %s\n", devInfo->Label);
|
||||
format_bytes(fp, fmt, ind, "SerialNumber", devInfo->SerialNumber, strlen((char *)devInfo->SerialNumber));
|
||||
format_print(fp, fmt, ind, "FirmwareVersion: %d.%d\n", devInfo->HWVersion.major, devInfo->HWVersion.minor);
|
||||
|
||||
format_print(fp, fmt, ind, "Ciphers: ");
|
||||
for (i = n = 0; i < sizeof(skf_cipher_caps)/sizeof(skf_cipher_caps[0]); i++) {
|
||||
if ((devInfo->AlgSymCap & skf_cipher_caps[i].id) ==
|
||||
skf_cipher_caps[i].id) {
|
||||
format_print(fp, fmt, 0, "%s%s", n ? "," : "", skf_cipher_caps[i].name);
|
||||
n++;
|
||||
}
|
||||
}
|
||||
format_print(fp, fmt, 0, "\n");
|
||||
|
||||
format_print(fp, fmt, ind, "Public Keys: ");
|
||||
for (i = n = 0; i < sizeof(skf_pkey_caps)/sizeof(skf_pkey_caps[0]); i++) {
|
||||
if ((devInfo->AlgAsymCap & skf_pkey_caps[i].id) ==
|
||||
skf_pkey_caps[i].id) {
|
||||
format_print(fp, fmt, 0, "%s%s", n ? "," : "", skf_pkey_caps[i].name);
|
||||
n++;
|
||||
}
|
||||
}
|
||||
format_print(fp, fmt, 0, "\n");
|
||||
|
||||
format_print(fp, fmt, ind, "Digests: ");
|
||||
for (i = n = 0; i < sizeof(skf_digest_caps)/sizeof(skf_digest_caps[0]); i++) {
|
||||
if ((devInfo->AlgHashCap & skf_digest_caps[i].id) ==
|
||||
skf_digest_caps[i].id) {
|
||||
format_print(fp, fmt, 0, "%s%s", n ? "," : "", skf_digest_caps[i].name);
|
||||
n++;
|
||||
}
|
||||
}
|
||||
format_print(fp, fmt, 0, "\n");
|
||||
|
||||
format_print(fp, fmt, ind, "AuthCipher");
|
||||
for (i = 0; i < sizeof(skf_cipher_caps)/sizeof(skf_cipher_caps[0]); i++) {
|
||||
if (devInfo->DevAuthAlgId == skf_cipher_caps[i].id) {
|
||||
format_print(fp, fmt, 0, "%s\n", skf_cipher_caps[i].name);
|
||||
break;
|
||||
}
|
||||
}
|
||||
if (i == sizeof(skf_cipher_caps)/sizeof(skf_cipher_caps[0])) {
|
||||
format_print(fp, fmt, 0, "(unknown)\n");
|
||||
}
|
||||
format_print(fp, fmt, 0, "\n");
|
||||
|
||||
|
||||
|
||||
if (devInfo->TotalSpace == UINT_MAX)
|
||||
format_print(fp, fmt, ind, "Total Sapce: %s\n", "(unlimited)");
|
||||
else format_print(fp, fmt, ind, "Total Sapce: %u\n", devInfo->TotalSpace);
|
||||
|
||||
if (devInfo->FreeSpace == UINT_MAX)
|
||||
format_print(fp, fmt, ind, "Free Space: %s\n", "(unlimited)");
|
||||
else format_print(fp, fmt, ind, "Free Space: %u\n", devInfo->FreeSpace);
|
||||
|
||||
if (devInfo->MaxECCBufferSize == UINT_MAX)
|
||||
format_print(fp, fmt, ind, "MAX ECC Input: %s\n", "(unlimited)");
|
||||
else format_print(fp, fmt, ind, "MAX ECC Input: %u\n", devInfo->MaxECCBufferSize);
|
||||
|
||||
if (devInfo->MaxBufferSize == UINT_MAX)
|
||||
format_print(fp, fmt, ind, "MAX Cipher Input: %s\n", "(unlimited)");
|
||||
else format_print(fp, fmt, ind, "MAX Cipher Input: %u\n", devInfo->MaxBufferSize);
|
||||
|
||||
return SAR_OK;
|
||||
}
|
||||
|
||||
ULONG SKF_PrintRSAPublicKey(FILE *fp, const RSAPUBLICKEYBLOB *blob)
|
||||
{
|
||||
int fmt = 0, ind = 4;
|
||||
format_print(fp, fmt, ind, "AlgID: %s\n", skf_algor_name(blob->AlgID));
|
||||
format_print(fp, fmt, ind, "BitLen: %u\n", blob->BitLen);
|
||||
format_bytes(fp, fmt, ind, "Modulus", blob->Modulus, MAX_RSA_MODULUS_LEN);
|
||||
format_bytes(fp, fmt, ind, "PublicExponent", blob->PublicExponent, MAX_RSA_EXPONENT_LEN);
|
||||
return SAR_OK;
|
||||
}
|
||||
|
||||
ULONG SKF_PrintRSAPrivateKey(FILE *fp, const RSAPRIVATEKEYBLOB *blob)
|
||||
{
|
||||
int fmt = 0, ind = 4;
|
||||
format_print(fp, fmt, ind, "AlgID: %s\n", skf_algor_name(blob->AlgID));
|
||||
format_print(fp, fmt, ind, "BitLen: %u\n", blob->BitLen);
|
||||
format_bytes(fp, fmt, ind, "Modulus", blob->Modulus, MAX_RSA_MODULUS_LEN);
|
||||
format_bytes(fp, fmt, ind, "PublicExponent", blob->PublicExponent, MAX_RSA_EXPONENT_LEN);
|
||||
format_bytes(fp, fmt, ind, "PrivateExponent", blob->PrivateExponent, MAX_RSA_MODULUS_LEN);
|
||||
format_bytes(fp, fmt, ind, "Prime1", blob->Prime1, MAX_RSA_MODULUS_LEN/2);
|
||||
format_bytes(fp, fmt, ind, "Prime2", blob->Prime2, MAX_RSA_MODULUS_LEN/2);
|
||||
format_bytes(fp, fmt, ind, "Prime1Exponent", blob->Prime1Exponent, MAX_RSA_MODULUS_LEN/2);
|
||||
format_bytes(fp, fmt, ind, "Prime2Exponent", blob->Prime2Exponent, MAX_RSA_MODULUS_LEN/2);
|
||||
format_bytes(fp, fmt, ind, "Coefficient", blob->Coefficient, MAX_RSA_MODULUS_LEN/2);
|
||||
return SAR_OK;
|
||||
}
|
||||
|
||||
ULONG SKF_PrintECCPublicKey(FILE *fp, const ECCPUBLICKEYBLOB *blob)
|
||||
{
|
||||
int fmt = 0, ind = 4;
|
||||
format_print(fp, fmt, ind, "BitLen: %u\n", blob->BitLen);
|
||||
format_bytes(fp, fmt, ind, "XCoordinate", blob->XCoordinate, ECC_MAX_XCOORDINATE_BITS_LEN/8);
|
||||
format_bytes(fp, fmt, ind, "YCoordinate", blob->YCoordinate, ECC_MAX_XCOORDINATE_BITS_LEN/8);
|
||||
return SAR_OK;
|
||||
}
|
||||
|
||||
ULONG SKF_PrintECCPrivateKey(FILE *fp, const ECCPRIVATEKEYBLOB *blob)
|
||||
{
|
||||
int fmt = 0, ind = 4;
|
||||
format_print(fp, fmt, ind, "BitLen: %u\n", blob->BitLen);
|
||||
format_bytes(fp, fmt, ind, "PrivateKey", blob->PrivateKey, ECC_MAX_MODULUS_BITS_LEN/8);
|
||||
return SAR_OK;
|
||||
}
|
||||
|
||||
ULONG SKF_PrintECCCipher(FILE *fp, const ECCCIPHERBLOB *blob)
|
||||
{
|
||||
int fmt = 0, ind = 4;
|
||||
format_bytes(fp, fmt, ind, "XCoordinate", blob->XCoordinate, ECC_MAX_XCOORDINATE_BITS_LEN/8);
|
||||
format_bytes(fp, fmt, ind, "YCoordinate", blob->YCoordinate, ECC_MAX_XCOORDINATE_BITS_LEN/8);
|
||||
format_bytes(fp, fmt, ind, "HASH", blob->HASH, 32);
|
||||
format_print(fp, fmt, ind, "CipherLen: %u\n", blob->CipherLen);
|
||||
format_bytes(fp, fmt, ind, "Cipher", blob->Cipher, blob->CipherLen);
|
||||
return SAR_OK;
|
||||
}
|
||||
|
||||
ULONG SKF_PrintECCSignature(FILE *fp, const ECCSIGNATUREBLOB *blob)
|
||||
{
|
||||
int fmt = 0, ind = 4;
|
||||
format_bytes(fp, fmt, ind, "r", blob->r, ECC_MAX_XCOORDINATE_BITS_LEN/8);
|
||||
format_bytes(fp, fmt, ind, "s", blob->s, ECC_MAX_XCOORDINATE_BITS_LEN/8);
|
||||
return SAR_OK;
|
||||
}
|
||||
|
||||
ULONG DEVAPI SKF_GetAlgorName(ULONG ulAlgID, LPSTR *szName)
|
||||
{
|
||||
char *name;
|
||||
if ((name = skf_algor_name(ulAlgID)) != NULL) {
|
||||
*szName = (LPSTR)&name;
|
||||
return SAR_OK;
|
||||
}
|
||||
return SAR_FAIL;
|
||||
}
|
||||
|
||||
ULONG DEVAPI SKF_PrintErrorString(FILE *fp, ULONG ulError)
|
||||
{
|
||||
LPSTR str = NULL;
|
||||
SKF_GetErrorString(ulError, &str);
|
||||
fprintf(fp, "SKF Error: %s\n", (char *)str);
|
||||
return SAR_OK;
|
||||
}
|
||||
|
||||
#include <stdio.h>
|
||||
#include <stdlib.h>
|
||||
#include <string.h>
|
||||
#include <limits.h>
|
||||
#include <gmssl/error.h>
|
||||
#include "skf.h"
|
||||
#include "skf_int.h"
|
||||
#include "skf_ext.h"
|
||||
|
||||
|
||||
|
||||
static char *skf_algor_name(ULONG ulAlgID)
|
||||
{
|
||||
switch (ulAlgID) {
|
||||
case SGD_SM1_ECB: return "sm1-ecb";
|
||||
case SGD_SM1_CBC: return "sm1-cbc";
|
||||
case SGD_SM1_CFB: return "sm1-cfb";
|
||||
case SGD_SM1_OFB: return "sm1-ofb128";
|
||||
case SGD_SM1_MAC: return "sm1-mac";
|
||||
case SGD_SM4_ECB: return "sms4-ecb";
|
||||
case SGD_SM4_CBC: return "sms4-cbc";
|
||||
case SGD_SM4_CFB: return "sms4-cfb";
|
||||
case SGD_SM4_OFB: return "sms4-ofb128";
|
||||
case SGD_SM4_MAC: return "sms4-mac";
|
||||
case SGD_SSF33_ECB: return "ssf33-ecb";
|
||||
case SGD_SSF33_CBC: return "ssf33-cbc";
|
||||
case SGD_SSF33_CFB: return "ssf33-cfb";
|
||||
case SGD_SSF33_OFB: return "ssf33-ofb128";
|
||||
case SGD_SSF33_MAC: return "ssf33-mac";
|
||||
case SGD_RSA: return "rsa";
|
||||
case SGD_SM2_1: return "sm2sign";
|
||||
case SGD_SM2_2: return "sm2encrypt";
|
||||
case SGD_SM2_3: return "sm2keyagreement";
|
||||
case SGD_SM3: return "sm3";
|
||||
case SGD_SHA1: return "sha1";
|
||||
case SGD_SHA256: return "sha256";
|
||||
}
|
||||
return NULL;
|
||||
}
|
||||
|
||||
ULONG SKF_GetDevStateName(ULONG ulDevState, LPSTR *szDevStateName)
|
||||
{
|
||||
if (!szDevStateName) {
|
||||
return SAR_INDATALENERR;
|
||||
}
|
||||
|
||||
switch (ulDevState) {
|
||||
case SKF_DEV_STATE_ABSENT:
|
||||
*szDevStateName = (LPSTR)"Absent";
|
||||
break;
|
||||
case SKF_DEV_STATE_PRESENT:
|
||||
*szDevStateName = (LPSTR)"Present";
|
||||
break;
|
||||
case SKF_DEV_STATE_UNKNOW:
|
||||
*szDevStateName = (LPSTR)"Unknown";
|
||||
break;
|
||||
default:
|
||||
*szDevStateName = (LPSTR)"(Error)";
|
||||
return SAR_INDATALENERR;
|
||||
}
|
||||
|
||||
return SAR_OK;
|
||||
}
|
||||
|
||||
ULONG SKF_GetContainerTypeName(ULONG ulContainerType, LPSTR *szName)
|
||||
{
|
||||
switch (ulContainerType) {
|
||||
case SKF_CONTAINER_TYPE_UNDEF:
|
||||
*szName = (LPSTR)"(undef)";
|
||||
break;
|
||||
case SKF_CONTAINER_TYPE_RSA:
|
||||
*szName = (LPSTR)"RSA";
|
||||
break;
|
||||
case SKF_CONTAINER_TYPE_ECC:
|
||||
*szName = (LPSTR)"EC";
|
||||
break;
|
||||
default:
|
||||
*szName = (LPSTR)"(unknown)";
|
||||
}
|
||||
/* always success for help functions */
|
||||
return SAR_OK;
|
||||
}
|
||||
|
||||
typedef struct {
|
||||
ULONG id;
|
||||
char *name;
|
||||
} table_item_t;
|
||||
|
||||
static table_item_t skf_cipher_caps[] = {
|
||||
{ SGD_SM1_ECB, "sm1-ecb" },
|
||||
{ SGD_SM1_CBC, "sm1-cbc" },
|
||||
{ SGD_SM1_CFB, "sm1-cfb" },
|
||||
{ SGD_SM1_OFB, "sm1-ofb128" },
|
||||
{ SGD_SM1_MAC, "cbcmac-sm1" },
|
||||
{ SGD_SSF33_ECB, "ssf33-ecb" },
|
||||
{ SGD_SSF33_CBC, "ssf33-cbc" },
|
||||
{ SGD_SSF33_CFB, "ssf33-cfb" },
|
||||
{ SGD_SSF33_OFB, "ssf33-ofb128" },
|
||||
{ SGD_SSF33_MAC, "cbcmac-ssf33" },
|
||||
{ SGD_SM4_ECB, "sms4-ecb" },
|
||||
{ SGD_SM4_CBC, "sms4-cbc" },
|
||||
{ SGD_SM4_CFB, "sms4-cfb" },
|
||||
{ SGD_SM4_OFB, "sms4-ofb128" },
|
||||
{ SGD_SM4_MAC, "cbcmac-sms4" },
|
||||
{ SGD_ZUC_EEA3, "zuc_128eea3" },
|
||||
{ SGD_ZUC_EIA3, "zuc_128eia3" }
|
||||
};
|
||||
|
||||
static table_item_t skf_digest_caps[] = {
|
||||
{ SGD_SM3, "sm3" },
|
||||
{ SGD_SHA1, "sha1" },
|
||||
{ SGD_SHA256, "sha256" },
|
||||
};
|
||||
|
||||
static table_item_t skf_pkey_caps[] = {
|
||||
{ SGD_RSA_SIGN, "rsa" },
|
||||
{ SGD_RSA_ENC, "rsaEncryption" },
|
||||
{ SGD_SM2_1, "sm2sign" },
|
||||
{ SGD_SM2_2, "sm2exchange" },
|
||||
{ SGD_SM2_3, "sm2encrypt" }
|
||||
};
|
||||
|
||||
ULONG SKF_PrintDevInfo(FILE *fp, const DEVINFO *devInfo)
|
||||
{
|
||||
size_t i, n;
|
||||
int fmt = 0, ind = 4;
|
||||
|
||||
format_print(fp, fmt, ind, "Version: %d.%d\n", devInfo->Version.major, devInfo->Version.minor);
|
||||
format_print(fp, fmt, ind, "Manufacturer: %s\n", devInfo->Manufacturer);
|
||||
format_print(fp, fmt, ind, "Issuer: %s\n", devInfo->Issuer);
|
||||
format_print(fp, fmt, ind, "Label: %s\n", devInfo->Label);
|
||||
format_bytes(fp, fmt, ind, "SerialNumber", devInfo->SerialNumber, strlen((char *)devInfo->SerialNumber));
|
||||
format_print(fp, fmt, ind, "FirmwareVersion: %d.%d\n", devInfo->HWVersion.major, devInfo->HWVersion.minor);
|
||||
|
||||
format_print(fp, fmt, ind, "Ciphers: ");
|
||||
for (i = n = 0; i < sizeof(skf_cipher_caps)/sizeof(skf_cipher_caps[0]); i++) {
|
||||
if ((devInfo->AlgSymCap & skf_cipher_caps[i].id) ==
|
||||
skf_cipher_caps[i].id) {
|
||||
format_print(fp, fmt, 0, "%s%s", n ? "," : "", skf_cipher_caps[i].name);
|
||||
n++;
|
||||
}
|
||||
}
|
||||
format_print(fp, fmt, 0, "\n");
|
||||
|
||||
format_print(fp, fmt, ind, "Public Keys: ");
|
||||
for (i = n = 0; i < sizeof(skf_pkey_caps)/sizeof(skf_pkey_caps[0]); i++) {
|
||||
if ((devInfo->AlgAsymCap & skf_pkey_caps[i].id) ==
|
||||
skf_pkey_caps[i].id) {
|
||||
format_print(fp, fmt, 0, "%s%s", n ? "," : "", skf_pkey_caps[i].name);
|
||||
n++;
|
||||
}
|
||||
}
|
||||
format_print(fp, fmt, 0, "\n");
|
||||
|
||||
format_print(fp, fmt, ind, "Digests: ");
|
||||
for (i = n = 0; i < sizeof(skf_digest_caps)/sizeof(skf_digest_caps[0]); i++) {
|
||||
if ((devInfo->AlgHashCap & skf_digest_caps[i].id) ==
|
||||
skf_digest_caps[i].id) {
|
||||
format_print(fp, fmt, 0, "%s%s", n ? "," : "", skf_digest_caps[i].name);
|
||||
n++;
|
||||
}
|
||||
}
|
||||
format_print(fp, fmt, 0, "\n");
|
||||
|
||||
format_print(fp, fmt, ind, "AuthCipher");
|
||||
for (i = 0; i < sizeof(skf_cipher_caps)/sizeof(skf_cipher_caps[0]); i++) {
|
||||
if (devInfo->DevAuthAlgId == skf_cipher_caps[i].id) {
|
||||
format_print(fp, fmt, 0, "%s\n", skf_cipher_caps[i].name);
|
||||
break;
|
||||
}
|
||||
}
|
||||
if (i == sizeof(skf_cipher_caps)/sizeof(skf_cipher_caps[0])) {
|
||||
format_print(fp, fmt, 0, "(unknown)\n");
|
||||
}
|
||||
format_print(fp, fmt, 0, "\n");
|
||||
|
||||
|
||||
|
||||
if (devInfo->TotalSpace == UINT_MAX)
|
||||
format_print(fp, fmt, ind, "Total Sapce: %s\n", "(unlimited)");
|
||||
else format_print(fp, fmt, ind, "Total Sapce: %u\n", devInfo->TotalSpace);
|
||||
|
||||
if (devInfo->FreeSpace == UINT_MAX)
|
||||
format_print(fp, fmt, ind, "Free Space: %s\n", "(unlimited)");
|
||||
else format_print(fp, fmt, ind, "Free Space: %u\n", devInfo->FreeSpace);
|
||||
|
||||
if (devInfo->MaxECCBufferSize == UINT_MAX)
|
||||
format_print(fp, fmt, ind, "MAX ECC Input: %s\n", "(unlimited)");
|
||||
else format_print(fp, fmt, ind, "MAX ECC Input: %u\n", devInfo->MaxECCBufferSize);
|
||||
|
||||
if (devInfo->MaxBufferSize == UINT_MAX)
|
||||
format_print(fp, fmt, ind, "MAX Cipher Input: %s\n", "(unlimited)");
|
||||
else format_print(fp, fmt, ind, "MAX Cipher Input: %u\n", devInfo->MaxBufferSize);
|
||||
|
||||
return SAR_OK;
|
||||
}
|
||||
|
||||
ULONG SKF_PrintRSAPublicKey(FILE *fp, const RSAPUBLICKEYBLOB *blob)
|
||||
{
|
||||
int fmt = 0, ind = 4;
|
||||
format_print(fp, fmt, ind, "AlgID: %s\n", skf_algor_name(blob->AlgID));
|
||||
format_print(fp, fmt, ind, "BitLen: %u\n", blob->BitLen);
|
||||
format_bytes(fp, fmt, ind, "Modulus", blob->Modulus, MAX_RSA_MODULUS_LEN);
|
||||
format_bytes(fp, fmt, ind, "PublicExponent", blob->PublicExponent, MAX_RSA_EXPONENT_LEN);
|
||||
return SAR_OK;
|
||||
}
|
||||
|
||||
ULONG SKF_PrintRSAPrivateKey(FILE *fp, const RSAPRIVATEKEYBLOB *blob)
|
||||
{
|
||||
int fmt = 0, ind = 4;
|
||||
format_print(fp, fmt, ind, "AlgID: %s\n", skf_algor_name(blob->AlgID));
|
||||
format_print(fp, fmt, ind, "BitLen: %u\n", blob->BitLen);
|
||||
format_bytes(fp, fmt, ind, "Modulus", blob->Modulus, MAX_RSA_MODULUS_LEN);
|
||||
format_bytes(fp, fmt, ind, "PublicExponent", blob->PublicExponent, MAX_RSA_EXPONENT_LEN);
|
||||
format_bytes(fp, fmt, ind, "PrivateExponent", blob->PrivateExponent, MAX_RSA_MODULUS_LEN);
|
||||
format_bytes(fp, fmt, ind, "Prime1", blob->Prime1, MAX_RSA_MODULUS_LEN/2);
|
||||
format_bytes(fp, fmt, ind, "Prime2", blob->Prime2, MAX_RSA_MODULUS_LEN/2);
|
||||
format_bytes(fp, fmt, ind, "Prime1Exponent", blob->Prime1Exponent, MAX_RSA_MODULUS_LEN/2);
|
||||
format_bytes(fp, fmt, ind, "Prime2Exponent", blob->Prime2Exponent, MAX_RSA_MODULUS_LEN/2);
|
||||
format_bytes(fp, fmt, ind, "Coefficient", blob->Coefficient, MAX_RSA_MODULUS_LEN/2);
|
||||
return SAR_OK;
|
||||
}
|
||||
|
||||
ULONG SKF_PrintECCPublicKey(FILE *fp, const ECCPUBLICKEYBLOB *blob)
|
||||
{
|
||||
int fmt = 0, ind = 4;
|
||||
format_print(fp, fmt, ind, "BitLen: %u\n", blob->BitLen);
|
||||
format_bytes(fp, fmt, ind, "XCoordinate", blob->XCoordinate, ECC_MAX_XCOORDINATE_BITS_LEN/8);
|
||||
format_bytes(fp, fmt, ind, "YCoordinate", blob->YCoordinate, ECC_MAX_XCOORDINATE_BITS_LEN/8);
|
||||
return SAR_OK;
|
||||
}
|
||||
|
||||
ULONG SKF_PrintECCPrivateKey(FILE *fp, const ECCPRIVATEKEYBLOB *blob)
|
||||
{
|
||||
int fmt = 0, ind = 4;
|
||||
format_print(fp, fmt, ind, "BitLen: %u\n", blob->BitLen);
|
||||
format_bytes(fp, fmt, ind, "PrivateKey", blob->PrivateKey, ECC_MAX_MODULUS_BITS_LEN/8);
|
||||
return SAR_OK;
|
||||
}
|
||||
|
||||
ULONG SKF_PrintECCCipher(FILE *fp, const ECCCIPHERBLOB *blob)
|
||||
{
|
||||
int fmt = 0, ind = 4;
|
||||
format_bytes(fp, fmt, ind, "XCoordinate", blob->XCoordinate, ECC_MAX_XCOORDINATE_BITS_LEN/8);
|
||||
format_bytes(fp, fmt, ind, "YCoordinate", blob->YCoordinate, ECC_MAX_XCOORDINATE_BITS_LEN/8);
|
||||
format_bytes(fp, fmt, ind, "HASH", blob->HASH, 32);
|
||||
format_print(fp, fmt, ind, "CipherLen: %u\n", blob->CipherLen);
|
||||
format_bytes(fp, fmt, ind, "Cipher", blob->Cipher, blob->CipherLen);
|
||||
return SAR_OK;
|
||||
}
|
||||
|
||||
ULONG SKF_PrintECCSignature(FILE *fp, const ECCSIGNATUREBLOB *blob)
|
||||
{
|
||||
int fmt = 0, ind = 4;
|
||||
format_bytes(fp, fmt, ind, "r", blob->r, ECC_MAX_XCOORDINATE_BITS_LEN/8);
|
||||
format_bytes(fp, fmt, ind, "s", blob->s, ECC_MAX_XCOORDINATE_BITS_LEN/8);
|
||||
return SAR_OK;
|
||||
}
|
||||
|
||||
ULONG DEVAPI SKF_GetAlgorName(ULONG ulAlgID, LPSTR *szName)
|
||||
{
|
||||
char *name;
|
||||
if ((name = skf_algor_name(ulAlgID)) != NULL) {
|
||||
*szName = (LPSTR)&name;
|
||||
return SAR_OK;
|
||||
}
|
||||
return SAR_FAIL;
|
||||
}
|
||||
|
||||
ULONG DEVAPI SKF_PrintErrorString(FILE *fp, ULONG ulError)
|
||||
{
|
||||
LPSTR str = NULL;
|
||||
SKF_GetErrorString(ulError, &str);
|
||||
fprintf(fp, "SKF Error: %s\n", (char *)str);
|
||||
return SAR_OK;
|
||||
}
|
||||
|
||||
@@ -1,5 +1,5 @@
|
||||
/*
|
||||
* Copyright 2014-2022 The GmSSL Project. All Rights Reserved.
|
||||
* Copyright 2022 The GmSSL Project. All Rights Reserved.
|
||||
*
|
||||
* Licensed under the Apache License, Version 2.0 (the License); you may
|
||||
* not use this file except in compliance with the License.
|
||||
@@ -7,141 +7,140 @@
|
||||
* http://www.apache.org/licenses/LICENSE-2.0
|
||||
*/
|
||||
|
||||
|
||||
|
||||
|
||||
#include <stdio.h>
|
||||
#include <string.h>
|
||||
#include <stdlib.h>
|
||||
#include <stdint.h>
|
||||
#include "skf_int.h"
|
||||
#include "skf_wisec.h"
|
||||
|
||||
|
||||
typedef struct {
|
||||
ULONG std_id;
|
||||
ULONG vendor_id;
|
||||
} SKF_ALGOR_PAIR;
|
||||
|
||||
static SKF_ALGOR_PAIR wisec_ciphers[] = {
|
||||
{ SGD_SM1, WISEC_SM1 },
|
||||
{ SGD_SM1_ECB, WISEC_SM1_ECB },
|
||||
{ SGD_SM1_CBC, WISEC_SM1_CBC },
|
||||
{ SGD_SM1_CFB, WISEC_SM1_CFB },
|
||||
{ SGD_SM1_OFB, WISEC_SM1_OFB },
|
||||
{ SGD_SM1_MAC, WISEC_SM1_MAC },
|
||||
{ SGD_SM4, WISEC_SM4 },
|
||||
{ SGD_SM4_ECB, WISEC_SM4_ECB },
|
||||
{ SGD_SM4_CBC, WISEC_SM4_CBC },
|
||||
{ SGD_SM4_CFB, WISEC_SM4_CFB },
|
||||
{ SGD_SM4_OFB, WISEC_SM4_OFB },
|
||||
{ SGD_SM4_MAC, WISEC_SM4_MAC },
|
||||
{ SGD_SSF33, WISEC_SSF33 },
|
||||
{ SGD_SSF33_ECB, WISEC_SSF33_ECB },
|
||||
{ SGD_SSF33_CBC, WISEC_SSF33_CBC },
|
||||
{ SGD_SSF33_CFB, WISEC_SSF33_CFB },
|
||||
{ SGD_SSF33_OFB, WISEC_SSF33_OFB },
|
||||
{ SGD_SSF33_MAC, WISEC_SSF33_MAC },
|
||||
};
|
||||
|
||||
static ULONG wisec_get_cipher_algor(ULONG vendor_id)
|
||||
{
|
||||
size_t i;
|
||||
for (i = 0; i < sizeof(wisec_ciphers)/sizeof(wisec_ciphers[0]); i++) {
|
||||
if (vendor_id == wisec_ciphers[i].vendor_id) {
|
||||
return wisec_ciphers[i].std_id;
|
||||
}
|
||||
}
|
||||
return 0;
|
||||
}
|
||||
|
||||
static ULONG wisec_get_cipher_cap(ULONG vendor_cap)
|
||||
{
|
||||
ULONG std_cap = 0;
|
||||
size_t i;
|
||||
for (i = 0; i < sizeof(wisec_ciphers)/sizeof(wisec_ciphers[0]); i++) {
|
||||
if (vendor_cap & wisec_ciphers[i].vendor_id) {
|
||||
std_cap |= wisec_ciphers[i].std_id;
|
||||
}
|
||||
}
|
||||
return std_cap;
|
||||
}
|
||||
|
||||
static SKF_ALGOR_PAIR wisec_digests[] = {
|
||||
{ SGD_SM3, WISEC_SM3 },
|
||||
{ SGD_SHA1, WISEC_SHA1 },
|
||||
{ SGD_SHA256, WISEC_SHA256 },
|
||||
};
|
||||
|
||||
static ULONG wisec_get_digest_algor(ULONG vendor_id)
|
||||
{
|
||||
size_t i;
|
||||
for (i = 0; i < sizeof(wisec_digests)/sizeof(wisec_digests[0]); i++) {
|
||||
if (vendor_id == wisec_digests[i].vendor_id) {
|
||||
return wisec_digests[i].std_id;
|
||||
}
|
||||
}
|
||||
return 0;
|
||||
}
|
||||
|
||||
static ULONG wisec_get_digest_cap(ULONG vendor_cap)
|
||||
{
|
||||
ULONG std_cap = 0;
|
||||
size_t i;
|
||||
for (i = 0; i < sizeof(wisec_digests)/sizeof(wisec_digests[0]); i++) {
|
||||
if (vendor_cap & wisec_digests[i].vendor_id) {
|
||||
std_cap |= wisec_digests[i].std_id;
|
||||
}
|
||||
}
|
||||
return std_cap;
|
||||
}
|
||||
|
||||
static SKF_ALGOR_PAIR wisec_pkeys[] = {
|
||||
{ SGD_RSA, WISEC_RSA },
|
||||
{ SGD_RSA_SIGN, WISEC_RSA_SIGN },
|
||||
{ SGD_RSA_ENC, WISEC_RSA_ENC },
|
||||
{ SGD_SM2, WISEC_SM2 },
|
||||
{ SGD_SM2_1, WISEC_SM2_1 },
|
||||
{ SGD_SM2_2, WISEC_SM2_2 },
|
||||
{ SGD_SM2_3, WISEC_SM2_3 },
|
||||
};
|
||||
|
||||
static ULONG wisec_get_pkey_algor(ULONG vendor_id)
|
||||
{
|
||||
size_t i;
|
||||
for (i = 0; i < sizeof(wisec_pkeys)/sizeof(wisec_pkeys[0]); i++) {
|
||||
if (vendor_id == wisec_pkeys[i].vendor_id) {
|
||||
return wisec_pkeys[i].std_id;
|
||||
}
|
||||
}
|
||||
return 0;
|
||||
}
|
||||
|
||||
static ULONG wisec_get_pkey_cap(ULONG vendor_cap)
|
||||
{
|
||||
ULONG std_cap = 0;
|
||||
size_t i;
|
||||
for (i = 0; i < sizeof(wisec_pkeys)/sizeof(wisec_pkeys[0]); i++) {
|
||||
if (vendor_cap & wisec_pkeys[i].vendor_id) {
|
||||
std_cap |= wisec_pkeys[i].std_id;
|
||||
}
|
||||
}
|
||||
return std_cap;
|
||||
}
|
||||
|
||||
static unsigned long wisec_get_error_reason(ULONG err)
|
||||
{
|
||||
return 0;
|
||||
}
|
||||
|
||||
SKF_VENDOR skf_wisec = {
|
||||
"wisec",
|
||||
16,
|
||||
wisec_get_cipher_algor,
|
||||
wisec_get_cipher_cap,
|
||||
wisec_get_digest_algor,
|
||||
wisec_get_digest_cap,
|
||||
wisec_get_pkey_algor,
|
||||
wisec_get_pkey_cap,
|
||||
wisec_get_error_reason,
|
||||
};
|
||||
|
||||
|
||||
#include <stdio.h>
|
||||
#include <string.h>
|
||||
#include <stdlib.h>
|
||||
#include <stdint.h>
|
||||
#include "skf_int.h"
|
||||
#include "skf_wisec.h"
|
||||
|
||||
|
||||
typedef struct {
|
||||
ULONG std_id;
|
||||
ULONG vendor_id;
|
||||
} SKF_ALGOR_PAIR;
|
||||
|
||||
static SKF_ALGOR_PAIR wisec_ciphers[] = {
|
||||
{ SGD_SM1, WISEC_SM1 },
|
||||
{ SGD_SM1_ECB, WISEC_SM1_ECB },
|
||||
{ SGD_SM1_CBC, WISEC_SM1_CBC },
|
||||
{ SGD_SM1_CFB, WISEC_SM1_CFB },
|
||||
{ SGD_SM1_OFB, WISEC_SM1_OFB },
|
||||
{ SGD_SM1_MAC, WISEC_SM1_MAC },
|
||||
{ SGD_SM4, WISEC_SM4 },
|
||||
{ SGD_SM4_ECB, WISEC_SM4_ECB },
|
||||
{ SGD_SM4_CBC, WISEC_SM4_CBC },
|
||||
{ SGD_SM4_CFB, WISEC_SM4_CFB },
|
||||
{ SGD_SM4_OFB, WISEC_SM4_OFB },
|
||||
{ SGD_SM4_MAC, WISEC_SM4_MAC },
|
||||
{ SGD_SSF33, WISEC_SSF33 },
|
||||
{ SGD_SSF33_ECB, WISEC_SSF33_ECB },
|
||||
{ SGD_SSF33_CBC, WISEC_SSF33_CBC },
|
||||
{ SGD_SSF33_CFB, WISEC_SSF33_CFB },
|
||||
{ SGD_SSF33_OFB, WISEC_SSF33_OFB },
|
||||
{ SGD_SSF33_MAC, WISEC_SSF33_MAC },
|
||||
};
|
||||
|
||||
static ULONG wisec_get_cipher_algor(ULONG vendor_id)
|
||||
{
|
||||
size_t i;
|
||||
for (i = 0; i < sizeof(wisec_ciphers)/sizeof(wisec_ciphers[0]); i++) {
|
||||
if (vendor_id == wisec_ciphers[i].vendor_id) {
|
||||
return wisec_ciphers[i].std_id;
|
||||
}
|
||||
}
|
||||
return 0;
|
||||
}
|
||||
|
||||
static ULONG wisec_get_cipher_cap(ULONG vendor_cap)
|
||||
{
|
||||
ULONG std_cap = 0;
|
||||
size_t i;
|
||||
for (i = 0; i < sizeof(wisec_ciphers)/sizeof(wisec_ciphers[0]); i++) {
|
||||
if (vendor_cap & wisec_ciphers[i].vendor_id) {
|
||||
std_cap |= wisec_ciphers[i].std_id;
|
||||
}
|
||||
}
|
||||
return std_cap;
|
||||
}
|
||||
|
||||
static SKF_ALGOR_PAIR wisec_digests[] = {
|
||||
{ SGD_SM3, WISEC_SM3 },
|
||||
{ SGD_SHA1, WISEC_SHA1 },
|
||||
{ SGD_SHA256, WISEC_SHA256 },
|
||||
};
|
||||
|
||||
static ULONG wisec_get_digest_algor(ULONG vendor_id)
|
||||
{
|
||||
size_t i;
|
||||
for (i = 0; i < sizeof(wisec_digests)/sizeof(wisec_digests[0]); i++) {
|
||||
if (vendor_id == wisec_digests[i].vendor_id) {
|
||||
return wisec_digests[i].std_id;
|
||||
}
|
||||
}
|
||||
return 0;
|
||||
}
|
||||
|
||||
static ULONG wisec_get_digest_cap(ULONG vendor_cap)
|
||||
{
|
||||
ULONG std_cap = 0;
|
||||
size_t i;
|
||||
for (i = 0; i < sizeof(wisec_digests)/sizeof(wisec_digests[0]); i++) {
|
||||
if (vendor_cap & wisec_digests[i].vendor_id) {
|
||||
std_cap |= wisec_digests[i].std_id;
|
||||
}
|
||||
}
|
||||
return std_cap;
|
||||
}
|
||||
|
||||
static SKF_ALGOR_PAIR wisec_pkeys[] = {
|
||||
{ SGD_RSA, WISEC_RSA },
|
||||
{ SGD_RSA_SIGN, WISEC_RSA_SIGN },
|
||||
{ SGD_RSA_ENC, WISEC_RSA_ENC },
|
||||
{ SGD_SM2, WISEC_SM2 },
|
||||
{ SGD_SM2_1, WISEC_SM2_1 },
|
||||
{ SGD_SM2_2, WISEC_SM2_2 },
|
||||
{ SGD_SM2_3, WISEC_SM2_3 },
|
||||
};
|
||||
|
||||
static ULONG wisec_get_pkey_algor(ULONG vendor_id)
|
||||
{
|
||||
size_t i;
|
||||
for (i = 0; i < sizeof(wisec_pkeys)/sizeof(wisec_pkeys[0]); i++) {
|
||||
if (vendor_id == wisec_pkeys[i].vendor_id) {
|
||||
return wisec_pkeys[i].std_id;
|
||||
}
|
||||
}
|
||||
return 0;
|
||||
}
|
||||
|
||||
static ULONG wisec_get_pkey_cap(ULONG vendor_cap)
|
||||
{
|
||||
ULONG std_cap = 0;
|
||||
size_t i;
|
||||
for (i = 0; i < sizeof(wisec_pkeys)/sizeof(wisec_pkeys[0]); i++) {
|
||||
if (vendor_cap & wisec_pkeys[i].vendor_id) {
|
||||
std_cap |= wisec_pkeys[i].std_id;
|
||||
}
|
||||
}
|
||||
return std_cap;
|
||||
}
|
||||
|
||||
static unsigned long wisec_get_error_reason(ULONG err)
|
||||
{
|
||||
return 0;
|
||||
}
|
||||
|
||||
SKF_VENDOR skf_wisec = {
|
||||
"wisec",
|
||||
16,
|
||||
wisec_get_cipher_algor,
|
||||
wisec_get_cipher_cap,
|
||||
wisec_get_digest_algor,
|
||||
wisec_get_digest_cap,
|
||||
wisec_get_pkey_algor,
|
||||
wisec_get_pkey_cap,
|
||||
wisec_get_error_reason,
|
||||
};
|
||||
|
||||
@@ -1,5 +1,5 @@
|
||||
/*
|
||||
* Copyright 2014-2022 The GmSSL Project. All Rights Reserved.
|
||||
* Copyright 2022 The GmSSL Project. All Rights Reserved.
|
||||
*
|
||||
* Licensed under the Apache License, Version 2.0 (the License); you may
|
||||
* not use this file except in compliance with the License.
|
||||
@@ -7,112 +7,111 @@
|
||||
* http://www.apache.org/licenses/LICENSE-2.0
|
||||
*/
|
||||
|
||||
|
||||
|
||||
#ifndef HEADER_SKF_WISEC_H
|
||||
#define HEADER_SKF_WISEC_H
|
||||
|
||||
#include "skf.h"
|
||||
|
||||
|
||||
#define WISEC_SM1 (SGD_SM1)
|
||||
#define WISEC_SM1_ECB (SGD_SM1_ECB)
|
||||
#define WISEC_SM1_CBC (SGD_SM1_CBC)
|
||||
#define WISEC_SM1_CFB (SGD_SM1_CFB)
|
||||
#define WISEC_SM1_OFB (SGD_SM1_OFB)
|
||||
#define WISEC_SM1_MAC (SGD_SM1_MAC)
|
||||
|
||||
#define WISEC_SSF33 (SGD_SSF33)
|
||||
#define WISEC_SSF33_ECB (SGD_SSF33_ECB)
|
||||
#define WISEC_SSF33_CBC (SGD_SSF33_CBC)
|
||||
#define WISEC_SSF33_CFB (SGD_SSF33_CFB)
|
||||
#define WISEC_SSF33_OFB (SGD_SSF33_OFB)
|
||||
#define WISEC_SSF33_MAC (SGD_SSF33_MAC)
|
||||
|
||||
#define WISEC_SM4 (SGD_SM4)
|
||||
#define WISEC_SM4_ECB (WISEC_SM4|SGD_ECB)
|
||||
#define WISEC_SM4_CBC (WISEC_SM4|SGD_CBC)
|
||||
#define WISEC_SM4_CFB (WISEC_SM4|SGD_CFB)
|
||||
#define WISEC_SM4_OFB (WISEC_SM4|SGD_OFB)
|
||||
#define WISEC_SM4_MAC (WISEC_SM4|SGD_MAC)
|
||||
|
||||
#define WISEC_AES 0x00000800
|
||||
#define WISEC_128 0x00000000
|
||||
#define WISEC_192 0x00000010
|
||||
#define WISEC_256 0x00000020
|
||||
#define WISEC_AES128 (WISEC_AES|WISEC_128)
|
||||
#define WISEC_AES192 (WISEC_AES|WISEC_192)
|
||||
#define WISEC_AES256 (WISEC_AES|WISEC_256)
|
||||
#define WISEC_AES128_ECB (WISEC_AES128|SGD_ECB)
|
||||
#define WISEC_AES128_CBC (WISEC_AES128|SGD_CBC)
|
||||
#define WISEC_AES128_CFB (WISEC_AES128|SGD_CFB)
|
||||
#define WISEC_AES128_OFB (WISEC_AES128|SGD_OFB)
|
||||
#define WISEC_AES128_MAC (WISEC_AES128|SGD_MAC)
|
||||
#define WISEC_AES192_ECB (WISEC_AES192|SGD_ECB)
|
||||
#define WISEC_AES192_CBC (WISEC_AES192|SGD_CBC)
|
||||
#define WISEC_AES192_CFB (WISEC_AES192|SGD_CFB)
|
||||
#define WISEC_AES192_OFB (WISEC_AES192|SGD_OFB)
|
||||
#define WISEC_AES192_MAC (WISEC_AES192|SGD_MAC)
|
||||
#define WISEC_AES256_ECB (WISEC_AES256|SGD_ECB)
|
||||
#define WISEC_AES256_CBC (WISEC_AES256|SGD_CBC)
|
||||
#define WISEC_AES256_CFB (WISEC_AES256|SGD_CFB)
|
||||
#define WISEC_AES256_OFB (WISEC_AES256|SGD_OFB)
|
||||
#define WISEC_AES256_MAC (WISEC_AES256|SGD_MAC)
|
||||
|
||||
#define WISEC_DES 0x00001000
|
||||
#define WISEC_DES_ECB (WISEC_DES|SGD_ECB)
|
||||
#define WISEC_DES_CBC (WISEC_DES|SGD_CBC)
|
||||
#define WISEC_DES_CFB (WISEC_DES|SGD_CFB)
|
||||
#define WISEC_DES_OFB (WISEC_DES|SGD_OFB)
|
||||
#define WISEC_DES_MAC (WISEC_DES|SGD_MAC)
|
||||
|
||||
#define WISEC_D3DES 0x00001010
|
||||
#define WISEC_D3DES_ECB (WISEC_D3DES|SGD_ECB)
|
||||
#define WISEC_D3DES_CBC (WISEC_D3DES|SGD_CBC)
|
||||
#define WISEC_D3DES_CFB (WISEC_D3DES|SGD_CFB)
|
||||
#define WISEC_D3DES_OFB (WISEC_D3DES|SGD_OFB)
|
||||
#define WISEC_D3DES_MAC (WISEC_D3DES|SGD_MAC)
|
||||
|
||||
#define WISEC_T3DES 0x00001020
|
||||
#define WISEC_T3DES_ECB (WISEC_T3DES|SGD_ECB)
|
||||
#define WISEC_T3DES_CBC (WISEC_T3DES|SGD_CBC)
|
||||
#define WISEC_T3DES_CFB (WISEC_T3DES|SGD_CFB)
|
||||
#define WISEC_T3DES_OFB (WISEC_T3DES|SGD_OFB)
|
||||
#define WISEC_T3DES_MAC (WISEC_T3DES|SGD_MAC)
|
||||
|
||||
#define WISEC_SM3 (SGD_SM3)
|
||||
#define WISEC_SHA1 (SGD_SHA1)
|
||||
#define WISEC_SHA256 (SGD_SHA256)
|
||||
|
||||
#define WISEC_RSA (SGD_RSA)
|
||||
#define WISEC_RSA_SIGN (SGD_RSA_SIGN)
|
||||
#define WISEC_RSA_ENC (SGD_RSA_ENC)
|
||||
#define WISEC_SM2 (SGD_SM2)
|
||||
#define WISEC_SM2_1 (SGD_SM2_1)
|
||||
#define WISEC_SM2_2 (SGD_SM2_2)
|
||||
#define WISEC_SM2_3 (SGD_SM2_3)
|
||||
|
||||
|
||||
#define WISEC_AUTH_BLOCKED 0x0A000033
|
||||
#define WISEC_CERTNOUSAGEERR 0x0A000034
|
||||
#define WISEC_INVALIDCONTAINERERR 0x0A000035
|
||||
#define WISEC_CONTAINER_NOT_EXISTS 0x0A000036
|
||||
#define WISEC_CONTAINER_EXISTS 0x0A000037
|
||||
#define WISEC_CERTUSAGEERR 0x0A000038
|
||||
#define WISEC_KEYNOUSAGEERR 0x0A000039
|
||||
#define WISEC_FILEATTRIBUTEERR 0x0A00003A
|
||||
#define WISEC_DEVNOAUTH 0x0A00003B
|
||||
|
||||
/*
|
||||
ULONG DEVAPI SKFE_SetSN(DEVHANDLE hDev, CHAR *SN, UINT SNLen);
|
||||
ULONG DEVAPI SKFE_GenExtECCKey(DEVHANDLE hDev, PECCPRIVATEKEYBLOB pPriBlob, PECCPUBLICKEYBLOB pPubBlob);
|
||||
ULONG DEVAPI SKF_ECCDecrypt(HCONTAINER hContainer, PECCCIPHERBLOB pCipherText, BYTE *pbPlainText,ULONG *pulPlainTextLen);
|
||||
ULONG DEVAPI SKF_GenerateKey(HCONTAINER hContainer, ULONG ulAlgId, HANDLE *phSessionKey) ;
|
||||
ULONG DEVAPI SKF_ECCExportSessionKeyByHandle(HANDLE phSessionKey, ECCPUBLICKEYBLOB *pPubKey,PECCCIPHERBLOB pData);
|
||||
ULONG DEVAPI SKF_RSAExportSessionKeyByHandle(HANDLE phSessionKey, RSAPUBLICKEYBLOB*pPubKey,BYTE *pbData, ULONG *pulDataLen);
|
||||
ULONG DEVAPI SKF_PrvKeyDecrypt(HCONTAINER hContainer, PECCCIPHERBLOB pCipherText, BYTE *pbData, ULONG *pbDataLen);
|
||||
ULONG DEVAPI SKF_PrvKeyDecrypt(HCONTAINER hContainer, ULONG ulType, PECCCIPHERBLOB pCipherText, BYTE *pbData, ULONG *pbDataLen);
|
||||
ULONG DEVAPI SKF_RSAPrvKeyDecrypt(HCONTAINER hContainer, BYTE *pCipherData, ULONG pCipherDataLen, BYTE *pbData, ULONG *pbDataLen);
|
||||
*/
|
||||
|
||||
#endif
|
||||
|
||||
#ifndef HEADER_SKF_WISEC_H
|
||||
#define HEADER_SKF_WISEC_H
|
||||
|
||||
#include "skf.h"
|
||||
|
||||
|
||||
#define WISEC_SM1 (SGD_SM1)
|
||||
#define WISEC_SM1_ECB (SGD_SM1_ECB)
|
||||
#define WISEC_SM1_CBC (SGD_SM1_CBC)
|
||||
#define WISEC_SM1_CFB (SGD_SM1_CFB)
|
||||
#define WISEC_SM1_OFB (SGD_SM1_OFB)
|
||||
#define WISEC_SM1_MAC (SGD_SM1_MAC)
|
||||
|
||||
#define WISEC_SSF33 (SGD_SSF33)
|
||||
#define WISEC_SSF33_ECB (SGD_SSF33_ECB)
|
||||
#define WISEC_SSF33_CBC (SGD_SSF33_CBC)
|
||||
#define WISEC_SSF33_CFB (SGD_SSF33_CFB)
|
||||
#define WISEC_SSF33_OFB (SGD_SSF33_OFB)
|
||||
#define WISEC_SSF33_MAC (SGD_SSF33_MAC)
|
||||
|
||||
#define WISEC_SM4 (SGD_SM4)
|
||||
#define WISEC_SM4_ECB (WISEC_SM4|SGD_ECB)
|
||||
#define WISEC_SM4_CBC (WISEC_SM4|SGD_CBC)
|
||||
#define WISEC_SM4_CFB (WISEC_SM4|SGD_CFB)
|
||||
#define WISEC_SM4_OFB (WISEC_SM4|SGD_OFB)
|
||||
#define WISEC_SM4_MAC (WISEC_SM4|SGD_MAC)
|
||||
|
||||
#define WISEC_AES 0x00000800
|
||||
#define WISEC_128 0x00000000
|
||||
#define WISEC_192 0x00000010
|
||||
#define WISEC_256 0x00000020
|
||||
#define WISEC_AES128 (WISEC_AES|WISEC_128)
|
||||
#define WISEC_AES192 (WISEC_AES|WISEC_192)
|
||||
#define WISEC_AES256 (WISEC_AES|WISEC_256)
|
||||
#define WISEC_AES128_ECB (WISEC_AES128|SGD_ECB)
|
||||
#define WISEC_AES128_CBC (WISEC_AES128|SGD_CBC)
|
||||
#define WISEC_AES128_CFB (WISEC_AES128|SGD_CFB)
|
||||
#define WISEC_AES128_OFB (WISEC_AES128|SGD_OFB)
|
||||
#define WISEC_AES128_MAC (WISEC_AES128|SGD_MAC)
|
||||
#define WISEC_AES192_ECB (WISEC_AES192|SGD_ECB)
|
||||
#define WISEC_AES192_CBC (WISEC_AES192|SGD_CBC)
|
||||
#define WISEC_AES192_CFB (WISEC_AES192|SGD_CFB)
|
||||
#define WISEC_AES192_OFB (WISEC_AES192|SGD_OFB)
|
||||
#define WISEC_AES192_MAC (WISEC_AES192|SGD_MAC)
|
||||
#define WISEC_AES256_ECB (WISEC_AES256|SGD_ECB)
|
||||
#define WISEC_AES256_CBC (WISEC_AES256|SGD_CBC)
|
||||
#define WISEC_AES256_CFB (WISEC_AES256|SGD_CFB)
|
||||
#define WISEC_AES256_OFB (WISEC_AES256|SGD_OFB)
|
||||
#define WISEC_AES256_MAC (WISEC_AES256|SGD_MAC)
|
||||
|
||||
#define WISEC_DES 0x00001000
|
||||
#define WISEC_DES_ECB (WISEC_DES|SGD_ECB)
|
||||
#define WISEC_DES_CBC (WISEC_DES|SGD_CBC)
|
||||
#define WISEC_DES_CFB (WISEC_DES|SGD_CFB)
|
||||
#define WISEC_DES_OFB (WISEC_DES|SGD_OFB)
|
||||
#define WISEC_DES_MAC (WISEC_DES|SGD_MAC)
|
||||
|
||||
#define WISEC_D3DES 0x00001010
|
||||
#define WISEC_D3DES_ECB (WISEC_D3DES|SGD_ECB)
|
||||
#define WISEC_D3DES_CBC (WISEC_D3DES|SGD_CBC)
|
||||
#define WISEC_D3DES_CFB (WISEC_D3DES|SGD_CFB)
|
||||
#define WISEC_D3DES_OFB (WISEC_D3DES|SGD_OFB)
|
||||
#define WISEC_D3DES_MAC (WISEC_D3DES|SGD_MAC)
|
||||
|
||||
#define WISEC_T3DES 0x00001020
|
||||
#define WISEC_T3DES_ECB (WISEC_T3DES|SGD_ECB)
|
||||
#define WISEC_T3DES_CBC (WISEC_T3DES|SGD_CBC)
|
||||
#define WISEC_T3DES_CFB (WISEC_T3DES|SGD_CFB)
|
||||
#define WISEC_T3DES_OFB (WISEC_T3DES|SGD_OFB)
|
||||
#define WISEC_T3DES_MAC (WISEC_T3DES|SGD_MAC)
|
||||
|
||||
#define WISEC_SM3 (SGD_SM3)
|
||||
#define WISEC_SHA1 (SGD_SHA1)
|
||||
#define WISEC_SHA256 (SGD_SHA256)
|
||||
|
||||
#define WISEC_RSA (SGD_RSA)
|
||||
#define WISEC_RSA_SIGN (SGD_RSA_SIGN)
|
||||
#define WISEC_RSA_ENC (SGD_RSA_ENC)
|
||||
#define WISEC_SM2 (SGD_SM2)
|
||||
#define WISEC_SM2_1 (SGD_SM2_1)
|
||||
#define WISEC_SM2_2 (SGD_SM2_2)
|
||||
#define WISEC_SM2_3 (SGD_SM2_3)
|
||||
|
||||
|
||||
#define WISEC_AUTH_BLOCKED 0x0A000033
|
||||
#define WISEC_CERTNOUSAGEERR 0x0A000034
|
||||
#define WISEC_INVALIDCONTAINERERR 0x0A000035
|
||||
#define WISEC_CONTAINER_NOT_EXISTS 0x0A000036
|
||||
#define WISEC_CONTAINER_EXISTS 0x0A000037
|
||||
#define WISEC_CERTUSAGEERR 0x0A000038
|
||||
#define WISEC_KEYNOUSAGEERR 0x0A000039
|
||||
#define WISEC_FILEATTRIBUTEERR 0x0A00003A
|
||||
#define WISEC_DEVNOAUTH 0x0A00003B
|
||||
|
||||
/*
|
||||
ULONG DEVAPI SKFE_SetSN(DEVHANDLE hDev, CHAR *SN, UINT SNLen);
|
||||
ULONG DEVAPI SKFE_GenExtECCKey(DEVHANDLE hDev, PECCPRIVATEKEYBLOB pPriBlob, PECCPUBLICKEYBLOB pPubBlob);
|
||||
ULONG DEVAPI SKF_ECCDecrypt(HCONTAINER hContainer, PECCCIPHERBLOB pCipherText, BYTE *pbPlainText,ULONG *pulPlainTextLen);
|
||||
ULONG DEVAPI SKF_GenerateKey(HCONTAINER hContainer, ULONG ulAlgId, HANDLE *phSessionKey) ;
|
||||
ULONG DEVAPI SKF_ECCExportSessionKeyByHandle(HANDLE phSessionKey, ECCPUBLICKEYBLOB *pPubKey,PECCCIPHERBLOB pData);
|
||||
ULONG DEVAPI SKF_RSAExportSessionKeyByHandle(HANDLE phSessionKey, RSAPUBLICKEYBLOB*pPubKey,BYTE *pbData, ULONG *pulDataLen);
|
||||
ULONG DEVAPI SKF_PrvKeyDecrypt(HCONTAINER hContainer, PECCCIPHERBLOB pCipherText, BYTE *pbData, ULONG *pbDataLen);
|
||||
ULONG DEVAPI SKF_PrvKeyDecrypt(HCONTAINER hContainer, ULONG ulType, PECCCIPHERBLOB pCipherText, BYTE *pbData, ULONG *pbDataLen);
|
||||
ULONG DEVAPI SKF_RSAPrvKeyDecrypt(HCONTAINER hContainer, BYTE *pCipherData, ULONG pCipherDataLen, BYTE *pbData, ULONG *pbDataLen);
|
||||
*/
|
||||
|
||||
#endif
|
||||
|
||||
Reference in New Issue
Block a user