xref: /aosp_15_r20/external/lzma/CPP/Common/CksumReg.cpp (revision f6dc9357d832569d4d1f5d24eacdb3935a1ae8e6)
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