amiro-blt / Target / Modules / PowerManagement_1-1 / Boot / lib / stdperiphlib / STM32F4xx_StdPeriph_Driver / inc / stm32f4xx_hash.h @ 367c0652
History | View | Annotate | Download (9.85 KB)
1 | 69661903 | Thomas Schöpping | /**
|
---|---|---|---|
2 | ******************************************************************************
|
||
3 | * @file stm32f4xx_hash.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 HASH
|
||
8 | * 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_HASH_H
|
||
31 | #define __STM32F4xx_HASH_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 HASH
|
||
45 | * @{
|
||
46 | */
|
||
47 | |||
48 | /* Exported types ------------------------------------------------------------*/
|
||
49 | |||
50 | /**
|
||
51 | * @brief HASH Init structure definition
|
||
52 | */
|
||
53 | typedef struct |
||
54 | { |
||
55 | uint32_t HASH_AlgoSelection; /*!< SHA-1, SHA-224, SHA-256 or MD5. This parameter
|
||
56 | can be a value of @ref HASH_Algo_Selection */
|
||
57 | uint32_t HASH_AlgoMode; /*!< HASH or HMAC. This parameter can be a value
|
||
58 | of @ref HASH_processor_Algorithm_Mode */
|
||
59 | uint32_t HASH_DataType; /*!< 32-bit data, 16-bit data, 8-bit data or
|
||
60 | bit string. This parameter can be a value of
|
||
61 | @ref HASH_Data_Type */
|
||
62 | uint32_t HASH_HMACKeyType; /*!< HMAC Short key or HMAC Long Key. This parameter
|
||
63 | can be a value of @ref HASH_HMAC_Long_key_only_for_HMAC_mode */
|
||
64 | }HASH_InitTypeDef; |
||
65 | |||
66 | /**
|
||
67 | * @brief HASH message digest result structure definition
|
||
68 | */
|
||
69 | typedef struct |
||
70 | { |
||
71 | uint32_t Data[8]; /*!< Message digest result : 8x 32bit wors for SHA-256, |
||
72 | 7x 32bit wors for SHA-224,
|
||
73 | 5x 32bit words for SHA-1 or
|
||
74 | 4x 32bit words for MD5 */
|
||
75 | } HASH_MsgDigest; |
||
76 | |||
77 | /**
|
||
78 | * @brief HASH context swapping structure definition
|
||
79 | */
|
||
80 | typedef struct |
||
81 | { |
||
82 | uint32_t HASH_IMR; |
||
83 | uint32_t HASH_STR; |
||
84 | uint32_t HASH_CR; |
||
85 | uint32_t HASH_CSR[54];
|
||
86 | }HASH_Context; |
||
87 | |||
88 | /* Exported constants --------------------------------------------------------*/
|
||
89 | |||
90 | /** @defgroup HASH_Exported_Constants
|
||
91 | * @{
|
||
92 | */
|
||
93 | |||
94 | /** @defgroup HASH_Algo_Selection
|
||
95 | * @{
|
||
96 | */
|
||
97 | #define HASH_AlgoSelection_SHA1 ((uint32_t)0x0000) /*!< HASH function is SHA1 */ |
||
98 | #define HASH_AlgoSelection_SHA224 HASH_CR_ALGO_1 /*!< HASH function is SHA224 */ |
||
99 | #define HASH_AlgoSelection_SHA256 HASH_CR_ALGO /*!< HASH function is SHA256 */ |
||
100 | #define HASH_AlgoSelection_MD5 HASH_CR_ALGO_0 /*!< HASH function is MD5 */ |
||
101 | |||
102 | #define IS_HASH_ALGOSELECTION(ALGOSELECTION) (((ALGOSELECTION) == HASH_AlgoSelection_SHA1) || \
|
||
103 | ((ALGOSELECTION) == HASH_AlgoSelection_SHA224) || \ |
||
104 | ((ALGOSELECTION) == HASH_AlgoSelection_SHA256) || \ |
||
105 | ((ALGOSELECTION) == HASH_AlgoSelection_MD5)) |
||
106 | /**
|
||
107 | * @}
|
||
108 | */
|
||
109 | |||
110 | /** @defgroup HASH_processor_Algorithm_Mode
|
||
111 | * @{
|
||
112 | */
|
||
113 | #define HASH_AlgoMode_HASH ((uint32_t)0x00000000) /*!< Algorithm is HASH */ |
||
114 | #define HASH_AlgoMode_HMAC HASH_CR_MODE /*!< Algorithm is HMAC */ |
||
115 | |||
116 | #define IS_HASH_ALGOMODE(ALGOMODE) (((ALGOMODE) == HASH_AlgoMode_HASH) || \
|
||
117 | ((ALGOMODE) == HASH_AlgoMode_HMAC)) |
||
118 | /**
|
||
119 | * @}
|
||
120 | */
|
||
121 | |||
122 | /** @defgroup HASH_Data_Type
|
||
123 | * @{
|
||
124 | */
|
||
125 | #define HASH_DataType_32b ((uint32_t)0x0000) /*!< 32-bit data. No swapping */ |
||
126 | #define HASH_DataType_16b HASH_CR_DATATYPE_0 /*!< 16-bit data. Each half word is swapped */ |
||
127 | #define HASH_DataType_8b HASH_CR_DATATYPE_1 /*!< 8-bit data. All bytes are swapped */ |
||
128 | #define HASH_DataType_1b HASH_CR_DATATYPE /*!< 1-bit data. In the word all bits are swapped */ |
||
129 | |||
130 | #define IS_HASH_DATATYPE(DATATYPE) (((DATATYPE) == HASH_DataType_32b)|| \
|
||
131 | ((DATATYPE) == HASH_DataType_16b)|| \ |
||
132 | ((DATATYPE) == HASH_DataType_8b) || \ |
||
133 | ((DATATYPE) == HASH_DataType_1b)) |
||
134 | /**
|
||
135 | * @}
|
||
136 | */
|
||
137 | |||
138 | /** @defgroup HASH_HMAC_Long_key_only_for_HMAC_mode
|
||
139 | * @{
|
||
140 | */
|
||
141 | #define HASH_HMACKeyType_ShortKey ((uint32_t)0x00000000) /*!< HMAC Key is <= 64 bytes */ |
||
142 | #define HASH_HMACKeyType_LongKey HASH_CR_LKEY /*!< HMAC Key is > 64 bytes */ |
||
143 | |||
144 | #define IS_HASH_HMAC_KEYTYPE(KEYTYPE) (((KEYTYPE) == HASH_HMACKeyType_ShortKey) || \
|
||
145 | ((KEYTYPE) == HASH_HMACKeyType_LongKey)) |
||
146 | /**
|
||
147 | * @}
|
||
148 | */
|
||
149 | |||
150 | /** @defgroup Number_of_valid_bits_in_last_word_of_the_message
|
||
151 | * @{
|
||
152 | */
|
||
153 | #define IS_HASH_VALIDBITSNUMBER(VALIDBITS) ((VALIDBITS) <= 0x1F) |
||
154 | |||
155 | /**
|
||
156 | * @}
|
||
157 | */
|
||
158 | |||
159 | /** @defgroup HASH_interrupts_definition
|
||
160 | * @{
|
||
161 | */
|
||
162 | #define HASH_IT_DINI HASH_IMR_DINIM /*!< A new block can be entered into the input buffer (DIN) */ |
||
163 | #define HASH_IT_DCI HASH_IMR_DCIM /*!< Digest calculation complete */ |
||
164 | |||
165 | #define IS_HASH_IT(IT) ((((IT) & (uint32_t)0xFFFFFFFC) == 0x00000000) && ((IT) != 0x00000000)) |
||
166 | #define IS_HASH_GET_IT(IT) (((IT) == HASH_IT_DINI) || ((IT) == HASH_IT_DCI))
|
||
167 | |||
168 | /**
|
||
169 | * @}
|
||
170 | */
|
||
171 | |||
172 | /** @defgroup HASH_flags_definition
|
||
173 | * @{
|
||
174 | */
|
||
175 | #define HASH_FLAG_DINIS HASH_SR_DINIS /*!< 16 locations are free in the DIN : A new block can be entered into the input buffer */ |
||
176 | #define HASH_FLAG_DCIS HASH_SR_DCIS /*!< Digest calculation complete */ |
||
177 | #define HASH_FLAG_DMAS HASH_SR_DMAS /*!< DMA interface is enabled (DMAE=1) or a transfer is ongoing */ |
||
178 | #define HASH_FLAG_BUSY HASH_SR_BUSY /*!< The hash core is Busy : processing a block of data */ |
||
179 | #define HASH_FLAG_DINNE HASH_CR_DINNE /*!< DIN not empty : The input buffer contains at least one word of data */ |
||
180 | |||
181 | #define IS_HASH_GET_FLAG(FLAG) (((FLAG) == HASH_FLAG_DINIS) || \
|
||
182 | ((FLAG) == HASH_FLAG_DCIS) || \ |
||
183 | ((FLAG) == HASH_FLAG_DMAS) || \ |
||
184 | ((FLAG) == HASH_FLAG_BUSY) || \ |
||
185 | ((FLAG) == HASH_FLAG_DINNE)) |
||
186 | |||
187 | #define IS_HASH_CLEAR_FLAG(FLAG)(((FLAG) == HASH_FLAG_DINIS) || \
|
||
188 | ((FLAG) == HASH_FLAG_DCIS)) |
||
189 | |||
190 | /**
|
||
191 | * @}
|
||
192 | */
|
||
193 | |||
194 | /**
|
||
195 | * @}
|
||
196 | */
|
||
197 | |||
198 | /* Exported macro ------------------------------------------------------------*/
|
||
199 | /* Exported functions --------------------------------------------------------*/
|
||
200 | |||
201 | /* Function used to set the HASH configuration to the default reset state ****/
|
||
202 | void HASH_DeInit(void); |
||
203 | |||
204 | /* HASH Configuration function ************************************************/
|
||
205 | void HASH_Init(HASH_InitTypeDef* HASH_InitStruct);
|
||
206 | void HASH_StructInit(HASH_InitTypeDef* HASH_InitStruct);
|
||
207 | void HASH_Reset(void); |
||
208 | |||
209 | /* HASH Message Digest generation functions ***********************************/
|
||
210 | void HASH_DataIn(uint32_t Data);
|
||
211 | uint8_t HASH_GetInFIFOWordsNbr(void);
|
||
212 | void HASH_SetLastWordValidBitsNbr(uint16_t ValidNumber);
|
||
213 | void HASH_StartDigest(void); |
||
214 | void HASH_AutoStartDigest(FunctionalState NewState);
|
||
215 | void HASH_GetDigest(HASH_MsgDigest* HASH_MessageDigest);
|
||
216 | |||
217 | /* HASH Context swapping functions ********************************************/
|
||
218 | void HASH_SaveContext(HASH_Context* HASH_ContextSave);
|
||
219 | void HASH_RestoreContext(HASH_Context* HASH_ContextRestore);
|
||
220 | |||
221 | /* HASH DMA interface function ************************************************/
|
||
222 | void HASH_DMACmd(FunctionalState NewState);
|
||
223 | |||
224 | /* HASH Interrupts and flags management functions *****************************/
|
||
225 | void HASH_ITConfig(uint32_t HASH_IT, FunctionalState NewState);
|
||
226 | FlagStatus HASH_GetFlagStatus(uint32_t HASH_FLAG); |
||
227 | void HASH_ClearFlag(uint32_t HASH_FLAG);
|
||
228 | ITStatus HASH_GetITStatus(uint32_t HASH_IT); |
||
229 | void HASH_ClearITPendingBit(uint32_t HASH_IT);
|
||
230 | |||
231 | /* High Level SHA1 functions **************************************************/
|
||
232 | ErrorStatus HASH_SHA1(uint8_t *Input, uint32_t Ilen, uint8_t Output[20]);
|
||
233 | ErrorStatus HMAC_SHA1(uint8_t *Key, uint32_t Keylen, |
||
234 | uint8_t *Input, uint32_t Ilen, |
||
235 | uint8_t Output[20]);
|
||
236 | |||
237 | /* High Level MD5 functions ***************************************************/
|
||
238 | ErrorStatus HASH_MD5(uint8_t *Input, uint32_t Ilen, uint8_t Output[16]);
|
||
239 | ErrorStatus HMAC_MD5(uint8_t *Key, uint32_t Keylen, |
||
240 | uint8_t *Input, uint32_t Ilen, |
||
241 | uint8_t Output[16]);
|
||
242 | |||
243 | #ifdef __cplusplus
|
||
244 | } |
||
245 | #endif
|
||
246 | |||
247 | #endif /*__STM32F4xx_HASH_H */ |
||
248 | |||
249 | /**
|
||
250 | * @}
|
||
251 | */
|
||
252 | |||
253 | /**
|
||
254 | * @}
|
||
255 | */
|
||
256 | |||
257 | /************************ (C) COPYRIGHT STMicroelectronics *****END OF FILE****/
|