aboutsummaryrefslogtreecommitdiff
path: root/C/Sha256.h
diff options
context:
space:
mode:
authorIgor Pavlov <87184205+ip7z@users.noreply.github.com>2021-12-27 00:00:00 +0000
committerIgor Pavlov <87184205+ip7z@users.noreply.github.com>2022-03-18 15:35:13 +0500
commitf19f813537c7aea1c20749c914e756b54a9c3cf5 (patch)
tree816ba62ca7c0fa19f2eb46d9e9d6f7dd7c3a744d /C/Sha256.h
parent98e06a519b63b81986abe76d28887f6984a7732b (diff)
download7zip-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.h76
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
22021-01-01 : Igor Pavlov : Public domain */
3
4#ifndef __7Z_SHA256_H
5#define __7Z_SHA256_H
6
7#include "7zTypes.h"
8
9EXTERN_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
17typedef 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
33typedef 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/*
49Sha256_SetFunction()
50return:
51 0 - (algo) value is not supported, and func_UpdateBlocks was not changed
52 1 - func_UpdateBlocks was set according (algo) value.
53*/
54
55BoolInt Sha256_SetFunction(CSha256 *p, unsigned algo);
56
57void Sha256_InitState(CSha256 *p);
58void Sha256_Init(CSha256 *p);
59void Sha256_Update(CSha256 *p, const Byte *data, size_t size);
60void 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/*
68call Sha256Prepare() once at program start.
69It prepares all supported implementations, and detects the fastest implementation.
70*/
71
72void Sha256Prepare(void);
73
74EXTERN_C_END
75
76#endif