amiro-blt / Target / Demo / ARMCM4_STM32F405_Power_Management_GCC / Boot / lib / stdperiphlib / STM32F4xx_StdPeriph_Driver / inc / stm32f4xx_cryp.h @ 69661903
History | View | Annotate | Download (14.1 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>© 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****/
|