#include #include #include #include "tables.h" static unsigned char parity[256]; static unsigned int inv[256]; static unsigned char affine(unsigned char x) { return(0x63 ^ (parity[x&0xf8] & 0x80) ^ (parity[x&0x7c] & 0x40) ^ (parity[x&0x3e] & 0x20) ^ (parity[x&0x1f] & 0x10) ^ (parity[x&0x8f] & 0x08) ^ (parity[x&0xc7] & 0x04) ^ (parity[x&0xe3] & 0x02) ^ (parity[x&0xf1] & 0x01) ); } int main(void); int main(void) { int i; int j; int c; auto void pr(const char *, ...) __attribute__((__format__(__printf__,1,2))); auto void pr(const char *fmt, ...) { va_list ap; va_start(ap,fmt); if (c > 72) { printf("\n"); c = 0; } c += vprintf(fmt,ap); va_end(ap); } for (i=0;i<256;i++) { j = (i & 0x55) ^ ((i & 0xaa) >> 1); j = (j & 0x33) ^ ((j & 0xcc) >> 2); j = (j & 0x0f) ^ ((j & 0xf0) >> 4); parity[i] = j ? 0xff : 0; inv[i] = 0x100; } c = 0; pr("const unsigned char rijndael__sbox[256]={"/*}*/); for (i=0;i<256;i++) { if (i) pr(","); j = affine(rijndael__inv[i]); pr("%d",j); inv[j] = i; } pr(/*{*/"}"); printf(";\n"); c = 0; pr("const unsigned char rijndael__isbox[256]={"/*}*/); for (i=0;i<256;i++) { if (i) pr(","); if (inv[i] > 0xff) abort(); pr("%d",inv[i]); } pr(/*{*/"}"); printf(";\n"); return(0); }