diff --git a/CRCLib.h b/CRCLib.h new file mode 100644 index 0000000..39530ff --- /dev/null +++ b/CRCLib.h @@ -0,0 +1,51 @@ +/* Table of CRCs of all 8-bit messages. */ +unsigned long crc_table[256]; + +/* Flag: has the table been computed? Initially false. */ +int crc_table_computed = 0; + +/* Make the table for a fast CRC. */ +void make_crc_table(void) +{ + unsigned long c; + int n, k; + + for (n = 0; n < 256; n++) { + c = (unsigned long) n; + for (k = 0; k < 8; k++) { + if (c & 1) + c = 0xedb88320L ^ (c >> 1); + else + c = c >> 1; + } + crc_table[n] = c; + } + crc_table_computed = 1; +} + + +/* Update a running CRC with the bytes buf[0..len-1]--the CRC + should be initialized to all 1's, and the transmitted value + is the 1's complement of the final running CRC (see the + crc() routine below). */ + +unsigned long update_crc(unsigned long crc, unsigned char *buf, + int len) +{ + unsigned long c = crc; + int n; + + if (!crc_table_computed) + make_crc_table(); + for (n = 0; n < len; n++) { + c = crc_table[(c ^ buf[n]) & 0xff] ^ (c >> 8); + } + return c; +} + +/* Return the CRC of the bytes buf[0..len-1]. */ +unsigned long crc(unsigned char *buf, int len) +{ + return update_crc(0xffffffffL, buf, len) ^ 0xffffffffL; +} + diff --git a/crc.c b/crc.c new file mode 100644 index 0000000..06a74be --- /dev/null +++ b/crc.c @@ -0,0 +1,37 @@ +#include +#include +#include +#include "CRCLib.h" + +int png_signature[8] = { 0x89, 0x50, 0x4e, 0x47, 0x0d, 0x0a, 0x1a, 0x0a }; +//int idat_signature[4] = { 0x, 0x, 0x, 0x} + +int CheckPNG(int *addr) { + int signature_match = 0; + for( int i = 0; i < 8; i++ ) { + if (addr[i] != png_signature[i]) { + signature_match = 1; + } + } + printf("%d", signature_match); + return signature_match; + +} + +void main() { + FILE *fp; + int c; + int myArray[255] = {}; + int i = 0; + fp = fopen("./1.png", "rt"); + while((c = fgetc(fp)) != EOF) { + //printf("Value: %X\n", c); + myArray[i] = c; + i++; + } + fclose(fp); + CheckPNG(myArray); + //printf("%d\n", CheckPNG(myArray)); + //int crcnum = crc(myArray, 19); + //printf("%08X\n", crcnum); +}