📄 aes.c
字号:
Nb = BlockLength/32;
Nk = KeyLength/32;
Nr = NR[(Nk - 4)/2][(Nb - 4)/2];
if (0 != (error = AESKeyExpansion (InvExpandedKey, RawKey, KeyLength, BlockLength)))
{
return error;
}
for (round = 1; round < Nr; round++)
{
InvMixColumns (&InvExpandedKey[round*Nb], Nb);
}
return 0;
}
#ifndef AES_COMPACT
/******************************************************************************/
/* */
/* Function: AES processing of state variable (encryption) */
/* Fast table lookup */
/* Syntax: int */
/* AESEncState_l (AESSTATE State, AESXPKEY ExpandedKey, */
/* int Nk, int Nb); */
/* Input: AESSTATE State (State variable to process) */
/* AESEXPKEY ExpandedKey (Key schedule) */
/* int Nk (Keylength in 4-byte-words 4, 6, 8) */
/* int Nb (Blocklength in 4-byte-words 4, 6, 8) */
/* Output: AESSTATE State (processed state variable) */
/* Returns: 0 */
/* */
/******************************************************************************/
int __FLINT_API
AESEncState_l (AESSTATE State, AESXPKEY ExpandedKey, int Nk, int Nb)
{
int round, Nr = NR[(Nk - 4)/2][(Nb - 4)/2];
ULONG *keyptr;
ULONG a0, a1, a2, a3, a4, a5, a6, a7;
ULONG b0, b1, b2, b3, b4, b5, b6;
switch (Nb)
{
case 8:
a7 = State[7] ^ ExpandedKey[7];
a6 = State[6] ^ ExpandedKey[6];
case 6:
a5 = State[5] ^ ExpandedKey[5];
a4 = State[4] ^ ExpandedKey[4];
case 4:
a3 = State[3] ^ ExpandedKey[3];
a2 = State[2] ^ ExpandedKey[2];
a1 = State[1] ^ ExpandedKey[1];
a0 = State[0] ^ ExpandedKey[0];
}
for (keyptr = &ExpandedKey[Nb], round = 1; round < Nr; round++)
{
switch (Nb)
{
case 4:
b0 = Table0[(a0 ) & 0xff]
^ Table1[(a1 >> 8) & 0xff]
^ Table2[(a2 >> 16) & 0xff]
^ Table3[(a3 >> 24) ];
b1 = Table0[(a1 ) & 0xff]
^ Table1[(a2 >> 8) & 0xff]
^ Table2[(a3 >> 16) & 0xff]
^ Table3[(a0 >> 24) ];
b2 = Table0[(a2 ) & 0xff]
^ Table1[(a3 >> 8) & 0xff]
^ Table2[(a0 >> 16) & 0xff]
^ Table3[(a1 >> 24) ];
a3 = Table0[(a3 ) & 0xff]
^ Table1[(a0 >> 8) & 0xff]
^ Table2[(a1 >> 16) & 0xff]
^ Table3[(a2 >> 24) ]
^ keyptr[3];
a0 = b0 ^ keyptr[0];
a1 = b1 ^ keyptr[1];
a2 = b2 ^ keyptr[2];
break;
case 6:
b0 = Table0[(a0 ) & 0xff]
^ Table1[(a1 >> 8) & 0xff]
^ Table2[(a2 >> 16) & 0xff]
^ Table3[(a3 >> 24) ];
b1 = Table0[(a1 ) & 0xff]
^ Table1[(a2 >> 8) & 0xff]
^ Table2[(a3 >> 16) & 0xff]
^ Table3[(a4 >> 24) ];
b2 = Table0[(a2 ) & 0xff]
^ Table1[(a3 >> 8) & 0xff]
^ Table2[(a4 >> 16) & 0xff]
^ Table3[(a5 >> 24) ];
b3 = Table0[(a3 ) & 0xff]
^ Table1[(a4 >> 8) & 0xff]
^ Table2[(a5 >> 16) & 0xff]
^ Table3[(a0 >> 24) ];
b4 = Table0[(a4 ) & 0xff]
^ Table1[(a5 >> 8) & 0xff]
^ Table2[(a0 >> 16) & 0xff]
^ Table3[(a1 >> 24) ];
a5 = Table0[(a5 ) & 0xff]
^ Table1[(a0 >> 8) & 0xff]
^ Table2[(a1 >> 16) & 0xff]
^ Table3[(a2 >> 24) ]
^ keyptr[5];
a0 = b0 ^ keyptr[0];
a1 = b1 ^ keyptr[1];
a2 = b2 ^ keyptr[2];
a3 = b3 ^ keyptr[3];
a4 = b4 ^ keyptr[4];
break;
case 8:
/* col 0 */
b0 = Table0[(a0 ) & 0xff]
^ Table1[(a1 >> 8) & 0xff]
^ Table2[(a3 >> 16) & 0xff]
^ Table3[(a4 >> 24) ];
/* col 1 */
b1 = Table0[(a1 ) & 0xff]
^ Table1[(a2 >> 8) & 0xff]
^ Table2[(a4 >> 16) & 0xff]
^ Table3[(a5 >> 24) ];
/* col 2 */
b2 = Table0[(a2 ) & 0xff]
^ Table1[(a3 >> 8) & 0xff]
^ Table2[(a5 >> 16) & 0xff]
^ Table3[(a6 >> 24) ];
/* col 3 */
b3 = Table0[(a3 ) & 0xff]
^ Table1[(a4 >> 8) & 0xff]
^ Table2[(a6 >> 16) & 0xff]
^ Table3[(a7 >> 24) ];
/* col 4 */
b4 = Table0[(a4 ) & 0xff]
^ Table1[(a5 >> 8) & 0xff]
^ Table2[(a7 >> 16) & 0xff]
^ Table3[(a0 >> 24) ];
/* col 5 */
b5 = Table0[(a5 ) & 0xff]
^ Table1[(a6 >> 8) & 0xff]
^ Table2[(a0 >> 16) & 0xff]
^ Table3[(a1 >> 24) ];
/* col 6 */
b6 = Table0[(a6 ) & 0xff]
^ Table1[(a7 >> 8) & 0xff]
^ Table2[(a1 >> 16) & 0xff]
^ Table3[(a2 >> 24) ];
/* col 7 */
a7 = Table0[(a7 ) & 0xff]
^ Table1[(a0 >> 8) & 0xff]
^ Table2[(a2 >> 16) & 0xff]
^ Table3[(a3 >> 24) ]
^ keyptr[7];
a0 = b0 ^ keyptr[0];
a1 = b1 ^ keyptr[1];
a2 = b2 ^ keyptr[2];
a3 = b3 ^ keyptr[3];
a4 = b4 ^ keyptr[4];
a5 = b5 ^ keyptr[5];
a6 = b6 ^ keyptr[6];
break;
}
keyptr += Nb;
}
/* Final round */
switch (Nb)
{
case 4:
State[0] = (SBox[(a0 ) & 0xff] )
^ (SBox[(a1 >> 8) & 0xff] << 8)
^ (SBox[(a2 >> 16) & 0xff] << 16)
^ (SBox[(a3 >> 24) ] << 24)
^ keyptr[0];
State[1] = (SBox[(a1 ) & 0xff] )
^ (SBox[(a2 >> 8) & 0xff] << 8)
^ (SBox[(a3 >> 16) & 0xff] << 16)
^ (SBox[(a0 >> 24) ] << 24)
^ keyptr[1];
State[2] = (SBox[(a2 ) & 0xff] )
^ (SBox[(a3 >> 8) & 0xff] << 8)
^ (SBox[(a0 >> 16) & 0xff] << 16)
^ (SBox[(a1 >> 24) ] << 24)
^ keyptr[2];
State[3] = (SBox[(a3 ) & 0xff] )
^ (SBox[(a0 >> 8) & 0xff] << 8)
^ (SBox[(a1 >> 16) & 0xff] << 16)
^ (SBox[(a2 >> 24) ] << 24)
^ keyptr[3];
break;
case 6:
State[0] = (SBox[(a0 ) & 0xff] )
^ (SBox[(a1 >> 8) & 0xff] << 8)
^ (SBox[(a2 >> 16) & 0xff] << 16)
^ (SBox[(a3 >> 24) ] << 24)
^ keyptr[0];
State[1] = (SBox[(a1 ) & 0xff] )
^ (SBox[(a2 >> 8) & 0xff] << 8)
^ (SBox[(a3 >> 16) & 0xff] << 16)
^ (SBox[(a4 >> 24) ] << 24)
^ keyptr[1];
State[2] = (SBox[(a2 ) & 0xff] )
^ (SBox[(a3 >> 8) & 0xff] << 8)
^ (SBox[(a4 >> 16) & 0xff] << 16)
^ (SBox[(a5 >> 24) ] << 24)
^ keyptr[2];
State[3] = (SBox[(a3 ) & 0xff] )
^ (SBox[(a4 >> 8) & 0xff] << 8)
^ (SBox[(a5 >> 16) & 0xff] << 16)
^ (SBox[(a0 >> 24) ] << 24)
^ keyptr[3];
State[4] = (SBox[(a4 ) & 0xff] )
^ (SBox[(a5 >> 8) & 0xff] << 8)
^ (SBox[(a0 >> 16) & 0xff] << 16)
^ (SBox[(a1 >> 24) ] << 24)
^ keyptr[4];
State[5] = (SBox[(a5 ) & 0xff] )
^ (SBox[(a0 >> 8) & 0xff] << 8)
^ (SBox[(a1 >> 16) & 0xff] << 16)
^ (SBox[(a2 >> 24) ] << 24)
^ keyptr[5];
break;
case 8:
/* col 0 */
State[0] = (SBox[(a0 ) & 0xff] )
^ (SBox[(a1 >> 8) & 0xff] << 8)
^ (SBox[(a3 >> 16) & 0xff] << 16)
^ (SBox[(a4 >> 24) ] << 24)
^ keyptr[0];
/* col 1 */
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -