void pack (u16 number, u8 size, u8 *buf, u8 *pos) { while (size--) { buf [(*pos)++] = number % 256; number /= 256; } } u32 toint (const u8 *ls, u8 size) { u8 i = 0; u32 n = 0; while (i < size) n = (n * 10) + ls [i++]; return n; } bool key_check (const u8 *ls) { u32 v = 3; u8 i = 0; while (i < 12) v += ls [i++] ^ v * 2; return ls [12] == v % 10; } inline u8 key_product (const u8 *ls) { return ls [1]; } u32 key_public (const u8 *ls) { u8 pub [7]; u8 i = 2, j = 0; while (i < 9) pub [j++] = ls [i++]; return toint (pub, 7); } inline u32 key_private (const u8 *ls) { return toint (ls + 10, 3); }