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