mirror of
https://github.com/guanzhi/GmSSL.git
synced 2026-05-07 17:06:25 +08:00
1427 lines
30 KiB
C
1427 lines
30 KiB
C
/* ====================================================================
|
|
* Copyright (c) 2014 - 2017 The GmSSL Project. All rights reserved.
|
|
*
|
|
* Redistribution and use in source and binary forms, with or without
|
|
* modification, are permitted provided that the following conditions
|
|
* are met:
|
|
*
|
|
* 1. Redistributions of source code must retain the above copyright
|
|
* notice, this list of conditions and the following disclaimer.
|
|
*
|
|
* 2. Redistributions in binary form must reproduce the above copyright
|
|
* notice, this list of conditions and the following disclaimer in
|
|
* the documentation and/or other materials provided with the
|
|
* distribution.
|
|
*
|
|
* 3. All advertising materials mentioning features or use of this
|
|
* software must display the following acknowledgment:
|
|
* "This product includes software developed by the GmSSL Project.
|
|
* (http://gmssl.org/)"
|
|
*
|
|
* 4. The name "GmSSL Project" must not be used to endorse or promote
|
|
* products derived from this software without prior written
|
|
* permission. For written permission, please contact
|
|
* guanzhi1980@gmail.com.
|
|
*
|
|
* 5. Products derived from this software may not be called "GmSSL"
|
|
* nor may "GmSSL" appear in their names without prior written
|
|
* permission of the GmSSL Project.
|
|
*
|
|
* 6. Redistributions of any form whatsoever must retain the following
|
|
* acknowledgment:
|
|
* "This product includes software developed by the GmSSL Project
|
|
* (http://gmssl.org/)"
|
|
*
|
|
* THIS SOFTWARE IS PROVIDED BY THE GmSSL PROJECT ``AS IS'' AND ANY
|
|
* EXPRESSED OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
|
|
* IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR
|
|
* PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE GmSSL PROJECT OR
|
|
* ITS CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
|
|
* SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT
|
|
* NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES;
|
|
* LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION)
|
|
* HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT,
|
|
* STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE)
|
|
* ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED
|
|
* OF THE POSSIBILITY OF SUCH DAMAGE.
|
|
* ====================================================================
|
|
*/
|
|
|
|
#include <stdio.h>
|
|
#include <stdlib.h>
|
|
#include <string.h>
|
|
#include <openssl/err.h>
|
|
#include <openssl/skf.h>
|
|
#include "internal/dso.h"
|
|
#include "internal/skf_meth.h"
|
|
#include "../../e_os.h"
|
|
|
|
static SKF_METHOD *skf_method = NULL;
|
|
|
|
ULONG SKF_LoadLibrary(const char *so_path)
|
|
{
|
|
|
|
return SAR_OK;
|
|
}
|
|
|
|
ULONG SKF_UnloadLibrary(void)
|
|
{
|
|
skf_method = NULL;
|
|
return 0;
|
|
}
|
|
|
|
|
|
ULONG DEVAPI SKF_WaitForDevEvent(
|
|
LPSTR szDevName,
|
|
ULONG *pulDevNameLen,
|
|
ULONG *pulEvent)
|
|
{
|
|
if (skf_method->WaitForDevEvent) {
|
|
return skf_method->WaitForDevEvent(
|
|
szDevName,
|
|
pulDevNameLen,
|
|
pulEvent);
|
|
}
|
|
return SAR_NOTSUPPORTYETERR;
|
|
}
|
|
|
|
ULONG DEVAPI SKF_CancelWaitForDevEvent(
|
|
void)
|
|
{
|
|
if (skf_method->CancelWaitForDevEvent) {
|
|
return skf_method->CancelWaitForDevEvent();
|
|
}
|
|
return SAR_NOTSUPPORTYETERR;
|
|
}
|
|
|
|
ULONG DEVAPI SKF_EnumDev(
|
|
BOOL bPresent,
|
|
LPSTR szNameList,
|
|
ULONG *pulSize)
|
|
{
|
|
if (skf_method->EnumDev) {
|
|
return skf_method->EnumDev(
|
|
bPresent,
|
|
szNameList,
|
|
pulSize);
|
|
}
|
|
return SAR_NOTSUPPORTYETERR;
|
|
}
|
|
|
|
ULONG DEVAPI SKF_ConnectDev(
|
|
LPSTR szName,
|
|
DEVHANDLE *phDev)
|
|
{
|
|
if (skf_method->ConnectDev) {
|
|
return skf_method->ConnectDev(
|
|
szName,
|
|
phDev);
|
|
}
|
|
return SAR_NOTSUPPORTYETERR;
|
|
}
|
|
|
|
ULONG DEVAPI SKF_DisConnectDev(
|
|
DEVHANDLE hDev)
|
|
{
|
|
if (skf_method->DisConnectDev) {
|
|
return skf_method->DisConnectDev(
|
|
hDev);
|
|
}
|
|
return SAR_NOTSUPPORTYETERR;
|
|
}
|
|
|
|
ULONG DEVAPI SKF_GetDevState(
|
|
LPSTR szDevName,
|
|
ULONG *pulDevState)
|
|
{
|
|
if (skf_method->GetDevState) {
|
|
return skf_method->GetDevState(
|
|
szDevName,
|
|
pulDevState);
|
|
}
|
|
return SAR_NOTSUPPORTYETERR;
|
|
}
|
|
|
|
ULONG DEVAPI SKF_SetLabel(
|
|
DEVHANDLE hDev,
|
|
LPSTR szLabel)
|
|
{
|
|
if (skf_method->SetLabel) {
|
|
return skf_method->SetLabel(
|
|
hDev,
|
|
szLabel);
|
|
}
|
|
return SAR_NOTSUPPORTYETERR;
|
|
}
|
|
|
|
ULONG DEVAPI SKF_GetDevInfo(
|
|
DEVHANDLE hDev,
|
|
DEVINFO *pDevInfo)
|
|
{
|
|
if (skf_method->GetDevInfo) {
|
|
return skf_method->GetDevInfo(
|
|
hDev,
|
|
pDevInfo);
|
|
}
|
|
return SAR_NOTSUPPORTYETERR;
|
|
}
|
|
|
|
ULONG DEVAPI SKF_LockDev(
|
|
DEVHANDLE hDev,
|
|
ULONG ulTimeOut)
|
|
{
|
|
if (skf_method->LockDev) {
|
|
return skf_method->LockDev(
|
|
hDev,
|
|
ulTimeOut);
|
|
}
|
|
return SAR_NOTSUPPORTYETERR;
|
|
}
|
|
|
|
ULONG DEVAPI SKF_UnlockDev(
|
|
DEVHANDLE hDev)
|
|
{
|
|
if (skf_method->UnlockDev) {
|
|
return skf_method->UnlockDev(
|
|
hDev);
|
|
}
|
|
return SAR_NOTSUPPORTYETERR;
|
|
}
|
|
|
|
ULONG DEVAPI SKF_Transmit(
|
|
DEVHANDLE hDev,
|
|
BYTE *pbCommand,
|
|
ULONG ulCommandLen,
|
|
BYTE *pbData,
|
|
ULONG *pulDataLen)
|
|
{
|
|
if (skf_method->Transmit) {
|
|
return skf_method->Transmit(
|
|
hDev,
|
|
pbCommand,
|
|
ulCommandLen,
|
|
pbData,
|
|
pulDataLen);
|
|
}
|
|
return SAR_NOTSUPPORTYETERR;
|
|
}
|
|
|
|
ULONG DEVAPI SKF_ChangeDevAuthKey(
|
|
DEVHANDLE hDev,
|
|
BYTE *pbKeyValue,
|
|
ULONG ulKeyLen)
|
|
{
|
|
if (skf_method->ChangeDevAuthKey) {
|
|
return skf_method->ChangeDevAuthKey(
|
|
hDev,
|
|
pbKeyValue,
|
|
ulKeyLen);
|
|
}
|
|
return SAR_NOTSUPPORTYETERR;
|
|
}
|
|
|
|
ULONG DEVAPI SKF_DevAuth(
|
|
DEVHANDLE hDev,
|
|
BYTE *pbAuthData,
|
|
ULONG ulLen)
|
|
{
|
|
if (skf_method->DevAuth) {
|
|
return skf_method->DevAuth(
|
|
hDev,
|
|
pbAuthData,
|
|
ulLen);
|
|
}
|
|
return SAR_NOTSUPPORTYETERR;
|
|
}
|
|
|
|
ULONG DEVAPI SKF_ChangePIN(
|
|
HAPPLICATION hApplication,
|
|
ULONG ulPINType,
|
|
LPSTR szOldPin,
|
|
LPSTR szNewPin,
|
|
ULONG *pulRetryCount)
|
|
{
|
|
if (skf_method->ChangePIN) {
|
|
return skf_method->ChangePIN(
|
|
hApplication,
|
|
ulPINType,
|
|
szOldPin,
|
|
szNewPin,
|
|
pulRetryCount);
|
|
}
|
|
return SAR_NOTSUPPORTYETERR;
|
|
}
|
|
|
|
LONG DEVAPI SKF_GetPINInfo(
|
|
HAPPLICATION hApplication,
|
|
ULONG ulPINType,
|
|
ULONG *pulMaxRetryCount,
|
|
ULONG *pulRemainRetryCount,
|
|
BOOL *pbDefaultPin)
|
|
{
|
|
if (skf_method->GetPINInfo) {
|
|
return skf_method->GetPINInfo(
|
|
hApplication,
|
|
ulPINType,
|
|
pulMaxRetryCount,
|
|
pulRemainRetryCount,
|
|
pbDefaultPin);
|
|
}
|
|
return SAR_NOTSUPPORTYETERR;
|
|
}
|
|
|
|
ULONG DEVAPI SKF_VerifyPIN(
|
|
HAPPLICATION hApplication,
|
|
ULONG ulPINType,
|
|
LPSTR szPIN,
|
|
ULONG *pulRetryCount)
|
|
{
|
|
if (skf_method->VerifyPIN) {
|
|
return skf_method->VerifyPIN(
|
|
hApplication,
|
|
ulPINType,
|
|
szPIN,
|
|
pulRetryCount);
|
|
}
|
|
return SAR_NOTSUPPORTYETERR;
|
|
}
|
|
|
|
ULONG DEVAPI SKF_UnblockPIN(
|
|
HAPPLICATION hApplication,
|
|
LPSTR szAdminPIN,
|
|
LPSTR szNewUserPIN,
|
|
ULONG *pulRetryCount)
|
|
{
|
|
if (skf_method->UnblockPIN) {
|
|
return skf_method->UnblockPIN(
|
|
hApplication,
|
|
szAdminPIN,
|
|
szNewUserPIN,
|
|
pulRetryCount);
|
|
}
|
|
return SAR_NOTSUPPORTYETERR;
|
|
}
|
|
|
|
ULONG DEVAPI SKF_ClearSecureState(
|
|
HAPPLICATION hApplication)
|
|
{
|
|
if (skf_method->ClearSecureState) {
|
|
return skf_method->ClearSecureState(
|
|
hApplication);
|
|
}
|
|
return SAR_NOTSUPPORTYETERR;
|
|
}
|
|
|
|
ULONG DEVAPI SKF_CreateApplication(
|
|
DEVHANDLE hDev,
|
|
LPSTR szAppName,
|
|
LPSTR szAdminPin,
|
|
DWORD dwAdminPinRetryCount,
|
|
LPSTR szUserPin,
|
|
DWORD dwUserPinRetryCount,
|
|
DWORD dwCreateFileRights,
|
|
HAPPLICATION *phApplication)
|
|
{
|
|
if (skf_method->CreateApplication) {
|
|
return skf_method->CreateApplication(
|
|
hDev,
|
|
szAppName,
|
|
szAdminPin,
|
|
dwAdminPinRetryCount,
|
|
szUserPin,
|
|
dwUserPinRetryCount,
|
|
dwCreateFileRights,
|
|
phApplication);
|
|
}
|
|
return SAR_NOTSUPPORTYETERR;
|
|
}
|
|
|
|
ULONG DEVAPI SKF_EnumApplication(
|
|
DEVHANDLE hDev,
|
|
LPSTR szAppName,
|
|
ULONG *pulSize)
|
|
{
|
|
if (skf_method->EnumApplication) {
|
|
return skf_method->EnumApplication(
|
|
hDev,
|
|
szAppName,
|
|
pulSize);
|
|
}
|
|
return SAR_NOTSUPPORTYETERR;
|
|
}
|
|
|
|
ULONG DEVAPI SKF_DeleteApplication(
|
|
DEVHANDLE hDev,
|
|
LPSTR szAppName)
|
|
{
|
|
if (skf_method->DeleteApplication) {
|
|
return skf_method->DeleteApplication(
|
|
hDev,
|
|
szAppName);
|
|
}
|
|
return SAR_NOTSUPPORTYETERR;
|
|
}
|
|
|
|
ULONG DEVAPI SKF_OpenApplication(
|
|
DEVHANDLE hDev,
|
|
LPSTR szAppName,
|
|
HAPPLICATION *phApplication)
|
|
{
|
|
if (skf_method->OpenApplication) {
|
|
return skf_method->OpenApplication(
|
|
hDev,
|
|
szAppName,
|
|
phApplication);
|
|
}
|
|
return SAR_NOTSUPPORTYETERR;
|
|
}
|
|
|
|
ULONG DEVAPI SKF_CloseApplication(
|
|
HAPPLICATION hApplication)
|
|
{
|
|
if (skf_method->CloseApplication) {
|
|
return skf_method->CloseApplication(
|
|
hApplication);
|
|
}
|
|
return SAR_NOTSUPPORTYETERR;
|
|
}
|
|
|
|
ULONG DEVAPI SKF_CreateFile(
|
|
HAPPLICATION hApplication,
|
|
LPSTR szFileName,
|
|
ULONG ulFileSize,
|
|
ULONG ulReadRights,
|
|
ULONG ulWriteRights)
|
|
{
|
|
if (skf_method->CreateFileObject) {
|
|
return skf_method->CreateFileObject(
|
|
hApplication,
|
|
szFileName,
|
|
ulFileSize,
|
|
ulReadRights,
|
|
ulWriteRights);
|
|
}
|
|
return SAR_NOTSUPPORTYETERR;
|
|
}
|
|
|
|
ULONG DEVAPI SKF_DeleteFile(
|
|
HAPPLICATION hApplication,
|
|
LPSTR szFileName)
|
|
{
|
|
if (skf_method->DeleteFileObject) {
|
|
return skf_method->DeleteFileObject(
|
|
hApplication,
|
|
szFileName);
|
|
}
|
|
return SAR_NOTSUPPORTYETERR;
|
|
}
|
|
|
|
ULONG DEVAPI SKF_EnumFiles(
|
|
HAPPLICATION hApplication,
|
|
LPSTR szFileList,
|
|
ULONG *pulSize)
|
|
{
|
|
if (skf_method->EnumFiles) {
|
|
return skf_method->EnumFiles(
|
|
hApplication,
|
|
szFileList,
|
|
pulSize);
|
|
}
|
|
return SAR_NOTSUPPORTYETERR;
|
|
}
|
|
|
|
ULONG DEVAPI SKF_GetFileInfo(
|
|
HAPPLICATION hApplication,
|
|
LPSTR szFileName,
|
|
FILEATTRIBUTE *pFileInfo)
|
|
{
|
|
if (skf_method->GetFileInfo) {
|
|
return skf_method->GetFileInfo(
|
|
hApplication,
|
|
szFileName,
|
|
pFileInfo);
|
|
}
|
|
return SAR_NOTSUPPORTYETERR;
|
|
}
|
|
|
|
ULONG DEVAPI SKF_ReadFile(
|
|
HAPPLICATION hApplication,
|
|
LPSTR szFileName,
|
|
ULONG ulOffset,
|
|
ULONG ulSize,
|
|
BYTE *pbOutData,
|
|
ULONG *pulOutLen)
|
|
{
|
|
if (skf_method->ReadFileObject) {
|
|
return skf_method->ReadFileObject(
|
|
hApplication,
|
|
szFileName,
|
|
ulOffset,
|
|
ulSize,
|
|
pbOutData,
|
|
pulOutLen);
|
|
}
|
|
return SAR_NOTSUPPORTYETERR;
|
|
}
|
|
|
|
ULONG DEVAPI SKF_WriteFile(
|
|
HAPPLICATION hApplication,
|
|
LPSTR szFileName,
|
|
ULONG ulOffset,
|
|
BYTE *pbData,
|
|
ULONG ulSize)
|
|
{
|
|
if (skf_method->WriteFileObject) {
|
|
return skf_method->WriteFileObject(
|
|
hApplication,
|
|
szFileName,
|
|
ulOffset,
|
|
pbData,
|
|
ulSize);
|
|
}
|
|
return SAR_NOTSUPPORTYETERR;
|
|
}
|
|
|
|
ULONG DEVAPI SKF_CreateContainer(
|
|
HAPPLICATION hApplication,
|
|
LPSTR szContainerName,
|
|
HCONTAINER *phContainer)
|
|
{
|
|
if (skf_method->CreateContainer) {
|
|
return skf_method->CreateContainer(
|
|
hApplication,
|
|
szContainerName,
|
|
phContainer);
|
|
}
|
|
return SAR_NOTSUPPORTYETERR;
|
|
}
|
|
|
|
ULONG DEVAPI SKF_DeleteContainer(
|
|
HAPPLICATION hApplication,
|
|
LPSTR szContainerName)
|
|
{
|
|
if (skf_method->DeleteContainer) {
|
|
return skf_method->DeleteContainer(
|
|
hApplication,
|
|
szContainerName);
|
|
}
|
|
return SAR_NOTSUPPORTYETERR;
|
|
}
|
|
|
|
ULONG DEVAPI SKF_EnumContainer(
|
|
HAPPLICATION hApplication,
|
|
LPSTR szContainerName,
|
|
ULONG *pulSize)
|
|
{
|
|
if (skf_method->EnumContainer) {
|
|
return skf_method->EnumContainer(
|
|
hApplication,
|
|
szContainerName,
|
|
pulSize);
|
|
}
|
|
return SAR_NOTSUPPORTYETERR;
|
|
}
|
|
|
|
ULONG DEVAPI SKF_OpenContainer(
|
|
HAPPLICATION hApplication,
|
|
LPSTR szContainerName,
|
|
HCONTAINER *phContainer)
|
|
{
|
|
if (skf_method->OpenContainer) {
|
|
return skf_method->OpenContainer(
|
|
hApplication,
|
|
szContainerName,
|
|
phContainer);
|
|
}
|
|
return SAR_NOTSUPPORTYETERR;
|
|
}
|
|
|
|
ULONG DEVAPI SKF_CloseContainer(
|
|
HCONTAINER hContainer)
|
|
{
|
|
if (skf_method->CloseContainer) {
|
|
return skf_method->CloseContainer(
|
|
hContainer);
|
|
}
|
|
return SAR_NOTSUPPORTYETERR;
|
|
}
|
|
|
|
ULONG DEVAPI SKF_GetContainerType(
|
|
HCONTAINER hContainer,
|
|
ULONG *pulContainerType)
|
|
{
|
|
if (skf_method->GetContainerType) {
|
|
return skf_method->GetContainerType(
|
|
hContainer,
|
|
pulContainerType);
|
|
}
|
|
return SAR_NOTSUPPORTYETERR;
|
|
}
|
|
|
|
ULONG DEVAPI SKF_ImportCertificate(
|
|
HCONTAINER hContainer,
|
|
BOOL bExportSignKey,
|
|
BYTE *pbCert,
|
|
ULONG ulCertLen)
|
|
{
|
|
if (skf_method->ImportCertificate) {
|
|
return skf_method->ImportCertificate(
|
|
hContainer,
|
|
bExportSignKey,
|
|
pbCert,
|
|
ulCertLen);
|
|
}
|
|
return SAR_NOTSUPPORTYETERR;
|
|
}
|
|
|
|
ULONG DEVAPI SKF_ExportCertificate(
|
|
HCONTAINER hContainer,
|
|
BOOL bSignFlag,
|
|
BYTE *pbCert,
|
|
ULONG *pulCertLen)
|
|
{
|
|
if (skf_method->ExportCertificate) {
|
|
return skf_method->ExportCertificate(
|
|
hContainer,
|
|
bSignFlag,
|
|
pbCert,
|
|
pulCertLen);
|
|
}
|
|
return SAR_NOTSUPPORTYETERR;
|
|
}
|
|
|
|
ULONG DEVAPI SKF_ExportPublicKey(
|
|
HCONTAINER hContainer,
|
|
BOOL bSignFlag,
|
|
BYTE *pbBlob,
|
|
ULONG *pulBlobLen)
|
|
{
|
|
if (skf_method->ExportPublicKey) {
|
|
return skf_method->ExportPublicKey(
|
|
hContainer,
|
|
bSignFlag,
|
|
pbBlob,
|
|
pulBlobLen);
|
|
}
|
|
return SAR_NOTSUPPORTYETERR;
|
|
}
|
|
|
|
ULONG DEVAPI SKF_GenRandom(
|
|
DEVHANDLE hDev,
|
|
BYTE *pbRandom,
|
|
ULONG ulRandomLen)
|
|
{
|
|
if (skf_method->GenRandom) {
|
|
return skf_method->GenRandom(
|
|
hDev,
|
|
pbRandom,
|
|
ulRandomLen);
|
|
}
|
|
return SAR_NOTSUPPORTYETERR;
|
|
}
|
|
|
|
ULONG DEVAPI SKF_GenExtRSAKey(
|
|
DEVHANDLE hDev,
|
|
ULONG ulBitsLen,
|
|
RSAPRIVATEKEYBLOB *pBlob)
|
|
{
|
|
if (skf_method->GenExtRSAKey) {
|
|
return skf_method->GenExtRSAKey(
|
|
hDev,
|
|
ulBitsLen,
|
|
pBlob);
|
|
}
|
|
return SAR_NOTSUPPORTYETERR;
|
|
}
|
|
|
|
ULONG DEVAPI SKF_GenRSAKeyPair(
|
|
HCONTAINER hContainer,
|
|
ULONG ulBitsLen,
|
|
RSAPUBLICKEYBLOB *pBlob)
|
|
{
|
|
if (skf_method->GenRSAKeyPair) {
|
|
return skf_method->GenRSAKeyPair(
|
|
hContainer,
|
|
ulBitsLen,
|
|
pBlob);
|
|
}
|
|
return SAR_NOTSUPPORTYETERR;
|
|
}
|
|
|
|
ULONG DEVAPI SKF_ImportRSAKeyPair(
|
|
HCONTAINER hContainer,
|
|
ULONG ulSymAlgId,
|
|
BYTE *pbWrappedKey,
|
|
ULONG ulWrappedKeyLen,
|
|
BYTE *pbEncryptedData,
|
|
ULONG ulEncryptedDataLen)
|
|
{
|
|
if (skf_method->ImportRSAKeyPair) {
|
|
return skf_method->ImportRSAKeyPair(
|
|
hContainer,
|
|
ulSymAlgId,
|
|
pbWrappedKey,
|
|
ulWrappedKeyLen,
|
|
pbEncryptedData,
|
|
ulEncryptedDataLen);
|
|
}
|
|
return SAR_NOTSUPPORTYETERR;
|
|
}
|
|
|
|
ULONG DEVAPI SKF_RSASignData(
|
|
HCONTAINER hContainer,
|
|
BYTE *pbData,
|
|
ULONG ulDataLen,
|
|
BYTE *pbSignature,
|
|
ULONG *pulSignLen)
|
|
{
|
|
if (skf_method->RSASignData) {
|
|
return skf_method->RSASignData(
|
|
hContainer,
|
|
pbData,
|
|
ulDataLen,
|
|
pbSignature,
|
|
pulSignLen);
|
|
}
|
|
return SAR_NOTSUPPORTYETERR;
|
|
}
|
|
|
|
ULONG DEVAPI SKF_RSAVerify(
|
|
DEVHANDLE hDev,
|
|
RSAPUBLICKEYBLOB *pRSAPubKeyBlob,
|
|
BYTE *pbData,
|
|
ULONG ulDataLen,
|
|
BYTE *pbSignature,
|
|
ULONG ulSignLen)
|
|
{
|
|
if (skf_method->RSAVerify) {
|
|
return skf_method->RSAVerify(
|
|
hDev,
|
|
pRSAPubKeyBlob,
|
|
pbData,
|
|
ulDataLen,
|
|
pbSignature,
|
|
ulSignLen);
|
|
}
|
|
return SAR_NOTSUPPORTYETERR;
|
|
}
|
|
|
|
ULONG DEVAPI SKF_RSAExportSessionKey(
|
|
HCONTAINER hContainer,
|
|
ULONG ulAlgId,
|
|
RSAPUBLICKEYBLOB *pPubKey,
|
|
BYTE *pbData,
|
|
ULONG *pulDataLen,
|
|
HANDLE *phSessionKey)
|
|
{
|
|
if (skf_method->RSAExportSessionKey) {
|
|
return skf_method->RSAExportSessionKey(
|
|
hContainer,
|
|
ulAlgId,
|
|
pPubKey,
|
|
pbData,
|
|
pulDataLen,
|
|
phSessionKey);
|
|
}
|
|
return SAR_NOTSUPPORTYETERR;
|
|
}
|
|
|
|
ULONG DEVAPI SKF_ExtRSAPubKeyOperation(
|
|
DEVHANDLE hDev,
|
|
RSAPUBLICKEYBLOB *pRSAPubKeyBlob,
|
|
BYTE *pbInput,
|
|
ULONG ulInputLen,
|
|
BYTE *pbOutput,
|
|
ULONG *pulOutputLen)
|
|
{
|
|
if (skf_method->ExtRSAPubKeyOperation) {
|
|
return skf_method->ExtRSAPubKeyOperation(
|
|
hDev,
|
|
pRSAPubKeyBlob,
|
|
pbInput,
|
|
ulInputLen,
|
|
pbOutput,
|
|
pulOutputLen);
|
|
}
|
|
return SAR_NOTSUPPORTYETERR;
|
|
}
|
|
|
|
ULONG DEVAPI SKF_ExtRSAPriKeyOperation(
|
|
DEVHANDLE hDev,
|
|
RSAPRIVATEKEYBLOB *pRSAPriKeyBlob,
|
|
BYTE *pbInput,
|
|
ULONG ulInputLen,
|
|
BYTE *pbOutput,
|
|
ULONG *pulOutputLen)
|
|
{
|
|
if (skf_method->ExtRSAPriKeyOperation) {
|
|
return skf_method->ExtRSAPriKeyOperation(
|
|
hDev,
|
|
pRSAPriKeyBlob,
|
|
pbInput,
|
|
ulInputLen,
|
|
pbOutput,
|
|
pulOutputLen);
|
|
}
|
|
return SAR_NOTSUPPORTYETERR;
|
|
}
|
|
|
|
ULONG DEVAPI SKF_GenECCKeyPair(
|
|
HCONTAINER hContainer,
|
|
ULONG ulAlgId,
|
|
ECCPUBLICKEYBLOB *pBlob)
|
|
{
|
|
if (skf_method->GenECCKeyPair) {
|
|
return skf_method->GenECCKeyPair(
|
|
hContainer,
|
|
ulAlgId,
|
|
pBlob);
|
|
}
|
|
return SAR_NOTSUPPORTYETERR;
|
|
}
|
|
|
|
ULONG DEVAPI SKF_ImportECCKeyPair(
|
|
HCONTAINER hContainer,
|
|
ENVELOPEDKEYBLOB *pEnvelopedKeyBlob)
|
|
{
|
|
if (skf_method->ImportECCKeyPair) {
|
|
return skf_method->ImportECCKeyPair(
|
|
hContainer,
|
|
pEnvelopedKeyBlob);
|
|
}
|
|
return SAR_NOTSUPPORTYETERR;
|
|
}
|
|
|
|
ULONG DEVAPI SKF_ECCSignData(
|
|
HCONTAINER hContainer,
|
|
BYTE *pbDigest,
|
|
ULONG ulDigestLen,
|
|
ECCSIGNATUREBLOB *pSignature)
|
|
{
|
|
if (skf_method->ECCSignData) {
|
|
return skf_method->ECCSignData(
|
|
hContainer,
|
|
pbDigest,
|
|
ulDigestLen,
|
|
pSignature);
|
|
}
|
|
return SAR_NOTSUPPORTYETERR;
|
|
}
|
|
|
|
ULONG DEVAPI SKF_ECCVerify(
|
|
DEVHANDLE hDev,
|
|
ECCPUBLICKEYBLOB *pECCPubKeyBlob,
|
|
BYTE *pbData,
|
|
ULONG ulDataLen,
|
|
ECCSIGNATUREBLOB *pSignature)
|
|
{
|
|
if (skf_method->ECCVerify) {
|
|
return skf_method->ECCVerify(
|
|
hDev,
|
|
pECCPubKeyBlob,
|
|
pbData,
|
|
ulDataLen,
|
|
pSignature);
|
|
}
|
|
return SAR_NOTSUPPORTYETERR;
|
|
}
|
|
|
|
ULONG DEVAPI SKF_ECCExportSessionKey(
|
|
HCONTAINER hContainer,
|
|
ULONG ulAlgId,
|
|
ECCPUBLICKEYBLOB *pPubKey,
|
|
ECCCIPHERBLOB *pData,
|
|
HANDLE *phSessionKey)
|
|
{
|
|
if (skf_method->ECCExportSessionKey) {
|
|
return skf_method->ECCExportSessionKey(
|
|
hContainer,
|
|
ulAlgId,
|
|
pPubKey,
|
|
pData,
|
|
phSessionKey);
|
|
}
|
|
return SAR_NOTSUPPORTYETERR;
|
|
}
|
|
|
|
ULONG DEVAPI SKF_ExtECCEncrypt(
|
|
DEVHANDLE hDev,
|
|
ECCPUBLICKEYBLOB *pECCPubKeyBlob,
|
|
BYTE *pbPlainText,
|
|
ULONG ulPlainTextLen,
|
|
ECCCIPHERBLOB *pCipherText)
|
|
{
|
|
if (skf_method->ExtECCEncrypt) {
|
|
return skf_method->ExtECCEncrypt(
|
|
hDev,
|
|
pECCPubKeyBlob,
|
|
pbPlainText,
|
|
ulPlainTextLen,
|
|
pCipherText);
|
|
}
|
|
return SAR_NOTSUPPORTYETERR;
|
|
}
|
|
|
|
ULONG DEVAPI SKF_ExtECCDecrypt(
|
|
DEVHANDLE hDev,
|
|
ECCPRIVATEKEYBLOB *pECCPriKeyBlob,
|
|
ECCCIPHERBLOB *pCipherText,
|
|
BYTE *pbPlainText,
|
|
ULONG *pulPlainTextLen)
|
|
{
|
|
if (skf_method->ExtECCDecrypt) {
|
|
return skf_method->ExtECCDecrypt(
|
|
hDev,
|
|
pECCPriKeyBlob,
|
|
pCipherText,
|
|
pbPlainText,
|
|
pulPlainTextLen);
|
|
}
|
|
return SAR_NOTSUPPORTYETERR;
|
|
}
|
|
|
|
ULONG DEVAPI SKF_ExtECCSign(
|
|
DEVHANDLE hDev,
|
|
ECCPRIVATEKEYBLOB *pECCPriKeyBlob,
|
|
BYTE *pbData,
|
|
ULONG ulDataLen,
|
|
ECCSIGNATUREBLOB *pSignature)
|
|
{
|
|
if (skf_method->ExtECCSign) {
|
|
return skf_method->ExtECCSign(
|
|
hDev,
|
|
pECCPriKeyBlob,
|
|
pbData,
|
|
ulDataLen,
|
|
pSignature);
|
|
}
|
|
return SAR_NOTSUPPORTYETERR;
|
|
}
|
|
|
|
ULONG DEVAPI SKF_ExtECCVerify(
|
|
DEVHANDLE hDev,
|
|
ECCPUBLICKEYBLOB *pECCPubKeyBlob,
|
|
BYTE *pbData,
|
|
ULONG ulDataLen,
|
|
ECCSIGNATUREBLOB *pSignature)
|
|
{
|
|
if (skf_method->ExtECCVerify) {
|
|
return skf_method->ExtECCVerify(
|
|
hDev,
|
|
pECCPubKeyBlob,
|
|
pbData,
|
|
ulDataLen,
|
|
pSignature);
|
|
}
|
|
return SAR_NOTSUPPORTYETERR;
|
|
}
|
|
|
|
ULONG DEVAPI SKF_GenerateAgreementDataWithECC(
|
|
HCONTAINER hContainer,
|
|
ULONG ulAlgId,
|
|
ECCPUBLICKEYBLOB *pTempECCPubKeyBlob,
|
|
BYTE *pbID,
|
|
ULONG ulIDLen,
|
|
HANDLE *phAgreementHandle)
|
|
{
|
|
if (skf_method->GenerateAgreementDataWithECC) {
|
|
return skf_method->GenerateAgreementDataWithECC(
|
|
hContainer,
|
|
ulAlgId,
|
|
pTempECCPubKeyBlob,
|
|
pbID,
|
|
ulIDLen,
|
|
phAgreementHandle);
|
|
}
|
|
return SAR_NOTSUPPORTYETERR;
|
|
}
|
|
|
|
ULONG DEVAPI SKF_GenerateAgreementDataAndKeyWithECC(
|
|
HANDLE hContainer,
|
|
ULONG ulAlgId,
|
|
ECCPUBLICKEYBLOB *pSponsorECCPubKeyBlob,
|
|
ECCPUBLICKEYBLOB *pSponsorTempECCPubKeyBlob,
|
|
ECCPUBLICKEYBLOB *pTempECCPubKeyBlob,
|
|
BYTE *pbID,
|
|
ULONG ulIDLen,
|
|
BYTE *pbSponsorID,
|
|
ULONG ulSponsorIDLen,
|
|
HANDLE *phKeyHandle)
|
|
{
|
|
if (skf_method->GenerateAgreementDataAndKeyWithECC) {
|
|
return skf_method->GenerateAgreementDataAndKeyWithECC(
|
|
hContainer,
|
|
ulAlgId,
|
|
pSponsorECCPubKeyBlob,
|
|
pSponsorTempECCPubKeyBlob,
|
|
pTempECCPubKeyBlob,
|
|
pbID,
|
|
ulIDLen,
|
|
pbSponsorID,
|
|
ulSponsorIDLen,
|
|
phKeyHandle);
|
|
}
|
|
return SAR_NOTSUPPORTYETERR;
|
|
}
|
|
|
|
ULONG DEVAPI SKF_GenerateKeyWithECC(
|
|
HANDLE hAgreementHandle,
|
|
ECCPUBLICKEYBLOB *pECCPubKeyBlob,
|
|
ECCPUBLICKEYBLOB *pTempECCPubKeyBlob,
|
|
BYTE *pbID,
|
|
ULONG ulIDLen,
|
|
HANDLE *phKeyHandle)
|
|
{
|
|
if (skf_method->GenerateKeyWithECC) {
|
|
return skf_method->GenerateKeyWithECC(
|
|
hAgreementHandle,
|
|
pECCPubKeyBlob,
|
|
pTempECCPubKeyBlob,
|
|
pbID,
|
|
ulIDLen,
|
|
phKeyHandle);
|
|
}
|
|
return SAR_NOTSUPPORTYETERR;
|
|
}
|
|
|
|
ULONG DEVAPI SKF_ImportSessionKey(
|
|
HCONTAINER hContainer,
|
|
ULONG ulAlgId,
|
|
BYTE *pbWrapedData,
|
|
ULONG ulWrapedLen,
|
|
HANDLE *phKey)
|
|
{
|
|
if (skf_method->ImportSessionKey) {
|
|
return skf_method->ImportSessionKey(
|
|
hContainer,
|
|
ulAlgId,
|
|
pbWrapedData,
|
|
ulWrapedLen,
|
|
phKey);
|
|
}
|
|
return SAR_NOTSUPPORTYETERR;
|
|
}
|
|
|
|
ULONG DEVAPI SKF_SetSymmKey(
|
|
DEVHANDLE hDev,
|
|
BYTE *pbKey,
|
|
ULONG ulAlgID,
|
|
HANDLE *phKey)
|
|
{
|
|
if (skf_method->SetSymmKey) {
|
|
return skf_method->SetSymmKey(
|
|
hDev,
|
|
pbKey,
|
|
ulAlgID,
|
|
phKey);
|
|
}
|
|
return SAR_NOTSUPPORTYETERR;
|
|
}
|
|
|
|
ULONG DEVAPI SKF_EncryptInit(
|
|
HANDLE hKey,
|
|
BLOCKCIPHERPARAM EncryptParam)
|
|
{
|
|
if (skf_method->EncryptInit) {
|
|
return skf_method->EncryptInit(
|
|
hKey,
|
|
EncryptParam);
|
|
}
|
|
return SAR_NOTSUPPORTYETERR;
|
|
}
|
|
|
|
ULONG DEVAPI SKF_Encrypt(
|
|
HANDLE hKey,
|
|
BYTE *pbData,
|
|
ULONG ulDataLen,
|
|
BYTE *pbEncryptedData,
|
|
ULONG *pulEncryptedLen)
|
|
{
|
|
if (skf_method->Encrypt) {
|
|
return skf_method->Encrypt(
|
|
hKey,
|
|
pbData,
|
|
ulDataLen,
|
|
pbEncryptedData,
|
|
pulEncryptedLen);
|
|
}
|
|
return SAR_NOTSUPPORTYETERR;
|
|
}
|
|
|
|
ULONG DEVAPI SKF_EncryptUpdate(
|
|
HANDLE hKey,
|
|
BYTE *pbData,
|
|
ULONG ulDataLen,
|
|
BYTE *pbEncryptedData,
|
|
ULONG *pulEncryptedLen)
|
|
{
|
|
if (skf_method->EncryptUpdate) {
|
|
return skf_method->EncryptUpdate(
|
|
hKey,
|
|
pbData,
|
|
ulDataLen,
|
|
pbEncryptedData,
|
|
pulEncryptedLen);
|
|
}
|
|
return SAR_NOTSUPPORTYETERR;
|
|
}
|
|
|
|
ULONG DEVAPI SKF_EncryptFinal(
|
|
HANDLE hKey,
|
|
BYTE *pbEncryptedData,
|
|
ULONG *pulEncryptedDataLen)
|
|
{
|
|
if (skf_method->EncryptFinal) {
|
|
return skf_method->EncryptFinal(
|
|
hKey,
|
|
pbEncryptedData,
|
|
pulEncryptedDataLen);
|
|
}
|
|
return SAR_NOTSUPPORTYETERR;
|
|
}
|
|
|
|
ULONG DEVAPI SKF_DecryptInit(
|
|
HANDLE hKey,
|
|
BLOCKCIPHERPARAM DecryptParam)
|
|
{
|
|
if (skf_method->DecryptInit) {
|
|
return skf_method->DecryptInit(
|
|
hKey,
|
|
DecryptParam);
|
|
}
|
|
return SAR_NOTSUPPORTYETERR;
|
|
}
|
|
|
|
ULONG DEVAPI SKF_Decrypt(
|
|
HANDLE hKey,
|
|
BYTE *pbEncryptedData,
|
|
ULONG ulEncryptedLen,
|
|
BYTE *pbData,
|
|
ULONG *pulDataLen)
|
|
{
|
|
if (skf_method->Decrypt) {
|
|
return skf_method->Decrypt(
|
|
hKey,
|
|
pbEncryptedData,
|
|
ulEncryptedLen,
|
|
pbData,
|
|
pulDataLen);
|
|
}
|
|
return SAR_NOTSUPPORTYETERR;
|
|
}
|
|
|
|
ULONG DEVAPI SKF_DecryptUpdate(
|
|
HANDLE hKey,
|
|
BYTE *pbEncryptedData,
|
|
ULONG ulEncryptedLen,
|
|
BYTE *pbData,
|
|
ULONG *pulDataLen)
|
|
{
|
|
if (skf_method->DecryptUpdate) {
|
|
return skf_method->DecryptUpdate(
|
|
hKey,
|
|
pbEncryptedData,
|
|
ulEncryptedLen,
|
|
pbData,
|
|
pulDataLen);
|
|
}
|
|
return SAR_NOTSUPPORTYETERR;
|
|
}
|
|
|
|
ULONG DEVAPI SKF_DecryptFinal(
|
|
HANDLE hKey,
|
|
BYTE *pbDecryptedData,
|
|
ULONG *pulDecryptedDataLen)
|
|
{
|
|
if (skf_method->DecryptFinal) {
|
|
return skf_method->DecryptFinal(
|
|
hKey,
|
|
pbDecryptedData,
|
|
pulDecryptedDataLen);
|
|
}
|
|
return SAR_NOTSUPPORTYETERR;
|
|
}
|
|
|
|
ULONG DEVAPI SKF_DigestInit(
|
|
DEVHANDLE hDev,
|
|
ULONG ulAlgID,
|
|
ECCPUBLICKEYBLOB *pPubKey,
|
|
BYTE *pbID,
|
|
ULONG ulIDLen,
|
|
HANDLE *phHash)
|
|
{
|
|
if (skf_method->DigestInit) {
|
|
return skf_method->DigestInit(
|
|
hDev,
|
|
ulAlgID,
|
|
pPubKey,
|
|
pbID,
|
|
ulIDLen,
|
|
phHash);
|
|
}
|
|
return SAR_NOTSUPPORTYETERR;
|
|
}
|
|
|
|
ULONG DEVAPI SKF_Digest(
|
|
HANDLE hHash,
|
|
BYTE *pbData,
|
|
ULONG ulDataLen,
|
|
BYTE *pbHashData,
|
|
ULONG *pulHashLen)
|
|
{
|
|
if (skf_method->Digest) {
|
|
return skf_method->Digest(
|
|
hHash,
|
|
pbData,
|
|
ulDataLen,
|
|
pbHashData,
|
|
pulHashLen);
|
|
}
|
|
return SAR_NOTSUPPORTYETERR;
|
|
}
|
|
|
|
ULONG DEVAPI SKF_DigestUpdate(
|
|
HANDLE hHash,
|
|
BYTE *pbData,
|
|
ULONG ulDataLen)
|
|
{
|
|
if (skf_method->DigestUpdate) {
|
|
return skf_method->DigestUpdate(
|
|
hHash,
|
|
pbData,
|
|
ulDataLen);
|
|
}
|
|
return SAR_NOTSUPPORTYETERR;
|
|
}
|
|
|
|
ULONG DEVAPI SKF_DigestFinal(
|
|
HANDLE hHash,
|
|
BYTE *pHashData,
|
|
ULONG *pulHashLen)
|
|
{
|
|
if (skf_method->DigestFinal) {
|
|
return skf_method->DigestFinal(
|
|
hHash,
|
|
pHashData,
|
|
pulHashLen);
|
|
}
|
|
return SAR_NOTSUPPORTYETERR;
|
|
}
|
|
|
|
ULONG DEVAPI SKF_MacInit(
|
|
HANDLE hKey,
|
|
BLOCKCIPHERPARAM *pMacParam,
|
|
HANDLE *phMac)
|
|
{
|
|
if (skf_method->MacInit) {
|
|
return skf_method->MacInit(
|
|
hKey,
|
|
pMacParam,
|
|
phMac);
|
|
}
|
|
return SAR_NOTSUPPORTYETERR;
|
|
}
|
|
|
|
ULONG DEVAPI SKF_Mac(
|
|
HANDLE hMac,
|
|
BYTE *pbData,
|
|
ULONG ulDataLen,
|
|
BYTE *pbMacData,
|
|
ULONG *pulMacLen)
|
|
{
|
|
if (skf_method->Mac) {
|
|
return skf_method->Mac(
|
|
hMac,
|
|
pbData,
|
|
ulDataLen,
|
|
pbMacData,
|
|
pulMacLen);
|
|
}
|
|
return SAR_NOTSUPPORTYETERR;
|
|
}
|
|
|
|
ULONG DEVAPI SKF_MacUpdate(
|
|
HANDLE hMac,
|
|
BYTE *pbData,
|
|
ULONG ulDataLen)
|
|
{
|
|
if (skf_method->MacUpdate) {
|
|
return skf_method->MacUpdate(
|
|
hMac,
|
|
pbData,
|
|
ulDataLen);
|
|
}
|
|
return SAR_NOTSUPPORTYETERR;
|
|
}
|
|
|
|
ULONG DEVAPI SKF_MacFinal(
|
|
HANDLE hMac,
|
|
BYTE *pbMacData,
|
|
ULONG *pulMacDataLen)
|
|
{
|
|
if (skf_method->MacFinal) {
|
|
return skf_method->MacFinal(
|
|
hMac,
|
|
pbMacData,
|
|
pulMacDataLen);
|
|
}
|
|
return SAR_NOTSUPPORTYETERR;
|
|
}
|
|
|
|
ULONG DEVAPI SKF_CloseHandle(
|
|
HANDLE hHandle)
|
|
{
|
|
if (skf_method->CloseHandle) {
|
|
return skf_method->CloseHandle(
|
|
hHandle);
|
|
|
|
}
|
|
return SAR_NOTSUPPORTYETERR;
|
|
}
|
|
|
|
|
|
static ERR_STRING_DATA skf_errstr[] = {
|
|
{ SAR_OK, "Success" },
|
|
{ SAR_FAIL, "Failure" },
|
|
{ SAR_UNKNOWNERR, "Unknown error" },
|
|
{ SAR_NOTSUPPORTYETERR, "Not supported" },
|
|
{ SAR_FILEERR, "File error" },
|
|
{ SAR_INVALIDHANDLEERR, "Invalid handle" },
|
|
{ SAR_INVALIDPARAMERR, "Invalid parameter" },
|
|
{ SAR_READFILEERR, "Read file error" },
|
|
{ SAR_WRITEFILEERR, "Write file error" },
|
|
{ SAR_NAMELENERR, "Name length error" },
|
|
{ SAR_KEYUSAGEERR, "Key usage error" },
|
|
{ SAR_MODULUSLENERR, "Modulus length error" },
|
|
{ SAR_NOTINITIALIZEERR, "Not initialized" },
|
|
{ SAR_OBJERR, "Object error" },
|
|
{ SAR_MEMORYERR, "Memory error" },
|
|
{ SAR_TIMEOUTERR, "Time out" },
|
|
{ SAR_INDATALENERR, "Input data length error" },
|
|
{ SAR_INDATAERR, "Input data error" },
|
|
{ SAR_GENRANDERR, "Generate randomness error" },
|
|
{ SAR_HASHOBJERR, "Hash object error" },
|
|
{ SAR_HASHERR, "Hash error" },
|
|
{ SAR_GENRSAKEYERR, "Genenerate RSA key error" },
|
|
{ SAR_RSAMODULUSLENERR, "RSA modulus length error" },
|
|
{ SAR_CSPIMPRTPUBKEYERR, "CSP import public key error" },
|
|
{ SAR_RSAENCERR, "RSA encryption error" },
|
|
{ SAR_RSADECERR, "RSA decryption error" },
|
|
{ SAR_HASHNOTEQUALERR, "Hash not equal" },
|
|
{ SAR_KEYNOTFOUNTERR, "Key not found" },
|
|
{ SAR_CERTNOTFOUNTERR, "Certificate not found" },
|
|
{ SAR_NOTEXPORTERR, "Not exported" },
|
|
{ SAR_DECRYPTPADERR, "Decrypt pad error" },
|
|
{ SAR_MACLENERR, "MAC length error" },
|
|
{ SAR_BUFFER_TOO_SMALL, "Buffer too small" },
|
|
{ SAR_KEYINFOTYPEERR, "Key info type error" },
|
|
{ SAR_NOT_EVENTERR, "No event error" },
|
|
{ SAR_DEVICE_REMOVED, "Device removed" },
|
|
{ SAR_PIN_INCORRECT, "PIN incorrect" },
|
|
{ SAR_PIN_LOCKED, "PIN locked" },
|
|
{ SAR_PIN_INVALID, "PIN invalid" },
|
|
{ SAR_PIN_LEN_RANGE, "PIN length error" },
|
|
{ SAR_USER_ALREADY_LOGGED_IN, "User already logged in" },
|
|
{ SAR_USER_PIN_NOT_INITIALIZED, "User PIN not initialized" },
|
|
{ SAR_USER_TYPE_INVALID, "User type invalid" },
|
|
{ SAR_APPLICATION_NAME_INVALID, "Application name invalid" },
|
|
{ SAR_APPLICATION_EXISTS, "Application already exist" },
|
|
{ SAR_USER_NOT_LOGGED_IN, "User not logged in" },
|
|
{ SAR_APPLICATION_NOT_EXISTS, "Application not exist" },
|
|
{ SAR_FILE_ALREADY_EXIST, "File already exist" },
|
|
{ SAR_NO_ROOM, "No file space" },
|
|
{ SAR_FILE_NOT_EXIST, "File not exist" }
|
|
};
|
|
|
|
const char *SKF_GetErrorString(ULONG ulError)
|
|
{
|
|
int i;
|
|
for (i = 0; i < OSSL_NELEM(skf_errstr); i++) {
|
|
if (ulError == skf_errstr[i].error) {
|
|
return skf_errstr[i].string;
|
|
}
|
|
}
|
|
return "(undef)";
|
|
}
|
|
|
|
int SKF_PrintRSAPublicKey(FILE *fp, RSAPUBLICKEYBLOB *pk)
|
|
{
|
|
return 0;
|
|
}
|
|
|
|
int SKF_PrintRSAPrivateKey(FILE *fp, RSAPRIVATEKEYBLOB *pk)
|
|
{
|
|
return 0;
|
|
}
|
|
|
|
int SKF_PrintECCPublicKey(FILE *fp, ECCPUBLICKEYBLOB *pk)
|
|
{
|
|
return 0;
|
|
}
|
|
|
|
int SKF_PrintECCPrivateKey(FILE *fp, ECCPRIVATEKEYBLOB *pk)
|
|
{
|
|
return 0;
|
|
}
|
|
|
|
int SKF_PrintECCCipher(FILE *fp, ECCCIPHERBLOB *cipher)
|
|
{
|
|
return 0;
|
|
}
|
|
|
|
int SKF_PrintECCSignature(FILE *fp, ECCSIGNATUREBLOB *sig)
|
|
{
|
|
return 0;
|
|
}
|
|
|
|
int SKF_PrintDeviceInfo(FILE *fp, DEVINFO *devInfo)
|
|
{
|
|
int ret = 0;
|
|
ret += fprintf(fp, "Device Info:\n");
|
|
ret += fprintf(fp, " Device Version : %d.%d\n", devInfo->Version.major, devInfo->Version.minor);
|
|
ret += fprintf(fp, " Manufacturer : %s\n", devInfo->Manufacturer);
|
|
ret += fprintf(fp, " Issuer : %s\n", devInfo->Issuer);
|
|
ret += fprintf(fp, " Label : %s\n", devInfo->Label);
|
|
ret += fprintf(fp, " Serial Number : %s\n", devInfo->SerialNumber);
|
|
ret += fprintf(fp, " Hardware Version : %d.%d\n", devInfo->HWVersion.major, devInfo->HWVersion.minor);
|
|
ret += fprintf(fp, " Firmware Version : %d.%d\n", devInfo->FirmwareVersion.major, devInfo->FirmwareVersion.minor);
|
|
ret += fprintf(fp, " AlgSymCap : 0x%08x\n", devInfo->AlgSymCap);
|
|
ret += fprintf(fp, " AlgAsymCap : 0x%08x\n", devInfo->AlgAsymCap);
|
|
ret += fprintf(fp, " AlgHashCap : 0x%08x\n", devInfo->AlgHashCap);
|
|
ret += fprintf(fp, " AlgHashCap : 0x%08x\n", devInfo->DevAuthAlgId);
|
|
ret += fprintf(fp, " Total Space : %u\n", devInfo->TotalSpace);
|
|
ret += fprintf(fp, " Free Space : %u\n", devInfo->FreeSpace);
|
|
ret += fprintf(fp, " MaxECCBuffer : %u\n", devInfo->MaxECCBufferSize);
|
|
ret += fprintf(fp, " MaxBuffer : %u\n", devInfo->MaxBufferSize);
|
|
return ret;
|
|
}
|
|
|
|
const char *SKF_GetAlgorName(ULONG ulAlgID)
|
|
{
|
|
switch (ulAlgID) {
|
|
case SGD_SM1_ECB: return "sm1-ecb";
|
|
case SGD_SM1_CBC: return "sm1-cbc";
|
|
case SGD_SM1_CFB: return "sm1-ocb";
|
|
case SGD_SM1_OFB: return "sm1-ofb";
|
|
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-ofb";
|
|
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-ofb";
|
|
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;
|
|
}
|