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
8 #ifndef SHA1DC_NO_STANDARD_INCLUDES
13 #include <sys/types.h> /* make sure macros like _BIG_ENDIAN visible */
16 #ifdef SHA1DC_CUSTOM_INCLUDE_SHA1_C
17 #include SHA1DC_CUSTOM_INCLUDE_SHA1_C
20 #ifndef SHA1DC_INIT_SAFE_HASH_DEFAULT
21 #define SHA1DC_INIT_SAFE_HASH_DEFAULT 1
25 #include "ubc_check.h"
27 #if (defined(__amd64__) || defined(__amd64) || defined(__x86_64__) || defined(__x86_64) || \
28 defined(i386) || defined(__i386) || defined(__i386__) || defined(__i486__) || \
29 defined(__i586__) || defined(__i686__) || defined(_M_IX86) || defined(__X86__) || \
30 defined(_X86_) || defined(__THW_INTEL__) || defined(__I86__) || defined(__INTEL__) || \
31 defined(__386) || defined(_M_X64) || defined(_M_AMD64))
32 #define SHA1DC_ON_INTEL_LIKE_PROCESSOR
36 Because Little-Endian architectures are most common,
37 we only set SHA1DC_BIGENDIAN if one of these conditions is met.
38 Note that all MSFT platforms are little endian,
39 so none of these will be defined under the MSC compiler.
40 If you are compiling on a big endian platform and your compiler does not define one of these,
41 you will have to add whatever macros your tool chain defines to indicate Big-Endianness.
44 #if defined(__BYTE_ORDER__) && defined(__ORDER_BIG_ENDIAN__)
46 * Should detect Big Endian under GCC since at least 4.6.0 (gcc svn
48 * https://gcc.gnu.org/onlinedocs/cpp/Common-Predefined-Macros.html
50 * This also works under clang since 3.2, it copied the GCC-ism. See
51 * clang.git's 3b198a97d2 ("Preprocessor: add __BYTE_ORDER__
52 * predefined macro", 2012-07-27)
54 #if __BYTE_ORDER__ == __ORDER_BIG_ENDIAN__
55 #define SHA1DC_BIGENDIAN
58 /* Not under GCC-alike */
59 #elif defined(__BYTE_ORDER) && defined(__BIG_ENDIAN)
61 * Should detect Big Endian under glibc.git since 14245eb70e ("entered
62 * into RCS", 1992-11-25). Defined in <endian.h> which will have been
63 * brought in by standard headers. See glibc.git and
64 * https://sourceforge.net/p/predef/wiki/Endianness/
66 #if __BYTE_ORDER == __BIG_ENDIAN
67 #define SHA1DC_BIGENDIAN
70 /* Not under GCC-alike or glibc */
71 #elif defined(_BYTE_ORDER) && defined(_BIG_ENDIAN) && defined(_LITTLE_ENDIAN)
73 * *BSD and newlib (embedded linux, cygwin, etc).
74 * the defined(_BIG_ENDIAN) && defined(_LITTLE_ENDIAN) part prevents
75 * this condition from matching with Solaris/sparc.
76 * (Solaris defines only one endian macro)
78 #if _BYTE_ORDER == _BIG_ENDIAN
79 #define SHA1DC_BIGENDIAN
82 /* Not under GCC-alike or glibc or *BSD or newlib */
83 #elif (defined(__ARMEB__) || defined(__THUMBEB__) || defined(__AARCH64EB__) || \
84 defined(__MIPSEB__) || defined(__MIPSEB) || defined(_MIPSEB) || \
87 * Should define Big Endian for a whitelist of known processors. See
88 * https://sourceforge.net/p/predef/wiki/Endianness/ and
89 * http://www.oracle.com/technetwork/server-storage/solaris/portingtosolaris-138514.html
91 #define SHA1DC_BIGENDIAN
93 /* Not under GCC-alike or glibc or *BSD or newlib or <processor whitelist> */
94 #elif (defined(_AIX) || defined(__hpux))
97 * Defines Big Endian on a whitelist of OSs that are known to be Big
99 * https://public-inbox.org/git/93056823-2740-d072-1ebd-46b440b33d7e@felt.demon.nl/
101 #define SHA1DC_BIGENDIAN
103 /* Not under GCC-alike or glibc or *BSD or newlib or <processor whitelist> or <os whitelist> */
104 #elif defined(SHA1DC_ON_INTEL_LIKE_PROCESSOR)
106 * As a last resort before we do anything else we're not 100% sure
107 * about below, we blacklist specific processors here. We could add
108 * more, see e.g. https://wiki.debian.org/ArchitectureSpecificsMemo
110 #else /* Not under GCC-alike or glibc or *BSD or newlib or <processor whitelist> or <os whitelist> or <processor blacklist> */
112 /* We do nothing more here for now */
113 /*#error "Uncomment this to see if you fall through all the detection"*/
115 #endif /* Big Endian detection */
117 #if (defined(SHA1DC_FORCE_LITTLEENDIAN) && defined(SHA1DC_BIGENDIAN))
118 #undef SHA1DC_BIGENDIAN
120 #if (defined(SHA1DC_FORCE_BIGENDIAN) && !defined(SHA1DC_BIGENDIAN))
121 #define SHA1DC_BIGENDIAN
123 /*ENDIANNESS SELECTION*/
125 #ifndef SHA1DC_FORCE_ALIGNED_ACCESS
126 #if defined(SHA1DC_FORCE_UNALIGNED_ACCESS) || defined(SHA1DC_ON_INTEL_LIKE_PROCESSOR)
127 #define SHA1DC_ALLOW_UNALIGNED_ACCESS
128 #endif /*UNALIGNED ACCESS DETECTION*/
129 #endif /*FORCE ALIGNED ACCESS*/
131 #define rotate_right(x,n) (((x)>>(n))|((x)<<(32-(n))))
132 #define rotate_left(x,n) (((x)<<(n))|((x)>>(32-(n))))
134 #define sha1_bswap32(x) \
135 {x = ((x << 8) & 0xFF00FF00) | ((x >> 8) & 0xFF00FF); x = (x << 16) | (x >> 16);}
137 #define sha1_mix(W, t) (rotate_left(W[t - 3] ^ W[t - 8] ^ W[t - 14] ^ W[t - 16], 1))
139 #ifdef SHA1DC_BIGENDIAN
140 #define sha1_load(m, t, temp) { temp = m[t]; }
142 #define sha1_load(m, t, temp) { temp = m[t]; sha1_bswap32(temp); }
145 #define sha1_store(W, t, x) *(volatile uint32_t *)&W[t] = x
147 #define sha1_f1(b,c,d) ((d)^((b)&((c)^(d))))
148 #define sha1_f2(b,c,d) ((b)^(c)^(d))
149 #define sha1_f3(b,c,d) (((b)&(c))+((d)&((b)^(c))))
150 #define sha1_f4(b,c,d) ((b)^(c)^(d))
152 #define HASHCLASH_SHA1COMPRESS_ROUND1_STEP(a, b, c, d, e, m, t) \
153 { e += rotate_left(a, 5) + sha1_f1(b,c,d) + 0x5A827999 + m[t]; b = rotate_left(b, 30); }
154 #define HASHCLASH_SHA1COMPRESS_ROUND2_STEP(a, b, c, d, e, m, t) \
155 { e += rotate_left(a, 5) + sha1_f2(b,c,d) + 0x6ED9EBA1 + m[t]; b = rotate_left(b, 30); }
156 #define HASHCLASH_SHA1COMPRESS_ROUND3_STEP(a, b, c, d, e, m, t) \
157 { e += rotate_left(a, 5) + sha1_f3(b,c,d) + 0x8F1BBCDC + m[t]; b = rotate_left(b, 30); }
158 #define HASHCLASH_SHA1COMPRESS_ROUND4_STEP(a, b, c, d, e, m, t) \
159 { e += rotate_left(a, 5) + sha1_f4(b,c,d) + 0xCA62C1D6 + m[t]; b = rotate_left(b, 30); }
161 #define HASHCLASH_SHA1COMPRESS_ROUND1_STEP_BW(a, b, c, d, e, m, t) \
162 { b = rotate_right(b, 30); e -= rotate_left(a, 5) + sha1_f1(b,c,d) + 0x5A827999 + m[t]; }
163 #define HASHCLASH_SHA1COMPRESS_ROUND2_STEP_BW(a, b, c, d, e, m, t) \
164 { b = rotate_right(b, 30); e -= rotate_left(a, 5) + sha1_f2(b,c,d) + 0x6ED9EBA1 + m[t]; }
165 #define HASHCLASH_SHA1COMPRESS_ROUND3_STEP_BW(a, b, c, d, e, m, t) \
166 { b = rotate_right(b, 30); e -= rotate_left(a, 5) + sha1_f3(b,c,d) + 0x8F1BBCDC + m[t]; }
167 #define HASHCLASH_SHA1COMPRESS_ROUND4_STEP_BW(a, b, c, d, e, m, t) \
168 { b = rotate_right(b, 30); e -= rotate_left(a, 5) + sha1_f4(b,c,d) + 0xCA62C1D6 + m[t]; }
170 #define SHA1COMPRESS_FULL_ROUND1_STEP_LOAD(a, b, c, d, e, m, W, t, temp) \
171 {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 #define SHA1COMPRESS_FULL_ROUND1_STEP_EXPAND(a, b, c, d, e, W, t, temp) \
174 {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 #define SHA1COMPRESS_FULL_ROUND2_STEP(a, b, c, d, e, W, t, temp) \
177 {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 #define SHA1COMPRESS_FULL_ROUND3_STEP(a, b, c, d, e, W, t, temp) \
180 {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 #define SHA1COMPRESS_FULL_ROUND4_STEP(a, b, c, d, e, W, t, temp) \
183 {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); }
186 #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 #ifdef BUILDNOCOLLDETECTSHA1COMPRESSION
189 void sha1_compression(uint32_t ihv
[5], const uint32_t m
[16])
195 memcpy(W
, m
, 16 * 4);
196 for (i
= 16; i
< 80; ++i
)
197 W
[i
] = sha1_mix(W
, i
);
199 a
= ihv
[0]; b
= ihv
[1]; c
= ihv
[2]; d
= ihv
[3]; e
= ihv
[4];
201 HASHCLASH_SHA1COMPRESS_ROUND1_STEP(a
, b
, c
, d
, e
, W
, 0);
202 HASHCLASH_SHA1COMPRESS_ROUND1_STEP(e
, a
, b
, c
, d
, W
, 1);
203 HASHCLASH_SHA1COMPRESS_ROUND1_STEP(d
, e
, a
, b
, c
, W
, 2);
204 HASHCLASH_SHA1COMPRESS_ROUND1_STEP(c
, d
, e
, a
, b
, W
, 3);
205 HASHCLASH_SHA1COMPRESS_ROUND1_STEP(b
, c
, d
, e
, a
, W
, 4);
206 HASHCLASH_SHA1COMPRESS_ROUND1_STEP(a
, b
, c
, d
, e
, W
, 5);
207 HASHCLASH_SHA1COMPRESS_ROUND1_STEP(e
, a
, b
, c
, d
, W
, 6);
208 HASHCLASH_SHA1COMPRESS_ROUND1_STEP(d
, e
, a
, b
, c
, W
, 7);
209 HASHCLASH_SHA1COMPRESS_ROUND1_STEP(c
, d
, e
, a
, b
, W
, 8);
210 HASHCLASH_SHA1COMPRESS_ROUND1_STEP(b
, c
, d
, e
, a
, W
, 9);
211 HASHCLASH_SHA1COMPRESS_ROUND1_STEP(a
, b
, c
, d
, e
, W
, 10);
212 HASHCLASH_SHA1COMPRESS_ROUND1_STEP(e
, a
, b
, c
, d
, W
, 11);
213 HASHCLASH_SHA1COMPRESS_ROUND1_STEP(d
, e
, a
, b
, c
, W
, 12);
214 HASHCLASH_SHA1COMPRESS_ROUND1_STEP(c
, d
, e
, a
, b
, W
, 13);
215 HASHCLASH_SHA1COMPRESS_ROUND1_STEP(b
, c
, d
, e
, a
, W
, 14);
216 HASHCLASH_SHA1COMPRESS_ROUND1_STEP(a
, b
, c
, d
, e
, W
, 15);
217 HASHCLASH_SHA1COMPRESS_ROUND1_STEP(e
, a
, b
, c
, d
, W
, 16);
218 HASHCLASH_SHA1COMPRESS_ROUND1_STEP(d
, e
, a
, b
, c
, W
, 17);
219 HASHCLASH_SHA1COMPRESS_ROUND1_STEP(c
, d
, e
, a
, b
, W
, 18);
220 HASHCLASH_SHA1COMPRESS_ROUND1_STEP(b
, c
, d
, e
, a
, W
, 19);
222 HASHCLASH_SHA1COMPRESS_ROUND2_STEP(a
, b
, c
, d
, e
, W
, 20);
223 HASHCLASH_SHA1COMPRESS_ROUND2_STEP(e
, a
, b
, c
, d
, W
, 21);
224 HASHCLASH_SHA1COMPRESS_ROUND2_STEP(d
, e
, a
, b
, c
, W
, 22);
225 HASHCLASH_SHA1COMPRESS_ROUND2_STEP(c
, d
, e
, a
, b
, W
, 23);
226 HASHCLASH_SHA1COMPRESS_ROUND2_STEP(b
, c
, d
, e
, a
, W
, 24);
227 HASHCLASH_SHA1COMPRESS_ROUND2_STEP(a
, b
, c
, d
, e
, W
, 25);
228 HASHCLASH_SHA1COMPRESS_ROUND2_STEP(e
, a
, b
, c
, d
, W
, 26);
229 HASHCLASH_SHA1COMPRESS_ROUND2_STEP(d
, e
, a
, b
, c
, W
, 27);
230 HASHCLASH_SHA1COMPRESS_ROUND2_STEP(c
, d
, e
, a
, b
, W
, 28);
231 HASHCLASH_SHA1COMPRESS_ROUND2_STEP(b
, c
, d
, e
, a
, W
, 29);
232 HASHCLASH_SHA1COMPRESS_ROUND2_STEP(a
, b
, c
, d
, e
, W
, 30);
233 HASHCLASH_SHA1COMPRESS_ROUND2_STEP(e
, a
, b
, c
, d
, W
, 31);
234 HASHCLASH_SHA1COMPRESS_ROUND2_STEP(d
, e
, a
, b
, c
, W
, 32);
235 HASHCLASH_SHA1COMPRESS_ROUND2_STEP(c
, d
, e
, a
, b
, W
, 33);
236 HASHCLASH_SHA1COMPRESS_ROUND2_STEP(b
, c
, d
, e
, a
, W
, 34);
237 HASHCLASH_SHA1COMPRESS_ROUND2_STEP(a
, b
, c
, d
, e
, W
, 35);
238 HASHCLASH_SHA1COMPRESS_ROUND2_STEP(e
, a
, b
, c
, d
, W
, 36);
239 HASHCLASH_SHA1COMPRESS_ROUND2_STEP(d
, e
, a
, b
, c
, W
, 37);
240 HASHCLASH_SHA1COMPRESS_ROUND2_STEP(c
, d
, e
, a
, b
, W
, 38);
241 HASHCLASH_SHA1COMPRESS_ROUND2_STEP(b
, c
, d
, e
, a
, W
, 39);
243 HASHCLASH_SHA1COMPRESS_ROUND3_STEP(a
, b
, c
, d
, e
, W
, 40);
244 HASHCLASH_SHA1COMPRESS_ROUND3_STEP(e
, a
, b
, c
, d
, W
, 41);
245 HASHCLASH_SHA1COMPRESS_ROUND3_STEP(d
, e
, a
, b
, c
, W
, 42);
246 HASHCLASH_SHA1COMPRESS_ROUND3_STEP(c
, d
, e
, a
, b
, W
, 43);
247 HASHCLASH_SHA1COMPRESS_ROUND3_STEP(b
, c
, d
, e
, a
, W
, 44);
248 HASHCLASH_SHA1COMPRESS_ROUND3_STEP(a
, b
, c
, d
, e
, W
, 45);
249 HASHCLASH_SHA1COMPRESS_ROUND3_STEP(e
, a
, b
, c
, d
, W
, 46);
250 HASHCLASH_SHA1COMPRESS_ROUND3_STEP(d
, e
, a
, b
, c
, W
, 47);
251 HASHCLASH_SHA1COMPRESS_ROUND3_STEP(c
, d
, e
, a
, b
, W
, 48);
252 HASHCLASH_SHA1COMPRESS_ROUND3_STEP(b
, c
, d
, e
, a
, W
, 49);
253 HASHCLASH_SHA1COMPRESS_ROUND3_STEP(a
, b
, c
, d
, e
, W
, 50);
254 HASHCLASH_SHA1COMPRESS_ROUND3_STEP(e
, a
, b
, c
, d
, W
, 51);
255 HASHCLASH_SHA1COMPRESS_ROUND3_STEP(d
, e
, a
, b
, c
, W
, 52);
256 HASHCLASH_SHA1COMPRESS_ROUND3_STEP(c
, d
, e
, a
, b
, W
, 53);
257 HASHCLASH_SHA1COMPRESS_ROUND3_STEP(b
, c
, d
, e
, a
, W
, 54);
258 HASHCLASH_SHA1COMPRESS_ROUND3_STEP(a
, b
, c
, d
, e
, W
, 55);
259 HASHCLASH_SHA1COMPRESS_ROUND3_STEP(e
, a
, b
, c
, d
, W
, 56);
260 HASHCLASH_SHA1COMPRESS_ROUND3_STEP(d
, e
, a
, b
, c
, W
, 57);
261 HASHCLASH_SHA1COMPRESS_ROUND3_STEP(c
, d
, e
, a
, b
, W
, 58);
262 HASHCLASH_SHA1COMPRESS_ROUND3_STEP(b
, c
, d
, e
, a
, W
, 59);
264 HASHCLASH_SHA1COMPRESS_ROUND4_STEP(a
, b
, c
, d
, e
, W
, 60);
265 HASHCLASH_SHA1COMPRESS_ROUND4_STEP(e
, a
, b
, c
, d
, W
, 61);
266 HASHCLASH_SHA1COMPRESS_ROUND4_STEP(d
, e
, a
, b
, c
, W
, 62);
267 HASHCLASH_SHA1COMPRESS_ROUND4_STEP(c
, d
, e
, a
, b
, W
, 63);
268 HASHCLASH_SHA1COMPRESS_ROUND4_STEP(b
, c
, d
, e
, a
, W
, 64);
269 HASHCLASH_SHA1COMPRESS_ROUND4_STEP(a
, b
, c
, d
, e
, W
, 65);
270 HASHCLASH_SHA1COMPRESS_ROUND4_STEP(e
, a
, b
, c
, d
, W
, 66);
271 HASHCLASH_SHA1COMPRESS_ROUND4_STEP(d
, e
, a
, b
, c
, W
, 67);
272 HASHCLASH_SHA1COMPRESS_ROUND4_STEP(c
, d
, e
, a
, b
, W
, 68);
273 HASHCLASH_SHA1COMPRESS_ROUND4_STEP(b
, c
, d
, e
, a
, W
, 69);
274 HASHCLASH_SHA1COMPRESS_ROUND4_STEP(a
, b
, c
, d
, e
, W
, 70);
275 HASHCLASH_SHA1COMPRESS_ROUND4_STEP(e
, a
, b
, c
, d
, W
, 71);
276 HASHCLASH_SHA1COMPRESS_ROUND4_STEP(d
, e
, a
, b
, c
, W
, 72);
277 HASHCLASH_SHA1COMPRESS_ROUND4_STEP(c
, d
, e
, a
, b
, W
, 73);
278 HASHCLASH_SHA1COMPRESS_ROUND4_STEP(b
, c
, d
, e
, a
, W
, 74);
279 HASHCLASH_SHA1COMPRESS_ROUND4_STEP(a
, b
, c
, d
, e
, W
, 75);
280 HASHCLASH_SHA1COMPRESS_ROUND4_STEP(e
, a
, b
, c
, d
, W
, 76);
281 HASHCLASH_SHA1COMPRESS_ROUND4_STEP(d
, e
, a
, b
, c
, W
, 77);
282 HASHCLASH_SHA1COMPRESS_ROUND4_STEP(c
, d
, e
, a
, b
, W
, 78);
283 HASHCLASH_SHA1COMPRESS_ROUND4_STEP(b
, c
, d
, e
, a
, W
, 79);
285 ihv
[0] += a
; ihv
[1] += b
; ihv
[2] += c
; ihv
[3] += d
; ihv
[4] += e
;
287 #endif /*BUILDNOCOLLDETECTSHA1COMPRESSION*/
290 static void sha1_compression_W(uint32_t ihv
[5], const uint32_t W
[80])
292 uint32_t a
= ihv
[0], b
= ihv
[1], c
= ihv
[2], d
= ihv
[3], e
= ihv
[4];
294 HASHCLASH_SHA1COMPRESS_ROUND1_STEP(a
, b
, c
, d
, e
, W
, 0);
295 HASHCLASH_SHA1COMPRESS_ROUND1_STEP(e
, a
, b
, c
, d
, W
, 1);
296 HASHCLASH_SHA1COMPRESS_ROUND1_STEP(d
, e
, a
, b
, c
, W
, 2);
297 HASHCLASH_SHA1COMPRESS_ROUND1_STEP(c
, d
, e
, a
, b
, W
, 3);
298 HASHCLASH_SHA1COMPRESS_ROUND1_STEP(b
, c
, d
, e
, a
, W
, 4);
299 HASHCLASH_SHA1COMPRESS_ROUND1_STEP(a
, b
, c
, d
, e
, W
, 5);
300 HASHCLASH_SHA1COMPRESS_ROUND1_STEP(e
, a
, b
, c
, d
, W
, 6);
301 HASHCLASH_SHA1COMPRESS_ROUND1_STEP(d
, e
, a
, b
, c
, W
, 7);
302 HASHCLASH_SHA1COMPRESS_ROUND1_STEP(c
, d
, e
, a
, b
, W
, 8);
303 HASHCLASH_SHA1COMPRESS_ROUND1_STEP(b
, c
, d
, e
, a
, W
, 9);
304 HASHCLASH_SHA1COMPRESS_ROUND1_STEP(a
, b
, c
, d
, e
, W
, 10);
305 HASHCLASH_SHA1COMPRESS_ROUND1_STEP(e
, a
, b
, c
, d
, W
, 11);
306 HASHCLASH_SHA1COMPRESS_ROUND1_STEP(d
, e
, a
, b
, c
, W
, 12);
307 HASHCLASH_SHA1COMPRESS_ROUND1_STEP(c
, d
, e
, a
, b
, W
, 13);
308 HASHCLASH_SHA1COMPRESS_ROUND1_STEP(b
, c
, d
, e
, a
, W
, 14);
309 HASHCLASH_SHA1COMPRESS_ROUND1_STEP(a
, b
, c
, d
, e
, W
, 15);
310 HASHCLASH_SHA1COMPRESS_ROUND1_STEP(e
, a
, b
, c
, d
, W
, 16);
311 HASHCLASH_SHA1COMPRESS_ROUND1_STEP(d
, e
, a
, b
, c
, W
, 17);
312 HASHCLASH_SHA1COMPRESS_ROUND1_STEP(c
, d
, e
, a
, b
, W
, 18);
313 HASHCLASH_SHA1COMPRESS_ROUND1_STEP(b
, c
, d
, e
, a
, W
, 19);
315 HASHCLASH_SHA1COMPRESS_ROUND2_STEP(a
, b
, c
, d
, e
, W
, 20);
316 HASHCLASH_SHA1COMPRESS_ROUND2_STEP(e
, a
, b
, c
, d
, W
, 21);
317 HASHCLASH_SHA1COMPRESS_ROUND2_STEP(d
, e
, a
, b
, c
, W
, 22);
318 HASHCLASH_SHA1COMPRESS_ROUND2_STEP(c
, d
, e
, a
, b
, W
, 23);
319 HASHCLASH_SHA1COMPRESS_ROUND2_STEP(b
, c
, d
, e
, a
, W
, 24);
320 HASHCLASH_SHA1COMPRESS_ROUND2_STEP(a
, b
, c
, d
, e
, W
, 25);
321 HASHCLASH_SHA1COMPRESS_ROUND2_STEP(e
, a
, b
, c
, d
, W
, 26);
322 HASHCLASH_SHA1COMPRESS_ROUND2_STEP(d
, e
, a
, b
, c
, W
, 27);
323 HASHCLASH_SHA1COMPRESS_ROUND2_STEP(c
, d
, e
, a
, b
, W
, 28);
324 HASHCLASH_SHA1COMPRESS_ROUND2_STEP(b
, c
, d
, e
, a
, W
, 29);
325 HASHCLASH_SHA1COMPRESS_ROUND2_STEP(a
, b
, c
, d
, e
, W
, 30);
326 HASHCLASH_SHA1COMPRESS_ROUND2_STEP(e
, a
, b
, c
, d
, W
, 31);
327 HASHCLASH_SHA1COMPRESS_ROUND2_STEP(d
, e
, a
, b
, c
, W
, 32);
328 HASHCLASH_SHA1COMPRESS_ROUND2_STEP(c
, d
, e
, a
, b
, W
, 33);
329 HASHCLASH_SHA1COMPRESS_ROUND2_STEP(b
, c
, d
, e
, a
, W
, 34);
330 HASHCLASH_SHA1COMPRESS_ROUND2_STEP(a
, b
, c
, d
, e
, W
, 35);
331 HASHCLASH_SHA1COMPRESS_ROUND2_STEP(e
, a
, b
, c
, d
, W
, 36);
332 HASHCLASH_SHA1COMPRESS_ROUND2_STEP(d
, e
, a
, b
, c
, W
, 37);
333 HASHCLASH_SHA1COMPRESS_ROUND2_STEP(c
, d
, e
, a
, b
, W
, 38);
334 HASHCLASH_SHA1COMPRESS_ROUND2_STEP(b
, c
, d
, e
, a
, W
, 39);
336 HASHCLASH_SHA1COMPRESS_ROUND3_STEP(a
, b
, c
, d
, e
, W
, 40);
337 HASHCLASH_SHA1COMPRESS_ROUND3_STEP(e
, a
, b
, c
, d
, W
, 41);
338 HASHCLASH_SHA1COMPRESS_ROUND3_STEP(d
, e
, a
, b
, c
, W
, 42);
339 HASHCLASH_SHA1COMPRESS_ROUND3_STEP(c
, d
, e
, a
, b
, W
, 43);
340 HASHCLASH_SHA1COMPRESS_ROUND3_STEP(b
, c
, d
, e
, a
, W
, 44);
341 HASHCLASH_SHA1COMPRESS_ROUND3_STEP(a
, b
, c
, d
, e
, W
, 45);
342 HASHCLASH_SHA1COMPRESS_ROUND3_STEP(e
, a
, b
, c
, d
, W
, 46);
343 HASHCLASH_SHA1COMPRESS_ROUND3_STEP(d
, e
, a
, b
, c
, W
, 47);
344 HASHCLASH_SHA1COMPRESS_ROUND3_STEP(c
, d
, e
, a
, b
, W
, 48);
345 HASHCLASH_SHA1COMPRESS_ROUND3_STEP(b
, c
, d
, e
, a
, W
, 49);
346 HASHCLASH_SHA1COMPRESS_ROUND3_STEP(a
, b
, c
, d
, e
, W
, 50);
347 HASHCLASH_SHA1COMPRESS_ROUND3_STEP(e
, a
, b
, c
, d
, W
, 51);
348 HASHCLASH_SHA1COMPRESS_ROUND3_STEP(d
, e
, a
, b
, c
, W
, 52);
349 HASHCLASH_SHA1COMPRESS_ROUND3_STEP(c
, d
, e
, a
, b
, W
, 53);
350 HASHCLASH_SHA1COMPRESS_ROUND3_STEP(b
, c
, d
, e
, a
, W
, 54);
351 HASHCLASH_SHA1COMPRESS_ROUND3_STEP(a
, b
, c
, d
, e
, W
, 55);
352 HASHCLASH_SHA1COMPRESS_ROUND3_STEP(e
, a
, b
, c
, d
, W
, 56);
353 HASHCLASH_SHA1COMPRESS_ROUND3_STEP(d
, e
, a
, b
, c
, W
, 57);
354 HASHCLASH_SHA1COMPRESS_ROUND3_STEP(c
, d
, e
, a
, b
, W
, 58);
355 HASHCLASH_SHA1COMPRESS_ROUND3_STEP(b
, c
, d
, e
, a
, W
, 59);
357 HASHCLASH_SHA1COMPRESS_ROUND4_STEP(a
, b
, c
, d
, e
, W
, 60);
358 HASHCLASH_SHA1COMPRESS_ROUND4_STEP(e
, a
, b
, c
, d
, W
, 61);
359 HASHCLASH_SHA1COMPRESS_ROUND4_STEP(d
, e
, a
, b
, c
, W
, 62);
360 HASHCLASH_SHA1COMPRESS_ROUND4_STEP(c
, d
, e
, a
, b
, W
, 63);
361 HASHCLASH_SHA1COMPRESS_ROUND4_STEP(b
, c
, d
, e
, a
, W
, 64);
362 HASHCLASH_SHA1COMPRESS_ROUND4_STEP(a
, b
, c
, d
, e
, W
, 65);
363 HASHCLASH_SHA1COMPRESS_ROUND4_STEP(e
, a
, b
, c
, d
, W
, 66);
364 HASHCLASH_SHA1COMPRESS_ROUND4_STEP(d
, e
, a
, b
, c
, W
, 67);
365 HASHCLASH_SHA1COMPRESS_ROUND4_STEP(c
, d
, e
, a
, b
, W
, 68);
366 HASHCLASH_SHA1COMPRESS_ROUND4_STEP(b
, c
, d
, e
, a
, W
, 69);
367 HASHCLASH_SHA1COMPRESS_ROUND4_STEP(a
, b
, c
, d
, e
, W
, 70);
368 HASHCLASH_SHA1COMPRESS_ROUND4_STEP(e
, a
, b
, c
, d
, W
, 71);
369 HASHCLASH_SHA1COMPRESS_ROUND4_STEP(d
, e
, a
, b
, c
, W
, 72);
370 HASHCLASH_SHA1COMPRESS_ROUND4_STEP(c
, d
, e
, a
, b
, W
, 73);
371 HASHCLASH_SHA1COMPRESS_ROUND4_STEP(b
, c
, d
, e
, a
, W
, 74);
372 HASHCLASH_SHA1COMPRESS_ROUND4_STEP(a
, b
, c
, d
, e
, W
, 75);
373 HASHCLASH_SHA1COMPRESS_ROUND4_STEP(e
, a
, b
, c
, d
, W
, 76);
374 HASHCLASH_SHA1COMPRESS_ROUND4_STEP(d
, e
, a
, b
, c
, W
, 77);
375 HASHCLASH_SHA1COMPRESS_ROUND4_STEP(c
, d
, e
, a
, b
, W
, 78);
376 HASHCLASH_SHA1COMPRESS_ROUND4_STEP(b
, c
, d
, e
, a
, W
, 79);
378 ihv
[0] += a
; ihv
[1] += b
; ihv
[2] += c
; ihv
[3] += d
; ihv
[4] += e
;
383 void sha1_compression_states(uint32_t ihv
[5], const uint32_t m
[16], uint32_t W
[80], uint32_t states
[80][5])
385 uint32_t a
= ihv
[0], b
= ihv
[1], c
= ihv
[2], d
= ihv
[3], e
= ihv
[4];
388 #ifdef DOSTORESTATE00
391 SHA1COMPRESS_FULL_ROUND1_STEP_LOAD(a
, b
, c
, d
, e
, m
, W
, 0, temp
);
393 #ifdef DOSTORESTATE01
396 SHA1COMPRESS_FULL_ROUND1_STEP_LOAD(e
, a
, b
, c
, d
, m
, W
, 1, temp
);
398 #ifdef DOSTORESTATE02
401 SHA1COMPRESS_FULL_ROUND1_STEP_LOAD(d
, e
, a
, b
, c
, m
, W
, 2, temp
);
403 #ifdef DOSTORESTATE03
406 SHA1COMPRESS_FULL_ROUND1_STEP_LOAD(c
, d
, e
, a
, b
, m
, W
, 3, temp
);
408 #ifdef DOSTORESTATE04
411 SHA1COMPRESS_FULL_ROUND1_STEP_LOAD(b
, c
, d
, e
, a
, m
, W
, 4, temp
);
413 #ifdef DOSTORESTATE05
416 SHA1COMPRESS_FULL_ROUND1_STEP_LOAD(a
, b
, c
, d
, e
, m
, W
, 5, temp
);
418 #ifdef DOSTORESTATE06
421 SHA1COMPRESS_FULL_ROUND1_STEP_LOAD(e
, a
, b
, c
, d
, m
, W
, 6, temp
);
423 #ifdef DOSTORESTATE07
426 SHA1COMPRESS_FULL_ROUND1_STEP_LOAD(d
, e
, a
, b
, c
, m
, W
, 7, temp
);
428 #ifdef DOSTORESTATE08
431 SHA1COMPRESS_FULL_ROUND1_STEP_LOAD(c
, d
, e
, a
, b
, m
, W
, 8, temp
);
433 #ifdef DOSTORESTATE09
436 SHA1COMPRESS_FULL_ROUND1_STEP_LOAD(b
, c
, d
, e
, a
, m
, W
, 9, temp
);
438 #ifdef DOSTORESTATE10
441 SHA1COMPRESS_FULL_ROUND1_STEP_LOAD(a
, b
, c
, d
, e
, m
, W
, 10, temp
);
443 #ifdef DOSTORESTATE11
446 SHA1COMPRESS_FULL_ROUND1_STEP_LOAD(e
, a
, b
, c
, d
, m
, W
, 11, temp
);
448 #ifdef DOSTORESTATE12
451 SHA1COMPRESS_FULL_ROUND1_STEP_LOAD(d
, e
, a
, b
, c
, m
, W
, 12, temp
);
453 #ifdef DOSTORESTATE13
456 SHA1COMPRESS_FULL_ROUND1_STEP_LOAD(c
, d
, e
, a
, b
, m
, W
, 13, temp
);
458 #ifdef DOSTORESTATE14
461 SHA1COMPRESS_FULL_ROUND1_STEP_LOAD(b
, c
, d
, e
, a
, m
, W
, 14, temp
);
463 #ifdef DOSTORESTATE15
466 SHA1COMPRESS_FULL_ROUND1_STEP_LOAD(a
, b
, c
, d
, e
, m
, W
, 15, temp
);
468 #ifdef DOSTORESTATE16
471 SHA1COMPRESS_FULL_ROUND1_STEP_EXPAND(e
, a
, b
, c
, d
, W
, 16, temp
);
473 #ifdef DOSTORESTATE17
476 SHA1COMPRESS_FULL_ROUND1_STEP_EXPAND(d
, e
, a
, b
, c
, W
, 17, temp
);
478 #ifdef DOSTORESTATE18
481 SHA1COMPRESS_FULL_ROUND1_STEP_EXPAND(c
, d
, e
, a
, b
, W
, 18, temp
);
483 #ifdef DOSTORESTATE19
486 SHA1COMPRESS_FULL_ROUND1_STEP_EXPAND(b
, c
, d
, e
, a
, W
, 19, temp
);
490 #ifdef DOSTORESTATE20
493 SHA1COMPRESS_FULL_ROUND2_STEP(a
, b
, c
, d
, e
, W
, 20, temp
);
495 #ifdef DOSTORESTATE21
498 SHA1COMPRESS_FULL_ROUND2_STEP(e
, a
, b
, c
, d
, W
, 21, temp
);
500 #ifdef DOSTORESTATE22
503 SHA1COMPRESS_FULL_ROUND2_STEP(d
, e
, a
, b
, c
, W
, 22, temp
);
505 #ifdef DOSTORESTATE23
508 SHA1COMPRESS_FULL_ROUND2_STEP(c
, d
, e
, a
, b
, W
, 23, temp
);
510 #ifdef DOSTORESTATE24
513 SHA1COMPRESS_FULL_ROUND2_STEP(b
, c
, d
, e
, a
, W
, 24, temp
);
515 #ifdef DOSTORESTATE25
518 SHA1COMPRESS_FULL_ROUND2_STEP(a
, b
, c
, d
, e
, W
, 25, temp
);
520 #ifdef DOSTORESTATE26
523 SHA1COMPRESS_FULL_ROUND2_STEP(e
, a
, b
, c
, d
, W
, 26, temp
);
525 #ifdef DOSTORESTATE27
528 SHA1COMPRESS_FULL_ROUND2_STEP(d
, e
, a
, b
, c
, W
, 27, temp
);
530 #ifdef DOSTORESTATE28
533 SHA1COMPRESS_FULL_ROUND2_STEP(c
, d
, e
, a
, b
, W
, 28, temp
);
535 #ifdef DOSTORESTATE29
538 SHA1COMPRESS_FULL_ROUND2_STEP(b
, c
, d
, e
, a
, W
, 29, temp
);
540 #ifdef DOSTORESTATE30
543 SHA1COMPRESS_FULL_ROUND2_STEP(a
, b
, c
, d
, e
, W
, 30, temp
);
545 #ifdef DOSTORESTATE31
548 SHA1COMPRESS_FULL_ROUND2_STEP(e
, a
, b
, c
, d
, W
, 31, temp
);
550 #ifdef DOSTORESTATE32
553 SHA1COMPRESS_FULL_ROUND2_STEP(d
, e
, a
, b
, c
, W
, 32, temp
);
555 #ifdef DOSTORESTATE33
558 SHA1COMPRESS_FULL_ROUND2_STEP(c
, d
, e
, a
, b
, W
, 33, temp
);
560 #ifdef DOSTORESTATE34
563 SHA1COMPRESS_FULL_ROUND2_STEP(b
, c
, d
, e
, a
, W
, 34, temp
);
565 #ifdef DOSTORESTATE35
568 SHA1COMPRESS_FULL_ROUND2_STEP(a
, b
, c
, d
, e
, W
, 35, temp
);
570 #ifdef DOSTORESTATE36
573 SHA1COMPRESS_FULL_ROUND2_STEP(e
, a
, b
, c
, d
, W
, 36, temp
);
575 #ifdef DOSTORESTATE37
578 SHA1COMPRESS_FULL_ROUND2_STEP(d
, e
, a
, b
, c
, W
, 37, temp
);
580 #ifdef DOSTORESTATE38
583 SHA1COMPRESS_FULL_ROUND2_STEP(c
, d
, e
, a
, b
, W
, 38, temp
);
585 #ifdef DOSTORESTATE39
588 SHA1COMPRESS_FULL_ROUND2_STEP(b
, c
, d
, e
, a
, W
, 39, temp
);
592 #ifdef DOSTORESTATE40
595 SHA1COMPRESS_FULL_ROUND3_STEP(a
, b
, c
, d
, e
, W
, 40, temp
);
597 #ifdef DOSTORESTATE41
600 SHA1COMPRESS_FULL_ROUND3_STEP(e
, a
, b
, c
, d
, W
, 41, temp
);
602 #ifdef DOSTORESTATE42
605 SHA1COMPRESS_FULL_ROUND3_STEP(d
, e
, a
, b
, c
, W
, 42, temp
);
607 #ifdef DOSTORESTATE43
610 SHA1COMPRESS_FULL_ROUND3_STEP(c
, d
, e
, a
, b
, W
, 43, temp
);
612 #ifdef DOSTORESTATE44
615 SHA1COMPRESS_FULL_ROUND3_STEP(b
, c
, d
, e
, a
, W
, 44, temp
);
617 #ifdef DOSTORESTATE45
620 SHA1COMPRESS_FULL_ROUND3_STEP(a
, b
, c
, d
, e
, W
, 45, temp
);
622 #ifdef DOSTORESTATE46
625 SHA1COMPRESS_FULL_ROUND3_STEP(e
, a
, b
, c
, d
, W
, 46, temp
);
627 #ifdef DOSTORESTATE47
630 SHA1COMPRESS_FULL_ROUND3_STEP(d
, e
, a
, b
, c
, W
, 47, temp
);
632 #ifdef DOSTORESTATE48
635 SHA1COMPRESS_FULL_ROUND3_STEP(c
, d
, e
, a
, b
, W
, 48, temp
);
637 #ifdef DOSTORESTATE49
640 SHA1COMPRESS_FULL_ROUND3_STEP(b
, c
, d
, e
, a
, W
, 49, temp
);
642 #ifdef DOSTORESTATE50
645 SHA1COMPRESS_FULL_ROUND3_STEP(a
, b
, c
, d
, e
, W
, 50, temp
);
647 #ifdef DOSTORESTATE51
650 SHA1COMPRESS_FULL_ROUND3_STEP(e
, a
, b
, c
, d
, W
, 51, temp
);
652 #ifdef DOSTORESTATE52
655 SHA1COMPRESS_FULL_ROUND3_STEP(d
, e
, a
, b
, c
, W
, 52, temp
);
657 #ifdef DOSTORESTATE53
660 SHA1COMPRESS_FULL_ROUND3_STEP(c
, d
, e
, a
, b
, W
, 53, temp
);
662 #ifdef DOSTORESTATE54
665 SHA1COMPRESS_FULL_ROUND3_STEP(b
, c
, d
, e
, a
, W
, 54, temp
);
667 #ifdef DOSTORESTATE55
670 SHA1COMPRESS_FULL_ROUND3_STEP(a
, b
, c
, d
, e
, W
, 55, temp
);
672 #ifdef DOSTORESTATE56
675 SHA1COMPRESS_FULL_ROUND3_STEP(e
, a
, b
, c
, d
, W
, 56, temp
);
677 #ifdef DOSTORESTATE57
680 SHA1COMPRESS_FULL_ROUND3_STEP(d
, e
, a
, b
, c
, W
, 57, temp
);
682 #ifdef DOSTORESTATE58
685 SHA1COMPRESS_FULL_ROUND3_STEP(c
, d
, e
, a
, b
, W
, 58, temp
);
687 #ifdef DOSTORESTATE59
690 SHA1COMPRESS_FULL_ROUND3_STEP(b
, c
, d
, e
, a
, W
, 59, temp
);
695 #ifdef DOSTORESTATE60
698 SHA1COMPRESS_FULL_ROUND4_STEP(a
, b
, c
, d
, e
, W
, 60, temp
);
700 #ifdef DOSTORESTATE61
703 SHA1COMPRESS_FULL_ROUND4_STEP(e
, a
, b
, c
, d
, W
, 61, temp
);
705 #ifdef DOSTORESTATE62
708 SHA1COMPRESS_FULL_ROUND4_STEP(d
, e
, a
, b
, c
, W
, 62, temp
);
710 #ifdef DOSTORESTATE63
713 SHA1COMPRESS_FULL_ROUND4_STEP(c
, d
, e
, a
, b
, W
, 63, temp
);
715 #ifdef DOSTORESTATE64
718 SHA1COMPRESS_FULL_ROUND4_STEP(b
, c
, d
, e
, a
, W
, 64, temp
);
720 #ifdef DOSTORESTATE65
723 SHA1COMPRESS_FULL_ROUND4_STEP(a
, b
, c
, d
, e
, W
, 65, temp
);
725 #ifdef DOSTORESTATE66
728 SHA1COMPRESS_FULL_ROUND4_STEP(e
, a
, b
, c
, d
, W
, 66, temp
);
730 #ifdef DOSTORESTATE67
733 SHA1COMPRESS_FULL_ROUND4_STEP(d
, e
, a
, b
, c
, W
, 67, temp
);
735 #ifdef DOSTORESTATE68
738 SHA1COMPRESS_FULL_ROUND4_STEP(c
, d
, e
, a
, b
, W
, 68, temp
);
740 #ifdef DOSTORESTATE69
743 SHA1COMPRESS_FULL_ROUND4_STEP(b
, c
, d
, e
, a
, W
, 69, temp
);
745 #ifdef DOSTORESTATE70
748 SHA1COMPRESS_FULL_ROUND4_STEP(a
, b
, c
, d
, e
, W
, 70, temp
);
750 #ifdef DOSTORESTATE71
753 SHA1COMPRESS_FULL_ROUND4_STEP(e
, a
, b
, c
, d
, W
, 71, temp
);
755 #ifdef DOSTORESTATE72
758 SHA1COMPRESS_FULL_ROUND4_STEP(d
, e
, a
, b
, c
, W
, 72, temp
);
760 #ifdef DOSTORESTATE73
763 SHA1COMPRESS_FULL_ROUND4_STEP(c
, d
, e
, a
, b
, W
, 73, temp
);
765 #ifdef DOSTORESTATE74
768 SHA1COMPRESS_FULL_ROUND4_STEP(b
, c
, d
, e
, a
, W
, 74, temp
);
770 #ifdef DOSTORESTATE75
773 SHA1COMPRESS_FULL_ROUND4_STEP(a
, b
, c
, d
, e
, W
, 75, temp
);
775 #ifdef DOSTORESTATE76
778 SHA1COMPRESS_FULL_ROUND4_STEP(e
, a
, b
, c
, d
, W
, 76, temp
);
780 #ifdef DOSTORESTATE77
783 SHA1COMPRESS_FULL_ROUND4_STEP(d
, e
, a
, b
, c
, W
, 77, temp
);
785 #ifdef DOSTORESTATE78
788 SHA1COMPRESS_FULL_ROUND4_STEP(c
, d
, e
, a
, b
, W
, 78, temp
);
790 #ifdef DOSTORESTATE79
793 SHA1COMPRESS_FULL_ROUND4_STEP(b
, c
, d
, e
, a
, W
, 79, temp
);
797 ihv
[0] += a
; ihv
[1] += b
; ihv
[2] += c
; ihv
[3] += d
; ihv
[4] += e
;
803 #define SHA1_RECOMPRESS(t) \
804 static void sha1recompress_fast_ ## t (uint32_t ihvin[5], uint32_t ihvout[5], const uint32_t me2[80], const uint32_t state[5]) \
806 uint32_t a = state[0], b = state[1], c = state[2], d = state[3], e = state[4]; \
807 if (t > 79) HASHCLASH_SHA1COMPRESS_ROUND4_STEP_BW(b, c, d, e, a, me2, 79); \
808 if (t > 78) HASHCLASH_SHA1COMPRESS_ROUND4_STEP_BW(c, d, e, a, b, me2, 78); \
809 if (t > 77) HASHCLASH_SHA1COMPRESS_ROUND4_STEP_BW(d, e, a, b, c, me2, 77); \
810 if (t > 76) HASHCLASH_SHA1COMPRESS_ROUND4_STEP_BW(e, a, b, c, d, me2, 76); \
811 if (t > 75) HASHCLASH_SHA1COMPRESS_ROUND4_STEP_BW(a, b, c, d, e, me2, 75); \
812 if (t > 74) HASHCLASH_SHA1COMPRESS_ROUND4_STEP_BW(b, c, d, e, a, me2, 74); \
813 if (t > 73) HASHCLASH_SHA1COMPRESS_ROUND4_STEP_BW(c, d, e, a, b, me2, 73); \
814 if (t > 72) HASHCLASH_SHA1COMPRESS_ROUND4_STEP_BW(d, e, a, b, c, me2, 72); \
815 if (t > 71) HASHCLASH_SHA1COMPRESS_ROUND4_STEP_BW(e, a, b, c, d, me2, 71); \
816 if (t > 70) HASHCLASH_SHA1COMPRESS_ROUND4_STEP_BW(a, b, c, d, e, me2, 70); \
817 if (t > 69) HASHCLASH_SHA1COMPRESS_ROUND4_STEP_BW(b, c, d, e, a, me2, 69); \
818 if (t > 68) HASHCLASH_SHA1COMPRESS_ROUND4_STEP_BW(c, d, e, a, b, me2, 68); \
819 if (t > 67) HASHCLASH_SHA1COMPRESS_ROUND4_STEP_BW(d, e, a, b, c, me2, 67); \
820 if (t > 66) HASHCLASH_SHA1COMPRESS_ROUND4_STEP_BW(e, a, b, c, d, me2, 66); \
821 if (t > 65) HASHCLASH_SHA1COMPRESS_ROUND4_STEP_BW(a, b, c, d, e, me2, 65); \
822 if (t > 64) HASHCLASH_SHA1COMPRESS_ROUND4_STEP_BW(b, c, d, e, a, me2, 64); \
823 if (t > 63) HASHCLASH_SHA1COMPRESS_ROUND4_STEP_BW(c, d, e, a, b, me2, 63); \
824 if (t > 62) HASHCLASH_SHA1COMPRESS_ROUND4_STEP_BW(d, e, a, b, c, me2, 62); \
825 if (t > 61) HASHCLASH_SHA1COMPRESS_ROUND4_STEP_BW(e, a, b, c, d, me2, 61); \
826 if (t > 60) HASHCLASH_SHA1COMPRESS_ROUND4_STEP_BW(a, b, c, d, e, me2, 60); \
827 if (t > 59) HASHCLASH_SHA1COMPRESS_ROUND3_STEP_BW(b, c, d, e, a, me2, 59); \
828 if (t > 58) HASHCLASH_SHA1COMPRESS_ROUND3_STEP_BW(c, d, e, a, b, me2, 58); \
829 if (t > 57) HASHCLASH_SHA1COMPRESS_ROUND3_STEP_BW(d, e, a, b, c, me2, 57); \
830 if (t > 56) HASHCLASH_SHA1COMPRESS_ROUND3_STEP_BW(e, a, b, c, d, me2, 56); \
831 if (t > 55) HASHCLASH_SHA1COMPRESS_ROUND3_STEP_BW(a, b, c, d, e, me2, 55); \
832 if (t > 54) HASHCLASH_SHA1COMPRESS_ROUND3_STEP_BW(b, c, d, e, a, me2, 54); \
833 if (t > 53) HASHCLASH_SHA1COMPRESS_ROUND3_STEP_BW(c, d, e, a, b, me2, 53); \
834 if (t > 52) HASHCLASH_SHA1COMPRESS_ROUND3_STEP_BW(d, e, a, b, c, me2, 52); \
835 if (t > 51) HASHCLASH_SHA1COMPRESS_ROUND3_STEP_BW(e, a, b, c, d, me2, 51); \
836 if (t > 50) HASHCLASH_SHA1COMPRESS_ROUND3_STEP_BW(a, b, c, d, e, me2, 50); \
837 if (t > 49) HASHCLASH_SHA1COMPRESS_ROUND3_STEP_BW(b, c, d, e, a, me2, 49); \
838 if (t > 48) HASHCLASH_SHA1COMPRESS_ROUND3_STEP_BW(c, d, e, a, b, me2, 48); \
839 if (t > 47) HASHCLASH_SHA1COMPRESS_ROUND3_STEP_BW(d, e, a, b, c, me2, 47); \
840 if (t > 46) HASHCLASH_SHA1COMPRESS_ROUND3_STEP_BW(e, a, b, c, d, me2, 46); \
841 if (t > 45) HASHCLASH_SHA1COMPRESS_ROUND3_STEP_BW(a, b, c, d, e, me2, 45); \
842 if (t > 44) HASHCLASH_SHA1COMPRESS_ROUND3_STEP_BW(b, c, d, e, a, me2, 44); \
843 if (t > 43) HASHCLASH_SHA1COMPRESS_ROUND3_STEP_BW(c, d, e, a, b, me2, 43); \
844 if (t > 42) HASHCLASH_SHA1COMPRESS_ROUND3_STEP_BW(d, e, a, b, c, me2, 42); \
845 if (t > 41) HASHCLASH_SHA1COMPRESS_ROUND3_STEP_BW(e, a, b, c, d, me2, 41); \
846 if (t > 40) HASHCLASH_SHA1COMPRESS_ROUND3_STEP_BW(a, b, c, d, e, me2, 40); \
847 if (t > 39) HASHCLASH_SHA1COMPRESS_ROUND2_STEP_BW(b, c, d, e, a, me2, 39); \
848 if (t > 38) HASHCLASH_SHA1COMPRESS_ROUND2_STEP_BW(c, d, e, a, b, me2, 38); \
849 if (t > 37) HASHCLASH_SHA1COMPRESS_ROUND2_STEP_BW(d, e, a, b, c, me2, 37); \
850 if (t > 36) HASHCLASH_SHA1COMPRESS_ROUND2_STEP_BW(e, a, b, c, d, me2, 36); \
851 if (t > 35) HASHCLASH_SHA1COMPRESS_ROUND2_STEP_BW(a, b, c, d, e, me2, 35); \
852 if (t > 34) HASHCLASH_SHA1COMPRESS_ROUND2_STEP_BW(b, c, d, e, a, me2, 34); \
853 if (t > 33) HASHCLASH_SHA1COMPRESS_ROUND2_STEP_BW(c, d, e, a, b, me2, 33); \
854 if (t > 32) HASHCLASH_SHA1COMPRESS_ROUND2_STEP_BW(d, e, a, b, c, me2, 32); \
855 if (t > 31) HASHCLASH_SHA1COMPRESS_ROUND2_STEP_BW(e, a, b, c, d, me2, 31); \
856 if (t > 30) HASHCLASH_SHA1COMPRESS_ROUND2_STEP_BW(a, b, c, d, e, me2, 30); \
857 if (t > 29) HASHCLASH_SHA1COMPRESS_ROUND2_STEP_BW(b, c, d, e, a, me2, 29); \
858 if (t > 28) HASHCLASH_SHA1COMPRESS_ROUND2_STEP_BW(c, d, e, a, b, me2, 28); \
859 if (t > 27) HASHCLASH_SHA1COMPRESS_ROUND2_STEP_BW(d, e, a, b, c, me2, 27); \
860 if (t > 26) HASHCLASH_SHA1COMPRESS_ROUND2_STEP_BW(e, a, b, c, d, me2, 26); \
861 if (t > 25) HASHCLASH_SHA1COMPRESS_ROUND2_STEP_BW(a, b, c, d, e, me2, 25); \
862 if (t > 24) HASHCLASH_SHA1COMPRESS_ROUND2_STEP_BW(b, c, d, e, a, me2, 24); \
863 if (t > 23) HASHCLASH_SHA1COMPRESS_ROUND2_STEP_BW(c, d, e, a, b, me2, 23); \
864 if (t > 22) HASHCLASH_SHA1COMPRESS_ROUND2_STEP_BW(d, e, a, b, c, me2, 22); \
865 if (t > 21) HASHCLASH_SHA1COMPRESS_ROUND2_STEP_BW(e, a, b, c, d, me2, 21); \
866 if (t > 20) HASHCLASH_SHA1COMPRESS_ROUND2_STEP_BW(a, b, c, d, e, me2, 20); \
867 if (t > 19) HASHCLASH_SHA1COMPRESS_ROUND1_STEP_BW(b, c, d, e, a, me2, 19); \
868 if (t > 18) HASHCLASH_SHA1COMPRESS_ROUND1_STEP_BW(c, d, e, a, b, me2, 18); \
869 if (t > 17) HASHCLASH_SHA1COMPRESS_ROUND1_STEP_BW(d, e, a, b, c, me2, 17); \
870 if (t > 16) HASHCLASH_SHA1COMPRESS_ROUND1_STEP_BW(e, a, b, c, d, me2, 16); \
871 if (t > 15) HASHCLASH_SHA1COMPRESS_ROUND1_STEP_BW(a, b, c, d, e, me2, 15); \
872 if (t > 14) HASHCLASH_SHA1COMPRESS_ROUND1_STEP_BW(b, c, d, e, a, me2, 14); \
873 if (t > 13) HASHCLASH_SHA1COMPRESS_ROUND1_STEP_BW(c, d, e, a, b, me2, 13); \
874 if (t > 12) HASHCLASH_SHA1COMPRESS_ROUND1_STEP_BW(d, e, a, b, c, me2, 12); \
875 if (t > 11) HASHCLASH_SHA1COMPRESS_ROUND1_STEP_BW(e, a, b, c, d, me2, 11); \
876 if (t > 10) HASHCLASH_SHA1COMPRESS_ROUND1_STEP_BW(a, b, c, d, e, me2, 10); \
877 if (t > 9) HASHCLASH_SHA1COMPRESS_ROUND1_STEP_BW(b, c, d, e, a, me2, 9); \
878 if (t > 8) HASHCLASH_SHA1COMPRESS_ROUND1_STEP_BW(c, d, e, a, b, me2, 8); \
879 if (t > 7) HASHCLASH_SHA1COMPRESS_ROUND1_STEP_BW(d, e, a, b, c, me2, 7); \
880 if (t > 6) HASHCLASH_SHA1COMPRESS_ROUND1_STEP_BW(e, a, b, c, d, me2, 6); \
881 if (t > 5) HASHCLASH_SHA1COMPRESS_ROUND1_STEP_BW(a, b, c, d, e, me2, 5); \
882 if (t > 4) HASHCLASH_SHA1COMPRESS_ROUND1_STEP_BW(b, c, d, e, a, me2, 4); \
883 if (t > 3) HASHCLASH_SHA1COMPRESS_ROUND1_STEP_BW(c, d, e, a, b, me2, 3); \
884 if (t > 2) HASHCLASH_SHA1COMPRESS_ROUND1_STEP_BW(d, e, a, b, c, me2, 2); \
885 if (t > 1) HASHCLASH_SHA1COMPRESS_ROUND1_STEP_BW(e, a, b, c, d, me2, 1); \
886 if (t > 0) HASHCLASH_SHA1COMPRESS_ROUND1_STEP_BW(a, b, c, d, e, me2, 0); \
887 ihvin[0] = a; ihvin[1] = b; ihvin[2] = c; ihvin[3] = d; ihvin[4] = e; \
888 a = state[0]; b = state[1]; c = state[2]; d = state[3]; e = state[4]; \
889 if (t <= 0) HASHCLASH_SHA1COMPRESS_ROUND1_STEP(a, b, c, d, e, me2, 0); \
890 if (t <= 1) HASHCLASH_SHA1COMPRESS_ROUND1_STEP(e, a, b, c, d, me2, 1); \
891 if (t <= 2) HASHCLASH_SHA1COMPRESS_ROUND1_STEP(d, e, a, b, c, me2, 2); \
892 if (t <= 3) HASHCLASH_SHA1COMPRESS_ROUND1_STEP(c, d, e, a, b, me2, 3); \
893 if (t <= 4) HASHCLASH_SHA1COMPRESS_ROUND1_STEP(b, c, d, e, a, me2, 4); \
894 if (t <= 5) HASHCLASH_SHA1COMPRESS_ROUND1_STEP(a, b, c, d, e, me2, 5); \
895 if (t <= 6) HASHCLASH_SHA1COMPRESS_ROUND1_STEP(e, a, b, c, d, me2, 6); \
896 if (t <= 7) HASHCLASH_SHA1COMPRESS_ROUND1_STEP(d, e, a, b, c, me2, 7); \
897 if (t <= 8) HASHCLASH_SHA1COMPRESS_ROUND1_STEP(c, d, e, a, b, me2, 8); \
898 if (t <= 9) HASHCLASH_SHA1COMPRESS_ROUND1_STEP(b, c, d, e, a, me2, 9); \
899 if (t <= 10) HASHCLASH_SHA1COMPRESS_ROUND1_STEP(a, b, c, d, e, me2, 10); \
900 if (t <= 11) HASHCLASH_SHA1COMPRESS_ROUND1_STEP(e, a, b, c, d, me2, 11); \
901 if (t <= 12) HASHCLASH_SHA1COMPRESS_ROUND1_STEP(d, e, a, b, c, me2, 12); \
902 if (t <= 13) HASHCLASH_SHA1COMPRESS_ROUND1_STEP(c, d, e, a, b, me2, 13); \
903 if (t <= 14) HASHCLASH_SHA1COMPRESS_ROUND1_STEP(b, c, d, e, a, me2, 14); \
904 if (t <= 15) HASHCLASH_SHA1COMPRESS_ROUND1_STEP(a, b, c, d, e, me2, 15); \
905 if (t <= 16) HASHCLASH_SHA1COMPRESS_ROUND1_STEP(e, a, b, c, d, me2, 16); \
906 if (t <= 17) HASHCLASH_SHA1COMPRESS_ROUND1_STEP(d, e, a, b, c, me2, 17); \
907 if (t <= 18) HASHCLASH_SHA1COMPRESS_ROUND1_STEP(c, d, e, a, b, me2, 18); \
908 if (t <= 19) HASHCLASH_SHA1COMPRESS_ROUND1_STEP(b, c, d, e, a, me2, 19); \
909 if (t <= 20) HASHCLASH_SHA1COMPRESS_ROUND2_STEP(a, b, c, d, e, me2, 20); \
910 if (t <= 21) HASHCLASH_SHA1COMPRESS_ROUND2_STEP(e, a, b, c, d, me2, 21); \
911 if (t <= 22) HASHCLASH_SHA1COMPRESS_ROUND2_STEP(d, e, a, b, c, me2, 22); \
912 if (t <= 23) HASHCLASH_SHA1COMPRESS_ROUND2_STEP(c, d, e, a, b, me2, 23); \
913 if (t <= 24) HASHCLASH_SHA1COMPRESS_ROUND2_STEP(b, c, d, e, a, me2, 24); \
914 if (t <= 25) HASHCLASH_SHA1COMPRESS_ROUND2_STEP(a, b, c, d, e, me2, 25); \
915 if (t <= 26) HASHCLASH_SHA1COMPRESS_ROUND2_STEP(e, a, b, c, d, me2, 26); \
916 if (t <= 27) HASHCLASH_SHA1COMPRESS_ROUND2_STEP(d, e, a, b, c, me2, 27); \
917 if (t <= 28) HASHCLASH_SHA1COMPRESS_ROUND2_STEP(c, d, e, a, b, me2, 28); \
918 if (t <= 29) HASHCLASH_SHA1COMPRESS_ROUND2_STEP(b, c, d, e, a, me2, 29); \
919 if (t <= 30) HASHCLASH_SHA1COMPRESS_ROUND2_STEP(a, b, c, d, e, me2, 30); \
920 if (t <= 31) HASHCLASH_SHA1COMPRESS_ROUND2_STEP(e, a, b, c, d, me2, 31); \
921 if (t <= 32) HASHCLASH_SHA1COMPRESS_ROUND2_STEP(d, e, a, b, c, me2, 32); \
922 if (t <= 33) HASHCLASH_SHA1COMPRESS_ROUND2_STEP(c, d, e, a, b, me2, 33); \
923 if (t <= 34) HASHCLASH_SHA1COMPRESS_ROUND2_STEP(b, c, d, e, a, me2, 34); \
924 if (t <= 35) HASHCLASH_SHA1COMPRESS_ROUND2_STEP(a, b, c, d, e, me2, 35); \
925 if (t <= 36) HASHCLASH_SHA1COMPRESS_ROUND2_STEP(e, a, b, c, d, me2, 36); \
926 if (t <= 37) HASHCLASH_SHA1COMPRESS_ROUND2_STEP(d, e, a, b, c, me2, 37); \
927 if (t <= 38) HASHCLASH_SHA1COMPRESS_ROUND2_STEP(c, d, e, a, b, me2, 38); \
928 if (t <= 39) HASHCLASH_SHA1COMPRESS_ROUND2_STEP(b, c, d, e, a, me2, 39); \
929 if (t <= 40) HASHCLASH_SHA1COMPRESS_ROUND3_STEP(a, b, c, d, e, me2, 40); \
930 if (t <= 41) HASHCLASH_SHA1COMPRESS_ROUND3_STEP(e, a, b, c, d, me2, 41); \
931 if (t <= 42) HASHCLASH_SHA1COMPRESS_ROUND3_STEP(d, e, a, b, c, me2, 42); \
932 if (t <= 43) HASHCLASH_SHA1COMPRESS_ROUND3_STEP(c, d, e, a, b, me2, 43); \
933 if (t <= 44) HASHCLASH_SHA1COMPRESS_ROUND3_STEP(b, c, d, e, a, me2, 44); \
934 if (t <= 45) HASHCLASH_SHA1COMPRESS_ROUND3_STEP(a, b, c, d, e, me2, 45); \
935 if (t <= 46) HASHCLASH_SHA1COMPRESS_ROUND3_STEP(e, a, b, c, d, me2, 46); \
936 if (t <= 47) HASHCLASH_SHA1COMPRESS_ROUND3_STEP(d, e, a, b, c, me2, 47); \
937 if (t <= 48) HASHCLASH_SHA1COMPRESS_ROUND3_STEP(c, d, e, a, b, me2, 48); \
938 if (t <= 49) HASHCLASH_SHA1COMPRESS_ROUND3_STEP(b, c, d, e, a, me2, 49); \
939 if (t <= 50) HASHCLASH_SHA1COMPRESS_ROUND3_STEP(a, b, c, d, e, me2, 50); \
940 if (t <= 51) HASHCLASH_SHA1COMPRESS_ROUND3_STEP(e, a, b, c, d, me2, 51); \
941 if (t <= 52) HASHCLASH_SHA1COMPRESS_ROUND3_STEP(d, e, a, b, c, me2, 52); \
942 if (t <= 53) HASHCLASH_SHA1COMPRESS_ROUND3_STEP(c, d, e, a, b, me2, 53); \
943 if (t <= 54) HASHCLASH_SHA1COMPRESS_ROUND3_STEP(b, c, d, e, a, me2, 54); \
944 if (t <= 55) HASHCLASH_SHA1COMPRESS_ROUND3_STEP(a, b, c, d, e, me2, 55); \
945 if (t <= 56) HASHCLASH_SHA1COMPRESS_ROUND3_STEP(e, a, b, c, d, me2, 56); \
946 if (t <= 57) HASHCLASH_SHA1COMPRESS_ROUND3_STEP(d, e, a, b, c, me2, 57); \
947 if (t <= 58) HASHCLASH_SHA1COMPRESS_ROUND3_STEP(c, d, e, a, b, me2, 58); \
948 if (t <= 59) HASHCLASH_SHA1COMPRESS_ROUND3_STEP(b, c, d, e, a, me2, 59); \
949 if (t <= 60) HASHCLASH_SHA1COMPRESS_ROUND4_STEP(a, b, c, d, e, me2, 60); \
950 if (t <= 61) HASHCLASH_SHA1COMPRESS_ROUND4_STEP(e, a, b, c, d, me2, 61); \
951 if (t <= 62) HASHCLASH_SHA1COMPRESS_ROUND4_STEP(d, e, a, b, c, me2, 62); \
952 if (t <= 63) HASHCLASH_SHA1COMPRESS_ROUND4_STEP(c, d, e, a, b, me2, 63); \
953 if (t <= 64) HASHCLASH_SHA1COMPRESS_ROUND4_STEP(b, c, d, e, a, me2, 64); \
954 if (t <= 65) HASHCLASH_SHA1COMPRESS_ROUND4_STEP(a, b, c, d, e, me2, 65); \
955 if (t <= 66) HASHCLASH_SHA1COMPRESS_ROUND4_STEP(e, a, b, c, d, me2, 66); \
956 if (t <= 67) HASHCLASH_SHA1COMPRESS_ROUND4_STEP(d, e, a, b, c, me2, 67); \
957 if (t <= 68) HASHCLASH_SHA1COMPRESS_ROUND4_STEP(c, d, e, a, b, me2, 68); \
958 if (t <= 69) HASHCLASH_SHA1COMPRESS_ROUND4_STEP(b, c, d, e, a, me2, 69); \
959 if (t <= 70) HASHCLASH_SHA1COMPRESS_ROUND4_STEP(a, b, c, d, e, me2, 70); \
960 if (t <= 71) HASHCLASH_SHA1COMPRESS_ROUND4_STEP(e, a, b, c, d, me2, 71); \
961 if (t <= 72) HASHCLASH_SHA1COMPRESS_ROUND4_STEP(d, e, a, b, c, me2, 72); \
962 if (t <= 73) HASHCLASH_SHA1COMPRESS_ROUND4_STEP(c, d, e, a, b, me2, 73); \
963 if (t <= 74) HASHCLASH_SHA1COMPRESS_ROUND4_STEP(b, c, d, e, a, me2, 74); \
964 if (t <= 75) HASHCLASH_SHA1COMPRESS_ROUND4_STEP(a, b, c, d, e, me2, 75); \
965 if (t <= 76) HASHCLASH_SHA1COMPRESS_ROUND4_STEP(e, a, b, c, d, me2, 76); \
966 if (t <= 77) HASHCLASH_SHA1COMPRESS_ROUND4_STEP(d, e, a, b, c, me2, 77); \
967 if (t <= 78) HASHCLASH_SHA1COMPRESS_ROUND4_STEP(c, d, e, a, b, me2, 78); \
968 if (t <= 79) HASHCLASH_SHA1COMPRESS_ROUND4_STEP(b, c, d, e, a, me2, 79); \
969 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; \
973 #pragma warning(push)
974 #pragma warning(disable: 4127) /* Compiler complains about the checks in the above macro being constant. */
1001 #ifdef DOSTORESTATE6
1005 #ifdef DOSTORESTATE7
1009 #ifdef DOSTORESTATE8
1013 #ifdef DOSTORESTATE9
1017 #ifdef DOSTORESTATE10
1021 #ifdef DOSTORESTATE11
1025 #ifdef DOSTORESTATE12
1029 #ifdef DOSTORESTATE13
1033 #ifdef DOSTORESTATE14
1037 #ifdef DOSTORESTATE15
1041 #ifdef DOSTORESTATE16
1045 #ifdef DOSTORESTATE17
1049 #ifdef DOSTORESTATE18
1053 #ifdef DOSTORESTATE19
1057 #ifdef DOSTORESTATE20
1061 #ifdef DOSTORESTATE21
1065 #ifdef DOSTORESTATE22
1069 #ifdef DOSTORESTATE23
1073 #ifdef DOSTORESTATE24
1077 #ifdef DOSTORESTATE25
1081 #ifdef DOSTORESTATE26
1085 #ifdef DOSTORESTATE27
1089 #ifdef DOSTORESTATE28
1093 #ifdef DOSTORESTATE29
1097 #ifdef DOSTORESTATE30
1101 #ifdef DOSTORESTATE31
1105 #ifdef DOSTORESTATE32
1109 #ifdef DOSTORESTATE33
1113 #ifdef DOSTORESTATE34
1117 #ifdef DOSTORESTATE35
1121 #ifdef DOSTORESTATE36
1125 #ifdef DOSTORESTATE37
1129 #ifdef DOSTORESTATE38
1133 #ifdef DOSTORESTATE39
1137 #ifdef DOSTORESTATE40
1141 #ifdef DOSTORESTATE41
1145 #ifdef DOSTORESTATE42
1149 #ifdef DOSTORESTATE43
1153 #ifdef DOSTORESTATE44
1157 #ifdef DOSTORESTATE45
1161 #ifdef DOSTORESTATE46
1165 #ifdef DOSTORESTATE47
1169 #ifdef DOSTORESTATE48
1173 #ifdef DOSTORESTATE49
1177 #ifdef DOSTORESTATE50
1181 #ifdef DOSTORESTATE51
1185 #ifdef DOSTORESTATE52
1189 #ifdef DOSTORESTATE53
1193 #ifdef DOSTORESTATE54
1197 #ifdef DOSTORESTATE55
1201 #ifdef DOSTORESTATE56
1205 #ifdef DOSTORESTATE57
1209 #ifdef DOSTORESTATE58
1213 #ifdef DOSTORESTATE59
1217 #ifdef DOSTORESTATE60
1221 #ifdef DOSTORESTATE61
1225 #ifdef DOSTORESTATE62
1229 #ifdef DOSTORESTATE63
1233 #ifdef DOSTORESTATE64
1237 #ifdef DOSTORESTATE65
1241 #ifdef DOSTORESTATE66
1245 #ifdef DOSTORESTATE67
1249 #ifdef DOSTORESTATE68
1253 #ifdef DOSTORESTATE69
1257 #ifdef DOSTORESTATE70
1261 #ifdef DOSTORESTATE71
1265 #ifdef DOSTORESTATE72
1269 #ifdef DOSTORESTATE73
1273 #ifdef DOSTORESTATE74
1277 #ifdef DOSTORESTATE75
1281 #ifdef DOSTORESTATE76
1285 #ifdef DOSTORESTATE77
1289 #ifdef DOSTORESTATE78
1293 #ifdef DOSTORESTATE79
1298 #pragma warning(pop)
1301 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])
1305 #ifdef DOSTORESTATE0
1307 sha1recompress_fast_0(ihvin
, ihvout
, me2
, state
);
1310 #ifdef DOSTORESTATE1
1312 sha1recompress_fast_1(ihvin
, ihvout
, me2
, state
);
1315 #ifdef DOSTORESTATE2
1317 sha1recompress_fast_2(ihvin
, ihvout
, me2
, state
);
1320 #ifdef DOSTORESTATE3
1322 sha1recompress_fast_3(ihvin
, ihvout
, me2
, state
);
1325 #ifdef DOSTORESTATE4
1327 sha1recompress_fast_4(ihvin
, ihvout
, me2
, state
);
1330 #ifdef DOSTORESTATE5
1332 sha1recompress_fast_5(ihvin
, ihvout
, me2
, state
);
1335 #ifdef DOSTORESTATE6
1337 sha1recompress_fast_6(ihvin
, ihvout
, me2
, state
);
1340 #ifdef DOSTORESTATE7
1342 sha1recompress_fast_7(ihvin
, ihvout
, me2
, state
);
1345 #ifdef DOSTORESTATE8
1347 sha1recompress_fast_8(ihvin
, ihvout
, me2
, state
);
1350 #ifdef DOSTORESTATE9
1352 sha1recompress_fast_9(ihvin
, ihvout
, me2
, state
);
1355 #ifdef DOSTORESTATE10
1357 sha1recompress_fast_10(ihvin
, ihvout
, me2
, state
);
1360 #ifdef DOSTORESTATE11
1362 sha1recompress_fast_11(ihvin
, ihvout
, me2
, state
);
1365 #ifdef DOSTORESTATE12
1367 sha1recompress_fast_12(ihvin
, ihvout
, me2
, state
);
1370 #ifdef DOSTORESTATE13
1372 sha1recompress_fast_13(ihvin
, ihvout
, me2
, state
);
1375 #ifdef DOSTORESTATE14
1377 sha1recompress_fast_14(ihvin
, ihvout
, me2
, state
);
1380 #ifdef DOSTORESTATE15
1382 sha1recompress_fast_15(ihvin
, ihvout
, me2
, state
);
1385 #ifdef DOSTORESTATE16
1387 sha1recompress_fast_16(ihvin
, ihvout
, me2
, state
);
1390 #ifdef DOSTORESTATE17
1392 sha1recompress_fast_17(ihvin
, ihvout
, me2
, state
);
1395 #ifdef DOSTORESTATE18
1397 sha1recompress_fast_18(ihvin
, ihvout
, me2
, state
);
1400 #ifdef DOSTORESTATE19
1402 sha1recompress_fast_19(ihvin
, ihvout
, me2
, state
);
1405 #ifdef DOSTORESTATE20
1407 sha1recompress_fast_20(ihvin
, ihvout
, me2
, state
);
1410 #ifdef DOSTORESTATE21
1412 sha1recompress_fast_21(ihvin
, ihvout
, me2
, state
);
1415 #ifdef DOSTORESTATE22
1417 sha1recompress_fast_22(ihvin
, ihvout
, me2
, state
);
1420 #ifdef DOSTORESTATE23
1422 sha1recompress_fast_23(ihvin
, ihvout
, me2
, state
);
1425 #ifdef DOSTORESTATE24
1427 sha1recompress_fast_24(ihvin
, ihvout
, me2
, state
);
1430 #ifdef DOSTORESTATE25
1432 sha1recompress_fast_25(ihvin
, ihvout
, me2
, state
);
1435 #ifdef DOSTORESTATE26
1437 sha1recompress_fast_26(ihvin
, ihvout
, me2
, state
);
1440 #ifdef DOSTORESTATE27
1442 sha1recompress_fast_27(ihvin
, ihvout
, me2
, state
);
1445 #ifdef DOSTORESTATE28
1447 sha1recompress_fast_28(ihvin
, ihvout
, me2
, state
);
1450 #ifdef DOSTORESTATE29
1452 sha1recompress_fast_29(ihvin
, ihvout
, me2
, state
);
1455 #ifdef DOSTORESTATE30
1457 sha1recompress_fast_30(ihvin
, ihvout
, me2
, state
);
1460 #ifdef DOSTORESTATE31
1462 sha1recompress_fast_31(ihvin
, ihvout
, me2
, state
);
1465 #ifdef DOSTORESTATE32
1467 sha1recompress_fast_32(ihvin
, ihvout
, me2
, state
);
1470 #ifdef DOSTORESTATE33
1472 sha1recompress_fast_33(ihvin
, ihvout
, me2
, state
);
1475 #ifdef DOSTORESTATE34
1477 sha1recompress_fast_34(ihvin
, ihvout
, me2
, state
);
1480 #ifdef DOSTORESTATE35
1482 sha1recompress_fast_35(ihvin
, ihvout
, me2
, state
);
1485 #ifdef DOSTORESTATE36
1487 sha1recompress_fast_36(ihvin
, ihvout
, me2
, state
);
1490 #ifdef DOSTORESTATE37
1492 sha1recompress_fast_37(ihvin
, ihvout
, me2
, state
);
1495 #ifdef DOSTORESTATE38
1497 sha1recompress_fast_38(ihvin
, ihvout
, me2
, state
);
1500 #ifdef DOSTORESTATE39
1502 sha1recompress_fast_39(ihvin
, ihvout
, me2
, state
);
1505 #ifdef DOSTORESTATE40
1507 sha1recompress_fast_40(ihvin
, ihvout
, me2
, state
);
1510 #ifdef DOSTORESTATE41
1512 sha1recompress_fast_41(ihvin
, ihvout
, me2
, state
);
1515 #ifdef DOSTORESTATE42
1517 sha1recompress_fast_42(ihvin
, ihvout
, me2
, state
);
1520 #ifdef DOSTORESTATE43
1522 sha1recompress_fast_43(ihvin
, ihvout
, me2
, state
);
1525 #ifdef DOSTORESTATE44
1527 sha1recompress_fast_44(ihvin
, ihvout
, me2
, state
);
1530 #ifdef DOSTORESTATE45
1532 sha1recompress_fast_45(ihvin
, ihvout
, me2
, state
);
1535 #ifdef DOSTORESTATE46
1537 sha1recompress_fast_46(ihvin
, ihvout
, me2
, state
);
1540 #ifdef DOSTORESTATE47
1542 sha1recompress_fast_47(ihvin
, ihvout
, me2
, state
);
1545 #ifdef DOSTORESTATE48
1547 sha1recompress_fast_48(ihvin
, ihvout
, me2
, state
);
1550 #ifdef DOSTORESTATE49
1552 sha1recompress_fast_49(ihvin
, ihvout
, me2
, state
);
1555 #ifdef DOSTORESTATE50
1557 sha1recompress_fast_50(ihvin
, ihvout
, me2
, state
);
1560 #ifdef DOSTORESTATE51
1562 sha1recompress_fast_51(ihvin
, ihvout
, me2
, state
);
1565 #ifdef DOSTORESTATE52
1567 sha1recompress_fast_52(ihvin
, ihvout
, me2
, state
);
1570 #ifdef DOSTORESTATE53
1572 sha1recompress_fast_53(ihvin
, ihvout
, me2
, state
);
1575 #ifdef DOSTORESTATE54
1577 sha1recompress_fast_54(ihvin
, ihvout
, me2
, state
);
1580 #ifdef DOSTORESTATE55
1582 sha1recompress_fast_55(ihvin
, ihvout
, me2
, state
);
1585 #ifdef DOSTORESTATE56
1587 sha1recompress_fast_56(ihvin
, ihvout
, me2
, state
);
1590 #ifdef DOSTORESTATE57
1592 sha1recompress_fast_57(ihvin
, ihvout
, me2
, state
);
1595 #ifdef DOSTORESTATE58
1597 sha1recompress_fast_58(ihvin
, ihvout
, me2
, state
);
1600 #ifdef DOSTORESTATE59
1602 sha1recompress_fast_59(ihvin
, ihvout
, me2
, state
);
1605 #ifdef DOSTORESTATE60
1607 sha1recompress_fast_60(ihvin
, ihvout
, me2
, state
);
1610 #ifdef DOSTORESTATE61
1612 sha1recompress_fast_61(ihvin
, ihvout
, me2
, state
);
1615 #ifdef DOSTORESTATE62
1617 sha1recompress_fast_62(ihvin
, ihvout
, me2
, state
);
1620 #ifdef DOSTORESTATE63
1622 sha1recompress_fast_63(ihvin
, ihvout
, me2
, state
);
1625 #ifdef DOSTORESTATE64
1627 sha1recompress_fast_64(ihvin
, ihvout
, me2
, state
);
1630 #ifdef DOSTORESTATE65
1632 sha1recompress_fast_65(ihvin
, ihvout
, me2
, state
);
1635 #ifdef DOSTORESTATE66
1637 sha1recompress_fast_66(ihvin
, ihvout
, me2
, state
);
1640 #ifdef DOSTORESTATE67
1642 sha1recompress_fast_67(ihvin
, ihvout
, me2
, state
);
1645 #ifdef DOSTORESTATE68
1647 sha1recompress_fast_68(ihvin
, ihvout
, me2
, state
);
1650 #ifdef DOSTORESTATE69
1652 sha1recompress_fast_69(ihvin
, ihvout
, me2
, state
);
1655 #ifdef DOSTORESTATE70
1657 sha1recompress_fast_70(ihvin
, ihvout
, me2
, state
);
1660 #ifdef DOSTORESTATE71
1662 sha1recompress_fast_71(ihvin
, ihvout
, me2
, state
);
1665 #ifdef DOSTORESTATE72
1667 sha1recompress_fast_72(ihvin
, ihvout
, me2
, state
);
1670 #ifdef DOSTORESTATE73
1672 sha1recompress_fast_73(ihvin
, ihvout
, me2
, state
);
1675 #ifdef DOSTORESTATE74
1677 sha1recompress_fast_74(ihvin
, ihvout
, me2
, state
);
1680 #ifdef DOSTORESTATE75
1682 sha1recompress_fast_75(ihvin
, ihvout
, me2
, state
);
1685 #ifdef DOSTORESTATE76
1687 sha1recompress_fast_76(ihvin
, ihvout
, me2
, state
);
1690 #ifdef DOSTORESTATE77
1692 sha1recompress_fast_77(ihvin
, ihvout
, me2
, state
);
1695 #ifdef DOSTORESTATE78
1697 sha1recompress_fast_78(ihvin
, ihvout
, me2
, state
);
1700 #ifdef DOSTORESTATE79
1702 sha1recompress_fast_79(ihvin
, ihvout
, me2
, state
);
1713 static void sha1_process(SHA1_CTX
*ctx
, const uint32_t block
[16])
1716 uint32_t ubc_dv_mask
[DVMASKSIZE
] = { 0xFFFFFFFF };
1719 ctx
->ihv1
[0] = ctx
->ihv
[0];
1720 ctx
->ihv1
[1] = ctx
->ihv
[1];
1721 ctx
->ihv1
[2] = ctx
->ihv
[2];
1722 ctx
->ihv1
[3] = ctx
->ihv
[3];
1723 ctx
->ihv1
[4] = ctx
->ihv
[4];
1725 sha1_compression_states(ctx
->ihv
, block
, ctx
->m1
, ctx
->states
);
1727 if (ctx
->detect_coll
)
1731 ubc_check(ctx
->m1
, ubc_dv_mask
);
1734 if (ubc_dv_mask
[0] != 0)
1736 for (i
= 0; sha1_dvs
[i
].dvType
!= 0; ++i
)
1738 if (ubc_dv_mask
[0] & ((uint32_t)(1) << sha1_dvs
[i
].maskb
))
1740 for (j
= 0; j
< 80; ++j
)
1741 ctx
->m2
[j
] = ctx
->m1
[j
] ^ sha1_dvs
[i
].dm
[j
];
1743 sha1_recompression_step(sha1_dvs
[i
].testt
, ctx
->ihv2
, ihvtmp
, ctx
->m2
, ctx
->states
[sha1_dvs
[i
].testt
]);
1745 /* to verify SHA-1 collision detection code with collisions for reduced-step SHA-1 */
1746 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])))
1747 || (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 ctx
->found_collision
= 1;
1753 sha1_compression_W(ctx
->ihv
, ctx
->m1
);
1754 sha1_compression_W(ctx
->ihv
, ctx
->m1
);
1765 void SHA1DCInit(SHA1_CTX
*ctx
)
1768 ctx
->ihv
[0] = 0x67452301;
1769 ctx
->ihv
[1] = 0xEFCDAB89;
1770 ctx
->ihv
[2] = 0x98BADCFE;
1771 ctx
->ihv
[3] = 0x10325476;
1772 ctx
->ihv
[4] = 0xC3D2E1F0;
1773 ctx
->found_collision
= 0;
1774 ctx
->safe_hash
= SHA1DC_INIT_SAFE_HASH_DEFAULT
;
1776 ctx
->detect_coll
= 1;
1777 ctx
->reduced_round_coll
= 0;
1778 ctx
->callback
= NULL
;
1781 void SHA1DCSetSafeHash(SHA1_CTX
*ctx
, int safehash
)
1790 void SHA1DCSetUseUBC(SHA1_CTX
*ctx
, int ubc_check
)
1798 void SHA1DCSetUseDetectColl(SHA1_CTX
*ctx
, int detect_coll
)
1801 ctx
->detect_coll
= 1;
1803 ctx
->detect_coll
= 0;
1806 void SHA1DCSetDetectReducedRoundCollision(SHA1_CTX
*ctx
, int reduced_round_coll
)
1808 if (reduced_round_coll
)
1809 ctx
->reduced_round_coll
= 1;
1811 ctx
->reduced_round_coll
= 0;
1814 void SHA1DCSetCallback(SHA1_CTX
*ctx
, collision_block_callback callback
)
1816 ctx
->callback
= callback
;
1819 void SHA1DCUpdate(SHA1_CTX
*ctx
, const char *buf
, size_t len
)
1821 unsigned left
, fill
;
1826 left
= ctx
->total
& 63;
1829 if (left
&& len
>= fill
)
1832 memcpy(ctx
->buffer
+ left
, buf
, fill
);
1833 sha1_process(ctx
, (uint32_t*)(ctx
->buffer
));
1842 #if defined(SHA1DC_ALLOW_UNALIGNED_ACCESS)
1843 sha1_process(ctx
, (uint32_t*)(buf
));
1845 memcpy(ctx
->buffer
, buf
, 64);
1846 sha1_process(ctx
, (uint32_t*)(ctx
->buffer
));
1847 #endif /* defined(SHA1DC_ALLOW_UNALIGNED_ACCESS) */
1854 memcpy(ctx
->buffer
+ left
, buf
, len
);
1858 static const unsigned char sha1_padding
[64] =
1860 0x80, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
1861 0, 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
1866 int SHA1DCFinal(unsigned char output
[20], SHA1_CTX
*ctx
)
1868 uint32_t last
= ctx
->total
& 63;
1869 uint32_t padn
= (last
< 56) ? (56 - last
) : (120 - last
);
1871 SHA1DCUpdate(ctx
, (const char*)(sha1_padding
), padn
);
1873 total
= ctx
->total
- padn
;
1875 ctx
->buffer
[56] = (unsigned char)(total
>> 56);
1876 ctx
->buffer
[57] = (unsigned char)(total
>> 48);
1877 ctx
->buffer
[58] = (unsigned char)(total
>> 40);
1878 ctx
->buffer
[59] = (unsigned char)(total
>> 32);
1879 ctx
->buffer
[60] = (unsigned char)(total
>> 24);
1880 ctx
->buffer
[61] = (unsigned char)(total
>> 16);
1881 ctx
->buffer
[62] = (unsigned char)(total
>> 8);
1882 ctx
->buffer
[63] = (unsigned char)(total
);
1883 sha1_process(ctx
, (uint32_t*)(ctx
->buffer
));
1884 output
[0] = (unsigned char)(ctx
->ihv
[0] >> 24);
1885 output
[1] = (unsigned char)(ctx
->ihv
[0] >> 16);
1886 output
[2] = (unsigned char)(ctx
->ihv
[0] >> 8);
1887 output
[3] = (unsigned char)(ctx
->ihv
[0]);
1888 output
[4] = (unsigned char)(ctx
->ihv
[1] >> 24);
1889 output
[5] = (unsigned char)(ctx
->ihv
[1] >> 16);
1890 output
[6] = (unsigned char)(ctx
->ihv
[1] >> 8);
1891 output
[7] = (unsigned char)(ctx
->ihv
[1]);
1892 output
[8] = (unsigned char)(ctx
->ihv
[2] >> 24);
1893 output
[9] = (unsigned char)(ctx
->ihv
[2] >> 16);
1894 output
[10] = (unsigned char)(ctx
->ihv
[2] >> 8);
1895 output
[11] = (unsigned char)(ctx
->ihv
[2]);
1896 output
[12] = (unsigned char)(ctx
->ihv
[3] >> 24);
1897 output
[13] = (unsigned char)(ctx
->ihv
[3] >> 16);
1898 output
[14] = (unsigned char)(ctx
->ihv
[3] >> 8);
1899 output
[15] = (unsigned char)(ctx
->ihv
[3]);
1900 output
[16] = (unsigned char)(ctx
->ihv
[4] >> 24);
1901 output
[17] = (unsigned char)(ctx
->ihv
[4] >> 16);
1902 output
[18] = (unsigned char)(ctx
->ihv
[4] >> 8);
1903 output
[19] = (unsigned char)(ctx
->ihv
[4]);
1904 return ctx
->found_collision
;
1907 #ifdef SHA1DC_CUSTOM_TRAILING_INCLUDE_SHA1_C
1908 #include SHA1DC_CUSTOM_TRAILING_INCLUDE_SHA1_C