50   0x01, 0x02, 0x04, 0x08, 0x10, 0x20, 0x40, 0x80, 0x1b, 0x36
 
   64 #   define ROT(x, s) ((x >> s) | (x << (32-s))) 
   66 #   define ROT(x, s) ((x << s) | (x >> (32-s))) 
   72     dst->
u64[0] = src->
u64[0] ^ round_key->
u64[0];
 
   73     dst->
u64[1] = src->
u64[1] ^ round_key->
u64[1];
 
   95     s0[0].
u8[ 0] = box[s0[1].
u8[ 0]];
 
   96     s0[0].
u8[ 4] = box[s0[1].
u8[ 4]];
 
   97     s0[0].
u8[ 8] = box[s0[1].
u8[ 8]];
 
   98     s0[0].
u8[12] = box[s0[1].
u8[12]];
 
   99     s1[0].
u8[ 3] = box[s1[1].
u8[ 7]];
 
  100     s1[0].
u8[ 7] = box[s1[1].
u8[11]];
 
  101     s1[0].
u8[11] = box[s1[1].
u8[15]];
 
  102     s1[0].
u8[15] = box[s1[1].
u8[ 3]];
 
  103     s0[0].
u8[ 2] = box[s0[1].
u8[10]];
 
  104     s0[0].
u8[10] = box[s0[1].
u8[ 2]];
 
  105     s0[0].
u8[ 6] = box[s0[1].
u8[14]];
 
  106     s0[0].
u8[14] = box[s0[1].
u8[ 6]];
 
  107     s3[0].
u8[ 1] = box[s3[1].
u8[13]];
 
  108     s3[0].
u8[13] = box[s3[1].
u8[ 9]];
 
  109     s3[0].
u8[ 9] = box[s3[1].
u8[ 5]];
 
  110     s3[0].
u8[ 5] = box[s3[1].
u8[ 1]];
 
  113 static inline int mix_core(uint32_t multbl[][256], 
int a, 
int b, 
int c, 
int d){
 
  115     return multbl[0][
a] ^ 
ROT(multbl[0][b], 8) ^ 
ROT(multbl[0][c], 16) ^ 
ROT(multbl[0][d], 24);
 
  117     return multbl[0][
a] ^ multbl[1][
b] ^ multbl[2][
c] ^ multbl[3][d];
 
  130                          uint32_t multbl[][256])
 
  134     for (r = a->
rounds - 1; r > 0; r--) {
 
  135         mix(a->
state, multbl, 3 - s, 1 + s);
 
  173     for (i = 0; i < 256; i++) {
 
  178             k = alog8[x + log8[c[0]]];
 
  179             l = alog8[x + log8[c[1]]];
 
  180             m = alog8[x + log8[c[2]]];
 
  181             n = alog8[x + log8[c[3]]];
 
  184             tbl[1][i] = 
ROT(tbl[0][i], 8);
 
  185             tbl[2][i] = 
ROT(tbl[0][i], 16);
 
  186             tbl[3][i] = 
ROT(tbl[0][i], 24);
 
  195     int i, j, 
t, rconpointer = 0;
 
  197     int KC = key_bits >> 5;
 
  204         for (i = 0; i < 255; i++) {
 
  205             alog8[i] = alog8[i + 255] = j;
 
  211         for (i = 0; i < 256; i++) {
 
  212             j = i ? alog8[255 - log8[i]] : 0;
 
  213             j ^= (j << 1) ^ (j << 2) ^ (j << 3) ^ (j << 4);
 
  214             j = (j ^ (j >> 8) ^ 99) & 255;
 
  224     if (key_bits != 128 && key_bits != 192 && key_bits != 256)
 
  229     memcpy(tk, key, KC * 4);
 
  232     for (t = KC * 4; t < (rounds + 1) * 16; t += KC * 4) {
 
  233         for (i = 0; i < 4; i++)
 
  234             tk[0][i] ^= 
sbox[tk[KC - 1][(i + 1) & 3]];
 
  235         tk[0][0] ^= 
rcon[rconpointer++];
 
  237         for (j = 1; j < KC; j++) {
 
  238             if (KC != 8 || j != KC >> 1)
 
  239                 for (i = 0; i < 4; i++)
 
  240                     tk[j][i] ^= tk[j - 1][i];
 
  242                 for (i = 0; i < 4; i++)
 
  243                     tk[j][i] ^= 
sbox[tk[j - 1][i]];
 
  250         for (i = 1; i < 
rounds; i++) {
 
  258         for (i = 0; i < (rounds + 1) >> 1; i++) {
 
  272 int main(
int argc, 
char **argv)
 
  278         { 0x10, 0xa5, 0x88, 0x69, 0xd7, 0x4b, 0xe5, 0xa3,
 
  279           0x74, 0xcf, 0x86, 0x7c, 0xfb, 0x47, 0x38, 0x59 }
 
  282         { 0x6a, 0x84, 0x86, 0x7c, 0xd7, 0x7e, 0x12, 0xad,
 
  283           0x07, 0xea, 0x1b, 0xe8, 0x95, 0xc5, 0x3f, 0xa3 },
 
  287         { 0x73, 0x22, 0x81, 0xc0, 0xa0, 0xaa, 0xb8, 0xf7,
 
  288           0xa5, 0x4a, 0x0c, 0x67, 0xa0, 0xc4, 0x5e, 0xcf },
 
  289         { 0x6d, 0x25, 0x1e, 0x69, 0x44, 0xb0, 0x51, 0xe0,
 
  290           0x4e, 0xaa, 0x6f, 0xb4, 0xdb, 0xf7, 0x84, 0x65 }
 
  297     for (i = 0; i < 2; i++) {
 
  300         for (j = 0; j < 16; j++) {
 
  301             if (rpt[i][j] != temp[j]) {
 
  303                        j, rpt[i][j], temp[j]);
 
  309     if (argc > 1 && !strcmp(argv[1], 
"-t")) {
 
  317         for (i = 0; i < 10000; i++) {
 
  318             for (j = 0; j < 16; j++) {
 
  326                            temp[0], temp[5], temp[10], temp[15]);
 
  330             for (j = 0; j < 16; j++) {
 
  331                 if (pt[j] != temp[j]) {
 
  333                            i, j, pt[j], temp[j]);