Book a Demo!
CoCalc Logo Icon
StoreFeaturesDocsShareSupportNewsAboutPoliciesSign UpSign In
sudo-project
GitHub Repository: sudo-project/sudo
Path: blob/main/include/compat/sha2.h
1532 views
1
/*
2
* SPDX-License-Identifier: ISC
3
*
4
* Copyright (c) 2013-2015 Todd C. Miller <[email protected]>
5
*
6
* Permission to use, copy, modify, and distribute this software for any
7
* purpose with or without fee is hereby granted, provided that the above
8
* copyright notice and this permission notice appear in all copies.
9
*
10
* THE SOFTWARE IS PROVIDED "AS IS" AND THE AUTHOR DISCLAIMS ALL WARRANTIES
11
* WITH REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF
12
* MERCHANTABILITY AND FITNESS. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR
13
* ANY SPECIAL, DIRECT, INDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES
14
* WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS, WHETHER IN AN
15
* ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, ARISING OUT OF
16
* OR IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE.
17
*/
18
19
/*
20
* Derived from the public domain SHA-1 and SHA-2 implementations
21
* by Steve Reid and Wei Dai respectively.
22
*/
23
24
#ifndef COMPAT_SHA2_H
25
#define COMPAT_SHA2_H
26
27
#define SHA224_BLOCK_LENGTH 64
28
#define SHA224_DIGEST_LENGTH 28
29
#define SHA224_DIGEST_STRING_LENGTH (SHA224_DIGEST_LENGTH * 2 + 1)
30
31
#define SHA256_BLOCK_LENGTH 64
32
#define SHA256_DIGEST_LENGTH 32
33
#define SHA256_DIGEST_STRING_LENGTH (SHA256_DIGEST_LENGTH * 2 + 1)
34
35
#define SHA384_BLOCK_LENGTH 128
36
#define SHA384_DIGEST_LENGTH 48
37
#define SHA384_DIGEST_STRING_LENGTH (SHA384_DIGEST_LENGTH * 2 + 1)
38
39
#define SHA512_BLOCK_LENGTH 128
40
#define SHA512_DIGEST_LENGTH 64
41
#define SHA512_DIGEST_STRING_LENGTH (SHA512_DIGEST_LENGTH * 2 + 1)
42
43
typedef struct {
44
union {
45
uint32_t st32[8]; /* sha224 and sha256 */
46
uint64_t st64[8]; /* sha384 and sha512 */
47
} state;
48
uint64_t count[2];
49
uint8_t buffer[SHA512_BLOCK_LENGTH];
50
} SHA2_CTX;
51
52
sudo_dso_public void sudo_SHA224Init(SHA2_CTX *ctx);
53
sudo_dso_public void sudo_SHA224Pad(SHA2_CTX *ctx);
54
sudo_dso_public void sudo_SHA224Transform(uint32_t state[8], const uint8_t buffer[SHA224_BLOCK_LENGTH]);
55
sudo_dso_public void sudo_SHA224Update(SHA2_CTX *ctx, const uint8_t *data, size_t len);
56
sudo_dso_public void sudo_SHA224Final(uint8_t digest[SHA224_DIGEST_LENGTH], SHA2_CTX *ctx);
57
58
#define SHA224Init sudo_SHA224Init
59
#define SHA224Pad sudo_SHA224Pad
60
#define SHA224Transform sudo_SHA224Transform
61
#define SHA224Update sudo_SHA224Update
62
#define SHA224Final sudo_SHA224Final
63
64
sudo_dso_public void sudo_SHA256Init(SHA2_CTX *ctx);
65
sudo_dso_public void sudo_SHA256Pad(SHA2_CTX *ctx);
66
sudo_dso_public void sudo_SHA256Transform(uint32_t state[8], const uint8_t buffer[SHA256_BLOCK_LENGTH]);
67
sudo_dso_public void sudo_SHA256Update(SHA2_CTX *ctx, const uint8_t *data, size_t len);
68
sudo_dso_public void sudo_SHA256Final(uint8_t digest[SHA256_DIGEST_LENGTH], SHA2_CTX *ctx);
69
70
#define SHA256Init sudo_SHA256Init
71
#define SHA256Pad sudo_SHA256Pad
72
#define SHA256Transform sudo_SHA256Transform
73
#define SHA256Update sudo_SHA256Update
74
#define SHA256Final sudo_SHA256Final
75
76
sudo_dso_public void sudo_SHA384Init(SHA2_CTX *ctx);
77
sudo_dso_public void sudo_SHA384Pad(SHA2_CTX *ctx);
78
sudo_dso_public void sudo_SHA384Transform(uint64_t state[8], const uint8_t buffer[SHA384_BLOCK_LENGTH]);
79
sudo_dso_public void sudo_SHA384Update(SHA2_CTX *ctx, const uint8_t *data, size_t len);
80
sudo_dso_public void sudo_SHA384Final(uint8_t digest[SHA384_DIGEST_LENGTH], SHA2_CTX *ctx);
81
82
#define SHA384Init sudo_SHA384Init
83
#define SHA384Pad sudo_SHA384Pad
84
#define SHA384Transform sudo_SHA384Transform
85
#define SHA384Update sudo_SHA384Update
86
#define SHA384Final sudo_SHA384Final
87
88
sudo_dso_public void sudo_SHA512Init(SHA2_CTX *ctx);
89
sudo_dso_public void sudo_SHA512Pad(SHA2_CTX *ctx);
90
sudo_dso_public void sudo_SHA512Transform(uint64_t state[8], const uint8_t buffer[SHA512_BLOCK_LENGTH]);
91
sudo_dso_public void sudo_SHA512Update(SHA2_CTX *ctx, const uint8_t *data, size_t len);
92
sudo_dso_public void sudo_SHA512Final(uint8_t digest[SHA512_DIGEST_LENGTH], SHA2_CTX *ctx);
93
94
#define SHA512Init sudo_SHA512Init
95
#define SHA512Pad sudo_SHA512Pad
96
#define SHA512Transform sudo_SHA512Transform
97
#define SHA512Update sudo_SHA512Update
98
#define SHA512Final sudo_SHA512Final
99
100
#endif /* COMPAT_SHA2_H */
101
102