Bouffalo SDK  1.0
Bouffalolab Software Development Kit
bflb_sec_aes.h
Go to the documentation of this file.
1 #ifndef _BFLB_SEC_AES_H
2 #define _BFLB_SEC_AES_H
3 
4 #include "bflb_core.h"
5 
17 #define AES_MODE_ECB 0
18 #define AES_MODE_CTR 1
19 #define AES_MODE_CBC 2
20 #define AES_MODE_XTS 3
21 
28 #define AES_LINK_KEY_128BITS 0
29 #define AES_LINK_KEY_192BITS 2
30 #define AES_LINK_KEY_256BITS 1
31 #define AES_LINK_KEY_DOUBLE_128BITS 3
32 
36 #define AES_LINK_XTS_MODE1 0
37 #define AES_LINK_XTS_MODE2 1
38 
40  uint32_t : 3;
41  uint32_t aes_key : 2;
42  uint32_t aes_dec_en : 1;
43  uint32_t aes_newkey_dis : 1;
44  uint32_t aes_hwkey_en : 1;
45  uint32_t : 1;
46  uint32_t aes_intclr : 1;
47  uint32_t aes_intset : 1;
48  uint32_t : 1;
49  uint32_t aes_mode : 2;
50  uint32_t aes_newiv_dis : 1;
51  uint32_t aes_xts : 1;
52  uint32_t aes_msglen : 16;
53  uint32_t aes_srcaddr;
54  uint32_t aes_dstaddr;
55  uint32_t aes_iv0;
56  uint32_t aes_iv1;
57  uint32_t aes_iv2;
58  uint32_t aes_iv3;
59  uint32_t aes_key0;
60  uint32_t aes_key1;
61  uint32_t aes_key2;
62  uint32_t aes_key3;
63  uint32_t aes_key4;
64  uint32_t aes_key5;
65  uint32_t aes_key6;
66  uint32_t aes_key7;
67 } __attribute__((aligned(4)));
68 
70  uint32_t : 3;
71  uint32_t aes_key : 2;
72  uint32_t aes_dec_en : 1;
73  uint32_t aes_newkey_dis : 1;
74  uint32_t aes_hwkey_en : 1;
75  uint32_t : 1;
76  uint32_t aes_intclr : 1;
77  uint32_t aes_intset : 1;
78  uint32_t : 1;
79  uint32_t aes_mode : 2;
80  uint32_t aes_newiv_dis : 1;
81  uint32_t aes_xts : 1;
82  uint32_t aes_msglen : 16;
83  uint32_t aes_srcaddr;
84  uint32_t aes_dstaddr;
85  uint32_t aes_iv0;
86  uint32_t aes_iv1;
87  uint32_t aes_iv2;
88  uint32_t aes_iv3;
89  uint32_t aes_key10;
90  uint32_t aes_key11;
91  uint32_t aes_key12;
92  uint32_t aes_key13;
93  uint32_t aes_key14;
94  uint32_t aes_key15;
95  uint32_t aes_key16;
96  uint32_t aes_key17;
97  uint32_t : 16;
98  uint32_t aes_unitlen : 16;
99  uint32_t aes_key20;
100  uint32_t aes_key21;
101  uint32_t aes_key22;
102  uint32_t aes_key23;
103  uint32_t aes_key24;
104  uint32_t aes_key25;
105  uint32_t aes_key26;
106  uint32_t aes_key27;
107 } __attribute__((aligned(4)));
108 
109 #ifdef __cplusplus
110 extern "C" {
111 #endif
112 
118 void bflb_aes_init(struct bflb_device_s *dev);
119 
125 void bflb_aes_deinit(struct bflb_device_s *dev);
126 
132 void bflb_aes_set_hwkey(uint8_t keysel);
133 
140 void bflb_aes_set_hwkey_source(struct bflb_device_s *dev, uint8_t source);
141 
148 void bflb_aes_set_mode(struct bflb_device_s *dev, uint8_t mode);
149 
157 void bflb_aes_setkey(struct bflb_device_s *dev, const uint8_t *key, uint16_t keybits);
158 
169 int bflb_aes_encrypt(struct bflb_device_s *dev,
170  const uint8_t *input,
171  const uint8_t *iv,
172  uint8_t *output,
173  uint32_t len);
174 
185 int bflb_aes_decrypt(struct bflb_device_s *dev,
186  const uint8_t *input,
187  const uint8_t *iv,
188  uint8_t *output,
189  uint32_t len);
190 
196 void bflb_aes_link_init(struct bflb_device_s *dev);
197 
203 void bflb_aes_link_deinit(struct bflb_device_s *dev);
204 
215 int bflb_aes_link_update(struct bflb_device_s *dev,
216  uint32_t link_addr,
217  const uint8_t *input,
218  uint8_t *output,
219  uint32_t len);
220 
227 
234 
235 #ifdef __cplusplus
236 }
237 #endif
238 
247 #endif
void bflb_group0_request_aes_access(struct bflb_device_s *dev)
Enable aes in group0.
void bflb_aes_init(struct bflb_device_s *dev)
Enable aes.
void bflb_aes_link_init(struct bflb_device_s *dev)
Enable aes link mode.
struct bflb_aes_link_s __attribute__((aligned(4)))
uint32_t aes_key13
Definition: bflb_sec_aes.h:84
uint32_t aes_key17
Definition: bflb_sec_aes.h:88
void bflb_aes_set_mode(struct bflb_device_s *dev, uint8_t mode)
Set aes mode.
uint32_t aes_key12
Definition: bflb_sec_aes.h:83
uint32_t aes_key15
Definition: bflb_sec_aes.h:86
void bflb_aes_link_deinit(struct bflb_device_s *dev)
Disable aes link mode.
int bflb_aes_decrypt(struct bflb_device_s *dev, const uint8_t *input, const uint8_t *iv, uint8_t *output, uint32_t len)
Perform aes decrypt.
int bflb_aes_encrypt(struct bflb_device_s *dev, const uint8_t *input, const uint8_t *iv, uint8_t *output, uint32_t len)
Perform aes encrypt.
void bflb_group0_release_aes_access(struct bflb_device_s *dev)
Disable aes in group0.
void bflb_aes_set_hwkey_source(struct bflb_device_s *dev, uint8_t source)
Set aes hardware key source.
uint32_t aes_key10
Definition: bflb_sec_aes.h:81
uint32_t aes_key16
Definition: bflb_sec_aes.h:87
uint32_t aes_unitlen
Definition: bflb_sec_aes.h:90
void bflb_aes_set_hwkey(uint8_t keysel)
Set aes hardware key.
uint32_t aes_key11
Definition: bflb_sec_aes.h:82
void bflb_aes_setkey(struct bflb_device_s *dev, const uint8_t *key, uint16_t keybits)
Set aes key.
int bflb_aes_link_update(struct bflb_device_s *dev, uint32_t link_addr, const uint8_t *input, uint8_t *output, uint32_t len)
Perform encrypt or decrypt with link mode.
void bflb_aes_deinit(struct bflb_device_s *dev)
Disable aes.
uint32_t aes_key14
Definition: bflb_sec_aes.h:85