Can someone help find the key?
Code:
/*
* poly.c crackme january 2020
* dilabox at gmail dot com
*/
#include <stdint.h>
#include <stdio.h>
uint64_t poly(uint64_t a, uint64_t b) {
uint64_t r = 0;
while (b) {
r ^= a & -(b & 1);
uint64_t m = -((a >> 63) & 1);
a <<= 1;
a ^= m & 0x307fdb4d20abf247;
b >>= 1;
}
return r;
}
uint64_t encrypt(uint64_t data, uint64_t key) {
data ^= key;
uint64_t out = 1;
for (int i = 0; i < 64; ++i) {
if ((0x61e261e161e261e2 >> i) & 1) {
out = poly(out, data);
}
data = poly(data, data);
}
out ^= key;
return out;
}
uint64_t decrypt(uint64_t data, uint64_t key) {
return encrypt(data, key);
}
int main() {
uint64_t key = 0;
scanf("%lx", &key);
if (encrypt(0xe9eec16478534a39, key) == 0xf3201dcbbeefe53a) {
printf("GOOD\n");
} else {
printf("BAD\n");
}
return 0;
}