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/Common/RegisterCodec.h" 11cd66d540cead3f8200b0c73bad9c276d67896c3dDavid Srbecky 12cd66d540cead3f8200b0c73bad9c276d67896c3dDavid Srbeckyclass CXzCrc64Hasher: 13cd66d540cead3f8200b0c73bad9c276d67896c3dDavid Srbecky public IHasher, 14cd66d540cead3f8200b0c73bad9c276d67896c3dDavid Srbecky public CMyUnknownImp 15cd66d540cead3f8200b0c73bad9c276d67896c3dDavid Srbecky{ 16cd66d540cead3f8200b0c73bad9c276d67896c3dDavid Srbecky UInt64 _crc; 17f955a79a9fffb09826cf7547f70d08c3798a2f50Tetsuo Osaka Byte mtDummy[1 << 7]; 18f955a79a9fffb09826cf7547f70d08c3798a2f50Tetsuo Osaka 19cd66d540cead3f8200b0c73bad9c276d67896c3dDavid Srbeckypublic: 20cd66d540cead3f8200b0c73bad9c276d67896c3dDavid Srbecky CXzCrc64Hasher(): _crc(CRC64_INIT_VAL) {} 21cd66d540cead3f8200b0c73bad9c276d67896c3dDavid Srbecky 22f955a79a9fffb09826cf7547f70d08c3798a2f50Tetsuo Osaka MY_UNKNOWN_IMP1(IHasher) 23f955a79a9fffb09826cf7547f70d08c3798a2f50Tetsuo Osaka INTERFACE_IHasher(;) 24cd66d540cead3f8200b0c73bad9c276d67896c3dDavid Srbecky}; 25cd66d540cead3f8200b0c73bad9c276d67896c3dDavid Srbecky 26f955a79a9fffb09826cf7547f70d08c3798a2f50Tetsuo OsakaSTDMETHODIMP_(void) CXzCrc64Hasher::Init() throw() 27cd66d540cead3f8200b0c73bad9c276d67896c3dDavid Srbecky{ 28cd66d540cead3f8200b0c73bad9c276d67896c3dDavid Srbecky _crc = CRC64_INIT_VAL; 29cd66d540cead3f8200b0c73bad9c276d67896c3dDavid Srbecky} 30cd66d540cead3f8200b0c73bad9c276d67896c3dDavid Srbecky 31f955a79a9fffb09826cf7547f70d08c3798a2f50Tetsuo OsakaSTDMETHODIMP_(void) CXzCrc64Hasher::Update(const void *data, UInt32 size) throw() 32cd66d540cead3f8200b0c73bad9c276d67896c3dDavid Srbecky{ 33cd66d540cead3f8200b0c73bad9c276d67896c3dDavid Srbecky _crc = Crc64Update(_crc, data, size); 34cd66d540cead3f8200b0c73bad9c276d67896c3dDavid Srbecky} 35cd66d540cead3f8200b0c73bad9c276d67896c3dDavid Srbecky 36f955a79a9fffb09826cf7547f70d08c3798a2f50Tetsuo OsakaSTDMETHODIMP_(void) CXzCrc64Hasher::Final(Byte *digest) throw() 37cd66d540cead3f8200b0c73bad9c276d67896c3dDavid Srbecky{ 38cd66d540cead3f8200b0c73bad9c276d67896c3dDavid Srbecky UInt64 val = CRC64_GET_DIGEST(_crc); 39cd66d540cead3f8200b0c73bad9c276d67896c3dDavid Srbecky SetUi64(digest, val); 40cd66d540cead3f8200b0c73bad9c276d67896c3dDavid Srbecky} 41cd66d540cead3f8200b0c73bad9c276d67896c3dDavid Srbecky 42f955a79a9fffb09826cf7547f70d08c3798a2f50Tetsuo OsakaREGISTER_HASHER(CXzCrc64Hasher, 0x4, "CRC64", 8) 43