Add software SDF implementation

The soft_sdf will replace sdf_dummy library for buiding testing apps.
This commit is contained in:
Zhi Guan
2023-12-28 10:18:09 +08:00
parent 1def752948
commit 39e2f9f657
4 changed files with 2826 additions and 465 deletions

View File

@@ -75,6 +75,7 @@ set(tools
tools/sm4.c tools/sm4.c
tools/sm3.c tools/sm3.c
tools/sm3hmac.c tools/sm3hmac.c
tools/sm3xmss_keygen.c
tools/sm2keygen.c tools/sm2keygen.c
tools/sm2sign.c tools/sm2sign.c
tools/sm2verify.c tools/sm2verify.c
@@ -285,7 +286,7 @@ if (ENABLE_SM3_XMSS)
message(STATUS "ENABLE_SM3_XMSS is ON") message(STATUS "ENABLE_SM3_XMSS is ON")
list(APPEND src src/sm3_xmss.c) list(APPEND src src/sm3_xmss.c)
option(ENABLE_SM3_XMSS_CROSSCHECK "Enable XMSS SHA-256 cross-check" ON) option(ENABLE_SM3_XMSS_CROSSCHECK "Enable XMSS SHA-256 cross-check" OFF)
if (ENABLE_SM3_XMSS_CROSSCHECK) if (ENABLE_SM3_XMSS_CROSSCHECK)
message(STATUS "ENABLE_SM3_XMSS_CROSSCHECK is ON") message(STATUS "ENABLE_SM3_XMSS_CROSSCHECK is ON")
add_definitions(-DENABLE_SM3_XMSS_CROSSCHECK) add_definitions(-DENABLE_SM3_XMSS_CROSSCHECK)
@@ -331,6 +332,7 @@ if (ENABLE_CHACHA20)
endif() endif()
option(ENABLE_INTEL_RDRAND "Enable Intel RDRAND instructions" OFF) option(ENABLE_INTEL_RDRAND "Enable Intel RDRAND instructions" OFF)
option(ENABLE_INTEL_RDSEED "Enable Intel RDSEED instructions" OFF) option(ENABLE_INTEL_RDSEED "Enable Intel RDSEED instructions" OFF)
@@ -361,12 +363,20 @@ if (ENABLE_INTEL_RDRAND)
endif() endif()
option(ENABLE_SM4_CBC_MAC "Enable SM4-CBC-MAC" OFF)
if (ENABLE_SM4_CBC_MAC)
message(STATUS "ENABLE_SM4_CBC_MAC is ON")
list(APPEND src src/sm4_cbc_mac.c)
list(APPEND tests sm4_cbc_mac)
list(APPEND demos sm4_cbc_mac_demo)
endif()
option(ENABLE_GMT_0105_RNG "Enable GM/T 0105 Software RNG" OFF) option(ENABLE_GMT_0105_RNG "Enable GM/T 0105 Software RNG" OFF)
if (ENABLE_GMT_0105_RNG) if (ENABLE_GMT_0105_RNG)
message(STATUS "ENABLE_GMT_0105_RNG") message(STATUS "ENABLE_GMT_0105_RNG is ON")
list(APPEND src src/sm3_rng.c src/sm4_cbc_mac.c src/sm4_rng.c) list(APPEND src src/sm3_rng.c src/sm4_rng.c)
list(APPEND tests sm3_rng sm4_cbc_mac sm4_rng) list(APPEND tests sm3_rng sm4_rng)
list(APPEND demos sm4_cbc_mac_demo)
endif() endif()
@@ -400,6 +410,9 @@ endif()
add_library(gmssl ${src}) add_library(gmssl ${src})
if (WIN32) if (WIN32)
target_link_libraries(gmssl -lws2_32) target_link_libraries(gmssl -lws2_32)
elseif (APPLE) elseif (APPLE)
@@ -421,6 +434,16 @@ SET_TARGET_PROPERTIES(gmssl PROPERTIES VERSION 3.1 SOVERSION 3)
install(TARGETS gmssl ARCHIVE DESTINATION lib LIBRARY DESTINATION lib RUNTIME DESTINATION bin) install(TARGETS gmssl ARCHIVE DESTINATION lib LIBRARY DESTINATION lib RUNTIME DESTINATION bin)
install(DIRECTORY ${CMAKE_SOURCE_DIR}/include/gmssl DESTINATION include) install(DIRECTORY ${CMAKE_SOURCE_DIR}/include/gmssl DESTINATION include)
option(ENABLE_SOFT_SDF "Enable Software SDF Implementation" OFF)
if (ENABLE_SOFT_SDF)
message(STATUS "ENABLE_SOFT_SDF is ON")
add_library(soft_sdf SHARED src/sdf/soft_sdf.c)
target_link_libraries(soft_sdf PRIVATE gmssl)
set_target_properties(soft_sdf PROPERTIES VERSION 3.1 SOVERSION 3)
endif()
if (NOT ${CMAKE_SYSTEM_NAME} STREQUAL "iOS") if (NOT ${CMAKE_SYSTEM_NAME} STREQUAL "iOS")
add_library(sdf_dummy SHARED src/sdf/sdf_dummy.c) add_library(sdf_dummy SHARED src/sdf/sdf_dummy.c)

View File

@@ -1,5 +1,5 @@
/* /*
* Copyright 2014-2022 The GmSSL Project. All Rights Reserved. * Copyright 2014-2023 The GmSSL Project. All Rights Reserved.
* *
* Licensed under the Apache License, Version 2.0 (the License); you may * Licensed under the Apache License, Version 2.0 (the License); you may
* not use this file except in compliance with the License. * not use this file except in compliance with the License.
@@ -7,459 +7,462 @@
* http://www.apache.org/licenses/LICENSE-2.0 * http://www.apache.org/licenses/LICENSE-2.0
*/ */
/* /*
* SDF API is a cryptographic API for PCI-E cards defined in standard * SDF API is a cryptographic API for PCI-E cards defined in standard
* GM/T 0018-2012: Interface Specifications of Cryptography Device Application * GM/T 0018-2012: Interface Specifications of Cryptography Device Application
* *
* Note: this header file follows the specification of GM/T 0018-2012. As we * Note: this header file follows the specification of GM/T 0018-2012. As we
* know, some vendors provide header files with some differences, especially * know, some vendors provide header files with some differences, especially
* the definations of data structures. So be sure to check the file provided by * the definations of data structures. So be sure to check the file provided by
* vendors and compare with this one. * vendors and compare with this one.
* *
* The implementations of SDF API from different vendors might have different * The implementations of SDF API from different vendors might have different
* behaviors on the same function. The comments in this file will show * behaviors on the same function. The comments in this file will show
* information and warnings on these issues. If the application developer use * information and warnings on these issues. If the application developer use
* the GmSSL implementation, see `crypto/gmapi/sdf_lcl.h` for more information. * the GmSSL implementation, see `crypto/gmapi/sdf_lcl.h` for more information.
*/ */
#ifndef HEADER_SDF_H #ifndef HEADER_SDF_H
#define HEADER_SDF_H #define HEADER_SDF_H
#include <stdio.h> #include <stdio.h>
#include "../sgd.h" #include "../sgd.h"
#ifdef __cplusplus #ifdef __cplusplus
extern "C" { extern "C" {
#endif #endif
#pragma pack(1) #pragma pack(1)
typedef struct DeviceInfo_st { typedef struct DeviceInfo_st {
unsigned char IssuerName[40]; unsigned char IssuerName[40];
unsigned char DeviceName[16]; unsigned char DeviceName[16];
unsigned char DeviceSerial[16]; /* 8-char date + unsigned char DeviceSerial[16]; /* 8-char date +
* 3-char batch num + * 3-char batch num +
* 5-char serial num * 5-char serial num
*/ */
unsigned int DeviceVersion; unsigned int DeviceVersion;
unsigned int StandardVersion; unsigned int StandardVersion;
unsigned int AsymAlgAbility[2]; /* AsymAlgAbility[0] = algors unsigned int AsymAlgAbility[2]; /* AsymAlgAbility[0] = algors
* AsymAlgAbility[1] = modulus lens * AsymAlgAbility[1] = modulus lens
*/ */
unsigned int SymAlgAbility; unsigned int SymAlgAbility;
unsigned int HashAlgAbility; unsigned int HashAlgAbility;
unsigned int BufferSize; unsigned int BufferSize;
} DEVICEINFO; } DEVICEINFO;
typedef struct RSArefPublicKey_st { typedef struct RSArefPublicKey_st {
unsigned int bits; unsigned int bits;
unsigned char m[RSAref_MAX_LEN]; unsigned char m[RSAref_MAX_LEN];
unsigned char e[RSAref_MAX_LEN]; unsigned char e[RSAref_MAX_LEN];
} RSArefPublicKey; } RSArefPublicKey;
typedef struct RSArefPrivateKey_st { typedef struct RSArefPrivateKey_st {
unsigned int bits; unsigned int bits;
unsigned char m[RSAref_MAX_LEN]; unsigned char m[RSAref_MAX_LEN];
unsigned char e[RSAref_MAX_LEN]; unsigned char e[RSAref_MAX_LEN];
unsigned char d[RSAref_MAX_LEN]; unsigned char d[RSAref_MAX_LEN];
unsigned char prime[2][RSAref_MAX_PLEN]; unsigned char prime[2][RSAref_MAX_PLEN];
unsigned char pexp[2][RSAref_MAX_PLEN]; unsigned char pexp[2][RSAref_MAX_PLEN];
unsigned char coef[RSAref_MAX_PLEN]; unsigned char coef[RSAref_MAX_PLEN];
} RSArefPrivateKey; } RSArefPrivateKey;
typedef struct ECCrefPublicKey_st { typedef struct ECCrefPublicKey_st {
unsigned int bits; unsigned int bits;
unsigned char x[ECCref_MAX_LEN]; unsigned char x[ECCref_MAX_LEN];
unsigned char y[ECCref_MAX_LEN]; unsigned char y[ECCref_MAX_LEN];
} ECCrefPublicKey; } ECCrefPublicKey;
typedef struct ECCrefPrivateKey_st { typedef struct ECCrefPrivateKey_st {
unsigned int bits; unsigned int bits;
unsigned char K[ECCref_MAX_LEN]; unsigned char K[ECCref_MAX_LEN];
} ECCrefPrivateKey; } ECCrefPrivateKey;
typedef struct ECCCipher_st { typedef struct ECCCipher_st {
unsigned char x[ECCref_MAX_LEN]; unsigned char x[ECCref_MAX_LEN];
unsigned char y[ECCref_MAX_LEN]; unsigned char y[ECCref_MAX_LEN];
unsigned char M[32]; unsigned char M[32];
unsigned int L; unsigned int L;
unsigned char C[1]; unsigned char C[1];
} ECCCipher; // Extend sizeof(C) to SM2_MAX_PLAINTEXT_SIZE
// gmssl/sm2.h: SM2_MAX_PLAINTEXT_SIZE = 255
typedef struct ECCSignature_st { unsigned char C_[254];
unsigned char r[ECCref_MAX_LEN]; } ECCCipher;
unsigned char s[ECCref_MAX_LEN];
} ECCSignature; typedef struct ECCSignature_st {
unsigned char r[ECCref_MAX_LEN];
typedef struct SDF_ENVELOPEDKEYBLOB { unsigned char s[ECCref_MAX_LEN];
unsigned long Version; } ECCSignature;
unsigned long ulSymmAlgID;
ECCCipher ECCCipehrBlob; typedef struct SDF_ENVELOPEDKEYBLOB {
ECCrefPublicKey PubKey; unsigned long Version;
unsigned char cbEncryptedPrivKey[64]; unsigned long ulSymmAlgID;
} EnvelopedKeyBlob, *PEnvelopedKeyBlob; ECCCipher ECCCipehrBlob;
#pragma pack() ECCrefPublicKey PubKey;
unsigned char cbEncryptedPrivKey[64];
int SDF_OpenDevice( } EnvelopedKeyBlob, *PEnvelopedKeyBlob;
void **phDeviceHandle); #pragma pack()
int SDF_CloseDevice( int SDF_OpenDevice(
void *hDeviceHandle); void **phDeviceHandle);
int SDF_OpenSession( int SDF_CloseDevice(
void *hDeviceHandle, void *hDeviceHandle);
void **phSessionHandle);
int SDF_OpenSession(
int SDF_CloseSession( void *hDeviceHandle,
void *hSessionHandle); void **phSessionHandle);
int SDF_GetDeviceInfo( int SDF_CloseSession(
void *hSessionHandle, void *hSessionHandle);
DEVICEINFO *pstDeviceInfo);
int SDF_GetDeviceInfo(
int SDF_GenerateRandom( void *hSessionHandle,
void *hSessionHandle, DEVICEINFO *pstDeviceInfo);
unsigned int uiLength,
unsigned char *pucRandom); int SDF_GenerateRandom(
void *hSessionHandle,
int SDF_GetPrivateKeyAccessRight( unsigned int uiLength,
void *hSessionHandle, unsigned char *pucRandom);
unsigned int uiKeyIndex,
unsigned char *pucPassword, int SDF_GetPrivateKeyAccessRight(
unsigned int uiPwdLength); void *hSessionHandle,
unsigned int uiKeyIndex,
int SDF_ReleasePrivateKeyAccessRight( unsigned char *pucPassword,
void *hSessionHandle, unsigned int uiPwdLength);
unsigned int uiKeyIndex);
int SDF_ReleasePrivateKeyAccessRight(
int SDF_ExportSignPublicKey_RSA( void *hSessionHandle,
void *hSessionHandle, unsigned int uiKeyIndex);
unsigned int uiKeyIndex,
RSArefPublicKey *pucPublicKey); int SDF_ExportSignPublicKey_RSA(
void *hSessionHandle,
int SDF_ExportEncPublicKey_RSA( unsigned int uiKeyIndex,
void *hSessionHandle, RSArefPublicKey *pucPublicKey);
unsigned int uiKeyIndex,
RSArefPublicKey *pucPublicKey); int SDF_ExportEncPublicKey_RSA(
void *hSessionHandle,
int SDF_GenerateKeyPair_RSA( unsigned int uiKeyIndex,
void *hSessionHandle, RSArefPublicKey *pucPublicKey);
unsigned int uiKeyBits,
RSArefPublicKey *pucPublicKey, int SDF_GenerateKeyPair_RSA(
RSArefPrivateKey *pucPrivateKey); void *hSessionHandle,
unsigned int uiKeyBits,
int SDF_GenerateKeyWithIPK_RSA( RSArefPublicKey *pucPublicKey,
void *hSessionHandle, RSArefPrivateKey *pucPrivateKey);
unsigned int uiIPKIndex,
unsigned int uiKeyBits, int SDF_GenerateKeyWithIPK_RSA(
unsigned char *pucKey, void *hSessionHandle,
unsigned int *puiKeyLength, unsigned int uiIPKIndex,
void **phKeyHandle); unsigned int uiKeyBits,
unsigned char *pucKey,
int SDF_GenerateKeyWithEPK_RSA( unsigned int *puiKeyLength,
void *hSessionHandle, void **phKeyHandle);
unsigned int uiKeyBits,
RSArefPublicKey *pucPublicKey, int SDF_GenerateKeyWithEPK_RSA(
unsigned char *pucKey, void *hSessionHandle,
unsigned int *puiKeyLength, unsigned int uiKeyBits,
void **phKeyHandle); RSArefPublicKey *pucPublicKey,
unsigned char *pucKey,
int SDF_ImportKeyWithISK_RSA( unsigned int *puiKeyLength,
void *hSessionHandle, void **phKeyHandle);
unsigned int uiISKIndex,
unsigned char *pucKey, int SDF_ImportKeyWithISK_RSA(
unsigned int uiKeyLength, void *hSessionHandle,
void **phKeyHandle); unsigned int uiISKIndex,
unsigned char *pucKey,
int SDF_ExchangeDigitEnvelopeBaseOnRSA( unsigned int uiKeyLength,
void *hSessionHandle, void **phKeyHandle);
unsigned int uiKeyIndex,
RSArefPublicKey *pucPublicKey, int SDF_ExchangeDigitEnvelopeBaseOnRSA(
unsigned char *pucDEInput, void *hSessionHandle,
unsigned int uiDELength, unsigned int uiKeyIndex,
unsigned char *pucDEOutput, RSArefPublicKey *pucPublicKey,
unsigned int *puiDELength); unsigned char *pucDEInput,
unsigned int uiDELength,
int SDF_ExportSignPublicKey_ECC( unsigned char *pucDEOutput,
void *hSessionHandle, unsigned int *puiDELength);
unsigned int uiKeyIndex,
ECCrefPublicKey *pucPublicKey); int SDF_ExportSignPublicKey_ECC(
void *hSessionHandle,
int SDF_ExportEncPublicKey_ECC( unsigned int uiKeyIndex,
void *hSessionHandle, ECCrefPublicKey *pucPublicKey);
unsigned int uiKeyIndex,
ECCrefPublicKey *pucPublicKey); int SDF_ExportEncPublicKey_ECC(
void *hSessionHandle,
int SDF_GenerateKeyPair_ECC( unsigned int uiKeyIndex,
void *hSessionHandle, ECCrefPublicKey *pucPublicKey);
unsigned int uiAlgID,
unsigned int uiKeyBits, int SDF_GenerateKeyPair_ECC(
ECCrefPublicKey *pucPublicKey, void *hSessionHandle,
ECCrefPrivateKey *pucPrivateKey); unsigned int uiAlgID,
unsigned int uiKeyBits,
int SDF_GenerateKeyWithIPK_ECC( ECCrefPublicKey *pucPublicKey,
void *hSessionHandle, ECCrefPrivateKey *pucPrivateKey);
unsigned int uiIPKIndex,
unsigned int uiKeyBits, int SDF_GenerateKeyWithIPK_ECC(
ECCCipher *pucKey, void *hSessionHandle,
void **phKeyHandle); unsigned int uiIPKIndex,
unsigned int uiKeyBits,
int SDF_GenerateKeyWithEPK_ECC( ECCCipher *pucKey,
void *hSessionHandle, void **phKeyHandle);
unsigned int uiKeyBits,
unsigned int uiAlgID, int SDF_GenerateKeyWithEPK_ECC(
ECCrefPublicKey *pucPublicKey, void *hSessionHandle,
ECCCipher *pucKey, unsigned int uiKeyBits,
void **phKeyHandle); unsigned int uiAlgID,
ECCrefPublicKey *pucPublicKey,
int SDF_ImportKeyWithISK_ECC( ECCCipher *pucKey,
void *hSessionHandle, void **phKeyHandle);
unsigned int uiISKIndex,
ECCCipher *pucKey, int SDF_ImportKeyWithISK_ECC(
void **phKeyHandle); void *hSessionHandle,
unsigned int uiISKIndex,
int SDF_GenerateAgreementDataWithECC( ECCCipher *pucKey,
void *hSessionHandle, void **phKeyHandle);
unsigned int uiISKIndex,
unsigned int uiKeyBits, int SDF_GenerateAgreementDataWithECC(
unsigned char *pucSponsorID, void *hSessionHandle,
unsigned int uiSponsorIDLength, unsigned int uiISKIndex,
ECCrefPublicKey *pucSponsorPublicKey, unsigned int uiKeyBits,
ECCrefPublicKey *pucSponsorTmpPublicKey, unsigned char *pucSponsorID,
void **phAgreementHandle); unsigned int uiSponsorIDLength,
ECCrefPublicKey *pucSponsorPublicKey,
int SDF_GenerateKeyWithECC( ECCrefPublicKey *pucSponsorTmpPublicKey,
void *hSessionHandle, void **phAgreementHandle);
unsigned char *pucResponseID,
unsigned int uiResponseIDLength, int SDF_GenerateKeyWithECC(
ECCrefPublicKey *pucResponsePublicKey, void *hSessionHandle,
ECCrefPublicKey *pucResponseTmpPublicKey, unsigned char *pucResponseID,
void *hAgreementHandle, unsigned int uiResponseIDLength,
void **phKeyHandle); ECCrefPublicKey *pucResponsePublicKey,
ECCrefPublicKey *pucResponseTmpPublicKey,
int SDF_GenerateAgreementDataAndKeyWithECC( void *hAgreementHandle,
void *hSessionHandle, void **phKeyHandle);
unsigned int uiISKIndex,
unsigned int uiKeyBits, int SDF_GenerateAgreementDataAndKeyWithECC(
unsigned char *pucResponseID, void *hSessionHandle,
unsigned int uiResponseIDLength, unsigned int uiISKIndex,
unsigned char *pucSponsorID, unsigned int uiKeyBits,
unsigned int uiSponsorIDLength, unsigned char *pucResponseID,
ECCrefPublicKey *pucSponsorPublicKey, unsigned int uiResponseIDLength,
ECCrefPublicKey *pucSponsorTmpPublicKey, unsigned char *pucSponsorID,
ECCrefPublicKey *pucResponsePublicKey, unsigned int uiSponsorIDLength,
ECCrefPublicKey *pucResponseTmpPublicKey, ECCrefPublicKey *pucSponsorPublicKey,
void **phKeyHandle); ECCrefPublicKey *pucSponsorTmpPublicKey,
ECCrefPublicKey *pucResponsePublicKey,
int SDF_ExchangeDigitEnvelopeBaseOnECC( ECCrefPublicKey *pucResponseTmpPublicKey,
void *hSessionHandle, void **phKeyHandle);
unsigned int uiKeyIndex,
unsigned int uiAlgID, int SDF_ExchangeDigitEnvelopeBaseOnECC(
ECCrefPublicKey *pucPublicKey, void *hSessionHandle,
ECCCipher *pucEncDataIn, unsigned int uiKeyIndex,
ECCCipher *pucEncDataOut); unsigned int uiAlgID,
ECCrefPublicKey *pucPublicKey,
int SDF_GenerateKeyWithKEK( ECCCipher *pucEncDataIn,
void *hSessionHandle, ECCCipher *pucEncDataOut);
unsigned int uiKeyBits,
unsigned int uiAlgID, int SDF_GenerateKeyWithKEK(
unsigned int uiKEKIndex, void *hSessionHandle,
unsigned char *pucKey, unsigned int uiKeyBits,
unsigned int *puiKeyLength, unsigned int uiAlgID,
void **phKeyHandle); unsigned int uiKEKIndex,
unsigned char *pucKey,
int SDF_ImportKeyWithKEK( unsigned int *puiKeyLength,
void *hSessionHandle, void **phKeyHandle);
unsigned int uiAlgID,
unsigned int uiKEKIndex, int SDF_ImportKeyWithKEK(
unsigned char *pucKey, void *hSessionHandle,
unsigned int uiKeyLength, unsigned int uiAlgID,
void **phKeyHandle); unsigned int uiKEKIndex,
unsigned char *pucKey,
int SDF_DestroyKey( unsigned int uiKeyLength,
void *hSessionHandle, void **phKeyHandle);
void *hKeyHandle);
int SDF_DestroyKey(
int SDF_ExternalPublicKeyOperation_RSA( void *hSessionHandle,
void *hSessionHandle, void *hKeyHandle);
RSArefPublicKey *pucPublicKey,
unsigned char *pucDataInput, int SDF_ExternalPublicKeyOperation_RSA(
unsigned int uiInputLength, void *hSessionHandle,
unsigned char *pucDataOutput, RSArefPublicKey *pucPublicKey,
unsigned int *puiOutputLength); unsigned char *pucDataInput,
unsigned int uiInputLength,
int SDF_InternalPublicKeyOperation_RSA( unsigned char *pucDataOutput,
void *hSessionHandle, unsigned int *puiOutputLength);
unsigned int uiKeyIndex,
unsigned char *pucDataInput, int SDF_InternalPublicKeyOperation_RSA(
unsigned int uiInputLength, void *hSessionHandle,
unsigned char *pucDataOutput, unsigned int uiKeyIndex,
unsigned int *puiOutputLength); unsigned char *pucDataInput,
unsigned int uiInputLength,
int SDF_InternalPrivateKeyOperation_RSA( unsigned char *pucDataOutput,
void *hSessionHandle, unsigned int *puiOutputLength);
unsigned int uiKeyIndex,
unsigned char *pucDataInput, int SDF_InternalPrivateKeyOperation_RSA(
unsigned int uiInputLength, void *hSessionHandle,
unsigned char *pucDataOutput, unsigned int uiKeyIndex,
unsigned int *puiOutputLength); unsigned char *pucDataInput,
unsigned int uiInputLength,
int SDF_ExternalVerify_ECC( unsigned char *pucDataOutput,
void *hSessionHandle, unsigned int *puiOutputLength);
unsigned int uiAlgID,
ECCrefPublicKey *pucPublicKey, int SDF_ExternalVerify_ECC(
unsigned char *pucDataInput, void *hSessionHandle,
unsigned int uiInputLength, unsigned int uiAlgID,
ECCSignature *pucSignature); ECCrefPublicKey *pucPublicKey,
unsigned char *pucDataInput,
int SDF_InternalSign_ECC( unsigned int uiInputLength,
void *hSessionHandle, ECCSignature *pucSignature);
unsigned int uiISKIndex,
unsigned char *pucData, int SDF_InternalSign_ECC(
unsigned int uiDataLength, void *hSessionHandle,
ECCSignature *pucSignature); unsigned int uiISKIndex,
unsigned char *pucData,
int SDF_InternalVerify_ECC( unsigned int uiDataLength,
void *hSessionHandle, ECCSignature *pucSignature);
unsigned int uiIPKIndex,
unsigned char *pucData, int SDF_InternalVerify_ECC(
unsigned int uiDataLength, void *hSessionHandle,
ECCSignature *pucSignature); unsigned int uiIPKIndex,
unsigned char *pucData,
int SDF_ExternalEncrypt_ECC( unsigned int uiDataLength,
void *hSessionHandle, ECCSignature *pucSignature);
unsigned int uiAlgID,
ECCrefPublicKey *pucPublicKey, int SDF_ExternalEncrypt_ECC(
unsigned char *pucData, void *hSessionHandle,
unsigned int uiDataLength, unsigned int uiAlgID,
ECCCipher *pucEncData); ECCrefPublicKey *pucPublicKey,
unsigned char *pucData,
int SDF_InternalEncrypt_ECC( unsigned int uiDataLength,
void *hSessionHandle, ECCCipher *pucEncData);
unsigned int uiIPKIndex,
unsigned int uiAlgID, int SDF_InternalEncrypt_ECC(
unsigned char *pucData, void *hSessionHandle,
unsigned int uiDataLength, unsigned int uiIPKIndex,
ECCCipher *pucEncData); unsigned int uiAlgID,
unsigned char *pucData,
int SDF_InternalDecrypt_ECC( unsigned int uiDataLength,
void *hSessionHandle, ECCCipher *pucEncData);
unsigned int uiISKIndex,
unsigned int uiAlgID, int SDF_InternalDecrypt_ECC(
ECCCipher *pucEncData, void *hSessionHandle,
unsigned char *pucData, unsigned int uiISKIndex,
unsigned int *uiDataLength); unsigned int uiAlgID,
ECCCipher *pucEncData,
int SDF_Encrypt( unsigned char *pucData,
void *hSessionHandle, unsigned int *uiDataLength);
void *hKeyHandle,
unsigned int uiAlgID, int SDF_Encrypt(
unsigned char *pucIV, void *hSessionHandle,
unsigned char *pucData, void *hKeyHandle,
unsigned int uiDataLength, unsigned int uiAlgID,
unsigned char *pucEncData, unsigned char *pucIV,
unsigned int *puiEncDataLength); unsigned char *pucData,
unsigned int uiDataLength,
int SDF_Decrypt( unsigned char *pucEncData,
void *hSessionHandle, unsigned int *puiEncDataLength);
void *hKeyHandle,
unsigned int uiAlgID, int SDF_Decrypt(
unsigned char *pucIV, void *hSessionHandle,
unsigned char *pucEncData, void *hKeyHandle,
unsigned int uiEncDataLength, unsigned int uiAlgID,
unsigned char *pucData, unsigned char *pucIV,
unsigned int *puiDataLength); unsigned char *pucEncData,
unsigned int uiEncDataLength,
int SDF_CalculateMAC( unsigned char *pucData,
void *hSessionHandle, unsigned int *puiDataLength);
void *hKeyHandle,
unsigned int uiAlgID, int SDF_CalculateMAC(
unsigned char *pucIV, void *hSessionHandle,
unsigned char *pucData, void *hKeyHandle,
unsigned int uiDataLength, unsigned int uiAlgID,
unsigned char *pucMAC, unsigned char *pucIV,
unsigned int *puiMACLength); unsigned char *pucData,
unsigned int uiDataLength,
int SDF_HashInit( unsigned char *pucMAC,
void *hSessionHandle, unsigned int *puiMACLength);
unsigned int uiAlgID,
ECCrefPublicKey *pucPublicKey, int SDF_HashInit(
unsigned char *pucID, void *hSessionHandle,
unsigned int uiIDLength); unsigned int uiAlgID,
ECCrefPublicKey *pucPublicKey,
int SDF_HashUpdate( unsigned char *pucID,
void *hSessionHandle, unsigned int uiIDLength);
unsigned char *pucData,
unsigned int uiDataLength); int SDF_HashUpdate(
void *hSessionHandle,
int SDF_HashFinal(void *hSessionHandle, unsigned char *pucData,
unsigned char *pucHash, unsigned int uiDataLength);
unsigned int *puiHashLength);
int SDF_HashFinal(void *hSessionHandle,
int SDF_CreateFile( unsigned char *pucHash,
void *hSessionHandle, unsigned int *puiHashLength);
unsigned char *pucFileName,
unsigned int uiNameLen, /* max 128-byte */ int SDF_CreateFile(
unsigned int uiFileSize); void *hSessionHandle,
unsigned char *pucFileName,
int SDF_ReadFile( unsigned int uiNameLen, /* max 128-byte */
void *hSessionHandle, unsigned int uiFileSize);
unsigned char *pucFileName,
unsigned int uiNameLen, int SDF_ReadFile(
unsigned int uiOffset, void *hSessionHandle,
unsigned int *puiReadLength, unsigned char *pucFileName,
unsigned char *pucBuffer); unsigned int uiNameLen,
unsigned int uiOffset,
int SDF_WriteFile( unsigned int *puiReadLength,
void *hSessionHandle, unsigned char *pucBuffer);
unsigned char *pucFileName,
unsigned int uiNameLen, int SDF_WriteFile(
unsigned int uiOffset, void *hSessionHandle,
unsigned int uiWriteLength, unsigned char *pucFileName,
unsigned char *pucBuffer); unsigned int uiNameLen,
unsigned int uiOffset,
int SDF_DeleteFile( unsigned int uiWriteLength,
void *hSessionHandle, unsigned char *pucBuffer);
unsigned char *pucFileName,
unsigned int uiNameLen); int SDF_DeleteFile(
void *hSessionHandle,
#define SDR_OK 0x0 unsigned char *pucFileName,
#define SDR_BASE 0x01000000 unsigned int uiNameLen);
#define SDR_UNKNOWERR (SDR_BASE + 0x00000001)
#define SDR_NOTSUPPORT (SDR_BASE + 0x00000002) #define SDR_OK 0x0
#define SDR_COMMFAIL (SDR_BASE + 0x00000003) #define SDR_BASE 0x01000000
#define SDR_HARDFAIL (SDR_BASE + 0x00000004) #define SDR_UNKNOWERR (SDR_BASE + 0x00000001)
#define SDR_OPENDEVICE (SDR_BASE + 0x00000005) #define SDR_NOTSUPPORT (SDR_BASE + 0x00000002)
#define SDR_OPENSESSION (SDR_BASE + 0x00000006) #define SDR_COMMFAIL (SDR_BASE + 0x00000003)
#define SDR_PARDENY (SDR_BASE + 0x00000007) #define SDR_HARDFAIL (SDR_BASE + 0x00000004)
#define SDR_KEYNOTEXIST (SDR_BASE + 0x00000008) #define SDR_OPENDEVICE (SDR_BASE + 0x00000005)
#define SDR_ALGNOTSUPPORT (SDR_BASE + 0x00000009) #define SDR_OPENSESSION (SDR_BASE + 0x00000006)
#define SDR_ALGMODNOTSUPPORT (SDR_BASE + 0x0000000A) #define SDR_PARDENY (SDR_BASE + 0x00000007)
#define SDR_PKOPERR (SDR_BASE + 0x0000000B) #define SDR_KEYNOTEXIST (SDR_BASE + 0x00000008)
#define SDR_SKOPERR (SDR_BASE + 0x0000000C) #define SDR_ALGNOTSUPPORT (SDR_BASE + 0x00000009)
#define SDR_SIGNERR (SDR_BASE + 0x0000000D) #define SDR_ALGMODNOTSUPPORT (SDR_BASE + 0x0000000A)
#define SDR_VERIFYERR (SDR_BASE + 0x0000000E) #define SDR_PKOPERR (SDR_BASE + 0x0000000B)
#define SDR_SYMOPERR (SDR_BASE + 0x0000000F) #define SDR_SKOPERR (SDR_BASE + 0x0000000C)
#define SDR_STEPERR (SDR_BASE + 0x00000010) #define SDR_SIGNERR (SDR_BASE + 0x0000000D)
#define SDR_FILESIZEERR (SDR_BASE + 0x00000011) #define SDR_VERIFYERR (SDR_BASE + 0x0000000E)
#define SDR_FILENOEXIST (SDR_BASE + 0x00000012) #define SDR_SYMOPERR (SDR_BASE + 0x0000000F)
#define SDR_FILEOFSERR (SDR_BASE + 0x00000013) #define SDR_STEPERR (SDR_BASE + 0x00000010)
#define SDR_KEYTYPEERR (SDR_BASE + 0x00000014) #define SDR_FILESIZEERR (SDR_BASE + 0x00000011)
#define SDR_KEYERR (SDR_BASE + 0x00000015) #define SDR_FILENOEXIST (SDR_BASE + 0x00000012)
#define SDR_ENCDATAERR (SDR_BASE + 0x00000016) #define SDR_FILEOFSERR (SDR_BASE + 0x00000013)
#define SDR_RANDERR (SDR_BASE + 0x00000017) #define SDR_KEYTYPEERR (SDR_BASE + 0x00000014)
#define SDR_PRKRERR (SDR_BASE + 0x00000018) #define SDR_KEYERR (SDR_BASE + 0x00000015)
#define SDR_MACERR (SDR_BASE + 0x00000019) #define SDR_ENCDATAERR (SDR_BASE + 0x00000016)
#define SDR_FILEEXSITS (SDR_BASE + 0x0000001A) #define SDR_RANDERR (SDR_BASE + 0x00000017)
#define SDR_FILEWERR (SDR_BASE + 0x0000001B) #define SDR_PRKRERR (SDR_BASE + 0x00000018)
#define SDR_NOBUFFER (SDR_BASE + 0x0000001C) #define SDR_MACERR (SDR_BASE + 0x00000019)
#define SDR_INARGERR (SDR_BASE + 0x0000001D) #define SDR_FILEEXSITS (SDR_BASE + 0x0000001A)
#define SDR_OUTARGERR (SDR_BASE + 0x0000001E) #define SDR_FILEWERR (SDR_BASE + 0x0000001B)
#define SDR_NOBUFFER (SDR_BASE + 0x0000001C)
#define SDR_INARGERR (SDR_BASE + 0x0000001D)
#ifdef __cplusplus #define SDR_OUTARGERR (SDR_BASE + 0x0000001E)
}
#endif
#endif #ifdef __cplusplus
}
#endif
#endif

2335
src/sdf/soft_sdf.c Executable file

File diff suppressed because it is too large Load Diff

View File

@@ -65,9 +65,9 @@
#define SGD_RSA_SIGN (SGD_RSA|SGD_PK_SIGN) // FIXME: correct? #define SGD_RSA_SIGN (SGD_RSA|SGD_PK_SIGN) // FIXME: correct?
#define SGD_RSA_ENC (SGD_RSA|SGD_PK_ENC) // FIXME: correct? #define SGD_RSA_ENC (SGD_RSA|SGD_PK_ENC) // FIXME: correct?
#define SGD_SM2 0x00020100 #define SGD_SM2 0x00020100
#define SGD_SM2_1 0x00020200 #define SGD_SM2_1 0x00020200 // SM2 Signature Scheme
#define SGD_SM2_2 0x00020400 #define SGD_SM2_2 0x00020400 // SM2 Key Exchange Protocol
#define SGD_SM2_3 0x00020800 #define SGD_SM2_3 0x00020800 // SM2 Encryption Scheme
/* hash */ /* hash */
#define SGD_SM3 0x00000001 #define SGD_SM3 0x00000001