Book a Demo!
CoCalc Logo Icon
StoreFeaturesDocsShareSupportNewsAboutPoliciesSign UpSign In
stenzek
GitHub Repository: stenzek/duckstation
Path: blob/master/dep/lzma/include/Sha256.h
4253 views
1
/* Sha256.h -- SHA-256 Hash
2
2023-04-02 : Igor Pavlov : Public domain */
3
4
#ifndef ZIP7_INC_SHA256_H
5
#define ZIP7_INC_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 (Z7_FASTCALL *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 Z7_FASTCALL 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
77
78