rendered paste bodybool key_check (const unsigned char *key) {
unsigned long v = 3;
unsigned char i = 0;
while (i < 12)
v += key [i++] ^ v * 2;
return key [12] == v % 10;
}
inline unsigned char key_product (const unsigned char *key) {
return key [1];
}
unsigned long key_public (const unsigned char *key) {
unsigned char pub [8];
unsigned char i = 2, j = 0;
while (i < 10)
pub [j++] = key [i++];
return toint (pub, 8);
}
inline unsigned long key_private (const unsigned char *key) {
return toint (key + 10, 3);
}
void key_decode (const unsigned char *key, unsigned char *deckey) {
unsigned char seq [] = {6, 0, 2, 9, 3, 11, 1, 7, 5, 4, 10, 8};
unsigned char i = 11;
unsigned long v = 330078017;
do {
seq [i] = key [seq [i]];
if (seq [i] < 8) {
seq [i] ^= v & 7;
v >>= 3;
} else
seq [i] ^= i & 1;
deckey [i] = seq [i];
} while (i--);
}