rendered paste bodybool key_check (const u8 *key) {
u32 v = 3;
u8 i = 0;
while (i < 12)
v += key [i++] ^ v * 2;
return key [12] == v % 10;
}
inline u8 key_product (const u8 *key) {
return key [1];
}
u32 key_public (const u8 *key) {
u8 pub [8];
u8 i = 2, j = 0;
while (i < 10)
pub [j++] = key [i++];
return toint (pub, 8);
}
inline u32 key_private (const u8 *key) {
return toint (key + 10, 3);
}
void key_decode (const u8 *key, u8 *deckey) {
u8 seq [] = {6, 0, 2, 9, 3, 11, 1, 7, 5, 4, 10, 8};
u8 i = 11;
u32 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--);
}