8#include "tuya_cloud_types.h"
14typedef VOID (*AES128_ECB_ENC_BUF)(IN CONST BYTE_T *input, IN CONST UINT_T length, IN CONST BYTE_T *key, OUT BYTE_T *output);
15typedef VOID (*AES128_ECB_DEC_BUF)(IN CONST BYTE_T *input, IN CONST UINT_T length, IN CONST BYTE_T *key, OUT BYTE_T *output);
17typedef VOID (*AES128_CBC_ENC_BUF)(IN CONST BYTE_T *input, IN CONST UINT_T length, IN CONST BYTE_T *key, IN BYTE_T *iv, OUT BYTE_T *output);
18typedef VOID (*AES128_CBC_DEC_BUF)(IN CONST BYTE_T *input, IN CONST UINT_T length, IN CONST BYTE_T *key, IN BYTE_T *iv, OUT BYTE_T *output);
21 AES128_ECB_ENC_BUF ecb_enc_128;
22 AES128_ECB_DEC_BUF ecb_dec_128;
23 AES128_CBC_ENC_BUF cbc_enc_128;
24 AES128_CBC_DEC_BUF cbc_dec_128;
27#define AES128_ENCRYPT_KEY_LEN 16
30typedef enum TUYA_HW_AES_MODE_ {
31 TUYA_HW_AES_MODE_ENCRYPT,
32 TUYA_HW_AES_MODE_DECRYPT,
36typedef enum TUYA_HW_AES_CRYPT_MODE_ {
37 TUYA_HW_AES_CRYPT_MODE_ECB,
38 TUYA_HW_AES_CRYPT_MODE_CBC,
39 TUYA_HW_AES_CRYPT_MODE_CFB,
40 TUYA_HW_AES_CRYPT_MODE_OFB,
41} TUYA_HW_AES_CRYPT_MODE_E;
45 TUYA_HW_AES_MODE_E method;
46 TUYA_HW_AES_CRYPT_MODE_E encryptMode;
52 int (*aes_destroy)(
void* phdl);
53 int (*aes_setkey_enc)(
void* phdl,
const unsigned char *key,
unsigned int keybits);
54 int (*aes_setkey_dec)(
void* phdl,
const unsigned char *key,
unsigned int keybits);
55 int (*aes_crypt_ecb)(
void* phdl,
const unsigned char* input,
size_t length,
unsigned char* output);
56 int (*aes_crypt_cbc)(
void* phdl,
const unsigned char* iv,
unsigned int ivbits,
const unsigned char *input,
size_t length,
unsigned char *output);
60typedef INT_T(*Tuya_CBC_AES128_Init)(VOID);
62typedef INT_T(*Tuya_CBC_AES128_Encrypt)(IN BYTE_T *pdata_in,
65 OUT UINT_T *pdata_out_len,
69typedef INT_T(*Tuya_CBC_AES128_Decrypt)(IN BYTE_T *pdata_in,
72 OUT UINT_T *pdata_out_len,
76typedef INT_T(*Tuya_CBC_AES128_Destroy)(VOID);
79 Tuya_CBC_AES128_Init init;
80 Tuya_CBC_AES128_Encrypt encrypt;
81 Tuya_CBC_AES128_Decrypt decrypt;
82 Tuya_CBC_AES128_Destroy destory;
94UINT_T aes_pkcs7padding_buffer(BYTE_T *p_buffer, UINT_T length);
113VOID aes_method_unregister(VOID);
127OPERATE_RET aes192_cbc_encode(IN CONST BYTE_T *data, IN CONST UINT_T len, \
128 IN CONST BYTE_T *key, IN BYTE_T *iv, \
129 OUT BYTE_T **ec_data, OUT UINT_T *ec_len);
143OPERATE_RET aes192_cbc_decode(IN CONST BYTE_T *data, IN CONST UINT_T len, \
144 IN CONST BYTE_T *key, IN BYTE_T *iv, \
145 OUT BYTE_T **dec_data, OUT UINT_T *dec_len);
158OPERATE_RET aes128_ecb_encode(IN CONST BYTE_T *data, IN CONST UINT_T len, \
159 OUT BYTE_T **ec_data, OUT UINT_T *ec_len, \
160 IN CONST BYTE_T *key);
173OPERATE_RET aes128_ecb_decode(IN CONST BYTE_T *data, IN CONST UINT_T len, \
174 OUT BYTE_T **dec_data, OUT UINT_T *dec_len, \
175 IN CONST BYTE_T *key);
189OPERATE_RET aes128_cbc_encode(IN CONST BYTE_T *data, IN CONST UINT_T len, \
190 IN CONST BYTE_T *key, IN BYTE_T *iv, \
191 OUT BYTE_T **ec_data, OUT UINT_T *ec_len);
205OPERATE_RET aes128_cbc_decode(IN CONST BYTE_T *data, IN CONST UINT_T len, \
206 IN CONST BYTE_T *key, IN BYTE_T *iv, \
207 OUT BYTE_T **dec_data, OUT UINT_T *dec_len);
216OPERATE_RET aes_free_data(IN BYTE_T *data);
226INT_T aes_get_actual_length(IN CONST BYTE_T *dec_data, IN CONST UINT_T dec_data_len);
239OPERATE_RET aes192_cbc_encode_raw(IN CONST BYTE_T *data, IN CONST UINT_T len, \
240 IN CONST BYTE_T *key, IN BYTE_T *iv, \
241 OUT BYTE_T *ec_data);
254OPERATE_RET aes192_cbc_decode_raw(IN CONST BYTE_T *data, IN CONST UINT_T len, \
255 IN CONST BYTE_T *key, IN BYTE_T *iv, \
256 OUT BYTE_T *dec_data);
269OPERATE_RET aes256_cbc_encode_raw(IN CONST BYTE_T *data, IN CONST UINT_T len, \
270 IN CONST BYTE_T *key, IN BYTE_T *iv, \
271 OUT BYTE_T *ec_data);
283OPERATE_RET aes128_ecb_encode_raw(IN CONST BYTE_T *data, IN CONST UINT_T len, \
284 OUT BYTE_T *ec_data, IN CONST BYTE_T *key);
296OPERATE_RET aes128_ecb_decode_raw(IN CONST BYTE_T *data, IN CONST UINT_T len, \
297 OUT BYTE_T *dec_data, IN CONST BYTE_T *key);
310OPERATE_RET aes128_cbc_encode_raw(IN CONST BYTE_T *data, IN CONST UINT_T len, \
311 IN CONST BYTE_T *key, IN BYTE_T *iv, \
312 OUT BYTE_T *ec_data);
325OPERATE_RET aes128_cbc_decode_raw(IN CONST BYTE_T *data, IN CONST UINT_T len, \
326 IN CONST BYTE_T *key, IN BYTE_T *iv, \
327 OUT BYTE_T *dec_data);
330#define aes128_free_data aes_free_data
331#define aes128_get_data_actual_length aes_get_actual_length
390int tuya_hw_aes_encrypt_cbc(
TUYA_HW_AES_HANDLE_S* paesHdl,
const unsigned char* iv,
unsigned int ivbits,
391 const unsigned char *input,
size_t length,
unsigned char *output,
size_t* poutlen);
Definition: aes_inf.h:334