luat_crypto.h 5.9 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175
  1. #ifndef LUAT_CRYPTO_H
  2. #define LUAT_CRYPTO_H
  3. #include "luat_base.h"
  4. #define LUAT_CRYPTO_AES_ECB 1
  5. #define LUAT_CRYPTO_AES_CBC 2
  6. #define LUAT_CRYPTO_AES_CTR 3
  7. #define LUAT_CRYPTO_AES_CFB 4
  8. #define LUAT_CRYPTO_AES_OFB 5
  9. #define LUAT_CRYPTO_AES_PAD_ZERO 1
  10. #define LUAT_CRYPTO_AES_PAD_5 2
  11. #define LUAT_CRYPTO_AES_PAD_7 3
  12. typedef struct
  13. {
  14. size_t result_size;
  15. size_t key_len;
  16. void* ctx;
  17. }luat_crypt_stream_t;
  18. /**
  19. * @defgroup luatos_crypto crypto数据加密
  20. * @{
  21. */
  22. /**
  23. * @brief 生成随机数
  24. *
  25. * @param buff 随机数保存内存
  26. * @param len 长度
  27. * @return int
  28. */
  29. int luat_crypto_trng(char* buff, size_t len);
  30. /// @brief 计算md5值
  31. /// @param str 需要计算的字符串
  32. /// @param str_size 需要计算的字符串的长度
  33. /// @param out_ptr 输出
  34. /// @return 成功0,失败-1
  35. int luat_crypto_md5_simple(const char* str, size_t str_size, void* out_ptr);
  36. /// @brief 计算hmac_md5值
  37. /// @param str 需要计算的字符串
  38. /// @param str_size 字符串长度
  39. /// @param mac 密钥
  40. /// @param mac_size 密钥的长度
  41. /// @param out_ptr 输出
  42. /// @return 成功0,失败-1
  43. int luat_crypto_hmac_md5_simple(const char* str, size_t str_size, const char* mac, size_t mac_size, void* out_ptr);
  44. /// @brief 计算sha1值
  45. /// @param str 需要计算的字符串
  46. /// @param str_size 需要计算的字符串的长度
  47. /// @param out_ptr 输出
  48. /// @return 成功0,失败-1
  49. int luat_crypto_sha1_simple(const char* str, size_t str_size, void* out_ptr);
  50. /// @brief 计算hmac_sha1值
  51. /// @param str 需要计算的字符串
  52. /// @param str_size 字符串长度
  53. /// @param mac 密钥
  54. /// @param mac_size 密钥的长度
  55. /// @param out_ptr 输出
  56. /// @return 成功0,失败-1
  57. int luat_crypto_hmac_sha1_simple(const char* str, size_t str_size, const char* mac, size_t mac_size, void* out_ptr);
  58. /// @brief 计算sha256值
  59. /// @param str 需要计算的字符串
  60. /// @param str_size 需要计算的字符串的长度
  61. /// @param out_ptr 输出
  62. /// @return 成功0,失败-1
  63. int luat_crypto_sha256_simple(const char* str, size_t str_size, void* out_ptr);
  64. /// @brief 计算hmac_sha256值
  65. /// @param str 需要计算的字符串
  66. /// @param str_size 字符串长度
  67. /// @param mac 密钥
  68. /// @param mac_size 密钥的长度
  69. /// @param out_ptr 输出
  70. /// @return 成功0,失败-1
  71. int luat_crypto_hmac_sha256_simple(const char* str, size_t str_size, const char* mac, size_t mac_size, void* out_ptr) ;
  72. /// @brief 计算sha512值
  73. /// @param str 需要计算的字符串
  74. /// @param str_size 需要计算的字符串的长度
  75. /// @param out_ptr 输出
  76. /// @return 成功0,失败-1
  77. int luat_crypto_sha512_simple(const char* str, size_t str_size, void* out_ptr) ;
  78. /// @brief 计算hmac_sha512值
  79. /// @param str 需要计算的字符串
  80. /// @param str_size 字符串长度
  81. /// @param mac 密钥
  82. /// @param mac_size 密钥的长度
  83. /// @param out_ptr 输出
  84. /// @return 成功0,失败-1
  85. int luat_crypto_hmac_sha512_simple(const char* str, size_t str_size, const char* mac, size_t mac_size, void* out_ptr) ;
  86. /**
  87. * @brief BASE64加密
  88. * @param dst buffer
  89. * @param dlen buffer长度
  90. * @param olen 写入的字节数
  91. * @param src 加密密钥
  92. * @param slen 加密密钥长度
  93. * @return 0成功
  94. */
  95. int luat_crypto_base64_encode( unsigned char *dst, size_t dlen, size_t *olen, const unsigned char *src, size_t slen ) ;
  96. /**
  97. * @brief BASE64解密
  98. * @param dst buffer
  99. * @param dlen buffer长度
  100. * @param olen 写入的字节数
  101. * @param src 密钥
  102. * @param slen 密钥长度
  103. * @return 0成功
  104. */
  105. int luat_crypto_base64_decode( unsigned char *dst, size_t dlen, size_t *olen, const unsigned char *src, size_t slen ) ;
  106. /**@}*/
  107. int luat_crypto_cipher_list(const char** list, size_t* len);
  108. int luat_crypto_cipher_suites(const char** list, size_t* len);
  109. int luat_crypto_md(const char* md, const char* str, size_t str_size, void* out_ptr, const char* key, size_t key_len);
  110. int luat_crypto_md_file(const char* md, void* out_ptr, const char* key, size_t key_len, const char* path);
  111. int luat_crypto_md_init(const char* md, const char* key, luat_crypt_stream_t *stream);
  112. int luat_crypto_md_update(const char* str, size_t str_size, luat_crypt_stream_t *stream);
  113. int luat_crypto_md_finish(void* out_ptr, luat_crypt_stream_t *stream);
  114. typedef struct luat_crypto_cipher_ctx
  115. {
  116. const char* cipher;
  117. const char* pad;
  118. const char* str;
  119. const char* key;
  120. const char* iv;
  121. size_t cipher_size;
  122. size_t pad_size;
  123. size_t str_size;
  124. size_t key_size;
  125. size_t iv_size;
  126. char* outbuff;
  127. size_t outlen;
  128. uint8_t flags;
  129. }luat_crypto_cipher_ctx_t;
  130. int luat_crypto_cipher_xxx(luat_crypto_cipher_ctx_t* cctx);
  131. /**
  132. * @brief crc8通用算法
  133. * @param data 输入数据
  134. * @param len 长度
  135. * @param start 起始值,一般是0
  136. * @param poly 多项式
  137. * @param is_reverse 是否逆序计算,顺序从MSB算到LSB,逆序从LSB算到MSB,不清楚的2个都试试
  138. * @return 输出值
  139. */
  140. uint8_t luat_crc8(const void *data, uint32_t len, uint8_t start, uint8_t poly, uint8_t is_reverse);
  141. /**
  142. * @brief crc16通用算法
  143. * @param data 输入数据
  144. * @param len 长度
  145. * @param start 起始值
  146. * @param poly 多项式
  147. * @param is_reverse 是否逆序计算,顺序从MSB算到LSB,逆序从LSB算到MSB,不清楚的2个都试试
  148. * @return 输出值
  149. */
  150. uint16_t luat_crc16(const void *data, uint32_t len, uint16_t start, uint16_t poly, uint8_t is_reverse);
  151. /**
  152. * @brief crc32常用算法
  153. * @param data 输入数据
  154. * @param len 长度
  155. * @param start 起始值,一般是0xffffffff
  156. * @param poly 多项式,一般是0x04C11DB7,填0会自动设置成0x04C11DB7
  157. * @return 输出值
  158. */
  159. uint32_t luat_crc32(const void *data, uint32_t len, uint32_t start, uint32_t poly);
  160. // 快速modbus crc16算法
  161. uint16_t luat_crc16_modbus( const uint8_t *buf, uint32_t len);
  162. #endif