STM32F4xx_HAL_Driver  1.8.3
stm32f4xx_hal_cryp.h
Go to the documentation of this file.
1 
19 /* Define to prevent recursive inclusion -------------------------------------*/
20 #ifndef __STM32F4xx_HAL_CRYP_H
21 #define __STM32F4xx_HAL_CRYP_H
22 
23 #ifdef __cplusplus
24 extern "C" {
25 #endif
26 
27 
28 /* Includes ------------------------------------------------------------------*/
29 #include "stm32f4xx_hal_def.h"
30 
34 #if defined (AES) || defined (CRYP)
39 /* Exported types ------------------------------------------------------------*/
40 
49 typedef struct
50 {
51  uint32_t DataType;
53  uint32_t KeySize;
55  uint32_t *pKey;
56  uint32_t *pInitVect;
58  uint32_t Algorithm;
61  uint32_t *Header;
64  uint32_t HeaderSize;
65  uint32_t *B0;
66  uint32_t DataWidthUnit;
67  uint32_t HeaderWidthUnit;
68  uint32_t KeyIVConfigSkip;
73 
74 
79 typedef enum
80 {
83  HAL_CRYP_STATE_BUSY = 0x02U
85 
86 
91 typedef struct __CRYP_HandleTypeDef
92 {
93 #if defined (CRYP)
94  CRYP_TypeDef *Instance;
95 #else /* AES*/
96  AES_TypeDef *Instance;
97 #endif /* End AES or CRYP */
98 
101  FunctionalState AutoKeyDerivation;
104  uint32_t *pCrypInBuffPtr;
106  uint32_t *pCrypOutBuffPtr;
108  __IO uint16_t CrypHeaderCount;
110  __IO uint16_t CrypInCount;
112  __IO uint16_t CrypOutCount;
114  uint16_t Size;
116  uint32_t Phase;
126  __IO uint32_t ErrorCode;
128  uint32_t KeyIVConfig;
131  uint32_t SizesSum;
135 #if (USE_HAL_CRYP_REGISTER_CALLBACKS == 1)
136  void (*InCpltCallback)(struct __CRYP_HandleTypeDef *hcryp);
137  void (*OutCpltCallback)(struct __CRYP_HandleTypeDef *hcryp);
138  void (*ErrorCallback)(struct __CRYP_HandleTypeDef *hcryp);
140  void (* MspInitCallback)(struct __CRYP_HandleTypeDef *hcryp);
141  void (* MspDeInitCallback)(struct __CRYP_HandleTypeDef *hcryp);
143 #endif /* (USE_HAL_CRYP_REGISTER_CALLBACKS) */
145 
146 
151 #if (USE_HAL_CRYP_REGISTER_CALLBACKS == 1)
156 typedef enum
157 {
163  HAL_CRYP_MSPDEINIT_CB_ID = 0x05U
175 typedef void (*pCRYP_CallbackTypeDef)(CRYP_HandleTypeDef *hcryp);
181 #endif /* USE_HAL_CRYP_REGISTER_CALLBACKS */
182 
183 /* Exported constants --------------------------------------------------------*/
191 #define HAL_CRYP_ERROR_NONE 0x00000000U
192 #define HAL_CRYP_ERROR_WRITE 0x00000001U
193 #define HAL_CRYP_ERROR_READ 0x00000002U
194 #define HAL_CRYP_ERROR_DMA 0x00000004U
195 #define HAL_CRYP_ERROR_BUSY 0x00000008U
196 #define HAL_CRYP_ERROR_TIMEOUT 0x00000010U
197 #define HAL_CRYP_ERROR_NOT_SUPPORTED 0x00000020U
198 #define HAL_CRYP_ERROR_AUTH_TAG_SEQUENCE 0x00000040U
199 #if (USE_HAL_CRYP_REGISTER_CALLBACKS == 1)
200 #define HAL_CRYP_ERROR_INVALID_CALLBACK ((uint32_t)0x00000080U)
201 #endif /* USE_HAL_CRYP_REGISTER_CALLBACKS */
210 #define CRYP_DATAWIDTHUNIT_WORD 0x00000000U
211 #define CRYP_DATAWIDTHUNIT_BYTE 0x00000001U
221 #define CRYP_HEADERWIDTHUNIT_WORD 0x00000000U
222 #define CRYP_HEADERWIDTHUNIT_BYTE 0x00000001U
231 #if defined(CRYP)
232 
233 #define CRYP_DES_ECB CRYP_CR_ALGOMODE_DES_ECB
234 #define CRYP_DES_CBC CRYP_CR_ALGOMODE_DES_CBC
235 #define CRYP_TDES_ECB CRYP_CR_ALGOMODE_TDES_ECB
236 #define CRYP_TDES_CBC CRYP_CR_ALGOMODE_TDES_CBC
237 #define CRYP_AES_ECB CRYP_CR_ALGOMODE_AES_ECB
238 #define CRYP_AES_CBC CRYP_CR_ALGOMODE_AES_CBC
239 #define CRYP_AES_CTR CRYP_CR_ALGOMODE_AES_CTR
240 #if defined (CRYP_CR_ALGOMODE_AES_GCM)
241 #define CRYP_AES_GCM CRYP_CR_ALGOMODE_AES_GCM
242 #define CRYP_AES_CCM CRYP_CR_ALGOMODE_AES_CCM
243 #endif /* GCM CCM defined*/
244 #else /* AES*/
245 #define CRYP_AES_ECB 0x00000000U
246 #define CRYP_AES_CBC AES_CR_CHMOD_0
247 #define CRYP_AES_CTR AES_CR_CHMOD_1
248 #define CRYP_AES_GCM_GMAC (AES_CR_CHMOD_0 | AES_CR_CHMOD_1)
249 #define CRYP_AES_CCM AES_CR_CHMOD_2
250 #endif /* End AES or CRYP */
251 
259 #if defined(CRYP)
260 #define CRYP_KEYSIZE_128B 0x00000000U
261 #define CRYP_KEYSIZE_192B CRYP_CR_KEYSIZE_0
262 #define CRYP_KEYSIZE_256B CRYP_CR_KEYSIZE_1
263 #else /* AES*/
264 #define CRYP_KEYSIZE_128B 0x00000000U
265 #define CRYP_KEYSIZE_256B AES_CR_KEYSIZE
266 #endif /* End AES or CRYP */
274 #if defined(CRYP)
275 #define CRYP_DATATYPE_32B 0x00000000U
276 #define CRYP_DATATYPE_16B CRYP_CR_DATATYPE_0
277 #define CRYP_DATATYPE_8B CRYP_CR_DATATYPE_1
278 #define CRYP_DATATYPE_1B CRYP_CR_DATATYPE
279 #else /* AES*/
280 #define CRYP_DATATYPE_32B 0x00000000U
281 #define CRYP_DATATYPE_16B AES_CR_DATATYPE_0
282 #define CRYP_DATATYPE_8B AES_CR_DATATYPE_1
283 #define CRYP_DATATYPE_1B AES_CR_DATATYPE
284 #endif /* End AES or CRYP */
285 
293 #if defined (CRYP)
294 #define CRYP_IT_INI CRYP_IMSCR_INIM
295 #define CRYP_IT_OUTI CRYP_IMSCR_OUTIM
296 #else /* AES*/
297 #define CRYP_IT_CCFIE AES_CR_CCFIE
298 #define CRYP_IT_ERRIE AES_CR_ERRIE
299 #define CRYP_IT_WRERR AES_SR_WRERR
300 #define CRYP_IT_RDERR AES_SR_RDERR
301 #define CRYP_IT_CCF AES_SR_CCF
302 #endif /* End AES or CRYP */
303 
311 #if defined (CRYP)
312 /* Flags in the SR register */
313 #define CRYP_FLAG_IFEM CRYP_SR_IFEM
314 #define CRYP_FLAG_IFNF CRYP_SR_IFNF
315 #define CRYP_FLAG_OFNE CRYP_SR_OFNE
316 #define CRYP_FLAG_OFFU CRYP_SR_OFFU
317 #define CRYP_FLAG_BUSY CRYP_SR_BUSY
319 /* Flags in the RISR register */
320 #define CRYP_FLAG_OUTRIS 0x01000002U
321 #define CRYP_FLAG_INRIS 0x01000001U
322 #else /* AES*/
323 /* status flags */
324 #define CRYP_FLAG_BUSY AES_SR_BUSY
325 #define CRYP_FLAG_WRERR AES_SR_WRERR
326 #define CRYP_FLAG_RDERR AES_SR_RDERR
327 #define CRYP_FLAG_CCF AES_SR_CCF
328 /* clearing flags */
329 #define CRYP_CCF_CLEAR AES_CR_CCFC
330 #define CRYP_ERR_CLEAR AES_CR_ERRC
331 #endif /* End AES or CRYP */
332 
341 #define CRYP_KEYIVCONFIG_ALWAYS 0x00000000U
342 #define CRYP_KEYIVCONFIG_ONCE 0x00000001U
353 /* Exported macros -----------------------------------------------------------*/
362 #if (USE_HAL_CRYP_REGISTER_CALLBACKS == 1)
363 #define __HAL_CRYP_RESET_HANDLE_STATE(__HANDLE__) do{\
364  (__HANDLE__)->State = HAL_CRYP_STATE_RESET;\
365  (__HANDLE__)->MspInitCallback = NULL;\
366  (__HANDLE__)->MspDeInitCallback = NULL;\
367  }while(0)
368 #else
369 #define __HAL_CRYP_RESET_HANDLE_STATE(__HANDLE__) ( (__HANDLE__)->State = HAL_CRYP_STATE_RESET)
370 #endif /* USE_HAL_CRYP_REGISTER_CALLBACKS */
371 
377 #if defined(CRYP)
378 #define __HAL_CRYP_ENABLE(__HANDLE__) ((__HANDLE__)->Instance->CR |= CRYP_CR_CRYPEN)
379 #define __HAL_CRYP_DISABLE(__HANDLE__) ((__HANDLE__)->Instance->CR &= ~CRYP_CR_CRYPEN)
380 #else /* AES*/
381 #define __HAL_CRYP_ENABLE(__HANDLE__) ((__HANDLE__)->Instance->CR |= AES_CR_EN)
382 #define __HAL_CRYP_DISABLE(__HANDLE__) ((__HANDLE__)->Instance->CR &= ~AES_CR_EN)
383 #endif /* End AES or CRYP */
384 
403 #define CRYP_FLAG_MASK 0x0000001FU
404 #if defined(CRYP)
405 #define __HAL_CRYP_GET_FLAG(__HANDLE__, __FLAG__) ((((uint8_t)((__FLAG__) >> 24)) == 0x01U)?((((__HANDLE__)->Instance->RISR) & ((__FLAG__) & CRYP_FLAG_MASK)) == ((__FLAG__) & CRYP_FLAG_MASK)): \
406  ((((__HANDLE__)->Instance->RISR) & ((__FLAG__) & CRYP_FLAG_MASK)) == ((__FLAG__) & CRYP_FLAG_MASK)))
407 #else /* AES*/
408 #define __HAL_CRYP_GET_FLAG(__HANDLE__, __FLAG__) (((__HANDLE__)->Instance->SR & (__FLAG__)) == (__FLAG__))
409 #endif /* End AES or CRYP */
410 
420 #if defined(AES)
421 #define __HAL_CRYP_CLEAR_FLAG(__HANDLE__, __FLAG__) SET_BIT((__HANDLE__)->Instance->CR, (__FLAG__))
422 
423 
433 #define __HAL_CRYP_GET_IT_SOURCE(__HANDLE__, __INTERRUPT__) (((__HANDLE__)->Instance->CR\
434  & (__INTERRUPT__)) == (__INTERRUPT__))
435 
436 #endif /* AES */
437 
450 #if defined(CRYP)
451 #define __HAL_CRYP_GET_IT(__HANDLE__, __INTERRUPT__) (((__HANDLE__)->Instance->MISR\
452  & (__INTERRUPT__)) == (__INTERRUPT__))
453 #else /* AES*/
454 #define __HAL_CRYP_GET_IT(__HANDLE__, __INTERRUPT__) (((__HANDLE__)->Instance->SR & (__INTERRUPT__)) == (__INTERRUPT__))
455 #endif /* End AES or CRYP */
456 
469 #if defined(CRYP)
470 #define __HAL_CRYP_ENABLE_IT(__HANDLE__, __INTERRUPT__) (((__HANDLE__)->Instance->IMSCR) |= (__INTERRUPT__))
471 #else /* AES*/
472 #define __HAL_CRYP_ENABLE_IT(__HANDLE__, __INTERRUPT__) (((__HANDLE__)->Instance->CR) |= (__INTERRUPT__))
473 #endif /* End AES or CRYP */
474 
487 #if defined(CRYP)
488 #define __HAL_CRYP_DISABLE_IT(__HANDLE__, __INTERRUPT__) (((__HANDLE__)->Instance->IMSCR) &= ~(__INTERRUPT__))
489 #else /* AES*/
490 #define __HAL_CRYP_DISABLE_IT(__HANDLE__, __INTERRUPT__) (((__HANDLE__)->Instance->CR) &= ~(__INTERRUPT__))
491 #endif /* End AES or CRYP */
492 
496 #if defined (CRYP_CR_ALGOMODE_AES_GCM)|| defined (AES)
497 /* Include CRYP HAL Extended module */
498 #include "stm32f4xx_hal_cryp_ex.h"
499 #endif /* AES or GCM CCM defined*/
500 /* Exported functions --------------------------------------------------------*/
508 HAL_StatusTypeDef HAL_CRYP_Init(CRYP_HandleTypeDef *hcryp);
509 HAL_StatusTypeDef HAL_CRYP_DeInit(CRYP_HandleTypeDef *hcryp);
512 HAL_StatusTypeDef HAL_CRYP_SetConfig(CRYP_HandleTypeDef *hcryp, CRYP_ConfigTypeDef *pConf);
513 HAL_StatusTypeDef HAL_CRYP_GetConfig(CRYP_HandleTypeDef *hcryp, CRYP_ConfigTypeDef *pConf);
514 #if (USE_HAL_CRYP_REGISTER_CALLBACKS == 1)
515 HAL_StatusTypeDef HAL_CRYP_RegisterCallback(CRYP_HandleTypeDef *hcryp, HAL_CRYP_CallbackIDTypeDef CallbackID,
516  pCRYP_CallbackTypeDef pCallback);
518 #endif /* USE_HAL_CRYP_REGISTER_CALLBACKS */
527 /* encryption/decryption ***********************************/
528 HAL_StatusTypeDef HAL_CRYP_Encrypt(CRYP_HandleTypeDef *hcryp, uint32_t *Input, uint16_t Size, uint32_t *Output,
529  uint32_t Timeout);
530 HAL_StatusTypeDef HAL_CRYP_Decrypt(CRYP_HandleTypeDef *hcryp, uint32_t *Input, uint16_t Size, uint32_t *Output,
531  uint32_t Timeout);
532 HAL_StatusTypeDef HAL_CRYP_Encrypt_IT(CRYP_HandleTypeDef *hcryp, uint32_t *Input, uint16_t Size, uint32_t *Output);
533 HAL_StatusTypeDef HAL_CRYP_Decrypt_IT(CRYP_HandleTypeDef *hcryp, uint32_t *Input, uint16_t Size, uint32_t *Output);
534 HAL_StatusTypeDef HAL_CRYP_Encrypt_DMA(CRYP_HandleTypeDef *hcryp, uint32_t *Input, uint16_t Size, uint32_t *Output);
535 HAL_StatusTypeDef HAL_CRYP_Decrypt_DMA(CRYP_HandleTypeDef *hcryp, uint32_t *Input, uint16_t Size, uint32_t *Output);
536 
545 /* Interrupt Handler functions **********************************************/
551 uint32_t HAL_CRYP_GetError(CRYP_HandleTypeDef *hcryp);
552 
561 /* Private macros --------------------------------------------------------*/
569 #if defined(CRYP)
570 #if defined (CRYP_CR_ALGOMODE_AES_GCM)
571 #define IS_CRYP_ALGORITHM(ALGORITHM) (((ALGORITHM) == CRYP_DES_ECB) || \
572  ((ALGORITHM) == CRYP_DES_CBC) || \
573  ((ALGORITHM) == CRYP_TDES_ECB) || \
574  ((ALGORITHM) == CRYP_TDES_CBC) || \
575  ((ALGORITHM) == CRYP_AES_ECB) || \
576  ((ALGORITHM) == CRYP_AES_CBC) || \
577  ((ALGORITHM) == CRYP_AES_CTR) || \
578  ((ALGORITHM) == CRYP_AES_GCM) || \
579  ((ALGORITHM) == CRYP_AES_CCM))
580 #else /*NO GCM CCM */
581 #define IS_CRYP_ALGORITHM(ALGORITHM) (((ALGORITHM) == CRYP_DES_ECB) || \
582  ((ALGORITHM) == CRYP_DES_CBC) || \
583  ((ALGORITHM) == CRYP_TDES_ECB) || \
584  ((ALGORITHM) == CRYP_TDES_CBC) || \
585  ((ALGORITHM) == CRYP_AES_ECB) || \
586  ((ALGORITHM) == CRYP_AES_CBC) || \
587  ((ALGORITHM) == CRYP_AES_CTR))
588 #endif /* GCM CCM defined*/
589 #define IS_CRYP_KEYSIZE(KEYSIZE)(((KEYSIZE) == CRYP_KEYSIZE_128B) || \
590  ((KEYSIZE) == CRYP_KEYSIZE_192B) || \
591  ((KEYSIZE) == CRYP_KEYSIZE_256B))
592 #else /* AES*/
593 #define IS_CRYP_ALGORITHM(ALGORITHM) (((ALGORITHM) == CRYP_AES_ECB) || \
594  ((ALGORITHM) == CRYP_AES_CBC) || \
595  ((ALGORITHM) == CRYP_AES_CTR) || \
596  ((ALGORITHM) == CRYP_AES_GCM_GMAC)|| \
597  ((ALGORITHM) == CRYP_AES_CCM))
598 
599 
600 #define IS_CRYP_KEYSIZE(KEYSIZE)(((KEYSIZE) == CRYP_KEYSIZE_128B) || \
601  ((KEYSIZE) == CRYP_KEYSIZE_256B))
602 #endif /* End AES or CRYP */
603 
604 #define IS_CRYP_DATATYPE(DATATYPE)(((DATATYPE) == CRYP_DATATYPE_32B) || \
605  ((DATATYPE) == CRYP_DATATYPE_16B) || \
606  ((DATATYPE) == CRYP_DATATYPE_8B) || \
607  ((DATATYPE) == CRYP_DATATYPE_1B))
608 
609 #define IS_CRYP_INIT(CONFIG)(((CONFIG) == CRYP_KEYIVCONFIG_ALWAYS) || \
610  ((CONFIG) == CRYP_KEYIVCONFIG_ONCE))
620 /* Private constants ---------------------------------------------------------*/
628 /* Private defines -----------------------------------------------------------*/
637 /* Private variables ---------------------------------------------------------*/
645 /* Private functions prototypes ----------------------------------------------*/
654 /* Private functions ---------------------------------------------------------*/
672 #endif /* TinyAES or CRYP*/
673 
678 #ifdef __cplusplus
679 }
680 #endif
681 
682 #endif /* __STM32F4xx_HAL_CRYP_H */
683 
void HAL_CRYP_MspDeInit(CRYP_HandleTypeDef *hcryp)
DeInitializes CRYP MSP.
void HAL_CRYP_MspInit(CRYP_HandleTypeDef *hcryp)
Initializes the CRYP MSP.
HAL_StatusTypeDef HAL_CRYP_GetConfig(CRYP_HandleTypeDef *hcryp, CRYP_ConfigTypeDef *pConf)
Get CRYP Configuration parameters in associated handle.
HAL_StatusTypeDef HAL_CRYP_RegisterCallback(CRYP_HandleTypeDef *hcryp, HAL_CRYP_CallbackIDTypeDef CallbackID, pCRYP_CallbackTypeDef pCallback)
Register a User CRYP Callback To be used instead of the weak predefined callback.
HAL_StatusTypeDef HAL_CRYP_DeInit(CRYP_HandleTypeDef *hcryp)
De-Initializes the CRYP peripheral.
HAL_StatusTypeDef HAL_CRYP_SetConfig(CRYP_HandleTypeDef *hcryp, CRYP_ConfigTypeDef *pConf)
Configure the CRYP according to the specified parameters in the CRYP_ConfigTypeDef.
HAL_StatusTypeDef HAL_CRYP_Init(CRYP_HandleTypeDef *hcryp)
Initializes the CRYP according to the specified parameters in the CRYP_ConfigTypeDef and creates the ...
HAL_StatusTypeDef HAL_CRYP_UnRegisterCallback(CRYP_HandleTypeDef *hcryp, HAL_CRYP_CallbackIDTypeDef CallbackID)
Unregister an CRYP Callback CRYP callback is redirected to the weak predefined callback.
HAL_StatusTypeDef HAL_CRYP_Encrypt_IT(CRYP_HandleTypeDef *hcryp, uint32_t *Input, uint16_t Size, uint32_t *Output)
Encryption in interrupt mode.
HAL_StatusTypeDef HAL_CRYP_Decrypt_IT(CRYP_HandleTypeDef *hcryp, uint32_t *Input, uint16_t Size, uint32_t *Output)
Decryption in itnterrupt mode.
HAL_StatusTypeDef HAL_CRYP_Decrypt_DMA(CRYP_HandleTypeDef *hcryp, uint32_t *Input, uint16_t Size, uint32_t *Output)
Decryption in DMA mode.
HAL_StatusTypeDef HAL_CRYP_Encrypt(CRYP_HandleTypeDef *hcryp, uint32_t *Input, uint16_t Size, uint32_t *Output, uint32_t Timeout)
Encryption mode.
HAL_StatusTypeDef HAL_CRYP_Decrypt(CRYP_HandleTypeDef *hcryp, uint32_t *Input, uint16_t Size, uint32_t *Output, uint32_t Timeout)
Decryption mode.
HAL_StatusTypeDef HAL_CRYP_Encrypt_DMA(CRYP_HandleTypeDef *hcryp, uint32_t *Input, uint16_t Size, uint32_t *Output)
Encryption in DMA mode.
uint32_t HAL_CRYP_GetError(CRYP_HandleTypeDef *hcryp)
Return the CRYP error code.
void HAL_CRYP_InCpltCallback(CRYP_HandleTypeDef *hcryp)
Input FIFO transfer completed callback.
void HAL_CRYP_IRQHandler(CRYP_HandleTypeDef *hcryp)
This function handles cryptographic interrupt request.
void HAL_CRYP_ErrorCallback(CRYP_HandleTypeDef *hcryp)
CRYP error callback.
HAL_CRYP_STATETypeDef HAL_CRYP_GetState(CRYP_HandleTypeDef *hcryp)
Returns the CRYP state.
void HAL_CRYP_OutCpltCallback(CRYP_HandleTypeDef *hcryp)
Output FIFO transfer completed callback.
__IO HAL_CRYP_STATETypeDef State
void(* ErrorCallback)(struct __CRYP_HandleTypeDef *hcryp)
CRYP_ConfigTypeDef Init
void(* InCpltCallback)(struct __CRYP_HandleTypeDef *hcryp)
void(* OutCpltCallback)(struct __CRYP_HandleTypeDef *hcryp)
FunctionalState AutoKeyDerivation
__IO uint16_t CrypHeaderCount
DMA_HandleTypeDef * hdmaout
void(* MspInitCallback)(struct __CRYP_HandleTypeDef *hcryp)
DMA_HandleTypeDef * hdmain
void(* MspDeInitCallback)(struct __CRYP_HandleTypeDef *hcryp)
HAL_CRYP_STATETypeDef
CRYP State Structure definition.
struct __CRYP_HandleTypeDef CRYP_HandleTypeDef
CRYP handle Structure definition.
@ HAL_CRYP_STATE_READY
@ HAL_CRYP_STATE_RESET
@ HAL_CRYP_STATE_BUSY
CRYP Init Structure definition.
CRYP handle Structure definition.
HAL_CRYP_CallbackIDTypeDef
@ HAL_CRYP_MSPINIT_CB_ID
@ HAL_CRYP_MSPDEINIT_CB_ID
@ HAL_CRYP_INPUT_COMPLETE_CB_ID
@ HAL_CRYP_ERROR_CB_ID
@ HAL_CRYP_OUTPUT_COMPLETE_CB_ID
void(* pCRYP_CallbackTypeDef)(CRYP_HandleTypeDef *hcryp)
Header file of CRYP HAL Extension module.
This file contains HAL common defines, enumeration, macros and structures definitions.
HAL_LockTypeDef
HAL Lock structures definition
DMA handle Structure definition.