20#ifndef STM32F4xx_HAL_HASH_H
21#define STM32F4xx_HAL_HASH_H
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;
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;
90 HAL_HASH_SUSPEND_NONE = 0x00U,
91 HAL_HASH_SUSPEND = 0x01U
92} HAL_HASH_SuspendTypeDef;
94#if (USE_HAL_HASH_REGISTER_CALLBACKS == 1U)
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;
112#if (USE_HAL_HASH_REGISTER_CALLBACKS == 1)
113typedef struct __HASH_HandleTypeDef
118 HASH_InitTypeDef Init;
120 uint8_t
const *pHashInBuffPtr;
122 uint8_t *pHashOutBuffPtr;
124 uint8_t *pHashKeyBuffPtr;
126 uint8_t
const *pHashMsgBuffPtr;
128 uint32_t HashBuffSize;
130 __IO uint32_t HashInCount;
132 __IO uint32_t HashITCounter;
134 __IO uint32_t HashKeyCount;
138 HAL_HASH_PhaseTypeDef Phase;
144 __IO HAL_HASH_StateTypeDef State;
146 HAL_HASH_SuspendTypeDef SuspendRequest;
148 FlagStatus DigestCalculationDisable;
150 __IO uint32_t NbWordsAlreadyPushed;
152 __IO uint32_t ErrorCode;
154 __IO uint32_t Accumulation;
156#if (USE_HAL_HASH_REGISTER_CALLBACKS == 1)
157 void (* InCpltCallback)(
struct __HASH_HandleTypeDef *hhash);
159 void (* DgstCpltCallback)(
struct __HASH_HandleTypeDef *hhash);
161 void (* ErrorCallback)(
struct __HASH_HandleTypeDef *hhash);
163 void (* MspInitCallback)(
struct __HASH_HandleTypeDef *hhash);
165 void (* MspDeInitCallback)(
struct __HASH_HandleTypeDef *hhash);
170#if (USE_HAL_HASH_REGISTER_CALLBACKS == 1U)
174typedef void (*pHASH_CallbackTypeDef)(HASH_HandleTypeDef *hhash);
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
201#define HASH_ALGOMODE_HASH 0x00000000U
202#define HASH_ALGOMODE_HMAC HASH_CR_MODE
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
221#define HASH_HMAC_KEYTYPE_SHORTKEY 0x00000000U
222#define HASH_HMAC_KEYTYPE_LONGKEY HASH_CR_LKEY
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
243#define HASH_IT_DINI HASH_IMR_DINIE
244#define HASH_IT_DCI HASH_IMR_DCIE
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
282#define __HAL_HASH_GET_FLAG(__FLAG__) (((__FLAG__) > 8U) ? \
283 ((HASH->CR & (__FLAG__)) == (__FLAG__)) :\
284 ((HASH->SR & (__FLAG__)) == (__FLAG__)) )
294#define __HAL_HASH_CLEAR_FLAG(__FLAG__) CLEAR_BIT(HASH->SR, (__FLAG__))
304#define __HAL_HASH_ENABLE_IT(__INTERRUPT__) SET_BIT(HASH->IMR, (__INTERRUPT__))
313#define __HAL_HASH_DISABLE_IT(__INTERRUPT__) CLEAR_BIT(HASH->IMR, (__INTERRUPT__))
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; \
327#define __HAL_HASH_RESET_HANDLE_STATE(__HANDLE__) ((__HANDLE__)->State = HAL_HASH_STATE_RESET)
335#define __HAL_HASH_RESET_HANDLE_STATUS(__HANDLE__) ((__HANDLE__)->Status = HAL_OK)
342#define __HAL_HASH_SET_MDMAT() SET_BIT(HASH->CR, HASH_CR_MDMAT)
348#define __HAL_HASH_RESET_MDMAT() CLEAR_BIT(HASH->CR, HASH_CR_MDMAT)
355#define __HAL_HASH_START_DIGEST() SET_BIT(HASH->STR, HASH_STR_DCAL)
362#define __HAL_HASH_SET_NBVALIDBITS(__SIZE__) MODIFY_REG(HASH->STR, HASH_STR_NBLW, 8U * ((__SIZE__) % 4U))
368#define __HAL_HASH_INIT() SET_BIT(HASH->CR, HASH_CR_INIT)
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 ) ) )
388#define HASH_DIGEST_LENGTH() ((READ_BIT(HASH->CR, HASH_CR_ALGO) == HASH_ALGOSELECTION_SHA1) ? 20U : 16)
394#define HASH_NBW_PUSHED() ((READ_BIT(HASH->CR, HASH_CR_NBW)) >> 8U)
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))
413#define IS_HASH_DMA_MULTIBUFFER_SIZE(__SIZE__) ((READ_BIT(HASH->CR, HASH_CR_MDMAT) == 0U) || (((__SIZE__) % 4U) == 0U))
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)
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))
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);
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);
483HAL_StatusTypeDef HAL_HASH_SHA1_Start(HASH_HandleTypeDef *hhash,
const uint8_t *
const pInBuffer, uint32_t Size,
486HAL_StatusTypeDef HAL_HASH_MD5_Start(HASH_HandleTypeDef *hhash,
const uint8_t *
const pInBuffer, uint32_t Size,
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);
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);
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);
540HAL_StatusTypeDef HAL_HMAC_SHA1_Start(HASH_HandleTypeDef *hhash,
const uint8_t *
const pInBuffer, uint32_t Size,
543HAL_StatusTypeDef HAL_HMAC_MD5_Start(HASH_HandleTypeDef *hhash,
const uint8_t *
const pInBuffer, uint32_t Size,
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);
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);
582HAL_HASH_StateTypeDef HAL_HASH_GetState(
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);
588uint32_t HAL_HASH_GetError(
const HASH_HandleTypeDef *hhash);
605HAL_StatusTypeDef HASH_Start(HASH_HandleTypeDef *hhash,
const uint8_t *
const pInBuffer, uint32_t Size,
607 uint32_t Timeout, uint32_t Algorithm);
608HAL_StatusTypeDef HASH_Accumulate(HASH_HandleTypeDef *hhash,
const uint8_t *
const pInBuffer, uint32_t Size,
610HAL_StatusTypeDef HASH_Accumulate_IT(HASH_HandleTypeDef *hhash,
const uint8_t *
const pInBuffer, uint32_t Size,
612HAL_StatusTypeDef HASH_Start_IT(HASH_HandleTypeDef *hhash,
const uint8_t *
const pInBuffer, uint32_t Size,
615HAL_StatusTypeDef HASH_Start_DMA(HASH_HandleTypeDef *hhash,
const uint8_t *
const pInBuffer, uint32_t Size,
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,
620 uint32_t Timeout, uint32_t Algorithm);
621HAL_StatusTypeDef HMAC_Start_IT(HASH_HandleTypeDef *hhash,
const uint8_t *
const pInBuffer, uint32_t Size,
624HAL_StatusTypeDef HMAC_Start_DMA(HASH_HandleTypeDef *hhash,
const uint8_t *
const pInBuffer, uint32_t Size,
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.