#include <stdio.h>

unsigned char FFMul(unsigned char a, unsigned char b) {
   unsigned char aa = a, bb = b, r = 0, t;
   while (aa != 0) {
      if ((aa & 1) != 0)
         r = r ^ bb;
      t = bb & 0x80;
      bb = bb << 1;
      if (t != 0)
         bb = bb ^ 0x1b;
      aa = aa >> 1; 
   }
   return r;
}

int main(void) {
	unsigned char x1 = 0x63;
	unsigned char x2 = FFMul(x1, 2);
	unsigned char x4 = FFMul(x2, 2);
	unsigned char x8 = FFMul(x4, 2);
	
	unsigned char x7_calc = FFMul(x1, 7);
	unsigned char x7_xor1 = FFMul(x1, 5) ^ FFMul(x1, 2);
	unsigned char x7_xor2 = FFMul(x1, 8) ^ FFMul(x1, 1);
	
	printf("x1 = %#4x\n", x1);
	printf("x2 = %#4x\n", x2);
	printf("x4 = %#4x\n", x4);
	printf("x8 = %#4x\n", x8);
	printf("\n");
	
	printf("x7 = %#4x (calc)\n", x7_calc);
	printf("x7 = %#4x (x5 + x2)\n", x7_xor1);
	printf("x7 = %#4x (x8 - x1)\n", x7_xor2);

	return 0;
}
