1cd66d540cead3f8200b0c73bad9c276d67896c3dDavid Srbecky// XzCrc64Reg.cpp 2cd66d540cead3f8200b0c73bad9c276d67896c3dDavid Srbecky 3cd66d540cead3f8200b0c73bad9c276d67896c3dDavid Srbecky#include "StdAfx.h" 4cd66d540cead3f8200b0c73bad9c276d67896c3dDavid Srbecky 5cd66d540cead3f8200b0c73bad9c276d67896c3dDavid Srbecky#include "../../C/CpuArch.h" 6cd66d540cead3f8200b0c73bad9c276d67896c3dDavid Srbecky#include "../../C/XzCrc64.h" 7cd66d540cead3f8200b0c73bad9c276d67896c3dDavid Srbecky 8cd66d540cead3f8200b0c73bad9c276d67896c3dDavid Srbecky#include "../Common/MyCom.h" 9cd66d540cead3f8200b0c73bad9c276d67896c3dDavid Srbecky 10cd66d540cead3f8200b0c73bad9c276d67896c3dDavid Srbecky#include "../7zip/ICoder.h" 11cd66d540cead3f8200b0c73bad9c276d67896c3dDavid Srbecky#include "../7zip/Common/RegisterCodec.h" 12cd66d540cead3f8200b0c73bad9c276d67896c3dDavid Srbecky 13cd66d540cead3f8200b0c73bad9c276d67896c3dDavid Srbeckyclass CXzCrc64Hasher: 14cd66d540cead3f8200b0c73bad9c276d67896c3dDavid Srbecky public IHasher, 15cd66d540cead3f8200b0c73bad9c276d67896c3dDavid Srbecky public CMyUnknownImp 16cd66d540cead3f8200b0c73bad9c276d67896c3dDavid Srbecky{ 17cd66d540cead3f8200b0c73bad9c276d67896c3dDavid Srbecky UInt64 _crc; 18cd66d540cead3f8200b0c73bad9c276d67896c3dDavid Srbeckypublic: 19cd66d540cead3f8200b0c73bad9c276d67896c3dDavid Srbecky CXzCrc64Hasher(): _crc(CRC64_INIT_VAL) {} 20cd66d540cead3f8200b0c73bad9c276d67896c3dDavid Srbecky 21cd66d540cead3f8200b0c73bad9c276d67896c3dDavid Srbecky MY_UNKNOWN_IMP 22cd66d540cead3f8200b0c73bad9c276d67896c3dDavid Srbecky 23cd66d540cead3f8200b0c73bad9c276d67896c3dDavid Srbecky STDMETHOD_(void, Init)(); 24cd66d540cead3f8200b0c73bad9c276d67896c3dDavid Srbecky STDMETHOD_(void, Update)(const void *data, UInt32 size); 25cd66d540cead3f8200b0c73bad9c276d67896c3dDavid Srbecky STDMETHOD_(void, Final)(Byte *digest); 26cd66d540cead3f8200b0c73bad9c276d67896c3dDavid Srbecky STDMETHOD_(UInt32, GetDigestSize)(); 27cd66d540cead3f8200b0c73bad9c276d67896c3dDavid Srbecky}; 28cd66d540cead3f8200b0c73bad9c276d67896c3dDavid Srbecky 29cd66d540cead3f8200b0c73bad9c276d67896c3dDavid SrbeckySTDMETHODIMP_(void) CXzCrc64Hasher::Init() 30cd66d540cead3f8200b0c73bad9c276d67896c3dDavid Srbecky{ 31cd66d540cead3f8200b0c73bad9c276d67896c3dDavid Srbecky _crc = CRC64_INIT_VAL; 32cd66d540cead3f8200b0c73bad9c276d67896c3dDavid Srbecky} 33cd66d540cead3f8200b0c73bad9c276d67896c3dDavid Srbecky 34cd66d540cead3f8200b0c73bad9c276d67896c3dDavid SrbeckySTDMETHODIMP_(void) CXzCrc64Hasher::Update(const void *data, UInt32 size) 35cd66d540cead3f8200b0c73bad9c276d67896c3dDavid Srbecky{ 36cd66d540cead3f8200b0c73bad9c276d67896c3dDavid Srbecky _crc = Crc64Update(_crc, data, size); 37cd66d540cead3f8200b0c73bad9c276d67896c3dDavid Srbecky} 38cd66d540cead3f8200b0c73bad9c276d67896c3dDavid Srbecky 39cd66d540cead3f8200b0c73bad9c276d67896c3dDavid SrbeckySTDMETHODIMP_(void) CXzCrc64Hasher::Final(Byte *digest) 40cd66d540cead3f8200b0c73bad9c276d67896c3dDavid Srbecky{ 41cd66d540cead3f8200b0c73bad9c276d67896c3dDavid Srbecky UInt64 val = CRC64_GET_DIGEST(_crc); 42cd66d540cead3f8200b0c73bad9c276d67896c3dDavid Srbecky SetUi64(digest, val); 43cd66d540cead3f8200b0c73bad9c276d67896c3dDavid Srbecky} 44cd66d540cead3f8200b0c73bad9c276d67896c3dDavid Srbecky 45cd66d540cead3f8200b0c73bad9c276d67896c3dDavid SrbeckySTDMETHODIMP_(UInt32) CXzCrc64Hasher::GetDigestSize() 46cd66d540cead3f8200b0c73bad9c276d67896c3dDavid Srbecky{ 47cd66d540cead3f8200b0c73bad9c276d67896c3dDavid Srbecky return 8; 48cd66d540cead3f8200b0c73bad9c276d67896c3dDavid Srbecky} 49cd66d540cead3f8200b0c73bad9c276d67896c3dDavid Srbecky 50cd66d540cead3f8200b0c73bad9c276d67896c3dDavid Srbeckystatic IHasher *CreateHasher() { return new CXzCrc64Hasher; } 51cd66d540cead3f8200b0c73bad9c276d67896c3dDavid Srbecky 52cd66d540cead3f8200b0c73bad9c276d67896c3dDavid Srbeckystatic CHasherInfo g_HasherInfo = { CreateHasher, 0x4, L"CRC64", 8 }; 53cd66d540cead3f8200b0c73bad9c276d67896c3dDavid Srbecky 54cd66d540cead3f8200b0c73bad9c276d67896c3dDavid SrbeckyREGISTER_HASHER(Crc64) 55