]>
Commit | Line | Data |
---|---|---|
28dc98e3 JK |
1 | /*** |
2 | * Copyright 2017 Marc Stevens <marc@marc-stevens.nl>, Dan Shumow (danshu@microsoft.com) | |
3 | * Distributed under the MIT Software License. | |
4 | * See accompanying file LICENSE.txt or copy at | |
5 | * https://opensource.org/licenses/MIT | |
6 | ***/ | |
7 | ||
a0103914 ÆAB |
8 | #ifndef SHA1DC_NO_STANDARD_INCLUDES |
9 | #include <string.h> | |
10 | #include <memory.h> | |
11 | #include <stdio.h> | |
12 | #include <stdlib.h> | |
9936c1b5 ÆAB |
13 | #ifdef __unix__ |
14 | #include <sys/types.h> /* make sure macros like _BIG_ENDIAN visible */ | |
15 | #endif | |
a0103914 ÆAB |
16 | #endif |
17 | ||
18 | #ifdef SHA1DC_CUSTOM_INCLUDE_SHA1_C | |
19 | #include SHA1DC_CUSTOM_INCLUDE_SHA1_C | |
20 | #endif | |
21 | ||
22 | #ifndef SHA1DC_INIT_SAFE_HASH_DEFAULT | |
23 | #define SHA1DC_INIT_SAFE_HASH_DEFAULT 1 | |
24 | #endif | |
25 | ||
26 | #include "sha1.h" | |
27 | #include "ubc_check.h" | |
28dc98e3 | 28 | |
9936c1b5 ÆAB |
29 | #if (defined(__amd64__) || defined(__amd64) || defined(__x86_64__) || defined(__x86_64) || \ |
30 | defined(i386) || defined(__i386) || defined(__i386__) || defined(__i486__) || \ | |
31 | defined(__i586__) || defined(__i686__) || defined(_M_IX86) || defined(__X86__) || \ | |
32 | defined(_X86_) || defined(__THW_INTEL__) || defined(__I86__) || defined(__INTEL__) || \ | |
33 | defined(__386) || defined(_M_X64) || defined(_M_AMD64)) | |
34 | #define SHA1DC_ON_INTEL_LIKE_PROCESSOR | |
35 | #endif | |
28dc98e3 JK |
36 | |
37 | /* | |
38 | Because Little-Endian architectures are most common, | |
7e71542e | 39 | we only set SHA1DC_BIGENDIAN if one of these conditions is met. |
28dc98e3 JK |
40 | Note that all MSFT platforms are little endian, |
41 | so none of these will be defined under the MSC compiler. | |
42 | If you are compiling on a big endian platform and your compiler does not define one of these, | |
43 | you will have to add whatever macros your tool chain defines to indicate Big-Endianness. | |
44 | */ | |
a0103914 | 45 | |
9936c1b5 ÆAB |
46 | #if defined(__BYTE_ORDER__) && defined(__ORDER_BIG_ENDIAN__) |
47 | /* | |
48 | * Should detect Big Endian under GCC since at least 4.6.0 (gcc svn | |
49 | * rev #165881). See | |
50 | * https://gcc.gnu.org/onlinedocs/cpp/Common-Predefined-Macros.html | |
51 | * | |
52 | * This also works under clang since 3.2, it copied the GCC-ism. See | |
53 | * clang.git's 3b198a97d2 ("Preprocessor: add __BYTE_ORDER__ | |
54 | * predefined macro", 2012-07-27) | |
55 | */ | |
56 | #if __BYTE_ORDER__ == __ORDER_BIG_ENDIAN__ | |
6b851e53 ÆAB |
57 | #define SHA1DC_BIGENDIAN |
58 | #endif | |
59 | ||
9936c1b5 ÆAB |
60 | /* Not under GCC-alike */ |
61 | #elif defined(__BYTE_ORDER) && defined(__BIG_ENDIAN) | |
62 | /* | |
63 | * Should detect Big Endian under glibc.git since 14245eb70e ("entered | |
64 | * into RCS", 1992-11-25). Defined in <endian.h> which will have been | |
65 | * brought in by standard headers. See glibc.git and | |
66 | * https://sourceforge.net/p/predef/wiki/Endianness/ | |
67 | */ | |
68 | #if __BYTE_ORDER == __BIG_ENDIAN | |
a0103914 | 69 | #define SHA1DC_BIGENDIAN |
6b851e53 | 70 | #endif |
28dc98e3 | 71 | |
9936c1b5 ÆAB |
72 | /* Not under GCC-alike or glibc */ |
73 | #elif defined(_BYTE_ORDER) && defined(_BIG_ENDIAN) && defined(_LITTLE_ENDIAN) | |
74 | /* | |
75 | * *BSD and newlib (embeded linux, cygwin, etc). | |
76 | * the defined(_BIG_ENDIAN) && defined(_LITTLE_ENDIAN) part prevents | |
77 | * this condition from matching with Solaris/sparc. | |
78 | * (Solaris defines only one endian macro) | |
79 | */ | |
80 | #if _BYTE_ORDER == _BIG_ENDIAN | |
81 | #define SHA1DC_BIGENDIAN | |
6b851e53 ÆAB |
82 | #endif |
83 | ||
9936c1b5 ÆAB |
84 | /* Not under GCC-alike or glibc or *BSD or newlib */ |
85 | #elif (defined(__ARMEB__) || defined(__THUMBEB__) || defined(__AARCH64EB__) || \ | |
86 | defined(__MIPSEB__) || defined(__MIPSEB) || defined(_MIPSEB) || \ | |
87 | defined(__sparc)) | |
88 | /* | |
89 | * Should define Big Endian for a whitelist of known processors. See | |
90 | * https://sourceforge.net/p/predef/wiki/Endianness/ and | |
91 | * http://www.oracle.com/technetwork/server-storage/solaris/portingtosolaris-138514.html | |
92 | */ | |
93 | #define SHA1DC_BIGENDIAN | |
94 | ||
95 | /* Not under GCC-alike or glibc or *BSD or newlib or <processor whitelist> */ | |
23e37f8e ÆAB |
96 | #elif (defined(_AIX)) |
97 | ||
98 | /* | |
99 | * Defines Big Endian on a whitelist of OSs that are known to be Big | |
100 | * Endian-only. See | |
101 | * https://public-inbox.org/git/93056823-2740-d072-1ebd-46b440b33d7e@felt.demon.nl/ | |
102 | */ | |
103 | #define SHA1DC_BIGENDIAN | |
104 | ||
105 | /* Not under GCC-alike or glibc or *BSD or newlib or <processor whitelist> or <os whitelist> */ | |
9936c1b5 ÆAB |
106 | #elif defined(SHA1DC_ON_INTEL_LIKE_PROCESSOR) |
107 | /* | |
108 | * As a last resort before we do anything else we're not 100% sure | |
109 | * about below, we blacklist specific processors here. We could add | |
110 | * more, see e.g. https://wiki.debian.org/ArchitectureSpecificsMemo | |
111 | */ | |
23e37f8e | 112 | #else /* Not under GCC-alike or glibc or *BSD or newlib or <processor whitelist> or <os whitelist> or <processor blacklist> */ |
9936c1b5 ÆAB |
113 | |
114 | /* We do nothing more here for now */ | |
115 | /*#error "Uncomment this to see if you fall through all the detection"*/ | |
116 | ||
117 | #endif /* Big Endian detection */ | |
118 | ||
6b851e53 ÆAB |
119 | #if (defined(SHA1DC_FORCE_LITTLEENDIAN) && defined(SHA1DC_BIGENDIAN)) |
120 | #undef SHA1DC_BIGENDIAN | |
121 | #endif | |
122 | #if (defined(SHA1DC_FORCE_BIGENDIAN) && !defined(SHA1DC_BIGENDIAN)) | |
123 | #define SHA1DC_BIGENDIAN | |
124 | #endif | |
125 | /*ENDIANNESS SELECTION*/ | |
28dc98e3 | 126 | |
9936c1b5 | 127 | #if defined(SHA1DC_FORCE_UNALIGNED_ACCESS) || defined(SHA1DC_ON_INTEL_LIKE_PROCESSOR) |
a0103914 | 128 | #define SHA1DC_ALLOW_UNALIGNED_ACCESS |
a0103914 ÆAB |
129 | #endif /*UNALIGNMENT DETECTION*/ |
130 | ||
131 | ||
28dc98e3 JK |
132 | #define rotate_right(x,n) (((x)>>(n))|((x)<<(32-(n)))) |
133 | #define rotate_left(x,n) (((x)<<(n))|((x)>>(32-(n)))) | |
134 | ||
135 | #define sha1_bswap32(x) \ | |
136 | {x = ((x << 8) & 0xFF00FF00) | ((x >> 8) & 0xFF00FF); x = (x << 16) | (x >> 16);} | |
137 | ||
138 | #define sha1_mix(W, t) (rotate_left(W[t - 3] ^ W[t - 8] ^ W[t - 14] ^ W[t - 16], 1)) | |
139 | ||
a0103914 | 140 | #ifdef SHA1DC_BIGENDIAN |
28dc98e3 JK |
141 | #define sha1_load(m, t, temp) { temp = m[t]; } |
142 | #else | |
143 | #define sha1_load(m, t, temp) { temp = m[t]; sha1_bswap32(temp); } | |
a0103914 | 144 | #endif |
28dc98e3 JK |
145 | |
146 | #define sha1_store(W, t, x) *(volatile uint32_t *)&W[t] = x | |
147 | ||
148 | #define sha1_f1(b,c,d) ((d)^((b)&((c)^(d)))) | |
149 | #define sha1_f2(b,c,d) ((b)^(c)^(d)) | |
150 | #define sha1_f3(b,c,d) (((b)&(c))+((d)&((b)^(c)))) | |
151 | #define sha1_f4(b,c,d) ((b)^(c)^(d)) | |
152 | ||
153 | #define HASHCLASH_SHA1COMPRESS_ROUND1_STEP(a, b, c, d, e, m, t) \ | |
154 | { e += rotate_left(a, 5) + sha1_f1(b,c,d) + 0x5A827999 + m[t]; b = rotate_left(b, 30); } | |
155 | #define HASHCLASH_SHA1COMPRESS_ROUND2_STEP(a, b, c, d, e, m, t) \ | |
156 | { e += rotate_left(a, 5) + sha1_f2(b,c,d) + 0x6ED9EBA1 + m[t]; b = rotate_left(b, 30); } | |
157 | #define HASHCLASH_SHA1COMPRESS_ROUND3_STEP(a, b, c, d, e, m, t) \ | |
158 | { e += rotate_left(a, 5) + sha1_f3(b,c,d) + 0x8F1BBCDC + m[t]; b = rotate_left(b, 30); } | |
159 | #define HASHCLASH_SHA1COMPRESS_ROUND4_STEP(a, b, c, d, e, m, t) \ | |
160 | { e += rotate_left(a, 5) + sha1_f4(b,c,d) + 0xCA62C1D6 + m[t]; b = rotate_left(b, 30); } | |
161 | ||
162 | #define HASHCLASH_SHA1COMPRESS_ROUND1_STEP_BW(a, b, c, d, e, m, t) \ | |
163 | { b = rotate_right(b, 30); e -= rotate_left(a, 5) + sha1_f1(b,c,d) + 0x5A827999 + m[t]; } | |
164 | #define HASHCLASH_SHA1COMPRESS_ROUND2_STEP_BW(a, b, c, d, e, m, t) \ | |
165 | { b = rotate_right(b, 30); e -= rotate_left(a, 5) + sha1_f2(b,c,d) + 0x6ED9EBA1 + m[t]; } | |
166 | #define HASHCLASH_SHA1COMPRESS_ROUND3_STEP_BW(a, b, c, d, e, m, t) \ | |
167 | { b = rotate_right(b, 30); e -= rotate_left(a, 5) + sha1_f3(b,c,d) + 0x8F1BBCDC + m[t]; } | |
168 | #define HASHCLASH_SHA1COMPRESS_ROUND4_STEP_BW(a, b, c, d, e, m, t) \ | |
169 | { b = rotate_right(b, 30); e -= rotate_left(a, 5) + sha1_f4(b,c,d) + 0xCA62C1D6 + m[t]; } | |
170 | ||
171 | #define SHA1COMPRESS_FULL_ROUND1_STEP_LOAD(a, b, c, d, e, m, W, t, temp) \ | |
172 | {sha1_load(m, t, temp); sha1_store(W, t, temp); e += temp + rotate_left(a, 5) + sha1_f1(b,c,d) + 0x5A827999; b = rotate_left(b, 30);} | |
173 | ||
174 | #define SHA1COMPRESS_FULL_ROUND1_STEP_EXPAND(a, b, c, d, e, W, t, temp) \ | |
175 | {temp = sha1_mix(W, t); sha1_store(W, t, temp); e += temp + rotate_left(a, 5) + sha1_f1(b,c,d) + 0x5A827999; b = rotate_left(b, 30); } | |
176 | ||
177 | #define SHA1COMPRESS_FULL_ROUND2_STEP(a, b, c, d, e, W, t, temp) \ | |
178 | {temp = sha1_mix(W, t); sha1_store(W, t, temp); e += temp + rotate_left(a, 5) + sha1_f2(b,c,d) + 0x6ED9EBA1; b = rotate_left(b, 30); } | |
179 | ||
180 | #define SHA1COMPRESS_FULL_ROUND3_STEP(a, b, c, d, e, W, t, temp) \ | |
181 | {temp = sha1_mix(W, t); sha1_store(W, t, temp); e += temp + rotate_left(a, 5) + sha1_f3(b,c,d) + 0x8F1BBCDC; b = rotate_left(b, 30); } | |
182 | ||
183 | #define SHA1COMPRESS_FULL_ROUND4_STEP(a, b, c, d, e, W, t, temp) \ | |
184 | {temp = sha1_mix(W, t); sha1_store(W, t, temp); e += temp + rotate_left(a, 5) + sha1_f4(b,c,d) + 0xCA62C1D6; b = rotate_left(b, 30); } | |
185 | ||
186 | ||
187 | #define SHA1_STORE_STATE(i) states[i][0] = a; states[i][1] = b; states[i][2] = c; states[i][3] = d; states[i][4] = e; | |
188 | ||
189 | #ifdef BUILDNOCOLLDETECTSHA1COMPRESSION | |
190 | void sha1_compression(uint32_t ihv[5], const uint32_t m[16]) | |
191 | { | |
192 | uint32_t W[80]; | |
193 | uint32_t a,b,c,d,e; | |
194 | unsigned i; | |
195 | ||
196 | memcpy(W, m, 16 * 4); | |
197 | for (i = 16; i < 80; ++i) | |
198 | W[i] = sha1_mix(W, i); | |
199 | ||
200 | a = ihv[0]; b = ihv[1]; c = ihv[2]; d = ihv[3]; e = ihv[4]; | |
201 | ||
202 | HASHCLASH_SHA1COMPRESS_ROUND1_STEP(a, b, c, d, e, W, 0); | |
203 | HASHCLASH_SHA1COMPRESS_ROUND1_STEP(e, a, b, c, d, W, 1); | |
204 | HASHCLASH_SHA1COMPRESS_ROUND1_STEP(d, e, a, b, c, W, 2); | |
205 | HASHCLASH_SHA1COMPRESS_ROUND1_STEP(c, d, e, a, b, W, 3); | |
206 | HASHCLASH_SHA1COMPRESS_ROUND1_STEP(b, c, d, e, a, W, 4); | |
207 | HASHCLASH_SHA1COMPRESS_ROUND1_STEP(a, b, c, d, e, W, 5); | |
208 | HASHCLASH_SHA1COMPRESS_ROUND1_STEP(e, a, b, c, d, W, 6); | |
209 | HASHCLASH_SHA1COMPRESS_ROUND1_STEP(d, e, a, b, c, W, 7); | |
210 | HASHCLASH_SHA1COMPRESS_ROUND1_STEP(c, d, e, a, b, W, 8); | |
211 | HASHCLASH_SHA1COMPRESS_ROUND1_STEP(b, c, d, e, a, W, 9); | |
212 | HASHCLASH_SHA1COMPRESS_ROUND1_STEP(a, b, c, d, e, W, 10); | |
213 | HASHCLASH_SHA1COMPRESS_ROUND1_STEP(e, a, b, c, d, W, 11); | |
214 | HASHCLASH_SHA1COMPRESS_ROUND1_STEP(d, e, a, b, c, W, 12); | |
215 | HASHCLASH_SHA1COMPRESS_ROUND1_STEP(c, d, e, a, b, W, 13); | |
216 | HASHCLASH_SHA1COMPRESS_ROUND1_STEP(b, c, d, e, a, W, 14); | |
217 | HASHCLASH_SHA1COMPRESS_ROUND1_STEP(a, b, c, d, e, W, 15); | |
218 | HASHCLASH_SHA1COMPRESS_ROUND1_STEP(e, a, b, c, d, W, 16); | |
219 | HASHCLASH_SHA1COMPRESS_ROUND1_STEP(d, e, a, b, c, W, 17); | |
220 | HASHCLASH_SHA1COMPRESS_ROUND1_STEP(c, d, e, a, b, W, 18); | |
221 | HASHCLASH_SHA1COMPRESS_ROUND1_STEP(b, c, d, e, a, W, 19); | |
222 | ||
223 | HASHCLASH_SHA1COMPRESS_ROUND2_STEP(a, b, c, d, e, W, 20); | |
224 | HASHCLASH_SHA1COMPRESS_ROUND2_STEP(e, a, b, c, d, W, 21); | |
225 | HASHCLASH_SHA1COMPRESS_ROUND2_STEP(d, e, a, b, c, W, 22); | |
226 | HASHCLASH_SHA1COMPRESS_ROUND2_STEP(c, d, e, a, b, W, 23); | |
227 | HASHCLASH_SHA1COMPRESS_ROUND2_STEP(b, c, d, e, a, W, 24); | |
228 | HASHCLASH_SHA1COMPRESS_ROUND2_STEP(a, b, c, d, e, W, 25); | |
229 | HASHCLASH_SHA1COMPRESS_ROUND2_STEP(e, a, b, c, d, W, 26); | |
230 | HASHCLASH_SHA1COMPRESS_ROUND2_STEP(d, e, a, b, c, W, 27); | |
231 | HASHCLASH_SHA1COMPRESS_ROUND2_STEP(c, d, e, a, b, W, 28); | |
232 | HASHCLASH_SHA1COMPRESS_ROUND2_STEP(b, c, d, e, a, W, 29); | |
233 | HASHCLASH_SHA1COMPRESS_ROUND2_STEP(a, b, c, d, e, W, 30); | |
234 | HASHCLASH_SHA1COMPRESS_ROUND2_STEP(e, a, b, c, d, W, 31); | |
235 | HASHCLASH_SHA1COMPRESS_ROUND2_STEP(d, e, a, b, c, W, 32); | |
236 | HASHCLASH_SHA1COMPRESS_ROUND2_STEP(c, d, e, a, b, W, 33); | |
237 | HASHCLASH_SHA1COMPRESS_ROUND2_STEP(b, c, d, e, a, W, 34); | |
238 | HASHCLASH_SHA1COMPRESS_ROUND2_STEP(a, b, c, d, e, W, 35); | |
239 | HASHCLASH_SHA1COMPRESS_ROUND2_STEP(e, a, b, c, d, W, 36); | |
240 | HASHCLASH_SHA1COMPRESS_ROUND2_STEP(d, e, a, b, c, W, 37); | |
241 | HASHCLASH_SHA1COMPRESS_ROUND2_STEP(c, d, e, a, b, W, 38); | |
242 | HASHCLASH_SHA1COMPRESS_ROUND2_STEP(b, c, d, e, a, W, 39); | |
243 | ||
244 | HASHCLASH_SHA1COMPRESS_ROUND3_STEP(a, b, c, d, e, W, 40); | |
245 | HASHCLASH_SHA1COMPRESS_ROUND3_STEP(e, a, b, c, d, W, 41); | |
246 | HASHCLASH_SHA1COMPRESS_ROUND3_STEP(d, e, a, b, c, W, 42); | |
247 | HASHCLASH_SHA1COMPRESS_ROUND3_STEP(c, d, e, a, b, W, 43); | |
248 | HASHCLASH_SHA1COMPRESS_ROUND3_STEP(b, c, d, e, a, W, 44); | |
249 | HASHCLASH_SHA1COMPRESS_ROUND3_STEP(a, b, c, d, e, W, 45); | |
250 | HASHCLASH_SHA1COMPRESS_ROUND3_STEP(e, a, b, c, d, W, 46); | |
251 | HASHCLASH_SHA1COMPRESS_ROUND3_STEP(d, e, a, b, c, W, 47); | |
252 | HASHCLASH_SHA1COMPRESS_ROUND3_STEP(c, d, e, a, b, W, 48); | |
253 | HASHCLASH_SHA1COMPRESS_ROUND3_STEP(b, c, d, e, a, W, 49); | |
254 | HASHCLASH_SHA1COMPRESS_ROUND3_STEP(a, b, c, d, e, W, 50); | |
255 | HASHCLASH_SHA1COMPRESS_ROUND3_STEP(e, a, b, c, d, W, 51); | |
256 | HASHCLASH_SHA1COMPRESS_ROUND3_STEP(d, e, a, b, c, W, 52); | |
257 | HASHCLASH_SHA1COMPRESS_ROUND3_STEP(c, d, e, a, b, W, 53); | |
258 | HASHCLASH_SHA1COMPRESS_ROUND3_STEP(b, c, d, e, a, W, 54); | |
259 | HASHCLASH_SHA1COMPRESS_ROUND3_STEP(a, b, c, d, e, W, 55); | |
260 | HASHCLASH_SHA1COMPRESS_ROUND3_STEP(e, a, b, c, d, W, 56); | |
261 | HASHCLASH_SHA1COMPRESS_ROUND3_STEP(d, e, a, b, c, W, 57); | |
262 | HASHCLASH_SHA1COMPRESS_ROUND3_STEP(c, d, e, a, b, W, 58); | |
263 | HASHCLASH_SHA1COMPRESS_ROUND3_STEP(b, c, d, e, a, W, 59); | |
264 | ||
265 | HASHCLASH_SHA1COMPRESS_ROUND4_STEP(a, b, c, d, e, W, 60); | |
266 | HASHCLASH_SHA1COMPRESS_ROUND4_STEP(e, a, b, c, d, W, 61); | |
267 | HASHCLASH_SHA1COMPRESS_ROUND4_STEP(d, e, a, b, c, W, 62); | |
268 | HASHCLASH_SHA1COMPRESS_ROUND4_STEP(c, d, e, a, b, W, 63); | |
269 | HASHCLASH_SHA1COMPRESS_ROUND4_STEP(b, c, d, e, a, W, 64); | |
270 | HASHCLASH_SHA1COMPRESS_ROUND4_STEP(a, b, c, d, e, W, 65); | |
271 | HASHCLASH_SHA1COMPRESS_ROUND4_STEP(e, a, b, c, d, W, 66); | |
272 | HASHCLASH_SHA1COMPRESS_ROUND4_STEP(d, e, a, b, c, W, 67); | |
273 | HASHCLASH_SHA1COMPRESS_ROUND4_STEP(c, d, e, a, b, W, 68); | |
274 | HASHCLASH_SHA1COMPRESS_ROUND4_STEP(b, c, d, e, a, W, 69); | |
275 | HASHCLASH_SHA1COMPRESS_ROUND4_STEP(a, b, c, d, e, W, 70); | |
276 | HASHCLASH_SHA1COMPRESS_ROUND4_STEP(e, a, b, c, d, W, 71); | |
277 | HASHCLASH_SHA1COMPRESS_ROUND4_STEP(d, e, a, b, c, W, 72); | |
278 | HASHCLASH_SHA1COMPRESS_ROUND4_STEP(c, d, e, a, b, W, 73); | |
279 | HASHCLASH_SHA1COMPRESS_ROUND4_STEP(b, c, d, e, a, W, 74); | |
280 | HASHCLASH_SHA1COMPRESS_ROUND4_STEP(a, b, c, d, e, W, 75); | |
281 | HASHCLASH_SHA1COMPRESS_ROUND4_STEP(e, a, b, c, d, W, 76); | |
282 | HASHCLASH_SHA1COMPRESS_ROUND4_STEP(d, e, a, b, c, W, 77); | |
283 | HASHCLASH_SHA1COMPRESS_ROUND4_STEP(c, d, e, a, b, W, 78); | |
284 | HASHCLASH_SHA1COMPRESS_ROUND4_STEP(b, c, d, e, a, W, 79); | |
285 | ||
286 | ihv[0] += a; ihv[1] += b; ihv[2] += c; ihv[3] += d; ihv[4] += e; | |
287 | } | |
288 | #endif /*BUILDNOCOLLDETECTSHA1COMPRESSION*/ | |
289 | ||
290 | ||
291 | static void sha1_compression_W(uint32_t ihv[5], const uint32_t W[80]) | |
292 | { | |
293 | uint32_t a = ihv[0], b = ihv[1], c = ihv[2], d = ihv[3], e = ihv[4]; | |
294 | ||
295 | HASHCLASH_SHA1COMPRESS_ROUND1_STEP(a, b, c, d, e, W, 0); | |
296 | HASHCLASH_SHA1COMPRESS_ROUND1_STEP(e, a, b, c, d, W, 1); | |
297 | HASHCLASH_SHA1COMPRESS_ROUND1_STEP(d, e, a, b, c, W, 2); | |
298 | HASHCLASH_SHA1COMPRESS_ROUND1_STEP(c, d, e, a, b, W, 3); | |
299 | HASHCLASH_SHA1COMPRESS_ROUND1_STEP(b, c, d, e, a, W, 4); | |
300 | HASHCLASH_SHA1COMPRESS_ROUND1_STEP(a, b, c, d, e, W, 5); | |
301 | HASHCLASH_SHA1COMPRESS_ROUND1_STEP(e, a, b, c, d, W, 6); | |
302 | HASHCLASH_SHA1COMPRESS_ROUND1_STEP(d, e, a, b, c, W, 7); | |
303 | HASHCLASH_SHA1COMPRESS_ROUND1_STEP(c, d, e, a, b, W, 8); | |
304 | HASHCLASH_SHA1COMPRESS_ROUND1_STEP(b, c, d, e, a, W, 9); | |
305 | HASHCLASH_SHA1COMPRESS_ROUND1_STEP(a, b, c, d, e, W, 10); | |
306 | HASHCLASH_SHA1COMPRESS_ROUND1_STEP(e, a, b, c, d, W, 11); | |
307 | HASHCLASH_SHA1COMPRESS_ROUND1_STEP(d, e, a, b, c, W, 12); | |
308 | HASHCLASH_SHA1COMPRESS_ROUND1_STEP(c, d, e, a, b, W, 13); | |
309 | HASHCLASH_SHA1COMPRESS_ROUND1_STEP(b, c, d, e, a, W, 14); | |
310 | HASHCLASH_SHA1COMPRESS_ROUND1_STEP(a, b, c, d, e, W, 15); | |
311 | HASHCLASH_SHA1COMPRESS_ROUND1_STEP(e, a, b, c, d, W, 16); | |
312 | HASHCLASH_SHA1COMPRESS_ROUND1_STEP(d, e, a, b, c, W, 17); | |
313 | HASHCLASH_SHA1COMPRESS_ROUND1_STEP(c, d, e, a, b, W, 18); | |
314 | HASHCLASH_SHA1COMPRESS_ROUND1_STEP(b, c, d, e, a, W, 19); | |
315 | ||
316 | HASHCLASH_SHA1COMPRESS_ROUND2_STEP(a, b, c, d, e, W, 20); | |
317 | HASHCLASH_SHA1COMPRESS_ROUND2_STEP(e, a, b, c, d, W, 21); | |
318 | HASHCLASH_SHA1COMPRESS_ROUND2_STEP(d, e, a, b, c, W, 22); | |
319 | HASHCLASH_SHA1COMPRESS_ROUND2_STEP(c, d, e, a, b, W, 23); | |
320 | HASHCLASH_SHA1COMPRESS_ROUND2_STEP(b, c, d, e, a, W, 24); | |
321 | HASHCLASH_SHA1COMPRESS_ROUND2_STEP(a, b, c, d, e, W, 25); | |
322 | HASHCLASH_SHA1COMPRESS_ROUND2_STEP(e, a, b, c, d, W, 26); | |
323 | HASHCLASH_SHA1COMPRESS_ROUND2_STEP(d, e, a, b, c, W, 27); | |
324 | HASHCLASH_SHA1COMPRESS_ROUND2_STEP(c, d, e, a, b, W, 28); | |
325 | HASHCLASH_SHA1COMPRESS_ROUND2_STEP(b, c, d, e, a, W, 29); | |
326 | HASHCLASH_SHA1COMPRESS_ROUND2_STEP(a, b, c, d, e, W, 30); | |
327 | HASHCLASH_SHA1COMPRESS_ROUND2_STEP(e, a, b, c, d, W, 31); | |
328 | HASHCLASH_SHA1COMPRESS_ROUND2_STEP(d, e, a, b, c, W, 32); | |
329 | HASHCLASH_SHA1COMPRESS_ROUND2_STEP(c, d, e, a, b, W, 33); | |
330 | HASHCLASH_SHA1COMPRESS_ROUND2_STEP(b, c, d, e, a, W, 34); | |
331 | HASHCLASH_SHA1COMPRESS_ROUND2_STEP(a, b, c, d, e, W, 35); | |
332 | HASHCLASH_SHA1COMPRESS_ROUND2_STEP(e, a, b, c, d, W, 36); | |
333 | HASHCLASH_SHA1COMPRESS_ROUND2_STEP(d, e, a, b, c, W, 37); | |
334 | HASHCLASH_SHA1COMPRESS_ROUND2_STEP(c, d, e, a, b, W, 38); | |
335 | HASHCLASH_SHA1COMPRESS_ROUND2_STEP(b, c, d, e, a, W, 39); | |
336 | ||
337 | HASHCLASH_SHA1COMPRESS_ROUND3_STEP(a, b, c, d, e, W, 40); | |
338 | HASHCLASH_SHA1COMPRESS_ROUND3_STEP(e, a, b, c, d, W, 41); | |
339 | HASHCLASH_SHA1COMPRESS_ROUND3_STEP(d, e, a, b, c, W, 42); | |
340 | HASHCLASH_SHA1COMPRESS_ROUND3_STEP(c, d, e, a, b, W, 43); | |
341 | HASHCLASH_SHA1COMPRESS_ROUND3_STEP(b, c, d, e, a, W, 44); | |
342 | HASHCLASH_SHA1COMPRESS_ROUND3_STEP(a, b, c, d, e, W, 45); | |
343 | HASHCLASH_SHA1COMPRESS_ROUND3_STEP(e, a, b, c, d, W, 46); | |
344 | HASHCLASH_SHA1COMPRESS_ROUND3_STEP(d, e, a, b, c, W, 47); | |
345 | HASHCLASH_SHA1COMPRESS_ROUND3_STEP(c, d, e, a, b, W, 48); | |
346 | HASHCLASH_SHA1COMPRESS_ROUND3_STEP(b, c, d, e, a, W, 49); | |
347 | HASHCLASH_SHA1COMPRESS_ROUND3_STEP(a, b, c, d, e, W, 50); | |
348 | HASHCLASH_SHA1COMPRESS_ROUND3_STEP(e, a, b, c, d, W, 51); | |
349 | HASHCLASH_SHA1COMPRESS_ROUND3_STEP(d, e, a, b, c, W, 52); | |
350 | HASHCLASH_SHA1COMPRESS_ROUND3_STEP(c, d, e, a, b, W, 53); | |
351 | HASHCLASH_SHA1COMPRESS_ROUND3_STEP(b, c, d, e, a, W, 54); | |
352 | HASHCLASH_SHA1COMPRESS_ROUND3_STEP(a, b, c, d, e, W, 55); | |
353 | HASHCLASH_SHA1COMPRESS_ROUND3_STEP(e, a, b, c, d, W, 56); | |
354 | HASHCLASH_SHA1COMPRESS_ROUND3_STEP(d, e, a, b, c, W, 57); | |
355 | HASHCLASH_SHA1COMPRESS_ROUND3_STEP(c, d, e, a, b, W, 58); | |
356 | HASHCLASH_SHA1COMPRESS_ROUND3_STEP(b, c, d, e, a, W, 59); | |
357 | ||
358 | HASHCLASH_SHA1COMPRESS_ROUND4_STEP(a, b, c, d, e, W, 60); | |
359 | HASHCLASH_SHA1COMPRESS_ROUND4_STEP(e, a, b, c, d, W, 61); | |
360 | HASHCLASH_SHA1COMPRESS_ROUND4_STEP(d, e, a, b, c, W, 62); | |
361 | HASHCLASH_SHA1COMPRESS_ROUND4_STEP(c, d, e, a, b, W, 63); | |
362 | HASHCLASH_SHA1COMPRESS_ROUND4_STEP(b, c, d, e, a, W, 64); | |
363 | HASHCLASH_SHA1COMPRESS_ROUND4_STEP(a, b, c, d, e, W, 65); | |
364 | HASHCLASH_SHA1COMPRESS_ROUND4_STEP(e, a, b, c, d, W, 66); | |
365 | HASHCLASH_SHA1COMPRESS_ROUND4_STEP(d, e, a, b, c, W, 67); | |
366 | HASHCLASH_SHA1COMPRESS_ROUND4_STEP(c, d, e, a, b, W, 68); | |
367 | HASHCLASH_SHA1COMPRESS_ROUND4_STEP(b, c, d, e, a, W, 69); | |
368 | HASHCLASH_SHA1COMPRESS_ROUND4_STEP(a, b, c, d, e, W, 70); | |
369 | HASHCLASH_SHA1COMPRESS_ROUND4_STEP(e, a, b, c, d, W, 71); | |
370 | HASHCLASH_SHA1COMPRESS_ROUND4_STEP(d, e, a, b, c, W, 72); | |
371 | HASHCLASH_SHA1COMPRESS_ROUND4_STEP(c, d, e, a, b, W, 73); | |
372 | HASHCLASH_SHA1COMPRESS_ROUND4_STEP(b, c, d, e, a, W, 74); | |
373 | HASHCLASH_SHA1COMPRESS_ROUND4_STEP(a, b, c, d, e, W, 75); | |
374 | HASHCLASH_SHA1COMPRESS_ROUND4_STEP(e, a, b, c, d, W, 76); | |
375 | HASHCLASH_SHA1COMPRESS_ROUND4_STEP(d, e, a, b, c, W, 77); | |
376 | HASHCLASH_SHA1COMPRESS_ROUND4_STEP(c, d, e, a, b, W, 78); | |
377 | HASHCLASH_SHA1COMPRESS_ROUND4_STEP(b, c, d, e, a, W, 79); | |
378 | ||
379 | ihv[0] += a; ihv[1] += b; ihv[2] += c; ihv[3] += d; ihv[4] += e; | |
380 | } | |
381 | ||
382 | ||
383 | ||
384 | void sha1_compression_states(uint32_t ihv[5], const uint32_t m[16], uint32_t W[80], uint32_t states[80][5]) | |
385 | { | |
386 | uint32_t a = ihv[0], b = ihv[1], c = ihv[2], d = ihv[3], e = ihv[4]; | |
387 | uint32_t temp; | |
388 | ||
389 | #ifdef DOSTORESTATE00 | |
390 | SHA1_STORE_STATE(0) | |
391 | #endif | |
392 | SHA1COMPRESS_FULL_ROUND1_STEP_LOAD(a, b, c, d, e, m, W, 0, temp); | |
393 | ||
394 | #ifdef DOSTORESTATE01 | |
395 | SHA1_STORE_STATE(1) | |
396 | #endif | |
397 | SHA1COMPRESS_FULL_ROUND1_STEP_LOAD(e, a, b, c, d, m, W, 1, temp); | |
398 | ||
399 | #ifdef DOSTORESTATE02 | |
400 | SHA1_STORE_STATE(2) | |
401 | #endif | |
402 | SHA1COMPRESS_FULL_ROUND1_STEP_LOAD(d, e, a, b, c, m, W, 2, temp); | |
403 | ||
404 | #ifdef DOSTORESTATE03 | |
405 | SHA1_STORE_STATE(3) | |
406 | #endif | |
407 | SHA1COMPRESS_FULL_ROUND1_STEP_LOAD(c, d, e, a, b, m, W, 3, temp); | |
408 | ||
409 | #ifdef DOSTORESTATE04 | |
410 | SHA1_STORE_STATE(4) | |
411 | #endif | |
412 | SHA1COMPRESS_FULL_ROUND1_STEP_LOAD(b, c, d, e, a, m, W, 4, temp); | |
413 | ||
414 | #ifdef DOSTORESTATE05 | |
415 | SHA1_STORE_STATE(5) | |
416 | #endif | |
417 | SHA1COMPRESS_FULL_ROUND1_STEP_LOAD(a, b, c, d, e, m, W, 5, temp); | |
418 | ||
419 | #ifdef DOSTORESTATE06 | |
420 | SHA1_STORE_STATE(6) | |
421 | #endif | |
422 | SHA1COMPRESS_FULL_ROUND1_STEP_LOAD(e, a, b, c, d, m, W, 6, temp); | |
423 | ||
424 | #ifdef DOSTORESTATE07 | |
425 | SHA1_STORE_STATE(7) | |
426 | #endif | |
427 | SHA1COMPRESS_FULL_ROUND1_STEP_LOAD(d, e, a, b, c, m, W, 7, temp); | |
428 | ||
429 | #ifdef DOSTORESTATE08 | |
430 | SHA1_STORE_STATE(8) | |
431 | #endif | |
432 | SHA1COMPRESS_FULL_ROUND1_STEP_LOAD(c, d, e, a, b, m, W, 8, temp); | |
433 | ||
434 | #ifdef DOSTORESTATE09 | |
435 | SHA1_STORE_STATE(9) | |
436 | #endif | |
437 | SHA1COMPRESS_FULL_ROUND1_STEP_LOAD(b, c, d, e, a, m, W, 9, temp); | |
438 | ||
439 | #ifdef DOSTORESTATE10 | |
440 | SHA1_STORE_STATE(10) | |
441 | #endif | |
442 | SHA1COMPRESS_FULL_ROUND1_STEP_LOAD(a, b, c, d, e, m, W, 10, temp); | |
443 | ||
444 | #ifdef DOSTORESTATE11 | |
445 | SHA1_STORE_STATE(11) | |
446 | #endif | |
447 | SHA1COMPRESS_FULL_ROUND1_STEP_LOAD(e, a, b, c, d, m, W, 11, temp); | |
448 | ||
449 | #ifdef DOSTORESTATE12 | |
450 | SHA1_STORE_STATE(12) | |
451 | #endif | |
452 | SHA1COMPRESS_FULL_ROUND1_STEP_LOAD(d, e, a, b, c, m, W, 12, temp); | |
453 | ||
454 | #ifdef DOSTORESTATE13 | |
455 | SHA1_STORE_STATE(13) | |
456 | #endif | |
457 | SHA1COMPRESS_FULL_ROUND1_STEP_LOAD(c, d, e, a, b, m, W, 13, temp); | |
458 | ||
459 | #ifdef DOSTORESTATE14 | |
460 | SHA1_STORE_STATE(14) | |
461 | #endif | |
462 | SHA1COMPRESS_FULL_ROUND1_STEP_LOAD(b, c, d, e, a, m, W, 14, temp); | |
463 | ||
464 | #ifdef DOSTORESTATE15 | |
465 | SHA1_STORE_STATE(15) | |
466 | #endif | |
467 | SHA1COMPRESS_FULL_ROUND1_STEP_LOAD(a, b, c, d, e, m, W, 15, temp); | |
468 | ||
469 | #ifdef DOSTORESTATE16 | |
470 | SHA1_STORE_STATE(16) | |
471 | #endif | |
472 | SHA1COMPRESS_FULL_ROUND1_STEP_EXPAND(e, a, b, c, d, W, 16, temp); | |
473 | ||
474 | #ifdef DOSTORESTATE17 | |
475 | SHA1_STORE_STATE(17) | |
476 | #endif | |
477 | SHA1COMPRESS_FULL_ROUND1_STEP_EXPAND(d, e, a, b, c, W, 17, temp); | |
478 | ||
479 | #ifdef DOSTORESTATE18 | |
480 | SHA1_STORE_STATE(18) | |
481 | #endif | |
482 | SHA1COMPRESS_FULL_ROUND1_STEP_EXPAND(c, d, e, a, b, W, 18, temp); | |
483 | ||
484 | #ifdef DOSTORESTATE19 | |
485 | SHA1_STORE_STATE(19) | |
486 | #endif | |
487 | SHA1COMPRESS_FULL_ROUND1_STEP_EXPAND(b, c, d, e, a, W, 19, temp); | |
488 | ||
489 | ||
490 | ||
491 | #ifdef DOSTORESTATE20 | |
492 | SHA1_STORE_STATE(20) | |
493 | #endif | |
494 | SHA1COMPRESS_FULL_ROUND2_STEP(a, b, c, d, e, W, 20, temp); | |
495 | ||
496 | #ifdef DOSTORESTATE21 | |
497 | SHA1_STORE_STATE(21) | |
498 | #endif | |
499 | SHA1COMPRESS_FULL_ROUND2_STEP(e, a, b, c, d, W, 21, temp); | |
500 | ||
501 | #ifdef DOSTORESTATE22 | |
502 | SHA1_STORE_STATE(22) | |
503 | #endif | |
504 | SHA1COMPRESS_FULL_ROUND2_STEP(d, e, a, b, c, W, 22, temp); | |
505 | ||
506 | #ifdef DOSTORESTATE23 | |
507 | SHA1_STORE_STATE(23) | |
508 | #endif | |
509 | SHA1COMPRESS_FULL_ROUND2_STEP(c, d, e, a, b, W, 23, temp); | |
510 | ||
511 | #ifdef DOSTORESTATE24 | |
512 | SHA1_STORE_STATE(24) | |
513 | #endif | |
514 | SHA1COMPRESS_FULL_ROUND2_STEP(b, c, d, e, a, W, 24, temp); | |
515 | ||
516 | #ifdef DOSTORESTATE25 | |
517 | SHA1_STORE_STATE(25) | |
518 | #endif | |
519 | SHA1COMPRESS_FULL_ROUND2_STEP(a, b, c, d, e, W, 25, temp); | |
520 | ||
521 | #ifdef DOSTORESTATE26 | |
522 | SHA1_STORE_STATE(26) | |
523 | #endif | |
524 | SHA1COMPRESS_FULL_ROUND2_STEP(e, a, b, c, d, W, 26, temp); | |
525 | ||
526 | #ifdef DOSTORESTATE27 | |
527 | SHA1_STORE_STATE(27) | |
528 | #endif | |
529 | SHA1COMPRESS_FULL_ROUND2_STEP(d, e, a, b, c, W, 27, temp); | |
530 | ||
531 | #ifdef DOSTORESTATE28 | |
532 | SHA1_STORE_STATE(28) | |
533 | #endif | |
534 | SHA1COMPRESS_FULL_ROUND2_STEP(c, d, e, a, b, W, 28, temp); | |
535 | ||
536 | #ifdef DOSTORESTATE29 | |
537 | SHA1_STORE_STATE(29) | |
538 | #endif | |
539 | SHA1COMPRESS_FULL_ROUND2_STEP(b, c, d, e, a, W, 29, temp); | |
540 | ||
541 | #ifdef DOSTORESTATE30 | |
542 | SHA1_STORE_STATE(30) | |
543 | #endif | |
544 | SHA1COMPRESS_FULL_ROUND2_STEP(a, b, c, d, e, W, 30, temp); | |
545 | ||
546 | #ifdef DOSTORESTATE31 | |
547 | SHA1_STORE_STATE(31) | |
548 | #endif | |
549 | SHA1COMPRESS_FULL_ROUND2_STEP(e, a, b, c, d, W, 31, temp); | |
550 | ||
551 | #ifdef DOSTORESTATE32 | |
552 | SHA1_STORE_STATE(32) | |
553 | #endif | |
554 | SHA1COMPRESS_FULL_ROUND2_STEP(d, e, a, b, c, W, 32, temp); | |
555 | ||
556 | #ifdef DOSTORESTATE33 | |
557 | SHA1_STORE_STATE(33) | |
558 | #endif | |
559 | SHA1COMPRESS_FULL_ROUND2_STEP(c, d, e, a, b, W, 33, temp); | |
560 | ||
561 | #ifdef DOSTORESTATE34 | |
562 | SHA1_STORE_STATE(34) | |
563 | #endif | |
564 | SHA1COMPRESS_FULL_ROUND2_STEP(b, c, d, e, a, W, 34, temp); | |
565 | ||
566 | #ifdef DOSTORESTATE35 | |
567 | SHA1_STORE_STATE(35) | |
568 | #endif | |
569 | SHA1COMPRESS_FULL_ROUND2_STEP(a, b, c, d, e, W, 35, temp); | |
570 | ||
571 | #ifdef DOSTORESTATE36 | |
572 | SHA1_STORE_STATE(36) | |
573 | #endif | |
574 | SHA1COMPRESS_FULL_ROUND2_STEP(e, a, b, c, d, W, 36, temp); | |
575 | ||
576 | #ifdef DOSTORESTATE37 | |
577 | SHA1_STORE_STATE(37) | |
578 | #endif | |
579 | SHA1COMPRESS_FULL_ROUND2_STEP(d, e, a, b, c, W, 37, temp); | |
580 | ||
581 | #ifdef DOSTORESTATE38 | |
582 | SHA1_STORE_STATE(38) | |
583 | #endif | |
584 | SHA1COMPRESS_FULL_ROUND2_STEP(c, d, e, a, b, W, 38, temp); | |
585 | ||
586 | #ifdef DOSTORESTATE39 | |
587 | SHA1_STORE_STATE(39) | |
588 | #endif | |
589 | SHA1COMPRESS_FULL_ROUND2_STEP(b, c, d, e, a, W, 39, temp); | |
590 | ||
591 | ||
592 | ||
593 | #ifdef DOSTORESTATE40 | |
594 | SHA1_STORE_STATE(40) | |
595 | #endif | |
596 | SHA1COMPRESS_FULL_ROUND3_STEP(a, b, c, d, e, W, 40, temp); | |
597 | ||
598 | #ifdef DOSTORESTATE41 | |
599 | SHA1_STORE_STATE(41) | |
600 | #endif | |
601 | SHA1COMPRESS_FULL_ROUND3_STEP(e, a, b, c, d, W, 41, temp); | |
602 | ||
603 | #ifdef DOSTORESTATE42 | |
604 | SHA1_STORE_STATE(42) | |
605 | #endif | |
606 | SHA1COMPRESS_FULL_ROUND3_STEP(d, e, a, b, c, W, 42, temp); | |
607 | ||
608 | #ifdef DOSTORESTATE43 | |
609 | SHA1_STORE_STATE(43) | |
610 | #endif | |
611 | SHA1COMPRESS_FULL_ROUND3_STEP(c, d, e, a, b, W, 43, temp); | |
612 | ||
613 | #ifdef DOSTORESTATE44 | |
614 | SHA1_STORE_STATE(44) | |
615 | #endif | |
616 | SHA1COMPRESS_FULL_ROUND3_STEP(b, c, d, e, a, W, 44, temp); | |
617 | ||
618 | #ifdef DOSTORESTATE45 | |
619 | SHA1_STORE_STATE(45) | |
620 | #endif | |
621 | SHA1COMPRESS_FULL_ROUND3_STEP(a, b, c, d, e, W, 45, temp); | |
622 | ||
623 | #ifdef DOSTORESTATE46 | |
624 | SHA1_STORE_STATE(46) | |
625 | #endif | |
626 | SHA1COMPRESS_FULL_ROUND3_STEP(e, a, b, c, d, W, 46, temp); | |
627 | ||
628 | #ifdef DOSTORESTATE47 | |
629 | SHA1_STORE_STATE(47) | |
630 | #endif | |
631 | SHA1COMPRESS_FULL_ROUND3_STEP(d, e, a, b, c, W, 47, temp); | |
632 | ||
633 | #ifdef DOSTORESTATE48 | |
634 | SHA1_STORE_STATE(48) | |
635 | #endif | |
636 | SHA1COMPRESS_FULL_ROUND3_STEP(c, d, e, a, b, W, 48, temp); | |
637 | ||
638 | #ifdef DOSTORESTATE49 | |
639 | SHA1_STORE_STATE(49) | |
640 | #endif | |
641 | SHA1COMPRESS_FULL_ROUND3_STEP(b, c, d, e, a, W, 49, temp); | |
642 | ||
643 | #ifdef DOSTORESTATE50 | |
644 | SHA1_STORE_STATE(50) | |
645 | #endif | |
646 | SHA1COMPRESS_FULL_ROUND3_STEP(a, b, c, d, e, W, 50, temp); | |
647 | ||
648 | #ifdef DOSTORESTATE51 | |
649 | SHA1_STORE_STATE(51) | |
650 | #endif | |
651 | SHA1COMPRESS_FULL_ROUND3_STEP(e, a, b, c, d, W, 51, temp); | |
652 | ||
653 | #ifdef DOSTORESTATE52 | |
654 | SHA1_STORE_STATE(52) | |
655 | #endif | |
656 | SHA1COMPRESS_FULL_ROUND3_STEP(d, e, a, b, c, W, 52, temp); | |
657 | ||
658 | #ifdef DOSTORESTATE53 | |
659 | SHA1_STORE_STATE(53) | |
660 | #endif | |
661 | SHA1COMPRESS_FULL_ROUND3_STEP(c, d, e, a, b, W, 53, temp); | |
662 | ||
663 | #ifdef DOSTORESTATE54 | |
664 | SHA1_STORE_STATE(54) | |
665 | #endif | |
666 | SHA1COMPRESS_FULL_ROUND3_STEP(b, c, d, e, a, W, 54, temp); | |
667 | ||
668 | #ifdef DOSTORESTATE55 | |
669 | SHA1_STORE_STATE(55) | |
670 | #endif | |
671 | SHA1COMPRESS_FULL_ROUND3_STEP(a, b, c, d, e, W, 55, temp); | |
672 | ||
673 | #ifdef DOSTORESTATE56 | |
674 | SHA1_STORE_STATE(56) | |
675 | #endif | |
676 | SHA1COMPRESS_FULL_ROUND3_STEP(e, a, b, c, d, W, 56, temp); | |
677 | ||
678 | #ifdef DOSTORESTATE57 | |
679 | SHA1_STORE_STATE(57) | |
680 | #endif | |
681 | SHA1COMPRESS_FULL_ROUND3_STEP(d, e, a, b, c, W, 57, temp); | |
682 | ||
683 | #ifdef DOSTORESTATE58 | |
684 | SHA1_STORE_STATE(58) | |
685 | #endif | |
686 | SHA1COMPRESS_FULL_ROUND3_STEP(c, d, e, a, b, W, 58, temp); | |
687 | ||
688 | #ifdef DOSTORESTATE59 | |
689 | SHA1_STORE_STATE(59) | |
690 | #endif | |
691 | SHA1COMPRESS_FULL_ROUND3_STEP(b, c, d, e, a, W, 59, temp); | |
692 | ||
693 | ||
694 | ||
695 | ||
696 | #ifdef DOSTORESTATE60 | |
697 | SHA1_STORE_STATE(60) | |
698 | #endif | |
699 | SHA1COMPRESS_FULL_ROUND4_STEP(a, b, c, d, e, W, 60, temp); | |
700 | ||
701 | #ifdef DOSTORESTATE61 | |
702 | SHA1_STORE_STATE(61) | |
703 | #endif | |
704 | SHA1COMPRESS_FULL_ROUND4_STEP(e, a, b, c, d, W, 61, temp); | |
705 | ||
706 | #ifdef DOSTORESTATE62 | |
707 | SHA1_STORE_STATE(62) | |
708 | #endif | |
709 | SHA1COMPRESS_FULL_ROUND4_STEP(d, e, a, b, c, W, 62, temp); | |
710 | ||
711 | #ifdef DOSTORESTATE63 | |
712 | SHA1_STORE_STATE(63) | |
713 | #endif | |
714 | SHA1COMPRESS_FULL_ROUND4_STEP(c, d, e, a, b, W, 63, temp); | |
715 | ||
716 | #ifdef DOSTORESTATE64 | |
717 | SHA1_STORE_STATE(64) | |
718 | #endif | |
719 | SHA1COMPRESS_FULL_ROUND4_STEP(b, c, d, e, a, W, 64, temp); | |
720 | ||
721 | #ifdef DOSTORESTATE65 | |
722 | SHA1_STORE_STATE(65) | |
723 | #endif | |
724 | SHA1COMPRESS_FULL_ROUND4_STEP(a, b, c, d, e, W, 65, temp); | |
725 | ||
726 | #ifdef DOSTORESTATE66 | |
727 | SHA1_STORE_STATE(66) | |
728 | #endif | |
729 | SHA1COMPRESS_FULL_ROUND4_STEP(e, a, b, c, d, W, 66, temp); | |
730 | ||
731 | #ifdef DOSTORESTATE67 | |
732 | SHA1_STORE_STATE(67) | |
733 | #endif | |
734 | SHA1COMPRESS_FULL_ROUND4_STEP(d, e, a, b, c, W, 67, temp); | |
735 | ||
736 | #ifdef DOSTORESTATE68 | |
737 | SHA1_STORE_STATE(68) | |
738 | #endif | |
739 | SHA1COMPRESS_FULL_ROUND4_STEP(c, d, e, a, b, W, 68, temp); | |
740 | ||
741 | #ifdef DOSTORESTATE69 | |
742 | SHA1_STORE_STATE(69) | |
743 | #endif | |
744 | SHA1COMPRESS_FULL_ROUND4_STEP(b, c, d, e, a, W, 69, temp); | |
745 | ||
746 | #ifdef DOSTORESTATE70 | |
747 | SHA1_STORE_STATE(70) | |
748 | #endif | |
749 | SHA1COMPRESS_FULL_ROUND4_STEP(a, b, c, d, e, W, 70, temp); | |
750 | ||
751 | #ifdef DOSTORESTATE71 | |
752 | SHA1_STORE_STATE(71) | |
753 | #endif | |
754 | SHA1COMPRESS_FULL_ROUND4_STEP(e, a, b, c, d, W, 71, temp); | |
755 | ||
756 | #ifdef DOSTORESTATE72 | |
757 | SHA1_STORE_STATE(72) | |
758 | #endif | |
759 | SHA1COMPRESS_FULL_ROUND4_STEP(d, e, a, b, c, W, 72, temp); | |
760 | ||
761 | #ifdef DOSTORESTATE73 | |
762 | SHA1_STORE_STATE(73) | |
763 | #endif | |
764 | SHA1COMPRESS_FULL_ROUND4_STEP(c, d, e, a, b, W, 73, temp); | |
765 | ||
766 | #ifdef DOSTORESTATE74 | |
767 | SHA1_STORE_STATE(74) | |
768 | #endif | |
769 | SHA1COMPRESS_FULL_ROUND4_STEP(b, c, d, e, a, W, 74, temp); | |
770 | ||
771 | #ifdef DOSTORESTATE75 | |
772 | SHA1_STORE_STATE(75) | |
773 | #endif | |
774 | SHA1COMPRESS_FULL_ROUND4_STEP(a, b, c, d, e, W, 75, temp); | |
775 | ||
776 | #ifdef DOSTORESTATE76 | |
777 | SHA1_STORE_STATE(76) | |
778 | #endif | |
779 | SHA1COMPRESS_FULL_ROUND4_STEP(e, a, b, c, d, W, 76, temp); | |
780 | ||
781 | #ifdef DOSTORESTATE77 | |
782 | SHA1_STORE_STATE(77) | |
783 | #endif | |
784 | SHA1COMPRESS_FULL_ROUND4_STEP(d, e, a, b, c, W, 77, temp); | |
785 | ||
786 | #ifdef DOSTORESTATE78 | |
787 | SHA1_STORE_STATE(78) | |
788 | #endif | |
789 | SHA1COMPRESS_FULL_ROUND4_STEP(c, d, e, a, b, W, 78, temp); | |
790 | ||
791 | #ifdef DOSTORESTATE79 | |
792 | SHA1_STORE_STATE(79) | |
793 | #endif | |
794 | SHA1COMPRESS_FULL_ROUND4_STEP(b, c, d, e, a, W, 79, temp); | |
795 | ||
796 | ||
797 | ||
798 | ihv[0] += a; ihv[1] += b; ihv[2] += c; ihv[3] += d; ihv[4] += e; | |
799 | } | |
800 | ||
801 | ||
802 | ||
803 | ||
804 | #define SHA1_RECOMPRESS(t) \ | |
805 | static void sha1recompress_fast_ ## t (uint32_t ihvin[5], uint32_t ihvout[5], const uint32_t me2[80], const uint32_t state[5]) \ | |
806 | { \ | |
807 | uint32_t a = state[0], b = state[1], c = state[2], d = state[3], e = state[4]; \ | |
808 | if (t > 79) HASHCLASH_SHA1COMPRESS_ROUND4_STEP_BW(b, c, d, e, a, me2, 79); \ | |
809 | if (t > 78) HASHCLASH_SHA1COMPRESS_ROUND4_STEP_BW(c, d, e, a, b, me2, 78); \ | |
810 | if (t > 77) HASHCLASH_SHA1COMPRESS_ROUND4_STEP_BW(d, e, a, b, c, me2, 77); \ | |
811 | if (t > 76) HASHCLASH_SHA1COMPRESS_ROUND4_STEP_BW(e, a, b, c, d, me2, 76); \ | |
812 | if (t > 75) HASHCLASH_SHA1COMPRESS_ROUND4_STEP_BW(a, b, c, d, e, me2, 75); \ | |
813 | if (t > 74) HASHCLASH_SHA1COMPRESS_ROUND4_STEP_BW(b, c, d, e, a, me2, 74); \ | |
814 | if (t > 73) HASHCLASH_SHA1COMPRESS_ROUND4_STEP_BW(c, d, e, a, b, me2, 73); \ | |
815 | if (t > 72) HASHCLASH_SHA1COMPRESS_ROUND4_STEP_BW(d, e, a, b, c, me2, 72); \ | |
816 | if (t > 71) HASHCLASH_SHA1COMPRESS_ROUND4_STEP_BW(e, a, b, c, d, me2, 71); \ | |
817 | if (t > 70) HASHCLASH_SHA1COMPRESS_ROUND4_STEP_BW(a, b, c, d, e, me2, 70); \ | |
818 | if (t > 69) HASHCLASH_SHA1COMPRESS_ROUND4_STEP_BW(b, c, d, e, a, me2, 69); \ | |
819 | if (t > 68) HASHCLASH_SHA1COMPRESS_ROUND4_STEP_BW(c, d, e, a, b, me2, 68); \ | |
820 | if (t > 67) HASHCLASH_SHA1COMPRESS_ROUND4_STEP_BW(d, e, a, b, c, me2, 67); \ | |
821 | if (t > 66) HASHCLASH_SHA1COMPRESS_ROUND4_STEP_BW(e, a, b, c, d, me2, 66); \ | |
822 | if (t > 65) HASHCLASH_SHA1COMPRESS_ROUND4_STEP_BW(a, b, c, d, e, me2, 65); \ | |
823 | if (t > 64) HASHCLASH_SHA1COMPRESS_ROUND4_STEP_BW(b, c, d, e, a, me2, 64); \ | |
824 | if (t > 63) HASHCLASH_SHA1COMPRESS_ROUND4_STEP_BW(c, d, e, a, b, me2, 63); \ | |
825 | if (t > 62) HASHCLASH_SHA1COMPRESS_ROUND4_STEP_BW(d, e, a, b, c, me2, 62); \ | |
826 | if (t > 61) HASHCLASH_SHA1COMPRESS_ROUND4_STEP_BW(e, a, b, c, d, me2, 61); \ | |
827 | if (t > 60) HASHCLASH_SHA1COMPRESS_ROUND4_STEP_BW(a, b, c, d, e, me2, 60); \ | |
828 | if (t > 59) HASHCLASH_SHA1COMPRESS_ROUND3_STEP_BW(b, c, d, e, a, me2, 59); \ | |
829 | if (t > 58) HASHCLASH_SHA1COMPRESS_ROUND3_STEP_BW(c, d, e, a, b, me2, 58); \ | |
830 | if (t > 57) HASHCLASH_SHA1COMPRESS_ROUND3_STEP_BW(d, e, a, b, c, me2, 57); \ | |
831 | if (t > 56) HASHCLASH_SHA1COMPRESS_ROUND3_STEP_BW(e, a, b, c, d, me2, 56); \ | |
832 | if (t > 55) HASHCLASH_SHA1COMPRESS_ROUND3_STEP_BW(a, b, c, d, e, me2, 55); \ | |
833 | if (t > 54) HASHCLASH_SHA1COMPRESS_ROUND3_STEP_BW(b, c, d, e, a, me2, 54); \ | |
834 | if (t > 53) HASHCLASH_SHA1COMPRESS_ROUND3_STEP_BW(c, d, e, a, b, me2, 53); \ | |
835 | if (t > 52) HASHCLASH_SHA1COMPRESS_ROUND3_STEP_BW(d, e, a, b, c, me2, 52); \ | |
836 | if (t > 51) HASHCLASH_SHA1COMPRESS_ROUND3_STEP_BW(e, a, b, c, d, me2, 51); \ | |
837 | if (t > 50) HASHCLASH_SHA1COMPRESS_ROUND3_STEP_BW(a, b, c, d, e, me2, 50); \ | |
838 | if (t > 49) HASHCLASH_SHA1COMPRESS_ROUND3_STEP_BW(b, c, d, e, a, me2, 49); \ | |
839 | if (t > 48) HASHCLASH_SHA1COMPRESS_ROUND3_STEP_BW(c, d, e, a, b, me2, 48); \ | |
840 | if (t > 47) HASHCLASH_SHA1COMPRESS_ROUND3_STEP_BW(d, e, a, b, c, me2, 47); \ | |
841 | if (t > 46) HASHCLASH_SHA1COMPRESS_ROUND3_STEP_BW(e, a, b, c, d, me2, 46); \ | |
842 | if (t > 45) HASHCLASH_SHA1COMPRESS_ROUND3_STEP_BW(a, b, c, d, e, me2, 45); \ | |
843 | if (t > 44) HASHCLASH_SHA1COMPRESS_ROUND3_STEP_BW(b, c, d, e, a, me2, 44); \ | |
844 | if (t > 43) HASHCLASH_SHA1COMPRESS_ROUND3_STEP_BW(c, d, e, a, b, me2, 43); \ | |
845 | if (t > 42) HASHCLASH_SHA1COMPRESS_ROUND3_STEP_BW(d, e, a, b, c, me2, 42); \ | |
846 | if (t > 41) HASHCLASH_SHA1COMPRESS_ROUND3_STEP_BW(e, a, b, c, d, me2, 41); \ | |
847 | if (t > 40) HASHCLASH_SHA1COMPRESS_ROUND3_STEP_BW(a, b, c, d, e, me2, 40); \ | |
848 | if (t > 39) HASHCLASH_SHA1COMPRESS_ROUND2_STEP_BW(b, c, d, e, a, me2, 39); \ | |
849 | if (t > 38) HASHCLASH_SHA1COMPRESS_ROUND2_STEP_BW(c, d, e, a, b, me2, 38); \ | |
850 | if (t > 37) HASHCLASH_SHA1COMPRESS_ROUND2_STEP_BW(d, e, a, b, c, me2, 37); \ | |
851 | if (t > 36) HASHCLASH_SHA1COMPRESS_ROUND2_STEP_BW(e, a, b, c, d, me2, 36); \ | |
852 | if (t > 35) HASHCLASH_SHA1COMPRESS_ROUND2_STEP_BW(a, b, c, d, e, me2, 35); \ | |
853 | if (t > 34) HASHCLASH_SHA1COMPRESS_ROUND2_STEP_BW(b, c, d, e, a, me2, 34); \ | |
854 | if (t > 33) HASHCLASH_SHA1COMPRESS_ROUND2_STEP_BW(c, d, e, a, b, me2, 33); \ | |
855 | if (t > 32) HASHCLASH_SHA1COMPRESS_ROUND2_STEP_BW(d, e, a, b, c, me2, 32); \ | |
856 | if (t > 31) HASHCLASH_SHA1COMPRESS_ROUND2_STEP_BW(e, a, b, c, d, me2, 31); \ | |
857 | if (t > 30) HASHCLASH_SHA1COMPRESS_ROUND2_STEP_BW(a, b, c, d, e, me2, 30); \ | |
858 | if (t > 29) HASHCLASH_SHA1COMPRESS_ROUND2_STEP_BW(b, c, d, e, a, me2, 29); \ | |
859 | if (t > 28) HASHCLASH_SHA1COMPRESS_ROUND2_STEP_BW(c, d, e, a, b, me2, 28); \ | |
860 | if (t > 27) HASHCLASH_SHA1COMPRESS_ROUND2_STEP_BW(d, e, a, b, c, me2, 27); \ | |
861 | if (t > 26) HASHCLASH_SHA1COMPRESS_ROUND2_STEP_BW(e, a, b, c, d, me2, 26); \ | |
862 | if (t > 25) HASHCLASH_SHA1COMPRESS_ROUND2_STEP_BW(a, b, c, d, e, me2, 25); \ | |
863 | if (t > 24) HASHCLASH_SHA1COMPRESS_ROUND2_STEP_BW(b, c, d, e, a, me2, 24); \ | |
864 | if (t > 23) HASHCLASH_SHA1COMPRESS_ROUND2_STEP_BW(c, d, e, a, b, me2, 23); \ | |
865 | if (t > 22) HASHCLASH_SHA1COMPRESS_ROUND2_STEP_BW(d, e, a, b, c, me2, 22); \ | |
866 | if (t > 21) HASHCLASH_SHA1COMPRESS_ROUND2_STEP_BW(e, a, b, c, d, me2, 21); \ | |
867 | if (t > 20) HASHCLASH_SHA1COMPRESS_ROUND2_STEP_BW(a, b, c, d, e, me2, 20); \ | |
868 | if (t > 19) HASHCLASH_SHA1COMPRESS_ROUND1_STEP_BW(b, c, d, e, a, me2, 19); \ | |
869 | if (t > 18) HASHCLASH_SHA1COMPRESS_ROUND1_STEP_BW(c, d, e, a, b, me2, 18); \ | |
870 | if (t > 17) HASHCLASH_SHA1COMPRESS_ROUND1_STEP_BW(d, e, a, b, c, me2, 17); \ | |
871 | if (t > 16) HASHCLASH_SHA1COMPRESS_ROUND1_STEP_BW(e, a, b, c, d, me2, 16); \ | |
872 | if (t > 15) HASHCLASH_SHA1COMPRESS_ROUND1_STEP_BW(a, b, c, d, e, me2, 15); \ | |
873 | if (t > 14) HASHCLASH_SHA1COMPRESS_ROUND1_STEP_BW(b, c, d, e, a, me2, 14); \ | |
874 | if (t > 13) HASHCLASH_SHA1COMPRESS_ROUND1_STEP_BW(c, d, e, a, b, me2, 13); \ | |
875 | if (t > 12) HASHCLASH_SHA1COMPRESS_ROUND1_STEP_BW(d, e, a, b, c, me2, 12); \ | |
876 | if (t > 11) HASHCLASH_SHA1COMPRESS_ROUND1_STEP_BW(e, a, b, c, d, me2, 11); \ | |
877 | if (t > 10) HASHCLASH_SHA1COMPRESS_ROUND1_STEP_BW(a, b, c, d, e, me2, 10); \ | |
878 | if (t > 9) HASHCLASH_SHA1COMPRESS_ROUND1_STEP_BW(b, c, d, e, a, me2, 9); \ | |
879 | if (t > 8) HASHCLASH_SHA1COMPRESS_ROUND1_STEP_BW(c, d, e, a, b, me2, 8); \ | |
880 | if (t > 7) HASHCLASH_SHA1COMPRESS_ROUND1_STEP_BW(d, e, a, b, c, me2, 7); \ | |
881 | if (t > 6) HASHCLASH_SHA1COMPRESS_ROUND1_STEP_BW(e, a, b, c, d, me2, 6); \ | |
882 | if (t > 5) HASHCLASH_SHA1COMPRESS_ROUND1_STEP_BW(a, b, c, d, e, me2, 5); \ | |
883 | if (t > 4) HASHCLASH_SHA1COMPRESS_ROUND1_STEP_BW(b, c, d, e, a, me2, 4); \ | |
884 | if (t > 3) HASHCLASH_SHA1COMPRESS_ROUND1_STEP_BW(c, d, e, a, b, me2, 3); \ | |
885 | if (t > 2) HASHCLASH_SHA1COMPRESS_ROUND1_STEP_BW(d, e, a, b, c, me2, 2); \ | |
886 | if (t > 1) HASHCLASH_SHA1COMPRESS_ROUND1_STEP_BW(e, a, b, c, d, me2, 1); \ | |
887 | if (t > 0) HASHCLASH_SHA1COMPRESS_ROUND1_STEP_BW(a, b, c, d, e, me2, 0); \ | |
888 | ihvin[0] = a; ihvin[1] = b; ihvin[2] = c; ihvin[3] = d; ihvin[4] = e; \ | |
889 | a = state[0]; b = state[1]; c = state[2]; d = state[3]; e = state[4]; \ | |
890 | if (t <= 0) HASHCLASH_SHA1COMPRESS_ROUND1_STEP(a, b, c, d, e, me2, 0); \ | |
891 | if (t <= 1) HASHCLASH_SHA1COMPRESS_ROUND1_STEP(e, a, b, c, d, me2, 1); \ | |
892 | if (t <= 2) HASHCLASH_SHA1COMPRESS_ROUND1_STEP(d, e, a, b, c, me2, 2); \ | |
893 | if (t <= 3) HASHCLASH_SHA1COMPRESS_ROUND1_STEP(c, d, e, a, b, me2, 3); \ | |
894 | if (t <= 4) HASHCLASH_SHA1COMPRESS_ROUND1_STEP(b, c, d, e, a, me2, 4); \ | |
895 | if (t <= 5) HASHCLASH_SHA1COMPRESS_ROUND1_STEP(a, b, c, d, e, me2, 5); \ | |
896 | if (t <= 6) HASHCLASH_SHA1COMPRESS_ROUND1_STEP(e, a, b, c, d, me2, 6); \ | |
897 | if (t <= 7) HASHCLASH_SHA1COMPRESS_ROUND1_STEP(d, e, a, b, c, me2, 7); \ | |
898 | if (t <= 8) HASHCLASH_SHA1COMPRESS_ROUND1_STEP(c, d, e, a, b, me2, 8); \ | |
899 | if (t <= 9) HASHCLASH_SHA1COMPRESS_ROUND1_STEP(b, c, d, e, a, me2, 9); \ | |
900 | if (t <= 10) HASHCLASH_SHA1COMPRESS_ROUND1_STEP(a, b, c, d, e, me2, 10); \ | |
901 | if (t <= 11) HASHCLASH_SHA1COMPRESS_ROUND1_STEP(e, a, b, c, d, me2, 11); \ | |
902 | if (t <= 12) HASHCLASH_SHA1COMPRESS_ROUND1_STEP(d, e, a, b, c, me2, 12); \ | |
903 | if (t <= 13) HASHCLASH_SHA1COMPRESS_ROUND1_STEP(c, d, e, a, b, me2, 13); \ | |
904 | if (t <= 14) HASHCLASH_SHA1COMPRESS_ROUND1_STEP(b, c, d, e, a, me2, 14); \ | |
905 | if (t <= 15) HASHCLASH_SHA1COMPRESS_ROUND1_STEP(a, b, c, d, e, me2, 15); \ | |
906 | if (t <= 16) HASHCLASH_SHA1COMPRESS_ROUND1_STEP(e, a, b, c, d, me2, 16); \ | |
907 | if (t <= 17) HASHCLASH_SHA1COMPRESS_ROUND1_STEP(d, e, a, b, c, me2, 17); \ | |
908 | if (t <= 18) HASHCLASH_SHA1COMPRESS_ROUND1_STEP(c, d, e, a, b, me2, 18); \ | |
909 | if (t <= 19) HASHCLASH_SHA1COMPRESS_ROUND1_STEP(b, c, d, e, a, me2, 19); \ | |
910 | if (t <= 20) HASHCLASH_SHA1COMPRESS_ROUND2_STEP(a, b, c, d, e, me2, 20); \ | |
911 | if (t <= 21) HASHCLASH_SHA1COMPRESS_ROUND2_STEP(e, a, b, c, d, me2, 21); \ | |
912 | if (t <= 22) HASHCLASH_SHA1COMPRESS_ROUND2_STEP(d, e, a, b, c, me2, 22); \ | |
913 | if (t <= 23) HASHCLASH_SHA1COMPRESS_ROUND2_STEP(c, d, e, a, b, me2, 23); \ | |
914 | if (t <= 24) HASHCLASH_SHA1COMPRESS_ROUND2_STEP(b, c, d, e, a, me2, 24); \ | |
915 | if (t <= 25) HASHCLASH_SHA1COMPRESS_ROUND2_STEP(a, b, c, d, e, me2, 25); \ | |
916 | if (t <= 26) HASHCLASH_SHA1COMPRESS_ROUND2_STEP(e, a, b, c, d, me2, 26); \ | |
917 | if (t <= 27) HASHCLASH_SHA1COMPRESS_ROUND2_STEP(d, e, a, b, c, me2, 27); \ | |
918 | if (t <= 28) HASHCLASH_SHA1COMPRESS_ROUND2_STEP(c, d, e, a, b, me2, 28); \ | |
919 | if (t <= 29) HASHCLASH_SHA1COMPRESS_ROUND2_STEP(b, c, d, e, a, me2, 29); \ | |
920 | if (t <= 30) HASHCLASH_SHA1COMPRESS_ROUND2_STEP(a, b, c, d, e, me2, 30); \ | |
921 | if (t <= 31) HASHCLASH_SHA1COMPRESS_ROUND2_STEP(e, a, b, c, d, me2, 31); \ | |
922 | if (t <= 32) HASHCLASH_SHA1COMPRESS_ROUND2_STEP(d, e, a, b, c, me2, 32); \ | |
923 | if (t <= 33) HASHCLASH_SHA1COMPRESS_ROUND2_STEP(c, d, e, a, b, me2, 33); \ | |
924 | if (t <= 34) HASHCLASH_SHA1COMPRESS_ROUND2_STEP(b, c, d, e, a, me2, 34); \ | |
925 | if (t <= 35) HASHCLASH_SHA1COMPRESS_ROUND2_STEP(a, b, c, d, e, me2, 35); \ | |
926 | if (t <= 36) HASHCLASH_SHA1COMPRESS_ROUND2_STEP(e, a, b, c, d, me2, 36); \ | |
927 | if (t <= 37) HASHCLASH_SHA1COMPRESS_ROUND2_STEP(d, e, a, b, c, me2, 37); \ | |
928 | if (t <= 38) HASHCLASH_SHA1COMPRESS_ROUND2_STEP(c, d, e, a, b, me2, 38); \ | |
929 | if (t <= 39) HASHCLASH_SHA1COMPRESS_ROUND2_STEP(b, c, d, e, a, me2, 39); \ | |
930 | if (t <= 40) HASHCLASH_SHA1COMPRESS_ROUND3_STEP(a, b, c, d, e, me2, 40); \ | |
931 | if (t <= 41) HASHCLASH_SHA1COMPRESS_ROUND3_STEP(e, a, b, c, d, me2, 41); \ | |
932 | if (t <= 42) HASHCLASH_SHA1COMPRESS_ROUND3_STEP(d, e, a, b, c, me2, 42); \ | |
933 | if (t <= 43) HASHCLASH_SHA1COMPRESS_ROUND3_STEP(c, d, e, a, b, me2, 43); \ | |
934 | if (t <= 44) HASHCLASH_SHA1COMPRESS_ROUND3_STEP(b, c, d, e, a, me2, 44); \ | |
935 | if (t <= 45) HASHCLASH_SHA1COMPRESS_ROUND3_STEP(a, b, c, d, e, me2, 45); \ | |
936 | if (t <= 46) HASHCLASH_SHA1COMPRESS_ROUND3_STEP(e, a, b, c, d, me2, 46); \ | |
937 | if (t <= 47) HASHCLASH_SHA1COMPRESS_ROUND3_STEP(d, e, a, b, c, me2, 47); \ | |
938 | if (t <= 48) HASHCLASH_SHA1COMPRESS_ROUND3_STEP(c, d, e, a, b, me2, 48); \ | |
939 | if (t <= 49) HASHCLASH_SHA1COMPRESS_ROUND3_STEP(b, c, d, e, a, me2, 49); \ | |
940 | if (t <= 50) HASHCLASH_SHA1COMPRESS_ROUND3_STEP(a, b, c, d, e, me2, 50); \ | |
941 | if (t <= 51) HASHCLASH_SHA1COMPRESS_ROUND3_STEP(e, a, b, c, d, me2, 51); \ | |
942 | if (t <= 52) HASHCLASH_SHA1COMPRESS_ROUND3_STEP(d, e, a, b, c, me2, 52); \ | |
943 | if (t <= 53) HASHCLASH_SHA1COMPRESS_ROUND3_STEP(c, d, e, a, b, me2, 53); \ | |
944 | if (t <= 54) HASHCLASH_SHA1COMPRESS_ROUND3_STEP(b, c, d, e, a, me2, 54); \ | |
945 | if (t <= 55) HASHCLASH_SHA1COMPRESS_ROUND3_STEP(a, b, c, d, e, me2, 55); \ | |
946 | if (t <= 56) HASHCLASH_SHA1COMPRESS_ROUND3_STEP(e, a, b, c, d, me2, 56); \ | |
947 | if (t <= 57) HASHCLASH_SHA1COMPRESS_ROUND3_STEP(d, e, a, b, c, me2, 57); \ | |
948 | if (t <= 58) HASHCLASH_SHA1COMPRESS_ROUND3_STEP(c, d, e, a, b, me2, 58); \ | |
949 | if (t <= 59) HASHCLASH_SHA1COMPRESS_ROUND3_STEP(b, c, d, e, a, me2, 59); \ | |
950 | if (t <= 60) HASHCLASH_SHA1COMPRESS_ROUND4_STEP(a, b, c, d, e, me2, 60); \ | |
951 | if (t <= 61) HASHCLASH_SHA1COMPRESS_ROUND4_STEP(e, a, b, c, d, me2, 61); \ | |
952 | if (t <= 62) HASHCLASH_SHA1COMPRESS_ROUND4_STEP(d, e, a, b, c, me2, 62); \ | |
953 | if (t <= 63) HASHCLASH_SHA1COMPRESS_ROUND4_STEP(c, d, e, a, b, me2, 63); \ | |
954 | if (t <= 64) HASHCLASH_SHA1COMPRESS_ROUND4_STEP(b, c, d, e, a, me2, 64); \ | |
955 | if (t <= 65) HASHCLASH_SHA1COMPRESS_ROUND4_STEP(a, b, c, d, e, me2, 65); \ | |
956 | if (t <= 66) HASHCLASH_SHA1COMPRESS_ROUND4_STEP(e, a, b, c, d, me2, 66); \ | |
957 | if (t <= 67) HASHCLASH_SHA1COMPRESS_ROUND4_STEP(d, e, a, b, c, me2, 67); \ | |
958 | if (t <= 68) HASHCLASH_SHA1COMPRESS_ROUND4_STEP(c, d, e, a, b, me2, 68); \ | |
959 | if (t <= 69) HASHCLASH_SHA1COMPRESS_ROUND4_STEP(b, c, d, e, a, me2, 69); \ | |
960 | if (t <= 70) HASHCLASH_SHA1COMPRESS_ROUND4_STEP(a, b, c, d, e, me2, 70); \ | |
961 | if (t <= 71) HASHCLASH_SHA1COMPRESS_ROUND4_STEP(e, a, b, c, d, me2, 71); \ | |
962 | if (t <= 72) HASHCLASH_SHA1COMPRESS_ROUND4_STEP(d, e, a, b, c, me2, 72); \ | |
963 | if (t <= 73) HASHCLASH_SHA1COMPRESS_ROUND4_STEP(c, d, e, a, b, me2, 73); \ | |
964 | if (t <= 74) HASHCLASH_SHA1COMPRESS_ROUND4_STEP(b, c, d, e, a, me2, 74); \ | |
965 | if (t <= 75) HASHCLASH_SHA1COMPRESS_ROUND4_STEP(a, b, c, d, e, me2, 75); \ | |
966 | if (t <= 76) HASHCLASH_SHA1COMPRESS_ROUND4_STEP(e, a, b, c, d, me2, 76); \ | |
967 | if (t <= 77) HASHCLASH_SHA1COMPRESS_ROUND4_STEP(d, e, a, b, c, me2, 77); \ | |
968 | if (t <= 78) HASHCLASH_SHA1COMPRESS_ROUND4_STEP(c, d, e, a, b, me2, 78); \ | |
969 | if (t <= 79) HASHCLASH_SHA1COMPRESS_ROUND4_STEP(b, c, d, e, a, me2, 79); \ | |
970 | ihvout[0] = ihvin[0] + a; ihvout[1] = ihvin[1] + b; ihvout[2] = ihvin[2] + c; ihvout[3] = ihvin[3] + d; ihvout[4] = ihvin[4] + e; \ | |
971 | } | |
972 | ||
a0103914 ÆAB |
973 | #ifdef _MSC_VER |
974 | #pragma warning(push) | |
64127575 | 975 | #pragma warning(disable: 4127) /* Compiler complains about the checks in the above macro being constant. */ |
a0103914 ÆAB |
976 | #endif |
977 | ||
28dc98e3 JK |
978 | #ifdef DOSTORESTATE0 |
979 | SHA1_RECOMPRESS(0) | |
980 | #endif | |
981 | ||
982 | #ifdef DOSTORESTATE1 | |
983 | SHA1_RECOMPRESS(1) | |
984 | #endif | |
985 | ||
986 | #ifdef DOSTORESTATE2 | |
987 | SHA1_RECOMPRESS(2) | |
988 | #endif | |
989 | ||
990 | #ifdef DOSTORESTATE3 | |
991 | SHA1_RECOMPRESS(3) | |
992 | #endif | |
993 | ||
994 | #ifdef DOSTORESTATE4 | |
995 | SHA1_RECOMPRESS(4) | |
996 | #endif | |
997 | ||
998 | #ifdef DOSTORESTATE5 | |
999 | SHA1_RECOMPRESS(5) | |
1000 | #endif | |
1001 | ||
1002 | #ifdef DOSTORESTATE6 | |
1003 | SHA1_RECOMPRESS(6) | |
1004 | #endif | |
1005 | ||
1006 | #ifdef DOSTORESTATE7 | |
1007 | SHA1_RECOMPRESS(7) | |
1008 | #endif | |
1009 | ||
1010 | #ifdef DOSTORESTATE8 | |
1011 | SHA1_RECOMPRESS(8) | |
1012 | #endif | |
1013 | ||
1014 | #ifdef DOSTORESTATE9 | |
1015 | SHA1_RECOMPRESS(9) | |
1016 | #endif | |
1017 | ||
1018 | #ifdef DOSTORESTATE10 | |
1019 | SHA1_RECOMPRESS(10) | |
1020 | #endif | |
1021 | ||
1022 | #ifdef DOSTORESTATE11 | |
1023 | SHA1_RECOMPRESS(11) | |
1024 | #endif | |
1025 | ||
1026 | #ifdef DOSTORESTATE12 | |
1027 | SHA1_RECOMPRESS(12) | |
1028 | #endif | |
1029 | ||
1030 | #ifdef DOSTORESTATE13 | |
1031 | SHA1_RECOMPRESS(13) | |
1032 | #endif | |
1033 | ||
1034 | #ifdef DOSTORESTATE14 | |
1035 | SHA1_RECOMPRESS(14) | |
1036 | #endif | |
1037 | ||
1038 | #ifdef DOSTORESTATE15 | |
1039 | SHA1_RECOMPRESS(15) | |
1040 | #endif | |
1041 | ||
1042 | #ifdef DOSTORESTATE16 | |
1043 | SHA1_RECOMPRESS(16) | |
1044 | #endif | |
1045 | ||
1046 | #ifdef DOSTORESTATE17 | |
1047 | SHA1_RECOMPRESS(17) | |
1048 | #endif | |
1049 | ||
1050 | #ifdef DOSTORESTATE18 | |
1051 | SHA1_RECOMPRESS(18) | |
1052 | #endif | |
1053 | ||
1054 | #ifdef DOSTORESTATE19 | |
1055 | SHA1_RECOMPRESS(19) | |
1056 | #endif | |
1057 | ||
1058 | #ifdef DOSTORESTATE20 | |
1059 | SHA1_RECOMPRESS(20) | |
1060 | #endif | |
1061 | ||
1062 | #ifdef DOSTORESTATE21 | |
1063 | SHA1_RECOMPRESS(21) | |
1064 | #endif | |
1065 | ||
1066 | #ifdef DOSTORESTATE22 | |
1067 | SHA1_RECOMPRESS(22) | |
1068 | #endif | |
1069 | ||
1070 | #ifdef DOSTORESTATE23 | |
1071 | SHA1_RECOMPRESS(23) | |
1072 | #endif | |
1073 | ||
1074 | #ifdef DOSTORESTATE24 | |
1075 | SHA1_RECOMPRESS(24) | |
1076 | #endif | |
1077 | ||
1078 | #ifdef DOSTORESTATE25 | |
1079 | SHA1_RECOMPRESS(25) | |
1080 | #endif | |
1081 | ||
1082 | #ifdef DOSTORESTATE26 | |
1083 | SHA1_RECOMPRESS(26) | |
1084 | #endif | |
1085 | ||
1086 | #ifdef DOSTORESTATE27 | |
1087 | SHA1_RECOMPRESS(27) | |
1088 | #endif | |
1089 | ||
1090 | #ifdef DOSTORESTATE28 | |
1091 | SHA1_RECOMPRESS(28) | |
1092 | #endif | |
1093 | ||
1094 | #ifdef DOSTORESTATE29 | |
1095 | SHA1_RECOMPRESS(29) | |
1096 | #endif | |
1097 | ||
1098 | #ifdef DOSTORESTATE30 | |
1099 | SHA1_RECOMPRESS(30) | |
1100 | #endif | |
1101 | ||
1102 | #ifdef DOSTORESTATE31 | |
1103 | SHA1_RECOMPRESS(31) | |
1104 | #endif | |
1105 | ||
1106 | #ifdef DOSTORESTATE32 | |
1107 | SHA1_RECOMPRESS(32) | |
1108 | #endif | |
1109 | ||
1110 | #ifdef DOSTORESTATE33 | |
1111 | SHA1_RECOMPRESS(33) | |
1112 | #endif | |
1113 | ||
1114 | #ifdef DOSTORESTATE34 | |
1115 | SHA1_RECOMPRESS(34) | |
1116 | #endif | |
1117 | ||
1118 | #ifdef DOSTORESTATE35 | |
1119 | SHA1_RECOMPRESS(35) | |
1120 | #endif | |
1121 | ||
1122 | #ifdef DOSTORESTATE36 | |
1123 | SHA1_RECOMPRESS(36) | |
1124 | #endif | |
1125 | ||
1126 | #ifdef DOSTORESTATE37 | |
1127 | SHA1_RECOMPRESS(37) | |
1128 | #endif | |
1129 | ||
1130 | #ifdef DOSTORESTATE38 | |
1131 | SHA1_RECOMPRESS(38) | |
1132 | #endif | |
1133 | ||
1134 | #ifdef DOSTORESTATE39 | |
1135 | SHA1_RECOMPRESS(39) | |
1136 | #endif | |
1137 | ||
1138 | #ifdef DOSTORESTATE40 | |
1139 | SHA1_RECOMPRESS(40) | |
1140 | #endif | |
1141 | ||
1142 | #ifdef DOSTORESTATE41 | |
1143 | SHA1_RECOMPRESS(41) | |
1144 | #endif | |
1145 | ||
1146 | #ifdef DOSTORESTATE42 | |
1147 | SHA1_RECOMPRESS(42) | |
1148 | #endif | |
1149 | ||
1150 | #ifdef DOSTORESTATE43 | |
1151 | SHA1_RECOMPRESS(43) | |
1152 | #endif | |
1153 | ||
1154 | #ifdef DOSTORESTATE44 | |
1155 | SHA1_RECOMPRESS(44) | |
1156 | #endif | |
1157 | ||
1158 | #ifdef DOSTORESTATE45 | |
1159 | SHA1_RECOMPRESS(45) | |
1160 | #endif | |
1161 | ||
1162 | #ifdef DOSTORESTATE46 | |
1163 | SHA1_RECOMPRESS(46) | |
1164 | #endif | |
1165 | ||
1166 | #ifdef DOSTORESTATE47 | |
1167 | SHA1_RECOMPRESS(47) | |
1168 | #endif | |
1169 | ||
1170 | #ifdef DOSTORESTATE48 | |
1171 | SHA1_RECOMPRESS(48) | |
1172 | #endif | |
1173 | ||
1174 | #ifdef DOSTORESTATE49 | |
1175 | SHA1_RECOMPRESS(49) | |
1176 | #endif | |
1177 | ||
1178 | #ifdef DOSTORESTATE50 | |
1179 | SHA1_RECOMPRESS(50) | |
1180 | #endif | |
1181 | ||
1182 | #ifdef DOSTORESTATE51 | |
1183 | SHA1_RECOMPRESS(51) | |
1184 | #endif | |
1185 | ||
1186 | #ifdef DOSTORESTATE52 | |
1187 | SHA1_RECOMPRESS(52) | |
1188 | #endif | |
1189 | ||
1190 | #ifdef DOSTORESTATE53 | |
1191 | SHA1_RECOMPRESS(53) | |
1192 | #endif | |
1193 | ||
1194 | #ifdef DOSTORESTATE54 | |
1195 | SHA1_RECOMPRESS(54) | |
1196 | #endif | |
1197 | ||
1198 | #ifdef DOSTORESTATE55 | |
1199 | SHA1_RECOMPRESS(55) | |
1200 | #endif | |
1201 | ||
1202 | #ifdef DOSTORESTATE56 | |
1203 | SHA1_RECOMPRESS(56) | |
1204 | #endif | |
1205 | ||
1206 | #ifdef DOSTORESTATE57 | |
1207 | SHA1_RECOMPRESS(57) | |
1208 | #endif | |
1209 | ||
1210 | #ifdef DOSTORESTATE58 | |
1211 | SHA1_RECOMPRESS(58) | |
1212 | #endif | |
1213 | ||
1214 | #ifdef DOSTORESTATE59 | |
1215 | SHA1_RECOMPRESS(59) | |
1216 | #endif | |
1217 | ||
1218 | #ifdef DOSTORESTATE60 | |
1219 | SHA1_RECOMPRESS(60) | |
1220 | #endif | |
1221 | ||
1222 | #ifdef DOSTORESTATE61 | |
1223 | SHA1_RECOMPRESS(61) | |
1224 | #endif | |
1225 | ||
1226 | #ifdef DOSTORESTATE62 | |
1227 | SHA1_RECOMPRESS(62) | |
1228 | #endif | |
1229 | ||
1230 | #ifdef DOSTORESTATE63 | |
1231 | SHA1_RECOMPRESS(63) | |
1232 | #endif | |
1233 | ||
1234 | #ifdef DOSTORESTATE64 | |
1235 | SHA1_RECOMPRESS(64) | |
1236 | #endif | |
1237 | ||
1238 | #ifdef DOSTORESTATE65 | |
1239 | SHA1_RECOMPRESS(65) | |
1240 | #endif | |
1241 | ||
1242 | #ifdef DOSTORESTATE66 | |
1243 | SHA1_RECOMPRESS(66) | |
1244 | #endif | |
1245 | ||
1246 | #ifdef DOSTORESTATE67 | |
1247 | SHA1_RECOMPRESS(67) | |
1248 | #endif | |
1249 | ||
1250 | #ifdef DOSTORESTATE68 | |
1251 | SHA1_RECOMPRESS(68) | |
1252 | #endif | |
1253 | ||
1254 | #ifdef DOSTORESTATE69 | |
1255 | SHA1_RECOMPRESS(69) | |
1256 | #endif | |
1257 | ||
1258 | #ifdef DOSTORESTATE70 | |
1259 | SHA1_RECOMPRESS(70) | |
1260 | #endif | |
1261 | ||
1262 | #ifdef DOSTORESTATE71 | |
1263 | SHA1_RECOMPRESS(71) | |
1264 | #endif | |
1265 | ||
1266 | #ifdef DOSTORESTATE72 | |
1267 | SHA1_RECOMPRESS(72) | |
1268 | #endif | |
1269 | ||
1270 | #ifdef DOSTORESTATE73 | |
1271 | SHA1_RECOMPRESS(73) | |
1272 | #endif | |
1273 | ||
1274 | #ifdef DOSTORESTATE74 | |
1275 | SHA1_RECOMPRESS(74) | |
1276 | #endif | |
1277 | ||
1278 | #ifdef DOSTORESTATE75 | |
1279 | SHA1_RECOMPRESS(75) | |
1280 | #endif | |
1281 | ||
1282 | #ifdef DOSTORESTATE76 | |
1283 | SHA1_RECOMPRESS(76) | |
1284 | #endif | |
1285 | ||
1286 | #ifdef DOSTORESTATE77 | |
1287 | SHA1_RECOMPRESS(77) | |
1288 | #endif | |
1289 | ||
1290 | #ifdef DOSTORESTATE78 | |
1291 | SHA1_RECOMPRESS(78) | |
1292 | #endif | |
1293 | ||
1294 | #ifdef DOSTORESTATE79 | |
1295 | SHA1_RECOMPRESS(79) | |
1296 | #endif | |
1297 | ||
a0103914 ÆAB |
1298 | #ifdef _MSC_VER |
1299 | #pragma warning(pop) | |
1300 | #endif | |
1301 | ||
28dc98e3 JK |
1302 | static void sha1_recompression_step(uint32_t step, uint32_t ihvin[5], uint32_t ihvout[5], const uint32_t me2[80], const uint32_t state[5]) |
1303 | { | |
1304 | switch (step) | |
1305 | { | |
1306 | #ifdef DOSTORESTATE0 | |
1307 | case 0: | |
1308 | sha1recompress_fast_0(ihvin, ihvout, me2, state); | |
1309 | break; | |
1310 | #endif | |
1311 | #ifdef DOSTORESTATE1 | |
1312 | case 1: | |
1313 | sha1recompress_fast_1(ihvin, ihvout, me2, state); | |
1314 | break; | |
1315 | #endif | |
1316 | #ifdef DOSTORESTATE2 | |
1317 | case 2: | |
1318 | sha1recompress_fast_2(ihvin, ihvout, me2, state); | |
1319 | break; | |
1320 | #endif | |
1321 | #ifdef DOSTORESTATE3 | |
1322 | case 3: | |
1323 | sha1recompress_fast_3(ihvin, ihvout, me2, state); | |
1324 | break; | |
1325 | #endif | |
1326 | #ifdef DOSTORESTATE4 | |
1327 | case 4: | |
1328 | sha1recompress_fast_4(ihvin, ihvout, me2, state); | |
1329 | break; | |
1330 | #endif | |
1331 | #ifdef DOSTORESTATE5 | |
1332 | case 5: | |
1333 | sha1recompress_fast_5(ihvin, ihvout, me2, state); | |
1334 | break; | |
1335 | #endif | |
1336 | #ifdef DOSTORESTATE6 | |
1337 | case 6: | |
1338 | sha1recompress_fast_6(ihvin, ihvout, me2, state); | |
1339 | break; | |
1340 | #endif | |
1341 | #ifdef DOSTORESTATE7 | |
1342 | case 7: | |
1343 | sha1recompress_fast_7(ihvin, ihvout, me2, state); | |
1344 | break; | |
1345 | #endif | |
1346 | #ifdef DOSTORESTATE8 | |
1347 | case 8: | |
1348 | sha1recompress_fast_8(ihvin, ihvout, me2, state); | |
1349 | break; | |
1350 | #endif | |
1351 | #ifdef DOSTORESTATE9 | |
1352 | case 9: | |
1353 | sha1recompress_fast_9(ihvin, ihvout, me2, state); | |
1354 | break; | |
1355 | #endif | |
1356 | #ifdef DOSTORESTATE10 | |
1357 | case 10: | |
1358 | sha1recompress_fast_10(ihvin, ihvout, me2, state); | |
1359 | break; | |
1360 | #endif | |
1361 | #ifdef DOSTORESTATE11 | |
1362 | case 11: | |
1363 | sha1recompress_fast_11(ihvin, ihvout, me2, state); | |
1364 | break; | |
1365 | #endif | |
1366 | #ifdef DOSTORESTATE12 | |
1367 | case 12: | |
1368 | sha1recompress_fast_12(ihvin, ihvout, me2, state); | |
1369 | break; | |
1370 | #endif | |
1371 | #ifdef DOSTORESTATE13 | |
1372 | case 13: | |
1373 | sha1recompress_fast_13(ihvin, ihvout, me2, state); | |
1374 | break; | |
1375 | #endif | |
1376 | #ifdef DOSTORESTATE14 | |
1377 | case 14: | |
1378 | sha1recompress_fast_14(ihvin, ihvout, me2, state); | |
1379 | break; | |
1380 | #endif | |
1381 | #ifdef DOSTORESTATE15 | |
1382 | case 15: | |
1383 | sha1recompress_fast_15(ihvin, ihvout, me2, state); | |
1384 | break; | |
1385 | #endif | |
1386 | #ifdef DOSTORESTATE16 | |
1387 | case 16: | |
1388 | sha1recompress_fast_16(ihvin, ihvout, me2, state); | |
1389 | break; | |
1390 | #endif | |
1391 | #ifdef DOSTORESTATE17 | |
1392 | case 17: | |
1393 | sha1recompress_fast_17(ihvin, ihvout, me2, state); | |
1394 | break; | |
1395 | #endif | |
1396 | #ifdef DOSTORESTATE18 | |
1397 | case 18: | |
1398 | sha1recompress_fast_18(ihvin, ihvout, me2, state); | |
1399 | break; | |
1400 | #endif | |
1401 | #ifdef DOSTORESTATE19 | |
1402 | case 19: | |
1403 | sha1recompress_fast_19(ihvin, ihvout, me2, state); | |
1404 | break; | |
1405 | #endif | |
1406 | #ifdef DOSTORESTATE20 | |
1407 | case 20: | |
1408 | sha1recompress_fast_20(ihvin, ihvout, me2, state); | |
1409 | break; | |
1410 | #endif | |
1411 | #ifdef DOSTORESTATE21 | |
1412 | case 21: | |
1413 | sha1recompress_fast_21(ihvin, ihvout, me2, state); | |
1414 | break; | |
1415 | #endif | |
1416 | #ifdef DOSTORESTATE22 | |
1417 | case 22: | |
1418 | sha1recompress_fast_22(ihvin, ihvout, me2, state); | |
1419 | break; | |
1420 | #endif | |
1421 | #ifdef DOSTORESTATE23 | |
1422 | case 23: | |
1423 | sha1recompress_fast_23(ihvin, ihvout, me2, state); | |
1424 | break; | |
1425 | #endif | |
1426 | #ifdef DOSTORESTATE24 | |
1427 | case 24: | |
1428 | sha1recompress_fast_24(ihvin, ihvout, me2, state); | |
1429 | break; | |
1430 | #endif | |
1431 | #ifdef DOSTORESTATE25 | |
1432 | case 25: | |
1433 | sha1recompress_fast_25(ihvin, ihvout, me2, state); | |
1434 | break; | |
1435 | #endif | |
1436 | #ifdef DOSTORESTATE26 | |
1437 | case 26: | |
1438 | sha1recompress_fast_26(ihvin, ihvout, me2, state); | |
1439 | break; | |
1440 | #endif | |
1441 | #ifdef DOSTORESTATE27 | |
1442 | case 27: | |
1443 | sha1recompress_fast_27(ihvin, ihvout, me2, state); | |
1444 | break; | |
1445 | #endif | |
1446 | #ifdef DOSTORESTATE28 | |
1447 | case 28: | |
1448 | sha1recompress_fast_28(ihvin, ihvout, me2, state); | |
1449 | break; | |
1450 | #endif | |
1451 | #ifdef DOSTORESTATE29 | |
1452 | case 29: | |
1453 | sha1recompress_fast_29(ihvin, ihvout, me2, state); | |
1454 | break; | |
1455 | #endif | |
1456 | #ifdef DOSTORESTATE30 | |
1457 | case 30: | |
1458 | sha1recompress_fast_30(ihvin, ihvout, me2, state); | |
1459 | break; | |
1460 | #endif | |
1461 | #ifdef DOSTORESTATE31 | |
1462 | case 31: | |
1463 | sha1recompress_fast_31(ihvin, ihvout, me2, state); | |
1464 | break; | |
1465 | #endif | |
1466 | #ifdef DOSTORESTATE32 | |
1467 | case 32: | |
1468 | sha1recompress_fast_32(ihvin, ihvout, me2, state); | |
1469 | break; | |
1470 | #endif | |
1471 | #ifdef DOSTORESTATE33 | |
1472 | case 33: | |
1473 | sha1recompress_fast_33(ihvin, ihvout, me2, state); | |
1474 | break; | |
1475 | #endif | |
1476 | #ifdef DOSTORESTATE34 | |
1477 | case 34: | |
1478 | sha1recompress_fast_34(ihvin, ihvout, me2, state); | |
1479 | break; | |
1480 | #endif | |
1481 | #ifdef DOSTORESTATE35 | |
1482 | case 35: | |
1483 | sha1recompress_fast_35(ihvin, ihvout, me2, state); | |
1484 | break; | |
1485 | #endif | |
1486 | #ifdef DOSTORESTATE36 | |
1487 | case 36: | |
1488 | sha1recompress_fast_36(ihvin, ihvout, me2, state); | |
1489 | break; | |
1490 | #endif | |
1491 | #ifdef DOSTORESTATE37 | |
1492 | case 37: | |
1493 | sha1recompress_fast_37(ihvin, ihvout, me2, state); | |
1494 | break; | |
1495 | #endif | |
1496 | #ifdef DOSTORESTATE38 | |
1497 | case 38: | |
1498 | sha1recompress_fast_38(ihvin, ihvout, me2, state); | |
1499 | break; | |
1500 | #endif | |
1501 | #ifdef DOSTORESTATE39 | |
1502 | case 39: | |
1503 | sha1recompress_fast_39(ihvin, ihvout, me2, state); | |
1504 | break; | |
1505 | #endif | |
1506 | #ifdef DOSTORESTATE40 | |
1507 | case 40: | |
1508 | sha1recompress_fast_40(ihvin, ihvout, me2, state); | |
1509 | break; | |
1510 | #endif | |
1511 | #ifdef DOSTORESTATE41 | |
1512 | case 41: | |
1513 | sha1recompress_fast_41(ihvin, ihvout, me2, state); | |
1514 | break; | |
1515 | #endif | |
1516 | #ifdef DOSTORESTATE42 | |
1517 | case 42: | |
1518 | sha1recompress_fast_42(ihvin, ihvout, me2, state); | |
1519 | break; | |
1520 | #endif | |
1521 | #ifdef DOSTORESTATE43 | |
1522 | case 43: | |
1523 | sha1recompress_fast_43(ihvin, ihvout, me2, state); | |
1524 | break; | |
1525 | #endif | |
1526 | #ifdef DOSTORESTATE44 | |
1527 | case 44: | |
1528 | sha1recompress_fast_44(ihvin, ihvout, me2, state); | |
1529 | break; | |
1530 | #endif | |
1531 | #ifdef DOSTORESTATE45 | |
1532 | case 45: | |
1533 | sha1recompress_fast_45(ihvin, ihvout, me2, state); | |
1534 | break; | |
1535 | #endif | |
1536 | #ifdef DOSTORESTATE46 | |
1537 | case 46: | |
1538 | sha1recompress_fast_46(ihvin, ihvout, me2, state); | |
1539 | break; | |
1540 | #endif | |
1541 | #ifdef DOSTORESTATE47 | |
1542 | case 47: | |
1543 | sha1recompress_fast_47(ihvin, ihvout, me2, state); | |
1544 | break; | |
1545 | #endif | |
1546 | #ifdef DOSTORESTATE48 | |
1547 | case 48: | |
1548 | sha1recompress_fast_48(ihvin, ihvout, me2, state); | |
1549 | break; | |
1550 | #endif | |
1551 | #ifdef DOSTORESTATE49 | |
1552 | case 49: | |
1553 | sha1recompress_fast_49(ihvin, ihvout, me2, state); | |
1554 | break; | |
1555 | #endif | |
1556 | #ifdef DOSTORESTATE50 | |
1557 | case 50: | |
1558 | sha1recompress_fast_50(ihvin, ihvout, me2, state); | |
1559 | break; | |
1560 | #endif | |
1561 | #ifdef DOSTORESTATE51 | |
1562 | case 51: | |
1563 | sha1recompress_fast_51(ihvin, ihvout, me2, state); | |
1564 | break; | |
1565 | #endif | |
1566 | #ifdef DOSTORESTATE52 | |
1567 | case 52: | |
1568 | sha1recompress_fast_52(ihvin, ihvout, me2, state); | |
1569 | break; | |
1570 | #endif | |
1571 | #ifdef DOSTORESTATE53 | |
1572 | case 53: | |
1573 | sha1recompress_fast_53(ihvin, ihvout, me2, state); | |
1574 | break; | |
1575 | #endif | |
1576 | #ifdef DOSTORESTATE54 | |
1577 | case 54: | |
1578 | sha1recompress_fast_54(ihvin, ihvout, me2, state); | |
1579 | break; | |
1580 | #endif | |
1581 | #ifdef DOSTORESTATE55 | |
1582 | case 55: | |
1583 | sha1recompress_fast_55(ihvin, ihvout, me2, state); | |
1584 | break; | |
1585 | #endif | |
1586 | #ifdef DOSTORESTATE56 | |
1587 | case 56: | |
1588 | sha1recompress_fast_56(ihvin, ihvout, me2, state); | |
1589 | break; | |
1590 | #endif | |
1591 | #ifdef DOSTORESTATE57 | |
1592 | case 57: | |
1593 | sha1recompress_fast_57(ihvin, ihvout, me2, state); | |
1594 | break; | |
1595 | #endif | |
1596 | #ifdef DOSTORESTATE58 | |
1597 | case 58: | |
1598 | sha1recompress_fast_58(ihvin, ihvout, me2, state); | |
1599 | break; | |
1600 | #endif | |
1601 | #ifdef DOSTORESTATE59 | |
1602 | case 59: | |
1603 | sha1recompress_fast_59(ihvin, ihvout, me2, state); | |
1604 | break; | |
1605 | #endif | |
1606 | #ifdef DOSTORESTATE60 | |
1607 | case 60: | |
1608 | sha1recompress_fast_60(ihvin, ihvout, me2, state); | |
1609 | break; | |
1610 | #endif | |
1611 | #ifdef DOSTORESTATE61 | |
1612 | case 61: | |
1613 | sha1recompress_fast_61(ihvin, ihvout, me2, state); | |
1614 | break; | |
1615 | #endif | |
1616 | #ifdef DOSTORESTATE62 | |
1617 | case 62: | |
1618 | sha1recompress_fast_62(ihvin, ihvout, me2, state); | |
1619 | break; | |
1620 | #endif | |
1621 | #ifdef DOSTORESTATE63 | |
1622 | case 63: | |
1623 | sha1recompress_fast_63(ihvin, ihvout, me2, state); | |
1624 | break; | |
1625 | #endif | |
1626 | #ifdef DOSTORESTATE64 | |
1627 | case 64: | |
1628 | sha1recompress_fast_64(ihvin, ihvout, me2, state); | |
1629 | break; | |
1630 | #endif | |
1631 | #ifdef DOSTORESTATE65 | |
1632 | case 65: | |
1633 | sha1recompress_fast_65(ihvin, ihvout, me2, state); | |
1634 | break; | |
1635 | #endif | |
1636 | #ifdef DOSTORESTATE66 | |
1637 | case 66: | |
1638 | sha1recompress_fast_66(ihvin, ihvout, me2, state); | |
1639 | break; | |
1640 | #endif | |
1641 | #ifdef DOSTORESTATE67 | |
1642 | case 67: | |
1643 | sha1recompress_fast_67(ihvin, ihvout, me2, state); | |
1644 | break; | |
1645 | #endif | |
1646 | #ifdef DOSTORESTATE68 | |
1647 | case 68: | |
1648 | sha1recompress_fast_68(ihvin, ihvout, me2, state); | |
1649 | break; | |
1650 | #endif | |
1651 | #ifdef DOSTORESTATE69 | |
1652 | case 69: | |
1653 | sha1recompress_fast_69(ihvin, ihvout, me2, state); | |
1654 | break; | |
1655 | #endif | |
1656 | #ifdef DOSTORESTATE70 | |
1657 | case 70: | |
1658 | sha1recompress_fast_70(ihvin, ihvout, me2, state); | |
1659 | break; | |
1660 | #endif | |
1661 | #ifdef DOSTORESTATE71 | |
1662 | case 71: | |
1663 | sha1recompress_fast_71(ihvin, ihvout, me2, state); | |
1664 | break; | |
1665 | #endif | |
1666 | #ifdef DOSTORESTATE72 | |
1667 | case 72: | |
1668 | sha1recompress_fast_72(ihvin, ihvout, me2, state); | |
1669 | break; | |
1670 | #endif | |
1671 | #ifdef DOSTORESTATE73 | |
1672 | case 73: | |
1673 | sha1recompress_fast_73(ihvin, ihvout, me2, state); | |
1674 | break; | |
1675 | #endif | |
1676 | #ifdef DOSTORESTATE74 | |
1677 | case 74: | |
1678 | sha1recompress_fast_74(ihvin, ihvout, me2, state); | |
1679 | break; | |
1680 | #endif | |
1681 | #ifdef DOSTORESTATE75 | |
1682 | case 75: | |
1683 | sha1recompress_fast_75(ihvin, ihvout, me2, state); | |
1684 | break; | |
1685 | #endif | |
1686 | #ifdef DOSTORESTATE76 | |
1687 | case 76: | |
1688 | sha1recompress_fast_76(ihvin, ihvout, me2, state); | |
1689 | break; | |
1690 | #endif | |
1691 | #ifdef DOSTORESTATE77 | |
1692 | case 77: | |
1693 | sha1recompress_fast_77(ihvin, ihvout, me2, state); | |
1694 | break; | |
1695 | #endif | |
1696 | #ifdef DOSTORESTATE78 | |
1697 | case 78: | |
1698 | sha1recompress_fast_78(ihvin, ihvout, me2, state); | |
1699 | break; | |
1700 | #endif | |
1701 | #ifdef DOSTORESTATE79 | |
1702 | case 79: | |
1703 | sha1recompress_fast_79(ihvin, ihvout, me2, state); | |
1704 | break; | |
1705 | #endif | |
1706 | default: | |
1707 | abort(); | |
1708 | } | |
1709 | ||
1710 | } | |
1711 | ||
1712 | ||
1713 | ||
1714 | static void sha1_process(SHA1_CTX* ctx, const uint32_t block[16]) | |
1715 | { | |
1716 | unsigned i, j; | |
1717 | uint32_t ubc_dv_mask[DVMASKSIZE] = { 0xFFFFFFFF }; | |
1718 | uint32_t ihvtmp[5]; | |
1719 | ||
1720 | ctx->ihv1[0] = ctx->ihv[0]; | |
1721 | ctx->ihv1[1] = ctx->ihv[1]; | |
1722 | ctx->ihv1[2] = ctx->ihv[2]; | |
1723 | ctx->ihv1[3] = ctx->ihv[3]; | |
1724 | ctx->ihv1[4] = ctx->ihv[4]; | |
1725 | ||
1726 | sha1_compression_states(ctx->ihv, block, ctx->m1, ctx->states); | |
1727 | ||
1728 | if (ctx->detect_coll) | |
1729 | { | |
1730 | if (ctx->ubc_check) | |
1731 | { | |
1732 | ubc_check(ctx->m1, ubc_dv_mask); | |
1733 | } | |
1734 | ||
1735 | if (ubc_dv_mask[0] != 0) | |
1736 | { | |
1737 | for (i = 0; sha1_dvs[i].dvType != 0; ++i) | |
1738 | { | |
1739 | if (ubc_dv_mask[0] & ((uint32_t)(1) << sha1_dvs[i].maskb)) | |
1740 | { | |
1741 | for (j = 0; j < 80; ++j) | |
1742 | ctx->m2[j] = ctx->m1[j] ^ sha1_dvs[i].dm[j]; | |
1743 | ||
1744 | sha1_recompression_step(sha1_dvs[i].testt, ctx->ihv2, ihvtmp, ctx->m2, ctx->states[sha1_dvs[i].testt]); | |
1745 | ||
1746 | /* to verify SHA-1 collision detection code with collisions for reduced-step SHA-1 */ | |
1747 | if ((0 == ((ihvtmp[0] ^ ctx->ihv[0]) | (ihvtmp[1] ^ ctx->ihv[1]) | (ihvtmp[2] ^ ctx->ihv[2]) | (ihvtmp[3] ^ ctx->ihv[3]) | (ihvtmp[4] ^ ctx->ihv[4]))) | |
1748 | || (ctx->reduced_round_coll && 0==((ctx->ihv1[0] ^ ctx->ihv2[0]) | (ctx->ihv1[1] ^ ctx->ihv2[1]) | (ctx->ihv1[2] ^ ctx->ihv2[2]) | (ctx->ihv1[3] ^ ctx->ihv2[3]) | (ctx->ihv1[4] ^ ctx->ihv2[4])))) | |
1749 | { | |
1750 | ctx->found_collision = 1; | |
1751 | ||
1752 | if (ctx->safe_hash) | |
1753 | { | |
1754 | sha1_compression_W(ctx->ihv, ctx->m1); | |
1755 | sha1_compression_W(ctx->ihv, ctx->m1); | |
1756 | } | |
1757 | ||
1758 | break; | |
1759 | } | |
1760 | } | |
1761 | } | |
1762 | } | |
1763 | } | |
1764 | } | |
1765 | ||
1766 | void SHA1DCInit(SHA1_CTX* ctx) | |
1767 | { | |
1768 | ctx->total = 0; | |
1769 | ctx->ihv[0] = 0x67452301; | |
1770 | ctx->ihv[1] = 0xEFCDAB89; | |
1771 | ctx->ihv[2] = 0x98BADCFE; | |
1772 | ctx->ihv[3] = 0x10325476; | |
1773 | ctx->ihv[4] = 0xC3D2E1F0; | |
1774 | ctx->found_collision = 0; | |
a0103914 | 1775 | ctx->safe_hash = SHA1DC_INIT_SAFE_HASH_DEFAULT; |
28dc98e3 JK |
1776 | ctx->ubc_check = 1; |
1777 | ctx->detect_coll = 1; | |
1778 | ctx->reduced_round_coll = 0; | |
1779 | ctx->callback = NULL; | |
1780 | } | |
1781 | ||
1782 | void SHA1DCSetSafeHash(SHA1_CTX* ctx, int safehash) | |
1783 | { | |
1784 | if (safehash) | |
1785 | ctx->safe_hash = 1; | |
1786 | else | |
1787 | ctx->safe_hash = 0; | |
1788 | } | |
1789 | ||
1790 | ||
1791 | void SHA1DCSetUseUBC(SHA1_CTX* ctx, int ubc_check) | |
1792 | { | |
1793 | if (ubc_check) | |
1794 | ctx->ubc_check = 1; | |
1795 | else | |
1796 | ctx->ubc_check = 0; | |
1797 | } | |
1798 | ||
1799 | void SHA1DCSetUseDetectColl(SHA1_CTX* ctx, int detect_coll) | |
1800 | { | |
1801 | if (detect_coll) | |
1802 | ctx->detect_coll = 1; | |
1803 | else | |
1804 | ctx->detect_coll = 0; | |
1805 | } | |
1806 | ||
1807 | void SHA1DCSetDetectReducedRoundCollision(SHA1_CTX* ctx, int reduced_round_coll) | |
1808 | { | |
1809 | if (reduced_round_coll) | |
1810 | ctx->reduced_round_coll = 1; | |
1811 | else | |
1812 | ctx->reduced_round_coll = 0; | |
1813 | } | |
1814 | ||
1815 | void SHA1DCSetCallback(SHA1_CTX* ctx, collision_block_callback callback) | |
1816 | { | |
1817 | ctx->callback = callback; | |
1818 | } | |
1819 | ||
1820 | void SHA1DCUpdate(SHA1_CTX* ctx, const char* buf, size_t len) | |
1821 | { | |
1822 | unsigned left, fill; | |
a0103914 | 1823 | |
28dc98e3 JK |
1824 | if (len == 0) |
1825 | return; | |
1826 | ||
1827 | left = ctx->total & 63; | |
1828 | fill = 64 - left; | |
1829 | ||
1830 | if (left && len >= fill) | |
1831 | { | |
1832 | ctx->total += fill; | |
1833 | memcpy(ctx->buffer + left, buf, fill); | |
1834 | sha1_process(ctx, (uint32_t*)(ctx->buffer)); | |
1835 | buf += fill; | |
1836 | len -= fill; | |
1837 | left = 0; | |
1838 | } | |
1839 | while (len >= 64) | |
1840 | { | |
1841 | ctx->total += 64; | |
a0103914 ÆAB |
1842 | |
1843 | #if defined(SHA1DC_ALLOW_UNALIGNED_ACCESS) | |
28dc98e3 | 1844 | sha1_process(ctx, (uint32_t*)(buf)); |
a0103914 ÆAB |
1845 | #else |
1846 | memcpy(ctx->buffer, buf, 64); | |
1847 | sha1_process(ctx, (uint32_t*)(ctx->buffer)); | |
1848 | #endif /* defined(SHA1DC_ALLOW_UNALIGNED_ACCESS) */ | |
28dc98e3 JK |
1849 | buf += 64; |
1850 | len -= 64; | |
1851 | } | |
1852 | if (len > 0) | |
1853 | { | |
1854 | ctx->total += len; | |
1855 | memcpy(ctx->buffer + left, buf, len); | |
1856 | } | |
1857 | } | |
1858 | ||
1859 | static const unsigned char sha1_padding[64] = | |
1860 | { | |
1861 | 0x80, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, | |
1862 | 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, | |
1863 | 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, | |
1864 | 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 | |
1865 | }; | |
1866 | ||
1867 | int SHA1DCFinal(unsigned char output[20], SHA1_CTX *ctx) | |
1868 | { | |
1869 | uint32_t last = ctx->total & 63; | |
1870 | uint32_t padn = (last < 56) ? (56 - last) : (120 - last); | |
1871 | uint64_t total; | |
1872 | SHA1DCUpdate(ctx, (const char*)(sha1_padding), padn); | |
1873 | ||
1874 | total = ctx->total - padn; | |
1875 | total <<= 3; | |
1876 | ctx->buffer[56] = (unsigned char)(total >> 56); | |
1877 | ctx->buffer[57] = (unsigned char)(total >> 48); | |
1878 | ctx->buffer[58] = (unsigned char)(total >> 40); | |
1879 | ctx->buffer[59] = (unsigned char)(total >> 32); | |
1880 | ctx->buffer[60] = (unsigned char)(total >> 24); | |
1881 | ctx->buffer[61] = (unsigned char)(total >> 16); | |
1882 | ctx->buffer[62] = (unsigned char)(total >> 8); | |
1883 | ctx->buffer[63] = (unsigned char)(total); | |
1884 | sha1_process(ctx, (uint32_t*)(ctx->buffer)); | |
1885 | output[0] = (unsigned char)(ctx->ihv[0] >> 24); | |
1886 | output[1] = (unsigned char)(ctx->ihv[0] >> 16); | |
1887 | output[2] = (unsigned char)(ctx->ihv[0] >> 8); | |
1888 | output[3] = (unsigned char)(ctx->ihv[0]); | |
1889 | output[4] = (unsigned char)(ctx->ihv[1] >> 24); | |
1890 | output[5] = (unsigned char)(ctx->ihv[1] >> 16); | |
1891 | output[6] = (unsigned char)(ctx->ihv[1] >> 8); | |
1892 | output[7] = (unsigned char)(ctx->ihv[1]); | |
1893 | output[8] = (unsigned char)(ctx->ihv[2] >> 24); | |
1894 | output[9] = (unsigned char)(ctx->ihv[2] >> 16); | |
1895 | output[10] = (unsigned char)(ctx->ihv[2] >> 8); | |
1896 | output[11] = (unsigned char)(ctx->ihv[2]); | |
1897 | output[12] = (unsigned char)(ctx->ihv[3] >> 24); | |
1898 | output[13] = (unsigned char)(ctx->ihv[3] >> 16); | |
1899 | output[14] = (unsigned char)(ctx->ihv[3] >> 8); | |
1900 | output[15] = (unsigned char)(ctx->ihv[3]); | |
1901 | output[16] = (unsigned char)(ctx->ihv[4] >> 24); | |
1902 | output[17] = (unsigned char)(ctx->ihv[4] >> 16); | |
1903 | output[18] = (unsigned char)(ctx->ihv[4] >> 8); | |
1904 | output[19] = (unsigned char)(ctx->ihv[4]); | |
1905 | return ctx->found_collision; | |
1906 | } | |
8325e43b | 1907 | |
a0103914 ÆAB |
1908 | #ifdef SHA1DC_CUSTOM_TRAILING_INCLUDE_SHA1_C |
1909 | #include SHA1DC_CUSTOM_TRAILING_INCLUDE_SHA1_C | |
1910 | #endif |