Files
openGauss-server/contrib/common_cipher/common_internal_interfaces.h
2024-09-04 14:21:47 +08:00

128 lines
7.4 KiB
C
Executable File

#ifndef COMMON_INTERNAL_INTERFACES_H
#define COMMON_INTERNAL_INTERFACES_H
#include "common_algo.h"
#ifdef __cplusplus
extern "C" {
#endif
#define ECCref_MAX_BITS 512
#define ECCref_MAX_LEN ((ECCref_MAX_BITS+7) / 8)
/* ECC key data public key structure definition */
typedef struct ECCrefPublicKey_st
{
unsigned int bits;
unsigned char x[ECCref_MAX_LEN];
unsigned char y[ECCref_MAX_LEN];
} ECCrefPublicKey;
typedef int (*StandardOpenDevice_type)(void**);
typedef int (*StandardCloseDevice_type)(void*);
typedef int (*StandardOpenSession_type)(void*, void**);
typedef int (*StandardCloseSession_type)(void*);
typedef int (*StandardGenerateRandom_type)(void*, unsigned int, unsigned char*);
typedef int (*StandardHashInit_type)(void*, unsigned int, ECCrefPublicKey*, unsigned char*, unsigned int);
typedef int (*StandardHashUpdate_type)(void*, unsigned char*, unsigned int);
typedef int (*StandardHashFinal_type)(void*, unsigned char*, unsigned int*);
typedef int (*StandardEncrypt_type)(void*, void*, unsigned int, unsigned char*, unsigned char*, unsigned int, unsigned char*, unsigned int*);
typedef int (*StandardDecrypt_type)(void*, void*, unsigned int, unsigned char*, unsigned char*, unsigned int, unsigned char*, unsigned int*);
typedef int (*StandardDestroyKey_type)(void*, void*);
/*SDF标准接口*/
typedef struct {
StandardOpenDevice_type InternalOpenDevice; /*打开设备*/
StandardCloseDevice_type InternalCloseDevice; /*关闭设备*/
StandardOpenSession_type InternalOpenSession; /*打开会话*/
StandardCloseSession_type InternalCloseSession; /*关闭会话*/
StandardGenerateRandom_type InternalGenerateRandom; /*生成随机数*/
StandardHashInit_type InternalHashInit; /*哈希初始化*/
StandardHashUpdate_type InternalHashUpdate; /*哈希update*/
StandardHashFinal_type InternalHashFinal; /*哈希结束*/
StandardEncrypt_type InternalEncrypt; /*使用密钥句柄加密*/
StandardDecrypt_type InternalDecrypt; /*使用密钥句柄解密*/
StandardDestroyKey_type InternalDestroyKey; /*销毁密钥句柄*/
}ModuleStandardInterfaces;
typedef int (*GDACHMAC_type)(void*, unsigned char*, unsigned int, unsigned int, unsigned char*, unsigned int, unsigned char*, unsigned int*);
typedef int (*GDACGenerateKEK_type)(void*, unsigned int, unsigned int);
typedef int (*GDACEncryptWithIndex_type)(void*, unsigned char*, unsigned int, unsigned int, unsigned char*, unsigned int, unsigned char*, unsigned int, unsigned char*, unsigned int*, unsigned char*, unsigned int, unsigned char*);
typedef int (*GDACDecryptWithIndex_type)(void*, unsigned char*, unsigned int, unsigned int, unsigned char*, unsigned int, unsigned char*, unsigned int, unsigned char*, unsigned int*, unsigned char*, unsigned int, unsigned char*);
typedef int (*GDACExportKEK_type)(void*, unsigned int, void*, unsigned int*);
typedef int (*GDACGetkeyState_type)(void*, unsigned int, unsigned int, unsigned int*);
/*光电安辰扩展接口*/
typedef struct {
GDACHMAC_type GDACHMAC; /*hmac*/
GDACGenerateKEK_type GDACGenerateKEK; /*生成指定索引密钥*/
GDACEncryptWithIndex_type GDACEncryptWithIndex; /*使用索引密钥加密*/
GDACDecryptWithIndex_type GDACDecryptWithIndex; /*使用索引密钥解密*/
GDACExportKEK_type GDACExportKEK; /*导出KEK,不对外提供,内做索引转密钥使用*/
GDACGetkeyState_type GDACGetkeyState; /*获取密钥状态*/
}ModuleGdacInterfaces;
typedef int (*SWXAOpenDeviceWithPathAndName_type)(unsigned char*, void **);
typedef int (*SWXAHMAC_type)(void *, unsigned char *, unsigned int, unsigned int, unsigned char *, unsigned int, unsigned char *,unsigned int*);
typedef int (*SWXAGenerateKeyCipher_type)(void*, unsigned int, unsigned char*, unsigned int*);
typedef int (*SWXAEncKeyEncrypt_type)(void*, unsigned char*, unsigned int, unsigned int, unsigned char*, unsigned char*, unsigned int, unsigned char*, unsigned int*);
typedef int (*SWXAEncKeyDecrypt_type)(void*, unsigned char*, unsigned int, unsigned int, unsigned char*, unsigned char*, unsigned int, unsigned char*, unsigned int*);
/*三未信安扩展接口*/
typedef struct {
SWXAOpenDeviceWithPathAndName_type SWXAOpenDeviceWithPathAndName; /*指定配置文件路径和名称打开设备*/
SWXAHMAC_type SWXAHMAC; /*hmac*/
SWXAGenerateKeyCipher_type SWXAGenerateKeyCipher; /*生成密钥密文*/
SWXAEncKeyEncrypt_type SWXAEncKeyEncrypt; /*使用密钥密文加密*/
SWXAEncKeyDecrypt_type SWXAEncKeyDecrypt; /*使用密钥密文解密*/
}ModuleSwxaInterfaces;
typedef int (*JNTACalculateHmac_type)(void *, TA_HMAC_ALG, unsigned int, const unsigned char*, unsigned int, unsigned char*, unsigned int, unsigned char*, unsigned int*);
typedef int (*JNTAGenerateSymmKeyWithLMK_type)(void *, TA_SYMM_ALG, unsigned char*, unsigned int*, unsigned char*,unsigned int*);
typedef int (*JNTAImportKeyCipherByLMK_type)(void*, unsigned int, int, int, TA_SYMM_ALG, int, const unsigned char*, unsigned int, const unsigned char*, unsigned int,
const unsigned char*, unsigned int, const unsigned char symmKcv[8], unsigned int);
/*江南天安扩展接口*/
typedef struct {
JNTACalculateHmac_type JNTACalculateHmac; /*hmac*/
JNTAGenerateSymmKeyWithLMK_type JNTAGenerateSymmKeyWithLMK; /*生成LMK加密的密钥密文*/
JNTAImportKeyCipherByLMK_type JNTAImportKeyCipherByLMK; /*导入LMK加密的密钥密文到指定的索引位置*/
}ModuleJntaInterfaces;
/*硬件提供的所有接口*/
typedef struct {
ModuleType type;
ModuleStandardInterfaces *standardInterfaces;
union {
ModuleGdacInterfaces *gdacInterfaces;
ModuleSwxaInterfaces *swxaInterfaces;
ModuleJntaInterfaces *jntaInterfaces;
}extendInterfaces;
}ModuleInterfaces;
extern int load_module_driver(ModuleParams moduleparams);
extern int unload_module_driver();
extern int internal_open_device(char* cfg_path);
extern int internal_close_device();
extern int internal_open_session(void **sess);
extern int internal_close_session(void *sess);
extern ModuleType get_current_module_type();
extern int internal_generate_symm_key(void* sess, ModuleSymmKeyAlgo algo, unsigned char* key, unsigned int* keylen);
extern int internal_symm_encrypt(void *keyctx, unsigned char *indata, unsigned int inlen, unsigned char *iv, unsigned int ivlen, unsigned char *outdata, unsigned int *outlen, unsigned char *tag);
extern int internal_symm_decrypt(void *keyctx, unsigned char *indata, unsigned int inlen, unsigned char *iv, unsigned int ivlen, unsigned char *outdata, unsigned int *outlen, unsigned char *tag);
extern int internal_digest(void *sess, ModuleDigestAlgo algo, unsigned char * indata, unsigned int inlen, unsigned char *outdata, unsigned int *outlen);
extern int internal_hmac(void *ctx, unsigned char * data, unsigned int data_size, unsigned char *result, long unsigned int *result_size);
extern int internal_generate_random(void *sess, char *buffer, long unsigned int size);
#ifdef __cplusplus
}
#endif
#endif /* COMMON_INTERNAL_INTERFACES_H */