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