Statistics
| Branch: | Tag: | Revision:

amiro-blt / Target / Modules / PowerManagement_1-2 / Boot / lib / stdperiphlib / STM32F4xx_StdPeriph_Driver / inc / stm32f4xx_cryp.h @ a270d48f

History | View | Annotate | Download (14.143 KB)

1
/**
2
  ******************************************************************************
3
  * @file    stm32f4xx_cryp.h
4
  * @author  MCD Application Team
5
  * @version V1.1.0
6
  * @date    11-January-2013
7
  * @brief   This file contains all the functions prototypes for the Cryptographic
8
  *          processor(CRYP) firmware library.
9
  ******************************************************************************
10
  * @attention
11
  *
12
  * <h2><center>&copy; COPYRIGHT 2013 STMicroelectronics</center></h2>
13
  *
14
  * Licensed under MCD-ST Liberty SW License Agreement V2, (the "License");
15
  * You may not use this file except in compliance with the License.
16
  * You may obtain a copy of the License at:
17
  *
18
  *        http://www.st.com/software_license_agreement_liberty_v2
19
  *
20
  * Unless required by applicable law or agreed to in writing, software 
21
  * distributed under the License is distributed on an "AS IS" BASIS, 
22
  * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
23
  * See the License for the specific language governing permissions and
24
  * limitations under the License.
25
  *
26
  ******************************************************************************
27
  */
28

    
29
/* Define to prevent recursive inclusion -------------------------------------*/
30
#ifndef __STM32F4xx_CRYP_H
31
#define __STM32F4xx_CRYP_H
32

    
33
#ifdef __cplusplus
34
 extern "C" {
35
#endif
36

    
37
/* Includes ------------------------------------------------------------------*/
38
#include "stm32f4xx.h"
39

    
40
/** @addtogroup STM32F4xx_StdPeriph_Driver
41
  * @{
42
  */
43

    
44
/** @addtogroup CRYP
45
  * @{
46
  */ 
47

    
48
/* Exported types ------------------------------------------------------------*/
49

    
50
/** 
51
  * @brief   CRYP Init structure definition  
52
  */ 
53
typedef struct
54
{
55
  uint32_t CRYP_AlgoDir;   /*!< Encrypt or Decrypt. This parameter can be a 
56
                                value of @ref CRYP_Algorithm_Direction */
57
  uint32_t CRYP_AlgoMode;  /*!< TDES-ECB, TDES-CBC, DES-ECB, DES-CBC, AES-ECB, 
58
                                AES-CBC, AES-CTR, AES-Key, AES-GCM and AES-CCM.
59
                                This parameter can be a value of @ref CRYP_Algorithm_Mode */
60
  uint32_t CRYP_DataType;  /*!< 32-bit data, 16-bit data, bit data or bit string.
61
                                This parameter can be a value of @ref CRYP_Data_Type */ 
62
  uint32_t CRYP_KeySize;   /*!< Used only in AES mode only : 128, 192 or 256 bit 
63
                                key length. This parameter can be a value of 
64
                                @ref CRYP_Key_Size_for_AES_only */
65
}CRYP_InitTypeDef;
66

    
67
/** 
68
  * @brief   CRYP Key(s) structure definition  
69
  */ 
70
typedef struct
71
{
72
  uint32_t CRYP_Key0Left;  /*!< Key 0 Left  */
73
  uint32_t CRYP_Key0Right; /*!< Key 0 Right */
74
  uint32_t CRYP_Key1Left;  /*!< Key 1 left  */
75
  uint32_t CRYP_Key1Right; /*!< Key 1 Right */
76
  uint32_t CRYP_Key2Left;  /*!< Key 2 left  */
77
  uint32_t CRYP_Key2Right; /*!< Key 2 Right */
78
  uint32_t CRYP_Key3Left;  /*!< Key 3 left  */
79
  uint32_t CRYP_Key3Right; /*!< Key 3 Right */
80
}CRYP_KeyInitTypeDef;
81
/** 
82
  * @brief   CRYP Initialization Vectors (IV) structure definition  
83
  */ 
84
typedef struct
85
{
86
  uint32_t CRYP_IV0Left;  /*!< Init Vector 0 Left  */
87
  uint32_t CRYP_IV0Right; /*!< Init Vector 0 Right */
88
  uint32_t CRYP_IV1Left;  /*!< Init Vector 1 left  */
89
  uint32_t CRYP_IV1Right; /*!< Init Vector 1 Right */
90
}CRYP_IVInitTypeDef;
91

    
92
/** 
93
  * @brief  CRYP context swapping structure definition  
94
  */ 
95
typedef struct
96
{
97
  /*!< Current Configuration */
98
  uint32_t CR_CurrentConfig;
99
  /*!< IV */
100
  uint32_t CRYP_IV0LR;
101
  uint32_t CRYP_IV0RR;
102
  uint32_t CRYP_IV1LR;
103
  uint32_t CRYP_IV1RR;
104
  /*!< KEY */
105
  uint32_t CRYP_K0LR;
106
  uint32_t CRYP_K0RR;
107
  uint32_t CRYP_K1LR;
108
  uint32_t CRYP_K1RR;
109
  uint32_t CRYP_K2LR;
110
  uint32_t CRYP_K2RR;
111
  uint32_t CRYP_K3LR;
112
  uint32_t CRYP_K3RR;
113
  uint32_t CRYP_CSGCMCCMR[8];
114
  uint32_t CRYP_CSGCMR[8];
115
}CRYP_Context;
116

    
117

    
118
/* Exported constants --------------------------------------------------------*/
119

    
120
/** @defgroup CRYP_Exported_Constants
121
  * @{
122
  */
123

    
124
/** @defgroup CRYP_Algorithm_Direction 
125
  * @{
126
  */
127
#define CRYP_AlgoDir_Encrypt      ((uint16_t)0x0000)
128
#define CRYP_AlgoDir_Decrypt      ((uint16_t)0x0004)
129
#define IS_CRYP_ALGODIR(ALGODIR) (((ALGODIR) == CRYP_AlgoDir_Encrypt) || \
130
                                  ((ALGODIR) == CRYP_AlgoDir_Decrypt))
