STM CMSIS
stm32f4xx_hal_hash.h
Go to the documentation of this file.
1 
38 /* Define to prevent recursive inclusion -------------------------------------*/
39 #ifndef __STM32F4xx_HAL_HASH_H
40 #define __STM32F4xx_HAL_HASH_H
41 
42 #ifdef __cplusplus
43  extern "C" {
44 #endif
45 
46 #if defined(STM32F415xx) || defined(STM32F417xx) || defined(STM32F437xx) || defined(STM32F439xx) || defined(STM32F479xx)
47 
48 /* Includes ------------------------------------------------------------------*/
49 #include "stm32f4xx_hal_def.h"
50 
60 /* Exported types ------------------------------------------------------------*/
69 typedef struct
70 {
71  uint32_t DataType;
74  uint32_t KeySize;
76  uint8_t* pKey;
77 }HASH_InitTypeDef;
78 
87 typedef enum
88 {
89  HAL_HASH_STATE_RESET = 0x00U,
90  HAL_HASH_STATE_READY = 0x01U,
91  HAL_HASH_STATE_BUSY = 0x02U,
92  HAL_HASH_STATE_TIMEOUT = 0x03U,
93  HAL_HASH_STATE_ERROR = 0x04U
94 }HAL_HASH_StateTypeDef;
95 
104 typedef enum
105 {
106  HAL_HASH_PHASE_READY = 0x01U,
107  HAL_HASH_PHASE_PROCESS = 0x02U
108 }HAL_HASH_PhaseTypeDef;
109 
118 typedef struct
119 {
120  HASH_InitTypeDef Init;
122  uint8_t *pHashInBuffPtr;
124  uint8_t *pHashOutBuffPtr;
126  __IO uint32_t HashBuffSize;
128  __IO uint32_t HashInCount;
130  __IO uint32_t HashITCounter;
132  HAL_StatusTypeDef Status;
134  HAL_HASH_PhaseTypeDef Phase;
136  DMA_HandleTypeDef *hdmain;
138  HAL_LockTypeDef Lock;
140  __IO HAL_HASH_StateTypeDef State;
141 } HASH_HandleTypeDef;
142 
152 /* Exported constants --------------------------------------------------------*/
160 #define HASH_ALGOSELECTION_SHA1 ((uint32_t)0x00000000U)
161 #define HASH_ALGOSELECTION_SHA224 HASH_CR_ALGO_1
162 #define HASH_ALGOSELECTION_SHA256 HASH_CR_ALGO
163 #define HASH_ALGOSELECTION_MD5 HASH_CR_ALGO_0
171 #define HASH_ALGOMODE_HASH ((uint32_t)0x00000000U)
172 #define HASH_ALGOMODE_HMAC HASH_CR_MODE
180 #define HASH_DATATYPE_32B ((uint32_t)0x00000000U)
181 #define HASH_DATATYPE_16B HASH_CR_DATATYPE_0
182 #define HASH_DATATYPE_8B HASH_CR_DATATYPE_1
183 #define HASH_DATATYPE_1B HASH_CR_DATATYPE
192 #define HASH_HMAC_KEYTYPE_SHORTKEY ((uint32_t)0x00000000U)
193 #define HASH_HMAC_KEYTYPE_LONGKEY HASH_CR_LKEY
201 #define HASH_FLAG_DINIS HASH_SR_DINIS
202 #define HASH_FLAG_DCIS HASH_SR_DCIS
203 #define HASH_FLAG_DMAS HASH_SR_DMAS
204 #define HASH_FLAG_BUSY HASH_SR_BUSY
205 #define HASH_FLAG_DINNE HASH_CR_DINNE
213 #define HASH_IT_DINI HASH_IMR_DINIE
214 #define HASH_IT_DCI HASH_IMR_DCIE
223 /* Exported macro ------------------------------------------------------------*/
224 
232 #define __HAL_HASH_RESET_HANDLE_STATE(__HANDLE__) ((__HANDLE__)->State = HAL_HASH_STATE_RESET)
233 
244 #define __HAL_HASH_GET_FLAG(__FLAG__) (((__FLAG__) > 8U) ? ((HASH->CR & (__FLAG__)) == (__FLAG__)) :\
245  ((HASH->SR & (__FLAG__)) == (__FLAG__)))
246 
252 #define __HAL_HASH_SET_MDMAT() HASH->CR |= HASH_CR_MDMAT
253 
258 #define __HAL_HASH_RESET_MDMAT() HASH->CR &= (uint32_t)(~HASH_CR_MDMAT)
259 
264 #define __HAL_HASH_START_DIGEST() HASH->STR |= HASH_STR_DCAL
265 
271 #define __HAL_HASH_SET_NBVALIDBITS(SIZE) do{HASH->STR &= ~(HASH_STR_NBLW);\
272  HASH->STR |= 8U * ((SIZE) % 4U);\
273  }while(0)
274 
279 /* Include HASH HAL Extension module */
280 #include "stm32f4xx_hal_hash_ex.h"
281 /* Exported functions --------------------------------------------------------*/
282 
290 HAL_StatusTypeDef HAL_HASH_Init(HASH_HandleTypeDef *hhash);
291 HAL_StatusTypeDef HAL_HASH_DeInit(HASH_HandleTypeDef *hhash);
299 HAL_StatusTypeDef HAL_HASH_SHA1_Start(HASH_HandleTypeDef *hhash, uint8_t *pInBuffer, uint32_t Size, uint8_t* pOutBuffer, uint32_t Timeout);
300 HAL_StatusTypeDef HAL_HASH_MD5_Start(HASH_HandleTypeDef *hhash, uint8_t *pInBuffer, uint32_t Size, uint8_t* pOutBuffer, uint32_t Timeout);
301 HAL_StatusTypeDef HAL_HASH_MD5_Accumulate(HASH_HandleTypeDef *hhash, uint8_t *pInBuffer, uint32_t Size);
302 HAL_StatusTypeDef HAL_HASH_SHA1_Accumulate(HASH_HandleTypeDef *hhash, uint8_t *pInBuffer, uint32_t Size);
310 HAL_StatusTypeDef HAL_HMAC_SHA1_Start(HASH_HandleTypeDef *hhash, uint8_t *pInBuffer, uint32_t Size, uint8_t* pOutBuffer, uint32_t Timeout);
311 HAL_StatusTypeDef HAL_HMAC_MD5_Start(HASH_HandleTypeDef *hhash, uint8_t *pInBuffer, uint32_t Size, uint8_t* pOutBuffer, uint32_t Timeout);
319 HAL_StatusTypeDef HAL_HASH_SHA1_Start_IT(HASH_HandleTypeDef *hhash, uint8_t *pInBuffer, uint32_t Size, uint8_t* pOutBuffer);
320 HAL_StatusTypeDef HAL_HASH_MD5_Start_IT(HASH_HandleTypeDef *hhash, uint8_t *pInBuffer, uint32_t Size, uint8_t* pOutBuffer);
328 HAL_StatusTypeDef HAL_HASH_SHA1_Start_DMA(HASH_HandleTypeDef *hhash, uint8_t *pInBuffer, uint32_t Size);
329 HAL_StatusTypeDef HAL_HASH_SHA1_Finish(HASH_HandleTypeDef *hhash, uint8_t* pOutBuffer, uint32_t Timeout);
330 HAL_StatusTypeDef HAL_HASH_MD5_Start_DMA(HASH_HandleTypeDef *hhash, uint8_t *pInBuffer, uint32_t Size);
331 HAL_StatusTypeDef HAL_HASH_MD5_Finish(HASH_HandleTypeDef *hhash, uint8_t* pOutBuffer, uint32_t Timeout);
339 HAL_StatusTypeDef HAL_HMAC_SHA1_Start_DMA(HASH_HandleTypeDef *hhash, uint8_t *pInBuffer, uint32_t Size);
340 HAL_StatusTypeDef HAL_HMAC_MD5_Start_DMA(HASH_HandleTypeDef *hhash, uint8_t *pInBuffer, uint32_t Size);
348 void HAL_HASH_IRQHandler(HASH_HandleTypeDef *hhash);
356 HAL_HASH_StateTypeDef HAL_HASH_GetState(HASH_HandleTypeDef *hhash);
357 void HAL_HASH_MspInit(HASH_HandleTypeDef *hhash);
358 void HAL_HASH_MspDeInit(HASH_HandleTypeDef *hhash);
359 void HAL_HASH_InCpltCallback(HASH_HandleTypeDef *hhash);
360 void HAL_HASH_DgstCpltCallback(HASH_HandleTypeDef *hhash);
361 void HAL_HASH_ErrorCallback(HASH_HandleTypeDef *hhash);
370  /* Private types -------------------------------------------------------------*/
379 /* Private variables ---------------------------------------------------------*/
388 /* Private constants ---------------------------------------------------------*/
397 /* Private macros ------------------------------------------------------------*/
401 #define IS_HASH_ALGOSELECTION(__ALGOSELECTION__) (((__ALGOSELECTION__) == HASH_ALGOSELECTION_SHA1) || \
402  ((__ALGOSELECTION__) == HASH_ALGOSELECTION_SHA224) || \
403  ((__ALGOSELECTION__) == HASH_ALGOSELECTION_SHA256) || \
404  ((__ALGOSELECTION__) == HASH_ALGOSELECTION_MD5))
405 
406 
407 #define IS_HASH_ALGOMODE(__ALGOMODE__) (((__ALGOMODE__) == HASH_ALGOMODE_HASH) || \
408  ((__ALGOMODE__) == HASH_ALGOMODE_HMAC))
409 
410 
411 #define IS_HASH_DATATYPE(__DATATYPE__) (((__DATATYPE__) == HASH_DATATYPE_32B)|| \
412  ((__DATATYPE__) == HASH_DATATYPE_16B)|| \
413  ((__DATATYPE__) == HASH_DATATYPE_8B) || \
414  ((__DATATYPE__) == HASH_DATATYPE_1B))
415 
416 
417 #define IS_HASH_HMAC_KEYTYPE(__KEYTYPE__) (((__KEYTYPE__) == HASH_HMAC_KEYTYPE_SHORTKEY) || \
418  ((__KEYTYPE__) == HASH_HMAC_KEYTYPE_LONGKEY))
419 
420 #define IS_HASH_SHA1_BUFFER_SIZE(__SIZE__) ((((__SIZE__)%4) != 0U)? 0U: 1U)
421 
426 /* Private functions ---------------------------------------------------------*/
435 #endif /* STM32F415xx || STM32F417xx || STM32F437xx || STM32F439xx || STM32F479xx */
436 
444 #ifdef __cplusplus
445 }
446 #endif
447 
448 
449 #endif /* __STM32F4xx_HAL_HASH_H */
450 
451 /************************ (C) COPYRIGHT STMicroelectronics *****END OF FILE****/
This file contains HAL common defines, enumeration, macros and structures definitions.
Header file of HASH HAL Extension module.
HAL_StatusTypeDef
HAL Status structures definition.
Definition: stm32f4xx_hal_def.h:57
#define __IO
Definition: core_cm0.h:213
HAL_LockTypeDef
HAL Lock structures definition.
Definition: stm32f4xx_hal_def.h:68
DMA handle Structure definition.
Definition: stm32f4xx_hal_dma.h:157