TuyaOS
aes_inf.h
1/*
2aes_inf.h
3Copyright(C),2018-2020, 涂鸦科技 www.tuya.comm
4*/
5#ifndef _AES_INF_H
6#define _AES_INF_H
7
8#include "tuya_cloud_types.h"
9
10#ifdef __cplusplus
11extern "C" {
12#endif
13
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);
16
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);
19
20typedef struct {
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;
26
27#define AES128_ENCRYPT_KEY_LEN 16
28
29
30typedef enum TUYA_HW_AES_MODE_ {
31 TUYA_HW_AES_MODE_ENCRYPT,
32 TUYA_HW_AES_MODE_DECRYPT,
33} TUYA_HW_AES_MODE_E;
34
35
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;
42
43
44typedef struct TUYA_HW_AES_PARAM_ {
45 TUYA_HW_AES_MODE_E method;
46 TUYA_HW_AES_CRYPT_MODE_E encryptMode;
48
49
50typedef struct TUYA_HW_AES_ {
51 int (*aes_create)(void** pphdl, TUYA_HW_AES_PARAM_S* pparam);
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);
58
59
60typedef INT_T(*Tuya_CBC_AES128_Init)(VOID);
61
62typedef INT_T(*Tuya_CBC_AES128_Encrypt)(IN BYTE_T *pdata_in, //data to be encrypted, should NOT be changed
63 IN UINT_T data_len, //date length to be encrypted
64 IN BYTE_T *pdata_out, //data after encrytion, memory is MALLOC inside tuya SDK already
65 OUT UINT_T *pdata_out_len, //data length after encrytion
66 IN BYTE_T *pkey, //aes key
67 IN BYTE_T *piv); //aes iv for cbc mode
68
69typedef INT_T(*Tuya_CBC_AES128_Decrypt)(IN BYTE_T *pdata_in, //date to be decryted, should NOT be changed
70 IN UINT_T data_len, //data length after decryption
71 IN BYTE_T *pdata_out, //data after decryption, memory is MALLOC inside tuya SDK already
72 OUT UINT_T *pdata_out_len, //data length after decrytion
73 IN BYTE_T *pkey, //aes key
74 IN BYTE_T *piv); //aes iv for cbc mode
75
76typedef INT_T(*Tuya_CBC_AES128_Destroy)(VOID);
77
78typedef struct {
79 Tuya_CBC_AES128_Init init;
80 Tuya_CBC_AES128_Encrypt encrypt;
81 Tuya_CBC_AES128_Decrypt decrypt;
82 Tuya_CBC_AES128_Destroy destory;
84
85
94UINT_T aes_pkcs7padding_buffer(BYTE_T *p_buffer, UINT_T length);
95
104OPERATE_RET aes_method_register(IN CONST AES_METHOD_REG_S *aes, IN CONST TUYA_HW_AES_S* pafunc);
105
113VOID aes_method_unregister(VOID);
114
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);
130
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);
146
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);
161
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);
176
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);
192
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);
208
216OPERATE_RET aes_free_data(IN BYTE_T *data);
217
226INT_T aes_get_actual_length(IN CONST BYTE_T *dec_data, IN CONST UINT_T dec_data_len);
227
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);
242
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);
257
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);
272
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);
285
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);
298
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);
313
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);
328
329
330#define aes128_free_data aes_free_data
331#define aes128_get_data_actual_length aes_get_actual_length
332
333
334typedef struct TUYA_HW_AES_HANDLE_ {
335 int init;
336 TUYA_HW_AES_S aesFunc;
337 void* phwHdl;
339
340
346void aes_method_get_callback_func(TUYA_HW_AES_S* paes);
347
356int tuya_hw_aes_crypt_init(TUYA_HW_AES_HANDLE_S* paesHdl, char* pkey);
357
365int tuya_hw_aes_crypt_uninit(TUYA_HW_AES_HANDLE_S* paesHdl);
366
375int tuya_hw_aes_update_key(TUYA_HW_AES_HANDLE_S* paesHdl, char* pkey);
376
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);
392
393
394#ifdef __cplusplus
395}
396#endif
397#endif
398
Definition: aes_inf.h:78
Definition: aes_inf.h:20
Definition: aes_inf.h:334
Definition: aes_inf.h:44
Definition: aes_inf.h:50