From f3e040230772f978540a71aea43dfde200992922 Mon Sep 17 00:00:00 2001 From: "John Wilbert M. Villamor" Date: Sat, 6 Apr 2019 10:11:07 +0800 Subject: First commit --- libpsn00b/lzp/crc.c | 91 +++++++++++++++++++++++++++++++++++++++++++++++++++++ 1 file changed, 91 insertions(+) create mode 100644 libpsn00b/lzp/crc.c (limited to 'libpsn00b/lzp/crc.c') diff --git a/libpsn00b/lzp/crc.c b/libpsn00b/lzp/crc.c new file mode 100644 index 0000000..c5ab702 --- /dev/null +++ b/libpsn00b/lzp/crc.c @@ -0,0 +1,91 @@ +#include "lzp.h" + +void initTable16(unsigned short* table) { + + int i, j; + unsigned short crc, c; + + for (i=0; i<256; i++) { + + crc = 0; + c = (unsigned short) i; + + for (j=0; j<8; j++) { + + if ( (crc ^ c) & 0x0001 ) + crc = ( crc >> 1 ) ^ 0xA001; + else + crc = crc >> 1; + + c = c >> 1; + } + + table[i] = crc; + } + +} + +void initTable32(unsigned int* table) { + + int i,j; + unsigned int crcVal; + + for(i=0; i<256; i++) { + + crcVal = i; + + for(j=0; j<8; j++) { + + if (crcVal&0x00000001L) + crcVal = (crcVal>>1)^0xEDB88320L; + else + crcVal = crcVal>>1; + + } + + table[i] = crcVal; + + } + +} + +unsigned short lzCRC16(void* buff, int bytes, unsigned short crc) { + + int i; + unsigned short tmp, short_c; + unsigned short crcTable[256]; + + initTable16(crcTable); + + for(i=0; i> 8) ^ crcTable[tmp&0xff]; + + } + + return(crc); + +} + +unsigned int lzCRC32(void* buff, int bytes, unsigned int crc) { + + int i; + unsigned char* byteBuff = (unsigned char*)buff; + unsigned int byte; + unsigned int crcTable[256]; + + initTable32(crcTable); + + for(i=0; i>8)^crcTable[(crc^byte)&0xff]; + + } + + return(crc^0xFFFFFFFF); + +} -- cgit v1.2.3