131

    
132
/**
133
  * @}
134
  */ 
135
 
136
/** @defgroup CRYP_Algorithm_Mode 
137
  * @{
138
  */
139

    
140
/*!< TDES Modes */
141
#define CRYP_AlgoMode_TDES_ECB    ((uint32_t)0x00000000)
142
#define CRYP_AlgoMode_TDES_CBC    ((uint32_t)0x00000008)
143

    
144
/*!< DES Modes */
145
#define CRYP_AlgoMode_DES_ECB     ((uint32_t)0x00000010)
146
#define CRYP_AlgoMode_DES_CBC     ((uint32_t)0x00000018)
147

    
148
/*!< AES Modes */
149
#define CRYP_AlgoMode_AES_ECB     ((uint32_t)0x00000020)
150
#define CRYP_AlgoMode_AES_CBC     ((uint32_t)0x00000028)
151
#define CRYP_AlgoMode_AES_CTR     ((uint32_t)0x00000030)
152
#define CRYP_AlgoMode_AES_Key     ((uint32_t)0x00000038)
153
#define CRYP_AlgoMode_AES_GCM     ((uint32_t)0x00080000)
154
#define CRYP_AlgoMode_AES_CCM     ((uint32_t)0x00080008)
155

    
156
#define IS_CRYP_ALGOMODE(ALGOMODE) (((ALGOMODE) == CRYP_AlgoMode_TDES_ECB) || \
157
                                   ((ALGOMODE) == CRYP_AlgoMode_TDES_CBC)|| \
158
                                   ((ALGOMODE) == CRYP_AlgoMode_DES_ECB) || \
