STM32F4xx HAL Documentation
Hardware Abstraction Layer for STM32F4 familiy
Loading...
Searching...
No Matches
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
24extern "C" {
25#endif
26
27
28/* Includes ------------------------------------------------------------------*/
29#include "stm32f4xx_hal_def.h"
30
34#if defined (AES) || defined (CRYP)
39/* Exported types ------------------------------------------------------------*/
40
49typedef 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
85
86
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)
156typedef enum
157{
158 HAL_CRYP_INPUT_COMPLETE_CB_ID = 0x01U,
159 HAL_CRYP_OUTPUT_COMPLETE_CB_ID = 0x02U,
160 HAL_CRYP_ERROR_CB_ID = 0x03U,
162 HAL_CRYP_MSPINIT_CB_ID = 0x04U,
163 HAL_CRYP_MSPDEINIT_CB_ID = 0x05U
165} HAL_CRYP_CallbackIDTypeDef;
175typedef 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 */
499#endif /* AES or GCM CCM defined*/
500/* Exported functions --------------------------------------------------------*/
514#if (USE_HAL_CRYP_REGISTER_CALLBACKS == 1)
515HAL_StatusTypeDef HAL_CRYP_RegisterCallback(CRYP_HandleTypeDef *hcryp, HAL_CRYP_CallbackIDTypeDef CallbackID,
516 pCRYP_CallbackTypeDef pCallback);
517HAL_StatusTypeDef HAL_CRYP_UnRegisterCallback(CRYP_HandleTypeDef *hcryp, HAL_CRYP_CallbackIDTypeDef CallbackID);
518#endif /* USE_HAL_CRYP_REGISTER_CALLBACKS */
527/* encryption/decryption ***********************************/
528HAL_StatusTypeDef HAL_CRYP_Encrypt(CRYP_HandleTypeDef *hcryp, uint32_t *Input, uint16_t Size, uint32_t *Output,
529 uint32_t Timeout);
530HAL_StatusTypeDef HAL_CRYP_Decrypt(CRYP_HandleTypeDef *hcryp, uint32_t *Input, uint16_t Size, uint32_t *Output,
531 uint32_t Timeout);
532HAL_StatusTypeDef HAL_CRYP_Encrypt_IT(CRYP_HandleTypeDef *hcryp, uint32_t *Input, uint16_t Size, uint32_t *Output);
533HAL_StatusTypeDef HAL_CRYP_Decrypt_IT(CRYP_HandleTypeDef *hcryp, uint32_t *Input, uint16_t Size, uint32_t *Output);
534HAL_StatusTypeDef HAL_CRYP_Encrypt_DMA(CRYP_HandleTypeDef *hcryp, uint32_t *Input, uint16_t Size, uint32_t *Output);
535HAL_StatusTypeDef HAL_CRYP_Decrypt_DMA(CRYP_HandleTypeDef *hcryp, uint32_t *Input, uint16_t Size, uint32_t *Output);
536
545/* Interrupt Handler functions **********************************************/
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_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_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.
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
Header file of CRYP HAL Extension module.
This file contains HAL common defines, enumeration, macros and structures definitions.
HAL_StatusTypeDef
HAL Status structures definition
HAL_LockTypeDef
HAL Lock structures definition
CRYP Init Structure definition.
CRYP handle Structure definition.
__IO HAL_CRYP_STATETypeDef State
CRYP_ConfigTypeDef Init
FunctionalState AutoKeyDerivation
DMA_HandleTypeDef * hdmaout
DMA_HandleTypeDef * hdmain
DMA handle Structure definition.