1*f6dc9357SAndroid Build Coastguard Worker // CksumReg.cpp 2*f6dc9357SAndroid Build Coastguard Worker 3*f6dc9357SAndroid Build Coastguard Worker #include "StdAfx.h" 4*f6dc9357SAndroid Build Coastguard Worker 5*f6dc9357SAndroid Build Coastguard Worker #include "../../C/CpuArch.h" 6*f6dc9357SAndroid Build Coastguard Worker 7*f6dc9357SAndroid Build Coastguard Worker #include "../Common/MyCom.h" 8*f6dc9357SAndroid Build Coastguard Worker 9*f6dc9357SAndroid Build Coastguard Worker #include "../7zip/Common/RegisterCodec.h" 10*f6dc9357SAndroid Build Coastguard Worker #include "../7zip/Compress/BZip2Crc.h" 11*f6dc9357SAndroid Build Coastguard Worker 12*f6dc9357SAndroid Build Coastguard Worker Z7_CLASS_IMP_COM_1( 13*f6dc9357SAndroid Build Coastguard Worker CCksumHasher 14*f6dc9357SAndroid Build Coastguard Worker , IHasher 15*f6dc9357SAndroid Build Coastguard Worker ) 16*f6dc9357SAndroid Build Coastguard Worker CBZip2Crc _crc; 17*f6dc9357SAndroid Build Coastguard Worker UInt64 _size; 18*f6dc9357SAndroid Build Coastguard Worker public: 19*f6dc9357SAndroid Build Coastguard Worker // Byte _mtDummy[1 << 7]; 20*f6dc9357SAndroid Build Coastguard Worker CCksumHasher() 21*f6dc9357SAndroid Build Coastguard Worker { 22*f6dc9357SAndroid Build Coastguard Worker _crc.Init(0); 23*f6dc9357SAndroid Build Coastguard Worker _size = 0; 24*f6dc9357SAndroid Build Coastguard Worker } 25*f6dc9357SAndroid Build Coastguard Worker }; 26*f6dc9357SAndroid Build Coastguard Worker 27*f6dc9357SAndroid Build Coastguard Worker Z7_COM7F_IMF2(void, CCksumHasher::Init()) 28*f6dc9357SAndroid Build Coastguard Worker { 29*f6dc9357SAndroid Build Coastguard Worker _crc.Init(0); 30*f6dc9357SAndroid Build Coastguard Worker _size = 0; 31*f6dc9357SAndroid Build Coastguard Worker } 32*f6dc9357SAndroid Build Coastguard Worker 33*f6dc9357SAndroid Build Coastguard Worker Z7_COM7F_IMF2(void, CCksumHasher::Update(const void *data, UInt32 size)) 34*f6dc9357SAndroid Build Coastguard Worker { 35*f6dc9357SAndroid Build Coastguard Worker _size += size; 36*f6dc9357SAndroid Build Coastguard Worker CBZip2Crc crc = _crc; 37*f6dc9357SAndroid Build Coastguard Worker for (UInt32 i = 0; i < size; i++) 38*f6dc9357SAndroid Build Coastguard Worker crc.UpdateByte(((const Byte *)data)[i]); 39*f6dc9357SAndroid Build Coastguard Worker _crc = crc; 40*f6dc9357SAndroid Build Coastguard Worker } 41*f6dc9357SAndroid Build Coastguard Worker 42*f6dc9357SAndroid Build Coastguard Worker Z7_COM7F_IMF2(void, CCksumHasher::Final(Byte *digest)) 43*f6dc9357SAndroid Build Coastguard Worker { 44*f6dc9357SAndroid Build Coastguard Worker UInt64 size = _size; 45*f6dc9357SAndroid Build Coastguard Worker CBZip2Crc crc = _crc; 46*f6dc9357SAndroid Build Coastguard Worker while (size) 47*f6dc9357SAndroid Build Coastguard Worker { 48*f6dc9357SAndroid Build Coastguard Worker crc.UpdateByte((Byte)size); 49*f6dc9357SAndroid Build Coastguard Worker size >>= 8; 50*f6dc9357SAndroid Build Coastguard Worker } 51*f6dc9357SAndroid Build Coastguard Worker const UInt32 val = crc.GetDigest(); 52*f6dc9357SAndroid Build Coastguard Worker SetUi32(digest, val) 53*f6dc9357SAndroid Build Coastguard Worker } 54*f6dc9357SAndroid Build Coastguard Worker 55*f6dc9357SAndroid Build Coastguard Worker REGISTER_HASHER(CCksumHasher, 0x203, "CKSUM", 4) 56