159
                                   ((ALGOMODE) == CRYP_AlgoMode_DES_CBC) || \
160
                                   ((ALGOMODE) == CRYP_AlgoMode_AES_ECB) || \
161
                                   ((ALGOMODE) == CRYP_AlgoMode_AES_CBC) || \
162
                                   ((ALGOMODE) == CRYP_AlgoMode_AES_CTR) || \
163
                                   ((ALGOMODE) == CRYP_AlgoMode_AES_Key) || \
164
                                   ((ALGOMODE) == CRYP_AlgoMode_AES_GCM) || \
165
                                   ((ALGOMODE) == CRYP_AlgoMode_AES_CCM))
166
/**
167
  * @}
168
  */ 
169

    
170
/** @defgroup CRYP_Phase 
171
  * @{
172
  */
173

    
174
/*!< The phases are valid only for AES-GCM and AES-CCM modes */
175
#define CRYP_Phase_Init           ((uint32_t)0x00000000)
176
#define CRYP_Phase_Header         CRYP_CR_GCM_CCMPH_0
177
#define CRYP_Phase_Payload        CRYP_CR_GCM_CCMPH_1
178
#define CRYP_Phase_Final          CRYP_CR_GCM_CCMPH
179

    
180
#define IS_CRYP_PHASE(PHASE) (((PHASE) == CRYP_Phase_Init)    || \
181
                              ((PHASE) == CRYP_Phase_Header)  || \
182
                              ((PHASE) == CRYP_Phase_Payload) || \
183
                              ((PHASE) == CRYP_Phase_Final))
184

    
185
/**
186
  * @}
187
  */ 
188

    
189
/** @defgroup CRYP_Data_Type 
190
  * @{
191
  */
192
#define CRYP_DataType_32b         ((uint16_t)0x0000)
193
#define CRYP_DataType_16b         ((uint16_t)0x0040)
194
#define CRYP_DataType_8b          ((uint16_t)0x0080)
195
#define CRYP_DataType_1b          ((uint16_t)0x00C0)
196
#define IS_CRYP_DATATYPE(DATATYPE) (((DATATYPE) == CRYP_DataType_32b) || \
197
                                    ((DATATYPE) == CRYP_DataType_16b)|| \
198
                                    ((DATATYPE) == CRYP_DataType_8b)|| \
199
                                    ((DATATYPE) == CRYP_DataType_1b))  
200
/**
201
  * @}
202
  */
203
                                     
204
/** @defgroup CRYP_Key_Size_for_AES_only 
205
  * @{
206
  */
207
#define CRYP_KeySize_128b         ((uint16_t)0x0000)
208
#define CRYP_KeySize_192b         ((uint16_t)0x0100)
209
#define CRYP_KeySize_256b         ((uint16_t)0x0200)
210
#define IS_CRYP_KEYSIZE(KEYSIZE) (((KEYSIZE) == CRYP_KeySize_128b)|| \
211
                                  ((KEYSIZE) == CRYP_KeySize_192b)|| \
212
                                  ((KEYSIZE) == CRYP_KeySize_256b))
213
/**
214
  * @}
215
  */
216

    
217
/** @defgroup CRYP_flags_definition 
218
  * @{
219
  */
220
#define CRYP_FLAG_BUSY            ((uint8_t)0x10)  /*!< The CRYP core is currently 
221
                                                        processing a block of data 
222
                                                        or a key preparation (for 
223
                                                        AES decryption). */
224
#define CRYP_FLAG_IFEM            ((uint8_t)0x01)  /*!< Input Fifo Empty */
225
#define CRYP_FLAG_IFNF            ((uint8_t)0x02)  /*!< Input Fifo is Not Full */
226
#define CRYP_FLAG_INRIS           ((uint8_t)0x22)  /*!< Raw interrupt pending */
227
#define CRYP_FLAG_OFNE            ((uint8_t)0x04)  /*!< Input Fifo service raw 
228
                                                        interrupt status */
229
#define CRYP_FLAG_OFFU            ((uint8_t)0x08)  /*!< Output Fifo is Full */
230
#define CRYP_FLAG_OUTRIS          ((uint8_t)0x21)  /*!< Output Fifo service raw 
231
                                                        interrupt status */
232

    
233
#define IS_CRYP_GET_FLAG(FLAG) (((FLAG) == CRYP_FLAG_IFEM)  || \
234
                                ((FLAG) == CRYP_FLAG_IFNF)  || \
235
                                ((FLAG) == CRYP_FLAG_OFNE)  || \
236
                                ((FLAG) == CRYP_FLAG_OFFU)  || \
237
                                ((FLAG) == CRYP_FLAG_BUSY)  || \
238
                                ((FLAG) == CRYP_FLAG_OUTRIS)|| \
239
                                ((FLAG) == CRYP_FLAG_INRIS))
240
/**
241
  * @}
242
  */
243

    
244
/** @defgroup CRYP_interrupts_definition 
245
  * @{
246
  */
247
#define CRYP_IT_INI               ((uint8_t)0x01) /*!< IN Fifo Interrupt */
248
#define CRYP_IT_OUTI              ((uint8_t)0x02) /*!< OUT Fifo Interrupt */
249
#define IS_CRYP_CONFIG_IT(IT) ((((IT) & (uint8_t)0xFC) == 0x00) && ((IT) != 0x00))
250
#define IS_CRYP_GET_IT(IT) (((IT) == CRYP_IT_INI) || ((IT) == CRYP_IT_OUTI))
251

    
252
/**
253
  * @}
254
  */
255

    
256
/** @defgroup CRYP_Encryption_Decryption_modes_definition 
257
  * @{
258
  */
259
#define MODE_ENCRYPT             ((uint8_t)0x01)
260
#define MODE_DECRYPT             ((uint8_t)0x00)
261

    
262
/**
263
  * @}
264
  */
265

    
266
/** @defgroup CRYP_DMA_transfer_requests 
267
  * @{
268
  */
269
#define CRYP_DMAReq_DataIN             ((uint8_t)0x01)
270
#define CRYP_DMAReq_DataOUT            ((uint8_t)0x02)
271
#define IS_CRYP_DMAREQ(DMAREQ) ((((DMAREQ) & (uint8_t)0xFC) == 0x00) && ((DMAREQ) != 0x00))
272
/**
273
  * @}
274
  */ 
275

    
276
/**
277
  * @}
278
  */ 
279

    
280
/* Exported macro ------------------------------------------------------------*/
281
/* Exported functions --------------------------------------------------------*/
282

    
283
/*  Function used to set the CRYP configuration to the default reset state ****/
284
void CRYP_DeInit(void);
285

    
286
/* CRYP Initialization and Configuration functions ****************************/
287
void CRYP_Init(CRYP_InitTypeDef* CRYP_InitStruct);
288
void CRYP_StructInit(CRYP_InitTypeDef* CRYP_InitStruct);
289
void CRYP_KeyInit(CRYP_KeyInitTypeDef* CRYP_KeyInitStruct);
290
void CRYP_KeyStructInit(CRYP_KeyInitTypeDef* CRYP_KeyInitStruct);
291
void CRYP_IVInit(CRYP_IVInitTypeDef* CRYP_IVInitStruct);
292
void CRYP_IVStructInit(CRYP_IVInitTypeDef* CRYP_IVInitStruct);
293
void CRYP_Cmd(FunctionalState NewState);
294
void CRYP_PhaseConfig(uint32_t CRYP_Phase);
295
void CRYP_FIFOFlush(void);
296
/* CRYP Data processing functions *********************************************/
297
void CRYP_DataIn(uint32_t Data);
298
uint32_t CRYP_DataOut(void);
299

    
300
/* CRYP Context swapping functions ********************************************/
301
ErrorStatus CRYP_SaveContext(CRYP_Context* CRYP_ContextSave,
302
                             CRYP_KeyInitTypeDef* CRYP_KeyInitStruct);
