00001
00029
00030 #ifndef __STM32F4xx_HASH_H
00031 #define __STM32F4xx_HASH_H
00032
00033 #ifdef __cplusplus
00034 extern "C" {
00035 #endif
00036
00037
00038 #include "stm32f4xx.h"
00039
00048
00049
00053 typedef struct
00054 {
00055 uint32_t HASH_AlgoSelection;
00057 uint32_t HASH_AlgoMode;
00059 uint32_t HASH_DataType;
00062 uint32_t HASH_HMACKeyType;
00064 }HASH_InitTypeDef;
00065
00069 typedef struct
00070 {
00071 uint32_t Data[5];
00073 } HASH_MsgDigest;
00074
00078 typedef struct
00079 {
00080 uint32_t HASH_IMR;
00081 uint32_t HASH_STR;
00082 uint32_t HASH_CR;
00083 uint32_t HASH_CSR[51];
00084 }HASH_Context;
00085
00086
00087
00095 #define HASH_AlgoSelection_SHA1 ((uint16_t)0x0000)
00096 #define HASH_AlgoSelection_MD5 ((uint16_t)0x0080)
00098 #define IS_HASH_ALGOSELECTION(ALGOSELECTION) (((ALGOSELECTION) == HASH_AlgoSelection_SHA1) || \
00099 ((ALGOSELECTION) == HASH_AlgoSelection_MD5))
00100
00107 #define HASH_AlgoMode_HASH ((uint16_t)0x0000)
00108 #define HASH_AlgoMode_HMAC ((uint16_t)0x0040)
00110 #define IS_HASH_ALGOMODE(ALGOMODE) (((ALGOMODE) == HASH_AlgoMode_HASH) || \
00111 ((ALGOMODE) == HASH_AlgoMode_HMAC))
00112
00119 #define HASH_DataType_32b ((uint16_t)0x0000)
00120 #define HASH_DataType_16b ((uint16_t)0x0010)
00121 #define HASH_DataType_8b ((uint16_t)0x0020)
00122 #define HASH_DataType_1b ((uint16_t)0x0030)
00123
00124 #define IS_HASH_DATATYPE(DATATYPE) (((DATATYPE) == HASH_DataType_32b)|| \
00125 ((DATATYPE) == HASH_DataType_16b)|| \
00126 ((DATATYPE) == HASH_DataType_8b)|| \
00127 ((DATATYPE) == HASH_DataType_1b))
00128
00135 #define HASH_HMACKeyType_ShortKey ((uint32_t)0x00000000)
00136 #define HASH_HMACKeyType_LongKey ((uint32_t)0x00010000)
00138 #define IS_HASH_HMAC_KEYTYPE(KEYTYPE) (((KEYTYPE) == HASH_HMACKeyType_ShortKey) || \
00139 ((KEYTYPE) == HASH_HMACKeyType_LongKey))
00140
00147 #define IS_HASH_VALIDBITSNUMBER(VALIDBITS) ((VALIDBITS) <= 0x1F)
00148
00156 #define HASH_IT_DINI ((uint8_t)0x01)
00157 #define HASH_IT_DCI ((uint8_t)0x02)
00159 #define IS_HASH_IT(IT) ((((IT) & (uint8_t)0xFC) == 0x00) && ((IT) != 0x00))
00160 #define IS_HASH_GET_IT(IT) (((IT) == HASH_IT_DINI) || ((IT) == HASH_IT_DCI))
00161
00169 #define HASH_FLAG_DINIS ((uint16_t)0x0001)
00170 #define HASH_FLAG_DCIS ((uint16_t)0x0002)
00171 #define HASH_FLAG_DMAS ((uint16_t)0x0004)
00172 #define HASH_FLAG_BUSY ((uint16_t)0x0008)
00173 #define HASH_FLAG_DINNE ((uint16_t)0x1000)
00175 #define IS_HASH_GET_FLAG(FLAG) (((FLAG) == HASH_FLAG_DINIS) || \
00176 ((FLAG) == HASH_FLAG_DCIS) || \
00177 ((FLAG) == HASH_FLAG_DMAS) || \
00178 ((FLAG) == HASH_FLAG_BUSY) || \
00179 ((FLAG) == HASH_FLAG_DINNE))
00180
00181 #define IS_HASH_CLEAR_FLAG(FLAG)(((FLAG) == HASH_FLAG_DINIS) || \
00182 ((FLAG) == HASH_FLAG_DCIS))
00183
00192
00193
00194
00195
00196 void HASH_DeInit(void);
00197
00198
00199 void HASH_Init(HASH_InitTypeDef* HASH_InitStruct);
00200 void HASH_StructInit(HASH_InitTypeDef* HASH_InitStruct);
00201 void HASH_Reset(void);
00202
00203
00204 void HASH_DataIn(uint32_t Data);
00205 uint8_t HASH_GetInFIFOWordsNbr(void);
00206 void HASH_SetLastWordValidBitsNbr(uint16_t ValidNumber);
00207 void HASH_StartDigest(void);
00208 void HASH_GetDigest(HASH_MsgDigest* HASH_MessageDigest);
00209
00210
00211 void HASH_SaveContext(HASH_Context* HASH_ContextSave);
00212 void HASH_RestoreContext(HASH_Context* HASH_ContextRestore);
00213
00214
00215 void HASH_DMACmd(FunctionalState NewState);
00216
00217
00218 void HASH_ITConfig(uint8_t HASH_IT, FunctionalState NewState);
00219 FlagStatus HASH_GetFlagStatus(uint16_t HASH_FLAG);
00220 void HASH_ClearFlag(uint16_t HASH_FLAG);
00221 ITStatus HASH_GetITStatus(uint8_t HASH_IT);
00222 void HASH_ClearITPendingBit(uint8_t HASH_IT);
00223
00224
00225 ErrorStatus HASH_SHA1(uint8_t *Input, uint32_t Ilen, uint8_t Output[20]);
00226 ErrorStatus HMAC_SHA1(uint8_t *Key, uint32_t Keylen,
00227 uint8_t *Input, uint32_t Ilen,
00228 uint8_t Output[20]);
00229
00230
00231 ErrorStatus HASH_MD5(uint8_t *Input, uint32_t Ilen, uint8_t Output[16]);
00232 ErrorStatus HMAC_MD5(uint8_t *Key, uint32_t Keylen,
00233 uint8_t *Input, uint32_t Ilen,
00234 uint8_t Output[16]);
00235
00236 #ifdef __cplusplus
00237 }
00238 #endif
00239
00240 #endif
00241
00250