You can not select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
 
 
 

628 lines
24 KiB

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