1 /**
2   ******************************************************************************
3   * @file    stm32wlxx_hal_cryp.h
4   * @author  MCD Application Team
5   * @brief   Header file of CRYP HAL module.
6   ******************************************************************************
7   * @attention
8   *
9   * Copyright (c) 2020 STMicroelectronics.
10   * All rights reserved.
11   *
12   * This software is licensed under terms that can be found in the LICENSE file
13   * in the root directory of this software component.
14   * If no LICENSE file comes with this software, it is provided AS-IS.
15   *
16   ******************************************************************************
17   */
18 
19 /* Define to prevent recursive inclusion -------------------------------------*/
20 #ifndef STM32WLxx_HAL_CRYP_H
21 #define STM32WLxx_HAL_CRYP_H
22 
23 #ifdef __cplusplus
24 extern "C" {
25 #endif
26 
27 /* Includes ------------------------------------------------------------------*/
28 #include "stm32wlxx_hal_def.h"
29 
30 /** @addtogroup STM32WLxx_HAL_Driver
31   * @{
32   */
33 
34 
35 
36 /** @defgroup CRYP CRYP
37   * @brief CRYP HAL module driver.
38   * @{
39   */
40 
41 /* Exported types ------------------------------------------------------------*/
42 
43 /** @defgroup CRYP_Exported_Types CRYP Exported Types
44   * @{
45   */
46 
47 /**
48   * @brief CRYP Init Structure definition
49   */
50 
51 typedef struct
52 {
53   uint32_t DataType;                   /*!< 32-bit data, 16-bit data, 8-bit data or 1-bit string.
54                                         This parameter can be a value of @ref CRYP_Data_Type */
55   uint32_t KeySize;                    /*!< Used only in AES mode : 128, 192 or 256 bit key length in CRYP1.
56                                         128 or 256 bit key length in TinyAES This parameter can be a value of @ref CRYP_Key_Size */
57   uint32_t *pKey;                      /*!< The key used for encryption/decryption */
58   uint32_t *pInitVect;                 /*!< The initialization vector used also as initialization
59                                          counter in CTR mode */
60   uint32_t Algorithm;                  /*!<  DES/ TDES Algorithm ECB/CBC
61                                         AES Algorithm ECB/CBC/CTR/GCM or CCM
62                                         This parameter can be a value of @ref CRYP_Algorithm_Mode */
63   uint32_t *Header;                    /*!< used only in AES GCM and CCM Algorithm for authentication,
64                                         GCM : also known as Additional Authentication Data
65                                         CCM : named B1 composed of the associated data length and Associated Data. */
66   uint32_t HeaderSize;                 /*!< The size of header buffer */
67   uint32_t *B0;                        /*!< B0 is first authentication block used only  in AES CCM mode */
68   uint32_t DataWidthUnit;              /*!< Payload Data Width Unit, this parameter can be value of @ref CRYP_Data_Width_Unit*/
69   uint32_t HeaderWidthUnit;            /*!< Header Width Unit, this parameter can be value of @ref CRYP_Header_Width_Unit*/
70   uint32_t KeyIVConfigSkip;            /*!< CRYP peripheral Key and IV configuration skip, to config Key and Initialization
71                                            Vector only once and to skip configuration for consecutive processings.
72                                            This parameter can be a value of @ref CRYP_Configuration_Skip */
73 
74 } CRYP_ConfigTypeDef;
75 
76 
77 /**
78   * @brief  CRYP State Structure definition
79   */
80 
81 typedef enum
82 {
83   HAL_CRYP_STATE_RESET             = 0x00U,  /*!< CRYP not yet initialized or disabled  */
84   HAL_CRYP_STATE_READY             = 0x01U,  /*!< CRYP initialized and ready for use    */
85   HAL_CRYP_STATE_BUSY              = 0x02U,  /*!< CRYP BUSY, internal processing is ongoing  */
86 #if (USE_HAL_CRYP_SUSPEND_RESUME == 1U)
87   HAL_CRYP_STATE_SUSPENDED         = 0x03U,   /*!< CRYP suspended                        */
88 #endif /* USE_HAL_CRYP_SUSPEND_RESUME */
89 } HAL_CRYP_STATETypeDef;
90 
91 #if (USE_HAL_CRYP_SUSPEND_RESUME == 1U)
92 /**
93   * @brief HAL CRYP mode suspend definitions
94   */
95 typedef enum
96 {
97   HAL_CRYP_SUSPEND_NONE            = 0x00U,    /*!< CRYP processing suspension not requested */
98   HAL_CRYP_SUSPEND                 = 0x01U     /*!< CRYP processing suspension requested     */
99 }HAL_SuspendTypeDef;
100 #endif /* USE_HAL_CRYP_SUSPEND_RESUME */
101 
102 /**
103   * @brief  CRYP handle Structure definition
104   */
105 #if (USE_HAL_CRYP_REGISTER_CALLBACKS == 1)
106 typedef struct __CRYP_HandleTypeDef
107 #else
108 typedef struct
109 #endif /* USE_HAL_CRYP_REGISTER_CALLBACKS */
110 {
111   AES_TypeDef                       *Instance;        /*!< AES Register base address */
112 
113   CRYP_ConfigTypeDef                Init;             /*!< CRYP required parameters */
114 
115   FunctionalState                   AutoKeyDerivation;   /*!< Used only in TinyAES to allow to bypass or not key write-up before decryption.
116                                                          This parameter can be a value of ENABLE/DISABLE */
117 
118   uint32_t                          *pCrypInBuffPtr;  /*!< Pointer to CRYP processing (encryption, decryption,...) buffer */
119 
120   uint32_t                          *pCrypOutBuffPtr; /*!< Pointer to CRYP processing (encryption, decryption,...) buffer */
121 
122   __IO uint16_t                     CrypHeaderCount;  /*!< Counter of header data in words */
123 
124   __IO uint16_t                     CrypInCount;      /*!< Counter of input data in words */
125 
126   __IO uint16_t                     CrypOutCount;     /*!< Counter of output data in words */
127 
128   uint16_t                          Size;             /*!< Length of input data */
129 
130   uint32_t                          Phase;            /*!< CRYP peripheral phase */
131 
132   DMA_HandleTypeDef                 *hdmain;          /*!< CRYP In DMA handle parameters */
133 
134   DMA_HandleTypeDef                 *hdmaout;         /*!< CRYP Out DMA handle parameters */
135 
136   HAL_LockTypeDef                   Lock;             /*!< CRYP locking object */
137 
138   __IO  HAL_CRYP_STATETypeDef       State;            /*!< CRYP peripheral state */
139 
140   __IO uint32_t                     ErrorCode;        /*!< CRYP peripheral error code */
141 
142   uint32_t                          KeyIVConfig;      /*!< CRYP peripheral Key and IV configuration flag, used when
143                                                            configuration can be skipped */
144 
145   uint32_t                          SizesSum;         /*!< Sum of successive payloads lengths (in bytes), stored
146                                                            for a single signature computation after several
147                                                            messages processing */
148 
149 #if (USE_HAL_CRYP_REGISTER_CALLBACKS == 1U)
150   void (*InCpltCallback)(struct __CRYP_HandleTypeDef *hcryp);      /*!< CRYP Input FIFO transfer completed callback  */
151   void (*OutCpltCallback)(struct __CRYP_HandleTypeDef *hcryp);     /*!< CRYP Output FIFO transfer completed callback */
152   void (*ErrorCallback)(struct __CRYP_HandleTypeDef *hcryp);       /*!< CRYP Error callback */
153 
154   void (* MspInitCallback)(struct __CRYP_HandleTypeDef *hcryp);    /*!< CRYP Msp Init callback  */
155   void (* MspDeInitCallback)(struct __CRYP_HandleTypeDef *hcryp);  /*!< CRYP Msp DeInit callback  */
156 
157 #endif /* (USE_HAL_CRYP_REGISTER_CALLBACKS) */
158 
159 #if (USE_HAL_CRYP_SUSPEND_RESUME == 1U)
160 
161   __IO HAL_SuspendTypeDef     SuspendRequest;          /*!< CRYP peripheral suspension request flag */
162 
163   CRYP_ConfigTypeDef          Init_saved;              /*!< copy of CRYP required parameters when processing is suspended */
164 
165   uint32_t                    *pCrypInBuffPtr_saved;   /*!< copy of CRYP input pointer when processing is suspended */
166 
167   uint32_t                    *pCrypOutBuffPtr_saved;  /*!< copy of CRYP output pointer when processing is suspended */
168 
169   uint32_t                    CrypInCount_saved;       /*!< copy of CRYP input data counter when processing is suspended */
170 
171   uint32_t                    CrypOutCount_saved;      /*!< copy of CRYP output data counter when processing is suspended */
172 
173   uint32_t                    Phase_saved;             /*!< copy of CRYP authentication phase when processing is suspended */
174 
175   __IO HAL_CRYP_STATETypeDef  State_saved;             /*!< copy of CRYP peripheral state when processing is suspended */
176 
177   uint32_t                    IV_saved[4];             /*!< copy of Initialisation Vector registers */
178 
179   uint32_t                    SUSPxR_saved[8];         /*!< copy of suspension registers */
180 
181   uint32_t                    CR_saved;                /*!< copy of CRYP control register  when processing is suspended*/
182 
183   uint32_t                    Key_saved[8];            /*!< copy of key registers */
184 
185   uint16_t                    Size_saved;              /*!< copy of input buffer size */
186 
187   uint16_t                    CrypHeaderCount_saved;   /*!< copy of CRYP header data counter when processing is suspended */
188 
189   uint32_t                    SizesSum_saved;          /*!< copy of SizesSum when processing is suspended */
190 
191   uint32_t                    ResumingFlag;            /*!< resumption flag to bypass steps already carried out */
192 
193   FunctionalState             AutoKeyDerivation_saved; /*!< copy of CRYP handle auto key derivation parameter */
194 
195 #endif /* USE_HAL_CRYP_SUSPEND_RESUME */
196 
197 } CRYP_HandleTypeDef;
198 
199 /**
200   * @brief CRYP Context Structure definition
201   */
202 
203 typedef struct
204 {
205   uint32_t DataType;                   /*!< This parameter can be a value of @ref CRYP_Data_Type */
206   uint32_t KeySize;                    /*!< This parameter can be a value of @ref CRYP_Key_Size */
207   uint32_t *pKey;                      /*!< The key used for encryption/decryption */
208   uint32_t *pInitVect;                 /*!< The initialization vector, counter with CBC and CTR Algorithm */
209   uint32_t Algorithm;                  /*!< This parameter can be a value of @ref CRYP_Algorithm_Mode */
210   uint32_t DataWidthUnit;              /*!< This parameter can be value of @ref CRYP_Data_Width_Unit */
211   uint32_t KeyIVConfigSkip;            /*!< This parameter can be a value of @ref CRYP_Configuration_Skip */
212   uint32_t Phase;                      /*!< CRYP peripheral phase */
213   uint32_t KeyIVConfig;                /*!< CRYP peripheral Key and IV configuration flag */
214   uint32_t CR_Reg;                     /*!< CRYP CR register */
215   uint32_t IVR0_Reg;                   /*!< CRYP IVR0 register */
216   uint32_t IVR1_Reg;                   /*!< CRYP IVR1 register */
217   uint32_t IVR2_Reg;                   /*!< CRYP IVR2 register */
218   uint32_t IVR3_Reg;                   /*!< CRYP IVR3 register */
219 
220 } CRYP_ContextTypeDef;
221 
222 #if (USE_HAL_CRYP_REGISTER_CALLBACKS == 1U)
223 /** @defgroup HAL_CRYP_Callback_ID_enumeration_definition HAL CRYP Callback ID enumeration definition
224   * @brief  HAL CRYP Callback ID enumeration definition
225   * @{
226   */
227 typedef enum
228 {
229   HAL_CRYP_MSPINIT_CB_ID           = 0x00U,    /*!< CRYP MspInit callback ID                        */
230   HAL_CRYP_MSPDEINIT_CB_ID         = 0x01U,     /*!< CRYP MspDeInit callback ID                      */
231   HAL_CRYP_INPUT_COMPLETE_CB_ID    = 0x02U,    /*!< CRYP Input FIFO transfer completed callback ID  */
232   HAL_CRYP_OUTPUT_COMPLETE_CB_ID   = 0x03U,    /*!< CRYP Output FIFO transfer completed callback ID */
233   HAL_CRYP_ERROR_CB_ID             = 0x04U,    /*!< CRYP Error callback ID                          */
234 } HAL_CRYP_CallbackIDTypeDef;
235 /**
236   * @}
237   */
238 
239 /** @defgroup HAL_CRYP_Callback_pointer_definition HAL CRYP Callback pointer definition
240   * @brief  HAL CRYP Callback pointer definition
241   * @{
242   */
243 
244 typedef  void (*pCRYP_CallbackTypeDef)(CRYP_HandleTypeDef *hcryp);    /*!< pointer to a common CRYP callback function */
245 
246 /**
247   * @}
248   */
249 
250 #endif /* USE_HAL_CRYP_REGISTER_CALLBACKS */
251 
252 /**
253   * @}
254   */
255 
256 /* Exported constants --------------------------------------------------------*/
257 /** @defgroup CRYP_Exported_Constants CRYP Exported Constants
258   * @{
259   */
260 
261 /** @defgroup CRYP_Error_Definition   CRYP Error Definition
262   * @{
263   */
264 #define HAL_CRYP_ERROR_NONE              0x00000000U  /*!< No error        */
265 #define HAL_CRYP_ERROR_WRITE             0x00000001U  /*!< Write error     */
266 #define HAL_CRYP_ERROR_READ              0x00000002U  /*!< Read error      */
267 #define HAL_CRYP_ERROR_DMA               0x00000004U  /*!< DMA error       */
268 #define HAL_CRYP_ERROR_BUSY              0x00000008U  /*!< Busy flag error */
269 #define HAL_CRYP_ERROR_TIMEOUT           0x00000010U  /*!< Timeout error */
270 #define HAL_CRYP_ERROR_NOT_SUPPORTED     0x00000020U  /*!< Not supported mode */
271 #define HAL_CRYP_ERROR_AUTH_TAG_SEQUENCE 0x00000040U  /*!< Sequence are not respected only for GCM or CCM */
272 #if (USE_HAL_CRYP_REGISTER_CALLBACKS == 1U)
273 #define  HAL_CRYP_ERROR_INVALID_CALLBACK ((uint32_t)0x00000080U)    /*!< Invalid Callback error  */
274 #endif /* USE_HAL_CRYP_REGISTER_CALLBACKS */
275 
276 /**
277   * @}
278   */
279 
280 /** @defgroup CRYP_Data_Width_Unit CRYP Data Width Unit
281   * @{
282   */
283 
284 #define CRYP_DATAWIDTHUNIT_WORD   0x00000000U  /*!< By default, size unit is word */
285 #define CRYP_DATAWIDTHUNIT_BYTE   0x00000001U  /*!< By default, size unit is byte */
286 
287 /**
288   * @}
289   */
290 
291 /** @defgroup CRYP_Header_Width_Unit CRYP Header Width Unit
292   * @{
293   */
294 
295 #define CRYP_HEADERWIDTHUNIT_WORD   0x00000000U  /*!< By default, header size unit is word */
296 #define CRYP_HEADERWIDTHUNIT_BYTE   0x00000001U  /*!< By default, header size unit is byte */
297 
298 /**
299   * @}
300   */
301 
302 /** @defgroup CRYP_Algorithm_Mode CRYP Algorithm Mode
303   * @{
304   */
305 
306 #define CRYP_AES_ECB            0x00000000U                       /*!< Electronic codebook chaining algorithm                   */
307 #define CRYP_AES_CBC            AES_CR_CHMOD_0                    /*!< Cipher block chaining algorithm                          */
308 #define CRYP_AES_CTR            AES_CR_CHMOD_1                    /*!< Counter mode chaining algorithm                          */
309 #define CRYP_AES_GCM_GMAC       (AES_CR_CHMOD_0 | AES_CR_CHMOD_1) /*!< Galois counter mode - Galois message authentication code */
310 #define CRYP_AES_CCM            AES_CR_CHMOD_2                    /*!< Counter with Cipher Mode                                 */
311 
312 /**
313   * @}
314   */
315 
316 /** @defgroup CRYP_Key_Size CRYP Key Size
317   * @{
318   */
319 
320 #define CRYP_KEYSIZE_128B         0x00000000U          /*!< 128-bit long key */
321 #define CRYP_KEYSIZE_256B         AES_CR_KEYSIZE       /*!< 256-bit long key */
322 
323 /**
324   * @}
325   */
326 
327 /** @defgroup CRYP_Data_Type CRYP Data Type
328   * @{
329   */
330 
331 #define CRYP_DATATYPE_32B         0x00000000U  /*!< 32-bit data type (no swapping)        */
332 #define CRYP_DATATYPE_16B         AES_CR_DATATYPE_0       /*!< 16-bit data type (half-word swapping) */
333 #define CRYP_DATATYPE_8B          AES_CR_DATATYPE_1       /*!< 8-bit data type (byte swapping)       */
334 #define CRYP_DATATYPE_1B          AES_CR_DATATYPE         /*!< 1-bit data type (bit swapping)        */
335 
336 /**
337   * @}
338   */
339 
340 /** @defgroup CRYP_Interrupt  CRYP Interrupt
341   * @{
342   */
343 
344 #define CRYP_IT_CCFIE     AES_CR_CCFIE /*!< Computation Complete interrupt enable */
345 #define CRYP_IT_ERRIE     AES_CR_ERRIE /*!< Error interrupt enable                */
346 #define CRYP_IT_WRERR     AES_SR_WRERR  /*!< Write Error           */
347 #define CRYP_IT_RDERR     AES_SR_RDERR  /*!< Read Error            */
348 #define CRYP_IT_CCF       AES_SR_CCF    /*!< Computation completed */
349 
350 /**
351   * @}
352   */
353 
354 /** @defgroup CRYP_Flags CRYP Flags
355   * @{
356   */
357 
358 /* status flags */
359 #define CRYP_FLAG_BUSY    AES_SR_BUSY   /*!< GCM process suspension forbidden */
360 #define CRYP_FLAG_WRERR   AES_SR_WRERR  /*!< Write Error                      */
361 #define CRYP_FLAG_RDERR   AES_SR_RDERR  /*!< Read error                       */
362 #define CRYP_FLAG_CCF     AES_SR_CCF    /*!< Computation completed            */
363 /* clearing flags */
364 #define CRYP_CCF_CLEAR    AES_CR_CCFC   /*!< Computation Complete Flag Clear */
365 #define CRYP_ERR_CLEAR    AES_CR_ERRC   /*!< Error Flag Clear  */
366 
367 /**
368   * @}
369   */
370 
371 /** @defgroup CRYP_Configuration_Skip CRYP Key and IV Configuration Skip Mode
372   * @{
373   */
374 
375 #define CRYP_KEYIVCONFIG_ALWAYS        0x00000000U            /*!< Peripheral Key and IV configuration to do systematically */
376 #define CRYP_KEYIVCONFIG_ONCE          0x00000001U            /*!< Peripheral Key and IV configuration to do only once      */
377 #define CRYP_IVCONFIG_ONCE             0x00000004U            /*!< Peripheral IV configuration do once for interleave mode */
378 
379 /**
380   * @}
381   */
382 
383 
384 /**
385   * @}
386   */
387 
388 /* Exported macros -----------------------------------------------------------*/
389 /** @defgroup CRYP_Exported_Macros CRYP Exported Macros
390   * @{
391   */
392 
393 /** @brief Reset CRYP handle state
394   * @param  __HANDLE__ specifies the CRYP handle.
395   * @retval None
396   */
397 #if (USE_HAL_CRYP_REGISTER_CALLBACKS == 1U)
398 #define __HAL_CRYP_RESET_HANDLE_STATE(__HANDLE__) do{\
399                                                       (__HANDLE__)->State = HAL_CRYP_STATE_RESET;\
400                                                       (__HANDLE__)->MspInitCallback = NULL;\
401                                                       (__HANDLE__)->MspDeInitCallback = NULL;\
402                                                      }while(0U)
403 #else
404 #define __HAL_CRYP_RESET_HANDLE_STATE(__HANDLE__) ( (__HANDLE__)->State = HAL_CRYP_STATE_RESET)
405 #endif /* USE_HAL_CRYP_REGISTER_CALLBACKS */
406 
407 /**
408   * @brief  Enable/Disable the CRYP peripheral.
409   * @param  __HANDLE__ specifies the CRYP handle.
410   * @retval None
411   */
412 
413 #define __HAL_CRYP_ENABLE(__HANDLE__)  ((__HANDLE__)->Instance->CR |=  AES_CR_EN)
414 #define __HAL_CRYP_DISABLE(__HANDLE__) ((__HANDLE__)->Instance->CR &=  ~AES_CR_EN)
415 
416 
417 /** @brief  Check whether the specified CRYP status flag is set or not.
418   * @param  __HANDLE__ specifies the CRYP handle.
419   * @param  __FLAG__ specifies the flag to check.
420   *         This parameter can be one of the following values for TinyAES:
421   *            @arg @ref CRYP_FLAG_BUSY GCM process suspension forbidden
422   *            @arg @ref CRYP_IT_WRERR Write Error
423   *            @arg @ref CRYP_IT_RDERR Read Error
424   *            @arg @ref CRYP_IT_CCF Computation Complete
425   *         This parameter can be one of the following values for CRYP:
426   *            @arg CRYP_FLAG_BUSY: The CRYP core is currently processing a block of data
427   *                                 or a key preparation (for AES decryption).
428   *            @arg CRYP_FLAG_IFEM: Input FIFO is empty
429   *            @arg CRYP_FLAG_IFNF: Input FIFO is not full
430   *            @arg CRYP_FLAG_INRIS: Input FIFO service raw interrupt is pending
431   *            @arg CRYP_FLAG_OFNE: Output FIFO is not empty
432   *            @arg CRYP_FLAG_OFFU: Output FIFO is full
433   *            @arg CRYP_FLAG_OUTRIS: Input FIFO service raw interrupt is pending
434  * @retval The state of __FLAG__ (TRUE or FALSE).
435   */
436 
437 #define CRYP_FLAG_MASK  0x0000001FU
438 #define __HAL_CRYP_GET_FLAG(__HANDLE__, __FLAG__) (((__HANDLE__)->Instance->SR & (__FLAG__)) == (__FLAG__))
439 
440 /** @brief  Clear the CRYP pending status flag.
441   * @param  __HANDLE__ specifies the CRYP handle.
442   * @param  __FLAG__ specifies the flag to clear.
443   *         This parameter can be one of the following values:
444   *            @arg @ref CRYP_ERR_CLEAR Read (RDERR) or Write Error (WRERR) Flag Clear
445   *            @arg @ref CRYP_CCF_CLEAR Computation Complete Flag (CCF) Clear
446   * @retval None
447   */
448 
449 #define __HAL_CRYP_CLEAR_FLAG(__HANDLE__, __FLAG__) SET_BIT((__HANDLE__)->Instance->CR, (__FLAG__))
450 
451 
452 /** @brief  Check whether the specified CRYP interrupt source is enabled or not.
453   * @param  __HANDLE__ specifies the CRYP handle.
454   * @param __INTERRUPT__ CRYP interrupt source to check
455   *         This parameter can be one of the following values for TinyAES:
456   *            @arg @ref CRYP_IT_ERRIE Error interrupt (used for RDERR and WRERR)
457   *            @arg @ref CRYP_IT_CCFIE Computation Complete interrupt
458   * @retval State of interruption (TRUE or FALSE).
459   */
460 
461 #define __HAL_CRYP_GET_IT_SOURCE(__HANDLE__, __INTERRUPT__) (((__HANDLE__)->Instance->CR & (__INTERRUPT__)) == (__INTERRUPT__))
462 
463 /** @brief  Check whether the specified CRYP interrupt is set or not.
464   * @param  __HANDLE__ specifies the CRYP handle.
465   * @param  __INTERRUPT__ specifies the interrupt to check.
466   *         This parameter can be one of the following values for TinyAES:
467   *            @arg @ref CRYP_IT_WRERR Write Error
468   *            @arg @ref CRYP_IT_RDERR Read Error
469   *            @arg @ref CRYP_IT_CCF  Computation Complete
470   *         This parameter can be one of the following values for CRYP:
471   *            @arg CRYP_IT_INI: Input FIFO service masked interrupt status
472   *            @arg CRYP_IT_OUTI: Output FIFO service masked interrupt status
473   * @retval The state of __INTERRUPT__ (TRUE or FALSE).
474   */
475 
476 #define __HAL_CRYP_GET_IT(__HANDLE__, __INTERRUPT__) (((__HANDLE__)->Instance->SR & (__INTERRUPT__)) == (__INTERRUPT__))
477 
478 /**
479   * @brief  Enable the CRYP interrupt.
480   * @param  __HANDLE__ specifies the CRYP handle.
481   * @param  __INTERRUPT__ CRYP Interrupt.
482   *         This parameter can be one of the following values for TinyAES:
483   *            @arg @ref CRYP_IT_ERRIE Error interrupt (used for RDERR and WRERR)
484   *            @arg @ref CRYP_IT_CCFIE Computation Complete interrupt
485   *         This parameter can be one of the following values for CRYP:
486   *            @ CRYP_IT_INI : Input FIFO service interrupt mask.
487   *            @ CRYP_IT_OUTI : Output FIFO service interrupt mask.CRYP interrupt.
488   * @retval None
489   */
490 
491 #define __HAL_CRYP_ENABLE_IT(__HANDLE__, __INTERRUPT__) (((__HANDLE__)->Instance->CR) |= (__INTERRUPT__))
492 
493 /**
494   * @brief  Disable the CRYP interrupt.
495   * @param  __HANDLE__ specifies the CRYP handle.
496   * @param  __INTERRUPT__ CRYP Interrupt.
497   *         This parameter can be one of the following values for TinyAES:
498   *            @arg @ref CRYP_IT_ERRIE Error interrupt (used for RDERR and WRERR)
499   *            @arg @ref CRYP_IT_CCFIE Computation Complete interrupt
500   *         This parameter can be one of the following values for CRYP:
501   *            @ CRYP_IT_INI : Input FIFO service interrupt mask.
502   *            @ CRYP_IT_OUTI : Output FIFO service interrupt mask.CRYP interrupt.
503   * @retval None
504   */
505 
506 #define __HAL_CRYP_DISABLE_IT(__HANDLE__, __INTERRUPT__) (((__HANDLE__)->Instance->CR) &= ~(__INTERRUPT__))
507 
508 /**
509   * @}
510   */
511 
512 /* Include CRYP HAL Extended module */
513 #include "stm32wlxx_hal_cryp_ex.h"
514 
515 /* Exported functions --------------------------------------------------------*/
516 /** @defgroup CRYP_Exported_Functions CRYP Exported Functions
517   * @{
518   */
519 
520 /** @addtogroup CRYP_Exported_Functions_Group1
521   * @{
522   */
523 HAL_StatusTypeDef HAL_CRYP_Init(CRYP_HandleTypeDef *hcryp);
524 HAL_StatusTypeDef HAL_CRYP_DeInit(CRYP_HandleTypeDef *hcryp);
525 void HAL_CRYP_MspInit(CRYP_HandleTypeDef *hcryp);
526 void HAL_CRYP_MspDeInit(CRYP_HandleTypeDef *hcryp);
527 HAL_StatusTypeDef HAL_CRYP_SetConfig(CRYP_HandleTypeDef *hcryp, CRYP_ConfigTypeDef *pConf);
528 HAL_StatusTypeDef HAL_CRYP_GetConfig(CRYP_HandleTypeDef *hcryp, CRYP_ConfigTypeDef *pConf);
529 #if (USE_HAL_CRYP_REGISTER_CALLBACKS == 1U)
530 HAL_StatusTypeDef HAL_CRYP_RegisterCallback(CRYP_HandleTypeDef *hcryp, HAL_CRYP_CallbackIDTypeDef CallbackID, pCRYP_CallbackTypeDef pCallback);
531 HAL_StatusTypeDef HAL_CRYP_UnRegisterCallback(CRYP_HandleTypeDef *hcryp, HAL_CRYP_CallbackIDTypeDef CallbackID);
532 #endif /* USE_HAL_CRYP_REGISTER_CALLBACKS */
533 #if (USE_HAL_CRYP_SUSPEND_RESUME == 1U)
534 void HAL_CRYP_ProcessSuspend(CRYP_HandleTypeDef *hcryp);
535 HAL_StatusTypeDef HAL_CRYP_Suspend(CRYP_HandleTypeDef *hcryp);
536 HAL_StatusTypeDef HAL_CRYP_Resume(CRYP_HandleTypeDef *hcryp);
537 #endif /* defined (USE_HAL_CRYP_SUSPEND_RESUME) */
538 HAL_StatusTypeDef  HAL_CRYP_SaveContext(CRYP_HandleTypeDef *hcryp, CRYP_ContextTypeDef *pcont);
539 HAL_StatusTypeDef HAL_CRYP_RestoreContext(CRYP_HandleTypeDef *hcryp, CRYP_ContextTypeDef *pcont);
540 
541 /**
542   * @}
543   */
544 
545 /** @addtogroup CRYP_Exported_Functions_Group2
546   * @{
547   */
548 
549 /* encryption/decryption ***********************************/
550 HAL_StatusTypeDef HAL_CRYP_Encrypt(CRYP_HandleTypeDef *hcryp, uint32_t *Input, uint16_t Size, uint32_t *Output, uint32_t Timeout);
551 HAL_StatusTypeDef HAL_CRYP_Decrypt(CRYP_HandleTypeDef *hcryp, uint32_t *Input, uint16_t Size, uint32_t *Output, uint32_t Timeout);
552 HAL_StatusTypeDef HAL_CRYP_Encrypt_IT(CRYP_HandleTypeDef *hcryp, uint32_t *Input, uint16_t Size, uint32_t *Output);
553 HAL_StatusTypeDef HAL_CRYP_Decrypt_IT(CRYP_HandleTypeDef *hcryp, uint32_t *Input, uint16_t Size, uint32_t *Output);
554 HAL_StatusTypeDef HAL_CRYP_Encrypt_DMA(CRYP_HandleTypeDef *hcryp, uint32_t *Input, uint16_t Size, uint32_t *Output);
555 HAL_StatusTypeDef HAL_CRYP_Decrypt_DMA(CRYP_HandleTypeDef *hcryp, uint32_t *Input, uint16_t Size, uint32_t *Output);
556 
557 /**
558   * @}
559   */
560 
561 
562 /** @addtogroup CRYP_Exported_Functions_Group3
563   * @{
564   */
565 /* Interrupt Handler functions  **********************************************/
566 void HAL_CRYP_IRQHandler(CRYP_HandleTypeDef *hcryp);
567 HAL_CRYP_STATETypeDef HAL_CRYP_GetState(CRYP_HandleTypeDef *hcryp);
568 void HAL_CRYP_InCpltCallback(CRYP_HandleTypeDef *hcryp);
569 void HAL_CRYP_OutCpltCallback(CRYP_HandleTypeDef *hcryp);
570 void HAL_CRYP_ErrorCallback(CRYP_HandleTypeDef *hcryp);
571 uint32_t HAL_CRYP_GetError(CRYP_HandleTypeDef *hcryp);
572 
573 /**
574   * @}
575   */
576 
577 /**
578   * @}
579   */
580 
581 /* Private macros --------------------------------------------------------*/
582 /** @defgroup CRYP_Private_Macros CRYP Private Macros
583   * @{
584   */
585 
586 /** @defgroup CRYP_IS_CRYP_Definitions CRYP Private macros to check input parameters
587   * @{
588   */
589 
590 #define IS_CRYP_ALGORITHM(ALGORITHM) (((ALGORITHM) == CRYP_AES_ECB)      || \
591                                       ((ALGORITHM)  == CRYP_AES_CBC)     || \
592                                       ((ALGORITHM)  == CRYP_AES_CTR)     || \
593                                       ((ALGORITHM)  == CRYP_AES_GCM_GMAC)|| \
594                                       ((ALGORITHM)  == CRYP_AES_CCM))
595 
596 
597 #define IS_CRYP_KEYSIZE(KEYSIZE)(((KEYSIZE) == CRYP_KEYSIZE_128B)   || \
598                                  ((KEYSIZE) == CRYP_KEYSIZE_256B))
599 
600 #define IS_CRYP_DATATYPE(DATATYPE)(((DATATYPE) == CRYP_DATATYPE_32B) || \
601                                    ((DATATYPE) == CRYP_DATATYPE_16B) || \
602                                    ((DATATYPE) == CRYP_DATATYPE_8B)  || \
603                                    ((DATATYPE) == CRYP_DATATYPE_1B))
604 
605 #define IS_CRYP_INIT(CONFIG)(((CONFIG) == CRYP_KEYIVCONFIG_ALWAYS) || \
606                              ((CONFIG) == CRYP_KEYIVCONFIG_ONCE)   || \
607                              ((CONFIG) == CRYP_IVCONFIG_ONCE))
608 
609 #define IS_CRYP_BUFFERSIZE(ALGO, DATAWIDTH, SIZE)                                             \
610        (((((ALGO) == CRYP_AES_CTR)) &&                                             \
611             ((((DATAWIDTH) == CRYP_DATAWIDTHUNIT_WORD) && (((SIZE) % 4U) == 0U))           || \
612              (((DATAWIDTH) == CRYP_DATAWIDTHUNIT_BYTE) && (((SIZE) % 16U) == 0U))))        || \
613          (((ALGO) == CRYP_AES_ECB) || ((ALGO) == CRYP_AES_CBC)                  || \
614           ((ALGO)== CRYP_AES_GCM_GMAC) || ((ALGO) == CRYP_AES_CCM)))
615 
616 /**
617   * @}
618   */
619 
620 /**
621   * @}
622   */
623 
624 
625 /* Private constants ---------------------------------------------------------*/
626 /** @defgroup CRYP_Private_Constants CRYP Private Constants
627   * @{
628   */
629 
630 /**
631   * @}
632   */
633 /* Private defines -----------------------------------------------------------*/
634 /** @defgroup CRYP_Private_Defines CRYP Private Defines
635   * @{
636   */
637 
638 /**
639   * @}
640   */
641 
642 /* Private variables ---------------------------------------------------------*/
643 /** @defgroup CRYP_Private_Variables CRYP Private Variables
644   * @{
645   */
646 
647 /**
648   * @}
649   */
650 
651 /* Private functions ---------------------------------------------------------*/
652 /** @defgroup CRYP_Private_Functions CRYP Private Functions
653   * @{
654   */
655 
656 /**
657   * @}
658   */
659 
660 /**
661   * @}
662   */
663 
664 
665 /**
666   * @}
667   */
668 
669 #ifdef __cplusplus
670 }
671 #endif
672 
673 #endif /* STM32WLxx_HAL_CRYP_H */
674