Subversion Repositories DashDisplay

Rev

Rev 56 | Details | Compare with Previous | Last modification | View Log | RSS feed

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