1*f6dc9357SAndroid Build Coastguard Worker /* Xxh64.h -- XXH64 hash calculation interfaces 2*f6dc9357SAndroid Build Coastguard Worker 2023-08-18 : Igor Pavlov : Public domain */ 3*f6dc9357SAndroid Build Coastguard Worker 4*f6dc9357SAndroid Build Coastguard Worker #ifndef ZIP7_INC_XXH64_H 5*f6dc9357SAndroid Build Coastguard Worker #define ZIP7_INC_XXH64_H 6*f6dc9357SAndroid Build Coastguard Worker 7*f6dc9357SAndroid Build Coastguard Worker #include "7zTypes.h" 8*f6dc9357SAndroid Build Coastguard Worker 9*f6dc9357SAndroid Build Coastguard Worker EXTERN_C_BEGIN 10*f6dc9357SAndroid Build Coastguard Worker 11*f6dc9357SAndroid Build Coastguard Worker #define Z7_XXH64_BLOCK_SIZE (4 * 8) 12*f6dc9357SAndroid Build Coastguard Worker 13*f6dc9357SAndroid Build Coastguard Worker typedef struct 14*f6dc9357SAndroid Build Coastguard Worker { 15*f6dc9357SAndroid Build Coastguard Worker UInt64 v[4]; 16*f6dc9357SAndroid Build Coastguard Worker } CXxh64State; 17*f6dc9357SAndroid Build Coastguard Worker 18*f6dc9357SAndroid Build Coastguard Worker void Xxh64State_Init(CXxh64State *p); 19*f6dc9357SAndroid Build Coastguard Worker 20*f6dc9357SAndroid Build Coastguard Worker // end != data && end == data + Z7_XXH64_BLOCK_SIZE * numBlocks 21*f6dc9357SAndroid Build Coastguard Worker void Z7_FASTCALL Xxh64State_UpdateBlocks(CXxh64State *p, const void *data, const void *end); 22*f6dc9357SAndroid Build Coastguard Worker 23*f6dc9357SAndroid Build Coastguard Worker /* 24*f6dc9357SAndroid Build Coastguard Worker Xxh64State_Digest(): 25*f6dc9357SAndroid Build Coastguard Worker data: 26*f6dc9357SAndroid Build Coastguard Worker the function processes only 27*f6dc9357SAndroid Build Coastguard Worker (totalCount & (Z7_XXH64_BLOCK_SIZE - 1)) bytes in (data): (smaller than 32 bytes). 28*f6dc9357SAndroid Build Coastguard Worker totalCount: total size of hashed stream: 29*f6dc9357SAndroid Build Coastguard Worker it includes total size of data processed by previous Xxh64State_UpdateBlocks() calls, 30*f6dc9357SAndroid Build Coastguard Worker and it also includes current processed size in (data). 31*f6dc9357SAndroid Build Coastguard Worker */ 32*f6dc9357SAndroid Build Coastguard Worker UInt64 Xxh64State_Digest(const CXxh64State *p, const void *data, UInt64 totalCount); 33*f6dc9357SAndroid Build Coastguard Worker 34*f6dc9357SAndroid Build Coastguard Worker 35*f6dc9357SAndroid Build Coastguard Worker typedef struct 36*f6dc9357SAndroid Build Coastguard Worker { 37*f6dc9357SAndroid Build Coastguard Worker CXxh64State state; 38*f6dc9357SAndroid Build Coastguard Worker UInt64 count; 39*f6dc9357SAndroid Build Coastguard Worker UInt64 buf64[4]; 40*f6dc9357SAndroid Build Coastguard Worker } CXxh64; 41*f6dc9357SAndroid Build Coastguard Worker 42*f6dc9357SAndroid Build Coastguard Worker void Xxh64_Init(CXxh64 *p); 43*f6dc9357SAndroid Build Coastguard Worker void Xxh64_Update(CXxh64 *p, const void *data, size_t size); 44*f6dc9357SAndroid Build Coastguard Worker 45*f6dc9357SAndroid Build Coastguard Worker #define Xxh64_Digest(p) \ 46*f6dc9357SAndroid Build Coastguard Worker Xxh64State_Digest(&(p)->state, (p)->buf64, (p)->count) 47*f6dc9357SAndroid Build Coastguard Worker 48*f6dc9357SAndroid Build Coastguard Worker EXTERN_C_END 49*f6dc9357SAndroid Build Coastguard Worker 50*f6dc9357SAndroid Build Coastguard Worker #endif 51