Coverage Report

Created: 2024-09-08 06:23

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