diff options
author | Igor Pavlov <87184205+ip7z@users.noreply.github.com> | 2021-12-27 00:00:00 +0000 |
---|---|---|
committer | Igor Pavlov <87184205+ip7z@users.noreply.github.com> | 2022-03-18 15:35:13 +0500 |
commit | f19f813537c7aea1c20749c914e756b54a9c3cf5 (patch) | |
tree | 816ba62ca7c0fa19f2eb46d9e9d6f7dd7c3a744d /C/Sha256.h | |
parent | 98e06a519b63b81986abe76d28887f6984a7732b (diff) | |
download | 7zip-f19f813537c7aea1c20749c914e756b54a9c3cf5.tar.gz 7zip-f19f813537c7aea1c20749c914e756b54a9c3cf5.tar.bz2 7zip-f19f813537c7aea1c20749c914e756b54a9c3cf5.zip |
'21.07'21.07
Diffstat (limited to 'C/Sha256.h')
-rw-r--r-- | C/Sha256.h | 76 |
1 files changed, 76 insertions, 0 deletions
diff --git a/C/Sha256.h b/C/Sha256.h new file mode 100644 index 0000000..aa38501 --- /dev/null +++ b/C/Sha256.h | |||
@@ -0,0 +1,76 @@ | |||
1 | /* Sha256.h -- SHA-256 Hash | ||
2 | 2021-01-01 : Igor Pavlov : Public domain */ | ||
3 | |||
4 | #ifndef __7Z_SHA256_H | ||
5 | #define __7Z_SHA256_H | ||
6 | |||
7 | #include "7zTypes.h" | ||
8 | |||
9 | EXTERN_C_BEGIN | ||
10 | |||
11 | #define SHA256_NUM_BLOCK_WORDS 16 | ||
12 | #define SHA256_NUM_DIGEST_WORDS 8 | ||
13 | |||
14 | #define SHA256_BLOCK_SIZE (SHA256_NUM_BLOCK_WORDS * 4) | ||
15 | #define SHA256_DIGEST_SIZE (SHA256_NUM_DIGEST_WORDS * 4) | ||
16 | |||
17 | typedef void (MY_FAST_CALL *SHA256_FUNC_UPDATE_BLOCKS)(UInt32 state[8], const Byte *data, size_t numBlocks); | ||
18 | |||
19 | /* | ||
20 | if (the system supports different SHA256 code implementations) | ||
21 | { | ||
22 | (CSha256::func_UpdateBlocks) will be used | ||
23 | (CSha256::func_UpdateBlocks) can be set by | ||
24 | Sha256_Init() - to default (fastest) | ||
25 | Sha256_SetFunction() - to any algo | ||
26 | } | ||
27 | else | ||
28 | { | ||
29 | (CSha256::func_UpdateBlocks) is ignored. | ||
30 | } | ||
31 | */ | ||
32 | |||
33 | typedef struct | ||
34 | { | ||
35 | SHA256_FUNC_UPDATE_BLOCKS func_UpdateBlocks; | ||
36 | UInt64 count; | ||
37 | UInt64 __pad_2[2]; | ||
38 | UInt32 state[SHA256_NUM_DIGEST_WORDS]; | ||
39 | |||
40 | Byte buffer[SHA256_BLOCK_SIZE]; | ||
41 | } CSha256; | ||
42 | |||
43 | |||
44 | #define SHA256_ALGO_DEFAULT 0 | ||
45 | #define SHA256_ALGO_SW 1 | ||
46 | #define SHA256_ALGO_HW 2 | ||
47 | |||
48 | /* | ||
49 | Sha256_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 Sha256_SetFunction(CSha256 *p, unsigned algo); | ||
56 | |||
57 | void Sha256_InitState(CSha256 *p); | ||
58 | void Sha256_Init(CSha256 *p); | ||
59 | void Sha256_Update(CSha256 *p, const Byte *data, size_t size); | ||
60 | void Sha256_Final(CSha256 *p, Byte *digest); | ||
61 | |||
62 | |||
63 | |||
64 | |||
65 | // void MY_FAST_CALL Sha256_UpdateBlocks(UInt32 state[8], const Byte *data, size_t numBlocks); | ||
66 | |||
67 | /* | ||
68 | call Sha256Prepare() once at program start. | ||
69 | It prepares all supported implementations, and detects the fastest implementation. | ||
70 | */ | ||
71 | |||
72 | void Sha256Prepare(void); | ||
73 | |||
74 | EXTERN_C_END | ||
75 | |||
76 | #endif | ||