mirror of
https://github.com/guanzhi/GmSSL.git
synced 2026-05-07 00:46:17 +08:00
751 lines
16 KiB
C
751 lines
16 KiB
C
/* ====================================================================
|
|
* Copyright (c) 2015 - 2016 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.
|
|
* ====================================================================
|
|
*/
|
|
/* This header file is from the official specification with minor
|
|
* modification.
|
|
*/
|
|
|
|
#ifndef HEADER_SKF_H
|
|
#define HEADER_SKF_H
|
|
|
|
#include <openssl/opensslconf.h>
|
|
#ifndef OPENSSL_NO_SKF
|
|
|
|
#include <openssl/sgd.h>
|
|
|
|
#ifdef __cplusplus
|
|
extern "C" {
|
|
#endif
|
|
|
|
#pragma pack(1)
|
|
typedef struct Struct_Version{
|
|
BYTE major;
|
|
BYTE minor;
|
|
} VERSION;
|
|
|
|
typedef struct Struct_DEVINFO {
|
|
VERSION Version;
|
|
CHAR Manufacturer[64];
|
|
CHAR Issuer[64];
|
|
CHAR Label[32];
|
|
CHAR SerialNumber[32];
|
|
VERSION HWVersion;
|
|
VERSION FirmwareVersion;
|
|
ULONG AlgSymCap;
|
|
ULONG AlgAsymCap;
|
|
ULONG AlgHashCap;
|
|
ULONG DevAuthAlgId;
|
|
ULONG TotalSpace;
|
|
ULONG FreeSpace;
|
|
ULONG MaxECCBufferSize;
|
|
ULONG MaxBufferSize;
|
|
BYTE Reserved[64];
|
|
} DEVINFO, *PDEVINFO;
|
|
|
|
typedef struct Struct_RSAPUBLICKEYBLOB {
|
|
ULONG AlgID;
|
|
ULONG BitLen;
|
|
BYTE Modulus[MAX_RSA_MODULUS_LEN];
|
|
BYTE PublicExponent[MAX_RSA_EXPONENT_LEN];
|
|
} RSAPUBLICKEYBLOB, *PRSAPUBLICKEYBLOB;
|
|
|
|
typedef struct Struct_RSAPRIVATEKEYBLOB {
|
|
ULONG AlgID;
|
|
ULONG BitLen;
|
|
BYTE Modulus[MAX_RSA_MODULUS_LEN];
|
|
BYTE PublicExponent[MAX_RSA_EXPONENT_LEN];
|
|
BYTE PrivateExponent[MAX_RSA_MODULUS_LEN];
|
|
BYTE Prime1[MAX_RSA_MODULUS_LEN/2];
|
|
BYTE Prime2[MAX_RSA_MODULUS_LEN/2];
|
|
BYTE Prime1Exponent[MAX_RSA_MODULUS_LEN/2];
|
|
BYTE Prime2Exponent[MAX_RSA_MODULUS_LEN/2];
|
|
BYTE Coefficient[MAX_RSA_MODULUS_LEN/2];
|
|
} RSAPRIVATEKEYBLOB, *PRSAPRIVATEKEYBLOB;
|
|
|
|
typedef struct Struct_ECCPUBLICKEYBLOB {
|
|
ULONG BitLen;
|
|
BYTE XCoordinate[ECC_MAX_XCOORDINATE_BITS_LEN/8];
|
|
BYTE YCoordinate[ECC_MAX_YCOORDINATE_BITS_LEN/8];
|
|
} ECCPUBLICKEYBLOB, *PECCPUBLICKEYBLOB;
|
|
|
|
typedef struct Struct_ECCPRIVATEKEYBLOB {
|
|
ULONG BitLen;
|
|
BYTE PrivateKey[ECC_MAX_MODULUS_BITS_LEN/8];
|
|
} ECCPRIVATEKEYBLOB, *PECCPRIVATEKEYBLOB;
|
|
|
|
typedef struct Struct_ECCCIPHERBLOB {
|
|
BYTE XCoordinate[ECC_MAX_XCOORDINATE_BITS_LEN/8];
|
|
BYTE YCoordinate[ECC_MAX_XCOORDINATE_BITS_LEN/8];
|
|
BYTE HASH[32];
|
|
ULONG CipherLen;
|
|
BYTE Cipher[1];
|
|
} ECCCIPHERBLOB, *PECCCIPHERBLOB;
|
|
|
|
typedef struct Struct_ECCSIGNATUREBLOB {
|
|
BYTE r[ECC_MAX_XCOORDINATE_BITS_LEN/8];
|
|
BYTE s[ECC_MAX_XCOORDINATE_BITS_LEN/8];
|
|
} ECCSIGNATUREBLOB, *PECCSIGNATUREBLOB;
|
|
|
|
typedef struct Struct_BLOCKCIPHERPARAM {
|
|
BYTE IV[MAX_IV_LEN];
|
|
ULONG IVLen;
|
|
ULONG PaddingType;
|
|
ULONG FeedBitLen;
|
|
} BLOCKCIPHERPARAM, *PBLOCKCIPHERPARAM;
|
|
|
|
typedef struct SKF_ENVELOPEDKEYBLOB {
|
|
ULONG Version;
|
|
ULONG ulSymmAlgID;
|
|
ULONG ulBits;
|
|
BYTE cbEncryptedPriKey[64];
|
|
ECCPUBLICKEYBLOB PubKey;
|
|
ECCCIPHERBLOB ECCCipherBlob;
|
|
} ENVELOPEDKEYBLOB, *PENVELOPEDKEYBLOB;
|
|
|
|
typedef struct Struct_FILEATTRIBUTE {
|
|
CHAR FileName[MAX_FILE_NAME_SIZE];
|
|
ULONG FileSize;
|
|
ULONG ReadRights;
|
|
ULONG WriteRights;
|
|
} FILEATTRIBUTE, *PFILEATTRIBUTE;
|
|
#pragma pack()
|
|
|
|
/* 7.1.2 */
|
|
ULONG DEVAPI SKF_WaitForDevEvent(
|
|
LPSTR szDevName,
|
|
ULONG *pulDevNameLen,
|
|
ULONG *pulEvent);
|
|
|
|
/* 7.1.3 */
|
|
ULONG DEVAPI SKF_CancelWaitForDevEvent(
|
|
void);
|
|
|
|
/* 7.1.4 */
|
|
ULONG DEVAPI SKF_EnumDev(
|
|
BOOL bPresent,
|
|
LPSTR szNameList,
|
|
ULONG *pulSize);
|
|
|
|
/* 7.1.5 */
|
|
ULONG DEVAPI SKF_ConnectDev(
|
|
LPSTR szName,
|
|
DEVHANDLE *phDev);
|
|
|
|
/* 7.1.6 */
|
|
ULONG DEVAPI SKF_DisConnectDev(
|
|
DEVHANDLE hDev);
|
|
|
|
/* 7.1.7 */
|
|
ULONG DEVAPI SKF_GetDevState(
|
|
LPSTR szDevName,
|
|
ULONG *pulDevState);
|
|
|
|
/* 7.1.8 */
|
|
ULONG DEVAPI SKF_SetLabel(
|
|
DEVHANDLE hDev,
|
|
LPSTR szLabel);
|
|
|
|
/* 7.1.9 */
|
|
ULONG DEVAPI SKF_GetDevInfo(
|
|
DEVHANDLE hDev,
|
|
DEVINFO *pDevInfo);
|
|
|
|
/* 7.1.10 */
|
|
ULONG DEVAPI SKF_LockDev(
|
|
DEVHANDLE hDev,
|
|
ULONG ulTimeOut);
|
|
|
|
/* 7.1.11 */
|
|
ULONG DEVAPI SKF_UnlockDev(
|
|
DEVHANDLE hDev);
|
|
|
|
/* 7.1.12 */
|
|
ULONG DEVAPI SKF_Transmit(
|
|
DEVHANDLE hDev,
|
|
BYTE *pbCommand,
|
|
ULONG ulCommandLen,
|
|
BYTE *pbData,
|
|
ULONG *pulDataLen);
|
|
|
|
/* 7.2.2 */
|
|
ULONG DEVAPI SKF_ChangeDevAuthKey(
|
|
DEVHANDLE hDev,
|
|
BYTE *pbKeyValue,
|
|
ULONG ulKeyLen);
|
|
|
|
/* 7.2.3 */
|
|
ULONG DEVAPI SKF_DevAuth(
|
|
DEVHANDLE hDev,
|
|
BYTE *pbAuthData,
|
|
ULONG ulLen);
|
|
|
|
/* 7.2.4 */
|
|
ULONG DEVAPI SKF_ChangePIN(
|
|
HAPPLICATION hApplication,
|
|
ULONG ulPINType,
|
|
LPSTR szOldPin,
|
|
LPSTR szNewPin,
|
|
ULONG *pulRetryCount);
|
|
|
|
/* 7.2.5 */
|
|
LONG DEVAPI SKF_GetPINInfo(
|
|
HAPPLICATION hApplication,
|
|
ULONG ulPINType,
|
|
ULONG *pulMaxRetryCount,
|
|
ULONG *pulRemainRetryCount,
|
|
BOOL *pbDefaultPin);
|
|
|
|
/* 7.2.6 */
|
|
ULONG DEVAPI SKF_VerifyPIN(
|
|
HAPPLICATION hApplication,
|
|
ULONG ulPINType,
|
|
LPSTR szPIN,
|
|
ULONG *pulRetryCount);
|
|
|
|
/* 7.2.7 */
|
|
ULONG DEVAPI SKF_UnblockPIN(
|
|
HAPPLICATION hApplication,
|
|
LPSTR szAdminPIN,
|
|
LPSTR szNewUserPIN,
|
|
ULONG *pulRetryCount);
|
|
|
|
/* 7.2.8 */
|
|
ULONG DEVAPI SKF_ClearSecureState(
|
|
HAPPLICATION hApplication);
|
|
|
|
/* 7.3.2 */
|
|
ULONG DEVAPI SKF_CreateApplication(
|
|
DEVHANDLE hDev,
|
|
LPSTR szAppName,
|
|
LPSTR szAdminPin,
|
|
DWORD dwAdminPinRetryCount,
|
|
LPSTR szUserPin,
|
|
DWORD dwUserPinRetryCount,
|
|
DWORD dwCreateFileRights,
|
|
HAPPLICATION *phApplication);
|
|
|
|
/* 7.3.3 */
|
|
ULONG DEVAPI SKF_EnumApplication(
|
|
DEVHANDLE hDev,
|
|
LPSTR szAppName,
|
|
ULONG *pulSize);
|
|
|
|
/* 7.3.4 */
|
|
ULONG DEVAPI SKF_DeleteApplication(
|
|
DEVHANDLE hDev,
|
|
LPSTR szAppName);
|
|
|
|
/* 7.3.5 */
|
|
ULONG DEVAPI SKF_OpenApplication(
|
|
DEVHANDLE hDev,
|
|
LPSTR szAppName,
|
|
HAPPLICATION *phApplication);
|
|
|
|
/* 7.3.6 */
|
|
ULONG DEVAPI SKF_CloseApplication(
|
|
HAPPLICATION hApplication);
|
|
|
|
/* 7.4.2 */
|
|
ULONG DEVAPI SKF_CreateFile(
|
|
HAPPLICATION hApplication,
|
|
LPSTR szFileName,
|
|
ULONG ulFileSize,
|
|
ULONG ulReadRights,
|
|
ULONG ulWriteRights);
|
|
|
|
/* 7.4.3 */
|
|
ULONG DEVAPI SKF_DeleteFile(
|
|
HAPPLICATION hApplication,
|
|
LPSTR szFileName);
|
|
|
|
/* 7.4.4 */
|
|
ULONG DEVAPI SKF_EnumFiles(
|
|
HAPPLICATION hApplication,
|
|
LPSTR szFileList,
|
|
ULONG *pulSize);
|
|
|
|
/* 7.4.5 */
|
|
ULONG DEVAPI SKF_GetFileInfo(
|
|
HAPPLICATION hApplication,
|
|
LPSTR szFileName,
|
|
FILEATTRIBUTE *pFileInfo);
|
|
|
|
/* 7.4.6 */
|
|
ULONG DEVAPI SKF_ReadFile(
|
|
HAPPLICATION hApplication,
|
|
LPSTR szFileName,
|
|
ULONG ulOffset,
|
|
ULONG ulSize,
|
|
BYTE *pbOutData,
|
|
ULONG *pulOutLen);
|
|
|
|
/* 7.4.7 */
|
|
ULONG DEVAPI SKF_WriteFile(
|
|
HAPPLICATION hApplication,
|
|
LPSTR szFileName,
|
|
ULONG ulOffset,
|
|
BYTE *pbData,
|
|
ULONG ulSize);
|
|
|
|
/* 7.5.2 */
|
|
ULONG DEVAPI SKF_CreateContainer(
|
|
HAPPLICATION hApplication,
|
|
LPSTR szContainerName,
|
|
HCONTAINER *phContainer);
|
|
|
|
/* 7.5.3 */
|
|
ULONG DEVAPI SKF_DeleteContainer(
|
|
HAPPLICATION hApplication,
|
|
LPSTR szContainerName);
|
|
|
|
/* 7.5.4 */
|
|
ULONG DEVAPI SKF_OpenContainer(
|
|
HAPPLICATION hApplication,
|
|
LPSTR szContainerName,
|
|
HCONTAINER *phContainer);
|
|
|
|
/* 7.5.5 */
|
|
ULONG DEVAPI SKF_CloseContainer(
|
|
HCONTAINER hContainer);
|
|
|
|
/* 7.5.6 */
|
|
ULONG DEVAPI SKF_EnumContainer(
|
|
HAPPLICATION hApplication,
|
|
LPSTR szContainerName,
|
|
ULONG *pulSize);
|
|
|
|
/* 7.5.7 */
|
|
ULONG DEVAPI SKF_GetContainerType(
|
|
HCONTAINER hContainer,
|
|
ULONG *pulContainerType);
|
|
|
|
/* 7.5.8 */
|
|
ULONG DEVAPI SKF_ImportCertificate(
|
|
HCONTAINER hContainer,
|
|
BOOL bExportSignKey,
|
|
BYTE *pbCert,
|
|
ULONG ulCertLen);
|
|
|
|
/* 7.5.9 */
|
|
ULONG DEVAPI SKF_ExportCertificate(
|
|
HCONTAINER hContainer,
|
|
BOOL bSignFlag,
|
|
BYTE *pbCert,
|
|
ULONG *pulCertLen);
|
|
|
|
/* 7.6.2 */
|
|
ULONG DEVAPI SKF_GenRandom(
|
|
DEVHANDLE hDev,
|
|
BYTE *pbRandom,
|
|
ULONG ulRandomLen);
|
|
|
|
/* 7.6.3 */
|
|
ULONG DEVAPI SKF_GenExtRSAKey(
|
|
DEVHANDLE hDev,
|
|
ULONG ulBitsLen,
|
|
RSAPRIVATEKEYBLOB *pBlob);
|
|
|
|
/* 7.6.4 */
|
|
ULONG DEVAPI SKF_GenRSAKeyPair(
|
|
HCONTAINER hContainer,
|
|
ULONG ulBitsLen,
|
|
RSAPUBLICKEYBLOB *pBlob);
|
|
|
|
/* 7.6.5 */
|
|
ULONG DEVAPI SKF_ImportRSAKeyPair(
|
|
HCONTAINER hContainer,
|
|
ULONG ulSymAlgId,
|
|
BYTE *pbWrappedKey,
|
|
ULONG ulWrappedKeyLen,
|
|
BYTE *pbEncryptedData,
|
|
ULONG ulEncryptedDataLen);
|
|
|
|
/* 7.6.6 */
|
|
ULONG DEVAPI SKF_RSASignData(
|
|
HCONTAINER hContainer,
|
|
BYTE *pbData,
|
|
ULONG ulDataLen,
|
|
BYTE *pbSignature,
|
|
ULONG *pulSignLen);
|
|
|
|
/* 7.6.7 */
|
|
ULONG DEVAPI SKF_RSAVerify(
|
|
DEVHANDLE hDev,
|
|
RSAPUBLICKEYBLOB *pRSAPubKeyBlob,
|
|
BYTE *pbData,
|
|
ULONG ulDataLen,
|
|
BYTE *pbSignature,
|
|
ULONG ulSignLen);
|
|
|
|
/* 7.6.8 */
|
|
ULONG DEVAPI SKF_RSAExportSessionKey(
|
|
HCONTAINER hContainer,
|
|
ULONG ulAlgId,
|
|
RSAPUBLICKEYBLOB *pPubKey,
|
|
BYTE *pbData,
|
|
ULONG *pulDataLen,
|
|
HANDLE *phSessionKey);
|
|
|
|
/* 7.6.9 */
|
|
ULONG DEVAPI SKF_ExtRSAPubKeyOperation(
|
|
DEVHANDLE hDev,
|
|
RSAPUBLICKEYBLOB *pRSAPubKeyBlob,
|
|
BYTE *pbInput,
|
|
ULONG ulInputLen,
|
|
BYTE *pbOutput,
|
|
ULONG *pulOutputLen);
|
|
|
|
/* 7.6.10 */
|
|
ULONG DEVAPI SKF_ExtRSAPriKeyOperation(
|
|
DEVHANDLE hDev,
|
|
RSAPRIVATEKEYBLOB *pRSAPriKeyBlob,
|
|
BYTE *pbInput,
|
|
ULONG ulInputLen,
|
|
BYTE *pbOutput,
|
|
ULONG *pulOutputLen);
|
|
|
|
/* 7.6.11 */
|
|
ULONG DEVAPI SKF_GenECCKeyPair(
|
|
HCONTAINER hContainer,
|
|
ULONG ulAlgId,
|
|
ECCPUBLICKEYBLOB *pBlob);
|
|
|
|
/* 7.6.12 */
|
|
ULONG DEVAPI SKF_ImportECCKeyPair(
|
|
HCONTAINER hContainer,
|
|
ENVELOPEDKEYBLOB *pEnvelopedKeyBlob);
|
|
|
|
/* 7.6.13 */
|
|
ULONG DEVAPI SKF_ECCSignData(
|
|
HCONTAINER hContainer,
|
|
BYTE *pbDigest,
|
|
ULONG ulDigestLen,
|
|
ECCSIGNATUREBLOB *pSignature);
|
|
|
|
#ifdef SKF_HAS_ECCDECRYPT
|
|
ULONG DEVAPI SKF_ECCDecrypt(
|
|
HCONTAINER hContainer,
|
|
ECCCIPHERBLOB *pCipherBlob,
|
|
BYTE *pbPlainText,
|
|
ULONG *pulPlainTextLen);
|
|
#endif
|
|
|
|
/* 7.6.14 */
|
|
ULONG DEVAPI SKF_ECCVerify(
|
|
DEVHANDLE hDev,
|
|
ECCPUBLICKEYBLOB *pECCPubKeyBlob,
|
|
BYTE *pbData,
|
|
ULONG ulDataLen,
|
|
ECCSIGNATUREBLOB *pSignature);
|
|
|
|
/* 7.6.15 */
|
|
ULONG DEVAPI SKF_ECCExportSessionKey(
|
|
HCONTAINER hContainer,
|
|
ULONG ulAlgId,
|
|
ECCPUBLICKEYBLOB *pPubKey,
|
|
ECCCIPHERBLOB *pData,
|
|
HANDLE *phSessionKey);
|
|
|
|
/* 7.6.16 */
|
|
ULONG DEVAPI SKF_ExtECCEncrypt(
|
|
DEVHANDLE hDev,
|
|
ECCPUBLICKEYBLOB *pECCPubKeyBlob,
|
|
BYTE *pbPlainText,
|
|
ULONG ulPlainTextLen,
|
|
ECCCIPHERBLOB *pCipherText);
|
|
|
|
/* 7.6.17 */
|
|
ULONG DEVAPI SKF_ExtECCDecrypt(
|
|
DEVHANDLE hDev,
|
|
ECCPRIVATEKEYBLOB *pECCPriKeyBlob,
|
|
ECCCIPHERBLOB *pCipherText,
|
|
BYTE *pbPlainText,
|
|
ULONG *pulPlainTextLen);
|
|
|
|
/* 7.6.18 */
|
|
ULONG DEVAPI SKF_ExtECCSign(
|
|
DEVHANDLE hDev,
|
|
ECCPRIVATEKEYBLOB *pECCPriKeyBlob,
|
|
BYTE *pbData,
|
|
ULONG ulDataLen,
|
|
ECCSIGNATUREBLOB *pSignature);
|
|
|
|
/* 7.6.19 */
|
|
ULONG DEVAPI SKF_ExtECCVerify(
|
|
DEVHANDLE hDev,
|
|
ECCPUBLICKEYBLOB *pECCPubKeyBlob,
|
|
BYTE *pbData,
|
|
ULONG ulDataLen,
|
|
ECCSIGNATUREBLOB *pSignature);
|
|
|
|
/* 7.6.20 */
|
|
ULONG DEVAPI SKF_GenerateAgreementDataWithECC(
|
|
HCONTAINER hContainer,
|
|
ULONG ulAlgId,
|
|
ECCPUBLICKEYBLOB *pTempECCPubKeyBlob,
|
|
BYTE *pbID,
|
|
ULONG ulIDLen,
|
|
HANDLE *phAgreementHandle);
|
|
|
|
/* 7.6.21 */
|
|
ULONG DEVAPI SKF_GenerateAgreementDataAndKeyWithECC(
|
|
HANDLE hContainer,
|
|
ULONG ulAlgId,
|
|
ECCPUBLICKEYBLOB *pSponsorECCPubKeyBlob,
|
|
ECCPUBLICKEYBLOB *pSponsorTempECCPubKeyBlob,
|
|
ECCPUBLICKEYBLOB *pTempECCPubKeyBlob,
|
|
BYTE *pbID,
|
|
ULONG ulIDLen,
|
|
BYTE *pbSponsorID,
|
|
ULONG ulSponsorIDLen,
|
|
HANDLE *phKeyHandle);
|
|
|
|
/* 7.6.22 */
|
|
ULONG DEVAPI SKF_GenerateKeyWithECC(
|
|
HANDLE hAgreementHandle,
|
|
ECCPUBLICKEYBLOB *pECCPubKeyBlob,
|
|
ECCPUBLICKEYBLOB *pTempECCPubKeyBlob,
|
|
BYTE *pbID,
|
|
ULONG ulIDLen,
|
|
HANDLE *phKeyHandle);
|
|
|
|
/* 7.6.23 */
|
|
ULONG DEVAPI SKF_ExportPublicKey(
|
|
HCONTAINER hContainer,
|
|
BOOL bSignFlag,
|
|
BYTE *pbBlob,
|
|
ULONG *pulBlobLen);
|
|
|
|
/* 7.6.24 */
|
|
ULONG DEVAPI SKF_ImportSessionKey(
|
|
HCONTAINER hContainer,
|
|
ULONG ulAlgId,
|
|
BYTE *pbWrapedData,
|
|
ULONG ulWrapedLen,
|
|
HANDLE *phKey);
|
|
|
|
/* 7.6.25 */
|
|
ULONG DEVAPI SKF_SetSymmKey(
|
|
DEVHANDLE hDev,
|
|
BYTE *pbKey,
|
|
ULONG ulAlgID,
|
|
HANDLE *phKey);
|
|
|
|
/* 7.6.26 */
|
|
ULONG DEVAPI SKF_EncryptInit(
|
|
HANDLE hKey,
|
|
BLOCKCIPHERPARAM EncryptParam);
|
|
|
|
/* 7.6.27 */
|
|
ULONG DEVAPI SKF_Encrypt(
|
|
HANDLE hKey,
|
|
BYTE *pbData,
|
|
ULONG ulDataLen,
|
|
BYTE *pbEncryptedData,
|
|
ULONG *pulEncryptedLen);
|
|
|
|
/* 7.6.28 */
|
|
ULONG DEVAPI SKF_EncryptUpdate(
|
|
HANDLE hKey,
|
|
BYTE *pbData,
|
|
ULONG ulDataLen,
|
|
BYTE *pbEncryptedData,
|
|
ULONG *pulEncryptedLen);
|
|
|
|
/* 7.6.29 */
|
|
ULONG DEVAPI SKF_EncryptFinal(
|
|
HANDLE hKey,
|
|
BYTE *pbEncryptedData,
|
|
ULONG *pulEncryptedDataLen);
|
|
|
|
/* 7.6.30 */
|
|
ULONG DEVAPI SKF_DecryptInit(
|
|
HANDLE hKey,
|
|
BLOCKCIPHERPARAM DecryptParam);
|
|
|
|
/* 7.6.31 */
|
|
ULONG DEVAPI SKF_Decrypt(
|
|
HANDLE hKey,
|
|
BYTE *pbEncryptedData,
|
|
ULONG ulEncryptedLen,
|
|
BYTE *pbData,
|
|
ULONG *pulDataLen);
|
|
|
|
/* 7.6.32 */
|
|
ULONG DEVAPI SKF_DecryptUpdate(
|
|
HANDLE hKey,
|
|
BYTE *pbEncryptedData,
|
|
ULONG ulEncryptedLen,
|
|
BYTE *pbData,
|
|
ULONG *pulDataLen);
|
|
|
|
/* 7.6.33 */
|
|
ULONG DEVAPI SKF_DecryptFinal(
|
|
HANDLE hKey,
|
|
BYTE *pbDecryptedData,
|
|
ULONG *pulDecryptedDataLen);
|
|
|
|
/* 7.6.34 */
|
|
ULONG DEVAPI SKF_DigestInit(
|
|
DEVHANDLE hDev,
|
|
ULONG ulAlgID,
|
|
ECCPUBLICKEYBLOB *pPubKey,
|
|
BYTE *pbID,
|
|
ULONG ulIDLen,
|
|
HANDLE *phHash);
|
|
|
|
/* 7.6.35 */
|
|
ULONG DEVAPI SKF_Digest(
|
|
HANDLE hHash,
|
|
BYTE *pbData,
|
|
ULONG ulDataLen,
|
|
BYTE *pbHashData,
|
|
ULONG *pulHashLen);
|
|
|
|
/* 7.6.36 */
|
|
ULONG DEVAPI SKF_DigestUpdate(
|
|
HANDLE hHash,
|
|
BYTE *pbData,
|
|
ULONG ulDataLen);
|
|
|
|
/* 7.6.37 */
|
|
ULONG DEVAPI SKF_DigestFinal(
|
|
HANDLE hHash,
|
|
BYTE *pHashData,
|
|
ULONG *pulHashLen);
|
|
|
|
/* 7.6.38 */
|
|
ULONG DEVAPI SKF_MacInit(
|
|
HANDLE hKey,
|
|
BLOCKCIPHERPARAM *pMacParam,
|
|
HANDLE *phMac);
|
|
|
|
/* 7.6.39 */
|
|
ULONG DEVAPI SKF_Mac(
|
|
HANDLE hMac,
|
|
BYTE *pbData,
|
|
ULONG ulDataLen,
|
|
BYTE *pbMacData,
|
|
ULONG *pulMacLen);
|
|
|
|
/* 7.6.40 */
|
|
ULONG DEVAPI SKF_MacUpdate(
|
|
HANDLE hMac,
|
|
BYTE *pbData,
|
|
ULONG ulDataLen);
|
|
|
|
/* 7.6.41 */
|
|
ULONG DEVAPI SKF_MacFinal(
|
|
HANDLE hMac,
|
|
BYTE *pbMacData,
|
|
ULONG *pulMacDataLen);
|
|
|
|
/* 7.6.42 */
|
|
ULONG DEVAPI SKF_CloseHandle(
|
|
HANDLE hHandle);
|
|
|
|
|
|
#define SAR_OK 0x00000000
|
|
#define SAR_FAIL 0x0A000001
|
|
#define SAR_UNKNOWNERR 0x0A000002
|
|
#define SAR_NOTSUPPORTYETERR 0x0A000003
|
|
#define SAR_FILEERR 0x0A000004
|
|
#define SAR_INVALIDHANDLEERR 0x0A000005
|
|
#define SAR_INVALIDPARAMERR 0x0A000006
|
|
#define SAR_READFILEERR 0x0A000007
|
|
#define SAR_WRITEFILEERR 0x0A000008
|
|
#define SAR_NAMELENERR 0x0A000009
|
|
#define SAR_KEYUSAGEERR 0x0A00000A
|
|
#define SAR_MODULUSLENERR 0x0A00000B
|
|
#define SAR_NOTINITIALIZEERR 0x0A00000C
|
|
#define SAR_OBJERR 0x0A00000D
|
|
#define SAR_MEMORYERR 0x0A00000E
|
|
#define SAR_TIMEOUTERR 0x0A00000F
|
|
#define SAR_INDATALENERR 0x0A000010
|
|
#define SAR_INDATAERR 0x0A000011
|
|
#define SAR_GENRANDERR 0x0A000012
|
|
#define SAR_HASHOBJERR 0x0A000013
|
|
#define SAR_HASHERR 0x0A000014
|
|
#define SAR_GENRSAKEYERR 0x0A000015
|
|
#define SAR_RSAMODULUSLENERR 0x0A000016
|
|
#define SAR_CSPIMPRTPUBKEYERR 0x0A000017
|
|
#define SAR_RSAENCERR 0x0A000018
|
|
#define SAR_RSADECERR 0x0A000019
|
|
#define SAR_HASHNOTEQUALERR 0x0A00001A
|
|
#define SAR_KEYNOTFOUNTERR 0x0A00001B
|
|
#define SAR_CERTNOTFOUNTERR 0x0A00001C
|
|
#define SAR_NOTEXPORTERR 0x0A00001D
|
|
#define SAR_DECRYPTPADERR 0x0A00001E
|
|
#define SAR_MACLENERR 0x0A00001F
|
|
#define SAR_BUFFER_TOO_SMALL 0x0A000020
|
|
#define SAR_KEYINFOTYPEERR 0x0A000021
|
|
#define SAR_NOT_EVENTERR 0x0A000022
|
|
#define SAR_DEVICE_REMOVED 0x0A000023
|
|
#define SAR_PIN_INCORRECT 0x0A000024
|
|
#define SAR_PIN_LOCKED 0x0A000025
|
|
#define SAR_PIN_INVALID 0x0A000026
|
|
#define SAR_PIN_LEN_RANGE 0x0A000027
|
|
#define SAR_USER_ALREADY_LOGGED_IN 0x0A000028
|
|
#define SAR_USER_PIN_NOT_INITIALIZED 0x0A000029
|
|
#define SAR_USER_TYPE_INVALID 0x0A00002A
|
|
#define SAR_APPLICATION_NAME_INVALID 0x0A00002B
|
|
#define SAR_APPLICATION_EXISTS 0x0A00002C
|
|
#define SAR_USER_NOT_LOGGED_IN 0x0A00002D
|
|
#define SAR_APPLICATION_NOT_EXISTS 0x0A00002E
|
|
#define SAR_FILE_ALREADY_EXIST 0x0A00002F
|
|
#define SAR_NO_ROOM 0x0A000030
|
|
#define SAR_FILE_NOT_EXIST 0x0A000031
|
|
#define SAR_REACH_MAX_CONTAINER_COUNT 0x0A000032
|
|
|
|
|
|
#ifdef __cplusplus
|
|
}
|
|
#endif
|
|
#endif
|
|
#endif
|