xref: /aosp_15_r20/external/lzma/C/Sha3.h (revision f6dc9357d832569d4d1f5d24eacdb3935a1ae8e6)
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