| 123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184 |
- #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
|