#ifndef CHINA_ENCRYPT #define CHINA_ENCRYPT #if defined (__cplusplus) extern "C" { #endif // 获取SM234的version, 调用打印厂商和版本号 /* * 功能:获取厂商信息和版本信息 * 输入:无 * 返回值: * TianDiRong-1.0-x86 天地融32位版本1.0 * TianDiRong-1.0-x64 天地融64位版本1.0 * KeYou-1.0-x86 科友32位版本1.0 * KeYou-1.0-x64 科友64位版本1.0 */ char* GetSMVersion(); // 计算SM3的值 int SM3Hash(unsigned char* pData, int nLen, unsigned char hash[32]); //替换MD5 //计算文件的SM3的值 int SM3File(char* file, unsigned char hash[32]); /* 功能:生成SM2公私钥对 输入: pPubKeyBuf : pubkey缓冲区的长度,至少为65字节 pPriKeyBuf: privkey缓冲区的长度,至少为32字节 输出: pPubKeyBuf: 公钥 pPubKeyBufLen : 公钥的字节数 pPriKeyBuf: 私钥 pPriKeyBufLen: 私钥的字节数 返回值: */ int CreateSM2KeyPair(unsigned char* pPubKeyBuf, int* pPubKeyBufLen, unsigned char* pPriKeyBuf, int* pPriKeyBufLen); /* 功能:用SM2公钥加密数据。 输入: pPubKey: 公钥 nKeyLen: 公钥的字节数 pSource: 要加密的数据 nSourceLen: pSource的字节数 pDestLen : pDest缓冲区的长度,必须至少比pSource的长度多97字节 输出: pDest : 加密结果 pDestLen : 加密结果的字节数 返回值: */ int EncWithSM2PubKey(unsigned char* pSource, int nSourceLen, unsigned char* pDest, int* pDestLen, unsigned char* pPubKey, int nKeyLen); /* 功能:用SM2私钥解密数据。 输入: pPriKey: 私钥 nKeyLen: 私钥的字节数 pSource : 要解密的数据,不少于97字节。 nSourceLen: pSource的字节数 pDestLen : pDest缓冲区的长度,至少为nSourceLen ~ 97字节 输出: pDest : 解密结果 pDestLen : 解密结果的字节数 返回值: */ int DecWithSM2PriKey(unsigned char* pSource, int nSourceLen, unsigned char* pDest, int* pDestLen, unsigned char* pPriKey, int nKeyLen); /* 功能:SM2签名,userid默认为“1234567812345678” 输入: privkey: 私钥 privkey_len: 私钥的字节数 msg : 待签名的数据 msg_len : 待签名的数据长度 sig_len: signature缓冲区的长度 输出: signature: 签名 sig_len: signature的长度 返回值: true: 成功 len: signature为空时,返回所需的长度 其他: 待定义 */ int SM2SignWithSM3(unsigned char* privkey, int privkey_len, unsigned char* msg, int msg_len, unsigned char* signature, int* sig_len); /* 功能:验证SM2签名,userid默认为“1234567812345678” 输入: pubkey: 公钥 pubkey _len: 公钥的字节数 msg: 签名数据 msg_len: 签名数据的字节数 signature: 签名 sig_len: 签名的字节数 返回值: true: 成功 其他: 待定义 */ int SM2VerifyWithSM3(unsigned char* pubkey, int pubkey_len, unsigned char* msg, int msg_len, unsigned char* signature, int sig_len); /* * 功能:SM4的ECB加密 * 输入: key: 输入keyStr,为字符串 input:需要加密的数据 length:加密数据的长度 output:加密后数据 output_len:输入output的最大长度,返回加密 后output的长度 * 返回值: 是否成功 */ int EncStrWithSM4_ECB(char *keyStr, int keyStr_len, unsigned char* input, int length, unsigned char* output, int* output_len); /* * 功能:SM4的ECB解密 * 输入: key: 输入keyStr,为字符串 input:需要解密的数据 length:解密数据的长度 output:解密后数据 output_len:输入output的最大长度,返回解密后output的长度 * 返回值: 是否成功 */ int DecStrWithSM4_ECB(char *keyStr, int keyStr_len, unsigned char* input, int length, unsigned char* output, int* output_len); /* * 功能:SM4的ECB加密 * 输入: key: 输入16位的密钥,可通过SM3Hash生成 * 返回值: 是否成功 */ int EncWithSM4_ECB(unsigned char key[16], unsigned char* input, int length, unsigned char* output, int* output_len); /* * 功能:SM4的ECB解密 * 输入: key: 输入16位的密钥,可通过SM3Hash生成 * 返回值: 是否成功 */ int DecWithSM4_ECB(unsigned char key[16], unsigned char* input, int length, unsigned char* output, int* output_len); /* * 功能:SM4的CBC加密 * 输入: key: 输入keyStr,为字符串 iv:初始向量 input:需要加密的数据 length:加密数据的长度 output:加密后数据 output_len:输入output的最大长度,返回加密 后output的长度 * 返回值: 是否成功 */ int EncStrWithSM4_CBC(char *keyStr, int keyStr_len, unsigned char iv[16], unsigned char* input, int length, unsigned char* output, int* output_len); /* * 功能:SM4的CBC解密 * 输入: key: 输入keyStr,为字符串 iv:初始向量 input:需要解密的数据 length:解密数据的长度 output:解密后数据 output_len:输入output的最大长度,返回解密后output的长度 * 返回值: 是否成功 */ int DecStrWithSM4_CBC(char *keyStr, int keyStr_len, unsigned char iv[16], unsigned char* input, int length, unsigned char* output, int* output_len); #if defined (__cplusplus) } #endif #endif