#pragma once #include class FdskCalculator { public: int snprintFdsk(char* str, int strSize, uint8_t* serialNumber, uint8_t* key); private: char* generateFdskString(uint8_t* serialNumber, uint8_t* key); int toBase32(uint8_t* in, long length, uint8_t*& out, bool usePadding); int fromBase32(uint8_t* in, long length, uint8_t*& out); uint8_t crc4Array(uint8_t* data, uint8_t len) { uint8_t start = 0; for (uint8_t i = 0; i < len; i++) { start = crc4(start, data[i]); } return start; } uint8_t crc4(uint8_t c, uint8_t x) { uint8_t low4Bits = x & 0x0F; uint8_t high4Bits = x >> 4; c = crc4_tab[c ^ high4Bits]; c = crc4_tab[c ^ low4Bits]; return c; } int ceil(float num); static const uint8_t crc4_tab[16]; };