00001
00029
00030 #ifndef __STM32F4xx_CRYP_H
00031 #define __STM32F4xx_CRYP_H
00032
00033 #ifdef __cplusplus
00034 extern "C" {
00035 #endif
00036
00037
00038 #include "stm32f4xx.h"
00039
00048
00049
00053 typedef struct
00054 {
00055 uint16_t CRYP_AlgoDir;
00057 uint16_t CRYP_AlgoMode;
00060 uint16_t CRYP_DataType;
00062 uint16_t CRYP_KeySize;
00065 }CRYP_InitTypeDef;
00066
00070 typedef struct
00071 {
00072 uint32_t CRYP_Key0Left;
00073 uint32_t CRYP_Key0Right;
00074 uint32_t CRYP_Key1Left;
00075 uint32_t CRYP_Key1Right;
00076 uint32_t CRYP_Key2Left;
00077 uint32_t CRYP_Key2Right;
00078 uint32_t CRYP_Key3Left;
00079 uint32_t CRYP_Key3Right;
00080 }CRYP_KeyInitTypeDef;
00084 typedef struct
00085 {
00086 uint32_t CRYP_IV0Left;
00087 uint32_t CRYP_IV0Right;
00088 uint32_t CRYP_IV1Left;
00089 uint32_t CRYP_IV1Right;
00090 }CRYP_IVInitTypeDef;
00091
00095 typedef struct
00096 {
00098 uint32_t CR_bits9to2;
00100 uint32_t CRYP_IV0LR;
00101 uint32_t CRYP_IV0RR;
00102 uint32_t CRYP_IV1LR;
00103 uint32_t CRYP_IV1RR;
00105 uint32_t CRYP_K0LR;
00106 uint32_t CRYP_K0RR;
00107 uint32_t CRYP_K1LR;
00108 uint32_t CRYP_K1RR;
00109 uint32_t CRYP_K2LR;
00110 uint32_t CRYP_K2RR;
00111 uint32_t CRYP_K3LR;
00112 uint32_t CRYP_K3RR;
00113 }CRYP_Context;
00114
00115
00116
00117
00125 #define CRYP_AlgoDir_Encrypt ((uint16_t)0x0000)
00126 #define CRYP_AlgoDir_Decrypt ((uint16_t)0x0004)
00127 #define IS_CRYP_ALGODIR(ALGODIR) (((ALGODIR) == CRYP_AlgoDir_Encrypt) || \
00128 ((ALGODIR) == CRYP_AlgoDir_Decrypt))
00129
00139 #define CRYP_AlgoMode_TDES_ECB ((uint16_t)0x0000)
00140 #define CRYP_AlgoMode_TDES_CBC ((uint16_t)0x0008)
00141
00143 #define CRYP_AlgoMode_DES_ECB ((uint16_t)0x0010)
00144 #define CRYP_AlgoMode_DES_CBC ((uint16_t)0x0018)
00145
00147 #define CRYP_AlgoMode_AES_ECB ((uint16_t)0x0020)
00148 #define CRYP_AlgoMode_AES_CBC ((uint16_t)0x0028)
00149 #define CRYP_AlgoMode_AES_CTR ((uint16_t)0x0030)
00150 #define CRYP_AlgoMode_AES_Key ((uint16_t)0x0038)
00151
00152 #define IS_CRYP_ALGOMODE(ALGOMODE) (((ALGOMODE) == CRYP_AlgoMode_TDES_ECB) || \
00153 ((ALGOMODE) == CRYP_AlgoMode_TDES_CBC)|| \
00154 ((ALGOMODE) == CRYP_AlgoMode_DES_ECB)|| \
00155 ((ALGOMODE) == CRYP_AlgoMode_DES_CBC) || \
00156 ((ALGOMODE) == CRYP_AlgoMode_AES_ECB) || \
00157 ((ALGOMODE) == CRYP_AlgoMode_AES_CBC) || \
00158 ((ALGOMODE) == CRYP_AlgoMode_AES_CTR) || \
00159 ((ALGOMODE) == CRYP_AlgoMode_AES_Key))
00160
00167 #define CRYP_DataType_32b ((uint16_t)0x0000)
00168 #define CRYP_DataType_16b ((uint16_t)0x0040)
00169 #define CRYP_DataType_8b ((uint16_t)0x0080)
00170 #define CRYP_DataType_1b ((uint16_t)0x00C0)
00171 #define IS_CRYP_DATATYPE(DATATYPE) (((DATATYPE) == CRYP_DataType_32b) || \
00172 ((DATATYPE) == CRYP_DataType_16b)|| \
00173 ((DATATYPE) == CRYP_DataType_8b)|| \
00174 ((DATATYPE) == CRYP_DataType_1b))
00175
00182 #define CRYP_KeySize_128b ((uint16_t)0x0000)
00183 #define CRYP_KeySize_192b ((uint16_t)0x0100)
00184 #define CRYP_KeySize_256b ((uint16_t)0x0200)
00185 #define IS_CRYP_KEYSIZE(KEYSIZE) (((KEYSIZE) == CRYP_KeySize_128b)|| \
00186 ((KEYSIZE) == CRYP_KeySize_192b)|| \
00187 ((KEYSIZE) == CRYP_KeySize_256b))
00188
00195 #define CRYP_FLAG_BUSY ((uint8_t)0x10)
00199 #define CRYP_FLAG_IFEM ((uint8_t)0x01)
00200 #define CRYP_FLAG_IFNF ((uint8_t)0x02)
00201 #define CRYP_FLAG_INRIS ((uint8_t)0x22)
00202 #define CRYP_FLAG_OFNE ((uint8_t)0x04)
00204 #define CRYP_FLAG_OFFU ((uint8_t)0x08)
00205 #define CRYP_FLAG_OUTRIS ((uint8_t)0x21)
00208 #define IS_CRYP_GET_FLAG(FLAG) (((FLAG) == CRYP_FLAG_IFEM) || \
00209 ((FLAG) == CRYP_FLAG_IFNF) || \
00210 ((FLAG) == CRYP_FLAG_OFNE) || \
00211 ((FLAG) == CRYP_FLAG_OFFU) || \
00212 ((FLAG) == CRYP_FLAG_BUSY) || \
00213 ((FLAG) == CRYP_FLAG_OUTRIS)|| \
00214 ((FLAG) == CRYP_FLAG_INRIS))
00215
00222 #define CRYP_IT_INI ((uint8_t)0x01)
00223 #define CRYP_IT_OUTI ((uint8_t)0x02)
00224 #define IS_CRYP_CONFIG_IT(IT) ((((IT) & (uint8_t)0xFC) == 0x00) && ((IT) != 0x00))
00225 #define IS_CRYP_GET_IT(IT) (((IT) == CRYP_IT_INI) || ((IT) == CRYP_IT_OUTI))
00226
00234 #define MODE_ENCRYPT ((uint8_t)0x01)
00235 #define MODE_DECRYPT ((uint8_t)0x00)
00236
00244 #define CRYP_DMAReq_DataIN ((uint8_t)0x01)
00245 #define CRYP_DMAReq_DataOUT ((uint8_t)0x02)
00246 #define IS_CRYP_DMAREQ(DMAREQ) ((((DMAREQ) & (uint8_t)0xFC) == 0x00) && ((DMAREQ) != 0x00))
00247
00255
00256
00257
00258
00259 void CRYP_DeInit(void);
00260
00261
00262 void CRYP_Init(CRYP_InitTypeDef* CRYP_InitStruct);
00263 void CRYP_StructInit(CRYP_InitTypeDef* CRYP_InitStruct);
00264 void CRYP_KeyInit(CRYP_KeyInitTypeDef* CRYP_KeyInitStruct);
00265 void CRYP_KeyStructInit(CRYP_KeyInitTypeDef* CRYP_KeyInitStruct);
00266 void CRYP_IVInit(CRYP_IVInitTypeDef* CRYP_IVInitStruct);
00267 void CRYP_IVStructInit(CRYP_IVInitTypeDef* CRYP_IVInitStruct);
00268 void CRYP_Cmd(FunctionalState NewState);
00269
00270
00271 void CRYP_DataIn(uint32_t Data);
00272 uint32_t CRYP_DataOut(void);
00273 void CRYP_FIFOFlush(void);
00274
00275
00276 ErrorStatus CRYP_SaveContext(CRYP_Context* CRYP_ContextSave,
00277 CRYP_KeyInitTypeDef* CRYP_KeyInitStruct);
00278 void CRYP_RestoreContext(CRYP_Context* CRYP_ContextRestore);
00279
00280
00281 void CRYP_DMACmd(uint8_t CRYP_DMAReq, FunctionalState NewState);
00282
00283
00284 void CRYP_ITConfig(uint8_t CRYP_IT, FunctionalState NewState);
00285 ITStatus CRYP_GetITStatus(uint8_t CRYP_IT);
00286 FlagStatus CRYP_GetFlagStatus(uint8_t CRYP_FLAG);
00287
00288
00289 ErrorStatus CRYP_AES_ECB(uint8_t Mode,
00290 uint8_t *Key, uint16_t Keysize,
00291 uint8_t *Input, uint32_t Ilength,
00292 uint8_t *Output);
00293
00294 ErrorStatus CRYP_AES_CBC(uint8_t Mode,
00295 uint8_t InitVectors[16],
00296 uint8_t *Key, uint16_t Keysize,
00297 uint8_t *Input, uint32_t Ilength,
00298 uint8_t *Output);
00299
00300 ErrorStatus CRYP_AES_CTR(uint8_t Mode,
00301 uint8_t InitVectors[16],
00302 uint8_t *Key, uint16_t Keysize,
00303 uint8_t *Input, uint32_t Ilength,
00304 uint8_t *Output);
00305
00306
00307 ErrorStatus CRYP_TDES_ECB(uint8_t Mode,
00308 uint8_t Key[24],
00309 uint8_t *Input, uint32_t Ilength,
00310 uint8_t *Output);
00311
00312 ErrorStatus CRYP_TDES_CBC(uint8_t Mode,
00313 uint8_t Key[24],
00314 uint8_t InitVectors[8],
00315 uint8_t *Input, uint32_t Ilength,
00316 uint8_t *Output);
00317
00318
00319 ErrorStatus CRYP_DES_ECB(uint8_t Mode,
00320 uint8_t Key[8],
00321 uint8_t *Input, uint32_t Ilength,
00322 uint8_t *Output);
00323
00324 ErrorStatus CRYP_DES_CBC(uint8_t Mode,
00325 uint8_t Key[8],
00326 uint8_t InitVectors[8],
00327 uint8_t *Input,uint32_t Ilength,
00328 uint8_t *Output);
00329
00330 #ifdef __cplusplus
00331 }
00332 #endif
00333
00334 #endif
00335
00344