STM32F4xx HAL Driver master
STM32CubeF4 HAL / LL Drivers API Reference
Loading...
Searching...
No Matches
stm32f4xx_hal_cryp.h
Go to the documentation of this file.
1
18
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)
38
39/* Exported types ------------------------------------------------------------*/
40
44
48
49typedef struct
50{
51 uint32_t DataType;
53 uint32_t KeySize;
56 uint32_t *pKey;
57 uint32_t *pInitVect;
59 uint32_t Algorithm;
62 uint32_t *Header;
65 uint32_t HeaderSize;
66 uint32_t *B0;
67 uint32_t DataWidthUnit;
68 uint32_t HeaderWidthUnit;
69 uint32_t KeyIVConfigSkip;
72
73} CRYP_ConfigTypeDef;
74
75
79
80typedef enum
81{
82 HAL_CRYP_STATE_RESET = 0x00U,
83 HAL_CRYP_STATE_READY = 0x01U,
84 HAL_CRYP_STATE_BUSY = 0x02U
85} HAL_CRYP_STATETypeDef;
86
87
91
92typedef struct __CRYP_HandleTypeDef
93{
94#if defined (CRYP)
95 CRYP_TypeDef *Instance;
96#else /* AES*/
97 AES_TypeDef *Instance;
98#endif /* End AES or CRYP */
99
100 CRYP_ConfigTypeDef Init;
101
102 FunctionalState AutoKeyDerivation;
104
105 uint32_t *pCrypInBuffPtr;
106
107 uint32_t *pCrypOutBuffPtr;
108
109 __IO uint16_t CrypHeaderCount;
110
111 __IO uint16_t CrypInCount;
112
113 __IO uint16_t CrypOutCount;
114
115 uint16_t Size;
116
117 uint32_t Phase;
118
119 DMA_HandleTypeDef *hdmain;
120
121 DMA_HandleTypeDef *hdmaout;
122
123 HAL_LockTypeDef Lock;
124
125 __IO HAL_CRYP_STATETypeDef State;
126
127 __IO uint32_t ErrorCode;
128
129 uint32_t KeyIVConfig;
131
132 uint32_t SizesSum;
135
136#if (USE_HAL_CRYP_REGISTER_CALLBACKS == 1)
137 void (*InCpltCallback)(struct __CRYP_HandleTypeDef *hcryp);
138 void (*OutCpltCallback)(struct __CRYP_HandleTypeDef *hcryp);
139 void (*ErrorCallback)(struct __CRYP_HandleTypeDef *hcryp);
140
141 void (* MspInitCallback)(struct __CRYP_HandleTypeDef *hcryp);
142 void (* MspDeInitCallback)(struct __CRYP_HandleTypeDef *hcryp);
143
144#endif /* (USE_HAL_CRYP_REGISTER_CALLBACKS) */
145} CRYP_HandleTypeDef;
146
147
151
152#if (USE_HAL_CRYP_REGISTER_CALLBACKS == 1)
157typedef enum
158{
159 HAL_CRYP_INPUT_COMPLETE_CB_ID = 0x01U,
160 HAL_CRYP_OUTPUT_COMPLETE_CB_ID = 0x02U,
161 HAL_CRYP_ERROR_CB_ID = 0x03U,
162
163 HAL_CRYP_MSPINIT_CB_ID = 0x04U,
164 HAL_CRYP_MSPDEINIT_CB_ID = 0x05U
165
166} HAL_CRYP_CallbackIDTypeDef;
170
175
176typedef void (*pCRYP_CallbackTypeDef)(CRYP_HandleTypeDef *hcryp);
177
181
182#endif /* USE_HAL_CRYP_REGISTER_CALLBACKS */
183
184/* Exported constants --------------------------------------------------------*/
188
192#define HAL_CRYP_ERROR_NONE 0x00000000U
193#define HAL_CRYP_ERROR_WRITE 0x00000001U
194#define HAL_CRYP_ERROR_READ 0x00000002U
195#define HAL_CRYP_ERROR_DMA 0x00000004U
196#define HAL_CRYP_ERROR_BUSY 0x00000008U
197#define HAL_CRYP_ERROR_TIMEOUT 0x00000010U
198#define HAL_CRYP_ERROR_NOT_SUPPORTED 0x00000020U
199#define HAL_CRYP_ERROR_AUTH_TAG_SEQUENCE 0x00000040U
200#if (USE_HAL_CRYP_REGISTER_CALLBACKS == 1)
201#define HAL_CRYP_ERROR_INVALID_CALLBACK ((uint32_t)0x00000080U)
202#endif /* USE_HAL_CRYP_REGISTER_CALLBACKS */
206
210
211#define CRYP_DATAWIDTHUNIT_WORD 0x00000000U
212#define CRYP_DATAWIDTHUNIT_BYTE 0x00000001U
213
217
221
222#define CRYP_HEADERWIDTHUNIT_WORD 0x00000000U
223#define CRYP_HEADERWIDTHUNIT_BYTE 0x00000001U
224
228
232#if defined(CRYP)
233
234#define CRYP_DES_ECB CRYP_CR_ALGOMODE_DES_ECB
235#define CRYP_DES_CBC CRYP_CR_ALGOMODE_DES_CBC
236#define CRYP_TDES_ECB CRYP_CR_ALGOMODE_TDES_ECB
237#define CRYP_TDES_CBC CRYP_CR_ALGOMODE_TDES_CBC
238#define CRYP_AES_ECB CRYP_CR_ALGOMODE_AES_ECB
239#define CRYP_AES_CBC CRYP_CR_ALGOMODE_AES_CBC
240#define CRYP_AES_CTR CRYP_CR_ALGOMODE_AES_CTR
241#if defined (CRYP_CR_ALGOMODE_AES_GCM)
242#define CRYP_AES_GCM CRYP_CR_ALGOMODE_AES_GCM
243#define CRYP_AES_CCM CRYP_CR_ALGOMODE_AES_CCM
244#endif /* GCM CCM defined*/
245#else /* AES*/
246#define CRYP_AES_ECB 0x00000000U
247#define CRYP_AES_CBC AES_CR_CHMOD_0
248#define CRYP_AES_CTR AES_CR_CHMOD_1
249#define CRYP_AES_GCM_GMAC (AES_CR_CHMOD_0 | AES_CR_CHMOD_1)
250#define CRYP_AES_CCM AES_CR_CHMOD_2
251#endif /* End AES or CRYP */
252
256
260#if defined(CRYP)
261#define CRYP_KEYSIZE_128B 0x00000000U
262#define CRYP_KEYSIZE_192B CRYP_CR_KEYSIZE_0
263#define CRYP_KEYSIZE_256B CRYP_CR_KEYSIZE_1
264#else /* AES*/
265#define CRYP_KEYSIZE_128B 0x00000000U
266#define CRYP_KEYSIZE_256B AES_CR_KEYSIZE
267#endif /* End AES or CRYP */
271
275#if defined(CRYP)
276#define CRYP_DATATYPE_32B 0x00000000U
277#define CRYP_DATATYPE_16B CRYP_CR_DATATYPE_0
278#define CRYP_DATATYPE_8B CRYP_CR_DATATYPE_1
279#define CRYP_DATATYPE_1B CRYP_CR_DATATYPE
280#else /* AES*/
281#define CRYP_DATATYPE_32B 0x00000000U
282#define CRYP_DATATYPE_16B AES_CR_DATATYPE_0
283#define CRYP_DATATYPE_8B AES_CR_DATATYPE_1
284#define CRYP_DATATYPE_1B AES_CR_DATATYPE
285#endif /* End AES or CRYP */
286
290
294#if defined (CRYP)
295#define CRYP_IT_INI CRYP_IMSCR_INIM
296#define CRYP_IT_OUTI CRYP_IMSCR_OUTIM
297#else /* AES*/
298#define CRYP_IT_CCFIE AES_CR_CCFIE
299#define CRYP_IT_ERRIE AES_CR_ERRIE
300#define CRYP_IT_WRERR AES_SR_WRERR
301#define CRYP_IT_RDERR AES_SR_RDERR
302#define CRYP_IT_CCF AES_SR_CCF
303#endif /* End AES or CRYP */
304
308
312#if defined (CRYP)
313/* Flags in the SR register */
314#define CRYP_FLAG_IFEM CRYP_SR_IFEM
315#define CRYP_FLAG_IFNF CRYP_SR_IFNF
316#define CRYP_FLAG_OFNE CRYP_SR_OFNE
317#define CRYP_FLAG_OFFU CRYP_SR_OFFU
318#define CRYP_FLAG_BUSY CRYP_SR_BUSY
320/* Flags in the RISR register */
321#define CRYP_FLAG_OUTRIS 0x01000002U
322#define CRYP_FLAG_INRIS 0x01000001U
323#else /* AES*/
324/* status flags */
325#define CRYP_FLAG_BUSY AES_SR_BUSY
326#define CRYP_FLAG_WRERR AES_SR_WRERR
327#define CRYP_FLAG_RDERR AES_SR_RDERR
328#define CRYP_FLAG_CCF AES_SR_CCF
329/* clearing flags */
330#define CRYP_CCF_CLEAR AES_CR_CCFC
331#define CRYP_ERR_CLEAR AES_CR_ERRC
332#endif /* End AES or CRYP */
333
337
341
342#define CRYP_KEYIVCONFIG_ALWAYS 0x00000000U
343#define CRYP_KEYIVCONFIG_ONCE 0x00000001U
344
348
349
353
354/* Exported macros -----------------------------------------------------------*/
358
363#if (USE_HAL_CRYP_REGISTER_CALLBACKS == 1)
364#define __HAL_CRYP_RESET_HANDLE_STATE(__HANDLE__) do{\
365 (__HANDLE__)->State = HAL_CRYP_STATE_RESET;\
366 (__HANDLE__)->MspInitCallback = NULL;\
367 (__HANDLE__)->MspDeInitCallback = NULL;\
368 }while(0)
369#else
370#define __HAL_CRYP_RESET_HANDLE_STATE(__HANDLE__) ( (__HANDLE__)->State = HAL_CRYP_STATE_RESET)
371#endif /* USE_HAL_CRYP_REGISTER_CALLBACKS */
372
378#if defined(CRYP)
379#define __HAL_CRYP_ENABLE(__HANDLE__) ((__HANDLE__)->Instance->CR |= CRYP_CR_CRYPEN)
380#define __HAL_CRYP_DISABLE(__HANDLE__) ((__HANDLE__)->Instance->CR &= ~CRYP_CR_CRYPEN)
381#else /* AES*/
382#define __HAL_CRYP_ENABLE(__HANDLE__) ((__HANDLE__)->Instance->CR |= AES_CR_EN)
383#define __HAL_CRYP_DISABLE(__HANDLE__) ((__HANDLE__)->Instance->CR &= ~AES_CR_EN)
384#endif /* End AES or CRYP */
385
404#define CRYP_FLAG_MASK 0x0000001FU
405#if defined(CRYP)
406#define __HAL_CRYP_GET_FLAG(__HANDLE__, __FLAG__) ((((uint8_t)((__FLAG__) >> 24)) == 0x01U)? \
407 ((((__HANDLE__)->Instance->RISR) & ((__FLAG__) \
408 & CRYP_FLAG_MASK)) == ((__FLAG__) & CRYP_FLAG_MASK)): \
409 ((((__HANDLE__)->Instance->RISR) & ((__FLAG__) & CRYP_FLAG_MASK))\
410 == ((__FLAG__) & CRYP_FLAG_MASK)))
411#else /* AES*/
412#define __HAL_CRYP_GET_FLAG(__HANDLE__, __FLAG__) (((__HANDLE__)->Instance->SR & (__FLAG__)) == (__FLAG__))
413#endif /* End AES or CRYP */
414
423
424#if defined(AES)
425#define __HAL_CRYP_CLEAR_FLAG(__HANDLE__, __FLAG__) SET_BIT((__HANDLE__)->Instance->CR, (__FLAG__))
426
427
436
437#define __HAL_CRYP_GET_IT_SOURCE(__HANDLE__, __INTERRUPT__) (((__HANDLE__)->Instance->CR\
438 & (__INTERRUPT__)) == (__INTERRUPT__))
439
440#endif /* AES */
441
454#if defined(CRYP)
455#define __HAL_CRYP_GET_IT(__HANDLE__, __INTERRUPT__) (((__HANDLE__)->Instance->MISR\
456 & (__INTERRUPT__)) == (__INTERRUPT__))
457#else /* AES*/
458#define __HAL_CRYP_GET_IT(__HANDLE__, __INTERRUPT__) (((__HANDLE__)->Instance->SR & (__INTERRUPT__)) == (__INTERRUPT__))
459#endif /* End AES or CRYP */
460
473#if defined(CRYP)
474#define __HAL_CRYP_ENABLE_IT(__HANDLE__, __INTERRUPT__) (((__HANDLE__)->Instance->IMSCR) |= (__INTERRUPT__))
475#else /* AES*/
476#define __HAL_CRYP_ENABLE_IT(__HANDLE__, __INTERRUPT__) (((__HANDLE__)->Instance->CR) |= (__INTERRUPT__))
477#endif /* End AES or CRYP */
478
491#if defined(CRYP)
492#define __HAL_CRYP_DISABLE_IT(__HANDLE__, __INTERRUPT__) (((__HANDLE__)->Instance->IMSCR) &= ~(__INTERRUPT__))
493#else /* AES*/
494#define __HAL_CRYP_DISABLE_IT(__HANDLE__, __INTERRUPT__) (((__HANDLE__)->Instance->CR) &= ~(__INTERRUPT__))
495#endif /* End AES or CRYP */
496
500#if defined (CRYP_CR_ALGOMODE_AES_GCM)|| defined (AES)
501/* Include CRYP HAL Extended module */
503#endif /* AES or GCM CCM defined*/
504/* Exported functions --------------------------------------------------------*/
508
512HAL_StatusTypeDef HAL_CRYP_Init(CRYP_HandleTypeDef *hcryp);
513HAL_StatusTypeDef HAL_CRYP_DeInit(CRYP_HandleTypeDef *hcryp);
514void HAL_CRYP_MspInit(CRYP_HandleTypeDef *hcryp);
515void HAL_CRYP_MspDeInit(CRYP_HandleTypeDef *hcryp);
516HAL_StatusTypeDef HAL_CRYP_SetConfig(CRYP_HandleTypeDef *hcryp, CRYP_ConfigTypeDef *pConf);
517HAL_StatusTypeDef HAL_CRYP_GetConfig(CRYP_HandleTypeDef *hcryp, CRYP_ConfigTypeDef *pConf);
518#if (USE_HAL_CRYP_REGISTER_CALLBACKS == 1)
519HAL_StatusTypeDef HAL_CRYP_RegisterCallback(CRYP_HandleTypeDef *hcryp, HAL_CRYP_CallbackIDTypeDef CallbackID,
520 pCRYP_CallbackTypeDef pCallback);
521HAL_StatusTypeDef HAL_CRYP_UnRegisterCallback(CRYP_HandleTypeDef *hcryp, HAL_CRYP_CallbackIDTypeDef CallbackID);
522#endif /* USE_HAL_CRYP_REGISTER_CALLBACKS */
526
530
531/* encryption/decryption ***********************************/
532HAL_StatusTypeDef HAL_CRYP_Encrypt(CRYP_HandleTypeDef *hcryp, uint32_t *Input, uint16_t Size, uint32_t *Output,
533 uint32_t Timeout);
534HAL_StatusTypeDef HAL_CRYP_Decrypt(CRYP_HandleTypeDef *hcryp, uint32_t *Input, uint16_t Size, uint32_t *Output,
535 uint32_t Timeout);
536HAL_StatusTypeDef HAL_CRYP_Encrypt_IT(CRYP_HandleTypeDef *hcryp, uint32_t *Input, uint16_t Size, uint32_t *Output);
537HAL_StatusTypeDef HAL_CRYP_Decrypt_IT(CRYP_HandleTypeDef *hcryp, uint32_t *Input, uint16_t Size, uint32_t *Output);
538HAL_StatusTypeDef HAL_CRYP_Encrypt_DMA(CRYP_HandleTypeDef *hcryp, uint32_t *Input, uint16_t Size, uint32_t *Output);
539HAL_StatusTypeDef HAL_CRYP_Decrypt_DMA(CRYP_HandleTypeDef *hcryp, uint32_t *Input, uint16_t Size, uint32_t *Output);
540
544
545
549/* Interrupt Handler functions **********************************************/
550void HAL_CRYP_IRQHandler(CRYP_HandleTypeDef *hcryp);
551HAL_CRYP_STATETypeDef HAL_CRYP_GetState(CRYP_HandleTypeDef *hcryp);
552void HAL_CRYP_InCpltCallback(CRYP_HandleTypeDef *hcryp);
553void HAL_CRYP_OutCpltCallback(CRYP_HandleTypeDef *hcryp);
554void HAL_CRYP_ErrorCallback(CRYP_HandleTypeDef *hcryp);
555uint32_t HAL_CRYP_GetError(CRYP_HandleTypeDef *hcryp);
556
560
564
565/* Private macros --------------------------------------------------------*/
569
573#if defined(CRYP)
574#if defined (CRYP_CR_ALGOMODE_AES_GCM)
575#define IS_CRYP_ALGORITHM(ALGORITHM) (((ALGORITHM) == CRYP_DES_ECB) || \
576 ((ALGORITHM) == CRYP_DES_CBC) || \
577 ((ALGORITHM) == CRYP_TDES_ECB) || \
578 ((ALGORITHM) == CRYP_TDES_CBC) || \
579 ((ALGORITHM) == CRYP_AES_ECB) || \
580 ((ALGORITHM) == CRYP_AES_CBC) || \
581 ((ALGORITHM) == CRYP_AES_CTR) || \
582 ((ALGORITHM) == CRYP_AES_GCM) || \
583 ((ALGORITHM) == CRYP_AES_CCM))
584#else /*NO GCM CCM */
585#define IS_CRYP_ALGORITHM(ALGORITHM) (((ALGORITHM) == CRYP_DES_ECB) || \
586 ((ALGORITHM) == CRYP_DES_CBC) || \
587 ((ALGORITHM) == CRYP_TDES_ECB) || \
588 ((ALGORITHM) == CRYP_TDES_CBC) || \
589 ((ALGORITHM) == CRYP_AES_ECB) || \
590 ((ALGORITHM) == CRYP_AES_CBC) || \
591 ((ALGORITHM) == CRYP_AES_CTR))
592#endif /* GCM CCM defined*/
593#define IS_CRYP_KEYSIZE(KEYSIZE)(((KEYSIZE) == CRYP_KEYSIZE_128B) || \
594 ((KEYSIZE) == CRYP_KEYSIZE_192B) || \
595 ((KEYSIZE) == CRYP_KEYSIZE_256B))
596#else /* AES*/
597#define IS_CRYP_ALGORITHM(ALGORITHM) (((ALGORITHM) == CRYP_AES_ECB) || \
598 ((ALGORITHM) == CRYP_AES_CBC) || \
599 ((ALGORITHM) == CRYP_AES_CTR) || \
600 ((ALGORITHM) == CRYP_AES_GCM_GMAC)|| \
601 ((ALGORITHM) == CRYP_AES_CCM))
602
603
604#define IS_CRYP_KEYSIZE(KEYSIZE)(((KEYSIZE) == CRYP_KEYSIZE_128B) || \
605 ((KEYSIZE) == CRYP_KEYSIZE_256B))
606#endif /* End AES or CRYP */
607
608#define IS_CRYP_DATATYPE(DATATYPE)(((DATATYPE) == CRYP_DATATYPE_32B) || \
609 ((DATATYPE) == CRYP_DATATYPE_16B) || \
610 ((DATATYPE) == CRYP_DATATYPE_8B) || \
611 ((DATATYPE) == CRYP_DATATYPE_1B))
612
613#define IS_CRYP_INIT(CONFIG)(((CONFIG) == CRYP_KEYIVCONFIG_ALWAYS) || \
614 ((CONFIG) == CRYP_KEYIVCONFIG_ONCE))
618
622
623
624/* Private constants ---------------------------------------------------------*/
628
632/* Private defines -----------------------------------------------------------*/
636
640
641/* Private variables ---------------------------------------------------------*/
645
649/* Private functions prototypes ----------------------------------------------*/
653
657
658/* Private functions ---------------------------------------------------------*/
662
666
667
671
672
676#endif /* TinyAES or CRYP*/
677
681
682#ifdef __cplusplus
683}
684#endif
685
686#endif /* __STM32F4xx_HAL_CRYP_H */
687
struct __DMA_HandleTypeDef DMA_HandleTypeDef
DMA handle Structure definition.
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.