?? aes_func.c
字號:
statemt[15] = invSbox[statemt[3] >> 4][statemt[3] & 0xf];
statemt[3] = invSbox[statemt[7] >> 4][statemt[7] & 0xf];
statemt[7] = invSbox[statemt[11] >> 4][statemt[11] & 0xf];
statemt[11] = temp;
statemt[0] = invSbox[statemt[0] >> 4][statemt[0] & 0xf];
statemt[4] = invSbox[statemt[4] >> 4][statemt[4] & 0xf];
statemt[8] = invSbox[statemt[8] >> 4][statemt[8] & 0xf];
statemt[12] = invSbox[statemt[12] >> 4][statemt[12] & 0xf];
break;
case 6:
temp = invSbox[statemt[21] >> 4][statemt[21] & 0xf];
statemt[21] = invSbox[statemt[17] >> 4][statemt[17] & 0xf];
statemt[17] = invSbox[statemt[13] >> 4][statemt[13] & 0xf];
statemt[13] = invSbox[statemt[9] >> 4][statemt[9] & 0xf];
statemt[9] = invSbox[statemt[5] >> 4][statemt[5] & 0xf];
statemt[5] = invSbox[statemt[1] >> 4][statemt[1] & 0xf];
statemt[1] = temp;
temp = invSbox[statemt[22] >> 4][statemt[22] & 0xf];
statemt[22] = invSbox[statemt[14] >> 4][statemt[14] & 0xf];
statemt[14] = invSbox[statemt[6] >> 4][statemt[6] & 0xf];
statemt[6]= temp;
temp = invSbox[statemt[18] >> 4][statemt[18] & 0xf];
statemt[18] = invSbox[statemt[10] >> 4][statemt[10] & 0xf];
statemt[10] = invSbox[statemt[2] >> 4][statemt[2] & 0xf];
statemt[2]=temp;
temp = invSbox[statemt[15] >> 4][statemt[15] & 0xf];
statemt[15] = invSbox[statemt[3] >> 4][statemt[3] & 0xf];
statemt[3] = temp;
temp = invSbox[statemt[19] >> 4][statemt[19] & 0xf];
statemt[19] = invSbox[statemt[7] >> 4][statemt[7] & 0xf];
statemt[7] = temp;
temp = invSbox[statemt[23] >> 4][statemt[23] & 0xf];
statemt[23] = invSbox[statemt[11] >> 4][statemt[11] & 0xf];
statemt[11] = temp;
statemt[0] = invSbox[statemt[0] >> 4][statemt[0] & 0xf];
statemt[4] = invSbox[statemt[4] >> 4][statemt[4] & 0xf];
statemt[8] = invSbox[statemt[8] >> 4][statemt[8] & 0xf];
statemt[12] = invSbox[statemt[12] >> 4][statemt[12] & 0xf];
statemt[16] = invSbox[statemt[16] >> 4][statemt[16] & 0xf];
statemt[20] = invSbox[statemt[20] >> 4][statemt[20] & 0xf];
break;
case 8:
temp = invSbox[statemt[29] >> 4][statemt[29] & 0xf];
statemt[29]= invSbox[statemt[25] >> 4][statemt[25] & 0xf];
statemt[25]= invSbox[statemt[21] >> 4][statemt[21] & 0xf];
statemt[21] = invSbox[statemt[17] >> 4][statemt[17] & 0xf];
statemt[17] = invSbox[statemt[13] >> 4][statemt[13] & 0xf];
statemt[13] = invSbox[statemt[9] >> 4][statemt[9] & 0xf];
statemt[9] = invSbox[statemt[5] >> 4][statemt[5] & 0xf];
statemt[5] = invSbox[statemt[1] >> 4][statemt[1] & 0xf];
statemt[1] = temp;
temp = invSbox[statemt[30] >> 4][statemt[30] & 0xf];
statemt[30]= invSbox[statemt[18] >> 4][statemt[18] & 0xf];
statemt[18]= invSbox[statemt[6] >> 4][statemt[6] & 0xf];
statemt[6]= invSbox[statemt[26] >> 4][statemt[26] & 0xf];
statemt[26]= invSbox[statemt[14] >> 4][statemt[14] & 0xf];
statemt[14]= invSbox[statemt[2] >> 4][statemt[2] & 0xf];
statemt[2]= invSbox[statemt[22] >> 4][statemt[22] & 0xf];
statemt[22]= invSbox[statemt[10] >> 4][statemt[10] & 0xf];
statemt[10]=temp;
temp = invSbox[statemt[31] >> 4][statemt[31] & 0xf];
statemt[31] = invSbox[statemt[15] >> 4][statemt[15] & 0xf];
statemt[15] = temp;
temp = invSbox[statemt[27] >> 4][statemt[27] & 0xf];
statemt[27] = invSbox[statemt[11] >> 4][statemt[11] & 0xf];
statemt[11] = temp;
temp = invSbox[statemt[23] >> 4][statemt[23] & 0xf];
statemt[23] = invSbox[statemt[7] >> 4][statemt[7] & 0xf];
statemt[7] = temp;
temp = invSbox[statemt[19] >> 4][statemt[19] & 0xf];
statemt[19] = invSbox[statemt[3] >> 4][statemt[3] & 0xf];
statemt[3] = temp;
statemt[0] = invSbox[statemt[0] >> 4][statemt[0] & 0xf];
statemt[4] = invSbox[statemt[4] >> 4][statemt[4] & 0xf];
statemt[8] = invSbox[statemt[8] >> 4][statemt[8] & 0xf];
statemt[12] = invSbox[statemt[12] >> 4][statemt[12] & 0xf];
statemt[16] = invSbox[statemt[16] >> 4][statemt[16] & 0xf];
statemt[20] = invSbox[statemt[20] >> 4][statemt[20] & 0xf];
statemt[24] = invSbox[statemt[24] >> 4][statemt[24] & 0xf];
statemt[28] = invSbox[statemt[28] >> 4][statemt[28] & 0xf];
break;
}
}
/* ******** MixColumn ********** */
int MixColumn_AddRoundKey(int statemt[32],int nb,int n){
int ret[8*4],j;
register int x;
for (j=0;j<nb;++j)
{
ret[j*4]=(statemt[j*4] << 1);
if ((ret[j*4] >> 8) == 1) ret[j*4] ^= 283;
x = statemt[1 + j*4];
x ^= (x << 1);
if (( x >> 8) == 1) ret[j*4] ^= (x ^ 283);
else ret[j*4] ^= x;
ret[j*4] ^= statemt[2 + j*4] ^ statemt[3 + j*4]
^ word[0][j+nb*n] ;
ret[1+j*4]=(statemt[1+j*4] << 1);
if ((ret[1+j*4] >> 8) == 1) ret[1 + j*4] ^= 283;
x=statemt[2 + j*4];
x ^= (x << 1);
if (( x >> 8) == 1) ret[1+j*4] ^= (x ^ 283);
else ret[1+j*4] ^= x;
ret[1+j*4] ^= statemt[3 + j*4] ^ statemt[j*4]
^ word[1][j+nb*n] ;
ret[2+j*4]=(statemt[2+j*4] << 1);
if ((ret[2+j*4] >> 8) == 1) ret[2 + j*4] ^= 283;
x=statemt[3 + j*4];
x ^= (x << 1);
if (( x >> 8) == 1) ret[2+j*4] ^= (x ^ 283);
else ret[2+j*4] ^= x;
ret[2+j*4] ^= statemt[j*4] ^ statemt[1 + j*4]
^ word[2][j+nb*n] ;
ret[3+j*4]=(statemt[3+j*4] << 1);
if ((ret[3+j*4] >> 8) == 1) ret[3 + j*4] ^= 283;
x=statemt[j*4];
x ^= (x << 1);
if (( x >> 8) == 1) ret[3+j*4] ^= (x ^ 283);
else ret[3+j*4] ^= x;
ret[3+j*4] ^= statemt[1 + j*4] ^ statemt[2+ j*4]
^ word[3][j+nb*n];
}
for (j=0;j < nb;++j){
statemt[j*4] = ret[j*4] ;
statemt[1+j*4] = ret[1 + j*4] ;
statemt[2+j*4] = ret[2 + j*4] ;
statemt[3+j*4] = ret[3 + j*4] ;
}
return 0;
}
/* ******** InversMixColumn ********** */
int AddRoundKey_InversMixColumn(int statemt[32],int nb,int n){
int ret[8*4],i,j;
register int x;
for (j=0;j < nb;++j){
statemt[j*4] ^= word[0][j+nb*n];
statemt[1+j*4] ^= word[1][j+nb*n];
statemt[2+j*4] ^= word[2][j+nb*n];
statemt[3+j*4] ^= word[3][j+nb*n];
}
for (j=0;j<nb;++j)
for (i=0;i<4;++i)
{
x=(statemt[i + j*4] << 1);
if ((x >> 8) == 1) x ^= 283;
x ^= statemt[i + j*4] ;
x=(x << 1);
if ((x >> 8) == 1) x ^= 283;
x ^= statemt[i + j*4] ;
x=(x << 1);
if ((x >> 8) == 1) x ^= 283;
ret[i + j*4] = x;
x=(statemt[(i + 1) % 4 + j*4] << 1);
if ((x >> 8) == 1) x ^= 283;
x=(x << 1);
if ((x >> 8) == 1) x ^= 283;
x ^= statemt[(i + 1) % 4 + j*4] ;
x=(x << 1);
if ((x >> 8) == 1) x ^= 283;
x ^= statemt[(i + 1) % 4 + j*4] ;
ret[i + j*4] ^= x;
x=(statemt[(i + 2) % 4 + j*4] << 1);
if ((x >> 8) == 1) x ^= 283;
x ^= statemt[(i + 2) % 4 + j*4] ;
x=(x << 1);
if ((x >> 8) == 1) x ^= 283;
x=(x << 1);
if ((x >> 8) == 1) x ^= 283;
x ^= statemt[(i + 2) % 4 + j*4] ;
ret[i + j*4] ^= x;
x=(statemt[(i + 3) % 4 + j*4] << 1);
if ((x >> 8) == 1) x ^= 283;
x=(x << 1);
if ((x >> 8) == 1) x ^= 283;
x=(x << 1);
if ((x >> 8) == 1) x ^= 283;
x ^= statemt[(i + 3) % 4 + j*4] ;
ret[i + j*4] ^= x;
}
for (i=0;i<nb;++i){
statemt[i*4] = ret[i*4];
statemt[1+i*4] = ret[1+i*4];
statemt[2+i*4] = ret[2+i*4];
statemt[3+i*4] = ret[3+i*4];}
return 0;
}
/* ******** AddRoundKey ********** */
int AddRoundKey(int statemt[32],int type,int n){
int j,nb;
switch (type){
case 128128:case 192128:case 256128:nb=4;break;
case 128192:case 192192:case 256192:nb=6;break;
case 128256:case 192256:case 256256:nb=8;break;}
for (j=0;j < nb;++j){
statemt[j*4] ^= word[0][j+nb*n];
statemt[1+j*4] ^= word[1][j+nb*n];
statemt[2+j*4] ^= word[2][j+nb*n];
statemt[3+j*4] ^= word[3][j+nb*n];
}
return 0;
}
?? 快捷鍵說明
復(fù)制代碼
Ctrl + C
搜索代碼
Ctrl + F
全屏模式
F11
切換主題
Ctrl + Shift + D
顯示快捷鍵
?
增大字號
Ctrl + =
減小字號
Ctrl + -