Cryptography Reference
In-Depth Information
Listing 2-29: “aes.c” rot_word
static void rot_word( unsigned char *w )
{
unsigned char tmp;
tmp = w[ 0 ];
w[ 0 ] = w[ 1 ];
w[ 1 ] = w[ 2 ];
w[ 2 ] = w[ 3 ];
w[ 3 ] = tmp;
}
The substitution involves looking up each byte in a translation table and then
replacing it with the value found there. The translation table is 16
16 bytes;
the row is the high-order nibble of the source byte and the column is the low-
order nibble. So, for example, the input byte 0x1A corresponds to row 1, column
10 of the lookup table, and input byte 0xC5 corresponds to row 12, column 5.
Actually, the lookup table values can be computed dynamically. According to
the specifi cation, this computation is “the affi ne transformation (over GF(2 8 )) of
b i + b (i+4)%8 + b (i+5)%8 + b (i+6)%8 +
b (i+7)%8 + c i after taking the multiplicative inverse
in the fi nite fi eld GF(2 8 )”. If that means anything to you, have at it.
This isn't something you'd want to do dynamically anyway, though, because
the values never change. Instead, hardcode the table as shown in Listing 2-30,
just as you did for DES:
Listing 2-30: “aes.c” sbox
static unsigned char sbox[ 16 ][ 16 ] = {
{ 0x63, 0x7c, 0x77, 0x7b, 0xf2, 0x6b, 0x6f, 0xc5,
0x30, 0x01, 0x67, 0x2b, 0xfe, 0xd7, 0xab, 0x76 },
{ 0xca, 0x82, 0xc9, 0x7d, 0xfa, 0x59, 0x47, 0xf0,
0xad, 0xd4, 0xa2, 0xaf, 0x9c, 0xa4, 0x72, 0xc0 },
{ 0xb7, 0xfd, 0x93, 0x26, 0x36, 0x3f, 0xf7, 0xcc,
0x34, 0xa5, 0xe5, 0xf1, 0x71, 0xd8, 0x31, 0x15 },
{ 0x04, 0xc7, 0x23, 0xc3, 0x18, 0x96, 0x05, 0x9a,
0x07, 0x12, 0x80, 0xe2, 0xeb, 0x27, 0xb2, 0x75 },
{ 0x09, 0x83, 0x2c, 0x1a, 0x1b, 0x6e, 0x5a, 0xa0,
0x52, 0x3b, 0xd6, 0xb3, 0x29, 0xe3, 0x2f, 0x84 },
{ 0x53, 0xd1, 0x00, 0xed, 0x20, 0xfc, 0xb1, 0x5b,
0x6a, 0xcb, 0xbe, 0x39, 0x4a, 0x4c, 0x58, 0xcf },
{ 0xd0, 0xef, 0xaa, 0xfb, 0x43, 0x4d, 0x33, 0x85,
0x45, 0xf9, 0x02, 0x7f, 0x50, 0x3c, 0x9f, 0xa8 },
{ 0x51, 0xa3, 0x40, 0x8f, 0x92, 0x9d, 0x38, 0xf5,
0xbc, 0xb6, 0xda, 0x21, 0x10, 0xff, 0xf3, 0xd2 },
{ 0xcd, 0x0c, 0x13, 0xec, 0x5f, 0x97, 0x44, 0x17,
(Continued)
Search WWH ::




Custom Search