view libtomcrypt/notes/etc/whirlgen.c @ 665:4d9511f98462

fix out-of-tree cleaning If we build out of tree and then run `make clean`, we hit an infinite loop where libtommath tries to enter subdirs that don't exist and run `make clean`.
author Mike Frysinger Sun, 08 Apr 2012 02:06:54 -0400 1b9e69c058d2 f849a5ca2efc
line wrap: on
line source
```#include <stdio.h>

unsigned E[16] =  { 1, 0xb, 9, 0xc, 0xd, 6, 0xf, 3, 0xe, 8, 7, 4, 0xa, 2, 5, 0 };
unsigned Ei[16];
unsigned R[16] =  { 7, 0xc, 0xb, 0xd, 0xe, 4, 9, 0xf, 6, 3, 8, 0xa, 2, 5, 1, 0 };
unsigned cir[8][8] = {
{1, 1, 4, 1, 8, 5, 2, 9 },
};

unsigned gf_mul(unsigned a, unsigned b)
{
unsigned r;

r = 0;
while (a) {
if (a & 1) r ^= b;
a >>= 1;
b = (b << 1) ^ (b & 0x80 ? 0x11d : 0x00);
}
return r;
}

unsigned sbox(unsigned x)
{
unsigned a, b, w;

a = x >> 4;
b = x & 15;

a = E[a]; b = Ei[b];
w = a ^ b; w = R[w];
a = E[a ^ w]; b = Ei[b ^ w];

return (a << 4) | b;
}

int main(void)
{
unsigned x, y;

for (x = 0; x < 16; x++) Ei[E[x]] = x;

//   for (x = 0; x < 16; x++) printf("%2x ", sbox(x));
for (y = 1; y < 8; y++) {
for (x = 0; x < 8; x++) {
cir[y][x] = cir[y-1][(x-1)&7];
}
}

/*
printf("\n");
for (y = 0; y < 8; y++) {
for (x = 0; x < 8; x++) printf("%2d ", cir[y][x]);
printf("\n");
}
*/

for (y = 0; y < 8; y++) {
printf("static const ulong64 sbox%d[] = {\n", y);
for (x = 0; x < 256; ) {
printf("CONST64(0x%02x%02x%02x%02x%02x%02x%02x%02x)",
gf_mul(sbox(x), cir[y][0]),
gf_mul(sbox(x), cir[y][1]),
gf_mul(sbox(x), cir[y][2]),
gf_mul(sbox(x), cir[y][3]),
gf_mul(sbox(x), cir[y][4]),
gf_mul(sbox(x), cir[y][5]),
gf_mul(sbox(x), cir[y][6]),
gf_mul(sbox(x), cir[y][7]));
if (x < 255) printf(", ");
if (!(++x & 3)) printf("\n");
}
printf("};\n\n");
}

printf("static const ulong64 cont[] = {\n");
for (y = 0; y <= 10; y++) {
printf("CONST64(0x");
for (x = 0; x < 8; x++) {
printf("%02x", sbox((8*y + x)&255));
}
printf("),\n");
}
printf("};\n\n");
return 0;

}

/* \$Source: /cvs/libtom/libtomcrypt/notes/etc/whirlgen.c,v \$ */
/* \$Revision: 1.2 \$ */
/* \$Date: 2005/05/05 14:35:58 \$ */
```