#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("x7 = %#4x (calc)\n", x7_calc
); printf("x7 = %#4x (x5 + x2)\n", x7_xor1
); printf("x7 = %#4x (x8 - x1)\n", x7_xor2
);
return 0;
}
I2luY2x1ZGUgPHN0ZGlvLmg+Cgp1bnNpZ25lZCBjaGFyIEZGTXVsKHVuc2lnbmVkIGNoYXIgYSwgdW5zaWduZWQgY2hhciBiKSB7CiAgIHVuc2lnbmVkIGNoYXIgYWEgPSBhLCBiYiA9IGIsIHIgPSAwLCB0OwogICB3aGlsZSAoYWEgIT0gMCkgewogICAgICBpZiAoKGFhICYgMSkgIT0gMCkKICAgICAgICAgciA9IHIgXiBiYjsKICAgICAgdCA9IGJiICYgMHg4MDsKICAgICAgYmIgPSBiYiA8PCAxOwogICAgICBpZiAodCAhPSAwKQogICAgICAgICBiYiA9IGJiIF4gMHgxYjsKICAgICAgYWEgPSBhYSA+PiAxOyAKICAgfQogICByZXR1cm4gcjsKfQoKaW50IG1haW4odm9pZCkgewoJdW5zaWduZWQgY2hhciB4MSA9IDB4NjM7Cgl1bnNpZ25lZCBjaGFyIHgyID0gRkZNdWwoeDEsIDIpOwoJdW5zaWduZWQgY2hhciB4NCA9IEZGTXVsKHgyLCAyKTsKCXVuc2lnbmVkIGNoYXIgeDggPSBGRk11bCh4NCwgMik7CgkKCXVuc2lnbmVkIGNoYXIgeDdfY2FsYyA9IEZGTXVsKHgxLCA3KTsKCXVuc2lnbmVkIGNoYXIgeDdfeG9yMSA9IEZGTXVsKHgxLCA1KSBeIEZGTXVsKHgxLCAyKTsKCXVuc2lnbmVkIGNoYXIgeDdfeG9yMiA9IEZGTXVsKHgxLCA4KSBeIEZGTXVsKHgxLCAxKTsKCQoJcHJpbnRmKCJ4MSA9ICUjNHhcbiIsIHgxKTsKCXByaW50ZigieDIgPSAlIzR4XG4iLCB4Mik7CglwcmludGYoIng0ID0gJSM0eFxuIiwgeDQpOwoJcHJpbnRmKCJ4OCA9ICUjNHhcbiIsIHg4KTsKCXByaW50ZigiXG4iKTsKCQoJcHJpbnRmKCJ4NyA9ICUjNHggKGNhbGMpXG4iLCB4N19jYWxjKTsKCXByaW50ZigieDcgPSAlIzR4ICh4NSArIHgyKVxuIiwgeDdfeG9yMSk7CglwcmludGYoIng3ID0gJSM0eCAoeDggLSB4MSlcbiIsIHg3X3hvcjIpOwoKCXJldHVybiAwOwp9Cg==