xref: /aosp_15_r20/external/lzma/C/Sha1.h (revision f6dc9357d832569d4d1f5d24eacdb3935a1ae8e6)
1*f6dc9357SAndroid Build Coastguard Worker /* Sha1.h -- SHA-1 Hash
2*f6dc9357SAndroid Build Coastguard Worker : Igor Pavlov : Public domain */
3*f6dc9357SAndroid Build Coastguard Worker 
4*f6dc9357SAndroid Build Coastguard Worker #ifndef ZIP7_INC_SHA1_H
5*f6dc9357SAndroid Build Coastguard Worker #define ZIP7_INC_SHA1_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 SHA1_NUM_BLOCK_WORDS  16
12*f6dc9357SAndroid Build Coastguard Worker #define SHA1_NUM_DIGEST_WORDS  5
13*f6dc9357SAndroid Build Coastguard Worker 
14*f6dc9357SAndroid Build Coastguard Worker #define SHA1_BLOCK_SIZE   (SHA1_NUM_BLOCK_WORDS * 4)
15*f6dc9357SAndroid Build Coastguard Worker #define SHA1_DIGEST_SIZE  (SHA1_NUM_DIGEST_WORDS * 4)
16*f6dc9357SAndroid Build Coastguard Worker 
17*f6dc9357SAndroid Build Coastguard Worker 
18*f6dc9357SAndroid Build Coastguard Worker 
19*f6dc9357SAndroid Build Coastguard Worker 
20*f6dc9357SAndroid Build Coastguard Worker typedef void (Z7_FASTCALL *SHA1_FUNC_UPDATE_BLOCKS)(UInt32 state[5], const Byte *data, size_t numBlocks);
21*f6dc9357SAndroid Build Coastguard Worker 
22*f6dc9357SAndroid Build Coastguard Worker /*
23*f6dc9357SAndroid Build Coastguard Worker   if (the system supports different SHA1 code implementations)
24*f6dc9357SAndroid Build Coastguard Worker   {
25*f6dc9357SAndroid Build Coastguard Worker     (CSha1::func_UpdateBlocks) will be used
26*f6dc9357SAndroid Build Coastguard Worker     (CSha1::func_UpdateBlocks) can be set by
27*f6dc9357SAndroid Build Coastguard Worker        Sha1_Init()        - to default (fastest)
28*f6dc9357SAndroid Build Coastguard Worker        Sha1_SetFunction() - to any algo
29*f6dc9357SAndroid Build Coastguard Worker   }
30*f6dc9357SAndroid Build Coastguard Worker   else
31*f6dc9357SAndroid Build Coastguard Worker   {
32*f6dc9357SAndroid Build Coastguard Worker     (CSha1::func_UpdateBlocks) is ignored.
33*f6dc9357SAndroid Build Coastguard Worker   }
34*f6dc9357SAndroid Build Coastguard Worker */
35*f6dc9357SAndroid Build Coastguard Worker 
36*f6dc9357SAndroid Build Coastguard Worker typedef struct
37*f6dc9357SAndroid Build Coastguard Worker {
38*f6dc9357SAndroid Build Coastguard Worker   union
39*f6dc9357SAndroid Build Coastguard Worker   {
40*f6dc9357SAndroid Build Coastguard Worker     struct
41*f6dc9357SAndroid Build Coastguard Worker     {
42*f6dc9357SAndroid Build Coastguard Worker       SHA1_FUNC_UPDATE_BLOCKS func_UpdateBlocks;
43*f6dc9357SAndroid Build Coastguard Worker       UInt64 count;
44*f6dc9357SAndroid Build Coastguard Worker     } vars;
45*f6dc9357SAndroid Build Coastguard Worker     UInt64 _pad_64bit[4];
46*f6dc9357SAndroid Build Coastguard Worker     void *_pad_align_ptr[2];
47*f6dc9357SAndroid Build Coastguard Worker   } v;
48*f6dc9357SAndroid Build Coastguard Worker   UInt32 state[SHA1_NUM_DIGEST_WORDS];
49*f6dc9357SAndroid Build Coastguard Worker   UInt32 _pad_3[3];
50*f6dc9357SAndroid Build Coastguard Worker   Byte buffer[SHA1_BLOCK_SIZE];
51*f6dc9357SAndroid Build Coastguard Worker } CSha1;
52*f6dc9357SAndroid Build Coastguard Worker 
53*f6dc9357SAndroid Build Coastguard Worker 
54*f6dc9357SAndroid Build Coastguard Worker #define SHA1_ALGO_DEFAULT 0
55*f6dc9357SAndroid Build Coastguard Worker #define SHA1_ALGO_SW      1
56*f6dc9357SAndroid Build Coastguard Worker #define SHA1_ALGO_HW      2
57*f6dc9357SAndroid Build Coastguard Worker 
58*f6dc9357SAndroid Build Coastguard Worker /*
59*f6dc9357SAndroid Build Coastguard Worker Sha1_SetFunction()
60*f6dc9357SAndroid Build Coastguard Worker return:
61*f6dc9357SAndroid Build Coastguard Worker   0 - (algo) value is not supported, and func_UpdateBlocks was not changed
62*f6dc9357SAndroid Build Coastguard Worker   1 - func_UpdateBlocks was set according (algo) value.
63*f6dc9357SAndroid Build Coastguard Worker */
64*f6dc9357SAndroid Build Coastguard Worker 
65*f6dc9357SAndroid Build Coastguard Worker BoolInt Sha1_SetFunction(CSha1 *p, unsigned algo);
66*f6dc9357SAndroid Build Coastguard Worker 
67*f6dc9357SAndroid Build Coastguard Worker void Sha1_InitState(CSha1 *p);
68*f6dc9357SAndroid Build Coastguard Worker void Sha1_Init(CSha1 *p);
69*f6dc9357SAndroid Build Coastguard Worker void Sha1_Update(CSha1 *p, const Byte *data, size_t size);
70*f6dc9357SAndroid Build Coastguard Worker void Sha1_Final(CSha1 *p, Byte *digest);
71*f6dc9357SAndroid Build Coastguard Worker 
72*f6dc9357SAndroid Build Coastguard Worker void Sha1_PrepareBlock(const CSha1 *p, Byte *block, unsigned size);
73*f6dc9357SAndroid Build Coastguard Worker void Sha1_GetBlockDigest(const CSha1 *p, const Byte *data, Byte *destDigest);
74*f6dc9357SAndroid Build Coastguard Worker 
75*f6dc9357SAndroid Build Coastguard Worker // void Z7_FASTCALL Sha1_UpdateBlocks(UInt32 state[5], const Byte *data, size_t numBlocks);
76*f6dc9357SAndroid Build Coastguard Worker 
77*f6dc9357SAndroid Build Coastguard Worker /*
78*f6dc9357SAndroid Build Coastguard Worker call Sha1Prepare() once at program start.
79*f6dc9357SAndroid Build Coastguard Worker It prepares all supported implementations, and detects the fastest implementation.
80*f6dc9357SAndroid Build Coastguard Worker */
81*f6dc9357SAndroid Build Coastguard Worker 
82*f6dc9357SAndroid Build Coastguard Worker void Sha1Prepare(void);
83*f6dc9357SAndroid Build Coastguard Worker 
84*f6dc9357SAndroid Build Coastguard Worker EXTERN_C_END
85*f6dc9357SAndroid Build Coastguard Worker 
86*f6dc9357SAndroid Build Coastguard Worker #endif
87