Skip to content

Commit 9edda18

Browse files
committed
[NUC472] Update BSP crypto driver
1 parent dc3c84c commit 9edda18

File tree

2 files changed

+68
-33
lines changed

2 files changed

+68
-33
lines changed

targets/TARGET_NUVOTON/TARGET_NUC472/device/StdDriver/nuc472_crypto.c

Lines changed: 66 additions & 31 deletions
Original file line numberDiff line numberDiff line change
@@ -1,8 +1,8 @@
11
/**************************************************************************//**
22
* @file crypto.c
33
* @version V1.10
4-
* $Revision: 11 $
5-
* $Date: 14/10/03 1:54p $
4+
* $Revision: 12 $
5+
* $Date: 15/11/06 2:17p $
66
* @brief Cryptographic Accelerator driver source file
77
*
88
* @note
@@ -141,13 +141,15 @@ void AES_Start(int32_t u32Channel, uint32_t u32DMAMode)
141141
*/
142142
void AES_SetKey(uint32_t u32Channel, uint32_t au32Keys[], uint32_t u32KeySize)
143143
{
144-
int i, wcnt;
145-
uint32_t *key_ptr;
144+
uint32_t i, wcnt, key_reg_addr;
146145

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+
}
151153
}
152154

153155
/**
@@ -158,12 +160,14 @@ void AES_SetKey(uint32_t u32Channel, uint32_t au32Keys[], uint32_t u32KeySize)
158160
*/
159161
void AES_SetInitVect(uint32_t u32Channel, uint32_t au32IV[])
160162
{
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);
163166

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+
}
167171
}
168172

169173
/**
@@ -177,15 +181,24 @@ void AES_SetInitVect(uint32_t u32Channel, uint32_t au32IV[])
177181
void AES_SetDMATransfer(uint32_t u32Channel, uint32_t u32SrcAddr,
178182
uint32_t u32DstAddr, uint32_t u32TransCnt)
179183
{
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);
183194
}
184195

185196
/**
186197
* @brief Open TDES encrypt/decrypt function.
187198
* @param[in] u32Channel TDES channel. Must be 0~3.
188199
* @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
189202
* @param[in] u32OpMode TDES operation mode, including:
190203
* - \ref TDES_MODE_ECB
191204
* - \ref TDES_MODE_CBC
@@ -203,12 +216,18 @@ void AES_SetDMATransfer(uint32_t u32Channel, uint32_t u32SrcAddr,
203216
* - \ref TDES_IN_OUT_WHL_SWAP
204217
* @return None
205218
*/
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)
207221
{
208222
g_TDES_CTL[u32Channel] = (u32Channel << CRPT_TDES_CTL_CHANNEL_Pos) |
209223
(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+
}
212231
}
213232

214233
/**
@@ -229,17 +248,21 @@ void TDES_Start(int32_t u32Channel, uint32_t u32DMAMode)
229248
/**
230249
* @brief Set TDES keys
231250
* @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.
233252
* @return None
234253
*/
235-
void TDES_SetKey(uint32_t u32Channel, uint8_t au8Keys[3][8])
254+
void TDES_SetKey(uint32_t u32Channel, uint32_t au32Keys[3][2])
236255
{
237-
int i;
238-
uint8_t *pu8TKey;
256+
uint32_t i, reg_addr;
257+
258+
reg_addr = (uint32_t)&CRPT->TDES0_KEY1H + (0x40UL * u32Channel);
239259

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+
}
243266
}
244267

245268
/**
@@ -251,8 +274,13 @@ void TDES_SetKey(uint32_t u32Channel, uint8_t au8Keys[3][8])
251274
*/
252275
void TDES_SetInitVect(uint32_t u32Channel, uint32_t u32IVH, uint32_t u32IVL)
253276
{
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);
256284
}
257285

258286
/**
@@ -266,9 +294,16 @@ void TDES_SetInitVect(uint32_t u32Channel, uint32_t u32IVH, uint32_t u32IVL)
266294
void TDES_SetDMATransfer(uint32_t u32Channel, uint32_t u32SrcAddr,
267295
uint32_t u32DstAddr, uint32_t u32TransCnt)
268296
{
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);
272307
}
273308

274309
/**

targets/TARGET_NUVOTON/TARGET_NUC472/device/StdDriver/nuc472_crypto.h

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -275,9 +275,9 @@ void AES_Start(int32_t u32Channel, uint32_t u32DMAMode);
275275
void AES_SetKey(uint32_t u32Channel, uint32_t au32Keys[], uint32_t u32KeySize);
276276
void AES_SetInitVect(uint32_t u32Channel, uint32_t au32IV[]);
277277
void AES_SetDMATransfer(uint32_t u32Channel, uint32_t u32SrcAddr, uint32_t u32DstAddr, uint32_t u32TransCnt);
278-
void TDES_Open(uint32_t u32Channel, uint32_t u32EncDec, uint32_t u32OpMode, uint32_t u32SwapType);
278+
void TDES_Open(uint32_t u32Channel, uint32_t u32EncDec, int32_t Is3DES, int32_t Is3Key, uint32_t u32OpMode, uint32_t u32SwapType);
279279
void TDES_Start(int32_t u32Channel, uint32_t u32DMAMode);
280-
void TDES_SetKey(uint32_t u32Channel, uint8_t au8Keys[3][8]);
280+
void TDES_SetKey(uint32_t u32Channel, uint32_t au32Keys[3][2]);
281281
void TDES_SetInitVect(uint32_t u32Channel, uint32_t u32IVH, uint32_t u32IVL);
282282
void TDES_SetDMATransfer(uint32_t u32Channel, uint32_t u32SrcAddr, uint32_t u32DstAddr, uint32_t u32TransCnt);
283283
void SHA_Open(uint32_t u32OpMode, uint32_t u32SwapType);

0 commit comments

Comments
 (0)