/******************************************************************************* * INCLUDED FILES ******************************************************************************/ #include "crc32.h" /******************************************************************************* * CONSTRUCTOR, DESTRUCTOR ******************************************************************************/ void crc32_ctor(struct S_Crc32 *me) { me->crc = 0xffffffff; } void crc32_dtor(struct S_Crc32 *me) { //-- nothing to do here } /******************************************************************************* * PUBLIC METHODS ******************************************************************************/ /** * Feed next byte to crc32 */ void crc32_byte_feed(struct S_Crc32 *me, uint8_t byte) { static const uint32_t _crc32_table[16] = { 0x00000000, 0x1db71064, 0x3b6e20c8, 0x26d930ac, 0x76dc4190, 0x6b6b51f4, 0x4db26158, 0x5005713c, 0xedb88320, 0xf00f9344, 0xd6d6a3e8, 0xcb61b38c, 0x9b64c2b0, 0x86d3d2d4, 0xa00ae278, 0xbdbdf21c, }; me->crc ^= byte; me->crc = _crc32_table[me->crc & 0x0f] ^ (me->crc >> 4); me->crc = _crc32_table[me->crc & 0x0f] ^ (me->crc >> 4); } /** * Get current crc32 value */ uint32_t crc32_value_get(const struct S_Crc32 *me) { return me->crc ^ 0xffffffff; }