📄 sblock.c
字号:
uReg |= (3<<4);
else
Assert(0);
Outp32(rAES_RX_CTRL, uReg);
break;
case 3:
Copy((u32)uAesKey, rAES_RX_KEY1, 4); // install aes key
Copy((u32)uAesIV, rAES_RX_IV1, 4); // install aes iv
Copy((u32)uAesInitCounter, rAES_RX_CTR1, 4); // install ctr data
printf(" Choose Counter : 0 : 16bit, 1:32bit, 2:64bits \n");
uSel1 = GetIntNum();
uReg = (eDirSel == ENC)? (0<<3) : (1<<3);
uReg |= (uSel1<<6);
if (oSblk.m_eOperMode == ECB)
uReg |= (1<<4);
else if (oSblk.m_eOperMode == CBC)
uReg |= (2<<4);
else if (oSblk.m_eOperMode == CTR)
uReg |= (3<<4);
else
Assert(0);
Outp32(rAES_RX_CTRL, uReg);
printf("rAES_RX_CRT 0x%x\n", Inp32(0x7D100000));
break;
}
}
else if (oSblk.m_eSblkType == DES)
{
Copy((u32)uDesKey, rDES_RX_KEY1_0, 6); // install des key
Copy((u32)uDesIV, rDES_RX_IV0, 2); // install des iv
uReg = ((eDirSel == ENC)? (0<<2) : (1<<2))|(1<<5)|(1<<1); // TDES
if (oSblk.m_eOperMode == ECB)
uReg |= (1<<3);
else if (oSblk.m_eOperMode == CBC)
uReg |= (2<<3);
else
Assert(0);
Outp32(rDES_RX_CTRL, uReg);
}
else if (oSblk.m_eSblkType == HASH)
{
if (oSblk.m_eOperMode == HMAC)
{
Outp32(rHASH_RX_CTRL, HASH_START|(1<<2)|(0<<0)); // start + key mode
pSrc = (u32 *)uHmacKey;
for(i=0; i<16; i++)
*(u32 *)rHASH_RX_DAT = *pSrc++;
Outp32(rHASH_RX_CTRL, (0<<2)); // text mode
}
else if (oSblk.m_eOperMode == SHA1)
{
Outp32(rHASH_RX_CTRL, HASH_START|(1<<0));
}
else if(oSblk.m_eOperMode == PRNG)
{
Outp32(rHASH_RX_CTRL, SEED_SET_ENABLE|HASH_START|(2<<0));
Copy((u32)uPrngSeed, rPRNG_SEED_DAT1, 10);
}
else
{
Assert(0);
}
}
Outp32(rDNI_CFG, 0xFFFFFF00);
}
void SBLK_Init_Test2(SBLK_TYPE eSblkType, OPER_MODE eOperMode, DIR_SEL eDirSel)
{
u32 uReg;
u32 *pSrc;
int i;
oSblk.m_eSblkType = eSblkType;
oSblk.m_eOperMode = eOperMode;
SBLK_Reset();
if (oSblk.m_eSblkType == AES)
{
switch(g_AES_Key)
{
case 0:
Copy((u32)uAesKey, rAES_RX_KEY1, 4); // install aes key
Copy((u32)uAesIV, rAES_RX_IV1, 4); // install aes iv
Copy((u32)uAesInitCounter, rAES_RX_CTR1, 4); // install ctr data
uReg = (eDirSel == ENC)? (0<<3) : (1<<3);
if (oSblk.m_eOperMode == ECB)
uReg |= (1<<4);
else if (oSblk.m_eOperMode == CBC)
uReg |= (2<<4);
else if (oSblk.m_eOperMode == CTR)
uReg |= (3<<4);
else
Assert(0);
Outp32(rAES_RX_CTRL, uReg);
//printf("Selected 128 Key Option \n");
break;
case 1:
Copy((u32)uAesKey192, rAES_RX_KEY1, 6); // install aes key
Copy((u32)uAesIV, rAES_RX_IV1, 4); // install aes iv
Copy((u32)uAesInitCounter, rAES_RX_CTR1, 4); // install ctr data
uReg = (eDirSel == ENC)? (0<<3) : (1<<3);
uReg |= (1<<1);
if (oSblk.m_eOperMode == ECB)
uReg |= (1<<4);
else if (oSblk.m_eOperMode == CBC)
uReg |= (2<<4);
else if (oSblk.m_eOperMode == CTR)
uReg |= (3<<4);
else
Assert(0);
Outp32(rAES_RX_CTRL, uReg);
//printf("Selected 196 Key Option \n");
break;
case 2:
Copy((u32)uAesKey256, rAES_RX_KEY1, 8); // install aes key
Copy((u32)uAesIV, rAES_RX_IV1, 4); // install aes iv
Copy((u32)uAesInitCounter, rAES_RX_CTR1, 4); // install ctr data
uReg = (eDirSel == ENC)? (0<<3) : (1<<3);
uReg |= (2<<1);
if (oSblk.m_eOperMode == ECB)
uReg |= (1<<4);
else if (oSblk.m_eOperMode == CBC)
uReg |= (2<<4);
else if (oSblk.m_eOperMode == CTR)
uReg |= (3<<4);
else
Assert(0);
Outp32(rAES_RX_CTRL, uReg);
//printf("Selected 256 Key Option \n");
break;
}
}
else if (oSblk.m_eSblkType == DES)
{
Copy((u32)uDesKey, rDES_RX_KEY1_0, 6); // install des key
Copy((u32)uDesIV, rDES_RX_IV0, 2); // install des iv
uReg = ((eDirSel == ENC)? (0<<2) : (1<<2))|(1<<5)|(1<<1); // TDES
if (oSblk.m_eOperMode == ECB)
uReg |= (1<<3);
else if (oSblk.m_eOperMode == CBC)
uReg |= (2<<3);
else
Assert(0);
Outp32(rDES_RX_CTRL, uReg);
}
else if (oSblk.m_eSblkType == HASH)
{
if (oSblk.m_eOperMode == HMAC)
{
Outp32(rHASH_RX_CTRL, HASH_START|(1<<2)|(0<<0)); // start + key mode
pSrc = (u32 *)uHmacKey;
for(i=0; i<16; i++)
*(u32 *)rHASH_RX_DAT = *pSrc++;
Outp32(rHASH_RX_CTRL, (0<<2)); // text mode
}
else if (oSblk.m_eOperMode == SHA1)
{
Outp32(rHASH_RX_CTRL, HASH_START|(1<<0));
}
else if(oSblk.m_eOperMode == PRNG)
{
Outp32(rHASH_RX_CTRL, SEED_SET_ENABLE|HASH_START|(2<<0));
Copy((u32)uPrngSeed, rPRNG_SEED_DAT1, 10);
}
else
{
Assert(0);
}
}
Outp32(rDNI_CFG, 0xFFFFFF00);
}
void SBLK_Init_Test3(SBLK_TYPE eSblkType, OPER_MODE eOperMode, DIR_SEL eDirSel)
{
u32 uReg;
u32 *pSrc;
int i;
oSblk.m_eSblkType = eSblkType;
oSblk.m_eOperMode = eOperMode;
SBLK_Reset();
if (oSblk.m_eSblkType == AES)
{
switch(g_AES_Key)
{
case 0:
Copy((u32)uAesKey, rAES_RX_KEY1, 4); // install aes key
Copy((u32)uAesIV, rAES_RX_IV1, 4); // install aes iv
Copy((u32)uAesInitCounter_, rAES_RX_CTR1, 4); // install ctr data
uReg = (eDirSel == ENC)? (0<<3) : (1<<3);
if (oSblk.m_eOperMode == ECB)
uReg |= (1<<4);
else if (oSblk.m_eOperMode == CBC)
uReg |= (2<<4);
else if (oSblk.m_eOperMode == CTR)
uReg |= (3<<4);
else
Assert(0);
Outp32(rAES_RX_CTRL, uReg);
//printf("Selected 128 Key Option \n");
break;
case 1:
Copy((u32)uAesKey192, rAES_RX_KEY1, 6); // install aes key
Copy((u32)uAesIV, rAES_RX_IV1, 4); // install aes iv
Copy((u32)uAesInitCounter_+0x10, rAES_RX_CTR1, 4); // install ctr data
uReg = (eDirSel == ENC)? (0<<3) : (1<<3);
uReg |= (1<<1);
uReg |= (1<<6); // 32bit
if (oSblk.m_eOperMode == ECB)
uReg |= (1<<4);
else if (oSblk.m_eOperMode == CBC)
uReg |= (2<<4);
else if (oSblk.m_eOperMode == CTR)
uReg |= (3<<4);
else
Assert(0);
Outp32(rAES_RX_CTRL, uReg);
//printf("Selected 196 Key Option \n");
break;
case 2:
Copy((u32)uAesKey256, rAES_RX_KEY1, 8); // install aes key
Copy((u32)uAesIV, rAES_RX_IV1, 4); // install aes iv
Copy((u32)uAesInitCounter_+0x20, rAES_RX_CTR1, 4); // install ctr data
uReg = (eDirSel == ENC)? (0<<3) : (1<<3);
uReg |= (2<<1);
uReg |= (2<<6); // 64bit
if (oSblk.m_eOperMode == ECB)
uReg |= (1<<4);
else if (oSblk.m_eOperMode == CBC)
uReg |= (2<<4);
else if (oSblk.m_eOperMode == CTR)
uReg |= (3<<4);
else
Assert(0);
Outp32(rAES_RX_CTRL, uReg);
//printf("Selected 256 Key Option \n");
break;
}
}
else if (oSblk.m_eSblkType == DES)
{
Copy((u32)uDesKey, rDES_RX_KEY1_0, 6); // install des key
Copy((u32)uDesIV, rDES_RX_IV0, 2); // install des iv
uReg = ((eDirSel == ENC)? (0<<2) : (1<<2))|(1<<5)|(1<<1); // TDES
if (oSblk.m_eOperMode == ECB)
uReg |= (1<<3);
else if (oSblk.m_eOperMode == CBC)
uReg |= (2<<3);
else
Assert(0);
Outp32(rDES_RX_CTRL, uReg);
}
else if (oSblk.m_eSblkType == HASH)
{
if (oSblk.m_eOperMode == HMAC)
{
Outp32(rHASH_RX_CTRL, HASH_START|(1<<2)|(0<<0)); // start + key mode
pSrc = (u32 *)uHmacKey;
for(i=0; i<16; i++)
*(u32 *)rHASH_RX_DAT = *pSrc++;
Outp32(rHASH_RX_CTRL, (0<<2)); // text mode
}
else if (oSblk.m_eOperMode == SHA1)
{
Outp32(rHASH_RX_CTRL, HASH_START|(1<<0));
}
else if(oSblk.m_eOperMode == PRNG)
{
Outp32(rHASH_RX_CTRL, SEED_SET_ENABLE|HASH_START|(2<<0));
Copy((u32)uPrngSeed, rPRNG_SEED_DAT1, 10);
}
else
{
Assert(0);
}
}
Outp32(rDNI_CFG, 0xFFFFFF00);
}
void SBLK_Init_T(SBLK_TYPE eSblkType, OPER_MODE eOperMode, DIR_SEL eDirSel)
{
u32 uReg;
u32 *pSrc;
int i;
oSblk.m_eSblkType = eSblkType;
oSblk.m_eOperMode = eOperMode;
SBLK_Reset();
if (oSblk.m_eSblkType == AES)
{
Copy((u32)uAesKey, rAES_RX_KEY1, 4); // install aes key
Copy((u32)uAesIV, rAES_RX_IV1, 4); // install aes iv
Copy((u32)uAesInitCounter, rAES_RX_CTR1, 4); // install ctr data
uReg = (eDirSel == ENC)? (0<<3) : (1<<3);
if (oSblk.m_eOperMode == ECB)
uReg |= (1<<4);
else if (oSblk.m_eOperMode == CBC)
uReg |= (2<<4);
else if (oSblk.m_eOperMode == CTR)
uReg |= (3<<4);
else
Assert(0);
Outp32(rAES_RX_CTRL, uReg);
}
else if (oSblk.m_eSblkType == DES)
{
Copy((u32)uDesKey, rDES_RX_KEY1_0, 6); // install des key
Copy((u32)uDesIV, rDES_RX_IV0, 2); // install des iv
uReg = ((eDirSel == ENC)? (0<<2) : (1<<2))|(0<<5)|(1<<1);
if (oSblk.m_eOperMode == ECB)
uReg |= (1<<3);
else if (oSblk.m_eOperMode == CBC)
uReg |= (2<<3);
else
Assert(0);
Outp32(rDES_RX_CTRL, uReg);
}
else if (oSblk.m_eSblkType == HASH)
{
if (oSblk.m_eOperMode == HMAC)
{
Outp32(rHASH_RX_CTRL, HASH_START|(1<<2)|(0<<0)); // start + key mode
pSrc = (u32 *)uHmacKey;
for(i=0; i<16; i++)
*(u32 *)rHASH_RX_DAT = *pSrc++;
Outp32(rHASH_RX_CTRL, (0<<2)); // text mode
}
else if (oSblk.m_eOperMode == SHA1)
{
Outp32(rHASH_RX_CTRL, HASH_START|(1<<8)|(1<<0));
}
else if(oSblk.m_eOperMode == PRNG)
{
Outp32(rHASH_RX_CTRL, SEED_SET_ENABLE|HASH_START|(2<<0));
Copy((u32)uPrngSeed, rPRNG_SEED_DAT1, 10);
}
else
{
Assert(0);
}
}
Outp32(rDNI_CFG, 0xFFFFFF00);
}
void SBLK_PutDataToInReg1(u32 uSrcAddr, u32 uSize, LVALID_BYTE eLValid)
{
u32 i, uReg;
u32 *pSrcAddr, *pDstAddr;
pSrcAddr = (u32 *)uSrcAddr;
if (oSblk.m_eSblkType == AES)
{
pDstAddr = (u32 *)rAES_RX_DIN1;
for (i=uSize; i>0; i--)
Outp32(pDstAddr++, *pSrcAddr++);
}
else if (oSblk.m_eSblkType == DES)
{
pDstAddr = (u32 *)rDES_RX_IN0;
for (i=uSize; i>0; i--)
Outp32(pDstAddr++, *pSrcAddr++);
}
else
{
printf("SHA1 Intermediate\n");
Outp32(rHASH_RX_CTRL, 0x109);
for (i=uSize; i>0; i--)
{
//Outp32(rHASH_RX_CTRL, 0x09);
if(i == 1)
{
uReg =
((eLValid == LASTBYTE_1ST)? (0<<6) :
(eLValid == LASTBYTE_2ND)? (1<<6) :
(eLValid == LASTBYTE_3RD)? (2<<6) : (3<<6)) |
HASH_INPUT_FINISHED |
((oSblk.m_eOperMode == HMAC)? (0<<0) :
(oSblk.m_eOperMode == SHA1)? (1<<0) : (2<<0));
uReg |= (1<<8);
printf("RX_CTRL = 0x%x\n",uReg);
Outp32(rHASH_RX_CTRL, 0xD1);
//Outp32(rHASH_RX_CTRL, uReg); // inform hash of last data input
}
Outp32(rHASH_RX_DAT, *pSrcAddr++);
}
}
}
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -