1
1
/**************************************************************************/ /**
2
2
* @file crypto.c
3
3
* @version V1.10
4
- * $Revision: 11 $
5
- * $Date: 14/10/03 1:54p $
4
+ * $Revision: 12 $
5
+ * $Date: 15/11/06 2:17p $
6
6
* @brief Cryptographic Accelerator driver source file
7
7
*
8
8
* @note
@@ -141,13 +141,15 @@ void AES_Start(int32_t u32Channel, uint32_t u32DMAMode)
141
141
*/
142
142
void AES_SetKey (uint32_t u32Channel , uint32_t au32Keys [], uint32_t u32KeySize )
143
143
{
144
- int i , wcnt ;
145
- uint32_t * key_ptr ;
144
+ uint32_t i , wcnt , key_reg_addr ;
146
145
147
- key_ptr = (uint32_t * )((uint32_t )& CRPT -> AES0_KEY0 + (u32Channel * 0x3C ));
148
- wcnt = 4 + u32KeySize * 2 ;
149
- for (i = 0 ; i < wcnt ; i ++ , key_ptr ++ )
150
- * key_ptr = au32Keys [i ];
146
+ key_reg_addr = (uint32_t )& CRPT -> AES0_KEY0 + (u32Channel * 0x3CUL );
147
+ wcnt = 4UL + u32KeySize * 2UL ;
148
+
149
+ for (i = 0U ; i < wcnt ; i ++ ) {
150
+ outpw (key_reg_addr , au32Keys [i ]);
151
+ key_reg_addr += 4UL ;
152
+ }
151
153
}
152
154
153
155
/**
@@ -158,12 +160,14 @@ void AES_SetKey(uint32_t u32Channel, uint32_t au32Keys[], uint32_t u32KeySize)
158
160
*/
159
161
void AES_SetInitVect (uint32_t u32Channel , uint32_t au32IV [])
160
162
{
161
- int i ;
162
- uint32_t * key_ptr ;
163
+ uint32_t i , key_reg_addr ;
164
+
165
+ key_reg_addr = (uint32_t )& CRPT -> AES0_IV0 + (u32Channel * 0x3CUL );
163
166
164
- key_ptr = (uint32_t * )((uint32_t )& CRPT -> AES0_IV0 + (u32Channel * 0x3C ));
165
- for (i = 0 ; i < 4 ; i ++ , key_ptr ++ )
166
- * key_ptr = au32IV [i ];
167
+ for (i = 0U ; i < 4U ; i ++ ) {
168
+ outpw (key_reg_addr , au32IV [i ]);
169
+ key_reg_addr += 4UL ;
170
+ }
167
171
}
168
172
169
173
/**
@@ -177,15 +181,24 @@ void AES_SetInitVect(uint32_t u32Channel, uint32_t au32IV[])
177
181
void AES_SetDMATransfer (uint32_t u32Channel , uint32_t u32SrcAddr ,
178
182
uint32_t u32DstAddr , uint32_t u32TransCnt )
179
183
{
180
- * (uint32_t * )((uint32_t )& CRPT -> AES0_SADDR + (u32Channel * 0x3C )) = u32SrcAddr ;
181
- * (uint32_t * )((uint32_t )& CRPT -> AES0_DADDR + (u32Channel * 0x3C )) = u32DstAddr ;
182
- * (uint32_t * )((uint32_t )& CRPT -> AES0_CNT + (u32Channel * 0x3C )) = u32TransCnt ;
184
+ uint32_t reg_addr ;
185
+
186
+ reg_addr = (uint32_t )& CRPT -> AES0_SADDR + (u32Channel * 0x3CUL );
187
+ outpw (reg_addr , u32SrcAddr );
188
+
189
+ reg_addr = (uint32_t )& CRPT -> AES0_DADDR + (u32Channel * 0x3CUL );
190
+ outpw (reg_addr , u32DstAddr );
191
+
192
+ reg_addr = (uint32_t )& CRPT -> AES0_CNT + (u32Channel * 0x3CUL );
193
+ outpw (reg_addr , u32TransCnt );
183
194
}
184
195
185
196
/**
186
197
* @brief Open TDES encrypt/decrypt function.
187
198
* @param[in] u32Channel TDES channel. Must be 0~3.
188
199
* @param[in] u32EncDec 1: TDES encode; 0: TDES decode
200
+ * @param[in] Is3DES 1: TDES; 0: DES
201
+ * @param[in] Is3Key 1: TDES 3 key mode; 0: TDES 2 key mode
189
202
* @param[in] u32OpMode TDES operation mode, including:
190
203
* - \ref TDES_MODE_ECB
191
204
* - \ref TDES_MODE_CBC
@@ -203,12 +216,18 @@ void AES_SetDMATransfer(uint32_t u32Channel, uint32_t u32SrcAddr,
203
216
* - \ref TDES_IN_OUT_WHL_SWAP
204
217
* @return None
205
218
*/
206
- void TDES_Open (uint32_t u32Channel , uint32_t u32EncDec , uint32_t u32OpMode , uint32_t u32SwapType )
219
+ void TDES_Open (uint32_t u32Channel , uint32_t u32EncDec , int32_t Is3DES , int32_t Is3Key ,
220
+ uint32_t u32OpMode , uint32_t u32SwapType )
207
221
{
208
222
g_TDES_CTL [u32Channel ] = (u32Channel << CRPT_TDES_CTL_CHANNEL_Pos ) |
209
223
(u32EncDec << CRPT_TDES_CTL_ENCRPT_Pos ) |
210
- u32OpMode |
211
- (u32SwapType << CRPT_TDES_CTL_BLKSWAP_Pos );
224
+ u32OpMode | (u32SwapType << CRPT_TDES_CTL_BLKSWAP_Pos );
225
+ if (Is3DES ) {
226
+ g_TDES_CTL [u32Channel ] |= CRPT_TDES_CTL_TMODE_Msk ;
227
+ }
228
+ if (Is3Key ) {
229
+ g_TDES_CTL [u32Channel ] |= CRPT_TDES_CTL_3KEYS_Msk ;
230
+ }
212
231
}
213
232
214
233
/**
@@ -229,17 +248,21 @@ void TDES_Start(int32_t u32Channel, uint32_t u32DMAMode)
229
248
/**
230
249
* @brief Set TDES keys
231
250
* @param[in] u32Channel TDES channel. Must be 0~3.
232
- * @param[in] au8Keys The TDES keys.
251
+ * @param[in] au32Keys The TDES keys. au32Keys[0][0] is Key0 high word and au32Keys[0][1] is key0 low word .
233
252
* @return None
234
253
*/
235
- void TDES_SetKey (uint32_t u32Channel , uint8_t au8Keys [3 ][8 ])
254
+ void TDES_SetKey (uint32_t u32Channel , uint32_t au32Keys [3 ][2 ])
236
255
{
237
- int i ;
238
- uint8_t * pu8TKey ;
256
+ uint32_t i , reg_addr ;
257
+
258
+ reg_addr = (uint32_t )& CRPT -> TDES0_KEY1H + (0x40UL * u32Channel );
239
259
240
- pu8TKey = (uint8_t * )((uint32_t )& CRPT -> TDES0_KEY1H + (0x40 * u32Channel ));
241
- for (i = 0 ; i < 3 ; i ++ , pu8TKey += 8 )
242
- memcpy (pu8TKey , & au8Keys [i ][0 ], 8 );
260
+ for (i = 0U ; i < 3U ; i ++ ) {
261
+ outpw (reg_addr , au32Keys [i ][0 ]); /* TDESn_KEYxH */
262
+ reg_addr += 4UL ;
263
+ outpw (reg_addr , au32Keys [i ][1 ]); /* TDESn_KEYxL */
264
+ reg_addr += 4UL ;
265
+ }
243
266
}
244
267
245
268
/**
@@ -251,8 +274,13 @@ void TDES_SetKey(uint32_t u32Channel, uint8_t au8Keys[3][8])
251
274
*/
252
275
void TDES_SetInitVect (uint32_t u32Channel , uint32_t u32IVH , uint32_t u32IVL )
253
276
{
254
- * (uint32_t * )((uint32_t )& CRPT -> TDES0_IVH + 0x40 * u32Channel ) = u32IVH ;
255
- * (uint32_t * )((uint32_t )& CRPT -> TDES0_IVL + 0x40 * u32Channel ) = u32IVL ;
277
+ uint32_t reg_addr ;
278
+
279
+ reg_addr = (uint32_t )& CRPT -> TDES0_IVH + (u32Channel * 0x40UL );
280
+ outpw (reg_addr , u32IVH );
281
+
282
+ reg_addr = (uint32_t )& CRPT -> TDES0_IVL + (u32Channel * 0x40UL );
283
+ outpw (reg_addr , u32IVL );
256
284
}
257
285
258
286
/**
@@ -266,9 +294,16 @@ void TDES_SetInitVect(uint32_t u32Channel, uint32_t u32IVH, uint32_t u32IVL)
266
294
void TDES_SetDMATransfer (uint32_t u32Channel , uint32_t u32SrcAddr ,
267
295
uint32_t u32DstAddr , uint32_t u32TransCnt )
268
296
{
269
- * (uint32_t * )((uint32_t )& CRPT -> TDES0_SADDR + (u32Channel * 0x40 )) = u32SrcAddr ;
270
- * (uint32_t * )((uint32_t )& CRPT -> TDES0_DADDR + (u32Channel * 0x40 )) = u32DstAddr ;
271
- * (uint32_t * )((uint32_t )& CRPT -> TDES0_CNT + (u32Channel * 0x40 )) = u32TransCnt ;
297
+ uint32_t reg_addr ;
298
+
299
+ reg_addr = (uint32_t )& CRPT -> TDES0_SADDR + (u32Channel * 0x40UL );
300
+ outpw (reg_addr , u32SrcAddr );
301
+
302
+ reg_addr = (uint32_t )& CRPT -> TDES0_DADDR + (u32Channel * 0x40UL );
303
+ outpw (reg_addr , u32DstAddr );
304
+
305
+ reg_addr = (uint32_t )& CRPT -> TDES0_CNT + (u32Channel * 0x40UL );
306
+ outpw (reg_addr , u32TransCnt );
272
307
}
273
308
274
309
/**
0 commit comments