1cd66d540cead3f8200b0c73bad9c276d67896c3dDavid Srbecky// HashCalc.h 2cd66d540cead3f8200b0c73bad9c276d67896c3dDavid Srbecky 3cd66d540cead3f8200b0c73bad9c276d67896c3dDavid Srbecky#ifndef __HASH_CALC_H 4cd66d540cead3f8200b0c73bad9c276d67896c3dDavid Srbecky#define __HASH_CALC_H 5cd66d540cead3f8200b0c73bad9c276d67896c3dDavid Srbecky 6cd66d540cead3f8200b0c73bad9c276d67896c3dDavid Srbecky#include "../../../Common/Wildcard.h" 7cd66d540cead3f8200b0c73bad9c276d67896c3dDavid Srbecky 8cd66d540cead3f8200b0c73bad9c276d67896c3dDavid Srbecky#include "../../Common/CreateCoder.h" 9cd66d540cead3f8200b0c73bad9c276d67896c3dDavid Srbecky#include "../../Common/MethodProps.h" 10cd66d540cead3f8200b0c73bad9c276d67896c3dDavid Srbecky 11cd66d540cead3f8200b0c73bad9c276d67896c3dDavid Srbecky#include "Property.h" 12cd66d540cead3f8200b0c73bad9c276d67896c3dDavid Srbecky 13cd66d540cead3f8200b0c73bad9c276d67896c3dDavid Srbeckyconst unsigned k_HashCalc_DigestSize_Max = 64; 14cd66d540cead3f8200b0c73bad9c276d67896c3dDavid Srbecky 15cd66d540cead3f8200b0c73bad9c276d67896c3dDavid Srbeckyconst unsigned k_HashCalc_NumGroups = 4; 16cd66d540cead3f8200b0c73bad9c276d67896c3dDavid Srbecky 17cd66d540cead3f8200b0c73bad9c276d67896c3dDavid Srbeckyenum 18cd66d540cead3f8200b0c73bad9c276d67896c3dDavid Srbecky{ 19cd66d540cead3f8200b0c73bad9c276d67896c3dDavid Srbecky k_HashCalc_Index_Current, 20cd66d540cead3f8200b0c73bad9c276d67896c3dDavid Srbecky k_HashCalc_Index_DataSum, 21cd66d540cead3f8200b0c73bad9c276d67896c3dDavid Srbecky k_HashCalc_Index_NamesSum, 22cd66d540cead3f8200b0c73bad9c276d67896c3dDavid Srbecky k_HashCalc_Index_StreamsSum 23cd66d540cead3f8200b0c73bad9c276d67896c3dDavid Srbecky}; 24cd66d540cead3f8200b0c73bad9c276d67896c3dDavid Srbecky 25cd66d540cead3f8200b0c73bad9c276d67896c3dDavid Srbeckystruct CHasherState 26cd66d540cead3f8200b0c73bad9c276d67896c3dDavid Srbecky{ 27cd66d540cead3f8200b0c73bad9c276d67896c3dDavid Srbecky CMyComPtr<IHasher> Hasher; 28cd66d540cead3f8200b0c73bad9c276d67896c3dDavid Srbecky UString Name; 29cd66d540cead3f8200b0c73bad9c276d67896c3dDavid Srbecky UInt32 DigestSize; 30cd66d540cead3f8200b0c73bad9c276d67896c3dDavid Srbecky Byte Digests[k_HashCalc_NumGroups][k_HashCalc_DigestSize_Max]; 31cd66d540cead3f8200b0c73bad9c276d67896c3dDavid Srbecky}; 32cd66d540cead3f8200b0c73bad9c276d67896c3dDavid Srbecky 33cd66d540cead3f8200b0c73bad9c276d67896c3dDavid Srbeckystruct IHashCalc 34cd66d540cead3f8200b0c73bad9c276d67896c3dDavid Srbecky{ 35cd66d540cead3f8200b0c73bad9c276d67896c3dDavid Srbecky virtual void InitForNewFile() = 0; 36cd66d540cead3f8200b0c73bad9c276d67896c3dDavid Srbecky virtual void Update(const void *data, UInt32 size) = 0; 37cd66d540cead3f8200b0c73bad9c276d67896c3dDavid Srbecky virtual void SetSize(UInt64 size) = 0; 38cd66d540cead3f8200b0c73bad9c276d67896c3dDavid Srbecky virtual void Final(bool isDir, bool isAltStream, const UString &path) = 0; 39cd66d540cead3f8200b0c73bad9c276d67896c3dDavid Srbecky}; 40cd66d540cead3f8200b0c73bad9c276d67896c3dDavid Srbecky 41cd66d540cead3f8200b0c73bad9c276d67896c3dDavid Srbeckystruct CHashBundle: public IHashCalc 42cd66d540cead3f8200b0c73bad9c276d67896c3dDavid Srbecky{ 43cd66d540cead3f8200b0c73bad9c276d67896c3dDavid Srbecky CObjectVector<CHasherState> Hashers; 44cd66d540cead3f8200b0c73bad9c276d67896c3dDavid Srbecky 45cd66d540cead3f8200b0c73bad9c276d67896c3dDavid Srbecky UInt64 NumFiles; 46cd66d540cead3f8200b0c73bad9c276d67896c3dDavid Srbecky UInt64 NumDirs; 47cd66d540cead3f8200b0c73bad9c276d67896c3dDavid Srbecky UInt64 NumAltStreams; 48cd66d540cead3f8200b0c73bad9c276d67896c3dDavid Srbecky UInt64 FilesSize; 49cd66d540cead3f8200b0c73bad9c276d67896c3dDavid Srbecky UInt64 AltStreamsSize; 50cd66d540cead3f8200b0c73bad9c276d67896c3dDavid Srbecky UInt64 NumErrors; 51cd66d540cead3f8200b0c73bad9c276d67896c3dDavid Srbecky 52cd66d540cead3f8200b0c73bad9c276d67896c3dDavid Srbecky UInt64 CurSize; 53cd66d540cead3f8200b0c73bad9c276d67896c3dDavid Srbecky 54cd66d540cead3f8200b0c73bad9c276d67896c3dDavid Srbecky HRESULT SetMethods(DECL_EXTERNAL_CODECS_LOC_VARS const UStringVector &methods); 55cd66d540cead3f8200b0c73bad9c276d67896c3dDavid Srbecky 56cd66d540cead3f8200b0c73bad9c276d67896c3dDavid Srbecky void Init() 57cd66d540cead3f8200b0c73bad9c276d67896c3dDavid Srbecky { 58cd66d540cead3f8200b0c73bad9c276d67896c3dDavid Srbecky NumFiles = NumDirs = NumAltStreams = FilesSize = AltStreamsSize = NumErrors = 0; 59cd66d540cead3f8200b0c73bad9c276d67896c3dDavid Srbecky } 60cd66d540cead3f8200b0c73bad9c276d67896c3dDavid Srbecky 61cd66d540cead3f8200b0c73bad9c276d67896c3dDavid Srbecky void InitForNewFile(); 62cd66d540cead3f8200b0c73bad9c276d67896c3dDavid Srbecky void Update(const void *data, UInt32 size); 63cd66d540cead3f8200b0c73bad9c276d67896c3dDavid Srbecky void SetSize(UInt64 size); 64cd66d540cead3f8200b0c73bad9c276d67896c3dDavid Srbecky void Final(bool isDir, bool isAltStream, const UString &path); 65cd66d540cead3f8200b0c73bad9c276d67896c3dDavid Srbecky}; 66cd66d540cead3f8200b0c73bad9c276d67896c3dDavid Srbecky 67cd66d540cead3f8200b0c73bad9c276d67896c3dDavid Srbecky#define INTERFACE_IHashCallbackUI(x) \ 68cd66d540cead3f8200b0c73bad9c276d67896c3dDavid Srbecky virtual HRESULT StartScanning() x; \ 69cd66d540cead3f8200b0c73bad9c276d67896c3dDavid Srbecky virtual HRESULT ScanProgress(UInt64 numFolders, UInt64 numFiles, UInt64 totalSize, const wchar_t *path, bool isDir) x; \ 70cd66d540cead3f8200b0c73bad9c276d67896c3dDavid Srbecky virtual HRESULT CanNotFindError(const wchar_t *name, DWORD systemError) x; \ 71cd66d540cead3f8200b0c73bad9c276d67896c3dDavid Srbecky virtual HRESULT FinishScanning() x; \ 72cd66d540cead3f8200b0c73bad9c276d67896c3dDavid Srbecky virtual HRESULT SetNumFiles(UInt64 numFiles) x; \ 73cd66d540cead3f8200b0c73bad9c276d67896c3dDavid Srbecky virtual HRESULT SetTotal(UInt64 size) x; \ 74cd66d540cead3f8200b0c73bad9c276d67896c3dDavid Srbecky virtual HRESULT SetCompleted(const UInt64 *completeValue) x; \ 75cd66d540cead3f8200b0c73bad9c276d67896c3dDavid Srbecky virtual HRESULT CheckBreak() x; \ 76cd66d540cead3f8200b0c73bad9c276d67896c3dDavid Srbecky virtual HRESULT BeforeFirstFile(const CHashBundle &hb) x; \ 77cd66d540cead3f8200b0c73bad9c276d67896c3dDavid Srbecky virtual HRESULT GetStream(const wchar_t *name, bool isFolder) x; \ 78cd66d540cead3f8200b0c73bad9c276d67896c3dDavid Srbecky virtual HRESULT OpenFileError(const wchar_t *name, DWORD systemError) x; \ 79cd66d540cead3f8200b0c73bad9c276d67896c3dDavid Srbecky virtual HRESULT SetOperationResult(UInt64 fileSize, const CHashBundle &hb, bool showHash) x; \ 80cd66d540cead3f8200b0c73bad9c276d67896c3dDavid Srbecky virtual HRESULT AfterLastFile(const CHashBundle &hb) x; \ 81cd66d540cead3f8200b0c73bad9c276d67896c3dDavid Srbecky 82cd66d540cead3f8200b0c73bad9c276d67896c3dDavid Srbeckystruct IHashCallbackUI 83cd66d540cead3f8200b0c73bad9c276d67896c3dDavid Srbecky{ 84cd66d540cead3f8200b0c73bad9c276d67896c3dDavid Srbecky INTERFACE_IHashCallbackUI(=0) 85cd66d540cead3f8200b0c73bad9c276d67896c3dDavid Srbecky}; 86cd66d540cead3f8200b0c73bad9c276d67896c3dDavid Srbecky 87cd66d540cead3f8200b0c73bad9c276d67896c3dDavid Srbeckystruct CHashOptions 88cd66d540cead3f8200b0c73bad9c276d67896c3dDavid Srbecky{ 89cd66d540cead3f8200b0c73bad9c276d67896c3dDavid Srbecky UStringVector Methods; 90cd66d540cead3f8200b0c73bad9c276d67896c3dDavid Srbecky bool OpenShareForWrite; 91cd66d540cead3f8200b0c73bad9c276d67896c3dDavid Srbecky bool StdInMode; 92cd66d540cead3f8200b0c73bad9c276d67896c3dDavid Srbecky bool AltStreamsMode; 93cd66d540cead3f8200b0c73bad9c276d67896c3dDavid Srbecky NWildcard::ECensorPathMode PathMode; 94cd66d540cead3f8200b0c73bad9c276d67896c3dDavid Srbecky 95cd66d540cead3f8200b0c73bad9c276d67896c3dDavid Srbecky CHashOptions(): StdInMode(false), OpenShareForWrite(false), AltStreamsMode(false), PathMode(NWildcard::k_RelatPath) {}; 96cd66d540cead3f8200b0c73bad9c276d67896c3dDavid Srbecky}; 97cd66d540cead3f8200b0c73bad9c276d67896c3dDavid Srbecky 98cd66d540cead3f8200b0c73bad9c276d67896c3dDavid SrbeckyHRESULT HashCalc( 99cd66d540cead3f8200b0c73bad9c276d67896c3dDavid Srbecky DECL_EXTERNAL_CODECS_LOC_VARS 100cd66d540cead3f8200b0c73bad9c276d67896c3dDavid Srbecky const NWildcard::CCensor &censor, 101cd66d540cead3f8200b0c73bad9c276d67896c3dDavid Srbecky const CHashOptions &options, 102cd66d540cead3f8200b0c73bad9c276d67896c3dDavid Srbecky UString &errorInfo, 103cd66d540cead3f8200b0c73bad9c276d67896c3dDavid Srbecky IHashCallbackUI *callback); 104cd66d540cead3f8200b0c73bad9c276d67896c3dDavid Srbecky 105cd66d540cead3f8200b0c73bad9c276d67896c3dDavid Srbeckyvoid AddHashHexToString(char *dest, const Byte *data, UInt32 size); 106cd66d540cead3f8200b0c73bad9c276d67896c3dDavid Srbecky 107cd66d540cead3f8200b0c73bad9c276d67896c3dDavid Srbecky#endif 108