stm32f4xx_hal_cryp.h 26 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363364365366367368369370371372373374375376377378379380381382383384385386387388389390391392393394395396397398399400401402403404405406407408409410411412413414415416417418419420421422423424425426427428429430431432433434435436437438439440441442443444445446447448449450451452453454455456457458459460461462463464465466467468469470471472473474475476477478479480481482483484485486487488489490491492493494495496497498499500501502503504505506507508509510511512513514515516517518519520521522523524525526527528529530531532533534535536537538539540541542543544545546547548549550551552553554555556557558559560561562563564565566567568569570571572573574575576577578579580581582583584585586587588589590591592593594595596597598599600601602603604605606607608609610611612613614615616617618619620621622623624625626627628629630631632633634635636637638639640641642643644645
  1. /**
  2. ******************************************************************************
  3. * @file stm32f4xx_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) 2016 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 __STM32F4xx_HAL_CRYP_H
  21. #define __STM32F4xx_HAL_CRYP_H
  22. #ifdef __cplusplus
  23. extern "C" {
  24. #endif
  25. /* Includes ------------------------------------------------------------------*/
  26. #include "stm32f4xx_hal_def.h"
  27. /** @addtogroup STM32F4xx_HAL_Driver
  28. * @{
  29. */
  30. #if defined (AES) || defined (CRYP)
  31. /** @addtogroup CRYP
  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. }CRYP_ConfigTypeDef;
  60. /**
  61. * @brief CRYP State Structure definition
  62. */
  63. typedef enum
  64. {
  65. HAL_CRYP_STATE_RESET = 0x00U, /*!< CRYP not yet initialized or disabled */
  66. HAL_CRYP_STATE_READY = 0x01U, /*!< CRYP initialized and ready for use */
  67. HAL_CRYP_STATE_BUSY = 0x02U /*!< CRYP BUSY, internal processing is ongoing */
  68. }HAL_CRYP_STATETypeDef;
  69. /**
  70. * @brief CRYP handle Structure definition
  71. */
  72. typedef struct __CRYP_HandleTypeDef
  73. {
  74. #if defined (CRYP)
  75. CRYP_TypeDef *Instance; /*!< CRYP registers base address */
  76. #else /* AES*/
  77. AES_TypeDef *Instance; /*!< AES Register base address */
  78. #endif /* End AES or CRYP */
  79. CRYP_ConfigTypeDef Init; /*!< CRYP required parameters */
  80. FunctionalState AutoKeyDerivation; /*!< Used only in TinyAES to allows to bypass or not key write-up before decryption.
  81. This parameter can be a value of ENABLE/DISABLE */
  82. uint32_t *pCrypInBuffPtr; /*!< Pointer to CRYP processing (encryption, decryption,...) buffer */
  83. uint32_t *pCrypOutBuffPtr; /*!< Pointer to CRYP processing (encryption, decryption,...) buffer */
  84. __IO uint16_t CrypHeaderCount; /*!< Counter of header data */
  85. __IO uint16_t CrypInCount; /*!< Counter of input data */
  86. __IO uint16_t CrypOutCount; /*!< Counter of output data */
  87. uint16_t Size; /*!< length of input data in word */
  88. uint32_t Phase; /*!< CRYP peripheral phase */
  89. DMA_HandleTypeDef *hdmain; /*!< CRYP In DMA handle parameters */
  90. DMA_HandleTypeDef *hdmaout; /*!< CRYP Out DMA handle parameters */
  91. HAL_LockTypeDef Lock; /*!< CRYP locking object */
  92. __IO HAL_CRYP_STATETypeDef State; /*!< CRYP peripheral state */
  93. __IO uint32_t ErrorCode; /*!< CRYP peripheral error code */
  94. #if (USE_HAL_CRYP_REGISTER_CALLBACKS == 1)
  95. void (*InCpltCallback) (struct __CRYP_HandleTypeDef * hcryp); /*!< CRYP Input FIFO transfer completed callback */
  96. void (*OutCpltCallback) (struct __CRYP_HandleTypeDef * hcryp); /*!< CRYP Output FIFO transfer completed callback */
  97. void (*ErrorCallback) (struct __CRYP_HandleTypeDef * hcryp); /*!< CRYP Error callback */
  98. void (* MspInitCallback) (struct __CRYP_HandleTypeDef * hcryp); /*!< CRYP Msp Init callback */
  99. void (* MspDeInitCallback)(struct __CRYP_HandleTypeDef * hcryp); /*!< CRYP Msp DeInit callback */
  100. #endif /* (USE_HAL_CRYP_REGISTER_CALLBACKS) */
  101. }CRYP_HandleTypeDef;
  102. /**
  103. * @}
  104. */
  105. #if (USE_HAL_CRYP_REGISTER_CALLBACKS == 1)
  106. /** @defgroup HAL_CRYP_Callback_ID_enumeration_definition HAL CRYP Callback ID enumeration definition
  107. * @brief HAL CRYP Callback ID enumeration definition
  108. * @{
  109. */
  110. typedef enum
  111. {
  112. HAL_CRYP_INPUT_COMPLETE_CB_ID = 0x01U, /*!< CRYP Input FIFO transfer completed callback ID */
  113. HAL_CRYP_OUTPUT_COMPLETE_CB_ID = 0x02U, /*!< CRYP Output FIFO transfer completed callback ID */
  114. HAL_CRYP_ERROR_CB_ID = 0x03U, /*!< CRYP Error callback ID */
  115. HAL_CRYP_MSPINIT_CB_ID = 0x04U, /*!< CRYP MspInit callback ID */
  116. HAL_CRYP_MSPDEINIT_CB_ID = 0x05U /*!< CRYP MspDeInit callback ID */
  117. }HAL_CRYP_CallbackIDTypeDef;
  118. /**
  119. * @}
  120. */
  121. /** @defgroup HAL_CRYP_Callback_pointer_definition HAL CRYP Callback pointer definition
  122. * @brief HAL CRYP Callback pointer definition
  123. * @{
  124. */
  125. typedef void (*pCRYP_CallbackTypeDef)(CRYP_HandleTypeDef * hcryp); /*!< pointer to a common CRYP callback function */
  126. /**
  127. * @}
  128. */
  129. #endif /* USE_HAL_CRYP_REGISTER_CALLBACKS */
  130. /* Exported constants --------------------------------------------------------*/
  131. /** @defgroup CRYP_Exported_Constants CRYP Exported Constants
  132. * @{
  133. */
  134. /** @defgroup CRYP_Error_Definition CRYP Error Definition
  135. * @{
  136. */
  137. #define HAL_CRYP_ERROR_NONE 0x00000000U /*!< No error */
  138. #define HAL_CRYP_ERROR_WRITE 0x00000001U /*!< Write error */
  139. #define HAL_CRYP_ERROR_READ 0x00000002U /*!< Read error */
  140. #define HAL_CRYP_ERROR_DMA 0x00000004U /*!< DMA error */
  141. #define HAL_CRYP_ERROR_BUSY 0x00000008U /*!< Busy flag error */
  142. #define HAL_CRYP_ERROR_TIMEOUT 0x00000010U /*!< Timeout error */
  143. #define HAL_CRYP_ERROR_NOT_SUPPORTED 0x00000020U /*!< Not supported mode */
  144. #define HAL_CRYP_ERROR_AUTH_TAG_SEQUENCE 0x00000040U /*!< Sequence are not respected only for GCM or CCM */
  145. #if (USE_HAL_CRYP_REGISTER_CALLBACKS == 1)
  146. #define HAL_CRYP_ERROR_INVALID_CALLBACK ((uint32_t)0x00000080U) /*!< Invalid Callback error */
  147. #endif /* USE_HAL_CRYP_REGISTER_CALLBACKS */
  148. /**
  149. * @}
  150. */
  151. /** @defgroup CRYP_Data_Width_Unit CRYP Data Width Unit
  152. * @{
  153. */
  154. #define CRYP_DATAWIDTHUNIT_WORD 0x00000000U /*!< By default, size unit is word */
  155. #define CRYP_DATAWIDTHUNIT_BYTE 0x00000001U /*!< By default, size unit is word */
  156. /**
  157. * @}
  158. */
  159. /** @defgroup CRYP_Algorithm_Mode CRYP Algorithm Mode
  160. * @{
  161. */
  162. #if defined(CRYP)
  163. #define CRYP_DES_ECB CRYP_CR_ALGOMODE_DES_ECB
  164. #define CRYP_DES_CBC CRYP_CR_ALGOMODE_DES_CBC
  165. #define CRYP_TDES_ECB CRYP_CR_ALGOMODE_TDES_ECB
  166. #define CRYP_TDES_CBC CRYP_CR_ALGOMODE_TDES_CBC
  167. #define CRYP_AES_ECB CRYP_CR_ALGOMODE_AES_ECB
  168. #define CRYP_AES_CBC CRYP_CR_ALGOMODE_AES_CBC
  169. #define CRYP_AES_CTR CRYP_CR_ALGOMODE_AES_CTR
  170. #if defined (CRYP_CR_ALGOMODE_AES_GCM)
  171. #define CRYP_AES_GCM CRYP_CR_ALGOMODE_AES_GCM
  172. #define CRYP_AES_CCM CRYP_CR_ALGOMODE_AES_CCM
  173. #endif /* GCM CCM defined*/
  174. #else /* AES*/
  175. #define CRYP_AES_ECB 0x00000000U /*!< Electronic codebook chaining algorithm */
  176. #define CRYP_AES_CBC AES_CR_CHMOD_0 /*!< Cipher block chaining algorithm */
  177. #define CRYP_AES_CTR AES_CR_CHMOD_1 /*!< Counter mode chaining algorithm */
  178. #define CRYP_AES_GCM_GMAC (AES_CR_CHMOD_0 | AES_CR_CHMOD_1) /*!< Galois counter mode - Galois message authentication code */
  179. #define CRYP_AES_CCM AES_CR_CHMOD_2 /*!< Counter with Cipher Mode */
  180. #endif /* End AES or CRYP */
  181. /**
  182. * @}
  183. */
  184. /** @defgroup CRYP_Key_Size CRYP Key Size
  185. * @{
  186. */
  187. #if defined(CRYP)
  188. #define CRYP_KEYSIZE_128B 0x00000000U
  189. #define CRYP_KEYSIZE_192B CRYP_CR_KEYSIZE_0
  190. #define CRYP_KEYSIZE_256B CRYP_CR_KEYSIZE_1
  191. #else /* AES*/
  192. #define CRYP_KEYSIZE_128B 0x00000000U /*!< 128-bit long key */
  193. #define CRYP_KEYSIZE_256B AES_CR_KEYSIZE /*!< 256-bit long key */
  194. #endif /* End AES or CRYP */
  195. /**
  196. * @}
  197. */
  198. /** @defgroup CRYP_Data_Type CRYP Data Type
  199. * @{
  200. */
  201. #if defined(CRYP)
  202. #define CRYP_DATATYPE_32B 0x00000000U
  203. #define CRYP_DATATYPE_16B CRYP_CR_DATATYPE_0
  204. #define CRYP_DATATYPE_8B CRYP_CR_DATATYPE_1
  205. #define CRYP_DATATYPE_1B CRYP_CR_DATATYPE
  206. #else /* AES*/
  207. #define CRYP_DATATYPE_32B 0x00000000U /*!< 32-bit data type (no swapping) */
  208. #define CRYP_DATATYPE_16B AES_CR_DATATYPE_0 /*!< 16-bit data type (half-word swapping) */
  209. #define CRYP_DATATYPE_8B AES_CR_DATATYPE_1 /*!< 8-bit data type (byte swapping) */
  210. #define CRYP_DATATYPE_1B AES_CR_DATATYPE /*!< 1-bit data type (bit swapping) */
  211. #endif /* End AES or CRYP */
  212. /**
  213. * @}
  214. */
  215. /** @defgroup CRYP_Interrupt CRYP Interrupt
  216. * @{
  217. */
  218. #if defined (CRYP)
  219. #define CRYP_IT_INI CRYP_IMSCR_INIM /*!< Input FIFO Interrupt */
  220. #define CRYP_IT_OUTI CRYP_IMSCR_OUTIM /*!< Output FIFO Interrupt */
  221. #else /* AES*/
  222. #define CRYP_IT_CCFIE AES_CR_CCFIE /*!< Computation Complete interrupt enable */
  223. #define CRYP_IT_ERRIE AES_CR_ERRIE /*!< Error interrupt enable */
  224. #define CRYP_IT_WRERR AES_SR_WRERR /*!< Write Error */
  225. #define CRYP_IT_RDERR AES_SR_RDERR /*!< Read Error */
  226. #define CRYP_IT_CCF AES_SR_CCF /*!< Computation completed */
  227. #endif /* End AES or CRYP */
  228. /**
  229. * @}
  230. */
  231. /** @defgroup CRYP_Flags CRYP Flags
  232. * @{
  233. */
  234. #if defined (CRYP)
  235. /* Flags in the SR register */
  236. #define CRYP_FLAG_IFEM CRYP_SR_IFEM /*!< Input FIFO is empty */
  237. #define CRYP_FLAG_IFNF CRYP_SR_IFNF /*!< Input FIFO is not Full */
  238. #define CRYP_FLAG_OFNE CRYP_SR_OFNE /*!< Output FIFO is not empty */
  239. #define CRYP_FLAG_OFFU CRYP_SR_OFFU /*!< Output FIFO is Full */
  240. #define CRYP_FLAG_BUSY CRYP_SR_BUSY /*!< The CRYP core is currently processing a block of data
  241. or a key preparation (for AES decryption). */
  242. /* Flags in the RISR register */
  243. #define CRYP_FLAG_OUTRIS 0x01000002U /*!< Output FIFO service raw interrupt status */
  244. #define CRYP_FLAG_INRIS 0x01000001U /*!< Input FIFO service raw interrupt status*/
  245. #else /* AES*/
  246. /* status flags */
  247. #define CRYP_FLAG_BUSY AES_SR_BUSY /*!< GCM process suspension forbidden */
  248. #define CRYP_FLAG_WRERR AES_SR_WRERR /*!< Write Error */
  249. #define CRYP_FLAG_RDERR AES_SR_RDERR /*!< Read error */
  250. #define CRYP_FLAG_CCF AES_SR_CCF /*!< Computation completed */
  251. /* clearing flags */
  252. #define CRYP_CCF_CLEAR AES_CR_CCFC /*!< Computation Complete Flag Clear */
  253. #define CRYP_ERR_CLEAR AES_CR_ERRC /*!< Error Flag Clear */
  254. #endif /* End AES or CRYP */
  255. /**
  256. * @}
  257. */
  258. /**
  259. * @}
  260. */
  261. /* Exported macros -----------------------------------------------------------*/
  262. /** @defgroup CRYP_Exported_Macros CRYP Exported Macros
  263. * @{
  264. */
  265. /** @brief Reset CRYP handle state
  266. * @param __HANDLE__ specifies the CRYP handle.
  267. * @retval None
  268. */
  269. #if (USE_HAL_CRYP_REGISTER_CALLBACKS == 1)
  270. #define __HAL_CRYP_RESET_HANDLE_STATE(__HANDLE__) do{\
  271. (__HANDLE__)->State = HAL_CRYP_STATE_RESET;\
  272. (__HANDLE__)->MspInitCallback = NULL;\
  273. (__HANDLE__)->MspDeInitCallback = NULL;\
  274. }while(0)
  275. #else
  276. #define __HAL_CRYP_RESET_HANDLE_STATE(__HANDLE__) ( (__HANDLE__)->State = HAL_CRYP_STATE_RESET)
  277. #endif /* USE_HAL_CRYP_REGISTER_CALLBACKS */
  278. /**
  279. * @brief Enable/Disable the CRYP peripheral.
  280. * @param __HANDLE__: specifies the CRYP handle.
  281. * @retval None
  282. */
  283. #if defined(CRYP)
  284. #define __HAL_CRYP_ENABLE(__HANDLE__) ((__HANDLE__)->Instance->CR |= CRYP_CR_CRYPEN)
  285. #define __HAL_CRYP_DISABLE(__HANDLE__) ((__HANDLE__)->Instance->CR &= ~CRYP_CR_CRYPEN)
  286. #else /* AES*/
  287. #define __HAL_CRYP_ENABLE(__HANDLE__) ((__HANDLE__)->Instance->CR |= AES_CR_EN)
  288. #define __HAL_CRYP_DISABLE(__HANDLE__) ((__HANDLE__)->Instance->CR &= ~AES_CR_EN)
  289. #endif /* End AES or CRYP */
  290. /** @brief Check whether the specified CRYP status flag is set or not.
  291. * @param __FLAG__: specifies the flag to check.
  292. * This parameter can be one of the following values for TinyAES:
  293. * @arg @ref CRYP_FLAG_BUSY GCM process suspension forbidden
  294. * @arg @ref CRYP_IT_WRERR Write Error
  295. * @arg @ref CRYP_IT_RDERR Read Error
  296. * @arg @ref CRYP_IT_CCF Computation Complete
  297. * This parameter can be one of the following values for CRYP:
  298. * @arg CRYP_FLAG_BUSY: The CRYP core is currently processing a block of data
  299. * or a key preparation (for AES decryption).
  300. * @arg CRYP_FLAG_IFEM: Input FIFO is empty
  301. * @arg CRYP_FLAG_IFNF: Input FIFO is not full
  302. * @arg CRYP_FLAG_INRIS: Input FIFO service raw interrupt is pending
  303. * @arg CRYP_FLAG_OFNE: Output FIFO is not empty
  304. * @arg CRYP_FLAG_OFFU: Output FIFO is full
  305. * @arg CRYP_FLAG_OUTRIS: Input FIFO service raw interrupt is pending
  306. * @retval The state of __FLAG__ (TRUE or FALSE).
  307. */
  308. #define CRYP_FLAG_MASK 0x0000001FU
  309. #if defined(CRYP)
  310. #define __HAL_CRYP_GET_FLAG(__HANDLE__, __FLAG__) ((((uint8_t)((__FLAG__) >> 24)) == 0x01U)?((((__HANDLE__)->Instance->RISR) & ((__FLAG__) & CRYP_FLAG_MASK)) == ((__FLAG__) & CRYP_FLAG_MASK)): \
  311. ((((__HANDLE__)->Instance->RISR) & ((__FLAG__) & CRYP_FLAG_MASK)) == ((__FLAG__) & CRYP_FLAG_MASK)))
  312. #else /* AES*/
  313. #define __HAL_CRYP_GET_FLAG(__HANDLE__, __FLAG__) (((__HANDLE__)->Instance->SR & (__FLAG__)) == (__FLAG__))
  314. #endif /* End AES or CRYP */
  315. /** @brief Clear the CRYP pending status flag.
  316. * @param __FLAG__: specifies the flag to clear.
  317. * This parameter can be one of the following values:
  318. * @arg @ref CRYP_ERR_CLEAR Read (RDERR) or Write Error (WRERR) Flag Clear
  319. * @arg @ref CRYP_CCF_CLEAR Computation Complete Flag (CCF) Clear
  320. * @param __HANDLE__: specifies the CRYP handle.
  321. * @retval None
  322. */
  323. #if defined(AES)
  324. #define __HAL_CRYP_CLEAR_FLAG(__HANDLE__, __FLAG__) SET_BIT((__HANDLE__)->Instance->CR, (__FLAG__))
  325. /** @brief Check whether the specified CRYP interrupt source is enabled or not.
  326. * @param __INTERRUPT__: CRYP interrupt source to check
  327. * This parameter can be one of the following values for TinyAES:
  328. * @arg @ref CRYP_IT_ERRIE Error interrupt (used for RDERR and WRERR)
  329. * @arg @ref CRYP_IT_CCFIE Computation Complete interrupt
  330. * @param __HANDLE__: specifies the CRYP handle.
  331. * @retval State of interruption (TRUE or FALSE).
  332. */
  333. #define __HAL_CRYP_GET_IT_SOURCE(__HANDLE__, __INTERRUPT__) (((__HANDLE__)->Instance->CR & (__INTERRUPT__)) == (__INTERRUPT__))
  334. #endif /* AES */
  335. /** @brief Check whether the specified CRYP interrupt is set or not.
  336. * @param __INTERRUPT__: specifies the interrupt to check.
  337. * This parameter can be one of the following values for TinyAES:
  338. * @arg @ref CRYP_IT_WRERR Write Error
  339. * @arg @ref CRYP_IT_RDERR Read Error
  340. * @arg @ref CRYP_IT_CCF Computation Complete
  341. * This parameter can be one of the following values for CRYP:
  342. * @arg CRYP_IT_INI: Input FIFO service masked interrupt status
  343. * @arg CRYP_IT_OUTI: Output FIFO service masked interrupt status
  344. * @param __HANDLE__: specifies the CRYP handle.
  345. * @retval The state of __INTERRUPT__ (TRUE or FALSE).
  346. */
  347. #if defined(CRYP)
  348. #define __HAL_CRYP_GET_IT(__HANDLE__, __INTERRUPT__) (((__HANDLE__)->Instance->MISR & (__INTERRUPT__)) == (__INTERRUPT__))
  349. #else /* AES*/
  350. #define __HAL_CRYP_GET_IT(__HANDLE__, __INTERRUPT__) (((__HANDLE__)->Instance->SR & (__INTERRUPT__)) == (__INTERRUPT__))
  351. #endif /* End AES or CRYP */
  352. /**
  353. * @brief Enable the CRYP interrupt.
  354. * @param __INTERRUPT__: CRYP Interrupt.
  355. * This parameter can be one of the following values for TinyAES:
  356. * @arg @ref CRYP_IT_ERRIE Error interrupt (used for RDERR and WRERR)
  357. * @arg @ref CRYP_IT_CCFIE Computation Complete interrupt
  358. * This parameter can be one of the following values for CRYP:
  359. * @ CRYP_IT_INI : Input FIFO service interrupt mask.
  360. * @ CRYP_IT_OUTI : Output FIFO service interrupt mask.CRYP interrupt.
  361. * @param __HANDLE__: specifies the CRYP handle.
  362. * @retval None
  363. */
  364. #if defined(CRYP)
  365. #define __HAL_CRYP_ENABLE_IT(__HANDLE__, __INTERRUPT__) (((__HANDLE__)->Instance->IMSCR) |= (__INTERRUPT__))
  366. #else /* AES*/
  367. #define __HAL_CRYP_ENABLE_IT(__HANDLE__, __INTERRUPT__) (((__HANDLE__)->Instance->CR) |= (__INTERRUPT__))
  368. #endif /* End AES or CRYP */
  369. /**
  370. * @brief Disable the CRYP interrupt.
  371. * @param __INTERRUPT__: CRYP Interrupt.
  372. * This parameter can be one of the following values for TinyAES:
  373. * @arg @ref CRYP_IT_ERRIE Error interrupt (used for RDERR and WRERR)
  374. * @arg @ref CRYP_IT_CCFIE Computation Complete interrupt
  375. * This parameter can be one of the following values for CRYP:
  376. * @ CRYP_IT_INI : Input FIFO service interrupt mask.
  377. * @ CRYP_IT_OUTI : Output FIFO service interrupt mask.CRYP interrupt.
  378. * @param __HANDLE__: specifies the CRYP handle.
  379. * @retval None
  380. */
  381. #if defined(CRYP)
  382. #define __HAL_CRYP_DISABLE_IT(__HANDLE__, __INTERRUPT__) (((__HANDLE__)->Instance->IMSCR) &= ~(__INTERRUPT__))
  383. #else /* AES*/
  384. #define __HAL_CRYP_DISABLE_IT(__HANDLE__, __INTERRUPT__) (((__HANDLE__)->Instance->CR) &= ~(__INTERRUPT__))
  385. #endif /* End AES or CRYP */
  386. /**
  387. * @}
  388. */
  389. #if defined (CRYP_CR_ALGOMODE_AES_GCM)|| defined (AES)
  390. /* Include CRYP HAL Extended module */
  391. #include "stm32f4xx_hal_cryp_ex.h"
  392. #endif /* AES or GCM CCM defined*/
  393. /* Exported functions --------------------------------------------------------*/
  394. /** @defgroup CRYP_Exported_Functions CRYP Exported Functions
  395. * @{
  396. */
  397. /** @addtogroup CRYP_Exported_Functions_Group1
  398. * @{
  399. */
  400. HAL_StatusTypeDef HAL_CRYP_Init(CRYP_HandleTypeDef *hcryp);
  401. HAL_StatusTypeDef HAL_CRYP_DeInit(CRYP_HandleTypeDef *hcryp);
  402. void HAL_CRYP_MspInit(CRYP_HandleTypeDef *hcryp);
  403. void HAL_CRYP_MspDeInit(CRYP_HandleTypeDef *hcryp);
  404. HAL_StatusTypeDef HAL_CRYP_SetConfig(CRYP_HandleTypeDef *hcryp, CRYP_ConfigTypeDef *pConf );
  405. HAL_StatusTypeDef HAL_CRYP_GetConfig(CRYP_HandleTypeDef *hcryp, CRYP_ConfigTypeDef *pConf );
  406. #if (USE_HAL_CRYP_REGISTER_CALLBACKS == 1)
  407. HAL_StatusTypeDef HAL_CRYP_RegisterCallback(CRYP_HandleTypeDef *hcryp, HAL_CRYP_CallbackIDTypeDef CallbackID, pCRYP_CallbackTypeDef pCallback);
  408. HAL_StatusTypeDef HAL_CRYP_UnRegisterCallback(CRYP_HandleTypeDef *hcryp, HAL_CRYP_CallbackIDTypeDef CallbackID);
  409. #endif /* USE_HAL_CRYP_REGISTER_CALLBACKS */
  410. /**
  411. * @}
  412. */
  413. /** @addtogroup CRYP_Exported_Functions_Group2
  414. * @{
  415. */
  416. /* encryption/decryption ***********************************/
  417. HAL_StatusTypeDef HAL_CRYP_Encrypt(CRYP_HandleTypeDef *hcryp, uint32_t *Input, uint16_t Size, uint32_t *Output, uint32_t Timeout);
  418. HAL_StatusTypeDef HAL_CRYP_Decrypt(CRYP_HandleTypeDef *hcryp, uint32_t *Input, uint16_t Size, uint32_t *Output, uint32_t Timeout);
  419. HAL_StatusTypeDef HAL_CRYP_Encrypt_IT(CRYP_HandleTypeDef *hcryp, uint32_t *Input, uint16_t Size, uint32_t *Output);
  420. HAL_StatusTypeDef HAL_CRYP_Decrypt_IT(CRYP_HandleTypeDef *hcryp, uint32_t *Input, uint16_t Size, uint32_t *Output);
  421. HAL_StatusTypeDef HAL_CRYP_Encrypt_DMA(CRYP_HandleTypeDef *hcryp, uint32_t *Input, uint16_t Size, uint32_t *Output);
  422. HAL_StatusTypeDef HAL_CRYP_Decrypt_DMA(CRYP_HandleTypeDef *hcryp, uint32_t *Input, uint16_t Size, uint32_t *Output);
  423. /**
  424. * @}
  425. */
  426. /** @addtogroup CRYP_Exported_Functions_Group3
  427. * @{
  428. */
  429. /* Interrupt Handler functions **********************************************/
  430. void HAL_CRYP_IRQHandler(CRYP_HandleTypeDef *hcryp);
  431. HAL_CRYP_STATETypeDef HAL_CRYP_GetState(CRYP_HandleTypeDef *hcryp);
  432. void HAL_CRYP_InCpltCallback(CRYP_HandleTypeDef *hcryp);
  433. void HAL_CRYP_OutCpltCallback(CRYP_HandleTypeDef *hcryp);
  434. void HAL_CRYP_ErrorCallback(CRYP_HandleTypeDef *hcryp);
  435. uint32_t HAL_CRYP_GetError(CRYP_HandleTypeDef *hcryp);
  436. /**
  437. * @}
  438. */
  439. /**
  440. * @}
  441. */
  442. /* Private macros --------------------------------------------------------*/
  443. /** @defgroup CRYP_Private_Macros CRYP Private Macros
  444. * @{
  445. */
  446. /** @defgroup CRYP_IS_CRYP_Definitions CRYP Private macros to check input parameters
  447. * @{
  448. */
  449. #if defined(CRYP)
  450. #if defined (CRYP_CR_ALGOMODE_AES_GCM)
  451. #define IS_CRYP_ALGORITHM(ALGORITHM) (((ALGORITHM) == CRYP_DES_ECB) || \
  452. ((ALGORITHM) == CRYP_DES_CBC) || \
  453. ((ALGORITHM) == CRYP_TDES_ECB) || \
  454. ((ALGORITHM) == CRYP_TDES_CBC) || \
  455. ((ALGORITHM) == CRYP_AES_ECB) || \
  456. ((ALGORITHM) == CRYP_AES_CBC) || \
  457. ((ALGORITHM) == CRYP_AES_CTR) || \
  458. ((ALGORITHM) == CRYP_AES_GCM) || \
  459. ((ALGORITHM) == CRYP_AES_CCM))
  460. #else /*NO GCM CCM */
  461. #define IS_CRYP_ALGORITHM(ALGORITHM) (((ALGORITHM) == CRYP_DES_ECB) || \
  462. ((ALGORITHM) == CRYP_DES_CBC) || \
  463. ((ALGORITHM) == CRYP_TDES_ECB) || \
  464. ((ALGORITHM) == CRYP_TDES_CBC) || \
  465. ((ALGORITHM) == CRYP_AES_ECB) || \
  466. ((ALGORITHM) == CRYP_AES_CBC) || \
  467. ((ALGORITHM) == CRYP_AES_CTR))
  468. #endif /* GCM CCM defined*/
  469. #define IS_CRYP_KEYSIZE(KEYSIZE)(((KEYSIZE) == CRYP_KEYSIZE_128B) || \
  470. ((KEYSIZE) == CRYP_KEYSIZE_192B) || \
  471. ((KEYSIZE) == CRYP_KEYSIZE_256B))
  472. #else /* AES*/
  473. #define IS_CRYP_ALGORITHM(ALGORITHM) (((ALGORITHM) == CRYP_AES_ECB) || \
  474. ((ALGORITHM) == CRYP_AES_CBC) || \
  475. ((ALGORITHM) == CRYP_AES_CTR) || \
  476. ((ALGORITHM) == CRYP_AES_GCM_GMAC)|| \
  477. ((ALGORITHM) == CRYP_AES_CCM))
  478. #define IS_CRYP_KEYSIZE(KEYSIZE)(((KEYSIZE) == CRYP_KEYSIZE_128B) || \
  479. ((KEYSIZE) == CRYP_KEYSIZE_256B))
  480. #endif /* End AES or CRYP */
  481. #define IS_CRYP_DATATYPE(DATATYPE)(((DATATYPE) == CRYP_DATATYPE_32B) || \
  482. ((DATATYPE) == CRYP_DATATYPE_16B) || \
  483. ((DATATYPE) == CRYP_DATATYPE_8B) || \
  484. ((DATATYPE) == CRYP_DATATYPE_1B))
  485. /**
  486. * @}
  487. */
  488. /**
  489. * @}
  490. */
  491. /* Private constants ---------------------------------------------------------*/
  492. /** @defgroup CRYP_Private_Constants CRYP Private Constants
  493. * @{
  494. */
  495. /**
  496. * @}
  497. */
  498. /* Private defines -----------------------------------------------------------*/
  499. /** @defgroup CRYP_Private_Defines CRYP Private Defines
  500. * @{
  501. */
  502. /**
  503. * @}
  504. */
  505. /* Private variables ---------------------------------------------------------*/
  506. /** @defgroup CRYP_Private_Variables CRYP Private Variables
  507. * @{
  508. */
  509. /**
  510. * @}
  511. */
  512. /* Private functions prototypes ----------------------------------------------*/
  513. /** @defgroup CRYP_Private_Functions_Prototypes CRYP Private Functions Prototypes
  514. * @{
  515. */
  516. /**
  517. * @}
  518. */
  519. /* Private functions ---------------------------------------------------------*/
  520. /** @defgroup CRYP_Private_Functions CRYP Private Functions
  521. * @{
  522. */
  523. /**
  524. * @}
  525. */
  526. /**
  527. * @}
  528. */
  529. /**
  530. * @}
  531. */
  532. #endif /* TinyAES or CRYP*/
  533. /**
  534. * @}
  535. */
  536. #ifdef __cplusplus
  537. }
  538. #endif
  539. #endif /* __STM32F4xx_HAL_CRYP_H */
  540. /************************ (C) COPYRIGHT STMicroelectronics *****END OF FILE****/