forked from KolibriOS/kolibrios
65 lines
1.2 KiB
C++
65 lines
1.2 KiB
C++
|
#include "kosSyst.h"
|
||
|
#include "CRC32.h"
|
||
|
|
||
|
|
||
|
|
||
|
CCRC32::CCRC32()
|
||
|
{
|
||
|
Dword i, mask, j, k;
|
||
|
|
||
|
for ( i=0xEDB8; i >= 0x8320; i-- )
|
||
|
{
|
||
|
mask = i;
|
||
|
for ( j=0; j<8; j++ )
|
||
|
{
|
||
|
k = mask;
|
||
|
mask >>= 1;
|
||
|
if ( k & 1 )
|
||
|
{
|
||
|
mask ^= 0xEDB88320;
|
||
|
}
|
||
|
this->table[i & 0xFF] = mask;
|
||
|
}
|
||
|
}
|
||
|
}
|
||
|
|
||
|
|
||
|
Dword CCRC32::InitCRC32()
|
||
|
{
|
||
|
return 0xFFFFFFFF;
|
||
|
}
|
||
|
|
||
|
|
||
|
Dword CCRC32::FinalizeCRC32(Dword d)
|
||
|
{
|
||
|
return ~d;
|
||
|
}
|
||
|
|
||
|
|
||
|
void CCRC32::DoCRC32(Byte *buffer, Dword length, Dword *CRC32value)
|
||
|
{
|
||
|
Dword result, i;
|
||
|
Byte mask;
|
||
|
|
||
|
result = *CRC32value;
|
||
|
|
||
|
for ( i=0; i<length; i++ )
|
||
|
{
|
||
|
mask = (Byte)( ( result ^ buffer[i] ) & 0xFF );
|
||
|
result = ( result >>= 8 ) ^ this->table[mask];
|
||
|
}
|
||
|
*CRC32value = result;
|
||
|
}
|
||
|
|
||
|
|
||
|
Dword CCRC32::GetCRC32(Byte *buffer, Dword length)
|
||
|
{
|
||
|
Dword result;
|
||
|
|
||
|
result = 0xFFFFFFFF;
|
||
|
|
||
|
this->DoCRC32( buffer, length, &result );
|
||
|
|
||
|
return ~result;
|
||
|
}
|