1*f6dc9357SAndroid Build Coastguard Worker /* Sha3.h -- SHA-3 Hash 2*f6dc9357SAndroid Build Coastguard Worker : Igor Pavlov : Public domain */ 3*f6dc9357SAndroid Build Coastguard Worker 4*f6dc9357SAndroid Build Coastguard Worker #ifndef ZIP7_INC_MD5_H 5*f6dc9357SAndroid Build Coastguard Worker #define ZIP7_INC_MD5_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 SHA3_NUM_STATE_WORDS 25 12*f6dc9357SAndroid Build Coastguard Worker 13*f6dc9357SAndroid Build Coastguard Worker #define SHA3_BLOCK_SIZE_FROM_DIGEST_SIZE(digestSize) \ 14*f6dc9357SAndroid Build Coastguard Worker (SHA3_NUM_STATE_WORDS * 8 - (digestSize) * 2) 15*f6dc9357SAndroid Build Coastguard Worker 16*f6dc9357SAndroid Build Coastguard Worker typedef struct 17*f6dc9357SAndroid Build Coastguard Worker { 18*f6dc9357SAndroid Build Coastguard Worker UInt32 count; // < blockSize 19*f6dc9357SAndroid Build Coastguard Worker UInt32 blockSize; // <= SHA3_NUM_STATE_WORDS * 8 20*f6dc9357SAndroid Build Coastguard Worker UInt64 _pad1[3]; 21*f6dc9357SAndroid Build Coastguard Worker // we want 32-bytes alignment here 22*f6dc9357SAndroid Build Coastguard Worker UInt64 state[SHA3_NUM_STATE_WORDS]; 23*f6dc9357SAndroid Build Coastguard Worker UInt64 _pad2[3]; 24*f6dc9357SAndroid Build Coastguard Worker // we want 64-bytes alignment here 25*f6dc9357SAndroid Build Coastguard Worker Byte buffer[SHA3_NUM_STATE_WORDS * 8]; // last bytes will be unused with predefined blockSize values 26*f6dc9357SAndroid Build Coastguard Worker } CSha3; 27*f6dc9357SAndroid Build Coastguard Worker 28*f6dc9357SAndroid Build Coastguard Worker #define Sha3_SET_blockSize(p, blockSize) { (p)->blockSize = (blockSize); } 29*f6dc9357SAndroid Build Coastguard Worker 30*f6dc9357SAndroid Build Coastguard Worker void Sha3_Init(CSha3 *p); 31*f6dc9357SAndroid Build Coastguard Worker void Sha3_Update(CSha3 *p, const Byte *data, size_t size); 32*f6dc9357SAndroid Build Coastguard Worker void Sha3_Final(CSha3 *p, Byte *digest, unsigned digestSize, unsigned shake); 33*f6dc9357SAndroid Build Coastguard Worker 34*f6dc9357SAndroid Build Coastguard Worker EXTERN_C_END 35*f6dc9357SAndroid Build Coastguard Worker 36*f6dc9357SAndroid Build Coastguard Worker #endif 37