Update BSP crypto driver

pull/5841/head
ccli8 2017-11-22 09:18:55 +08:00 committed by adbridge
parent 523ca0a7e4
commit 101892527f
2 changed files with 68 additions and 33 deletions

View File

@ -1,8 +1,8 @@
/**************************************************************************//** /**************************************************************************//**
* @file crypto.c * @file crypto.c
* @version V1.10 * @version V1.10
* $Revision: 11 $ * $Revision: 12 $
* $Date: 14/10/03 1:54p $ * $Date: 15/11/06 2:17p $
* @brief Cryptographic Accelerator driver source file * @brief Cryptographic Accelerator driver source file
* *
* @note * @note
@ -141,13 +141,15 @@ void AES_Start(int32_t u32Channel, uint32_t u32DMAMode)
*/ */
void AES_SetKey(uint32_t u32Channel, uint32_t au32Keys[], uint32_t u32KeySize) void AES_SetKey(uint32_t u32Channel, uint32_t au32Keys[], uint32_t u32KeySize)
{ {
int i, wcnt; uint32_t i, wcnt, key_reg_addr;
uint32_t *key_ptr;
key_ptr = (uint32_t *)((uint32_t)&CRPT->AES0_KEY0 + (u32Channel * 0x3C)); key_reg_addr = (uint32_t)&CRPT->AES0_KEY0 + (u32Channel * 0x3CUL);
wcnt = 4 + u32KeySize*2; wcnt = 4UL + u32KeySize*2UL;
for (i = 0; i < wcnt; i++, key_ptr++)
*key_ptr = au32Keys[i]; for (i = 0U; i < wcnt; i++) {
outpw(key_reg_addr, au32Keys[i]);
key_reg_addr += 4UL;
}
} }
/** /**
@ -158,12 +160,14 @@ void AES_SetKey(uint32_t u32Channel, uint32_t au32Keys[], uint32_t u32KeySize)
*/ */
void AES_SetInitVect(uint32_t u32Channel, uint32_t au32IV[]) void AES_SetInitVect(uint32_t u32Channel, uint32_t au32IV[])
{ {
int i; uint32_t i, key_reg_addr;
uint32_t *key_ptr;
key_ptr = (uint32_t *)((uint32_t)&CRPT->AES0_IV0 + (u32Channel * 0x3C)); key_reg_addr = (uint32_t)&CRPT->AES0_IV0 + (u32Channel * 0x3CUL);
for (i = 0; i < 4; i++, key_ptr++)
*key_ptr = au32IV[i]; for (i = 0U; i < 4U; i++) {
outpw(key_reg_addr, au32IV[i]);
key_reg_addr += 4UL;
}
} }
/** /**
@ -177,15 +181,24 @@ void AES_SetInitVect(uint32_t u32Channel, uint32_t au32IV[])
void AES_SetDMATransfer(uint32_t u32Channel, uint32_t u32SrcAddr, void AES_SetDMATransfer(uint32_t u32Channel, uint32_t u32SrcAddr,
uint32_t u32DstAddr, uint32_t u32TransCnt) uint32_t u32DstAddr, uint32_t u32TransCnt)
{ {
*(uint32_t *)((uint32_t)&CRPT->AES0_SADDR + (u32Channel * 0x3C)) = u32SrcAddr; uint32_t reg_addr;
*(uint32_t *)((uint32_t)&CRPT->AES0_DADDR + (u32Channel * 0x3C)) = u32DstAddr;
*(uint32_t *)((uint32_t)&CRPT->AES0_CNT + (u32Channel * 0x3C)) = u32TransCnt; reg_addr = (uint32_t)&CRPT->AES0_SADDR + (u32Channel * 0x3CUL);
outpw(reg_addr, u32SrcAddr);
reg_addr = (uint32_t)&CRPT->AES0_DADDR + (u32Channel * 0x3CUL);
outpw(reg_addr, u32DstAddr);
reg_addr = (uint32_t)&CRPT->AES0_CNT + (u32Channel * 0x3CUL);
outpw(reg_addr, u32TransCnt);
} }
/** /**
* @brief Open TDES encrypt/decrypt function. * @brief Open TDES encrypt/decrypt function.
* @param[in] u32Channel TDES channel. Must be 0~3. * @param[in] u32Channel TDES channel. Must be 0~3.
* @param[in] u32EncDec 1: TDES encode; 0: TDES decode * @param[in] u32EncDec 1: TDES encode; 0: TDES decode
* @param[in] Is3DES 1: TDES; 0: DES
* @param[in] Is3Key 1: TDES 3 key mode; 0: TDES 2 key mode
* @param[in] u32OpMode TDES operation mode, including: * @param[in] u32OpMode TDES operation mode, including:
* - \ref TDES_MODE_ECB * - \ref TDES_MODE_ECB
* - \ref TDES_MODE_CBC * - \ref TDES_MODE_CBC
@ -203,12 +216,18 @@ void AES_SetDMATransfer(uint32_t u32Channel, uint32_t u32SrcAddr,
* - \ref TDES_IN_OUT_WHL_SWAP * - \ref TDES_IN_OUT_WHL_SWAP
* @return None * @return None
*/ */
void TDES_Open(uint32_t u32Channel, uint32_t u32EncDec, uint32_t u32OpMode, uint32_t u32SwapType) void TDES_Open(uint32_t u32Channel, uint32_t u32EncDec, int32_t Is3DES, int32_t Is3Key,
uint32_t u32OpMode, uint32_t u32SwapType)
{ {
g_TDES_CTL[u32Channel] = (u32Channel << CRPT_TDES_CTL_CHANNEL_Pos) | g_TDES_CTL[u32Channel] = (u32Channel << CRPT_TDES_CTL_CHANNEL_Pos) |
(u32EncDec << CRPT_TDES_CTL_ENCRPT_Pos) | (u32EncDec << CRPT_TDES_CTL_ENCRPT_Pos) |
u32OpMode | u32OpMode | (u32SwapType << CRPT_TDES_CTL_BLKSWAP_Pos);
(u32SwapType << CRPT_TDES_CTL_BLKSWAP_Pos); if (Is3DES) {
g_TDES_CTL[u32Channel] |= CRPT_TDES_CTL_TMODE_Msk;
}
if (Is3Key) {
g_TDES_CTL[u32Channel] |= CRPT_TDES_CTL_3KEYS_Msk;
}
} }
/** /**
@ -229,17 +248,21 @@ void TDES_Start(int32_t u32Channel, uint32_t u32DMAMode)
/** /**
* @brief Set TDES keys * @brief Set TDES keys
* @param[in] u32Channel TDES channel. Must be 0~3. * @param[in] u32Channel TDES channel. Must be 0~3.
* @param[in] au8Keys The TDES keys. * @param[in] au32Keys The TDES keys. au32Keys[0][0] is Key0 high word and au32Keys[0][1] is key0 low word.
* @return None * @return None
*/ */
void TDES_SetKey(uint32_t u32Channel, uint8_t au8Keys[3][8]) void TDES_SetKey(uint32_t u32Channel, uint32_t au32Keys[3][2])
{ {
int i; uint32_t i, reg_addr;
uint8_t *pu8TKey;
pu8TKey = (uint8_t *)((uint32_t)&CRPT->TDES0_KEY1H + (0x40 * u32Channel)); reg_addr = (uint32_t)&CRPT->TDES0_KEY1H + (0x40UL * u32Channel);
for (i = 0; i < 3; i++, pu8TKey+=8)
memcpy(pu8TKey, &au8Keys[i][0], 8); for (i = 0U; i < 3U; i++) {
outpw(reg_addr, au32Keys[i][0]); /* TDESn_KEYxH */
reg_addr += 4UL;
outpw(reg_addr, au32Keys[i][1]); /* TDESn_KEYxL */
reg_addr += 4UL;
}
} }
/** /**
@ -251,8 +274,13 @@ void TDES_SetKey(uint32_t u32Channel, uint8_t au8Keys[3][8])
*/ */
void TDES_SetInitVect(uint32_t u32Channel, uint32_t u32IVH, uint32_t u32IVL) void TDES_SetInitVect(uint32_t u32Channel, uint32_t u32IVH, uint32_t u32IVL)
{ {
*(uint32_t *)((uint32_t)&CRPT->TDES0_IVH + 0x40 * u32Channel) = u32IVH; uint32_t reg_addr;
*(uint32_t *)((uint32_t)&CRPT->TDES0_IVL + 0x40 * u32Channel) = u32IVL;
reg_addr = (uint32_t)&CRPT->TDES0_IVH + (u32Channel * 0x40UL);
outpw(reg_addr, u32IVH);
reg_addr = (uint32_t)&CRPT->TDES0_IVL + (u32Channel * 0x40UL);
outpw(reg_addr, u32IVL);
} }
/** /**
@ -266,9 +294,16 @@ void TDES_SetInitVect(uint32_t u32Channel, uint32_t u32IVH, uint32_t u32IVL)
void TDES_SetDMATransfer(uint32_t u32Channel, uint32_t u32SrcAddr, void TDES_SetDMATransfer(uint32_t u32Channel, uint32_t u32SrcAddr,
uint32_t u32DstAddr, uint32_t u32TransCnt) uint32_t u32DstAddr, uint32_t u32TransCnt)
{ {
*(uint32_t *)((uint32_t)&CRPT->TDES0_SADDR + (u32Channel * 0x40)) = u32SrcAddr; uint32_t reg_addr;
*(uint32_t *)((uint32_t)&CRPT->TDES0_DADDR + (u32Channel * 0x40)) = u32DstAddr;
*(uint32_t *)((uint32_t)&CRPT->TDES0_CNT + (u32Channel * 0x40)) = u32TransCnt; reg_addr = (uint32_t)&CRPT->TDES0_SADDR + (u32Channel * 0x40UL);
outpw(reg_addr, u32SrcAddr);
reg_addr = (uint32_t)&CRPT->TDES0_DADDR + (u32Channel * 0x40UL);
outpw(reg_addr, u32DstAddr);
reg_addr = (uint32_t)&CRPT->TDES0_CNT + (u32Channel * 0x40UL);
outpw(reg_addr, u32TransCnt);
} }
/** /**

View File

@ -275,9 +275,9 @@ void AES_Start(int32_t u32Channel, uint32_t u32DMAMode);
void AES_SetKey(uint32_t u32Channel, uint32_t au32Keys[], uint32_t u32KeySize); void AES_SetKey(uint32_t u32Channel, uint32_t au32Keys[], uint32_t u32KeySize);
void AES_SetInitVect(uint32_t u32Channel, uint32_t au32IV[]); void AES_SetInitVect(uint32_t u32Channel, uint32_t au32IV[]);
void AES_SetDMATransfer(uint32_t u32Channel, uint32_t u32SrcAddr, uint32_t u32DstAddr, uint32_t u32TransCnt); void AES_SetDMATransfer(uint32_t u32Channel, uint32_t u32SrcAddr, uint32_t u32DstAddr, uint32_t u32TransCnt);
void TDES_Open(uint32_t u32Channel, uint32_t u32EncDec, uint32_t u32OpMode, uint32_t u32SwapType); void TDES_Open(uint32_t u32Channel, uint32_t u32EncDec, int32_t Is3DES, int32_t Is3Key, uint32_t u32OpMode, uint32_t u32SwapType);
void TDES_Start(int32_t u32Channel, uint32_t u32DMAMode); void TDES_Start(int32_t u32Channel, uint32_t u32DMAMode);
void TDES_SetKey(uint32_t u32Channel, uint8_t au8Keys[3][8]); void TDES_SetKey(uint32_t u32Channel, uint32_t au32Keys[3][2]);
void TDES_SetInitVect(uint32_t u32Channel, uint32_t u32IVH, uint32_t u32IVL); void TDES_SetInitVect(uint32_t u32Channel, uint32_t u32IVH, uint32_t u32IVL);
void TDES_SetDMATransfer(uint32_t u32Channel, uint32_t u32SrcAddr, uint32_t u32DstAddr, uint32_t u32TransCnt); void TDES_SetDMATransfer(uint32_t u32Channel, uint32_t u32SrcAddr, uint32_t u32DstAddr, uint32_t u32TransCnt);
void SHA_Open(uint32_t u32OpMode, uint32_t u32SwapType); void SHA_Open(uint32_t u32OpMode, uint32_t u32SwapType);