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