1 /** 2 ****************************************************************************** 3 * @file stm32l0xx_hal_cryp.h 4 * @author MCD Application Team 5 * @brief Header file of CRYP HAL module. 6 ****************************************************************************** 7 * @attention 8 * 9 * <h2><center>© 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 20 /* Define to prevent recursive inclusion -------------------------------------*/ 21 #ifndef __STM32L0xx_HAL_CRYP_H 22 #define __STM32L0xx_HAL_CRYP_H 23 24 #ifdef __cplusplus 25 extern "C" { 26 #endif 27 28 #if defined (STM32L021xx) || defined (STM32L041xx) || defined (STM32L062xx) || defined (STM32L063xx) || defined (STM32L081xx) || defined (STM32L082xx) || defined (STM32L083xx) 29 30 /* Includes ------------------------------------------------------------------*/ 31 #include "stm32l0xx_hal_def.h" 32 33 /** @addtogroup STM32L0xx_HAL_Driver 34 * @{ 35 */ 36 37 /** @defgroup CRYP CRYP 38 * @{ 39 */ 40 41 /* Exported types ------------------------------------------------------------*/ 42 43 /** @defgroup CRYP_Exported_Types CRYP Exported Types 44 * @{ 45 */ 46 47 /** 48 * @brief CRYP Configuration Structure definition 49 */ 50 typedef struct 51 { 52 uint32_t DataType; /*!< 32-bit data, 16-bit data, 8-bit data or 1-bit string. 53 This parameter can be a value of @ref CRYP_Data_Type */ 54 55 uint8_t* pKey; /*!< The key used for encryption/decryption */ 56 57 uint8_t* pInitVect; /*!< The initialization vector used also as initialization 58 counter in CTR mode */ 59 60 }CRYP_InitTypeDef; 61 62 /** 63 * @brief HAL CRYP State structures definition 64 */ 65 typedef enum 66 { 67 HAL_CRYP_STATE_RESET = 0x00U, /*!< CRYP not yet initialized or disabled */ 68 HAL_CRYP_STATE_READY = 0x01U, /*!< CRYP initialized and ready for use */ 69 HAL_CRYP_STATE_BUSY = 0x02U, /*!< CRYP internal processing is ongoing */ 70 HAL_CRYP_STATE_TIMEOUT = 0x03U, /*!< CRYP timeout state */ 71 HAL_CRYP_STATE_ERROR = 0x04U /*!< CRYP error state */ 72 73 }HAL_CRYP_STATETypeDef; 74 75 /** 76 * @brief HAL CRYP phase structures definition 77 */ 78 typedef enum 79 { 80 HAL_CRYP_PHASE_READY = 0x01U, /*!< CRYP peripheral is ready for initialization. */ 81 HAL_CRYP_PHASE_PROCESS = 0x02U, /*!< CRYP peripheral is in processing phase */ 82 }HAL_PhaseTypeDef; 83 84 /** 85 * @brief CRYP handle Structure definition 86 */ 87 typedef struct 88 { 89 AES_TypeDef *Instance; /*!< Register base address */ 90 91 CRYP_InitTypeDef Init; /*!< CRYP required parameters */ 92 93 uint8_t *pCrypInBuffPtr; /*!< Pointer to CRYP processing (encryption, decryption,...) buffer */ 94 95 uint8_t *pCrypOutBuffPtr; /*!< Pointer to CRYP processing (encryption, decryption,...) buffer */ 96 97 __IO uint16_t CrypInCount; /*!< Counter of inputed data */ 98 99 __IO uint16_t CrypOutCount; /*!< Counter of outputed data */ 100 101 HAL_StatusTypeDef Status; /*!< CRYP peripheral status */ 102 103 HAL_PhaseTypeDef Phase; /*!< CRYP peripheral phase */ 104 105 DMA_HandleTypeDef *hdmain; /*!< CRYP In DMA handle parameters */ 106 107 DMA_HandleTypeDef *hdmaout; /*!< CRYP Out DMA handle parameters */ 108 109 HAL_LockTypeDef Lock; /*!< CRYP locking object */ 110 111 __IO HAL_CRYP_STATETypeDef State; /*!< CRYP peripheral state */ 112 113 }CRYP_HandleTypeDef; 114 115 /** 116 * @} 117 */ 118 119 /* Exported constants --------------------------------------------------------*/ 120 121 /** @defgroup CRYP_Exported_Constants CRYP Exported Constants 122 * @{ 123 */ 124 125 /** @defgroup CRYP_Data_Type CRYP Data Type 126 * @{ 127 */ 128 #define CRYP_DATATYPE_32B (0x00000000U) 129 #define CRYP_DATATYPE_16B AES_CR_DATATYPE_0 130 #define CRYP_DATATYPE_8B AES_CR_DATATYPE_1 131 #define CRYP_DATATYPE_1B AES_CR_DATATYPE 132 133 #define IS_CRYP_DATATYPE(DATATYPE) (((DATATYPE) == CRYP_DATATYPE_32B) || \ 134 ((DATATYPE) == CRYP_DATATYPE_16B) || \ 135 ((DATATYPE) == CRYP_DATATYPE_8B) || \ 136 ((DATATYPE) == CRYP_DATATYPE_1B)) 137 /** 138 * @} 139 */ 140 141 /** @defgroup CRYP_AlgoModeDirection CRYP Algo Mode Direction 142 * @{ 143 */ 144 #define CRYP_CR_ALGOMODE_DIRECTION (uint32_t)(AES_CR_MODE|AES_CR_CHMOD) 145 146 #define CRYP_CR_ALGOMODE_AES_ECB_ENCRYPT (0x00000000U) 147 #define CRYP_CR_ALGOMODE_AES_ECB_KEYDERDECRYPT (AES_CR_MODE) 148 #define CRYP_CR_ALGOMODE_AES_CBC_ENCRYPT (AES_CR_CHMOD_0) 149 #define CRYP_CR_ALGOMODE_AES_CBC_KEYDERDECRYPT ((uint32_t)(AES_CR_CHMOD_0|AES_CR_MODE)) 150 #define CRYP_CR_ALGOMODE_AES_CTR_ENCRYPT (AES_CR_CHMOD_1) 151 #define CRYP_CR_ALGOMODE_AES_CTR_DECRYPT ((uint32_t)(AES_CR_CHMOD_1 | AES_CR_MODE_1)) 152 /** 153 * @} 154 */ 155 156 /** @defgroup CRYP_AES_Interrupts AES Interrupts 157 * @{ 158 */ 159 #define CRYP_IT_CC AES_CR_CCIE /*!< Computation Complete interrupt */ 160 #define CRYP_IT_ERR AES_CR_ERRIE /*!< Error interrupt */ 161 162 /** 163 * @} 164 */ 165 166 167 /** @defgroup CRYP_AES_Flags AES Flags 168 * @{ 169 */ 170 #define CRYP_FLAG_CCF AES_SR_CCF /*!< Computation Complete Flag */ 171 #define CRYP_FLAG_RDERR AES_SR_RDERR /*!< Read Error Flag */ 172 #define CRYP_FLAG_WRERR AES_SR_WRERR /*!< Write Error Flag */ 173 174 /** 175 * @} 176 */ 177 178 /** @defgroup CRYP_AES_Clear_Flags AES Clear Flags 179 * @{ 180 */ 181 #define CRYP_CLEARFLAG_CCF AES_CR_CCFC /*!< Computation Complete Flag Clear */ 182 #define CRYP_CLEARFLAG_RDERR AES_CR_ERRC /*!< Read Error Clear */ 183 #define CRYP_CLEARFLAG_WRERR AES_CR_ERRC /*!< Write Error Clear */ 184 185 /** 186 * @} 187 */ 188 189 /** 190 * @} 191 */ 192 193 /* Exported macro ------------------------------------------------------------*/ 194 195 /** @defgroup CRYP_Exported_Macros CRYP Exported Macros 196 * @{ 197 */ 198 199 /** @brief Reset CRYP handle state 200 * @param __HANDLE__ specifies the CRYP handle. 201 * @retval None 202 */ 203 #define __HAL_CRYP_RESET_HANDLE_STATE(__HANDLE__) ((__HANDLE__)->State = HAL_CRYP_STATE_RESET) 204 205 /** 206 * @brief Enable/Disable the CRYP peripheral. 207 * @param __HANDLE__ specifies the CRYP handle. 208 * @retval None 209 */ 210 #define __HAL_CRYP_ENABLE(__HANDLE__) SET_BIT((__HANDLE__)->Instance->CR, AES_CR_EN) 211 #define __HAL_CRYP_DISABLE(__HANDLE__) CLEAR_BIT((__HANDLE__)->Instance->CR, AES_CR_EN) 212 213 /** 214 * @brief Set the algorithm mode: AES-ECB, AES-CBC, AES-CTR, DES-ECB, DES-CBC,... 215 * @param __HANDLE__ specifies the CRYP handle. 216 * @param __MODE__ The algorithm mode. 217 * @retval None 218 */ 219 #define __HAL_CRYP_SET_MODE(__HANDLE__,__MODE__) SET_BIT((__HANDLE__)->Instance->CR, (__MODE__)) 220 221 222 /** @brief Check whether the specified CRYP flag is set or not. 223 * @param __HANDLE__ specifies the CRYP handle. 224 * @param __FLAG__ specifies the flag to check. 225 * This parameter can be one of the following values: 226 * @arg CRYP_FLAG_CCF : Computation Complete Flag 227 * @arg CRYP_FLAG_RDERR : Read Error Flag 228 * @arg CRYP_FLAG_WRERR : Write Error Flag 229 * @retval The new state of __FLAG__ (TRUE or FALSE). 230 */ 231 #define __HAL_CRYP_GET_FLAG(__HANDLE__,__FLAG__) (((__HANDLE__)->Instance->SR & (__FLAG__)) == (__FLAG__)) 232 233 /** @brief Clear the CRYP pending flag. 234 * @param __HANDLE__ specifies the CRYP handle. 235 * @param __FLAG__ specifies the flag to clear. 236 * This parameter can be one of the following values: 237 * @arg CRYP_CLEARFLAG_CCF : Computation Complete Clear Flag 238 * @arg CRYP_CLEARFLAG_RDERR : Read Error Clear 239 * @arg CRYP_CLEARFLAG_WRERR : Write Error Clear 240 * @retval None 241 */ 242 #define __HAL_CRYP_CLEAR_FLAG(__HANDLE__, __FLAG__) SET_BIT((__HANDLE__)->Instance->CR, (__FLAG__)) 243 244 /** 245 * @brief Enable the CRYP interrupt. 246 * @param __HANDLE__ specifies the CRYP handle. 247 * @param __INTERRUPT__ CRYP Interrupt. 248 * @retval None 249 */ 250 #define __HAL_CRYP_ENABLE_IT(__HANDLE__,__INTERRUPT__) SET_BIT((__HANDLE__)->Instance->CR, (__INTERRUPT__)) 251 252 /** 253 * @brief Disable the CRYP interrupt. 254 * @param __HANDLE__ specifies the CRYP handle. 255 * @param __INTERRUPT__ CRYP interrupt. 256 * @retval None 257 */ 258 #define __HAL_CRYP_DISABLE_IT(__HANDLE__,__INTERRUPT__) CLEAR_BIT((__HANDLE__)->Instance->CR, (__INTERRUPT__)) 259 260 /** @brief Checks if the specified CRYP interrupt source is enabled or disabled. 261 * @param __HANDLE__ specifies the CRYP handle. 262 * @param __INTERRUPT__ CRYP interrupt source to check 263 * This parameter can be one of the following values: 264 * @arg CRYP_IT_CC : Computation Complete interrupt 265 * @arg CRYP_IT_ERR : Error interrupt (used for RDERR and WRERR) 266 * @retval State of interruption (SET or RESET) 267 */ 268 #define __HAL_CRYP_GET_IT_SOURCE(__HANDLE__, __INTERRUPT__) \ 269 (( ((__HANDLE__)->Instance->CR & (__INTERRUPT__)) == (__INTERRUPT__) \ 270 )? SET : RESET \ 271 ) 272 273 /** @brief Clear the CRYP pending IT. 274 * @param __HANDLE__ specifies the CRYP handle. 275 * @param __IT__ specifies the IT to clear. 276 * This parameter can be one of the following values: 277 * @arg CRYP_CLEARFLAG_CCF : Computation Complete Clear Flag 278 * @arg CRYP_CLEARFLAG_RDERR : Read Error Clear 279 * @arg CRYP_CLEARFLAG_WRERR : Write Error Clear 280 * @retval None 281 */ 282 #define __HAL_CRYP_CLEAR_IT(__HANDLE__, __IT__) SET_BIT((__HANDLE__)->Instance->CR, (__IT__)) 283 284 /** 285 * @} 286 */ 287 288 /* Include CRYP HAL Extension module */ 289 #include "stm32l0xx_hal_cryp_ex.h" 290 291 /* Exported functions --------------------------------------------------------*/ 292 293 /** @defgroup CRYP_Exported_Functions CRYP Exported Functions 294 * @{ 295 */ 296 297 /** @defgroup CRYP_Exported_Functions_Group1 Initialization and de-initialization functions 298 * @{ 299 */ 300 301 /* Initialization/de-initialization functions *********************************/ 302 HAL_StatusTypeDef HAL_CRYP_Init(CRYP_HandleTypeDef *hcryp); 303 HAL_StatusTypeDef HAL_CRYP_DeInit(CRYP_HandleTypeDef *hcryp); 304 305 /* MSP functions *************************************************************/ 306 void HAL_CRYP_MspInit(CRYP_HandleTypeDef *hcryp); 307 void HAL_CRYP_MspDeInit(CRYP_HandleTypeDef *hcryp); 308 309 /** 310 * @} 311 */ 312 313 /** @defgroup CRYP_Exported_Functions_Group2 AES processing functions 314 * @{ 315 */ 316 317 /* AES encryption/decryption using polling ***********************************/ 318 HAL_StatusTypeDef HAL_CRYP_AESECB_Encrypt(CRYP_HandleTypeDef *hcryp, uint8_t *pPlainData, uint16_t Size, uint8_t *pCypherData, uint32_t Timeout); 319 HAL_StatusTypeDef HAL_CRYP_AESECB_Decrypt(CRYP_HandleTypeDef *hcryp, uint8_t *pCypherData, uint16_t Size, uint8_t *pPlainData, uint32_t Timeout); 320 HAL_StatusTypeDef HAL_CRYP_AESCBC_Encrypt(CRYP_HandleTypeDef *hcryp, uint8_t *pPlainData, uint16_t Size, uint8_t *pCypherData, uint32_t Timeout); 321 HAL_StatusTypeDef HAL_CRYP_AESCBC_Decrypt(CRYP_HandleTypeDef *hcryp, uint8_t *pCypherData, uint16_t Size, uint8_t *pPlainData, uint32_t Timeout); 322 HAL_StatusTypeDef HAL_CRYP_AESCTR_Encrypt(CRYP_HandleTypeDef *hcryp, uint8_t *pPlainData, uint16_t Size, uint8_t *pCypherData, uint32_t Timeout); 323 HAL_StatusTypeDef HAL_CRYP_AESCTR_Decrypt(CRYP_HandleTypeDef *hcryp, uint8_t *pCypherData, uint16_t Size, uint8_t *pPlainData, uint32_t Timeout); 324 325 /* AES encryption/decryption using interrupt *********************************/ 326 HAL_StatusTypeDef HAL_CRYP_AESECB_Encrypt_IT(CRYP_HandleTypeDef *hcryp, uint8_t *pPlainData, uint16_t Size, uint8_t *pCypherData); 327 HAL_StatusTypeDef HAL_CRYP_AESCBC_Encrypt_IT(CRYP_HandleTypeDef *hcryp, uint8_t *pPlainData, uint16_t Size, uint8_t *pCypherData); 328 HAL_StatusTypeDef HAL_CRYP_AESCTR_Encrypt_IT(CRYP_HandleTypeDef *hcryp, uint8_t *pPlainData, uint16_t Size, uint8_t *pCypherData); 329 HAL_StatusTypeDef HAL_CRYP_AESECB_Decrypt_IT(CRYP_HandleTypeDef *hcryp, uint8_t *pCypherData, uint16_t Size, uint8_t *pPlainData); 330 HAL_StatusTypeDef HAL_CRYP_AESCTR_Decrypt_IT(CRYP_HandleTypeDef *hcryp, uint8_t *pCypherData, uint16_t Size, uint8_t *pPlainData); 331 HAL_StatusTypeDef HAL_CRYP_AESCBC_Decrypt_IT(CRYP_HandleTypeDef *hcryp, uint8_t *pCypherData, uint16_t Size, uint8_t *pPlainData); 332 333 /* AES encryption/decryption using DMA ***************************************/ 334 HAL_StatusTypeDef HAL_CRYP_AESECB_Encrypt_DMA(CRYP_HandleTypeDef *hcryp, uint8_t *pPlainData, uint16_t Size, uint8_t *pCypherData); 335 HAL_StatusTypeDef HAL_CRYP_AESECB_Decrypt_DMA(CRYP_HandleTypeDef *hcryp, uint8_t *pCypherData, uint16_t Size, uint8_t *pPlainData); 336 HAL_StatusTypeDef HAL_CRYP_AESCBC_Encrypt_DMA(CRYP_HandleTypeDef *hcryp, uint8_t *pPlainData, uint16_t Size, uint8_t *pCypherData); 337 HAL_StatusTypeDef HAL_CRYP_AESCBC_Decrypt_DMA(CRYP_HandleTypeDef *hcryp, uint8_t *pCypherData, uint16_t Size, uint8_t *pPlainData); 338 HAL_StatusTypeDef HAL_CRYP_AESCTR_Encrypt_DMA(CRYP_HandleTypeDef *hcryp, uint8_t *pPlainData, uint16_t Size, uint8_t *pCypherData); 339 HAL_StatusTypeDef HAL_CRYP_AESCTR_Decrypt_DMA(CRYP_HandleTypeDef *hcryp, uint8_t *pCypherData, uint16_t Size, uint8_t *pPlainData); 340 341 /** 342 * @} 343 */ 344 345 /** @addtogroup CRYP_Exported_Functions_Group3 DMA callback functions 346 * @{ 347 */ 348 349 /* CallBack functions ********************************************************/ 350 void HAL_CRYP_InCpltCallback(CRYP_HandleTypeDef *hcryp); 351 void HAL_CRYP_OutCpltCallback(CRYP_HandleTypeDef *hcryp); 352 void HAL_CRYP_ErrorCallback(CRYP_HandleTypeDef *hcryp); 353 354 /** 355 * @} 356 */ 357 358 /** @defgroup CRYP_Exported_Functions_Group4 CRYP IRQ handler 359 * @{ 360 */ 361 362 /* Processing functions ********************************************************/ 363 void HAL_CRYP_IRQHandler(CRYP_HandleTypeDef *hcryp); 364 365 /** 366 * @} 367 */ 368 369 /** @defgroup CRYP_Exported_Functions_Group5 Peripheral State functions 370 * @{ 371 */ 372 373 /* Peripheral State functions **************************************************/ 374 HAL_CRYP_STATETypeDef HAL_CRYP_GetState(CRYP_HandleTypeDef *hcryp); 375 376 /** 377 * @} 378 */ 379 380 /** 381 * @} 382 */ 383 384 /* Define the private group ***********************************/ 385 /**************************************************************/ 386 /** @defgroup CRYP_Private CRYP Private 387 * @{ 388 */ 389 /** 390 * @} 391 */ 392 /**************************************************************/ 393 394 395 /** 396 * @} 397 */ 398 399 /** 400 * @} 401 */ 402 403 #endif /* STM32L021xx || STM32L041xx || STM32L062xx || STM32L063xx || STM32L081xx || STM32L082xx || STM32L083xx */ 404 #ifdef __cplusplus 405 } 406 #endif 407 408 #endif /* __STM32L0xx_HAL_CRYP_H */ 409 410 /************************ (C) COPYRIGHT STMicroelectronics *****END OF FILE****/ 411 412