#include #include #include unsigned char inv[256]; static unsigned char gfprod(unsigned char a, unsigned char b) { unsigned short int p; unsigned char m; int i; p = 0; for (m=0x80;m;m>>=1) { p <<= 1; if (b & m) p ^= a; } for (i=7;i>=0;i--) if (p & (0x100 << i)) p ^= 0x11b << i; return(p); } int main(void); int main(void) { int i; int j; int p; 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); } c = 0; pr("const unsigned char rijndael__mult[256][256]={"/*}*/); for (i=0;i<256;i++) { if (i) pr(","); pr("{"/*}*/); for (j=0;j<256;j++) { if (j) pr(","); p = gfprod(i,j); pr("%d",p); if (p == 1) inv[i] = j; } pr(/*{*/"}"); } pr(/*{*/"}"); printf(";\n"); c = 0; pr("const unsigned char rijndael__inv[256]={0"/*}*/); for (i=1;i<256;i++) { pr(","); if (gfprod(i,inv[i]) != 1) abort(); pr("%d",inv[i]); } pr(/*{*/"}"); printf(";\n"); return(0); }