1 #![allow(dead_code, clippy::unreadable_literal)]
2 
3 pub const STATE_LEN: usize = 8;
4 pub const BLOCK_LEN: usize = 16;
5 
6 /// Constants necessary for SHA-256 family of digests.
7 pub const K32: [u32; 64] = [
8     0x428a2f98, 0x71374491, 0xb5c0fbcf, 0xe9b5dba5, 0x3956c25b, 0x59f111f1, 0x923f82a4, 0xab1c5ed5,
9     0xd807aa98, 0x12835b01, 0x243185be, 0x550c7dc3, 0x72be5d74, 0x80deb1fe, 0x9bdc06a7, 0xc19bf174,
10     0xe49b69c1, 0xefbe4786, 0x0fc19dc6, 0x240ca1cc, 0x2de92c6f, 0x4a7484aa, 0x5cb0a9dc, 0x76f988da,
11     0x983e5152, 0xa831c66d, 0xb00327c8, 0xbf597fc7, 0xc6e00bf3, 0xd5a79147, 0x06ca6351, 0x14292967,
12     0x27b70a85, 0x2e1b2138, 0x4d2c6dfc, 0x53380d13, 0x650a7354, 0x766a0abb, 0x81c2c92e, 0x92722c85,
13     0xa2bfe8a1, 0xa81a664b, 0xc24b8b70, 0xc76c51a3, 0xd192e819, 0xd6990624, 0xf40e3585, 0x106aa070,
14     0x19a4c116, 0x1e376c08, 0x2748774c, 0x34b0bcb5, 0x391c0cb3, 0x4ed8aa4a, 0x5b9cca4f, 0x682e6ff3,
15     0x748f82ee, 0x78a5636f, 0x84c87814, 0x8cc70208, 0x90befffa, 0xa4506ceb, 0xbef9a3f7, 0xc67178f2,
16 ];
17 
18 /// Constants necessary for SHA-256 family of digests.
19 pub const K32X4: [[u32; 4]; 16] = [
20     [K32[3], K32[2], K32[1], K32[0]],
21     [K32[7], K32[6], K32[5], K32[4]],
22     [K32[11], K32[10], K32[9], K32[8]],
23     [K32[15], K32[14], K32[13], K32[12]],
24     [K32[19], K32[18], K32[17], K32[16]],
25     [K32[23], K32[22], K32[21], K32[20]],
26     [K32[27], K32[26], K32[25], K32[24]],
27     [K32[31], K32[30], K32[29], K32[28]],
28     [K32[35], K32[34], K32[33], K32[32]],
29     [K32[39], K32[38], K32[37], K32[36]],
30     [K32[43], K32[42], K32[41], K32[40]],
31     [K32[47], K32[46], K32[45], K32[44]],
32     [K32[51], K32[50], K32[49], K32[48]],
33     [K32[55], K32[54], K32[53], K32[52]],
34     [K32[59], K32[58], K32[57], K32[56]],
35     [K32[63], K32[62], K32[61], K32[60]],
36 ];
37 
38 /// Constants necessary for SHA-512 family of digests.
39 pub const K64: [u64; 80] = [
40     0x428a2f98d728ae22,
41     0x7137449123ef65cd,
42     0xb5c0fbcfec4d3b2f,
43     0xe9b5dba58189dbbc,
44     0x3956c25bf348b538,
45     0x59f111f1b605d019,
46     0x923f82a4af194f9b,
47     0xab1c5ed5da6d8118,
48     0xd807aa98a3030242,
49     0x12835b0145706fbe,
50     0x243185be4ee4b28c,
51     0x550c7dc3d5ffb4e2,
52     0x72be5d74f27b896f,
53     0x80deb1fe3b1696b1,
54     0x9bdc06a725c71235,
55     0xc19bf174cf692694,
56     0xe49b69c19ef14ad2,
57     0xefbe4786384f25e3,
58     0x0fc19dc68b8cd5b5,
59     0x240ca1cc77ac9c65,
60     0x2de92c6f592b0275,
61     0x4a7484aa6ea6e483,
62     0x5cb0a9dcbd41fbd4,
63     0x76f988da831153b5,
64     0x983e5152ee66dfab,
65     0xa831c66d2db43210,
66     0xb00327c898fb213f,
67     0xbf597fc7beef0ee4,
68     0xc6e00bf33da88fc2,
69     0xd5a79147930aa725,
70     0x06ca6351e003826f,
71     0x142929670a0e6e70,
72     0x27b70a8546d22ffc,
73     0x2e1b21385c26c926,
74     0x4d2c6dfc5ac42aed,
75     0x53380d139d95b3df,
76     0x650a73548baf63de,
77     0x766a0abb3c77b2a8,
78     0x81c2c92e47edaee6,
79     0x92722c851482353b,
80     0xa2bfe8a14cf10364,
81     0xa81a664bbc423001,
82     0xc24b8b70d0f89791,
83     0xc76c51a30654be30,
84     0xd192e819d6ef5218,
85     0xd69906245565a910,
86     0xf40e35855771202a,
87     0x106aa07032bbd1b8,
88     0x19a4c116b8d2d0c8,
89     0x1e376c085141ab53,
90     0x2748774cdf8eeb99,
91     0x34b0bcb5e19b48a8,
92     0x391c0cb3c5c95a63,
93     0x4ed8aa4ae3418acb,
94     0x5b9cca4f7763e373,
95     0x682e6ff3d6b2b8a3,
96     0x748f82ee5defb2fc,
97     0x78a5636f43172f60,
98     0x84c87814a1f0ab72,
99     0x8cc702081a6439ec,
100     0x90befffa23631e28,
101     0xa4506cebde82bde9,
102     0xbef9a3f7b2c67915,
103     0xc67178f2e372532b,
104     0xca273eceea26619c,
105     0xd186b8c721c0c207,
106     0xeada7dd6cde0eb1e,
107     0xf57d4f7fee6ed178,
108     0x06f067aa72176fba,
109     0x0a637dc5a2c898a6,
110     0x113f9804bef90dae,
111     0x1b710b35131c471b,
112     0x28db77f523047d84,
113     0x32caab7b40c72493,
114     0x3c9ebe0a15c9bebc,
115     0x431d67c49c100d4c,
116     0x4cc5d4becb3e42b6,
117     0x597f299cfc657e2a,
118     0x5fcb6fab3ad6faec,
119     0x6c44198c4a475817,
120 ];
121 
122 /// Constants necessary for SHA-512 family of digests.
123 pub const K64X2: [[u64; 2]; 40] = [
124     [K64[1], K64[0]],
125     [K64[3], K64[2]],
126     [K64[5], K64[4]],
127     [K64[7], K64[6]],
128     [K64[9], K64[8]],
129     [K64[11], K64[10]],
130     [K64[13], K64[12]],
131     [K64[15], K64[14]],
132     [K64[17], K64[16]],
133     [K64[19], K64[18]],
134     [K64[21], K64[20]],
135     [K64[23], K64[22]],
136     [K64[25], K64[24]],
137     [K64[27], K64[26]],
138     [K64[29], K64[28]],
139     [K64[31], K64[30]],
140     [K64[33], K64[32]],
141     [K64[35], K64[34]],
142     [K64[37], K64[36]],
143     [K64[39], K64[38]],
144     [K64[41], K64[40]],
145     [K64[43], K64[42]],
146     [K64[45], K64[44]],
147     [K64[47], K64[46]],
148     [K64[49], K64[48]],
149     [K64[51], K64[50]],
150     [K64[53], K64[52]],
151     [K64[55], K64[54]],
152     [K64[57], K64[56]],
153     [K64[59], K64[58]],
154     [K64[61], K64[60]],
155     [K64[63], K64[62]],
156     [K64[65], K64[64]],
157     [K64[67], K64[66]],
158     [K64[69], K64[68]],
159     [K64[71], K64[70]],
160     [K64[73], K64[72]],
161     [K64[75], K64[74]],
162     [K64[77], K64[76]],
163     [K64[79], K64[78]],
164 ];
165 
166 pub static H224: [u32; STATE_LEN] = [
167     0xc1059ed8, 0x367cd507, 0x3070dd17, 0xf70e5939, 0xffc00b31, 0x68581511, 0x64f98fa7, 0xbefa4fa4,
168 ];
169 
170 pub static H256: [u32; STATE_LEN] = [
171     0x6a09e667, 0xbb67ae85, 0x3c6ef372, 0xa54ff53a, 0x510e527f, 0x9b05688c, 0x1f83d9ab, 0x5be0cd19,
172 ];
173 
174 pub static H384: [u64; STATE_LEN] = [
175     0xcbbb9d5dc1059ed8,
176     0x629a292a367cd507,
177     0x9159015a3070dd17,
178     0x152fecd8f70e5939,
179     0x67332667ffc00b31,
180     0x8eb44a8768581511,
181     0xdb0c2e0d64f98fa7,
182     0x47b5481dbefa4fa4,
183 ];
184 
185 pub static H512: [u64; STATE_LEN] = [
186     0x6a09e667f3bcc908,
187     0xbb67ae8584caa73b,
188     0x3c6ef372fe94f82b,
189     0xa54ff53a5f1d36f1,
190     0x510e527fade682d1,
191     0x9b05688c2b3e6c1f,
192     0x1f83d9abfb41bd6b,
193     0x5be0cd19137e2179,
194 ];
195 
196 pub static H512_TRUNC_224: [u64; STATE_LEN] = [
197     0x8c3d37c819544da2,
198     0x73e1996689dcd4d6,
199     0x1dfab7ae32ff9c82,
200     0x679dd514582f9fcf,
201     0x0f6d2b697bd44da8,
202     0x77e36f7304c48942,
203     0x3f9d85a86a1d36c8,
204     0x1112e6ad91d692a1,
205 ];
206 
207 pub static H512_TRUNC_256: [u64; STATE_LEN] = [
208     0x22312194fc2bf72c,
209     0x9f555fa3c84c64c2,
210     0x2393b86b6f53b151,
211     0x963877195940eabd,
212     0x96283ee2a88effe3,
213     0xbe5e1e2553863992,
214     0x2b0199fc2c85b8aa,
215     0x0eb72ddc81c52ca2,
216 ];
217