mirror of
https://github.com/open-develop/xenoborg.git
synced 2025-04-02 13:21:42 -04:00
41 lines
746 B
C
41 lines
746 B
C
#include <stdio.h>
|
|
#include <stdint.h>
|
|
#include "crc32.h"
|
|
|
|
/* CRC table */
|
|
uint32_t crc_table[256];
|
|
|
|
|
|
void crc_generate_tables()
|
|
{
|
|
uint16_t i, j;
|
|
uint32_t crc_accum;
|
|
|
|
for( i = 0; i < 256; i++ )
|
|
{
|
|
crc_accum = ( (uint32_t) i << 24 );
|
|
for( j = 0; j < 8; j++ )
|
|
{
|
|
if( crc_accum & 0x80000000 )
|
|
crc_accum = ( crc_accum << 1 ) ^ POLYNOMIAL;
|
|
else
|
|
crc_accum = ( crc_accum << 1 );
|
|
}
|
|
crc_table[i] = crc_accum;
|
|
}
|
|
}
|
|
|
|
uint32_t crc_update( uint32_t crc_accum, uint8_t* ptr, int size )
|
|
{
|
|
uint32_t i;
|
|
int j;
|
|
|
|
for( j = 0; j < size; j++ )
|
|
{
|
|
i = ((int) ( crc_accum >> 24 ) ^ *ptr++ ) & 0xFF;
|
|
crc_accum = ( crc_accum << 8 ) ^ crc_table[i];
|
|
}
|
|
crc_accum = ~crc_accum;
|
|
|
|
return crc_accum;
|
|
}
|