• Home
  • Line#
  • Scopes#
  • Navigate#
  • Raw
  • Download
1 /* Sha1.h -- SHA-1 Hash
2 2023-04-02 : Igor Pavlov : Public domain */
3 
4 #ifndef ZIP7_INC_SHA1_H
5 #define ZIP7_INC_SHA1_H
6 
7 #include "7zTypes.h"
8 
9 EXTERN_C_BEGIN
10 
11 #define SHA1_NUM_BLOCK_WORDS  16
12 #define SHA1_NUM_DIGEST_WORDS  5
13 
14 #define SHA1_BLOCK_SIZE   (SHA1_NUM_BLOCK_WORDS * 4)
15 #define SHA1_DIGEST_SIZE  (SHA1_NUM_DIGEST_WORDS * 4)
16 
17 typedef void (Z7_FASTCALL *SHA1_FUNC_UPDATE_BLOCKS)(UInt32 state[5], const Byte *data, size_t numBlocks);
18 
19 /*
20   if (the system supports different SHA1 code implementations)
21   {
22     (CSha1::func_UpdateBlocks) will be used
23     (CSha1::func_UpdateBlocks) can be set by
24        Sha1_Init()        - to default (fastest)
25        Sha1_SetFunction() - to any algo
26   }
27   else
28   {
29     (CSha1::func_UpdateBlocks) is ignored.
30   }
31 */
32 
33 typedef struct
34 {
35   SHA1_FUNC_UPDATE_BLOCKS func_UpdateBlocks;
36   UInt64 count;
37   UInt64 _pad_2[2];
38   UInt32 state[SHA1_NUM_DIGEST_WORDS];
39   UInt32 _pad_3[3];
40   Byte buffer[SHA1_BLOCK_SIZE];
41 } CSha1;
42 
43 
44 #define SHA1_ALGO_DEFAULT 0
45 #define SHA1_ALGO_SW      1
46 #define SHA1_ALGO_HW      2
47 
48 /*
49 Sha1_SetFunction()
50 return:
51   0 - (algo) value is not supported, and func_UpdateBlocks was not changed
52   1 - func_UpdateBlocks was set according (algo) value.
53 */
54 
55 BoolInt Sha1_SetFunction(CSha1 *p, unsigned algo);
56 
57 void Sha1_InitState(CSha1 *p);
58 void Sha1_Init(CSha1 *p);
59 void Sha1_Update(CSha1 *p, const Byte *data, size_t size);
60 void Sha1_Final(CSha1 *p, Byte *digest);
61 
62 void Sha1_PrepareBlock(const CSha1 *p, Byte *block, unsigned size);
63 void Sha1_GetBlockDigest(const CSha1 *p, const Byte *data, Byte *destDigest);
64 
65 // void Z7_FASTCALL Sha1_UpdateBlocks(UInt32 state[5], const Byte *data, size_t numBlocks);
66 
67 /*
68 call Sha1Prepare() once at program start.
69 It prepares all supported implementations, and detects the fastest implementation.
70 */
71 
72 void Sha1Prepare(void);
73 
74 EXTERN_C_END
75 
76 #endif
77