chinaEncrypt.h 5.1 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184
  1. #ifndef CHINA_ENCRYPT
  2. #define CHINA_ENCRYPT
  3. #if defined (__cplusplus)
  4. extern "C" {
  5. #endif
  6. // 获取SM234的version, 调用打印厂商和版本号
  7. /*
  8. * 功能:获取厂商信息和版本信息
  9. * 输入:无
  10. * 返回值:
  11. * TianDiRong-1.0-x86 天地融32位版本1.0
  12. * TianDiRong-1.0-x64 天地融64位版本1.0
  13. * KeYou-1.0-x86 科友32位版本1.0
  14. * KeYou-1.0-x64 科友64位版本1.0
  15. */
  16. char* GetSMVersion();
  17. // 计算SM3的值
  18. int SM3Hash(unsigned char* pData, int nLen, unsigned char hash[32]); //替换MD5
  19. //计算文件的SM3的值
  20. int SM3File(char* file, unsigned char hash[32]);
  21. /*
  22. 功能:生成SM2公私钥对
  23. 输入:
  24. pPubKeyBuf : pubkey缓冲区的长度,至少为65字节
  25. pPriKeyBuf: privkey缓冲区的长度,至少为32字节
  26. 输出:
  27. pPubKeyBuf: 公钥
  28. pPubKeyBufLen : 公钥的字节数
  29. pPriKeyBuf: 私钥
  30. pPriKeyBufLen: 私钥的字节数
  31. 返回值:
  32. */
  33. int CreateSM2KeyPair(unsigned char* pPubKeyBuf, int* pPubKeyBufLen, unsigned char* pPriKeyBuf, int* pPriKeyBufLen);
  34. /*
  35. 功能:用SM2公钥加密数据。
  36. 输入:
  37. pPubKey: 公钥
  38. nKeyLen: 公钥的字节数
  39. pSource: 要加密的数据
  40. nSourceLen: pSource的字节数
  41. pDestLen : pDest缓冲区的长度,必须至少比pSource的长度多97字节
  42. 输出:
  43. pDest : 加密结果
  44. pDestLen : 加密结果的字节数
  45. 返回值:
  46. */
  47. int EncWithSM2PubKey(unsigned char* pSource, int nSourceLen, unsigned char* pDest, int* pDestLen, unsigned char* pPubKey, int nKeyLen);
  48. /*
  49. 功能:用SM2私钥解密数据。
  50. 输入:
  51. pPriKey: 私钥
  52. nKeyLen: 私钥的字节数
  53. pSource : 要解密的数据,不少于97字节。
  54. nSourceLen: pSource的字节数
  55. pDestLen : pDest缓冲区的长度,至少为nSourceLen ~ 97字节
  56. 输出:
  57. pDest : 解密结果
  58. pDestLen : 解密结果的字节数
  59. 返回值:
  60. */
  61. int DecWithSM2PriKey(unsigned char* pSource, int nSourceLen, unsigned char* pDest, int* pDestLen, unsigned char* pPriKey, int nKeyLen);
  62. /*
  63. 功能:SM2签名,userid默认为“1234567812345678”
  64. 输入:
  65. privkey: 私钥
  66. privkey_len: 私钥的字节数
  67. msg : 待签名的数据
  68. msg_len : 待签名的数据长度
  69. sig_len: signature缓冲区的长度
  70. 输出:
  71. signature: 签名
  72. sig_len: signature的长度
  73. 返回值:
  74. true: 成功
  75. len: signature为空时,返回所需的长度
  76. 其他: 待定义
  77. */
  78. int SM2SignWithSM3(unsigned char* privkey, int privkey_len, unsigned char* msg, int msg_len, unsigned char* signature, int* sig_len);
  79. /*
  80. 功能:验证SM2签名,userid默认为“1234567812345678”
  81. 输入:
  82. pubkey: 公钥
  83. pubkey _len: 公钥的字节数
  84. msg: 签名数据
  85. msg_len: 签名数据的字节数
  86. signature: 签名
  87. sig_len: 签名的字节数
  88. 返回值:
  89. true: 成功
  90. 其他: 待定义
  91. */
  92. int SM2VerifyWithSM3(unsigned char* pubkey, int pubkey_len, unsigned char* msg, int msg_len, unsigned char* signature, int sig_len);
  93. /*
  94. * 功能:SM4的ECB加密
  95. * 输入:
  96. key: 输入keyStr,为字符串
  97. input:需要加密的数据
  98. length:加密数据的长度
  99. output:加密后数据
  100. output_len:输入output的最大长度,返回加密 后output的长度
  101. * 返回值:
  102. 是否成功
  103. */
  104. int EncStrWithSM4_ECB(char *keyStr, int keyStr_len, unsigned char* input, int length, unsigned char* output, int* output_len);
  105. /*
  106. * 功能:SM4的ECB解密
  107. * 输入:
  108. key: 输入keyStr,为字符串
  109. input:需要解密的数据
  110. length:解密数据的长度
  111. output:解密后数据
  112. output_len:输入output的最大长度,返回解密后output的长度
  113. * 返回值:
  114. 是否成功
  115. */
  116. int DecStrWithSM4_ECB(char *keyStr, int keyStr_len, unsigned char* input, int length, unsigned char* output, int* output_len);
  117. /*
  118. * 功能:SM4的ECB加密
  119. * 输入:
  120. key: 输入16位的密钥,可通过SM3Hash生成
  121. * 返回值:
  122. 是否成功
  123. */
  124. int EncWithSM4_ECB(unsigned char key[16], unsigned char* input, int length, unsigned char* output, int* output_len);
  125. /*
  126. * 功能:SM4的ECB解密
  127. * 输入:
  128. key: 输入16位的密钥,可通过SM3Hash生成
  129. * 返回值:
  130. 是否成功
  131. */
  132. int DecWithSM4_ECB(unsigned char key[16], unsigned char* input, int length, unsigned char* output, int* output_len);
  133. /*
  134. * 功能:SM4的CBC加密
  135. * 输入:
  136. key: 输入keyStr,为字符串
  137. iv:初始向量
  138. input:需要加密的数据
  139. length:加密数据的长度
  140. output:加密后数据
  141. output_len:输入output的最大长度,返回加密 后output的长度
  142. * 返回值:
  143. 是否成功
  144. */
  145. int EncStrWithSM4_CBC(char *keyStr, int keyStr_len, unsigned char iv[16], unsigned char* input, int length, unsigned char* output, int* output_len);
  146. /*
  147. * 功能:SM4的CBC解密
  148. * 输入:
  149. key: 输入keyStr,为字符串
  150. iv:初始向量
  151. input:需要解密的数据
  152. length:解密数据的长度
  153. output:解密后数据
  154. output_len:输入output的最大长度,返回解密后output的长度
  155. * 返回值:
  156. 是否成功
  157. */
  158. int DecStrWithSM4_CBC(char *keyStr, int keyStr_len, unsigned char iv[16], unsigned char* input, int length, unsigned char* output, int* output_len);
  159. #if defined (__cplusplus)
  160. }
  161. #endif
  162. #endif