1 /**
2   ******************************************************************************
3   * @file    stm32l1xx_hal_cryp.h
4   * @author  MCD Application Team
5   * @version V1.2.0
6   * @date    01-July-2016
7   * @brief   Header file of CRYP HAL module.
8   ******************************************************************************
9   * @attention
10   *
11   * <h2><center>&copy; COPYRIGHT(c) 2016 STMicroelectronics</center></h2>
12   *
13   * Redistribution and use in source and binary forms, with or without modification,
14   * are permitted provided that the following conditions are met:
15   *   1. Redistributions of source code must retain the above copyright notice,
16   *      this list of conditions and the following disclaimer.
17   *   2. Redistributions in binary form must reproduce the above copyright notice,
18   *      this list of conditions and the following disclaimer in the documentation
19   *      and/or other materials provided with the distribution.
20   *   3. Neither the name of STMicroelectronics nor the names of its contributors
21   *      may be used to endorse or promote products derived from this software
22   *      without specific prior written permission.
23   *
24   * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS"
25   * AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
26   * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
27   * DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE LIABLE
28   * FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
29   * DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR
30   * SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER
31   * CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY,
32   * OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
33   * OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
34   *
35   ******************************************************************************
36   */
37 
38 /* Define to prevent recursive inclusion -------------------------------------*/
39 #ifndef __STM32L1xx_HAL_CRYP_H
40 #define __STM32L1xx_HAL_CRYP_H
41 
42 #ifdef __cplusplus
43  extern "C" {
44 #endif
45 
46 #if defined(STM32L162xC) || defined(STM32L162xCA) || defined(STM32L162xD) || defined(STM32L162xE) || defined(STM32L162xDX)
47 
48 /* Includes ------------------------------------------------------------------*/
49 #include "stm32l1xx_hal_def.h"
50 
51 /** @addtogroup STM32L1xx_HAL_Driver
52   * @{
53   */
54 
55 /** @addtogroup CRYP
56   * @{
57   */
58 
59 /* Exported types ------------------------------------------------------------*/
60 
61 /** @defgroup CRYP_Exported_Types CRYP Exported Types
62   * @{
63   */
64 
65 /**
66   * @brief  CRYP Configuration Structure definition
67   */
68 typedef struct
69 {
70   uint32_t DataType;    /*!< 32-bit data, 16-bit data, 8-bit data or 1-bit string.
71                              This parameter can be a value of @ref CRYP_Data_Type */
72 
73   uint8_t* pKey;        /*!< The key used for encryption/decryption */
74 
75   uint8_t* pInitVect;   /*!< The initialization vector used also as initialization
76                              counter in CTR mode */
77 
78 }CRYP_InitTypeDef;
79 
80 /**
81   * @brief HAL CRYP State structures definition
82   */
83 typedef enum
84 {
85   HAL_CRYP_STATE_RESET             = 0x00,  /*!< CRYP not yet initialized or disabled  */
86   HAL_CRYP_STATE_READY             = 0x01,  /*!< CRYP initialized and ready for use    */
87   HAL_CRYP_STATE_BUSY              = 0x02,  /*!< CRYP internal processing is ongoing   */
88   HAL_CRYP_STATE_TIMEOUT           = 0x03,  /*!< CRYP timeout state                    */
89   HAL_CRYP_STATE_ERROR             = 0x04   /*!< CRYP error state                      */
90 
91 }HAL_CRYP_STATETypeDef;
92 
93 /**
94   * @brief HAL CRYP phase structures definition
95   */
96 typedef enum
97 {
98   HAL_CRYP_PHASE_READY             = 0x01,    /*!< CRYP peripheral is ready for initialization. */
99   HAL_CRYP_PHASE_PROCESS           = 0x02,    /*!< CRYP peripheral is in processing phase */
100 }HAL_PhaseTypeDef;
101 
102 /**
103   * @brief  CRYP handle Structure definition
104   */
105 typedef struct
106 {
107   AES_TypeDef                 *Instance;        /*!< Register base address        */
108 
109   CRYP_InitTypeDef            Init;             /*!< CRYP required parameters */
110 
111   uint8_t                     *pCrypInBuffPtr;  /*!< Pointer to CRYP processing (encryption, decryption,...) buffer */
112 
113   uint8_t                     *pCrypOutBuffPtr; /*!< Pointer to CRYP processing (encryption, decryption,...) buffer */
114 
115   __IO uint16_t               CrypInCount;      /*!< Counter of inputed data */
116 
117   __IO uint16_t               CrypOutCount;     /*!< Counter of outputed data */
118 
119   HAL_StatusTypeDef           Status;           /*!< CRYP peripheral status */
120 
121   HAL_PhaseTypeDef            Phase;            /*!< CRYP peripheral phase */
122 
123   DMA_HandleTypeDef           *hdmain;          /*!< CRYP In DMA handle parameters */
124 
125   DMA_HandleTypeDef           *hdmaout;         /*!< CRYP Out DMA handle parameters */
126 
127   HAL_LockTypeDef             Lock;             /*!< CRYP locking object */
128 
129   __IO  HAL_CRYP_STATETypeDef State;            /*!< CRYP peripheral state */
130 
131 }CRYP_HandleTypeDef;
132 
133 /**
134   * @}
135   */
136 
137 /* Exported constants --------------------------------------------------------*/
138 
139 /** @defgroup CRYP_Exported_Constants CRYP Exported Constants
140   * @{
141   */
142 
143 /** @defgroup CRYP_Data_Type CRYP Data Type
144   * @{
145   */
146 #define CRYP_DATATYPE_32B         ((uint32_t)0x00000000)
147 #define CRYP_DATATYPE_16B         AES_CR_DATATYPE_0
148 #define CRYP_DATATYPE_8B          AES_CR_DATATYPE_1
149 #define CRYP_DATATYPE_1B          AES_CR_DATATYPE
150 
151 #define IS_CRYP_DATATYPE(DATATYPE) (((DATATYPE) == CRYP_DATATYPE_32B) || \
152                                     ((DATATYPE) == CRYP_DATATYPE_16B) || \
153                                     ((DATATYPE) == CRYP_DATATYPE_8B)  || \
154                                     ((DATATYPE) == CRYP_DATATYPE_1B))
155 /**
156   * @}
157   */
158 
159 /** @defgroup CRYP_AlgoModeDirection CRYP Algo Mode Direction
160   * @{
161   */
162 #define CRYP_CR_ALGOMODE_DIRECTION              (uint32_t)(AES_CR_MODE|AES_CR_CHMOD)
163 
164 #define CRYP_CR_ALGOMODE_AES_ECB_ENCRYPT        ((uint32_t)0x00000000)
165 #define CRYP_CR_ALGOMODE_AES_ECB_KEYDERDECRYPT  (AES_CR_MODE)
166 #define CRYP_CR_ALGOMODE_AES_CBC_ENCRYPT        (AES_CR_CHMOD_0)
167 #define CRYP_CR_ALGOMODE_AES_CBC_KEYDERDECRYPT  ((uint32_t)(AES_CR_CHMOD_0|AES_CR_MODE))
168 #define CRYP_CR_ALGOMODE_AES_CTR_ENCRYPT        (AES_CR_CHMOD_1)
169 #define CRYP_CR_ALGOMODE_AES_CTR_DECRYPT        ((uint32_t)(AES_CR_CHMOD_1 | AES_CR_MODE_1))
170 /**
171   * @}
172   */
173 
174 /** @defgroup CRYP_AES_Interrupts AES Interrupts
175   * @{
176   */
177 #define CRYP_IT_CC                          AES_CR_CCIE  /*!< Computation Complete interrupt */
178 #define CRYP_IT_ERR                         AES_CR_ERRIE /*!< Error interrupt                */
179 
180 /**
181   * @}
182   */
183 
184 
185 /** @defgroup CRYP_AES_Flags AES Flags
186   * @{
187   */
188 #define CRYP_FLAG_CCF                       AES_SR_CCF    /*!< Computation Complete Flag */
189 #define CRYP_FLAG_RDERR                     AES_SR_RDERR  /*!< Read Error Flag           */
190 #define CRYP_FLAG_WRERR                     AES_SR_WRERR  /*!< Write Error Flag          */
191 
192 /**
193   * @}
194   */
195 
196 /** @defgroup CRYP_AES_Clear_Flags AES Clear Flags
197   * @{
198   */
199 #define CRYP_CLEARFLAG_CCF                       AES_CR_CCFC   /*!< Computation Complete Flag Clear */
200 #define CRYP_CLEARFLAG_RDERR                     AES_CR_ERRC   /*!< Read Error Clear           */
201 #define CRYP_CLEARFLAG_WRERR                     AES_CR_ERRC   /*!< Write Error Clear          */
202 
203 /**
204   * @}
205   */
206 
207 /**
208   * @}
209   */
210 
211 /* Exported macro ------------------------------------------------------------*/
212 
213 /** @defgroup CRYP_Exported_Macros CRYP Exported Macros
214   * @{
215   */
216 
217 /** @brief Reset CRYP handle state
218   * @param  __HANDLE__: specifies the CRYP handle.
219   * @retval None
220   */
221 #define __HAL_CRYP_RESET_HANDLE_STATE(__HANDLE__) ((__HANDLE__)->State = HAL_CRYP_STATE_RESET)
222 
223 /**
224   * @brief  Enable/Disable the CRYP peripheral.
225   * @param  __HANDLE__: specifies the CRYP handle.
226   * @retval None
227   */
228 #define __HAL_CRYP_ENABLE(__HANDLE__)                   SET_BIT((__HANDLE__)->Instance->CR, AES_CR_EN)
229 #define __HAL_CRYP_DISABLE(__HANDLE__)                  CLEAR_BIT((__HANDLE__)->Instance->CR, AES_CR_EN)
230 
231 /**
232   * @brief  Set the algorithm mode: AES-ECB, AES-CBC, AES-CTR, DES-ECB, DES-CBC,...
233   * @param  __HANDLE__: specifies the CRYP handle.
234   * @param  __MODE__: The algorithm mode.
235   * @retval None
236   */
237 #define __HAL_CRYP_SET_MODE(__HANDLE__,__MODE__)        SET_BIT((__HANDLE__)->Instance->CR, (__MODE__))
238 
239 
240 /** @brief  Check whether the specified CRYP flag is set or not.
241   * @param  __HANDLE__: specifies the CRYP handle.
242   * @param  __FLAG__: specifies the flag to check.
243   *         This parameter can be one of the following values:
244   *            @arg CRYP_FLAG_CCF   : Computation Complete Flag
245   *            @arg CRYP_FLAG_RDERR : Read Error Flag
246   *            @arg CRYP_FLAG_WRERR : Write Error Flag
247   * @retval The new state of __FLAG__ (TRUE or FALSE).
248   */
249 #define __HAL_CRYP_GET_FLAG(__HANDLE__,__FLAG__)         (((__HANDLE__)->Instance->SR & (__FLAG__)) == (__FLAG__))
250 
251 /** @brief  Clear the CRYP pending flag.
252   * @param  __HANDLE__: specifies the CRYP handle.
253   * @param  __FLAG__: specifies the flag to clear.
254   *         This parameter can be one of the following values:
255   *            @arg CRYP_CLEARFLAG_CCF   : Computation Complete Clear Flag
256   *            @arg CRYP_CLEARFLAG_RDERR : Read Error Clear
257   *            @arg CRYP_CLEARFLAG_WRERR : Write Error Clear
258   * @retval None
259   */
260 #define __HAL_CRYP_CLEAR_FLAG(__HANDLE__, __FLAG__)      SET_BIT((__HANDLE__)->Instance->CR, (__FLAG__))
261 
262 /**
263   * @brief  Enable the CRYP interrupt.
264   * @param  __HANDLE__: specifies the CRYP handle.
265   * @param  __INTERRUPT__: CRYP Interrupt.
266   * @retval None
267   */
268 #define __HAL_CRYP_ENABLE_IT(__HANDLE__,__INTERRUPT__)   SET_BIT((__HANDLE__)->Instance->CR, (__INTERRUPT__))
269 
270 /**
271   * @brief  Disable the CRYP interrupt.
272   * @param  __HANDLE__: specifies the CRYP handle.
273   * @param  __INTERRUPT__: CRYP interrupt.
274   * @retval None
275   */
276 #define __HAL_CRYP_DISABLE_IT(__HANDLE__,__INTERRUPT__)  CLEAR_BIT((__HANDLE__)->Instance->CR, (__INTERRUPT__))
277 
278 /** @brief  Checks if the specified CRYP interrupt source is enabled or disabled.
279   * @param  __HANDLE__: specifies the CRYP handle.
280   * @param __INTERRUPT__: CRYP interrupt source to check
281   *         This parameter can be one of the following values:
282   *            @arg CRYP_IT_CC   : Computation Complete interrupt
283   *            @arg CRYP_IT_ERR : Error interrupt (used for RDERR and WRERR)
284   * @retval State of interruption (SET or RESET)
285   */
286 #define __HAL_CRYP_GET_IT_SOURCE(__HANDLE__, __INTERRUPT__) \
287     (( ((__HANDLE__)->Instance->CR & (__INTERRUPT__)) == (__INTERRUPT__)       \
288      )? SET : RESET                                         \
289     )
290 
291 /** @brief  Clear the CRYP pending IT.
292   * @param  __HANDLE__: specifies the CRYP handle.
293   * @param  __IT__: specifies the IT to clear.
294   *         This parameter can be one of the following values:
295   *            @arg CRYP_CLEARFLAG_CCF   : Computation Complete Clear Flag
296   *            @arg CRYP_CLEARFLAG_RDERR : Read Error Clear
297   *            @arg CRYP_CLEARFLAG_WRERR : Write Error Clear
298   * @retval None
299   */
300 #define __HAL_CRYP_CLEAR_IT(__HANDLE__, __IT__) SET_BIT((__HANDLE__)->Instance->CR, (__IT__))
301 
302 /**
303   * @}
304   */
305 
306 /* Include CRYP HAL Extension module */
307 #include "stm32l1xx_hal_cryp_ex.h"
308 
309 /* Exported functions --------------------------------------------------------*/
310 
311 /** @addtogroup CRYP_Exported_Functions
312   * @{
313   */
314 
315 /** @addtogroup CRYP_Exported_Functions_Group1
316   * @{
317   */
318 
319 /* Initialization/de-initialization functions *********************************/
320 HAL_StatusTypeDef     HAL_CRYP_Init(CRYP_HandleTypeDef *hcryp);
321 HAL_StatusTypeDef     HAL_CRYP_DeInit(CRYP_HandleTypeDef *hcryp);
322 
323 /* MSP functions  *************************************************************/
324 void                  HAL_CRYP_MspInit(CRYP_HandleTypeDef *hcryp);
325 void                  HAL_CRYP_MspDeInit(CRYP_HandleTypeDef *hcryp);
326 
327 /**
328   * @}
329   */
330 
331 /** @addtogroup CRYP_Exported_Functions_Group2
332   * @{
333   */
334 
335 /* AES encryption/decryption using polling  ***********************************/
336 HAL_StatusTypeDef     HAL_CRYP_AESECB_Encrypt(CRYP_HandleTypeDef *hcryp, uint8_t *pPlainData, uint16_t Size, uint8_t *pCypherData, uint32_t Timeout);
337 HAL_StatusTypeDef     HAL_CRYP_AESECB_Decrypt(CRYP_HandleTypeDef *hcryp, uint8_t *pCypherData, uint16_t Size, uint8_t *pPlainData, uint32_t Timeout);
338 HAL_StatusTypeDef     HAL_CRYP_AESCBC_Encrypt(CRYP_HandleTypeDef *hcryp, uint8_t *pPlainData, uint16_t Size, uint8_t *pCypherData, uint32_t Timeout);
339 HAL_StatusTypeDef     HAL_CRYP_AESCBC_Decrypt(CRYP_HandleTypeDef *hcryp, uint8_t *pCypherData, uint16_t Size, uint8_t *pPlainData, uint32_t Timeout);
340 HAL_StatusTypeDef     HAL_CRYP_AESCTR_Encrypt(CRYP_HandleTypeDef *hcryp, uint8_t *pPlainData, uint16_t Size, uint8_t *pCypherData, uint32_t Timeout);
341 HAL_StatusTypeDef     HAL_CRYP_AESCTR_Decrypt(CRYP_HandleTypeDef *hcryp, uint8_t *pCypherData, uint16_t Size, uint8_t *pPlainData, uint32_t Timeout);
342 
343 /* AES encryption/decryption using interrupt  *********************************/
344 HAL_StatusTypeDef     HAL_CRYP_AESECB_Encrypt_IT(CRYP_HandleTypeDef *hcryp, uint8_t *pPlainData, uint16_t Size, uint8_t *pCypherData);
345 HAL_StatusTypeDef     HAL_CRYP_AESCBC_Encrypt_IT(CRYP_HandleTypeDef *hcryp, uint8_t *pPlainData, uint16_t Size, uint8_t *pCypherData);
346 HAL_StatusTypeDef     HAL_CRYP_AESCTR_Encrypt_IT(CRYP_HandleTypeDef *hcryp, uint8_t *pPlainData, uint16_t Size, uint8_t *pCypherData);
347 HAL_StatusTypeDef     HAL_CRYP_AESECB_Decrypt_IT(CRYP_HandleTypeDef *hcryp, uint8_t *pCypherData, uint16_t Size, uint8_t *pPlainData);
348 HAL_StatusTypeDef     HAL_CRYP_AESCTR_Decrypt_IT(CRYP_HandleTypeDef *hcryp, uint8_t *pCypherData, uint16_t Size, uint8_t *pPlainData);
349 HAL_StatusTypeDef     HAL_CRYP_AESCBC_Decrypt_IT(CRYP_HandleTypeDef *hcryp, uint8_t *pCypherData, uint16_t Size, uint8_t *pPlainData);
350 
351 /* AES encryption/decryption using DMA  ***************************************/
352 HAL_StatusTypeDef     HAL_CRYP_AESECB_Encrypt_DMA(CRYP_HandleTypeDef *hcryp, uint8_t *pPlainData, uint16_t Size, uint8_t *pCypherData);
353 HAL_StatusTypeDef     HAL_CRYP_AESECB_Decrypt_DMA(CRYP_HandleTypeDef *hcryp, uint8_t *pCypherData, uint16_t Size, uint8_t *pPlainData);
354 HAL_StatusTypeDef     HAL_CRYP_AESCBC_Encrypt_DMA(CRYP_HandleTypeDef *hcryp, uint8_t *pPlainData, uint16_t Size, uint8_t *pCypherData);
355 HAL_StatusTypeDef     HAL_CRYP_AESCBC_Decrypt_DMA(CRYP_HandleTypeDef *hcryp, uint8_t *pCypherData, uint16_t Size, uint8_t *pPlainData);
356 HAL_StatusTypeDef     HAL_CRYP_AESCTR_Encrypt_DMA(CRYP_HandleTypeDef *hcryp, uint8_t *pPlainData, uint16_t Size, uint8_t *pCypherData);
357 HAL_StatusTypeDef     HAL_CRYP_AESCTR_Decrypt_DMA(CRYP_HandleTypeDef *hcryp, uint8_t *pCypherData, uint16_t Size, uint8_t *pPlainData);
358 
359 /**
360   * @}
361   */
362 
363 /** @addtogroup CRYP_Exported_Functions_Group3
364   * @{
365   */
366 
367 /* CallBack functions  ********************************************************/
368 void                  HAL_CRYP_InCpltCallback(CRYP_HandleTypeDef *hcryp);
369 void                  HAL_CRYP_OutCpltCallback(CRYP_HandleTypeDef *hcryp);
370 void                  HAL_CRYP_ErrorCallback(CRYP_HandleTypeDef *hcryp);
371 
372 /**
373   * @}
374   */
375 
376 /** @addtogroup CRYP_Exported_Functions_Group4
377   * @{
378   */
379 
380 /* Processing functions  ********************************************************/
381 void                  HAL_CRYP_IRQHandler(CRYP_HandleTypeDef *hcryp);
382 
383 /**
384   * @}
385   */
386 
387 /** @addtogroup CRYP_Exported_Functions_Group5
388   * @{
389   */
390 
391 /* Peripheral State functions  **************************************************/
392 HAL_CRYP_STATETypeDef HAL_CRYP_GetState(CRYP_HandleTypeDef *hcryp);
393 
394 /**
395   * @}
396   */
397 
398 /**
399   * @}
400   */
401 
402 /**
403   * @}
404   */
405 
406 /**
407   * @}
408   */
409 
410 #endif /* STM32L162xC || STM32L162xCA || STM32L162xD || STM32L162xE || STM32L162xDX*/
411 
412 #ifdef __cplusplus
413 }
414 #endif
415 
416 #endif /* __STM32L1xx_HAL_CRYP_H */
417 
418 /************************ (C) COPYRIGHT STMicroelectronics *****END OF FILE****/
419