STM32F4xx HAL Driver master
STM32CubeF4 HAL / LL Drivers API Reference
Loading...
Searching...
No Matches
stm32f4xx_hal_hash.h
Go to the documentation of this file.
1
18
19/* Define to prevent recursive inclusion -------------------------------------*/
20#ifndef STM32F4xx_HAL_HASH_H
21#define STM32F4xx_HAL_HASH_H
22
23#ifdef __cplusplus
24extern "C" {
25#endif
26
27/* Includes ------------------------------------------------------------------*/
28#include "stm32f4xx_hal_def.h"
29
33#if defined (HASH)
37
38/* Exported types ------------------------------------------------------------*/
42
46typedef struct
47{
48 uint32_t DataType;
50
51 uint32_t KeySize;
52
53 uint8_t *pKey;
54
55} HASH_InitTypeDef;
56
60typedef enum
61{
62 HAL_HASH_STATE_RESET = 0x00U,
63 HAL_HASH_STATE_READY = 0x01U,
64 HAL_HASH_STATE_BUSY = 0x02U,
65 HAL_HASH_STATE_TIMEOUT = 0x06U,
66 HAL_HASH_STATE_ERROR = 0x07U,
67 HAL_HASH_STATE_SUSPENDED = 0x08U
68} HAL_HASH_StateTypeDef;
69
73typedef enum
74{
75 HAL_HASH_PHASE_READY = 0x01U,
76 HAL_HASH_PHASE_PROCESS = 0x02U,
77 HAL_HASH_PHASE_HMAC_STEP_1 = 0x03U,
79 HAL_HASH_PHASE_HMAC_STEP_2 = 0x04U,
81 HAL_HASH_PHASE_HMAC_STEP_3 = 0x05U
83} HAL_HASH_PhaseTypeDef;
84
88typedef enum
89{
90 HAL_HASH_SUSPEND_NONE = 0x00U,
91 HAL_HASH_SUSPEND = 0x01U
92} HAL_HASH_SuspendTypeDef;
93
94#if (USE_HAL_HASH_REGISTER_CALLBACKS == 1U)
98typedef enum
99{
100 HAL_HASH_MSPINIT_CB_ID = 0x00U,
101 HAL_HASH_MSPDEINIT_CB_ID = 0x01U,
102 HAL_HASH_INPUTCPLT_CB_ID = 0x02U,
103 HAL_HASH_DGSTCPLT_CB_ID = 0x03U,
104 HAL_HASH_ERROR_CB_ID = 0x04U,
105} HAL_HASH_CallbackIDTypeDef;
106#endif /* USE_HAL_HASH_REGISTER_CALLBACKS */
107
108
112#if (USE_HAL_HASH_REGISTER_CALLBACKS == 1)
113typedef struct __HASH_HandleTypeDef
114#else
115typedef struct
116#endif /* (USE_HAL_HASH_REGISTER_CALLBACKS) */
117{
118 HASH_InitTypeDef Init;
119
120 uint8_t const *pHashInBuffPtr;
121
122 uint8_t *pHashOutBuffPtr;
123
124 uint8_t *pHashKeyBuffPtr;
125
126 uint8_t const *pHashMsgBuffPtr;
127
128 uint32_t HashBuffSize;
129
130 __IO uint32_t HashInCount;
131
132 __IO uint32_t HashITCounter;
133
134 __IO uint32_t HashKeyCount;
135
136 HAL_StatusTypeDef Status;
137
138 HAL_HASH_PhaseTypeDef Phase;
139
140 DMA_HandleTypeDef *hdmain;
141
142 HAL_LockTypeDef Lock;
143
144 __IO HAL_HASH_StateTypeDef State;
145
146 HAL_HASH_SuspendTypeDef SuspendRequest;
147
148 FlagStatus DigestCalculationDisable;
149
150 __IO uint32_t NbWordsAlreadyPushed;
151
152 __IO uint32_t ErrorCode;
153
154 __IO uint32_t Accumulation;
155
156#if (USE_HAL_HASH_REGISTER_CALLBACKS == 1)
157 void (* InCpltCallback)(struct __HASH_HandleTypeDef *hhash);
158
159 void (* DgstCpltCallback)(struct __HASH_HandleTypeDef *hhash);
160
161 void (* ErrorCallback)(struct __HASH_HandleTypeDef *hhash);
162
163 void (* MspInitCallback)(struct __HASH_HandleTypeDef *hhash);
164
165 void (* MspDeInitCallback)(struct __HASH_HandleTypeDef *hhash);
166
167#endif /* (USE_HAL_HASH_REGISTER_CALLBACKS) */
168} HASH_HandleTypeDef;
169
170#if (USE_HAL_HASH_REGISTER_CALLBACKS == 1U)
174typedef void (*pHASH_CallbackTypeDef)(HASH_HandleTypeDef *hhash);
175#endif /* USE_HAL_HASH_REGISTER_CALLBACKS */
176
180
181/* Exported constants --------------------------------------------------------*/
182
186
190#define HASH_ALGOSELECTION_SHA1 0x00000000U
191#define HASH_ALGOSELECTION_MD5 HASH_CR_ALGO_0
192#define HASH_ALGOSELECTION_SHA224 HASH_CR_ALGO_1
193#define HASH_ALGOSELECTION_SHA256 HASH_CR_ALGO
197
201#define HASH_ALGOMODE_HASH 0x00000000U
202#define HASH_ALGOMODE_HMAC HASH_CR_MODE
206
210#define HASH_DATATYPE_32B 0x00000000U
211#define HASH_DATATYPE_16B HASH_CR_DATATYPE_0
212#define HASH_DATATYPE_8B HASH_CR_DATATYPE_1
213#define HASH_DATATYPE_1B HASH_CR_DATATYPE
217
221#define HASH_HMAC_KEYTYPE_SHORTKEY 0x00000000U
222#define HASH_HMAC_KEYTYPE_LONGKEY HASH_CR_LKEY
226
230#define HASH_FLAG_DINIS HASH_SR_DINIS
231#define HASH_FLAG_DCIS HASH_SR_DCIS
232#define HASH_FLAG_DMAS HASH_SR_DMAS
233#define HASH_FLAG_BUSY HASH_SR_BUSY
234#define HASH_FLAG_DINNE HASH_CR_DINNE
235
239
243#define HASH_IT_DINI HASH_IMR_DINIE
244#define HASH_IT_DCI HASH_IMR_DCIE
245
249
253#define HAL_HASH_ERROR_NONE 0x00000000U
254#define HAL_HASH_ERROR_IT 0x00000001U
255#define HAL_HASH_ERROR_DMA 0x00000002U
256#if (USE_HAL_HASH_REGISTER_CALLBACKS == 1U)
257#define HAL_HASH_ERROR_INVALID_CALLBACK 0x00000004U
258#endif /* USE_HAL_HASH_REGISTER_CALLBACKS */
262
266
267/* Exported macros -----------------------------------------------------------*/
271
282#define __HAL_HASH_GET_FLAG(__FLAG__) (((__FLAG__) > 8U) ? \
283 ((HASH->CR & (__FLAG__)) == (__FLAG__)) :\
284 ((HASH->SR & (__FLAG__)) == (__FLAG__)) )
285
286
294#define __HAL_HASH_CLEAR_FLAG(__FLAG__) CLEAR_BIT(HASH->SR, (__FLAG__))
295
296
304#define __HAL_HASH_ENABLE_IT(__INTERRUPT__) SET_BIT(HASH->IMR, (__INTERRUPT__))
305
313#define __HAL_HASH_DISABLE_IT(__INTERRUPT__) CLEAR_BIT(HASH->IMR, (__INTERRUPT__))
314
319
320#if (USE_HAL_HASH_REGISTER_CALLBACKS == 1)
321#define __HAL_HASH_RESET_HANDLE_STATE(__HANDLE__) do{\
322 (__HANDLE__)->State = HAL_HASH_STATE_RESET;\
323 (__HANDLE__)->MspInitCallback = NULL; \
324 (__HANDLE__)->MspDeInitCallback = NULL; \
325 }while(0)
326#else
327#define __HAL_HASH_RESET_HANDLE_STATE(__HANDLE__) ((__HANDLE__)->State = HAL_HASH_STATE_RESET)
328#endif /* USE_HAL_HASH_REGISTER_CALLBACKS */
329
330
335#define __HAL_HASH_RESET_HANDLE_STATUS(__HANDLE__) ((__HANDLE__)->Status = HAL_OK)
336
342#define __HAL_HASH_SET_MDMAT() SET_BIT(HASH->CR, HASH_CR_MDMAT)
343
348#define __HAL_HASH_RESET_MDMAT() CLEAR_BIT(HASH->CR, HASH_CR_MDMAT)
349
350
355#define __HAL_HASH_START_DIGEST() SET_BIT(HASH->STR, HASH_STR_DCAL)
356
362#define __HAL_HASH_SET_NBVALIDBITS(__SIZE__) MODIFY_REG(HASH->STR, HASH_STR_NBLW, 8U * ((__SIZE__) % 4U))
363
368#define __HAL_HASH_INIT() SET_BIT(HASH->CR, HASH_CR_INIT)
369
373
374
375/* Private macros --------------------------------------------------------*/
383#if defined(HASH_CR_MDMAT)
384#define HASH_DIGEST_LENGTH() ((READ_BIT(HASH->CR, HASH_CR_ALGO) == HASH_ALGOSELECTION_SHA1) ? 20U : \
385 ((READ_BIT(HASH->CR, HASH_CR_ALGO) == HASH_ALGOSELECTION_SHA224) ? 28U : \
386 ((READ_BIT(HASH->CR, HASH_CR_ALGO) == HASH_ALGOSELECTION_SHA256) ? 32U : 16U ) ) )
387#else
388#define HASH_DIGEST_LENGTH() ((READ_BIT(HASH->CR, HASH_CR_ALGO) == HASH_ALGOSELECTION_SHA1) ? 20U : 16)
389#endif /* HASH_CR_MDMAT*/
394#define HASH_NBW_PUSHED() ((READ_BIT(HASH->CR, HASH_CR_NBW)) >> 8U)
395
401#define IS_HASH_DATATYPE(__DATATYPE__) (((__DATATYPE__) == HASH_DATATYPE_32B)|| \
402 ((__DATATYPE__) == HASH_DATATYPE_16B)|| \
403 ((__DATATYPE__) == HASH_DATATYPE_8B) || \
404 ((__DATATYPE__) == HASH_DATATYPE_1B))
405
413#define IS_HASH_DMA_MULTIBUFFER_SIZE(__SIZE__) ((READ_BIT(HASH->CR, HASH_CR_MDMAT) == 0U) || (((__SIZE__) % 4U) == 0U))
414
423#define IS_HMAC_DMA_MULTIBUFFER_SIZE(__HANDLE__,__SIZE__) ((((__HANDLE__)->DigestCalculationDisable) == RESET)\
424 || (((__SIZE__) % 4U) == 0U))
430#define IS_HASH_PROCESSING(__HANDLE__) ((__HANDLE__)->Phase == HAL_HASH_PHASE_PROCESS)
431
437#define IS_HMAC_PROCESSING(__HANDLE__) (((__HANDLE__)->Phase == HAL_HASH_PHASE_HMAC_STEP_1) || \
438 ((__HANDLE__)->Phase == HAL_HASH_PHASE_HMAC_STEP_2) || \
439 ((__HANDLE__)->Phase == HAL_HASH_PHASE_HMAC_STEP_3))
440
444
445/* Include HASH HAL Extended module */
447/* Exported functions --------------------------------------------------------*/
448
452
456
457/* Initialization/de-initialization methods **********************************/
458HAL_StatusTypeDef HAL_HASH_Init(HASH_HandleTypeDef *hhash);
459HAL_StatusTypeDef HAL_HASH_DeInit(HASH_HandleTypeDef *hhash);
460void HAL_HASH_MspInit(HASH_HandleTypeDef *hhash);
461void HAL_HASH_MspDeInit(HASH_HandleTypeDef *hhash);
462void HAL_HASH_InCpltCallback(HASH_HandleTypeDef *hhash);
463void HAL_HASH_DgstCpltCallback(HASH_HandleTypeDef *hhash);
464void HAL_HASH_ErrorCallback(HASH_HandleTypeDef *hhash);
465/* Callbacks Register/UnRegister functions ***********************************/
466#if (USE_HAL_HASH_REGISTER_CALLBACKS == 1)
467HAL_StatusTypeDef HAL_HASH_RegisterCallback(HASH_HandleTypeDef *hhash, HAL_HASH_CallbackIDTypeDef CallbackID,
468 pHASH_CallbackTypeDef pCallback);
469HAL_StatusTypeDef HAL_HASH_UnRegisterCallback(HASH_HandleTypeDef *hhash, HAL_HASH_CallbackIDTypeDef CallbackID);
470#endif /* USE_HAL_HASH_REGISTER_CALLBACKS */
471
472
476
480
481
482/* HASH processing using polling *********************************************/
483HAL_StatusTypeDef HAL_HASH_SHA1_Start(HASH_HandleTypeDef *hhash, const uint8_t *const pInBuffer, uint32_t Size,
484 uint8_t *pOutBuffer,
485 uint32_t Timeout);
486HAL_StatusTypeDef HAL_HASH_MD5_Start(HASH_HandleTypeDef *hhash, const uint8_t *const pInBuffer, uint32_t Size,
487 uint8_t *pOutBuffer,
488 uint32_t Timeout);
489HAL_StatusTypeDef HAL_HASH_MD5_Accmlt(HASH_HandleTypeDef *hhash, const uint8_t *const pInBuffer, uint32_t Size);
490HAL_StatusTypeDef HAL_HASH_SHA1_Accmlt(HASH_HandleTypeDef *hhash, const uint8_t *const pInBuffer, uint32_t Size);
491HAL_StatusTypeDef HAL_HASH_MD5_Accmlt_End(HASH_HandleTypeDef *hhash, const uint8_t *const pInBuffer, uint32_t Size,
492 uint8_t *pOutBuffer, uint32_t Timeout);
493HAL_StatusTypeDef HAL_HASH_SHA1_Accmlt_End(HASH_HandleTypeDef *hhash, const uint8_t *const pInBuffer, uint32_t Size,
494 uint8_t *pOutBuffer, uint32_t Timeout);
495
496
500
504
505/* HASH processing using IT **************************************************/
506HAL_StatusTypeDef HAL_HASH_SHA1_Start_IT(HASH_HandleTypeDef *hhash, const uint8_t *const pInBuffer, uint32_t Size,
507 uint8_t *pOutBuffer);
508HAL_StatusTypeDef HAL_HASH_SHA1_Accmlt_IT(HASH_HandleTypeDef *hhash, const uint8_t *const pInBuffer, uint32_t Size);
509HAL_StatusTypeDef HAL_HASH_SHA1_Accmlt_End_IT(HASH_HandleTypeDef *hhash, const uint8_t *const pInBuffer, uint32_t Size,
510 uint8_t *pOutBuffer);
511HAL_StatusTypeDef HAL_HASH_MD5_Start_IT(HASH_HandleTypeDef *hhash, const uint8_t *const pInBuffer, uint32_t Size,
512 uint8_t *pOutBuffer);
513HAL_StatusTypeDef HAL_HASH_MD5_Accmlt_IT(HASH_HandleTypeDef *hhash, const uint8_t *const pInBuffer, uint32_t Size);
514HAL_StatusTypeDef HAL_HASH_MD5_Accmlt_End_IT(HASH_HandleTypeDef *hhash, const uint8_t *const pInBuffer, uint32_t Size,
515 uint8_t *pOutBuffer);
516void HAL_HASH_IRQHandler(HASH_HandleTypeDef *hhash);
520
524
525/* HASH processing using DMA *************************************************/
526HAL_StatusTypeDef HAL_HASH_SHA1_Start_DMA(HASH_HandleTypeDef *hhash, const uint8_t *const pInBuffer, uint32_t Size);
527HAL_StatusTypeDef HAL_HASH_SHA1_Finish(HASH_HandleTypeDef *hhash, uint8_t *pOutBuffer, uint32_t Timeout);
528HAL_StatusTypeDef HAL_HASH_MD5_Start_DMA(HASH_HandleTypeDef *hhash, const uint8_t *const pInBuffer, uint32_t Size);
529HAL_StatusTypeDef HAL_HASH_MD5_Finish(HASH_HandleTypeDef *hhash, uint8_t *pOutBuffer, uint32_t Timeout);
530
534
538
539/* HASH-MAC processing using polling *****************************************/
540HAL_StatusTypeDef HAL_HMAC_SHA1_Start(HASH_HandleTypeDef *hhash, const uint8_t *const pInBuffer, uint32_t Size,
541 uint8_t *pOutBuffer,
542 uint32_t Timeout);
543HAL_StatusTypeDef HAL_HMAC_MD5_Start(HASH_HandleTypeDef *hhash, const uint8_t *const pInBuffer, uint32_t Size,
544 uint8_t *pOutBuffer,
545 uint32_t Timeout);
546
550
554
555HAL_StatusTypeDef HAL_HMAC_MD5_Start_IT(HASH_HandleTypeDef *hhash, const uint8_t *const pInBuffer, uint32_t Size,
556 uint8_t *pOutBuffer);
557HAL_StatusTypeDef HAL_HMAC_SHA1_Start_IT(HASH_HandleTypeDef *hhash, const uint8_t *const pInBuffer, uint32_t Size,
558 uint8_t *pOutBuffer);
559
563
567
568/* HASH-HMAC processing using DMA ********************************************/
569HAL_StatusTypeDef HAL_HMAC_SHA1_Start_DMA(HASH_HandleTypeDef *hhash, const uint8_t *const pInBuffer, uint32_t Size);
570HAL_StatusTypeDef HAL_HMAC_MD5_Start_DMA(HASH_HandleTypeDef *hhash, const uint8_t *const pInBuffer, uint32_t Size);
571
575
579
580
581/* Peripheral State methods **************************************************/
582HAL_HASH_StateTypeDef HAL_HASH_GetState(const HASH_HandleTypeDef *hhash);
583HAL_StatusTypeDef HAL_HASH_GetStatus(const HASH_HandleTypeDef *hhash);
584void HAL_HASH_ContextSaving(const HASH_HandleTypeDef *hhash, const uint8_t *pMemBuffer);
585void HAL_HASH_ContextRestoring(HASH_HandleTypeDef *hhash, const uint8_t *pMemBuffer);
586void HAL_HASH_SwFeed_ProcessSuspend(HASH_HandleTypeDef *hhash);
587HAL_StatusTypeDef HAL_HASH_DMAFeed_ProcessSuspend(HASH_HandleTypeDef *hhash);
588uint32_t HAL_HASH_GetError(const HASH_HandleTypeDef *hhash);
589
593
597
598/* Private functions -----------------------------------------------------------*/
599
603
604/* Private functions */
605HAL_StatusTypeDef HASH_Start(HASH_HandleTypeDef *hhash, const uint8_t *const pInBuffer, uint32_t Size,
606 uint8_t *pOutBuffer,
607 uint32_t Timeout, uint32_t Algorithm);
608HAL_StatusTypeDef HASH_Accumulate(HASH_HandleTypeDef *hhash, const uint8_t *const pInBuffer, uint32_t Size,
609 uint32_t Algorithm);
610HAL_StatusTypeDef HASH_Accumulate_IT(HASH_HandleTypeDef *hhash, const uint8_t *const pInBuffer, uint32_t Size,
611 uint32_t Algorithm);
612HAL_StatusTypeDef HASH_Start_IT(HASH_HandleTypeDef *hhash, const uint8_t *const pInBuffer, uint32_t Size,
613 uint8_t *pOutBuffer,
614 uint32_t Algorithm);
615HAL_StatusTypeDef HASH_Start_DMA(HASH_HandleTypeDef *hhash, const uint8_t *const pInBuffer, uint32_t Size,
616 uint32_t Algorithm);
617HAL_StatusTypeDef HASH_Finish(HASH_HandleTypeDef *hhash, uint8_t *pOutBuffer, uint32_t Timeout);
618HAL_StatusTypeDef HMAC_Start(HASH_HandleTypeDef *hhash, const uint8_t *const pInBuffer, uint32_t Size,
619 uint8_t *pOutBuffer,
620 uint32_t Timeout, uint32_t Algorithm);
621HAL_StatusTypeDef HMAC_Start_IT(HASH_HandleTypeDef *hhash, const uint8_t *const pInBuffer, uint32_t Size,
622 uint8_t *pOutBuffer,
623 uint32_t Algorithm);
624HAL_StatusTypeDef HMAC_Start_DMA(HASH_HandleTypeDef *hhash, const uint8_t *const pInBuffer, uint32_t Size,
625 uint32_t Algorithm);
626
630
634#endif /* HASH*/
638
639
640#ifdef __cplusplus
641}
642#endif
643
644
645#endif /* STM32F4xx_HAL_HASH_H */
646
struct __DMA_HandleTypeDef DMA_HandleTypeDef
DMA handle Structure definition.
This file contains HAL common defines, enumeration, macros and structures definitions.
HAL_StatusTypeDef
HAL Status structures definition.
HAL_LockTypeDef
HAL Lock structures definition.
Header file of HASH HAL module.