303
void CRYP_RestoreContext(CRYP_Context* CRYP_ContextRestore);
304

    
305
/* CRYP DMA interface function ************************************************/
306
void CRYP_DMACmd(uint8_t CRYP_DMAReq, FunctionalState NewState);
307

    
308
/* Interrupts and flags management functions **********************************/
309
void CRYP_ITConfig(uint8_t CRYP_IT, FunctionalState NewState);
310
ITStatus CRYP_GetITStatus(uint8_t CRYP_IT);
311
FunctionalState CRYP_GetCmdStatus(void);
312
FlagStatus CRYP_GetFlagStatus(uint8_t CRYP_FLAG);
313

    
314
/* High Level AES functions **************************************************/
315
ErrorStatus CRYP_AES_ECB(uint8_t Mode,
316
                         uint8_t *Key, uint16_t Keysize,
317
                         uint8_t *Input, uint32_t Ilength,
318
                         uint8_t *Output);
319

    
320
ErrorStatus CRYP_AES_CBC(uint8_t Mode,
321
                         uint8_t InitVectors[16],
322
                         uint8_t *Key, uint16_t Keysize,
323
                         uint8_t *Input, uint32_t Ilength,
324
                         uint8_t *Output);
325

    
326
ErrorStatus CRYP_AES_CTR(uint8_t Mode,
327
                         uint8_t InitVectors[16],
328
                         uint8_t *Key, uint16_t Keysize,
329
                         uint8_t *Input, uint32_t Ilength,
330
                         uint8_t *Output);
331

    
332
ErrorStatus CRYP_AES_GCM(uint8_t Mode, uint8_t InitVectors[16],
333
                         uint8_t *Key, uint16_t Keysize,
334
                         uint8_t *Input, uint32_t ILength,
335
                         uint8_t *Header, uint32_t HLength,
336
                         uint8_t *Output, uint8_t *AuthTAG);
337

    
338
ErrorStatus CRYP_AES_CCM(uint8_t Mode, 
339
                         uint8_t* Nonce, uint32_t NonceSize,
340
                         uint8_t* Key, uint16_t Keysize,
341
                         uint8_t* Input, uint32_t ILength,
342
                         uint8_t* Header, uint32_t HLength, uint8_t *HBuffer,
343
                         uint8_t* Output,
344
                         uint8_t* AuthTAG, uint32_t TAGSize);
345

    
346
/* High Level TDES functions **************************************************/
347
ErrorStatus CRYP_TDES_ECB(uint8_t Mode,
348
                           uint8_t Key[24], 
349
                           uint8_t *Input, uint32_t Ilength,
350
                           uint8_t *Output);
351

    
352
ErrorStatus CRYP_TDES_CBC(uint8_t Mode,
353
                          uint8_t Key[24],
354
                          uint8_t InitVectors[8],
355
                          uint8_t *Input, uint32_t Ilength,
356
                          uint8_t *Output);
357

    
358
/* High Level DES functions **************************************************/
359
ErrorStatus CRYP_DES_ECB(uint8_t Mode,
360
                         uint8_t Key[8],
361
                         uint8_t *Input, uint32_t Ilength,
362
                         uint8_t *Output);
363

    
364
ErrorStatus CRYP_DES_CBC(uint8_t Mode,
365
                         uint8_t Key[8],
366
                         uint8_t InitVectors[8],
367
                         uint8_t *Input,uint32_t Ilength,
368
                         uint8_t *Output);
369

    
370
#ifdef __cplusplus
371
}
372
#endif
373

    
374
#endif /*__STM32F4xx_CRYP_H */
375

    
376
/**
377
  * @}
378
  */
379

    
380
/**
381
  * @}
382
  */ 
383

    
384
/************************ (C) COPYRIGHT STMicroelectronics *****END OF FILE****/