]> git.sur5r.net Git - freertos/blob - FreeRTOS/Demo/CORTEX_M7_STM32F7_STM32756G-EVAL/ST_Library/include/stm32f7xx_hal_hash.h
Update version number ready for V8.2.1 release.
[freertos] / FreeRTOS / Demo / CORTEX_M7_STM32F7_STM32756G-EVAL / 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 V0.3.0\r
6   * @date    06-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  Macros for HMAC finish.\r
247   * @param  None\r
248   * @retval None\r
249   */\r
250 #define HAL_HMAC_MD5_Finish          HAL_HASH_MD5_Finish\r
251 #define HAL_HMAC_SHA1_Finish         HAL_HASH_SHA1_Finish\r
252 #define HAL_HMAC_SHA224_Finish       HAL_HASH_SHA224_Finish\r
253 #define HAL_HMAC_SHA256_Finish       HAL_HASH_SHA256_Finish\r
254 \r
255 /**\r
256   * @brief  Enable the multiple DMA mode. \r
257   *         This feature is available only in STM32F429x and STM32F439x devices.\r
258   * @retval None\r
259   */\r
260 #define __HAL_HASH_SET_MDMAT()          HASH->CR |= HASH_CR_MDMAT\r
261 \r
262 /**\r
263   * @brief  Disable the multiple DMA mode.\r
264   * @retval None\r
265   */\r
266 #define __HAL_HASH_RESET_MDMAT()        HASH->CR &= (uint32_t)(~HASH_CR_MDMAT)\r
267 \r
268 /**\r
269   * @brief  Start the digest computation\r
270   * @retval None\r
271   */\r
272 #define __HAL_HASH_START_DIGEST()       HASH->STR |= HASH_STR_DCAL\r
273 \r
274 /**\r
275   * @brief Set the number of valid bits in last word written in Data register\r
276   * @param  SIZE: size in byte of last data written in Data register.\r
277   * @retval None\r
278 */\r
279 #define __HAL_HASH_SET_NBVALIDBITS(SIZE) do{HASH->STR &= ~(HASH_STR_NBW);\\r
280                                             HASH->STR |= 8 * ((SIZE) % 4);\\r
281                                            }while(0)\r
282 \r
283 /**\r
284   * @}\r
285   */ \r
286 \r
287 /* Include HASH HAL Extension module */\r
288 #include "stm32f7xx_hal_hash_ex.h"\r
289 /* Exported functions --------------------------------------------------------*/\r
290 \r
291 /** @defgroup HASH_Exported_Functions HASH Exported Functions\r
292   * @{\r
293   */\r
294 \r
295 /** @addtogroup HASH_Exported_Functions_Group1\r
296   * @{\r
297   */  \r
298 HAL_StatusTypeDef HAL_HASH_Init(HASH_HandleTypeDef *hhash);\r
299 HAL_StatusTypeDef HAL_HASH_DeInit(HASH_HandleTypeDef *hhash);\r
300 /**\r
301   * @}\r
302   */ \r
303 \r
304 /** @addtogroup HASH_Exported_Functions_Group2\r
305   * @{\r
306   */  \r
307 HAL_StatusTypeDef HAL_HASH_SHA1_Start(HASH_HandleTypeDef *hhash, uint8_t *pInBuffer, uint32_t Size, uint8_t* pOutBuffer, uint32_t Timeout);\r
308 HAL_StatusTypeDef HAL_HASH_MD5_Start(HASH_HandleTypeDef *hhash, uint8_t *pInBuffer, uint32_t Size, uint8_t* pOutBuffer, uint32_t Timeout);\r
309 HAL_StatusTypeDef HAL_HASH_MD5_Accumulate(HASH_HandleTypeDef *hhash, uint8_t *pInBuffer, uint32_t Size);\r
310 HAL_StatusTypeDef HAL_HASH_SHA1_Accumulate(HASH_HandleTypeDef *hhash, uint8_t *pInBuffer, uint32_t Size);\r
311 /**\r
312   * @}\r
313   */ \r
314   \r
315 /** @addtogroup HASH_Exported_Functions_Group3\r
316   * @{\r
317   */  \r
318 HAL_StatusTypeDef HAL_HMAC_SHA1_Start(HASH_HandleTypeDef *hhash, uint8_t *pInBuffer, uint32_t Size, uint8_t* pOutBuffer, uint32_t Timeout);\r
319 HAL_StatusTypeDef HAL_HMAC_MD5_Start(HASH_HandleTypeDef *hhash, uint8_t *pInBuffer, uint32_t Size, uint8_t* pOutBuffer, uint32_t Timeout);\r
320 /**\r
321   * @}\r
322   */ \r
323 \r
324 /** @addtogroup HASH_Exported_Functions_Group4\r
325   * @{\r
326   */  \r
327 HAL_StatusTypeDef HAL_HASH_SHA1_Start_IT(HASH_HandleTypeDef *hhash, uint8_t *pInBuffer, uint32_t Size, uint8_t* pOutBuffer);\r
328 HAL_StatusTypeDef HAL_HASH_MD5_Start_IT(HASH_HandleTypeDef *hhash, uint8_t *pInBuffer, uint32_t Size, uint8_t* pOutBuffer);\r
329 /**\r
330   * @}\r
331   */ \r
332 \r
333 /** @addtogroup HASH_Exported_Functions_Group5\r
334   * @{\r
335   */    \r
336 HAL_StatusTypeDef HAL_HASH_SHA1_Start_DMA(HASH_HandleTypeDef *hhash, uint8_t *pInBuffer, uint32_t Size);\r
337 HAL_StatusTypeDef HAL_HASH_SHA1_Finish(HASH_HandleTypeDef *hhash, uint8_t* pOutBuffer, uint32_t Timeout);\r
338 HAL_StatusTypeDef HAL_HASH_MD5_Start_DMA(HASH_HandleTypeDef *hhash, uint8_t *pInBuffer, uint32_t Size);\r
339 HAL_StatusTypeDef HAL_HASH_MD5_Finish(HASH_HandleTypeDef *hhash, uint8_t* pOutBuffer, uint32_t Timeout);\r
340 /**\r
341   * @}\r
342   */ \r
343 \r
344 /** @addtogroup HASH_Exported_Functions_Group6\r
345   * @{\r
346   */  \r
347 HAL_StatusTypeDef HAL_HMAC_SHA1_Start_DMA(HASH_HandleTypeDef *hhash, uint8_t *pInBuffer, uint32_t Size);\r
348 HAL_StatusTypeDef HAL_HMAC_MD5_Start_DMA(HASH_HandleTypeDef *hhash, uint8_t *pInBuffer, uint32_t Size);\r
349 /**\r
350   * @}\r
351   */ \r
352 \r
353 /** @addtogroup HASH_Exported_Functions_Group7\r
354   * @{\r
355   */  \r
356 void HAL_HASH_IRQHandler(HASH_HandleTypeDef *hhash);\r
357 /**\r
358   * @}\r
359   */ \r
360 \r
361 /** @addtogroup HASH_Exported_Functions_Group8\r
362   * @{\r
363   */\r
364 HAL_HASH_STATETypeDef HAL_HASH_GetState(HASH_HandleTypeDef *hhash);\r
365 void HAL_HASH_MspInit(HASH_HandleTypeDef *hhash);\r
366 void HAL_HASH_MspDeInit(HASH_HandleTypeDef *hhash);\r
367 void HAL_HASH_InCpltCallback(HASH_HandleTypeDef *hhash);\r
368 void HAL_HASH_DgstCpltCallback(HASH_HandleTypeDef *hhash);\r
369 void HAL_HASH_ErrorCallback(HASH_HandleTypeDef *hhash);\r
370 /**\r
371   * @}\r
372   */ \r
373   \r
374  /**\r
375   * @}\r
376   */ \r
377  \r
378  /* Private types -------------------------------------------------------------*/\r
379 /** @defgroup HASH_Private_Types HASH Private Types\r
380   * @{\r
381   */\r
382 \r
383 /**\r
384   * @}\r
385   */ \r
386 \r
387 /* Private variables ---------------------------------------------------------*/\r
388 /** @defgroup HASH_Private_Variables HASH Private Variables\r
389   * @{\r
390   */\r
391 \r
392 /**\r
393   * @}\r
394   */ \r
395 \r
396 /* Private constants ---------------------------------------------------------*/\r
397 /** @defgroup HASH_Private_Constants HASH Private Constants\r
398   * @{\r
399   */\r
400 \r
401 /**\r
402   * @}\r
403   */ \r
404 \r
405 /* Private macros ------------------------------------------------------------*/\r
406 /** @defgroup HASH_Private_Macros HASH Private Macros\r
407   * @{\r
408   */\r
409 #define IS_HASH_ALGOSELECTION(__ALGOSELECTION__) (((__ALGOSELECTION__) == HASH_ALGOSELECTION_SHA1)   || \\r
410                                                   ((__ALGOSELECTION__) == HASH_ALGOSELECTION_SHA224) || \\r
411                                                   ((__ALGOSELECTION__) == HASH_ALGOSELECTION_SHA256) || \\r
412                                                   ((__ALGOSELECTION__) == HASH_ALGOSELECTION_MD5))\r
413 \r
414 \r
415 #define IS_HASH_ALGOMODE(__ALGOMODE__) (((__ALGOMODE__) == HASH_ALGOMODE_HASH) || \\r
416                                         ((__ALGOMODE__) == HASH_ALGOMODE_HMAC))\r
417 \r
418 \r
419 #define IS_HASH_DATATYPE(__DATATYPE__) (((__DATATYPE__) == HASH_DATATYPE_32B)|| \\r
420                                         ((__DATATYPE__) == HASH_DATATYPE_16B)|| \\r
421                                         ((__DATATYPE__) == HASH_DATATYPE_8B) || \\r
422                                         ((__DATATYPE__) == HASH_DATATYPE_1B))\r
423 \r
424 \r
425 #define IS_HASH_HMAC_KEYTYPE(__KEYTYPE__) (((__KEYTYPE__) == HASH_HMAC_KEYTYPE_SHORTKEY) || \\r
426                                            ((__KEYTYPE__) == HASH_HMAC_KEYTYPE_LONGKEY))\r
427 \r
428 /**\r
429   * @}\r
430   */ \r
431 \r
432 /* Private functions ---------------------------------------------------------*/\r
433 /** @defgroup HASH_Private_Functions HASH Private Functions\r
434   * @{\r
435   */\r
436 \r
437 /**\r
438   * @}\r
439   */\r
440  \r
441 #endif /* STM32F756xx */\r
442 /**\r
443   * @}\r
444   */ \r
445 \r
446 /**\r
447   * @}\r
448   */\r
449   \r
450 #ifdef __cplusplus\r
451 }\r
452 #endif\r
453 \r
454 \r
455 #endif /* __STM32F7xx_HAL_HASH_H */\r
456 \r
457 /************************ (C) COPYRIGHT STMicroelectronics *****END OF FILE****/\r