From 0c4fc1e72770fc78d87891e5c031272fca59e409 Mon Sep 17 00:00:00 2001 From: zyp Date: Tue, 9 May 2006 20:33:27 +0000 Subject: [project @ zyp-20060509203327-c8c93b489da2ea46] [project @ 27] Multihash library rewrite complete. --- src/crc32.cpp | 73 +++++++++++++++++++++++++++++++++-------------------------- 1 file changed, 41 insertions(+), 32 deletions(-) (limited to 'src/crc32.cpp') diff --git a/src/crc32.cpp b/src/crc32.cpp index 55d6dd2..6623166 100644 --- a/src/crc32.cpp +++ b/src/crc32.cpp @@ -1,41 +1,50 @@ #include "crc32.h" -int* CRC32::crc_table; - -int* CRC32::generate_table() { - int crc; - int* table = new int[256]; - for(int i = 0; i < 256; i++) { - crc = i << 24; - for(int j = 0; j < 8; j++) { - if(crc & 0x80000000) { - crc = (crc << 1) ^ 0x04c11db7; - } else { - crc = crc << 1; +namespace Multihash { + int* crc_table = 0; + + void generate_table() { + int crc; + crc_table = new int[256]; + for(int i = 0; i < 256; i++) { + crc = i << 24; + for(int j = 0; j < 8; j++) { + if(crc & 0x80000000) { + crc = (crc << 1) ^ 0x04c11db7; + } else { + crc = crc << 1; + } } + crc_table[i] = crc; } - table[i] = crc; } - return table; -} - -int CRC32::reflect(int data, int bits) { - int x = 0; - for(int i = 0; i < bits; i++) { - x = x << 1; - x |= data & 1; - data = data >> 1; + + int reflect(int data, int bits) { + int x = 0; + for(int i = 0; i < bits; i++) { + x = x << 1; + x |= data & 1; + data = data >> 1; + } + return x; } - return x; -} - -int CRC32::crc32(int crc, const char* data, int length) { - crc = ~reflect(crc, 32); - if(!crc_table) { - crc_table = generate_table(); + + CRC32::CRC32(Hash* n) : Hash(n) { + if(!crc_table) { + generate_table(); + } + crc_ctx = 0; + } + + void CRC32::hash_update(const char* data, int length) { + int crc = ~reflect(crc_ctx, 32); + for (int i = 0; i < length; i++) { + crc = (crc << 8) ^ crc_table[((crc >> 24) ^ reflect(data[i], 8)) & 0xff]; + } + crc_ctx = ~reflect(crc, 32); } - for (int i = 0; i < length; i++) { - crc = (crc << 8) ^ crc_table[((crc >> 24) ^ reflect(data[i], 8)) & 0xff]; + + std::string CRC32::hash_digest() { + return Hex::hex(crc_ctx); } - return ~reflect(crc, 32); } -- cgit v1.2.3