EFM32 Pearl Gecko 12 Software Documentation  efm32pg12-doc-5.1.2
em_aes.h
Go to the documentation of this file.
1 /***************************************************************************/
33 #ifndef EM_AES_H
34 #define EM_AES_H
35 
36 #include "em_device.h"
37 #if defined(AES_COUNT) && (AES_COUNT > 0)
38 
39 #include <stdbool.h>
40 
41 #ifdef __cplusplus
42 extern "C" {
43 #endif
44 
45 /***************************************************************************/
50 /***************************************************************************/
105 /*******************************************************************************
106  ****************************** TYPEDEFS ***********************************
107  ******************************************************************************/
108 
116 typedef void (*AES_CtrFuncPtr_TypeDef)(uint8_t *ctr);
117 
118 /*******************************************************************************
119  ***************************** PROTOTYPES **********************************
120  ******************************************************************************/
121 
122 void AES_CBC128(uint8_t *out,
123  const uint8_t *in,
124  unsigned int len,
125  const uint8_t *key,
126  const uint8_t *iv,
127  bool encrypt);
128 
129 #if defined( AES_CTRL_AES256 )
130 void AES_CBC256(uint8_t *out,
131  const uint8_t *in,
132  unsigned int len,
133  const uint8_t *key,
134  const uint8_t *iv,
135  bool encrypt);
136 #endif
137 
138 void AES_CFB128(uint8_t *out,
139  const uint8_t *in,
140  unsigned int len,
141  const uint8_t *key,
142  const uint8_t *iv,
143  bool encrypt);
144 
145 #if defined( AES_CTRL_AES256 )
146 void AES_CFB256(uint8_t *out,
147  const uint8_t *in,
148  unsigned int len,
149  const uint8_t *key,
150  const uint8_t *iv,
151  bool encrypt);
152 #endif
153 
154 void AES_CTR128(uint8_t *out,
155  const uint8_t *in,
156  unsigned int len,
157  const uint8_t *key,
158  uint8_t *ctr,
159  AES_CtrFuncPtr_TypeDef ctrFunc);
160 
161 #if defined( AES_CTRL_AES256 )
162 void AES_CTR256(uint8_t *out,
163  const uint8_t *in,
164  unsigned int len,
165  const uint8_t *key,
166  uint8_t *ctr,
167  AES_CtrFuncPtr_TypeDef ctrFunc);
168 #endif
169 
170 void AES_CTRUpdate32Bit(uint8_t *ctr);
171 
172 void AES_DecryptKey128(uint8_t *out, const uint8_t *in);
173 
174 #if defined( AES_CTRL_AES256 )
175 void AES_DecryptKey256(uint8_t *out, const uint8_t *in);
176 #endif
177 
178 void AES_ECB128(uint8_t *out,
179  const uint8_t *in,
180  unsigned int len,
181  const uint8_t *key,
182  bool encrypt);
183 
184 #if defined( AES_CTRL_AES256 )
185 void AES_ECB256(uint8_t *out,
186  const uint8_t *in,
187  unsigned int len,
188  const uint8_t *key,
189  bool encrypt);
190 #endif
191 
192 /***************************************************************************/
200 __STATIC_INLINE void AES_IntClear(uint32_t flags)
201 {
202  AES->IFC = flags;
203 }
204 
205 
206 /***************************************************************************/
214 __STATIC_INLINE void AES_IntDisable(uint32_t flags)
215 {
216  AES->IEN &= ~(flags);
217 }
218 
219 
220 /***************************************************************************/
233 __STATIC_INLINE void AES_IntEnable(uint32_t flags)
234 {
235  AES->IEN |= flags;
236 }
237 
238 
239 /***************************************************************************/
250 __STATIC_INLINE uint32_t AES_IntGet(void)
251 {
252  return AES->IF;
253 }
254 
255 
256 /***************************************************************************/
270 __STATIC_INLINE uint32_t AES_IntGetEnabled(void)
271 {
272  uint32_t ien;
273 
274  ien = AES->IEN;
275  return AES->IF & ien;
276 }
277 
278 
279 /***************************************************************************/
287 __STATIC_INLINE void AES_IntSet(uint32_t flags)
288 {
289  AES->IFS = flags;
290 }
291 
292 
293 void AES_OFB128(uint8_t *out,
294  const uint8_t *in,
295  unsigned int len,
296  const uint8_t *key,
297  const uint8_t *iv);
298 
299 #if defined( AES_CTRL_AES256 )
300 void AES_OFB256(uint8_t *out,
301  const uint8_t *in,
302  unsigned int len,
303  const uint8_t *key,
304  const uint8_t *iv);
305 #endif
306 
307 
311 #ifdef __cplusplus
312 }
313 #endif
314 
315 #endif /* defined(AES_COUNT) && (AES_COUNT > 0) */
316 #endif /* EM_AES_H */
317 
318 
__STATIC_INLINE void AES_CTR256(uint8_t *out, const uint8_t *in, unsigned int len, const uint8_t *key, uint8_t *ctr, CRYPTO_AES_CtrFuncPtr_TypeDef ctrFunc)
AES Counter (CTR) cipher mode encryption/decryption, 256 bit key.
Definition: em_crypto.h:1429
CMSIS Cortex-M Peripheral Access Layer for Silicon Laboratories microcontroller devices.
__STATIC_INLINE void AES_ECB128(uint8_t *out, const uint8_t *in, unsigned int len, const uint8_t *key, bool encrypt)
AES Electronic Codebook (ECB) cipher mode encryption/decryption, 128 bit key.
Definition: em_crypto.h:1489
__STATIC_INLINE void AES_CFB256(uint8_t *out, const uint8_t *in, unsigned int len, const uint8_t *key, const uint8_t *iv, bool encrypt)
AES Cipher feedback (CFB) cipher mode encryption/decryption, 256 bit key.
Definition: em_crypto.h:1393
__STATIC_INLINE void AES_CFB128(uint8_t *out, const uint8_t *in, unsigned int len, const uint8_t *key, const uint8_t *iv, bool encrypt)
AES Cipher feedback (CFB) cipher mode encryption/decryption, 128 bit key.
Definition: em_crypto.h:1375
__STATIC_INLINE void AES_CBC128(uint8_t *out, const uint8_t *in, unsigned int len, const uint8_t *key, const uint8_t *iv, bool encrypt)
AES Cipher-block chaining (CBC) cipher mode encryption/decryption, 128 bit key.
Definition: em_crypto.h:1338
__STATIC_INLINE void AES_OFB256(uint8_t *out, const uint8_t *in, unsigned int len, const uint8_t *key, const uint8_t *iv)
AES Output feedback (OFB) cipher mode encryption/decryption, 256 bit key.
Definition: em_crypto.h:1541
__STATIC_INLINE void AES_OFB128(uint8_t *out, const uint8_t *in, unsigned int len, const uint8_t *key, const uint8_t *iv)
AES Output feedback (OFB) cipher mode encryption/decryption, 128 bit key.
Definition: em_crypto.h:1524
__STATIC_INLINE void AES_CTRUpdate32Bit(uint8_t *ctr)
Update last 32 bits of 128 bit counter, by incrementing with 1.
Definition: em_crypto.h:1447
__STATIC_INLINE void AES_ECB256(uint8_t *out, const uint8_t *in, unsigned int len, const uint8_t *key, bool encrypt)
AES Electronic Codebook (ECB) cipher mode encryption/decryption, 256 bit key.
Definition: em_crypto.h:1507
__STATIC_INLINE void AES_DecryptKey128(uint8_t *out, const uint8_t *in)
Generate 128 bit AES decryption key from 128 bit encryption key. The decryption key is used for some ...
Definition: em_crypto.h:1461
__STATIC_INLINE void AES_DecryptKey256(uint8_t *out, const uint8_t *in)
Generate 256 bit AES decryption key from 256 bit encryption key. The decryption key is used for some ...
Definition: em_crypto.h:1475
__STATIC_INLINE void AES_CTR128(uint8_t *out, const uint8_t *in, unsigned int len, const uint8_t *key, uint8_t *ctr, CRYPTO_AES_CtrFuncPtr_TypeDef ctrFunc)
AES Counter (CTR) cipher mode encryption/decryption, 128 bit key.
Definition: em_crypto.h:1411
__STATIC_INLINE void AES_CBC256(uint8_t *out, const uint8_t *in, unsigned int len, const uint8_t *key, const uint8_t *iv, bool encrypt)
AES Cipher-block chaining (CBC) cipher mode encryption/decryption, 256 bit key.
Definition: em_crypto.h:1357