]> git.sur5r.net Git - freertos/blob - FreeRTOS/Demo/CORTEX_M7_STM32F7_STM32756G-EVAL_IAR_Keil/ST_Library/include/stm32f7xx_hal_hash.h
Final V8.2.1 release ready for tagging:
[freertos] / FreeRTOS / Demo / CORTEX_M7_STM32F7_STM32756G-EVAL_IAR_Keil / ST_Library / include / stm32f7xx_hal_hash.h
1 /**\r
2   ******************************************************************************\r
3   * @file    stm32f7xx_hal_hash.h\r
4   * @author  MCD Application Team\r
5   * @version V1.0.0RC1\r
6   * @date    24-March-2015\r
7   * @brief   Header file of HASH HAL module.\r
8   ******************************************************************************\r
9   * @attention\r
10   *\r
11   * <h2><center>&copy; COPYRIGHT(c) 2015 STMicroelectronics</center></h2>\r
12   *\r
13   * Redistribution and use in source and binary forms, with or without modification,\r
14   * are permitted provided that the following conditions are met:\r
15   *   1. Redistributions of source code must retain the above copyright notice,\r
16   *      this list of conditions and the following disclaimer.\r
17   *   2. Redistributions in binary form must reproduce the above copyright notice,\r
18   *      this list of conditions and the following disclaimer in the documentation\r
19   *      and/or other materials provided with the distribution.\r
20   *   3. Neither the name of STMicroelectronics nor the names of its contributors\r
21   *      may be used to endorse or promote products derived from this software\r
22   *      without specific prior written permission.\r
23   *\r
24   * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS"\r
25   * AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE\r
26   * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE\r
27   * DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE LIABLE\r
28   * FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL\r
29   * DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR\r
30   * SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER\r
31   * CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY,\r
32   * OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE\r
33   * OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.\r
34   *\r
35   ******************************************************************************\r
36   */\r
37 \r
38 /* Define to prevent recursive inclusion -------------------------------------*/\r
39 #ifndef __STM32F7xx_HAL_HASH_H\r
40 #define __STM32F7xx_HAL_HASH_H\r
41 \r
42 #ifdef __cplusplus\r
43  extern "C" {\r
44 #endif\r
45 \r
46 #if defined(STM32F756xx)\r
47 /* Includes ------------------------------------------------------------------*/\r
48 #include "stm32f7xx_hal_def.h"\r
49 \r
50 /** @addtogroup STM32F7xx_HAL_Driver\r
51   * @{\r
52   */\r
53 \r
54 /** @addtogroup HASH    \r
55   * @brief HASH HAL module driver \r
56   *  @{\r
57   */ \r
58 \r
59 /* Exported types ------------------------------------------------------------*/\r
60 /** @defgroup HASH_Exported_Types HASH Exported Types\r
61   * @{\r
62   */\r
63 \r
64 /** @defgroup HASH_Exported_Types_Group1 HASH Configuration Structure definition\r
65   * @{\r
66   */\r
67 \r
68 typedef struct\r
69 {\r
70   uint32_t DataType;  /*!< 32-bit data, 16-bit data, 8-bit data or 1-bit string.\r
71                            This parameter can be a value of @ref HASH DataType */\r
72 \r
73   uint32_t KeySize;   /*!< The key size is used only in HMAC operation          */\r
74 \r
75   uint8_t* pKey;      /*!< The key is used only in HMAC operation               */\r
76 }HASH_InitTypeDef;\r
77 \r
78 /** \r
79   * @}\r
80   */\r
81 \r
82 /** @defgroup HASH_Exported_Types_Group2 HASH State structures definition\r
83   * @{\r
84   */\r
85 \r
86 typedef enum\r
87 {\r
88   HAL_HASH_STATE_RESET     = 0x00,  /*!< HASH not yet initialized or disabled */\r
89   HAL_HASH_STATE_READY     = 0x01,  /*!< HASH initialized and ready for use   */\r
90   HAL_HASH_STATE_BUSY      = 0x02,  /*!< HASH internal process is ongoing     */\r
91   HAL_HASH_STATE_TIMEOUT   = 0x03,  /*!< HASH timeout state                   */\r
92   HAL_HASH_STATE_ERROR     = 0x04   /*!< HASH error state                     */\r
93 }HAL_HASH_STATETypeDef;\r
94 \r
95 /** \r
96   * @}\r
97   */\r
98   \r
99 /** @defgroup HASH_Exported_Types_Group3 HASH phase structures definition\r
100   * @{\r
101   */\r
102   \r
103 typedef enum\r
104 {\r
105   HAL_HASH_PHASE_READY     = 0x01,  /*!< HASH peripheral is ready for initialization */\r
106   HAL_HASH_PHASE_PROCESS   = 0x02,  /*!< HASH peripheral is in processing phase      */\r
107 }HAL_HASHPhaseTypeDef;\r
108 \r
109 /** \r
110   * @}\r
111   */\r
112  \r
113 /** @defgroup HASH_Exported_Types_Group4 HASH Handle structures definition\r
114   * @{\r
115   */ \r
116   \r
117 typedef struct\r
118 {\r
119       HASH_InitTypeDef           Init;              /*!< HASH required parameters       */\r
120 \r
121       uint8_t                    *pHashInBuffPtr;   /*!< Pointer to input buffer        */\r
122 \r
123       uint8_t                    *pHashOutBuffPtr;  /*!< Pointer to input buffer        */\r
124 \r
125      __IO uint32_t               HashBuffSize;      /*!< Size of buffer to be processed */\r
126 \r
127      __IO uint32_t               HashInCount;       /*!< Counter of inputed data        */\r
128 \r
129      __IO uint32_t               HashITCounter;     /*!< Counter of issued interrupts   */\r
130 \r
131       HAL_StatusTypeDef          Status;            /*!< HASH peripheral status         */\r
132 \r
133       HAL_HASHPhaseTypeDef       Phase;             /*!< HASH peripheral phase          */\r
134 \r
135       DMA_HandleTypeDef          *hdmain;           /*!< HASH In DMA handle parameters  */\r
136 \r
137       HAL_LockTypeDef            Lock;              /*!< HASH locking object            */\r
138 \r
139      __IO HAL_HASH_STATETypeDef  State;             /*!< HASH peripheral state          */\r
140 } HASH_HandleTypeDef;\r
141 \r
142 /** \r
143   * @}\r
144   */\r
145   \r
146 \r
147 /**\r
148   * @}\r
149   */ \r
150   \r
151 /* Exported constants --------------------------------------------------------*/\r
152 /** @defgroup HASH_Exported_Constants HASH Exported Constants\r
153   * @{\r
154   */\r
155 \r
156 /** @defgroup HASH_Exported_Constants_Group1 HASH Algorithm Selection\r
157   * @{\r
158   */\r
159 #define HASH_ALGOSELECTION_SHA1      ((uint32_t)0x0000)  /*!< HASH function is SHA1   */\r
160 #define HASH_ALGOSELECTION_SHA224    HASH_CR_ALGO_1      /*!< HASH function is SHA224 */\r
161 #define HASH_ALGOSELECTION_SHA256    HASH_CR_ALGO        /*!< HASH function is SHA256 */\r
162 #define HASH_ALGOSELECTION_MD5       HASH_CR_ALGO_0      /*!< HASH function is MD5    */\r
163 /**\r
164   * @}\r
165   */\r
166 \r
167 /** @defgroup HASH_Exported_Constants_Group2 HASH Algorithm Mode\r
168   * @{\r
169   */\r
170 #define HASH_ALGOMODE_HASH         ((uint32_t)0x00000000)  /*!< Algorithm is HASH */ \r
171 #define HASH_ALGOMODE_HMAC         HASH_CR_MODE            /*!< Algorithm is HMAC */\r
172 /**\r
173   * @}\r
174   */\r
175 \r
176 /** @defgroup HASH_Exported_Constants_Group3 HASH DataType\r
177   * @{\r
178   */\r
179 #define HASH_DATATYPE_32B          ((uint32_t)0x0000) /*!< 32-bit data. No swapping                     */\r
180 #define HASH_DATATYPE_16B          HASH_CR_DATATYPE_0 /*!< 16-bit data. Each half word is swapped       */\r
181 #define HASH_DATATYPE_8B           HASH_CR_DATATYPE_1 /*!< 8-bit data. All bytes are swapped            */\r
182 #define HASH_DATATYPE_1B           HASH_CR_DATATYPE   /*!< 1-bit data. In the word all bits are swapped */\r
183 /**\r
184   * @}\r
185   */\r
186 \r
187 /** @defgroup HASH_Exported_Constants_Group4 HASH HMAC Long key \r
188   * @brief HASH HMAC Long key used only for HMAC mode\r
189   * @{\r
190   */\r
191 #define HASH_HMAC_KEYTYPE_SHORTKEY      ((uint32_t)0x00000000)  /*!< HMAC Key is <= 64 bytes */\r
192 #define HASH_HMAC_KEYTYPE_LONGKEY       HASH_CR_LKEY            /*!< HMAC Key is > 64 bytes  */\r
193 /**\r
194   * @}\r
195   */\r
196 \r
197 /** @defgroup HASH_Exported_Constants_Group5 HASH Flags definition \r
198   * @{\r
199   */\r
200 #define HASH_FLAG_DINIS            HASH_SR_DINIS  /*!< 16 locations are free in the DIN : A new block can be entered into the input buffer */\r
201 #define HASH_FLAG_DCIS             HASH_SR_DCIS   /*!< Digest calculation complete                                                         */\r
202 #define HASH_FLAG_DMAS             HASH_SR_DMAS   /*!< DMA interface is enabled (DMAE=1) or a transfer is ongoing                          */\r
203 #define HASH_FLAG_BUSY             HASH_SR_BUSY   /*!< The hash core is Busy : processing a block of data                                  */\r
204 #define HASH_FLAG_DINNE            HASH_CR_DINNE  /*!< DIN not empty : The input buffer contains at least one word of data                 */\r
205 /**\r
206   * @}\r
207   */\r
208 \r
209 /** @defgroup HASH_Exported_Constants_Group6 HASH Interrupts definition \r
210   * @{\r
211   */\r
212 #define HASH_IT_DINI               HASH_IMR_DINIM  /*!< A new block can be entered into the input buffer (DIN) */\r
213 #define HASH_IT_DCI                HASH_IMR_DCIM   /*!< Digest calculation complete                            */\r
214 /**\r
215   * @}\r
216   */\r
217 \r
218 /**\r
219   * @}\r
220   */\r
221 \r
222 /* Exported macro ------------------------------------------------------------*/\r
223 /** @defgroup HASH_Exported_Macros HASH Exported Macros\r
224   * @{\r
225   */\r
226   \r
227 /** @brief Reset HASH handle state\r
228   * @param  __HANDLE__: specifies the HASH handle.\r
229   * @retval None\r
230   */\r
231 #define __HAL_HASH_RESET_HANDLE_STATE(__HANDLE__) ((__HANDLE__)->State = HAL_HASH_STATE_RESET)\r
232 \r
233 /** @brief  Check whether the specified HASH flag is set or not.\r
234   * @param  __FLAG__: specifies the flag to check.\r
235   *         This parameter can be one of the following values:\r
236   *            @arg HASH_FLAG_DINIS: A new block can be entered into the input buffer. \r
237   *            @arg HASH_FLAG_DCIS: Digest calculation complete\r
238   *            @arg HASH_FLAG_DMAS: DMA interface is enabled (DMAE=1) or a transfer is ongoing\r
239   *            @arg HASH_FLAG_BUSY: The hash core is Busy : processing a block of data\r
240   *            @arg HASH_FLAG_DINNE: DIN not empty : The input buffer contains at least one word of data\r
241   * @retval The new state of __FLAG__ (TRUE or FALSE).\r
242   */\r
243 #define __HAL_HASH_GET_FLAG(__FLAG__) ((HASH->SR & (__FLAG__)) == (__FLAG__))\r
244 \r
245 /**\r
246   * @brief  Enable the multiple DMA mode. \r
247   *         This feature is available only in STM32F429x and STM32F439x devices.\r
248   * @retval None\r
249   */\r
250 #define __HAL_HASH_SET_MDMAT()          HASH->CR |= HASH_CR_MDMAT\r
251 \r
252 /**\r
253   * @brief  Disable the multiple DMA mode.\r
254   * @retval None\r
255   */\r
256 #define __HAL_HASH_RESET_MDMAT()        HASH->CR &= (uint32_t)(~HASH_CR_MDMAT)\r
257 \r
258 /**\r
259   * @brief  Start the digest computation\r
260   * @retval None\r
261   */\r
262 #define __HAL_HASH_START_DIGEST()       HASH->STR |= HASH_STR_DCAL\r
263 \r
264 /**\r
265   * @brief Set the number of valid bits in last word written in Data register\r
266   * @param  SIZE: size in byte of last data written in Data register.\r
267   * @retval None\r
268 */\r
269 #define __HAL_HASH_SET_NBVALIDBITS(SIZE) do{HASH->STR &= ~(HASH_STR_NBW);\\r
270                                             HASH->STR |= 8 * ((SIZE) % 4);\\r
271                                            }while(0)\r
272 \r
273 /**\r
274   * @}\r
275   */ \r
276 \r
277 /* Include HASH HAL Extension module */\r
278 #include "stm32f7xx_hal_hash_ex.h"\r
279 /* Exported functions --------------------------------------------------------*/\r
280 \r
281 /** @defgroup HASH_Exported_Functions HASH Exported Functions\r
282   * @{\r
283   */\r
284 \r
285 /** @addtogroup HASH_Exported_Functions_Group1\r
286   * @{\r
287   */  \r
288 HAL_StatusTypeDef HAL_HASH_Init(HASH_HandleTypeDef *hhash);\r
289 HAL_StatusTypeDef HAL_HASH_DeInit(HASH_HandleTypeDef *hhash);\r
290 /**\r
291   * @}\r
292   */ \r
293 \r
294 /** @addtogroup HASH_Exported_Functions_Group2\r
295   * @{\r
296   */  \r
297 HAL_StatusTypeDef HAL_HASH_SHA1_Start(HASH_HandleTypeDef *hhash, uint8_t *pInBuffer, uint32_t Size, uint8_t* pOutBuffer, uint32_t Timeout);\r
298 HAL_StatusTypeDef HAL_HASH_MD5_Start(HASH_HandleTypeDef *hhash, uint8_t *pInBuffer, uint32_t Size, uint8_t* pOutBuffer, uint32_t Timeout);\r
299 HAL_StatusTypeDef HAL_HASH_MD5_Accumulate(HASH_HandleTypeDef *hhash, uint8_t *pInBuffer, uint32_t Size);\r
300 HAL_StatusTypeDef HAL_HASH_SHA1_Accumulate(HASH_HandleTypeDef *hhash, uint8_t *pInBuffer, uint32_t Size);\r
301 /**\r
302   * @}\r
303   */ \r
304   \r
305 /** @addtogroup HASH_Exported_Functions_Group3\r
306   * @{\r
307   */  \r
308 HAL_StatusTypeDef HAL_HMAC_SHA1_Start(HASH_HandleTypeDef *hhash, uint8_t *pInBuffer, uint32_t Size, uint8_t* pOutBuffer, uint32_t Timeout);\r
309 HAL_StatusTypeDef HAL_HMAC_MD5_Start(HASH_HandleTypeDef *hhash, uint8_t *pInBuffer, uint32_t Size, uint8_t* pOutBuffer, uint32_t Timeout);\r
310 /**\r
311   * @}\r
312   */ \r
313 \r
314 /** @addtogroup HASH_Exported_Functions_Group4\r
315   * @{\r
316   */  \r
317 HAL_StatusTypeDef HAL_HASH_SHA1_Start_IT(HASH_HandleTypeDef *hhash, uint8_t *pInBuffer, uint32_t Size, uint8_t* pOutBuffer);\r
318 HAL_StatusTypeDef HAL_HASH_MD5_Start_IT(HASH_HandleTypeDef *hhash, uint8_t *pInBuffer, uint32_t Size, uint8_t* pOutBuffer);\r
319 /**\r
320   * @}\r
321   */ \r
322 \r
323 /** @addtogroup HASH_Exported_Functions_Group5\r
324   * @{\r
325   */    \r
326 HAL_StatusTypeDef HAL_HASH_SHA1_Start_DMA(HASH_HandleTypeDef *hhash, uint8_t *pInBuffer, uint32_t Size);\r
327 HAL_StatusTypeDef HAL_HASH_SHA1_Finish(HASH_HandleTypeDef *hhash, uint8_t* pOutBuffer, uint32_t Timeout);\r
328 HAL_StatusTypeDef HAL_HASH_MD5_Start_DMA(HASH_HandleTypeDef *hhash, uint8_t *pInBuffer, uint32_t Size);\r
329 HAL_StatusTypeDef HAL_HASH_MD5_Finish(HASH_HandleTypeDef *hhash, uint8_t* pOutBuffer, uint32_t Timeout);\r
330 /**\r
331   * @}\r
332   */ \r
333 \r
334 /** @addtogroup HASH_Exported_Functions_Group6\r
335   * @{\r
336   */  \r
337 HAL_StatusTypeDef HAL_HMAC_SHA1_Start_DMA(HASH_HandleTypeDef *hhash, uint8_t *pInBuffer, uint32_t Size);\r
338 HAL_StatusTypeDef HAL_HMAC_MD5_Start_DMA(HASH_HandleTypeDef *hhash, uint8_t *pInBuffer, uint32_t Size);\r
339 /**\r
340   * @}\r
341   */ \r
342 \r
343 /** @addtogroup HASH_Exported_Functions_Group7\r
344   * @{\r
345   */  \r
346 void HAL_HASH_IRQHandler(HASH_HandleTypeDef *hhash);\r
347 /**\r
348   * @}\r
349   */ \r
350 \r
351 /** @addtogroup HASH_Exported_Functions_Group8\r
352   * @{\r
353   */\r
354 HAL_HASH_STATETypeDef HAL_HASH_GetState(HASH_HandleTypeDef *hhash);\r
355 void HAL_HASH_MspInit(HASH_HandleTypeDef *hhash);\r
356 void HAL_HASH_MspDeInit(HASH_HandleTypeDef *hhash);\r
357 void HAL_HASH_InCpltCallback(HASH_HandleTypeDef *hhash);\r
358 void HAL_HASH_DgstCpltCallback(HASH_HandleTypeDef *hhash);\r
359 void HAL_HASH_ErrorCallback(HASH_HandleTypeDef *hhash);\r
360 /**\r
361   * @}\r
362   */ \r
363   \r
364  /**\r
365   * @}\r
366   */ \r
367  \r
368  /* Private types -------------------------------------------------------------*/\r
369 /** @defgroup HASH_Private_Types HASH Private Types\r
370   * @{\r
371   */\r
372 \r
373 /**\r
374   * @}\r
375   */ \r
376 \r
377 /* Private variables ---------------------------------------------------------*/\r
378 /** @defgroup HASH_Private_Variables HASH Private Variables\r
379   * @{\r
380   */\r
381 \r
382 /**\r
383   * @}\r
384   */ \r
385 \r
386 /* Private constants ---------------------------------------------------------*/\r
387 /** @defgroup HASH_Private_Constants HASH Private Constants\r
388   * @{\r
389   */\r
390 \r
391 /**\r
392   * @}\r
393   */ \r
394 \r
395 /* Private macros ------------------------------------------------------------*/\r
396 /** @defgroup HASH_Private_Macros HASH Private Macros\r
397   * @{\r
398   */\r
399 #define IS_HASH_ALGOSELECTION(__ALGOSELECTION__) (((__ALGOSELECTION__) == HASH_ALGOSELECTION_SHA1)   || \\r
400                                                   ((__ALGOSELECTION__) == HASH_ALGOSELECTION_SHA224) || \\r
401                                                   ((__ALGOSELECTION__) == HASH_ALGOSELECTION_SHA256) || \\r
402                                                   ((__ALGOSELECTION__) == HASH_ALGOSELECTION_MD5))\r
403 \r
404 \r
405 #define IS_HASH_ALGOMODE(__ALGOMODE__) (((__ALGOMODE__) == HASH_ALGOMODE_HASH) || \\r
406                                         ((__ALGOMODE__) == HASH_ALGOMODE_HMAC))\r
407 \r
408 \r
409 #define IS_HASH_DATATYPE(__DATATYPE__) (((__DATATYPE__) == HASH_DATATYPE_32B)|| \\r
410                                         ((__DATATYPE__) == HASH_DATATYPE_16B)|| \\r
411                                         ((__DATATYPE__) == HASH_DATATYPE_8B) || \\r
412                                         ((__DATATYPE__) == HASH_DATATYPE_1B))\r
413 \r
414 \r
415 #define IS_HASH_HMAC_KEYTYPE(__KEYTYPE__) (((__KEYTYPE__) == HASH_HMAC_KEYTYPE_SHORTKEY) || \\r
416                                            ((__KEYTYPE__) == HASH_HMAC_KEYTYPE_LONGKEY))\r
417 \r
418 /**\r
419   * @}\r
420   */ \r
421 \r
422 /* Private functions ---------------------------------------------------------*/\r
423 /** @defgroup HASH_Private_Functions HASH Private Functions\r
424   * @{\r
425   */\r
426 \r
427 /**\r
428   * @}\r
429   */\r
430  \r
431 #endif /* STM32F756xx */\r
432 /**\r
433   * @}\r
434   */ \r
435 \r
436 /**\r
437   * @}\r
438   */\r
439   \r
440 #ifdef __cplusplus\r
441 }\r
442 #endif\r
443 \r
444 \r
445 #endif /* __STM32F7xx_HAL_HASH_H */\r
446 \r
447 /************************ (C) COPYRIGHT STMicroelectronics *****END OF FILE****/\r