|
1
|
/* |
|
2
|
** The code in this file is the concatenation of several files |
|
3
|
** copied out of |
|
4
|
** |
|
5
|
** https://github.com/cr-marcstevens/sha1collisiondetection |
|
6
|
** |
|
7
|
** The copy was made on 2017-03-01. Some minor formatting changes |
|
8
|
** were made but otherwise the code is unchanged. All |
|
9
|
** original copyright claims are preserved. |
|
10
|
** |
|
11
|
** The code here implements a version of the SHA1 hash function that |
|
12
|
** is not vulnerable to crypto-analysis based attacks. If an input |
|
13
|
** is detected that looks like it might have been the result of a |
|
14
|
** crypto-analysis attack, then the hash is perturbed to generate a |
|
15
|
** completely different hash. The authors claim that the chance of |
|
16
|
** a false-positive is vanishingly small. |
|
17
|
*/ |
|
18
|
/*MAKEHEADERS-STOP*/ |
|
19
|
#include "config.h" |
|
20
|
#if FOSSIL_HARDENED_SHA1 /* Only do this code if requested */ |
|
21
|
/*************** File: lib/sha1.c ****************/ |
|
22
|
/*** |
|
23
|
* Copyright 2017 Marc Stevens <[email protected]>, Dan Shumow ([email protected]) |
|
24
|
* Distributed under the MIT Software License. |
|
25
|
* See accompanying file LICENSE.txt or copy at |
|
26
|
* https://opensource.org/licenses/MIT |
|
27
|
***/ |
|
28
|
/*************** File: LICENSE.txt ***************/ |
|
29
|
/* |
|
30
|
** MIT License |
|
31
|
** |
|
32
|
** Copyright (c) 2017: |
|
33
|
** Marc Stevens |
|
34
|
** Cryptology Group |
|
35
|
** Centrum Wiskunde & Informatica |
|
36
|
** P.O. Box 94079, 1090 GB Amsterdam, Netherlands |
|
37
|
** [email protected] |
|
38
|
** |
|
39
|
** Dan Shumow |
|
40
|
** Microsoft Research |
|
41
|
** [email protected] |
|
42
|
** |
|
43
|
** Permission is hereby granted, free of charge, to any person obtaining a copy |
|
44
|
** of this software and associated documentation files (the "Software"), to deal |
|
45
|
** in the Software without restriction, including without limitation the rights |
|
46
|
** to use, copy, modify, merge, publish, distribute, sublicense, and/or sell |
|
47
|
** copies of the Software, and to permit persons to whom the Software is |
|
48
|
** furnished to do so, subject to the following conditions: |
|
49
|
** |
|
50
|
** The above copyright notice and this permission notice shall be included in all |
|
51
|
** copies or substantial portions of the Software. |
|
52
|
** |
|
53
|
** THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR |
|
54
|
** IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, |
|
55
|
** FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE |
|
56
|
** AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER |
|
57
|
** LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, |
|
58
|
** OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE |
|
59
|
** SOFTWARE. |
|
60
|
*/ |
|
61
|
|
|
62
|
#include <string.h> |
|
63
|
#include <memory.h> |
|
64
|
#include <stdio.h> |
|
65
|
|
|
66
|
#define DVMASKSIZE 1 |
|
67
|
typedef struct { int dvType; int dvK; int dvB; int testt; int maski; int maskb; uint32_t dm[80]; } dv_info_t; |
|
68
|
#define DOSTORESTATE58 |
|
69
|
#define DOSTORESTATE65 |
|
70
|
typedef void(*sha1_recompression_type)(uint32_t*, uint32_t*, const uint32_t*, const uint32_t*); |
|
71
|
void sha1_message_expansion(uint32_t W[80]); |
|
72
|
void sha1_compression(uint32_t ihv[5], const uint32_t m[16]); |
|
73
|
void sha1_compression_W(uint32_t ihv[5], const uint32_t W[80]); |
|
74
|
void sha1_compression_states(uint32_t ihv[5], const uint32_t W[80], uint32_t states[80][5]); |
|
75
|
extern sha1_recompression_type sha1_recompression_step[80]; |
|
76
|
typedef void(*collision_block_callback)(uint64_t, const uint32_t*, const uint32_t*, const uint32_t*, const uint32_t*); |
|
77
|
typedef struct { |
|
78
|
uint64_t total; |
|
79
|
uint32_t ihv[5]; |
|
80
|
unsigned char buffer[64]; |
|
81
|
int bigendian; |
|
82
|
int found_collision; |
|
83
|
int safe_hash; |
|
84
|
int detect_coll; |
|
85
|
int ubc_check; |
|
86
|
int reduced_round_coll; |
|
87
|
collision_block_callback callback; |
|
88
|
|
|
89
|
uint32_t ihv1[5]; |
|
90
|
uint32_t ihv2[5]; |
|
91
|
uint32_t m1[80]; |
|
92
|
uint32_t m2[80]; |
|
93
|
uint32_t states[80][5]; |
|
94
|
} SHA1_CTX; |
|
95
|
|
|
96
|
/******************** File: lib/ubc_check.c **************************/ |
|
97
|
/*** |
|
98
|
* Copyright 2017 Marc Stevens <[email protected]>, Dan Shumow <[email protected]> |
|
99
|
* Distributed under the MIT Software License. |
|
100
|
* See accompanying file LICENSE.txt or copy at |
|
101
|
* https://opensource.org/licenses/MIT |
|
102
|
***/ |
|
103
|
|
|
104
|
/* |
|
105
|
** this file was generated by the 'parse_bitrel' program in the tools section |
|
106
|
** using the data files from directory 'tools/data/3565' |
|
107
|
** |
|
108
|
** sha1_dvs contains a list of SHA-1 Disturbance Vectors (DV) to check |
|
109
|
** dvType, dvK and dvB define the DV: I(K,B) or II(K,B) (see the paper) |
|
110
|
** dm[80] is the expanded message block XOR-difference defined by the DV |
|
111
|
** testt is the step to do the recompression from for collision detection |
|
112
|
** maski and maskb define the bit to check for each DV in the dvmask returned by ubc_check |
|
113
|
** |
|
114
|
** ubc_check takes as input an expanded message block and verifies the unavoidable bitconditions for all listed DVs |
|
115
|
** it returns a dvmask where each bit belonging to a DV is set if all unavoidable bitconditions for that DV have been met |
|
116
|
** thus one needs to do the recompression check for each DV that has its bit set |
|
117
|
** |
|
118
|
** ubc_check is programmatically generated and the unavoidable bitconditions have been hardcoded |
|
119
|
** a directly verifiable version named ubc_check_verify can be found in ubc_check_verify.c |
|
120
|
** ubc_check has been verified against ubc_check_verify using the 'ubc_check_test' program in the tools section |
|
121
|
*/ |
|
122
|
|
|
123
|
static const uint32_t DV_I_43_0_bit = (uint32_t)(1) << 0; |
|
124
|
static const uint32_t DV_I_44_0_bit = (uint32_t)(1) << 1; |
|
125
|
static const uint32_t DV_I_45_0_bit = (uint32_t)(1) << 2; |
|
126
|
static const uint32_t DV_I_46_0_bit = (uint32_t)(1) << 3; |
|
127
|
static const uint32_t DV_I_46_2_bit = (uint32_t)(1) << 4; |
|
128
|
static const uint32_t DV_I_47_0_bit = (uint32_t)(1) << 5; |
|
129
|
static const uint32_t DV_I_47_2_bit = (uint32_t)(1) << 6; |
|
130
|
static const uint32_t DV_I_48_0_bit = (uint32_t)(1) << 7; |
|
131
|
static const uint32_t DV_I_48_2_bit = (uint32_t)(1) << 8; |
|
132
|
static const uint32_t DV_I_49_0_bit = (uint32_t)(1) << 9; |
|
133
|
static const uint32_t DV_I_49_2_bit = (uint32_t)(1) << 10; |
|
134
|
static const uint32_t DV_I_50_0_bit = (uint32_t)(1) << 11; |
|
135
|
static const uint32_t DV_I_50_2_bit = (uint32_t)(1) << 12; |
|
136
|
static const uint32_t DV_I_51_0_bit = (uint32_t)(1) << 13; |
|
137
|
static const uint32_t DV_I_51_2_bit = (uint32_t)(1) << 14; |
|
138
|
static const uint32_t DV_I_52_0_bit = (uint32_t)(1) << 15; |
|
139
|
static const uint32_t DV_II_45_0_bit = (uint32_t)(1) << 16; |
|
140
|
static const uint32_t DV_II_46_0_bit = (uint32_t)(1) << 17; |
|
141
|
static const uint32_t DV_II_46_2_bit = (uint32_t)(1) << 18; |
|
142
|
static const uint32_t DV_II_47_0_bit = (uint32_t)(1) << 19; |
|
143
|
static const uint32_t DV_II_48_0_bit = (uint32_t)(1) << 20; |
|
144
|
static const uint32_t DV_II_49_0_bit = (uint32_t)(1) << 21; |
|
145
|
static const uint32_t DV_II_49_2_bit = (uint32_t)(1) << 22; |
|
146
|
static const uint32_t DV_II_50_0_bit = (uint32_t)(1) << 23; |
|
147
|
static const uint32_t DV_II_50_2_bit = (uint32_t)(1) << 24; |
|
148
|
static const uint32_t DV_II_51_0_bit = (uint32_t)(1) << 25; |
|
149
|
static const uint32_t DV_II_51_2_bit = (uint32_t)(1) << 26; |
|
150
|
static const uint32_t DV_II_52_0_bit = (uint32_t)(1) << 27; |
|
151
|
static const uint32_t DV_II_53_0_bit = (uint32_t)(1) << 28; |
|
152
|
static const uint32_t DV_II_54_0_bit = (uint32_t)(1) << 29; |
|
153
|
static const uint32_t DV_II_55_0_bit = (uint32_t)(1) << 30; |
|
154
|
static const uint32_t DV_II_56_0_bit = (uint32_t)(1) << 31; |
|
155
|
|
|
156
|
dv_info_t sha1_dvs[] = |
|
157
|
{ |
|
158
|
{1,43,0,58,0,0, { 0x08000000,0x9800000c,0xd8000010,0x08000010,0xb8000010,0x98000000,0x60000000,0x00000008,0xc0000000,0x90000014,0x10000010,0xb8000014,0x28000000,0x20000010,0x48000000,0x08000018,0x60000000,0x90000010,0xf0000010,0x90000008,0xc0000000,0x90000010,0xf0000010,0xb0000008,0x40000000,0x90000000,0xf0000010,0x90000018,0x60000000,0x90000010,0x90000010,0x90000000,0x80000000,0x00000010,0xa0000000,0x20000000,0xa0000000,0x20000010,0x00000000,0x20000010,0x20000000,0x00000010,0x20000000,0x00000010,0xa0000000,0x00000000,0x20000000,0x20000000,0x00000000,0x00000000,0x00000000,0x00000000,0x00000000,0x00000000,0x00000000,0x00000000,0x00000000,0x00000000,0x00000001,0x00000020,0x00000001,0x40000002,0x40000040,0x40000002,0x80000004,0x80000080,0x80000006,0x00000049,0x00000103,0x80000009,0x80000012,0x80000202,0x00000018,0x00000164,0x00000408,0x800000e6,0x8000004c,0x00000803,0x80000161,0x80000599 } } |
|
159
|
, {1,44,0,58,0,1, { 0xb4000008,0x08000000,0x9800000c,0xd8000010,0x08000010,0xb8000010,0x98000000,0x60000000,0x00000008,0xc0000000,0x90000014,0x10000010,0xb8000014,0x28000000,0x20000010,0x48000000,0x08000018,0x60000000,0x90000010,0xf0000010,0x90000008,0xc0000000,0x90000010,0xf0000010,0xb0000008,0x40000000,0x90000000,0xf0000010,0x90000018,0x60000000,0x90000010,0x90000010,0x90000000,0x80000000,0x00000010,0xa0000000,0x20000000,0xa0000000,0x20000010,0x00000000,0x20000010,0x20000000,0x00000010,0x20000000,0x00000010,0xa0000000,0x00000000,0x20000000,0x20000000,0x00000000,0x00000000,0x00000000,0x00000000,0x00000000,0x00000000,0x00000000,0x00000000,0x00000000,0x00000000,0x00000001,0x00000020,0x00000001,0x40000002,0x40000040,0x40000002,0x80000004,0x80000080,0x80000006,0x00000049,0x00000103,0x80000009,0x80000012,0x80000202,0x00000018,0x00000164,0x00000408,0x800000e6,0x8000004c,0x00000803,0x80000161 } } |
|
160
|
, {1,45,0,58,0,2, { 0xf4000014,0xb4000008,0x08000000,0x9800000c,0xd8000010,0x08000010,0xb8000010,0x98000000,0x60000000,0x00000008,0xc0000000,0x90000014,0x10000010,0xb8000014,0x28000000,0x20000010,0x48000000,0x08000018,0x60000000,0x90000010,0xf0000010,0x90000008,0xc0000000,0x90000010,0xf0000010,0xb0000008,0x40000000,0x90000000,0xf0000010,0x90000018,0x60000000,0x90000010,0x90000010,0x90000000,0x80000000,0x00000010,0xa0000000,0x20000000,0xa0000000,0x20000010,0x00000000,0x20000010,0x20000000,0x00000010,0x20000000,0x00000010,0xa0000000,0x00000000,0x20000000,0x20000000,0x00000000,0x00000000,0x00000000,0x00000000,0x00000000,0x00000000,0x00000000,0x00000000,0x00000000,0x00000000,0x00000001,0x00000020,0x00000001,0x40000002,0x40000040,0x40000002,0x80000004,0x80000080,0x80000006,0x00000049,0x00000103,0x80000009,0x80000012,0x80000202,0x00000018,0x00000164,0x00000408,0x800000e6,0x8000004c,0x00000803 } } |
|
161
|
, {1,46,0,58,0,3, { 0x2c000010,0xf4000014,0xb4000008,0x08000000,0x9800000c,0xd8000010,0x08000010,0xb8000010,0x98000000,0x60000000,0x00000008,0xc0000000,0x90000014,0x10000010,0xb8000014,0x28000000,0x20000010,0x48000000,0x08000018,0x60000000,0x90000010,0xf0000010,0x90000008,0xc0000000,0x90000010,0xf0000010,0xb0000008,0x40000000,0x90000000,0xf0000010,0x90000018,0x60000000,0x90000010,0x90000010,0x90000000,0x80000000,0x00000010,0xa0000000,0x20000000,0xa0000000,0x20000010,0x00000000,0x20000010,0x20000000,0x00000010,0x20000000,0x00000010,0xa0000000,0x00000000,0x20000000,0x20000000,0x00000000,0x00000000,0x00000000,0x00000000,0x00000000,0x00000000,0x00000000,0x00000000,0x00000000,0x00000000,0x00000001,0x00000020,0x00000001,0x40000002,0x40000040,0x40000002,0x80000004,0x80000080,0x80000006,0x00000049,0x00000103,0x80000009,0x80000012,0x80000202,0x00000018,0x00000164,0x00000408,0x800000e6,0x8000004c } } |
|
162
|
, {1,46,2,58,0,4, { 0xb0000040,0xd0000053,0xd0000022,0x20000000,0x60000032,0x60000043,0x20000040,0xe0000042,0x60000002,0x80000001,0x00000020,0x00000003,0x40000052,0x40000040,0xe0000052,0xa0000000,0x80000040,0x20000001,0x20000060,0x80000001,0x40000042,0xc0000043,0x40000022,0x00000003,0x40000042,0xc0000043,0xc0000022,0x00000001,0x40000002,0xc0000043,0x40000062,0x80000001,0x40000042,0x40000042,0x40000002,0x00000002,0x00000040,0x80000002,0x80000000,0x80000002,0x80000040,0x00000000,0x80000040,0x80000000,0x00000040,0x80000000,0x00000040,0x80000002,0x00000000,0x80000000,0x80000000,0x00000000,0x00000000,0x00000000,0x00000000,0x00000000,0x00000000,0x00000000,0x00000000,0x00000000,0x00000000,0x00000004,0x00000080,0x00000004,0x00000009,0x00000101,0x00000009,0x00000012,0x00000202,0x0000001a,0x00000124,0x0000040c,0x00000026,0x0000004a,0x0000080a,0x00000060,0x00000590,0x00001020,0x0000039a,0x00000132 } } |
|
163
|
, {1,47,0,58,0,5, { 0xc8000010,0x2c000010,0xf4000014,0xb4000008,0x08000000,0x9800000c,0xd8000010,0x08000010,0xb8000010,0x98000000,0x60000000,0x00000008,0xc0000000,0x90000014,0x10000010,0xb8000014,0x28000000,0x20000010,0x48000000,0x08000018,0x60000000,0x90000010,0xf0000010,0x90000008,0xc0000000,0x90000010,0xf0000010,0xb0000008,0x40000000,0x90000000,0xf0000010,0x90000018,0x60000000,0x90000010,0x90000010,0x90000000,0x80000000,0x00000010,0xa0000000,0x20000000,0xa0000000,0x20000010,0x00000000,0x20000010,0x20000000,0x00000010,0x20000000,0x00000010,0xa0000000,0x00000000,0x20000000,0x20000000,0x00000000,0x00000000,0x00000000,0x00000000,0x00000000,0x00000000,0x00000000,0x00000000,0x00000000,0x00000000,0x00000001,0x00000020,0x00000001,0x40000002,0x40000040,0x40000002,0x80000004,0x80000080,0x80000006,0x00000049,0x00000103,0x80000009,0x80000012,0x80000202,0x00000018,0x00000164,0x00000408,0x800000e6 } } |
|
164
|
, {1,47,2,58,0,6, { 0x20000043,0xb0000040,0xd0000053,0xd0000022,0x20000000,0x60000032,0x60000043,0x20000040,0xe0000042,0x60000002,0x80000001,0x00000020,0x00000003,0x40000052,0x40000040,0xe0000052,0xa0000000,0x80000040,0x20000001,0x20000060,0x80000001,0x40000042,0xc0000043,0x40000022,0x00000003,0x40000042,0xc0000043,0xc0000022,0x00000001,0x40000002,0xc0000043,0x40000062,0x80000001,0x40000042,0x40000042,0x40000002,0x00000002,0x00000040,0x80000002,0x80000000,0x80000002,0x80000040,0x00000000,0x80000040,0x80000000,0x00000040,0x80000000,0x00000040,0x80000002,0x00000000,0x80000000,0x80000000,0x00000000,0x00000000,0x00000000,0x00000000,0x00000000,0x00000000,0x00000000,0x00000000,0x00000000,0x00000000,0x00000004,0x00000080,0x00000004,0x00000009,0x00000101,0x00000009,0x00000012,0x00000202,0x0000001a,0x00000124,0x0000040c,0x00000026,0x0000004a,0x0000080a,0x00000060,0x00000590,0x00001020,0x0000039a } } |
|
165
|
, {1,48,0,58,0,7, { 0xb800000a,0xc8000010,0x2c000010,0xf4000014,0xb4000008,0x08000000,0x9800000c,0xd8000010,0x08000010,0xb8000010,0x98000000,0x60000000,0x00000008,0xc0000000,0x90000014,0x10000010,0xb8000014,0x28000000,0x20000010,0x48000000,0x08000018,0x60000000,0x90000010,0xf0000010,0x90000008,0xc0000000,0x90000010,0xf0000010,0xb0000008,0x40000000,0x90000000,0xf0000010,0x90000018,0x60000000,0x90000010,0x90000010,0x90000000,0x80000000,0x00000010,0xa0000000,0x20000000,0xa0000000,0x20000010,0x00000000,0x20000010,0x20000000,0x00000010,0x20000000,0x00000010,0xa0000000,0x00000000,0x20000000,0x20000000,0x00000000,0x00000000,0x00000000,0x00000000,0x00000000,0x00000000,0x00000000,0x00000000,0x00000000,0x00000000,0x00000001,0x00000020,0x00000001,0x40000002,0x40000040,0x40000002,0x80000004,0x80000080,0x80000006,0x00000049,0x00000103,0x80000009,0x80000012,0x80000202,0x00000018,0x00000164,0x00000408 } } |
|
166
|
, {1,48,2,58,0,8, { 0xe000002a,0x20000043,0xb0000040,0xd0000053,0xd0000022,0x20000000,0x60000032,0x60000043,0x20000040,0xe0000042,0x60000002,0x80000001,0x00000020,0x00000003,0x40000052,0x40000040,0xe0000052,0xa0000000,0x80000040,0x20000001,0x20000060,0x80000001,0x40000042,0xc0000043,0x40000022,0x00000003,0x40000042,0xc0000043,0xc0000022,0x00000001,0x40000002,0xc0000043,0x40000062,0x80000001,0x40000042,0x40000042,0x40000002,0x00000002,0x00000040,0x80000002,0x80000000,0x80000002,0x80000040,0x00000000,0x80000040,0x80000000,0x00000040,0x80000000,0x00000040,0x80000002,0x00000000,0x80000000,0x80000000,0x00000000,0x00000000,0x00000000,0x00000000,0x00000000,0x00000000,0x00000000,0x00000000,0x00000000,0x00000000,0x00000004,0x00000080,0x00000004,0x00000009,0x00000101,0x00000009,0x00000012,0x00000202,0x0000001a,0x00000124,0x0000040c,0x00000026,0x0000004a,0x0000080a,0x00000060,0x00000590,0x00001020 } } |
|
167
|
, {1,49,0,58,0,9, { 0x18000000,0xb800000a,0xc8000010,0x2c000010,0xf4000014,0xb4000008,0x08000000,0x9800000c,0xd8000010,0x08000010,0xb8000010,0x98000000,0x60000000,0x00000008,0xc0000000,0x90000014,0x10000010,0xb8000014,0x28000000,0x20000010,0x48000000,0x08000018,0x60000000,0x90000010,0xf0000010,0x90000008,0xc0000000,0x90000010,0xf0000010,0xb0000008,0x40000000,0x90000000,0xf0000010,0x90000018,0x60000000,0x90000010,0x90000010,0x90000000,0x80000000,0x00000010,0xa0000000,0x20000000,0xa0000000,0x20000010,0x00000000,0x20000010,0x20000000,0x00000010,0x20000000,0x00000010,0xa0000000,0x00000000,0x20000000,0x20000000,0x00000000,0x00000000,0x00000000,0x00000000,0x00000000,0x00000000,0x00000000,0x00000000,0x00000000,0x00000000,0x00000001,0x00000020,0x00000001,0x40000002,0x40000040,0x40000002,0x80000004,0x80000080,0x80000006,0x00000049,0x00000103,0x80000009,0x80000012,0x80000202,0x00000018,0x00000164 } } |
|
168
|
, {1,49,2,58,0,10, { 0x60000000,0xe000002a,0x20000043,0xb0000040,0xd0000053,0xd0000022,0x20000000,0x60000032,0x60000043,0x20000040,0xe0000042,0x60000002,0x80000001,0x00000020,0x00000003,0x40000052,0x40000040,0xe0000052,0xa0000000,0x80000040,0x20000001,0x20000060,0x80000001,0x40000042,0xc0000043,0x40000022,0x00000003,0x40000042,0xc0000043,0xc0000022,0x00000001,0x40000002,0xc0000043,0x40000062,0x80000001,0x40000042,0x40000042,0x40000002,0x00000002,0x00000040,0x80000002,0x80000000,0x80000002,0x80000040,0x00000000,0x80000040,0x80000000,0x00000040,0x80000000,0x00000040,0x80000002,0x00000000,0x80000000,0x80000000,0x00000000,0x00000000,0x00000000,0x00000000,0x00000000,0x00000000,0x00000000,0x00000000,0x00000000,0x00000000,0x00000004,0x00000080,0x00000004,0x00000009,0x00000101,0x00000009,0x00000012,0x00000202,0x0000001a,0x00000124,0x0000040c,0x00000026,0x0000004a,0x0000080a,0x00000060,0x00000590 } } |
|
169
|
, {1,50,0,65,0,11, { 0x0800000c,0x18000000,0xb800000a,0xc8000010,0x2c000010,0xf4000014,0xb4000008,0x08000000,0x9800000c,0xd8000010,0x08000010,0xb8000010,0x98000000,0x60000000,0x00000008,0xc0000000,0x90000014,0x10000010,0xb8000014,0x28000000,0x20000010,0x48000000,0x08000018,0x60000000,0x90000010,0xf0000010,0x90000008,0xc0000000,0x90000010,0xf0000010,0xb0000008,0x40000000,0x90000000,0xf0000010,0x90000018,0x60000000,0x90000010,0x90000010,0x90000000,0x80000000,0x00000010,0xa0000000,0x20000000,0xa0000000,0x20000010,0x00000000,0x20000010,0x20000000,0x00000010,0x20000000,0x00000010,0xa0000000,0x00000000,0x20000000,0x20000000,0x00000000,0x00000000,0x00000000,0x00000000,0x00000000,0x00000000,0x00000000,0x00000000,0x00000000,0x00000000,0x00000001,0x00000020,0x00000001,0x40000002,0x40000040,0x40000002,0x80000004,0x80000080,0x80000006,0x00000049,0x00000103,0x80000009,0x80000012,0x80000202,0x00000018 } } |
|
170
|
, {1,50,2,65,0,12, { 0x20000030,0x60000000,0xe000002a,0x20000043,0xb0000040,0xd0000053,0xd0000022,0x20000000,0x60000032,0x60000043,0x20000040,0xe0000042,0x60000002,0x80000001,0x00000020,0x00000003,0x40000052,0x40000040,0xe0000052,0xa0000000,0x80000040,0x20000001,0x20000060,0x80000001,0x40000042,0xc0000043,0x40000022,0x00000003,0x40000042,0xc0000043,0xc0000022,0x00000001,0x40000002,0xc0000043,0x40000062,0x80000001,0x40000042,0x40000042,0x40000002,0x00000002,0x00000040,0x80000002,0x80000000,0x80000002,0x80000040,0x00000000,0x80000040,0x80000000,0x00000040,0x80000000,0x00000040,0x80000002,0x00000000,0x80000000,0x80000000,0x00000000,0x00000000,0x00000000,0x00000000,0x00000000,0x00000000,0x00000000,0x00000000,0x00000000,0x00000000,0x00000004,0x00000080,0x00000004,0x00000009,0x00000101,0x00000009,0x00000012,0x00000202,0x0000001a,0x00000124,0x0000040c,0x00000026,0x0000004a,0x0000080a,0x00000060 } } |
|
171
|
, {1,51,0,65,0,13, { 0xe8000000,0x0800000c,0x18000000,0xb800000a,0xc8000010,0x2c000010,0xf4000014,0xb4000008,0x08000000,0x9800000c,0xd8000010,0x08000010,0xb8000010,0x98000000,0x60000000,0x00000008,0xc0000000,0x90000014,0x10000010,0xb8000014,0x28000000,0x20000010,0x48000000,0x08000018,0x60000000,0x90000010,0xf0000010,0x90000008,0xc0000000,0x90000010,0xf0000010,0xb0000008,0x40000000,0x90000000,0xf0000010,0x90000018,0x60000000,0x90000010,0x90000010,0x90000000,0x80000000,0x00000010,0xa0000000,0x20000000,0xa0000000,0x20000010,0x00000000,0x20000010,0x20000000,0x00000010,0x20000000,0x00000010,0xa0000000,0x00000000,0x20000000,0x20000000,0x00000000,0x00000000,0x00000000,0x00000000,0x00000000,0x00000000,0x00000000,0x00000000,0x00000000,0x00000000,0x00000001,0x00000020,0x00000001,0x40000002,0x40000040,0x40000002,0x80000004,0x80000080,0x80000006,0x00000049,0x00000103,0x80000009,0x80000012,0x80000202 } } |
|
172
|
, {1,51,2,65,0,14, { 0xa0000003,0x20000030,0x60000000,0xe000002a,0x20000043,0xb0000040,0xd0000053,0xd0000022,0x20000000,0x60000032,0x60000043,0x20000040,0xe0000042,0x60000002,0x80000001,0x00000020,0x00000003,0x40000052,0x40000040,0xe0000052,0xa0000000,0x80000040,0x20000001,0x20000060,0x80000001,0x40000042,0xc0000043,0x40000022,0x00000003,0x40000042,0xc0000043,0xc0000022,0x00000001,0x40000002,0xc0000043,0x40000062,0x80000001,0x40000042,0x40000042,0x40000002,0x00000002,0x00000040,0x80000002,0x80000000,0x80000002,0x80000040,0x00000000,0x80000040,0x80000000,0x00000040,0x80000000,0x00000040,0x80000002,0x00000000,0x80000000,0x80000000,0x00000000,0x00000000,0x00000000,0x00000000,0x00000000,0x00000000,0x00000000,0x00000000,0x00000000,0x00000000,0x00000004,0x00000080,0x00000004,0x00000009,0x00000101,0x00000009,0x00000012,0x00000202,0x0000001a,0x00000124,0x0000040c,0x00000026,0x0000004a,0x0000080a } } |
|
173
|
, {1,52,0,65,0,15, { 0x04000010,0xe8000000,0x0800000c,0x18000000,0xb800000a,0xc8000010,0x2c000010,0xf4000014,0xb4000008,0x08000000,0x9800000c,0xd8000010,0x08000010,0xb8000010,0x98000000,0x60000000,0x00000008,0xc0000000,0x90000014,0x10000010,0xb8000014,0x28000000,0x20000010,0x48000000,0x08000018,0x60000000,0x90000010,0xf0000010,0x90000008,0xc0000000,0x90000010,0xf0000010,0xb0000008,0x40000000,0x90000000,0xf0000010,0x90000018,0x60000000,0x90000010,0x90000010,0x90000000,0x80000000,0x00000010,0xa0000000,0x20000000,0xa0000000,0x20000010,0x00000000,0x20000010,0x20000000,0x00000010,0x20000000,0x00000010,0xa0000000,0x00000000,0x20000000,0x20000000,0x00000000,0x00000000,0x00000000,0x00000000,0x00000000,0x00000000,0x00000000,0x00000000,0x00000000,0x00000000,0x00000001,0x00000020,0x00000001,0x40000002,0x40000040,0x40000002,0x80000004,0x80000080,0x80000006,0x00000049,0x00000103,0x80000009,0x80000012 } } |
|
174
|
, {2,45,0,58,0,16, { 0xec000014,0x0c000002,0xc0000010,0xb400001c,0x2c000004,0xbc000018,0xb0000010,0x0000000c,0xb8000010,0x08000018,0x78000010,0x08000014,0x70000010,0xb800001c,0xe8000000,0xb0000004,0x58000010,0xb000000c,0x48000000,0xb0000000,0xb8000010,0x98000010,0xa0000000,0x00000000,0x00000000,0x20000000,0x80000000,0x00000010,0x00000000,0x20000010,0x20000000,0x00000010,0x60000000,0x00000018,0xe0000000,0x90000000,0x30000010,0xb0000000,0x20000000,0x20000000,0xa0000000,0x00000010,0x80000000,0x20000000,0x20000000,0x20000000,0x80000000,0x00000010,0x00000000,0x20000010,0xa0000000,0x00000000,0x20000000,0x20000000,0x00000000,0x00000000,0x00000000,0x00000000,0x00000000,0x00000000,0x00000001,0x00000020,0x00000001,0x40000002,0x40000041,0x40000022,0x80000005,0xc0000082,0xc0000046,0x4000004b,0x80000107,0x00000089,0x00000014,0x8000024b,0x0000011b,0x8000016d,0x8000041a,0x000002e4,0x80000054,0x00000967 } } |
|
175
|
, {2,46,0,58,0,17, { 0x2400001c,0xec000014,0x0c000002,0xc0000010,0xb400001c,0x2c000004,0xbc000018,0xb0000010,0x0000000c,0xb8000010,0x08000018,0x78000010,0x08000014,0x70000010,0xb800001c,0xe8000000,0xb0000004,0x58000010,0xb000000c,0x48000000,0xb0000000,0xb8000010,0x98000010,0xa0000000,0x00000000,0x00000000,0x20000000,0x80000000,0x00000010,0x00000000,0x20000010,0x20000000,0x00000010,0x60000000,0x00000018,0xe0000000,0x90000000,0x30000010,0xb0000000,0x20000000,0x20000000,0xa0000000,0x00000010,0x80000000,0x20000000,0x20000000,0x20000000,0x80000000,0x00000010,0x00000000,0x20000010,0xa0000000,0x00000000,0x20000000,0x20000000,0x00000000,0x00000000,0x00000000,0x00000000,0x00000000,0x00000000,0x00000001,0x00000020,0x00000001,0x40000002,0x40000041,0x40000022,0x80000005,0xc0000082,0xc0000046,0x4000004b,0x80000107,0x00000089,0x00000014,0x8000024b,0x0000011b,0x8000016d,0x8000041a,0x000002e4,0x80000054 } } |
|
176
|
, {2,46,2,58,0,18, { 0x90000070,0xb0000053,0x30000008,0x00000043,0xd0000072,0xb0000010,0xf0000062,0xc0000042,0x00000030,0xe0000042,0x20000060,0xe0000041,0x20000050,0xc0000041,0xe0000072,0xa0000003,0xc0000012,0x60000041,0xc0000032,0x20000001,0xc0000002,0xe0000042,0x60000042,0x80000002,0x00000000,0x00000000,0x80000000,0x00000002,0x00000040,0x00000000,0x80000040,0x80000000,0x00000040,0x80000001,0x00000060,0x80000003,0x40000002,0xc0000040,0xc0000002,0x80000000,0x80000000,0x80000002,0x00000040,0x00000002,0x80000000,0x80000000,0x80000000,0x00000002,0x00000040,0x00000000,0x80000040,0x80000002,0x00000000,0x80000000,0x80000000,0x00000000,0x00000000,0x00000000,0x00000000,0x00000000,0x00000000,0x00000004,0x00000080,0x00000004,0x00000009,0x00000105,0x00000089,0x00000016,0x0000020b,0x0000011b,0x0000012d,0x0000041e,0x00000224,0x00000050,0x0000092e,0x0000046c,0x000005b6,0x0000106a,0x00000b90,0x00000152 } } |
|
177
|
, {2,47,0,58,0,19, { 0x20000010,0x2400001c,0xec000014,0x0c000002,0xc0000010,0xb400001c,0x2c000004,0xbc000018,0xb0000010,0x0000000c,0xb8000010,0x08000018,0x78000010,0x08000014,0x70000010,0xb800001c,0xe8000000,0xb0000004,0x58000010,0xb000000c,0x48000000,0xb0000000,0xb8000010,0x98000010,0xa0000000,0x00000000,0x00000000,0x20000000,0x80000000,0x00000010,0x00000000,0x20000010,0x20000000,0x00000010,0x60000000,0x00000018,0xe0000000,0x90000000,0x30000010,0xb0000000,0x20000000,0x20000000,0xa0000000,0x00000010,0x80000000,0x20000000,0x20000000,0x20000000,0x80000000,0x00000010,0x00000000,0x20000010,0xa0000000,0x00000000,0x20000000,0x20000000,0x00000000,0x00000000,0x00000000,0x00000000,0x00000000,0x00000000,0x00000001,0x00000020,0x00000001,0x40000002,0x40000041,0x40000022,0x80000005,0xc0000082,0xc0000046,0x4000004b,0x80000107,0x00000089,0x00000014,0x8000024b,0x0000011b,0x8000016d,0x8000041a,0x000002e4 } } |
|
178
|
, {2,48,0,58,0,20, { 0xbc00001a,0x20000010,0x2400001c,0xec000014,0x0c000002,0xc0000010,0xb400001c,0x2c000004,0xbc000018,0xb0000010,0x0000000c,0xb8000010,0x08000018,0x78000010,0x08000014,0x70000010,0xb800001c,0xe8000000,0xb0000004,0x58000010,0xb000000c,0x48000000,0xb0000000,0xb8000010,0x98000010,0xa0000000,0x00000000,0x00000000,0x20000000,0x80000000,0x00000010,0x00000000,0x20000010,0x20000000,0x00000010,0x60000000,0x00000018,0xe0000000,0x90000000,0x30000010,0xb0000000,0x20000000,0x20000000,0xa0000000,0x00000010,0x80000000,0x20000000,0x20000000,0x20000000,0x80000000,0x00000010,0x00000000,0x20000010,0xa0000000,0x00000000,0x20000000,0x20000000,0x00000000,0x00000000,0x00000000,0x00000000,0x00000000,0x00000000,0x00000001,0x00000020,0x00000001,0x40000002,0x40000041,0x40000022,0x80000005,0xc0000082,0xc0000046,0x4000004b,0x80000107,0x00000089,0x00000014,0x8000024b,0x0000011b,0x8000016d,0x8000041a } } |
|
179
|
, {2,49,0,58,0,21, { 0x3c000004,0xbc00001a,0x20000010,0x2400001c,0xec000014,0x0c000002,0xc0000010,0xb400001c,0x2c000004,0xbc000018,0xb0000010,0x0000000c,0xb8000010,0x08000018,0x78000010,0x08000014,0x70000010,0xb800001c,0xe8000000,0xb0000004,0x58000010,0xb000000c,0x48000000,0xb0000000,0xb8000010,0x98000010,0xa0000000,0x00000000,0x00000000,0x20000000,0x80000000,0x00000010,0x00000000,0x20000010,0x20000000,0x00000010,0x60000000,0x00000018,0xe0000000,0x90000000,0x30000010,0xb0000000,0x20000000,0x20000000,0xa0000000,0x00000010,0x80000000,0x20000000,0x20000000,0x20000000,0x80000000,0x00000010,0x00000000,0x20000010,0xa0000000,0x00000000,0x20000000,0x20000000,0x00000000,0x00000000,0x00000000,0x00000000,0x00000000,0x00000000,0x00000001,0x00000020,0x00000001,0x40000002,0x40000041,0x40000022,0x80000005,0xc0000082,0xc0000046,0x4000004b,0x80000107,0x00000089,0x00000014,0x8000024b,0x0000011b,0x8000016d } } |
|
180
|
, {2,49,2,58,0,22, { 0xf0000010,0xf000006a,0x80000040,0x90000070,0xb0000053,0x30000008,0x00000043,0xd0000072,0xb0000010,0xf0000062,0xc0000042,0x00000030,0xe0000042,0x20000060,0xe0000041,0x20000050,0xc0000041,0xe0000072,0xa0000003,0xc0000012,0x60000041,0xc0000032,0x20000001,0xc0000002,0xe0000042,0x60000042,0x80000002,0x00000000,0x00000000,0x80000000,0x00000002,0x00000040,0x00000000,0x80000040,0x80000000,0x00000040,0x80000001,0x00000060,0x80000003,0x40000002,0xc0000040,0xc0000002,0x80000000,0x80000000,0x80000002,0x00000040,0x00000002,0x80000000,0x80000000,0x80000000,0x00000002,0x00000040,0x00000000,0x80000040,0x80000002,0x00000000,0x80000000,0x80000000,0x00000000,0x00000000,0x00000000,0x00000000,0x00000000,0x00000000,0x00000004,0x00000080,0x00000004,0x00000009,0x00000105,0x00000089,0x00000016,0x0000020b,0x0000011b,0x0000012d,0x0000041e,0x00000224,0x00000050,0x0000092e,0x0000046c,0x000005b6 } } |
|
181
|
, {2,50,0,65,0,23, { 0xb400001c,0x3c000004,0xbc00001a,0x20000010,0x2400001c,0xec000014,0x0c000002,0xc0000010,0xb400001c,0x2c000004,0xbc000018,0xb0000010,0x0000000c,0xb8000010,0x08000018,0x78000010,0x08000014,0x70000010,0xb800001c,0xe8000000,0xb0000004,0x58000010,0xb000000c,0x48000000,0xb0000000,0xb8000010,0x98000010,0xa0000000,0x00000000,0x00000000,0x20000000,0x80000000,0x00000010,0x00000000,0x20000010,0x20000000,0x00000010,0x60000000,0x00000018,0xe0000000,0x90000000,0x30000010,0xb0000000,0x20000000,0x20000000,0xa0000000,0x00000010,0x80000000,0x20000000,0x20000000,0x20000000,0x80000000,0x00000010,0x00000000,0x20000010,0xa0000000,0x00000000,0x20000000,0x20000000,0x00000000,0x00000000,0x00000000,0x00000000,0x00000000,0x00000000,0x00000001,0x00000020,0x00000001,0x40000002,0x40000041,0x40000022,0x80000005,0xc0000082,0xc0000046,0x4000004b,0x80000107,0x00000089,0x00000014,0x8000024b,0x0000011b } } |
|
182
|
, {2,50,2,65,0,24, { 0xd0000072,0xf0000010,0xf000006a,0x80000040,0x90000070,0xb0000053,0x30000008,0x00000043,0xd0000072,0xb0000010,0xf0000062,0xc0000042,0x00000030,0xe0000042,0x20000060,0xe0000041,0x20000050,0xc0000041,0xe0000072,0xa0000003,0xc0000012,0x60000041,0xc0000032,0x20000001,0xc0000002,0xe0000042,0x60000042,0x80000002,0x00000000,0x00000000,0x80000000,0x00000002,0x00000040,0x00000000,0x80000040,0x80000000,0x00000040,0x80000001,0x00000060,0x80000003,0x40000002,0xc0000040,0xc0000002,0x80000000,0x80000000,0x80000002,0x00000040,0x00000002,0x80000000,0x80000000,0x80000000,0x00000002,0x00000040,0x00000000,0x80000040,0x80000002,0x00000000,0x80000000,0x80000000,0x00000000,0x00000000,0x00000000,0x00000000,0x00000000,0x00000000,0x00000004,0x00000080,0x00000004,0x00000009,0x00000105,0x00000089,0x00000016,0x0000020b,0x0000011b,0x0000012d,0x0000041e,0x00000224,0x00000050,0x0000092e,0x0000046c } } |
|
183
|
, {2,51,0,65,0,25, { 0xc0000010,0xb400001c,0x3c000004,0xbc00001a,0x20000010,0x2400001c,0xec000014,0x0c000002,0xc0000010,0xb400001c,0x2c000004,0xbc000018,0xb0000010,0x0000000c,0xb8000010,0x08000018,0x78000010,0x08000014,0x70000010,0xb800001c,0xe8000000,0xb0000004,0x58000010,0xb000000c,0x48000000,0xb0000000,0xb8000010,0x98000010,0xa0000000,0x00000000,0x00000000,0x20000000,0x80000000,0x00000010,0x00000000,0x20000010,0x20000000,0x00000010,0x60000000,0x00000018,0xe0000000,0x90000000,0x30000010,0xb0000000,0x20000000,0x20000000,0xa0000000,0x00000010,0x80000000,0x20000000,0x20000000,0x20000000,0x80000000,0x00000010,0x00000000,0x20000010,0xa0000000,0x00000000,0x20000000,0x20000000,0x00000000,0x00000000,0x00000000,0x00000000,0x00000000,0x00000000,0x00000001,0x00000020,0x00000001,0x40000002,0x40000041,0x40000022,0x80000005,0xc0000082,0xc0000046,0x4000004b,0x80000107,0x00000089,0x00000014,0x8000024b } } |
|
184
|
, {2,51,2,65,0,26, { 0x00000043,0xd0000072,0xf0000010,0xf000006a,0x80000040,0x90000070,0xb0000053,0x30000008,0x00000043,0xd0000072,0xb0000010,0xf0000062,0xc0000042,0x00000030,0xe0000042,0x20000060,0xe0000041,0x20000050,0xc0000041,0xe0000072,0xa0000003,0xc0000012,0x60000041,0xc0000032,0x20000001,0xc0000002,0xe0000042,0x60000042,0x80000002,0x00000000,0x00000000,0x80000000,0x00000002,0x00000040,0x00000000,0x80000040,0x80000000,0x00000040,0x80000001,0x00000060,0x80000003,0x40000002,0xc0000040,0xc0000002,0x80000000,0x80000000,0x80000002,0x00000040,0x00000002,0x80000000,0x80000000,0x80000000,0x00000002,0x00000040,0x00000000,0x80000040,0x80000002,0x00000000,0x80000000,0x80000000,0x00000000,0x00000000,0x00000000,0x00000000,0x00000000,0x00000000,0x00000004,0x00000080,0x00000004,0x00000009,0x00000105,0x00000089,0x00000016,0x0000020b,0x0000011b,0x0000012d,0x0000041e,0x00000224,0x00000050,0x0000092e } } |
|
185
|
, {2,52,0,65,0,27, { 0x0c000002,0xc0000010,0xb400001c,0x3c000004,0xbc00001a,0x20000010,0x2400001c,0xec000014,0x0c000002,0xc0000010,0xb400001c,0x2c000004,0xbc000018,0xb0000010,0x0000000c,0xb8000010,0x08000018,0x78000010,0x08000014,0x70000010,0xb800001c,0xe8000000,0xb0000004,0x58000010,0xb000000c,0x48000000,0xb0000000,0xb8000010,0x98000010,0xa0000000,0x00000000,0x00000000,0x20000000,0x80000000,0x00000010,0x00000000,0x20000010,0x20000000,0x00000010,0x60000000,0x00000018,0xe0000000,0x90000000,0x30000010,0xb0000000,0x20000000,0x20000000,0xa0000000,0x00000010,0x80000000,0x20000000,0x20000000,0x20000000,0x80000000,0x00000010,0x00000000,0x20000010,0xa0000000,0x00000000,0x20000000,0x20000000,0x00000000,0x00000000,0x00000000,0x00000000,0x00000000,0x00000000,0x00000001,0x00000020,0x00000001,0x40000002,0x40000041,0x40000022,0x80000005,0xc0000082,0xc0000046,0x4000004b,0x80000107,0x00000089,0x00000014 } } |
|
186
|
, {2,53,0,65,0,28, { 0xcc000014,0x0c000002,0xc0000010,0xb400001c,0x3c000004,0xbc00001a,0x20000010,0x2400001c,0xec000014,0x0c000002,0xc0000010,0xb400001c,0x2c000004,0xbc000018,0xb0000010,0x0000000c,0xb8000010,0x08000018,0x78000010,0x08000014,0x70000010,0xb800001c,0xe8000000,0xb0000004,0x58000010,0xb000000c,0x48000000,0xb0000000,0xb8000010,0x98000010,0xa0000000,0x00000000,0x00000000,0x20000000,0x80000000,0x00000010,0x00000000,0x20000010,0x20000000,0x00000010,0x60000000,0x00000018,0xe0000000,0x90000000,0x30000010,0xb0000000,0x20000000,0x20000000,0xa0000000,0x00000010,0x80000000,0x20000000,0x20000000,0x20000000,0x80000000,0x00000010,0x00000000,0x20000010,0xa0000000,0x00000000,0x20000000,0x20000000,0x00000000,0x00000000,0x00000000,0x00000000,0x00000000,0x00000000,0x00000001,0x00000020,0x00000001,0x40000002,0x40000041,0x40000022,0x80000005,0xc0000082,0xc0000046,0x4000004b,0x80000107,0x00000089 } } |
|
187
|
, {2,54,0,65,0,29, { 0x0400001c,0xcc000014,0x0c000002,0xc0000010,0xb400001c,0x3c000004,0xbc00001a,0x20000010,0x2400001c,0xec000014,0x0c000002,0xc0000010,0xb400001c,0x2c000004,0xbc000018,0xb0000010,0x0000000c,0xb8000010,0x08000018,0x78000010,0x08000014,0x70000010,0xb800001c,0xe8000000,0xb0000004,0x58000010,0xb000000c,0x48000000,0xb0000000,0xb8000010,0x98000010,0xa0000000,0x00000000,0x00000000,0x20000000,0x80000000,0x00000010,0x00000000,0x20000010,0x20000000,0x00000010,0x60000000,0x00000018,0xe0000000,0x90000000,0x30000010,0xb0000000,0x20000000,0x20000000,0xa0000000,0x00000010,0x80000000,0x20000000,0x20000000,0x20000000,0x80000000,0x00000010,0x00000000,0x20000010,0xa0000000,0x00000000,0x20000000,0x20000000,0x00000000,0x00000000,0x00000000,0x00000000,0x00000000,0x00000000,0x00000001,0x00000020,0x00000001,0x40000002,0x40000041,0x40000022,0x80000005,0xc0000082,0xc0000046,0x4000004b,0x80000107 } } |
|
188
|
, {2,55,0,65,0,30, { 0x00000010,0x0400001c,0xcc000014,0x0c000002,0xc0000010,0xb400001c,0x3c000004,0xbc00001a,0x20000010,0x2400001c,0xec000014,0x0c000002,0xc0000010,0xb400001c,0x2c000004,0xbc000018,0xb0000010,0x0000000c,0xb8000010,0x08000018,0x78000010,0x08000014,0x70000010,0xb800001c,0xe8000000,0xb0000004,0x58000010,0xb000000c,0x48000000,0xb0000000,0xb8000010,0x98000010,0xa0000000,0x00000000,0x00000000,0x20000000,0x80000000,0x00000010,0x00000000,0x20000010,0x20000000,0x00000010,0x60000000,0x00000018,0xe0000000,0x90000000,0x30000010,0xb0000000,0x20000000,0x20000000,0xa0000000,0x00000010,0x80000000,0x20000000,0x20000000,0x20000000,0x80000000,0x00000010,0x00000000,0x20000010,0xa0000000,0x00000000,0x20000000,0x20000000,0x00000000,0x00000000,0x00000000,0x00000000,0x00000000,0x00000000,0x00000001,0x00000020,0x00000001,0x40000002,0x40000041,0x40000022,0x80000005,0xc0000082,0xc0000046,0x4000004b } } |
|
189
|
, {2,56,0,65,0,31, { 0x2600001a,0x00000010,0x0400001c,0xcc000014,0x0c000002,0xc0000010,0xb400001c,0x3c000004,0xbc00001a,0x20000010,0x2400001c,0xec000014,0x0c000002,0xc0000010,0xb400001c,0x2c000004,0xbc000018,0xb0000010,0x0000000c,0xb8000010,0x08000018,0x78000010,0x08000014,0x70000010,0xb800001c,0xe8000000,0xb0000004,0x58000010,0xb000000c,0x48000000,0xb0000000,0xb8000010,0x98000010,0xa0000000,0x00000000,0x00000000,0x20000000,0x80000000,0x00000010,0x00000000,0x20000010,0x20000000,0x00000010,0x60000000,0x00000018,0xe0000000,0x90000000,0x30000010,0xb0000000,0x20000000,0x20000000,0xa0000000,0x00000010,0x80000000,0x20000000,0x20000000,0x20000000,0x80000000,0x00000010,0x00000000,0x20000010,0xa0000000,0x00000000,0x20000000,0x20000000,0x00000000,0x00000000,0x00000000,0x00000000,0x00000000,0x00000000,0x00000001,0x00000020,0x00000001,0x40000002,0x40000041,0x40000022,0x80000005,0xc0000082,0xc0000046 } } |
|
190
|
, {0,0,0,0,0,0, {0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0}} |
|
191
|
}; |
|
192
|
void ubc_check(const uint32_t W[80], uint32_t dvmask[1]) |
|
193
|
{ |
|
194
|
uint32_t mask = ~((uint32_t)(0)); |
|
195
|
mask &= (((((W[44]^W[45])>>29)&1)-1) | ~(DV_I_48_0_bit|DV_I_51_0_bit|DV_I_52_0_bit|DV_II_45_0_bit|DV_II_46_0_bit|DV_II_50_0_bit|DV_II_51_0_bit)); |
|
196
|
mask &= (((((W[49]^W[50])>>29)&1)-1) | ~(DV_I_46_0_bit|DV_II_45_0_bit|DV_II_50_0_bit|DV_II_51_0_bit|DV_II_55_0_bit|DV_II_56_0_bit)); |
|
197
|
mask &= (((((W[48]^W[49])>>29)&1)-1) | ~(DV_I_45_0_bit|DV_I_52_0_bit|DV_II_49_0_bit|DV_II_50_0_bit|DV_II_54_0_bit|DV_II_55_0_bit)); |
|
198
|
mask &= ((((W[47]^(W[50]>>25))&(1<<4))-(1<<4)) | ~(DV_I_47_0_bit|DV_I_49_0_bit|DV_I_51_0_bit|DV_II_45_0_bit|DV_II_51_0_bit|DV_II_56_0_bit)); |
|
199
|
mask &= (((((W[47]^W[48])>>29)&1)-1) | ~(DV_I_44_0_bit|DV_I_51_0_bit|DV_II_48_0_bit|DV_II_49_0_bit|DV_II_53_0_bit|DV_II_54_0_bit)); |
|
200
|
mask &= (((((W[46]>>4)^(W[49]>>29))&1)-1) | ~(DV_I_46_0_bit|DV_I_48_0_bit|DV_I_50_0_bit|DV_I_52_0_bit|DV_II_50_0_bit|DV_II_55_0_bit)); |
|
201
|
mask &= (((((W[46]^W[47])>>29)&1)-1) | ~(DV_I_43_0_bit|DV_I_50_0_bit|DV_II_47_0_bit|DV_II_48_0_bit|DV_II_52_0_bit|DV_II_53_0_bit)); |
|
202
|
mask &= (((((W[45]>>4)^(W[48]>>29))&1)-1) | ~(DV_I_45_0_bit|DV_I_47_0_bit|DV_I_49_0_bit|DV_I_51_0_bit|DV_II_49_0_bit|DV_II_54_0_bit)); |
|
203
|
mask &= (((((W[45]^W[46])>>29)&1)-1) | ~(DV_I_49_0_bit|DV_I_52_0_bit|DV_II_46_0_bit|DV_II_47_0_bit|DV_II_51_0_bit|DV_II_52_0_bit)); |
|
204
|
mask &= (((((W[44]>>4)^(W[47]>>29))&1)-1) | ~(DV_I_44_0_bit|DV_I_46_0_bit|DV_I_48_0_bit|DV_I_50_0_bit|DV_II_48_0_bit|DV_II_53_0_bit)); |
|
205
|
mask &= (((((W[43]>>4)^(W[46]>>29))&1)-1) | ~(DV_I_43_0_bit|DV_I_45_0_bit|DV_I_47_0_bit|DV_I_49_0_bit|DV_II_47_0_bit|DV_II_52_0_bit)); |
|
206
|
mask &= (((((W[43]^W[44])>>29)&1)-1) | ~(DV_I_47_0_bit|DV_I_50_0_bit|DV_I_51_0_bit|DV_II_45_0_bit|DV_II_49_0_bit|DV_II_50_0_bit)); |
|
207
|
mask &= (((((W[42]>>4)^(W[45]>>29))&1)-1) | ~(DV_I_44_0_bit|DV_I_46_0_bit|DV_I_48_0_bit|DV_I_52_0_bit|DV_II_46_0_bit|DV_II_51_0_bit)); |
|
208
|
mask &= (((((W[41]>>4)^(W[44]>>29))&1)-1) | ~(DV_I_43_0_bit|DV_I_45_0_bit|DV_I_47_0_bit|DV_I_51_0_bit|DV_II_45_0_bit|DV_II_50_0_bit)); |
|
209
|
mask &= (((((W[40]^W[41])>>29)&1)-1) | ~(DV_I_44_0_bit|DV_I_47_0_bit|DV_I_48_0_bit|DV_II_46_0_bit|DV_II_47_0_bit|DV_II_56_0_bit)); |
|
210
|
mask &= (((((W[54]^W[55])>>29)&1)-1) | ~(DV_I_51_0_bit|DV_II_47_0_bit|DV_II_50_0_bit|DV_II_55_0_bit|DV_II_56_0_bit)); |
|
211
|
mask &= (((((W[53]^W[54])>>29)&1)-1) | ~(DV_I_50_0_bit|DV_II_46_0_bit|DV_II_49_0_bit|DV_II_54_0_bit|DV_II_55_0_bit)); |
|
212
|
mask &= (((((W[52]^W[53])>>29)&1)-1) | ~(DV_I_49_0_bit|DV_II_45_0_bit|DV_II_48_0_bit|DV_II_53_0_bit|DV_II_54_0_bit)); |
|
213
|
mask &= ((((W[50]^(W[53]>>25))&(1<<4))-(1<<4)) | ~(DV_I_50_0_bit|DV_I_52_0_bit|DV_II_46_0_bit|DV_II_48_0_bit|DV_II_54_0_bit)); |
|
214
|
mask &= (((((W[50]^W[51])>>29)&1)-1) | ~(DV_I_47_0_bit|DV_II_46_0_bit|DV_II_51_0_bit|DV_II_52_0_bit|DV_II_56_0_bit)); |
|
215
|
mask &= ((((W[49]^(W[52]>>25))&(1<<4))-(1<<4)) | ~(DV_I_49_0_bit|DV_I_51_0_bit|DV_II_45_0_bit|DV_II_47_0_bit|DV_II_53_0_bit)); |
|
216
|
mask &= ((((W[48]^(W[51]>>25))&(1<<4))-(1<<4)) | ~(DV_I_48_0_bit|DV_I_50_0_bit|DV_I_52_0_bit|DV_II_46_0_bit|DV_II_52_0_bit)); |
|
217
|
mask &= (((((W[42]^W[43])>>29)&1)-1) | ~(DV_I_46_0_bit|DV_I_49_0_bit|DV_I_50_0_bit|DV_II_48_0_bit|DV_II_49_0_bit)); |
|
218
|
mask &= (((((W[41]^W[42])>>29)&1)-1) | ~(DV_I_45_0_bit|DV_I_48_0_bit|DV_I_49_0_bit|DV_II_47_0_bit|DV_II_48_0_bit)); |
|
219
|
mask &= (((((W[40]>>4)^(W[43]>>29))&1)-1) | ~(DV_I_44_0_bit|DV_I_46_0_bit|DV_I_50_0_bit|DV_II_49_0_bit|DV_II_56_0_bit)); |
|
220
|
mask &= (((((W[39]>>4)^(W[42]>>29))&1)-1) | ~(DV_I_43_0_bit|DV_I_45_0_bit|DV_I_49_0_bit|DV_II_48_0_bit|DV_II_55_0_bit)); |
|
221
|
if (mask & (DV_I_44_0_bit|DV_I_48_0_bit|DV_II_47_0_bit|DV_II_54_0_bit|DV_II_56_0_bit)) |
|
222
|
mask &= (((((W[38]>>4)^(W[41]>>29))&1)-1) | ~(DV_I_44_0_bit|DV_I_48_0_bit|DV_II_47_0_bit|DV_II_54_0_bit|DV_II_56_0_bit)); |
|
223
|
mask &= (((((W[37]>>4)^(W[40]>>29))&1)-1) | ~(DV_I_43_0_bit|DV_I_47_0_bit|DV_II_46_0_bit|DV_II_53_0_bit|DV_II_55_0_bit)); |
|
224
|
if (mask & (DV_I_52_0_bit|DV_II_48_0_bit|DV_II_51_0_bit|DV_II_56_0_bit)) |
|
225
|
mask &= (((((W[55]^W[56])>>29)&1)-1) | ~(DV_I_52_0_bit|DV_II_48_0_bit|DV_II_51_0_bit|DV_II_56_0_bit)); |
|
226
|
if (mask & (DV_I_52_0_bit|DV_II_48_0_bit|DV_II_50_0_bit|DV_II_56_0_bit)) |
|
227
|
mask &= ((((W[52]^(W[55]>>25))&(1<<4))-(1<<4)) | ~(DV_I_52_0_bit|DV_II_48_0_bit|DV_II_50_0_bit|DV_II_56_0_bit)); |
|
228
|
if (mask & (DV_I_51_0_bit|DV_II_47_0_bit|DV_II_49_0_bit|DV_II_55_0_bit)) |
|
229
|
mask &= ((((W[51]^(W[54]>>25))&(1<<4))-(1<<4)) | ~(DV_I_51_0_bit|DV_II_47_0_bit|DV_II_49_0_bit|DV_II_55_0_bit)); |
|
230
|
if (mask & (DV_I_48_0_bit|DV_II_47_0_bit|DV_II_52_0_bit|DV_II_53_0_bit)) |
|
231
|
mask &= (((((W[51]^W[52])>>29)&1)-1) | ~(DV_I_48_0_bit|DV_II_47_0_bit|DV_II_52_0_bit|DV_II_53_0_bit)); |
|
232
|
if (mask & (DV_I_46_0_bit|DV_I_49_0_bit|DV_II_45_0_bit|DV_II_48_0_bit)) |
|
233
|
mask &= (((((W[36]>>4)^(W[40]>>29))&1)-1) | ~(DV_I_46_0_bit|DV_I_49_0_bit|DV_II_45_0_bit|DV_II_48_0_bit)); |
|
234
|
if (mask & (DV_I_52_0_bit|DV_II_48_0_bit|DV_II_49_0_bit)) |
|
235
|
mask &= ((0-(((W[53]^W[56])>>29)&1)) | ~(DV_I_52_0_bit|DV_II_48_0_bit|DV_II_49_0_bit)); |
|
236
|
if (mask & (DV_I_50_0_bit|DV_II_46_0_bit|DV_II_47_0_bit)) |
|
237
|
mask &= ((0-(((W[51]^W[54])>>29)&1)) | ~(DV_I_50_0_bit|DV_II_46_0_bit|DV_II_47_0_bit)); |
|
238
|
if (mask & (DV_I_49_0_bit|DV_I_51_0_bit|DV_II_45_0_bit)) |
|
239
|
mask &= ((0-(((W[50]^W[52])>>29)&1)) | ~(DV_I_49_0_bit|DV_I_51_0_bit|DV_II_45_0_bit)); |
|
240
|
if (mask & (DV_I_48_0_bit|DV_I_50_0_bit|DV_I_52_0_bit)) |
|
241
|
mask &= ((0-(((W[49]^W[51])>>29)&1)) | ~(DV_I_48_0_bit|DV_I_50_0_bit|DV_I_52_0_bit)); |
|
242
|
if (mask & (DV_I_47_0_bit|DV_I_49_0_bit|DV_I_51_0_bit)) |
|
243
|
mask &= ((0-(((W[48]^W[50])>>29)&1)) | ~(DV_I_47_0_bit|DV_I_49_0_bit|DV_I_51_0_bit)); |
|
244
|
if (mask & (DV_I_46_0_bit|DV_I_48_0_bit|DV_I_50_0_bit)) |
|
245
|
mask &= ((0-(((W[47]^W[49])>>29)&1)) | ~(DV_I_46_0_bit|DV_I_48_0_bit|DV_I_50_0_bit)); |
|
246
|
if (mask & (DV_I_45_0_bit|DV_I_47_0_bit|DV_I_49_0_bit)) |
|
247
|
mask &= ((0-(((W[46]^W[48])>>29)&1)) | ~(DV_I_45_0_bit|DV_I_47_0_bit|DV_I_49_0_bit)); |
|
248
|
mask &= ((((W[45]^W[47])&(1<<6))-(1<<6)) | ~(DV_I_47_2_bit|DV_I_49_2_bit|DV_I_51_2_bit)); |
|
249
|
if (mask & (DV_I_44_0_bit|DV_I_46_0_bit|DV_I_48_0_bit)) |
|
250
|
mask &= ((0-(((W[45]^W[47])>>29)&1)) | ~(DV_I_44_0_bit|DV_I_46_0_bit|DV_I_48_0_bit)); |
|
251
|
mask &= (((((W[44]^W[46])>>6)&1)-1) | ~(DV_I_46_2_bit|DV_I_48_2_bit|DV_I_50_2_bit)); |
|
252
|
if (mask & (DV_I_43_0_bit|DV_I_45_0_bit|DV_I_47_0_bit)) |
|
253
|
mask &= ((0-(((W[44]^W[46])>>29)&1)) | ~(DV_I_43_0_bit|DV_I_45_0_bit|DV_I_47_0_bit)); |
|
254
|
mask &= ((0-((W[41]^(W[42]>>5))&(1<<1))) | ~(DV_I_48_2_bit|DV_II_46_2_bit|DV_II_51_2_bit)); |
|
255
|
mask &= ((0-((W[40]^(W[41]>>5))&(1<<1))) | ~(DV_I_47_2_bit|DV_I_51_2_bit|DV_II_50_2_bit)); |
|
256
|
if (mask & (DV_I_44_0_bit|DV_I_46_0_bit|DV_II_56_0_bit)) |
|
257
|
mask &= ((0-(((W[40]^W[42])>>4)&1)) | ~(DV_I_44_0_bit|DV_I_46_0_bit|DV_II_56_0_bit)); |
|
258
|
mask &= ((0-((W[39]^(W[40]>>5))&(1<<1))) | ~(DV_I_46_2_bit|DV_I_50_2_bit|DV_II_49_2_bit)); |
|
259
|
if (mask & (DV_I_43_0_bit|DV_I_45_0_bit|DV_II_55_0_bit)) |
|
260
|
mask &= ((0-(((W[39]^W[41])>>4)&1)) | ~(DV_I_43_0_bit|DV_I_45_0_bit|DV_II_55_0_bit)); |
|
261
|
if (mask & (DV_I_44_0_bit|DV_II_54_0_bit|DV_II_56_0_bit)) |
|
262
|
mask &= ((0-(((W[38]^W[40])>>4)&1)) | ~(DV_I_44_0_bit|DV_II_54_0_bit|DV_II_56_0_bit)); |
|
263
|
if (mask & (DV_I_43_0_bit|DV_II_53_0_bit|DV_II_55_0_bit)) |
|
264
|
mask &= ((0-(((W[37]^W[39])>>4)&1)) | ~(DV_I_43_0_bit|DV_II_53_0_bit|DV_II_55_0_bit)); |
|
265
|
mask &= ((0-((W[36]^(W[37]>>5))&(1<<1))) | ~(DV_I_47_2_bit|DV_I_50_2_bit|DV_II_46_2_bit)); |
|
266
|
if (mask & (DV_I_45_0_bit|DV_I_48_0_bit|DV_II_47_0_bit)) |
|
267
|
mask &= (((((W[35]>>4)^(W[39]>>29))&1)-1) | ~(DV_I_45_0_bit|DV_I_48_0_bit|DV_II_47_0_bit)); |
|
268
|
if (mask & (DV_I_48_0_bit|DV_II_48_0_bit)) |
|
269
|
mask &= ((0-((W[63]^(W[64]>>5))&(1<<0))) | ~(DV_I_48_0_bit|DV_II_48_0_bit)); |
|
270
|
if (mask & (DV_I_45_0_bit|DV_II_45_0_bit)) |
|
271
|
mask &= ((0-((W[63]^(W[64]>>5))&(1<<1))) | ~(DV_I_45_0_bit|DV_II_45_0_bit)); |
|
272
|
if (mask & (DV_I_47_0_bit|DV_II_47_0_bit)) |
|
273
|
mask &= ((0-((W[62]^(W[63]>>5))&(1<<0))) | ~(DV_I_47_0_bit|DV_II_47_0_bit)); |
|
274
|
if (mask & (DV_I_46_0_bit|DV_II_46_0_bit)) |
|
275
|
mask &= ((0-((W[61]^(W[62]>>5))&(1<<0))) | ~(DV_I_46_0_bit|DV_II_46_0_bit)); |
|
276
|
mask &= ((0-((W[61]^(W[62]>>5))&(1<<2))) | ~(DV_I_46_2_bit|DV_II_46_2_bit)); |
|
277
|
if (mask & (DV_I_45_0_bit|DV_II_45_0_bit)) |
|
278
|
mask &= ((0-((W[60]^(W[61]>>5))&(1<<0))) | ~(DV_I_45_0_bit|DV_II_45_0_bit)); |
|
279
|
if (mask & (DV_II_51_0_bit|DV_II_54_0_bit)) |
|
280
|
mask &= (((((W[58]^W[59])>>29)&1)-1) | ~(DV_II_51_0_bit|DV_II_54_0_bit)); |
|
281
|
if (mask & (DV_II_50_0_bit|DV_II_53_0_bit)) |
|
282
|
mask &= (((((W[57]^W[58])>>29)&1)-1) | ~(DV_II_50_0_bit|DV_II_53_0_bit)); |
|
283
|
if (mask & (DV_II_52_0_bit|DV_II_54_0_bit)) |
|
284
|
mask &= ((((W[56]^(W[59]>>25))&(1<<4))-(1<<4)) | ~(DV_II_52_0_bit|DV_II_54_0_bit)); |
|
285
|
if (mask & (DV_II_51_0_bit|DV_II_52_0_bit)) |
|
286
|
mask &= ((0-(((W[56]^W[59])>>29)&1)) | ~(DV_II_51_0_bit|DV_II_52_0_bit)); |
|
287
|
if (mask & (DV_II_49_0_bit|DV_II_52_0_bit)) |
|
288
|
mask &= (((((W[56]^W[57])>>29)&1)-1) | ~(DV_II_49_0_bit|DV_II_52_0_bit)); |
|
289
|
if (mask & (DV_II_51_0_bit|DV_II_53_0_bit)) |
|
290
|
mask &= ((((W[55]^(W[58]>>25))&(1<<4))-(1<<4)) | ~(DV_II_51_0_bit|DV_II_53_0_bit)); |
|
291
|
if (mask & (DV_II_50_0_bit|DV_II_52_0_bit)) |
|
292
|
mask &= ((((W[54]^(W[57]>>25))&(1<<4))-(1<<4)) | ~(DV_II_50_0_bit|DV_II_52_0_bit)); |
|
293
|
if (mask & (DV_II_49_0_bit|DV_II_51_0_bit)) |
|
294
|
mask &= ((((W[53]^(W[56]>>25))&(1<<4))-(1<<4)) | ~(DV_II_49_0_bit|DV_II_51_0_bit)); |
|
295
|
mask &= ((((W[51]^(W[50]>>5))&(1<<1))-(1<<1)) | ~(DV_I_50_2_bit|DV_II_46_2_bit)); |
|
296
|
mask &= ((((W[48]^W[50])&(1<<6))-(1<<6)) | ~(DV_I_50_2_bit|DV_II_46_2_bit)); |
|
297
|
if (mask & (DV_I_51_0_bit|DV_I_52_0_bit)) |
|
298
|
mask &= ((0-(((W[48]^W[55])>>29)&1)) | ~(DV_I_51_0_bit|DV_I_52_0_bit)); |
|
299
|
mask &= ((((W[47]^W[49])&(1<<6))-(1<<6)) | ~(DV_I_49_2_bit|DV_I_51_2_bit)); |
|
300
|
mask &= ((((W[48]^(W[47]>>5))&(1<<1))-(1<<1)) | ~(DV_I_47_2_bit|DV_II_51_2_bit)); |
|
301
|
mask &= ((((W[46]^W[48])&(1<<6))-(1<<6)) | ~(DV_I_48_2_bit|DV_I_50_2_bit)); |
|
302
|
mask &= ((((W[47]^(W[46]>>5))&(1<<1))-(1<<1)) | ~(DV_I_46_2_bit|DV_II_50_2_bit)); |
|
303
|
mask &= ((0-((W[44]^(W[45]>>5))&(1<<1))) | ~(DV_I_51_2_bit|DV_II_49_2_bit)); |
|
304
|
mask &= ((((W[43]^W[45])&(1<<6))-(1<<6)) | ~(DV_I_47_2_bit|DV_I_49_2_bit)); |
|
305
|
mask &= (((((W[42]^W[44])>>6)&1)-1) | ~(DV_I_46_2_bit|DV_I_48_2_bit)); |
|
306
|
mask &= ((((W[43]^(W[42]>>5))&(1<<1))-(1<<1)) | ~(DV_II_46_2_bit|DV_II_51_2_bit)); |
|
307
|
mask &= ((((W[42]^(W[41]>>5))&(1<<1))-(1<<1)) | ~(DV_I_51_2_bit|DV_II_50_2_bit)); |
|
308
|
mask &= ((((W[41]^(W[40]>>5))&(1<<1))-(1<<1)) | ~(DV_I_50_2_bit|DV_II_49_2_bit)); |
|
309
|
if (mask & (DV_I_52_0_bit|DV_II_51_0_bit)) |
|
310
|
mask &= ((((W[39]^(W[43]>>25))&(1<<4))-(1<<4)) | ~(DV_I_52_0_bit|DV_II_51_0_bit)); |
|
311
|
if (mask & (DV_I_51_0_bit|DV_II_50_0_bit)) |
|
312
|
mask &= ((((W[38]^(W[42]>>25))&(1<<4))-(1<<4)) | ~(DV_I_51_0_bit|DV_II_50_0_bit)); |
|
313
|
if (mask & (DV_I_48_2_bit|DV_I_51_2_bit)) |
|
314
|
mask &= ((0-((W[37]^(W[38]>>5))&(1<<1))) | ~(DV_I_48_2_bit|DV_I_51_2_bit)); |
|
315
|
if (mask & (DV_I_50_0_bit|DV_II_49_0_bit)) |
|
316
|
mask &= ((((W[37]^(W[41]>>25))&(1<<4))-(1<<4)) | ~(DV_I_50_0_bit|DV_II_49_0_bit)); |
|
317
|
if (mask & (DV_II_52_0_bit|DV_II_54_0_bit)) |
|
318
|
mask &= ((0-((W[36]^W[38])&(1<<4))) | ~(DV_II_52_0_bit|DV_II_54_0_bit)); |
|
319
|
mask &= ((0-((W[35]^(W[36]>>5))&(1<<1))) | ~(DV_I_46_2_bit|DV_I_49_2_bit)); |
|
320
|
if (mask & (DV_I_51_0_bit|DV_II_47_0_bit)) |
|
321
|
mask &= ((((W[35]^(W[39]>>25))&(1<<3))-(1<<3)) | ~(DV_I_51_0_bit|DV_II_47_0_bit)); |
|
322
|
if (mask) { |
|
323
|
|
|
324
|
if (mask & DV_I_43_0_bit) |
|
325
|
if ( |
|
326
|
!((W[61]^(W[62]>>5)) & (1<<1)) |
|
327
|
|| !(!((W[59]^(W[63]>>25)) & (1<<5))) |
|
328
|
|| !((W[58]^(W[63]>>30)) & (1<<0)) |
|
329
|
) mask &= ~DV_I_43_0_bit; |
|
330
|
if (mask & DV_I_44_0_bit) |
|
331
|
if ( |
|
332
|
!((W[62]^(W[63]>>5)) & (1<<1)) |
|
333
|
|| !(!((W[60]^(W[64]>>25)) & (1<<5))) |
|
334
|
|| !((W[59]^(W[64]>>30)) & (1<<0)) |
|
335
|
) mask &= ~DV_I_44_0_bit; |
|
336
|
if (mask & DV_I_46_2_bit) |
|
337
|
mask &= ((~((W[40]^W[42])>>2)) | ~DV_I_46_2_bit); |
|
338
|
if (mask & DV_I_47_2_bit) |
|
339
|
if ( |
|
340
|
!((W[62]^(W[63]>>5)) & (1<<2)) |
|
341
|
|| !(!((W[41]^W[43]) & (1<<6))) |
|
342
|
) mask &= ~DV_I_47_2_bit; |
|
343
|
if (mask & DV_I_48_2_bit) |
|
344
|
if ( |
|
345
|
!((W[63]^(W[64]>>5)) & (1<<2)) |
|
346
|
|| !(!((W[48]^(W[49]<<5)) & (1<<6))) |
|
347
|
) mask &= ~DV_I_48_2_bit; |
|
348
|
if (mask & DV_I_49_2_bit) |
|
349
|
if ( |
|
350
|
!(!((W[49]^(W[50]<<5)) & (1<<6))) |
|
351
|
|| !((W[42]^W[50]) & (1<<1)) |
|
352
|
|| !(!((W[39]^(W[40]<<5)) & (1<<6))) |
|
353
|
|| !((W[38]^W[40]) & (1<<1)) |
|
354
|
) mask &= ~DV_I_49_2_bit; |
|
355
|
if (mask & DV_I_50_0_bit) |
|
356
|
mask &= ((((W[36]^W[37])<<7)) | ~DV_I_50_0_bit); |
|
357
|
if (mask & DV_I_50_2_bit) |
|
358
|
mask &= ((((W[43]^W[51])<<11)) | ~DV_I_50_2_bit); |
|
359
|
if (mask & DV_I_51_0_bit) |
|
360
|
mask &= ((((W[37]^W[38])<<9)) | ~DV_I_51_0_bit); |
|
361
|
if (mask & DV_I_51_2_bit) |
|
362
|
if ( |
|
363
|
!(!((W[51]^(W[52]<<5)) & (1<<6))) |
|
364
|
|| !(!((W[49]^W[51]) & (1<<6))) |
|
365
|
|| !(!((W[37]^(W[37]>>5)) & (1<<1))) |
|
366
|
|| !(!((W[35]^(W[39]>>25)) & (1<<5))) |
|
367
|
) mask &= ~DV_I_51_2_bit; |
|
368
|
if (mask & DV_I_52_0_bit) |
|
369
|
mask &= ((((W[38]^W[39])<<11)) | ~DV_I_52_0_bit); |
|
370
|
if (mask & DV_II_46_2_bit) |
|
371
|
mask &= ((((W[47]^W[51])<<17)) | ~DV_II_46_2_bit); |
|
372
|
if (mask & DV_II_48_0_bit) |
|
373
|
if ( |
|
374
|
!(!((W[36]^(W[40]>>25)) & (1<<3))) |
|
375
|
|| !((W[35]^(W[40]<<2)) & (1<<30)) |
|
376
|
) mask &= ~DV_II_48_0_bit; |
|
377
|
if (mask & DV_II_49_0_bit) |
|
378
|
if ( |
|
379
|
!(!((W[37]^(W[41]>>25)) & (1<<3))) |
|
380
|
|| !((W[36]^(W[41]<<2)) & (1<<30)) |
|
381
|
) mask &= ~DV_II_49_0_bit; |
|
382
|
if (mask & DV_II_49_2_bit) |
|
383
|
if ( |
|
384
|
!(!((W[53]^(W[54]<<5)) & (1<<6))) |
|
385
|
|| !(!((W[51]^W[53]) & (1<<6))) |
|
386
|
|| !((W[50]^W[54]) & (1<<1)) |
|
387
|
|| !(!((W[45]^(W[46]<<5)) & (1<<6))) |
|
388
|
|| !(!((W[37]^(W[41]>>25)) & (1<<5))) |
|
389
|
|| !((W[36]^(W[41]>>30)) & (1<<0)) |
|
390
|
) mask &= ~DV_II_49_2_bit; |
|
391
|
if (mask & DV_II_50_0_bit) |
|
392
|
if ( |
|
393
|
!((W[55]^W[58]) & (1<<29)) |
|
394
|
|| !(!((W[38]^(W[42]>>25)) & (1<<3))) |
|
395
|
|| !((W[37]^(W[42]<<2)) & (1<<30)) |
|
396
|
) mask &= ~DV_II_50_0_bit; |
|
397
|
if (mask & DV_II_50_2_bit) |
|
398
|
if ( |
|
399
|
!(!((W[54]^(W[55]<<5)) & (1<<6))) |
|
400
|
|| !(!((W[52]^W[54]) & (1<<6))) |
|
401
|
|| !((W[51]^W[55]) & (1<<1)) |
|
402
|
|| !((W[45]^W[47]) & (1<<1)) |
|
403
|
|| !(!((W[38]^(W[42]>>25)) & (1<<5))) |
|
404
|
|| !((W[37]^(W[42]>>30)) & (1<<0)) |
|
405
|
) mask &= ~DV_II_50_2_bit; |
|
406
|
if (mask & DV_II_51_0_bit) |
|
407
|
if ( |
|
408
|
!(!((W[39]^(W[43]>>25)) & (1<<3))) |
|
409
|
|| !((W[38]^(W[43]<<2)) & (1<<30)) |
|
410
|
) mask &= ~DV_II_51_0_bit; |
|
411
|
if (mask & DV_II_51_2_bit) |
|
412
|
if ( |
|
413
|
!(!((W[55]^(W[56]<<5)) & (1<<6))) |
|
414
|
|| !(!((W[53]^W[55]) & (1<<6))) |
|
415
|
|| !((W[52]^W[56]) & (1<<1)) |
|
416
|
|| !((W[46]^W[48]) & (1<<1)) |
|
417
|
|| !(!((W[39]^(W[43]>>25)) & (1<<5))) |
|
418
|
|| !((W[38]^(W[43]>>30)) & (1<<0)) |
|
419
|
) mask &= ~DV_II_51_2_bit; |
|
420
|
if (mask & DV_II_52_0_bit) |
|
421
|
if ( |
|
422
|
!(!((W[59]^W[60]) & (1<<29))) |
|
423
|
|| !(!((W[40]^(W[44]>>25)) & (1<<3))) |
|
424
|
|| !(!((W[40]^(W[44]>>25)) & (1<<4))) |
|
425
|
|| !((W[39]^(W[44]<<2)) & (1<<30)) |
|
426
|
) mask &= ~DV_II_52_0_bit; |
|
427
|
if (mask & DV_II_53_0_bit) |
|
428
|
if ( |
|
429
|
!((W[58]^W[61]) & (1<<29)) |
|
430
|
|| !(!((W[57]^(W[61]>>25)) & (1<<4))) |
|
431
|
|| !(!((W[41]^(W[45]>>25)) & (1<<3))) |
|
432
|
|| !(!((W[41]^(W[45]>>25)) & (1<<4))) |
|
433
|
) mask &= ~DV_II_53_0_bit; |
|
434
|
if (mask & DV_II_54_0_bit) |
|
435
|
if ( |
|
436
|
!(!((W[58]^(W[62]>>25)) & (1<<4))) |
|
437
|
|| !(!((W[42]^(W[46]>>25)) & (1<<3))) |
|
438
|
|| !(!((W[42]^(W[46]>>25)) & (1<<4))) |
|
439
|
) mask &= ~DV_II_54_0_bit; |
|
440
|
if (mask & DV_II_55_0_bit) |
|
441
|
if ( |
|
442
|
!(!((W[59]^(W[63]>>25)) & (1<<4))) |
|
443
|
|| !(!((W[57]^(W[59]>>25)) & (1<<4))) |
|
444
|
|| !(!((W[43]^(W[47]>>25)) & (1<<3))) |
|
445
|
|| !(!((W[43]^(W[47]>>25)) & (1<<4))) |
|
446
|
) mask &= ~DV_II_55_0_bit; |
|
447
|
if (mask & DV_II_56_0_bit) |
|
448
|
if ( |
|
449
|
!(!((W[60]^(W[64]>>25)) & (1<<4))) |
|
450
|
|| !(!((W[44]^(W[48]>>25)) & (1<<3))) |
|
451
|
|| !(!((W[44]^(W[48]>>25)) & (1<<4))) |
|
452
|
) mask &= ~DV_II_56_0_bit; |
|
453
|
} |
|
454
|
|
|
455
|
dvmask[0]=mask; |
|
456
|
} |
|
457
|
/******************** End Of File: lib/ubc_check.c *******************/ |
|
458
|
/******************** Continue with: lib/sha1.c **********************/ |
|
459
|
|
|
460
|
|
|
461
|
#define rotate_right(x,n) (((x)>>(n))|((x)<<(32-(n)))) |
|
462
|
#define rotate_left(x,n) (((x)<<(n))|((x)>>(32-(n)))) |
|
463
|
|
|
464
|
#define sha1_f1(b,c,d) ((d)^((b)&((c)^(d)))) |
|
465
|
#define sha1_f2(b,c,d) ((b)^(c)^(d)) |
|
466
|
#define sha1_f3(b,c,d) (((b) & ((c)|(d))) | ((c)&(d))) |
|
467
|
#define sha1_f4(b,c,d) ((b)^(c)^(d)) |
|
468
|
|
|
469
|
#define HASHCLASH_SHA1COMPRESS_ROUND1_STEP(a, b, c, d, e, m, t) \ |
|
470
|
{ e += rotate_left(a, 5) + sha1_f1(b,c,d) + 0x5A827999 + m[t]; b = rotate_left(b, 30); } |
|
471
|
#define HASHCLASH_SHA1COMPRESS_ROUND2_STEP(a, b, c, d, e, m, t) \ |
|
472
|
{ e += rotate_left(a, 5) + sha1_f2(b,c,d) + 0x6ED9EBA1 + m[t]; b = rotate_left(b, 30); } |
|
473
|
#define HASHCLASH_SHA1COMPRESS_ROUND3_STEP(a, b, c, d, e, m, t) \ |
|
474
|
{ e += rotate_left(a, 5) + sha1_f3(b,c,d) + 0x8F1BBCDC + m[t]; b = rotate_left(b, 30); } |
|
475
|
#define HASHCLASH_SHA1COMPRESS_ROUND4_STEP(a, b, c, d, e, m, t) \ |
|
476
|
{ e += rotate_left(a, 5) + sha1_f4(b,c,d) + 0xCA62C1D6 + m[t]; b = rotate_left(b, 30); } |
|
477
|
|
|
478
|
#define HASHCLASH_SHA1COMPRESS_ROUND1_STEP_BW(a, b, c, d, e, m, t) \ |
|
479
|
{ b = rotate_right(b, 30); e -= rotate_left(a, 5) + sha1_f1(b,c,d) + 0x5A827999 + m[t]; } |
|
480
|
#define HASHCLASH_SHA1COMPRESS_ROUND2_STEP_BW(a, b, c, d, e, m, t) \ |
|
481
|
{ b = rotate_right(b, 30); e -= rotate_left(a, 5) + sha1_f2(b,c,d) + 0x6ED9EBA1 + m[t]; } |
|
482
|
#define HASHCLASH_SHA1COMPRESS_ROUND3_STEP_BW(a, b, c, d, e, m, t) \ |
|
483
|
{ b = rotate_right(b, 30); e -= rotate_left(a, 5) + sha1_f3(b,c,d) + 0x8F1BBCDC + m[t]; } |
|
484
|
#define HASHCLASH_SHA1COMPRESS_ROUND4_STEP_BW(a, b, c, d, e, m, t) \ |
|
485
|
{ b = rotate_right(b, 30); e -= rotate_left(a, 5) + sha1_f4(b,c,d) + 0xCA62C1D6 + m[t]; } |
|
486
|
|
|
487
|
#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; |
|
488
|
|
|
489
|
|
|
490
|
|
|
491
|
void sha1_message_expansion(uint32_t W[80]) |
|
492
|
{ |
|
493
|
unsigned i; |
|
494
|
for (i = 16; i < 80; ++i) |
|
495
|
W[i] = rotate_left(W[i - 3] ^ W[i - 8] ^ W[i - 14] ^ W[i - 16], 1); |
|
496
|
} |
|
497
|
|
|
498
|
void sha1_compression(uint32_t ihv[5], const uint32_t m[16]) |
|
499
|
{ |
|
500
|
uint32_t W[80]; |
|
501
|
uint32_t a,b,c,d,e; |
|
502
|
unsigned i; |
|
503
|
|
|
504
|
memcpy(W, m, 16 * 4); |
|
505
|
for (i = 16; i < 80; ++i) |
|
506
|
W[i] = rotate_left(W[i - 3] ^ W[i - 8] ^ W[i - 14] ^ W[i - 16], 1); |
|
507
|
|
|
508
|
a = ihv[0]; b = ihv[1]; c = ihv[2]; d = ihv[3]; e = ihv[4]; |
|
509
|
|
|
510
|
HASHCLASH_SHA1COMPRESS_ROUND1_STEP(a, b, c, d, e, W, 0); |
|
511
|
HASHCLASH_SHA1COMPRESS_ROUND1_STEP(e, a, b, c, d, W, 1); |
|
512
|
HASHCLASH_SHA1COMPRESS_ROUND1_STEP(d, e, a, b, c, W, 2); |
|
513
|
HASHCLASH_SHA1COMPRESS_ROUND1_STEP(c, d, e, a, b, W, 3); |
|
514
|
HASHCLASH_SHA1COMPRESS_ROUND1_STEP(b, c, d, e, a, W, 4); |
|
515
|
HASHCLASH_SHA1COMPRESS_ROUND1_STEP(a, b, c, d, e, W, 5); |
|
516
|
HASHCLASH_SHA1COMPRESS_ROUND1_STEP(e, a, b, c, d, W, 6); |
|
517
|
HASHCLASH_SHA1COMPRESS_ROUND1_STEP(d, e, a, b, c, W, 7); |
|
518
|
HASHCLASH_SHA1COMPRESS_ROUND1_STEP(c, d, e, a, b, W, 8); |
|
519
|
HASHCLASH_SHA1COMPRESS_ROUND1_STEP(b, c, d, e, a, W, 9); |
|
520
|
HASHCLASH_SHA1COMPRESS_ROUND1_STEP(a, b, c, d, e, W, 10); |
|
521
|
HASHCLASH_SHA1COMPRESS_ROUND1_STEP(e, a, b, c, d, W, 11); |
|
522
|
HASHCLASH_SHA1COMPRESS_ROUND1_STEP(d, e, a, b, c, W, 12); |
|
523
|
HASHCLASH_SHA1COMPRESS_ROUND1_STEP(c, d, e, a, b, W, 13); |
|
524
|
HASHCLASH_SHA1COMPRESS_ROUND1_STEP(b, c, d, e, a, W, 14); |
|
525
|
HASHCLASH_SHA1COMPRESS_ROUND1_STEP(a, b, c, d, e, W, 15); |
|
526
|
HASHCLASH_SHA1COMPRESS_ROUND1_STEP(e, a, b, c, d, W, 16); |
|
527
|
HASHCLASH_SHA1COMPRESS_ROUND1_STEP(d, e, a, b, c, W, 17); |
|
528
|
HASHCLASH_SHA1COMPRESS_ROUND1_STEP(c, d, e, a, b, W, 18); |
|
529
|
HASHCLASH_SHA1COMPRESS_ROUND1_STEP(b, c, d, e, a, W, 19); |
|
530
|
|
|
531
|
HASHCLASH_SHA1COMPRESS_ROUND2_STEP(a, b, c, d, e, W, 20); |
|
532
|
HASHCLASH_SHA1COMPRESS_ROUND2_STEP(e, a, b, c, d, W, 21); |
|
533
|
HASHCLASH_SHA1COMPRESS_ROUND2_STEP(d, e, a, b, c, W, 22); |
|
534
|
HASHCLASH_SHA1COMPRESS_ROUND2_STEP(c, d, e, a, b, W, 23); |
|
535
|
HASHCLASH_SHA1COMPRESS_ROUND2_STEP(b, c, d, e, a, W, 24); |
|
536
|
HASHCLASH_SHA1COMPRESS_ROUND2_STEP(a, b, c, d, e, W, 25); |
|
537
|
HASHCLASH_SHA1COMPRESS_ROUND2_STEP(e, a, b, c, d, W, 26); |
|
538
|
HASHCLASH_SHA1COMPRESS_ROUND2_STEP(d, e, a, b, c, W, 27); |
|
539
|
HASHCLASH_SHA1COMPRESS_ROUND2_STEP(c, d, e, a, b, W, 28); |
|
540
|
HASHCLASH_SHA1COMPRESS_ROUND2_STEP(b, c, d, e, a, W, 29); |
|
541
|
HASHCLASH_SHA1COMPRESS_ROUND2_STEP(a, b, c, d, e, W, 30); |
|
542
|
HASHCLASH_SHA1COMPRESS_ROUND2_STEP(e, a, b, c, d, W, 31); |
|
543
|
HASHCLASH_SHA1COMPRESS_ROUND2_STEP(d, e, a, b, c, W, 32); |
|
544
|
HASHCLASH_SHA1COMPRESS_ROUND2_STEP(c, d, e, a, b, W, 33); |
|
545
|
HASHCLASH_SHA1COMPRESS_ROUND2_STEP(b, c, d, e, a, W, 34); |
|
546
|
HASHCLASH_SHA1COMPRESS_ROUND2_STEP(a, b, c, d, e, W, 35); |
|
547
|
HASHCLASH_SHA1COMPRESS_ROUND2_STEP(e, a, b, c, d, W, 36); |
|
548
|
HASHCLASH_SHA1COMPRESS_ROUND2_STEP(d, e, a, b, c, W, 37); |
|
549
|
HASHCLASH_SHA1COMPRESS_ROUND2_STEP(c, d, e, a, b, W, 38); |
|
550
|
HASHCLASH_SHA1COMPRESS_ROUND2_STEP(b, c, d, e, a, W, 39); |
|
551
|
|
|
552
|
HASHCLASH_SHA1COMPRESS_ROUND3_STEP(a, b, c, d, e, W, 40); |
|
553
|
HASHCLASH_SHA1COMPRESS_ROUND3_STEP(e, a, b, c, d, W, 41); |
|
554
|
HASHCLASH_SHA1COMPRESS_ROUND3_STEP(d, e, a, b, c, W, 42); |
|
555
|
HASHCLASH_SHA1COMPRESS_ROUND3_STEP(c, d, e, a, b, W, 43); |
|
556
|
HASHCLASH_SHA1COMPRESS_ROUND3_STEP(b, c, d, e, a, W, 44); |
|
557
|
HASHCLASH_SHA1COMPRESS_ROUND3_STEP(a, b, c, d, e, W, 45); |
|
558
|
HASHCLASH_SHA1COMPRESS_ROUND3_STEP(e, a, b, c, d, W, 46); |
|
559
|
HASHCLASH_SHA1COMPRESS_ROUND3_STEP(d, e, a, b, c, W, 47); |
|
560
|
HASHCLASH_SHA1COMPRESS_ROUND3_STEP(c, d, e, a, b, W, 48); |
|
561
|
HASHCLASH_SHA1COMPRESS_ROUND3_STEP(b, c, d, e, a, W, 49); |
|
562
|
HASHCLASH_SHA1COMPRESS_ROUND3_STEP(a, b, c, d, e, W, 50); |
|
563
|
HASHCLASH_SHA1COMPRESS_ROUND3_STEP(e, a, b, c, d, W, 51); |
|
564
|
HASHCLASH_SHA1COMPRESS_ROUND3_STEP(d, e, a, b, c, W, 52); |
|
565
|
HASHCLASH_SHA1COMPRESS_ROUND3_STEP(c, d, e, a, b, W, 53); |
|
566
|
HASHCLASH_SHA1COMPRESS_ROUND3_STEP(b, c, d, e, a, W, 54); |
|
567
|
HASHCLASH_SHA1COMPRESS_ROUND3_STEP(a, b, c, d, e, W, 55); |
|
568
|
HASHCLASH_SHA1COMPRESS_ROUND3_STEP(e, a, b, c, d, W, 56); |
|
569
|
HASHCLASH_SHA1COMPRESS_ROUND3_STEP(d, e, a, b, c, W, 57); |
|
570
|
HASHCLASH_SHA1COMPRESS_ROUND3_STEP(c, d, e, a, b, W, 58); |
|
571
|
HASHCLASH_SHA1COMPRESS_ROUND3_STEP(b, c, d, e, a, W, 59); |
|
572
|
|
|
573
|
HASHCLASH_SHA1COMPRESS_ROUND4_STEP(a, b, c, d, e, W, 60); |
|
574
|
HASHCLASH_SHA1COMPRESS_ROUND4_STEP(e, a, b, c, d, W, 61); |
|
575
|
HASHCLASH_SHA1COMPRESS_ROUND4_STEP(d, e, a, b, c, W, 62); |
|
576
|
HASHCLASH_SHA1COMPRESS_ROUND4_STEP(c, d, e, a, b, W, 63); |
|
577
|
HASHCLASH_SHA1COMPRESS_ROUND4_STEP(b, c, d, e, a, W, 64); |
|
578
|
HASHCLASH_SHA1COMPRESS_ROUND4_STEP(a, b, c, d, e, W, 65); |
|
579
|
HASHCLASH_SHA1COMPRESS_ROUND4_STEP(e, a, b, c, d, W, 66); |
|
580
|
HASHCLASH_SHA1COMPRESS_ROUND4_STEP(d, e, a, b, c, W, 67); |
|
581
|
HASHCLASH_SHA1COMPRESS_ROUND4_STEP(c, d, e, a, b, W, 68); |
|
582
|
HASHCLASH_SHA1COMPRESS_ROUND4_STEP(b, c, d, e, a, W, 69); |
|
583
|
HASHCLASH_SHA1COMPRESS_ROUND4_STEP(a, b, c, d, e, W, 70); |
|
584
|
HASHCLASH_SHA1COMPRESS_ROUND4_STEP(e, a, b, c, d, W, 71); |
|
585
|
HASHCLASH_SHA1COMPRESS_ROUND4_STEP(d, e, a, b, c, W, 72); |
|
586
|
HASHCLASH_SHA1COMPRESS_ROUND4_STEP(c, d, e, a, b, W, 73); |
|
587
|
HASHCLASH_SHA1COMPRESS_ROUND4_STEP(b, c, d, e, a, W, 74); |
|
588
|
HASHCLASH_SHA1COMPRESS_ROUND4_STEP(a, b, c, d, e, W, 75); |
|
589
|
HASHCLASH_SHA1COMPRESS_ROUND4_STEP(e, a, b, c, d, W, 76); |
|
590
|
HASHCLASH_SHA1COMPRESS_ROUND4_STEP(d, e, a, b, c, W, 77); |
|
591
|
HASHCLASH_SHA1COMPRESS_ROUND4_STEP(c, d, e, a, b, W, 78); |
|
592
|
HASHCLASH_SHA1COMPRESS_ROUND4_STEP(b, c, d, e, a, W, 79); |
|
593
|
|
|
594
|
ihv[0] += a; ihv[1] += b; ihv[2] += c; ihv[3] += d; ihv[4] += e; |
|
595
|
} |
|
596
|
|
|
597
|
|
|
598
|
|
|
599
|
void sha1_compression_W(uint32_t ihv[5], const uint32_t W[80]) |
|
600
|
{ |
|
601
|
uint32_t a = ihv[0], b = ihv[1], c = ihv[2], d = ihv[3], e = ihv[4]; |
|
602
|
|
|
603
|
HASHCLASH_SHA1COMPRESS_ROUND1_STEP(a, b, c, d, e, W, 0); |
|
604
|
HASHCLASH_SHA1COMPRESS_ROUND1_STEP(e, a, b, c, d, W, 1); |
|
605
|
HASHCLASH_SHA1COMPRESS_ROUND1_STEP(d, e, a, b, c, W, 2); |
|
606
|
HASHCLASH_SHA1COMPRESS_ROUND1_STEP(c, d, e, a, b, W, 3); |
|
607
|
HASHCLASH_SHA1COMPRESS_ROUND1_STEP(b, c, d, e, a, W, 4); |
|
608
|
HASHCLASH_SHA1COMPRESS_ROUND1_STEP(a, b, c, d, e, W, 5); |
|
609
|
HASHCLASH_SHA1COMPRESS_ROUND1_STEP(e, a, b, c, d, W, 6); |
|
610
|
HASHCLASH_SHA1COMPRESS_ROUND1_STEP(d, e, a, b, c, W, 7); |
|
611
|
HASHCLASH_SHA1COMPRESS_ROUND1_STEP(c, d, e, a, b, W, 8); |
|
612
|
HASHCLASH_SHA1COMPRESS_ROUND1_STEP(b, c, d, e, a, W, 9); |
|
613
|
HASHCLASH_SHA1COMPRESS_ROUND1_STEP(a, b, c, d, e, W, 10); |
|
614
|
HASHCLASH_SHA1COMPRESS_ROUND1_STEP(e, a, b, c, d, W, 11); |
|
615
|
HASHCLASH_SHA1COMPRESS_ROUND1_STEP(d, e, a, b, c, W, 12); |
|
616
|
HASHCLASH_SHA1COMPRESS_ROUND1_STEP(c, d, e, a, b, W, 13); |
|
617
|
HASHCLASH_SHA1COMPRESS_ROUND1_STEP(b, c, d, e, a, W, 14); |
|
618
|
HASHCLASH_SHA1COMPRESS_ROUND1_STEP(a, b, c, d, e, W, 15); |
|
619
|
HASHCLASH_SHA1COMPRESS_ROUND1_STEP(e, a, b, c, d, W, 16); |
|
620
|
HASHCLASH_SHA1COMPRESS_ROUND1_STEP(d, e, a, b, c, W, 17); |
|
621
|
HASHCLASH_SHA1COMPRESS_ROUND1_STEP(c, d, e, a, b, W, 18); |
|
622
|
HASHCLASH_SHA1COMPRESS_ROUND1_STEP(b, c, d, e, a, W, 19); |
|
623
|
|
|
624
|
HASHCLASH_SHA1COMPRESS_ROUND2_STEP(a, b, c, d, e, W, 20); |
|
625
|
HASHCLASH_SHA1COMPRESS_ROUND2_STEP(e, a, b, c, d, W, 21); |
|
626
|
HASHCLASH_SHA1COMPRESS_ROUND2_STEP(d, e, a, b, c, W, 22); |
|
627
|
HASHCLASH_SHA1COMPRESS_ROUND2_STEP(c, d, e, a, b, W, 23); |
|
628
|
HASHCLASH_SHA1COMPRESS_ROUND2_STEP(b, c, d, e, a, W, 24); |
|
629
|
HASHCLASH_SHA1COMPRESS_ROUND2_STEP(a, b, c, d, e, W, 25); |
|
630
|
HASHCLASH_SHA1COMPRESS_ROUND2_STEP(e, a, b, c, d, W, 26); |
|
631
|
HASHCLASH_SHA1COMPRESS_ROUND2_STEP(d, e, a, b, c, W, 27); |
|
632
|
HASHCLASH_SHA1COMPRESS_ROUND2_STEP(c, d, e, a, b, W, 28); |
|
633
|
HASHCLASH_SHA1COMPRESS_ROUND2_STEP(b, c, d, e, a, W, 29); |
|
634
|
HASHCLASH_SHA1COMPRESS_ROUND2_STEP(a, b, c, d, e, W, 30); |
|
635
|
HASHCLASH_SHA1COMPRESS_ROUND2_STEP(e, a, b, c, d, W, 31); |
|
636
|
HASHCLASH_SHA1COMPRESS_ROUND2_STEP(d, e, a, b, c, W, 32); |
|
637
|
HASHCLASH_SHA1COMPRESS_ROUND2_STEP(c, d, e, a, b, W, 33); |
|
638
|
HASHCLASH_SHA1COMPRESS_ROUND2_STEP(b, c, d, e, a, W, 34); |
|
639
|
HASHCLASH_SHA1COMPRESS_ROUND2_STEP(a, b, c, d, e, W, 35); |
|
640
|
HASHCLASH_SHA1COMPRESS_ROUND2_STEP(e, a, b, c, d, W, 36); |
|
641
|
HASHCLASH_SHA1COMPRESS_ROUND2_STEP(d, e, a, b, c, W, 37); |
|
642
|
HASHCLASH_SHA1COMPRESS_ROUND2_STEP(c, d, e, a, b, W, 38); |
|
643
|
HASHCLASH_SHA1COMPRESS_ROUND2_STEP(b, c, d, e, a, W, 39); |
|
644
|
|
|
645
|
HASHCLASH_SHA1COMPRESS_ROUND3_STEP(a, b, c, d, e, W, 40); |
|
646
|
HASHCLASH_SHA1COMPRESS_ROUND3_STEP(e, a, b, c, d, W, 41); |
|
647
|
HASHCLASH_SHA1COMPRESS_ROUND3_STEP(d, e, a, b, c, W, 42); |
|
648
|
HASHCLASH_SHA1COMPRESS_ROUND3_STEP(c, d, e, a, b, W, 43); |
|
649
|
HASHCLASH_SHA1COMPRESS_ROUND3_STEP(b, c, d, e, a, W, 44); |
|
650
|
HASHCLASH_SHA1COMPRESS_ROUND3_STEP(a, b, c, d, e, W, 45); |
|
651
|
HASHCLASH_SHA1COMPRESS_ROUND3_STEP(e, a, b, c, d, W, 46); |
|
652
|
HASHCLASH_SHA1COMPRESS_ROUND3_STEP(d, e, a, b, c, W, 47); |
|
653
|
HASHCLASH_SHA1COMPRESS_ROUND3_STEP(c, d, e, a, b, W, 48); |
|
654
|
HASHCLASH_SHA1COMPRESS_ROUND3_STEP(b, c, d, e, a, W, 49); |
|
655
|
HASHCLASH_SHA1COMPRESS_ROUND3_STEP(a, b, c, d, e, W, 50); |
|
656
|
HASHCLASH_SHA1COMPRESS_ROUND3_STEP(e, a, b, c, d, W, 51); |
|
657
|
HASHCLASH_SHA1COMPRESS_ROUND3_STEP(d, e, a, b, c, W, 52); |
|
658
|
HASHCLASH_SHA1COMPRESS_ROUND3_STEP(c, d, e, a, b, W, 53); |
|
659
|
HASHCLASH_SHA1COMPRESS_ROUND3_STEP(b, c, d, e, a, W, 54); |
|
660
|
HASHCLASH_SHA1COMPRESS_ROUND3_STEP(a, b, c, d, e, W, 55); |
|
661
|
HASHCLASH_SHA1COMPRESS_ROUND3_STEP(e, a, b, c, d, W, 56); |
|
662
|
HASHCLASH_SHA1COMPRESS_ROUND3_STEP(d, e, a, b, c, W, 57); |
|
663
|
HASHCLASH_SHA1COMPRESS_ROUND3_STEP(c, d, e, a, b, W, 58); |
|
664
|
HASHCLASH_SHA1COMPRESS_ROUND3_STEP(b, c, d, e, a, W, 59); |
|
665
|
|
|
666
|
HASHCLASH_SHA1COMPRESS_ROUND4_STEP(a, b, c, d, e, W, 60); |
|
667
|
HASHCLASH_SHA1COMPRESS_ROUND4_STEP(e, a, b, c, d, W, 61); |
|
668
|
HASHCLASH_SHA1COMPRESS_ROUND4_STEP(d, e, a, b, c, W, 62); |
|
669
|
HASHCLASH_SHA1COMPRESS_ROUND4_STEP(c, d, e, a, b, W, 63); |
|
670
|
HASHCLASH_SHA1COMPRESS_ROUND4_STEP(b, c, d, e, a, W, 64); |
|
671
|
HASHCLASH_SHA1COMPRESS_ROUND4_STEP(a, b, c, d, e, W, 65); |
|
672
|
HASHCLASH_SHA1COMPRESS_ROUND4_STEP(e, a, b, c, d, W, 66); |
|
673
|
HASHCLASH_SHA1COMPRESS_ROUND4_STEP(d, e, a, b, c, W, 67); |
|
674
|
HASHCLASH_SHA1COMPRESS_ROUND4_STEP(c, d, e, a, b, W, 68); |
|
675
|
HASHCLASH_SHA1COMPRESS_ROUND4_STEP(b, c, d, e, a, W, 69); |
|
676
|
HASHCLASH_SHA1COMPRESS_ROUND4_STEP(a, b, c, d, e, W, 70); |
|
677
|
HASHCLASH_SHA1COMPRESS_ROUND4_STEP(e, a, b, c, d, W, 71); |
|
678
|
HASHCLASH_SHA1COMPRESS_ROUND4_STEP(d, e, a, b, c, W, 72); |
|
679
|
HASHCLASH_SHA1COMPRESS_ROUND4_STEP(c, d, e, a, b, W, 73); |
|
680
|
HASHCLASH_SHA1COMPRESS_ROUND4_STEP(b, c, d, e, a, W, 74); |
|
681
|
HASHCLASH_SHA1COMPRESS_ROUND4_STEP(a, b, c, d, e, W, 75); |
|
682
|
HASHCLASH_SHA1COMPRESS_ROUND4_STEP(e, a, b, c, d, W, 76); |
|
683
|
HASHCLASH_SHA1COMPRESS_ROUND4_STEP(d, e, a, b, c, W, 77); |
|
684
|
HASHCLASH_SHA1COMPRESS_ROUND4_STEP(c, d, e, a, b, W, 78); |
|
685
|
HASHCLASH_SHA1COMPRESS_ROUND4_STEP(b, c, d, e, a, W, 79); |
|
686
|
|
|
687
|
ihv[0] += a; ihv[1] += b; ihv[2] += c; ihv[3] += d; ihv[4] += e; |
|
688
|
} |
|
689
|
|
|
690
|
|
|
691
|
|
|
692
|
void sha1_compression_states(uint32_t ihv[5], const uint32_t W[80], uint32_t states[80][5]) |
|
693
|
{ |
|
694
|
uint32_t a = ihv[0], b = ihv[1], c = ihv[2], d = ihv[3], e = ihv[4]; |
|
695
|
|
|
696
|
#ifdef DOSTORESTATE00 |
|
697
|
SHA1_STORE_STATE(0) |
|
698
|
#endif |
|
699
|
HASHCLASH_SHA1COMPRESS_ROUND1_STEP(a, b, c, d, e, W, 0); |
|
700
|
|
|
701
|
#ifdef DOSTORESTATE01 |
|
702
|
SHA1_STORE_STATE(1) |
|
703
|
#endif |
|
704
|
HASHCLASH_SHA1COMPRESS_ROUND1_STEP(e, a, b, c, d, W, 1); |
|
705
|
|
|
706
|
#ifdef DOSTORESTATE02 |
|
707
|
SHA1_STORE_STATE(2) |
|
708
|
#endif |
|
709
|
HASHCLASH_SHA1COMPRESS_ROUND1_STEP(d, e, a, b, c, W, 2); |
|
710
|
|
|
711
|
#ifdef DOSTORESTATE03 |
|
712
|
SHA1_STORE_STATE(3) |
|
713
|
#endif |
|
714
|
HASHCLASH_SHA1COMPRESS_ROUND1_STEP(c, d, e, a, b, W, 3); |
|
715
|
|
|
716
|
#ifdef DOSTORESTATE04 |
|
717
|
SHA1_STORE_STATE(4) |
|
718
|
#endif |
|
719
|
HASHCLASH_SHA1COMPRESS_ROUND1_STEP(b, c, d, e, a, W, 4); |
|
720
|
|
|
721
|
#ifdef DOSTORESTATE05 |
|
722
|
SHA1_STORE_STATE(5) |
|
723
|
#endif |
|
724
|
HASHCLASH_SHA1COMPRESS_ROUND1_STEP(a, b, c, d, e, W, 5); |
|
725
|
|
|
726
|
#ifdef DOSTORESTATE06 |
|
727
|
SHA1_STORE_STATE(6) |
|
728
|
#endif |
|
729
|
HASHCLASH_SHA1COMPRESS_ROUND1_STEP(e, a, b, c, d, W, 6); |
|
730
|
|
|
731
|
#ifdef DOSTORESTATE07 |
|
732
|
SHA1_STORE_STATE(7) |
|
733
|
#endif |
|
734
|
HASHCLASH_SHA1COMPRESS_ROUND1_STEP(d, e, a, b, c, W, 7); |
|
735
|
|
|
736
|
#ifdef DOSTORESTATE08 |
|
737
|
SHA1_STORE_STATE(8) |
|
738
|
#endif |
|
739
|
HASHCLASH_SHA1COMPRESS_ROUND1_STEP(c, d, e, a, b, W, 8); |
|
740
|
|
|
741
|
#ifdef DOSTORESTATE09 |
|
742
|
SHA1_STORE_STATE(9) |
|
743
|
#endif |
|
744
|
HASHCLASH_SHA1COMPRESS_ROUND1_STEP(b, c, d, e, a, W, 9); |
|
745
|
|
|
746
|
#ifdef DOSTORESTATE10 |
|
747
|
SHA1_STORE_STATE(10) |
|
748
|
#endif |
|
749
|
HASHCLASH_SHA1COMPRESS_ROUND1_STEP(a, b, c, d, e, W, 10); |
|
750
|
|
|
751
|
#ifdef DOSTORESTATE11 |
|
752
|
SHA1_STORE_STATE(11) |
|
753
|
#endif |
|
754
|
HASHCLASH_SHA1COMPRESS_ROUND1_STEP(e, a, b, c, d, W, 11); |
|
755
|
|
|
756
|
#ifdef DOSTORESTATE12 |
|
757
|
SHA1_STORE_STATE(12) |
|
758
|
#endif |
|
759
|
HASHCLASH_SHA1COMPRESS_ROUND1_STEP(d, e, a, b, c, W, 12); |
|
760
|
|
|
761
|
#ifdef DOSTORESTATE13 |
|
762
|
SHA1_STORE_STATE(13) |
|
763
|
#endif |
|
764
|
HASHCLASH_SHA1COMPRESS_ROUND1_STEP(c, d, e, a, b, W, 13); |
|
765
|
|
|
766
|
#ifdef DOSTORESTATE14 |
|
767
|
SHA1_STORE_STATE(14) |
|
768
|
#endif |
|
769
|
HASHCLASH_SHA1COMPRESS_ROUND1_STEP(b, c, d, e, a, W, 14); |
|
770
|
|
|
771
|
#ifdef DOSTORESTATE15 |
|
772
|
SHA1_STORE_STATE(15) |
|
773
|
#endif |
|
774
|
HASHCLASH_SHA1COMPRESS_ROUND1_STEP(a, b, c, d, e, W, 15); |
|
775
|
|
|
776
|
#ifdef DOSTORESTATE16 |
|
777
|
SHA1_STORE_STATE(16) |
|
778
|
#endif |
|
779
|
HASHCLASH_SHA1COMPRESS_ROUND1_STEP(e, a, b, c, d, W, 16); |
|
780
|
|
|
781
|
#ifdef DOSTORESTATE17 |
|
782
|
SHA1_STORE_STATE(17) |
|
783
|
#endif |
|
784
|
HASHCLASH_SHA1COMPRESS_ROUND1_STEP(d, e, a, b, c, W, 17); |
|
785
|
|
|
786
|
#ifdef DOSTORESTATE18 |
|
787
|
SHA1_STORE_STATE(18) |
|
788
|
#endif |
|
789
|
HASHCLASH_SHA1COMPRESS_ROUND1_STEP(c, d, e, a, b, W, 18); |
|
790
|
|
|
791
|
#ifdef DOSTORESTATE19 |
|
792
|
SHA1_STORE_STATE(19) |
|
793
|
#endif |
|
794
|
HASHCLASH_SHA1COMPRESS_ROUND1_STEP(b, c, d, e, a, W, 19); |
|
795
|
|
|
796
|
|
|
797
|
|
|
798
|
#ifdef DOSTORESTATE20 |
|
799
|
SHA1_STORE_STATE(20) |
|
800
|
#endif |
|
801
|
HASHCLASH_SHA1COMPRESS_ROUND2_STEP(a, b, c, d, e, W, 20); |
|
802
|
|
|
803
|
#ifdef DOSTORESTATE21 |
|
804
|
SHA1_STORE_STATE(21) |
|
805
|
#endif |
|
806
|
HASHCLASH_SHA1COMPRESS_ROUND2_STEP(e, a, b, c, d, W, 21); |
|
807
|
|
|
808
|
#ifdef DOSTORESTATE22 |
|
809
|
SHA1_STORE_STATE(22) |
|
810
|
#endif |
|
811
|
HASHCLASH_SHA1COMPRESS_ROUND2_STEP(d, e, a, b, c, W, 22); |
|
812
|
|
|
813
|
#ifdef DOSTORESTATE23 |
|
814
|
SHA1_STORE_STATE(23) |
|
815
|
#endif |
|
816
|
HASHCLASH_SHA1COMPRESS_ROUND2_STEP(c, d, e, a, b, W, 23); |
|
817
|
|
|
818
|
#ifdef DOSTORESTATE24 |
|
819
|
SHA1_STORE_STATE(24) |
|
820
|
#endif |
|
821
|
HASHCLASH_SHA1COMPRESS_ROUND2_STEP(b, c, d, e, a, W, 24); |
|
822
|
|
|
823
|
#ifdef DOSTORESTATE25 |
|
824
|
SHA1_STORE_STATE(25) |
|
825
|
#endif |
|
826
|
HASHCLASH_SHA1COMPRESS_ROUND2_STEP(a, b, c, d, e, W, 25); |
|
827
|
|
|
828
|
#ifdef DOSTORESTATE26 |
|
829
|
SHA1_STORE_STATE(26) |
|
830
|
#endif |
|
831
|
HASHCLASH_SHA1COMPRESS_ROUND2_STEP(e, a, b, c, d, W, 26); |
|
832
|
|
|
833
|
#ifdef DOSTORESTATE27 |
|
834
|
SHA1_STORE_STATE(27) |
|
835
|
#endif |
|
836
|
HASHCLASH_SHA1COMPRESS_ROUND2_STEP(d, e, a, b, c, W, 27); |
|
837
|
|
|
838
|
#ifdef DOSTORESTATE28 |
|
839
|
SHA1_STORE_STATE(28) |
|
840
|
#endif |
|
841
|
HASHCLASH_SHA1COMPRESS_ROUND2_STEP(c, d, e, a, b, W, 28); |
|
842
|
|
|
843
|
#ifdef DOSTORESTATE29 |
|
844
|
SHA1_STORE_STATE(29) |
|
845
|
#endif |
|
846
|
HASHCLASH_SHA1COMPRESS_ROUND2_STEP(b, c, d, e, a, W, 29); |
|
847
|
|
|
848
|
#ifdef DOSTORESTATE30 |
|
849
|
SHA1_STORE_STATE(30) |
|
850
|
#endif |
|
851
|
HASHCLASH_SHA1COMPRESS_ROUND2_STEP(a, b, c, d, e, W, 30); |
|
852
|
|
|
853
|
#ifdef DOSTORESTATE31 |
|
854
|
SHA1_STORE_STATE(31) |
|
855
|
#endif |
|
856
|
HASHCLASH_SHA1COMPRESS_ROUND2_STEP(e, a, b, c, d, W, 31); |
|
857
|
|
|
858
|
#ifdef DOSTORESTATE32 |
|
859
|
SHA1_STORE_STATE(32) |
|
860
|
#endif |
|
861
|
HASHCLASH_SHA1COMPRESS_ROUND2_STEP(d, e, a, b, c, W, 32); |
|
862
|
|
|
863
|
#ifdef DOSTORESTATE33 |
|
864
|
SHA1_STORE_STATE(33) |
|
865
|
#endif |
|
866
|
HASHCLASH_SHA1COMPRESS_ROUND2_STEP(c, d, e, a, b, W, 33); |
|
867
|
|
|
868
|
#ifdef DOSTORESTATE34 |
|
869
|
SHA1_STORE_STATE(34) |
|
870
|
#endif |
|
871
|
HASHCLASH_SHA1COMPRESS_ROUND2_STEP(b, c, d, e, a, W, 34); |
|
872
|
|
|
873
|
#ifdef DOSTORESTATE35 |
|
874
|
SHA1_STORE_STATE(35) |
|
875
|
#endif |
|
876
|
HASHCLASH_SHA1COMPRESS_ROUND2_STEP(a, b, c, d, e, W, 35); |
|
877
|
|
|
878
|
#ifdef DOSTORESTATE36 |
|
879
|
SHA1_STORE_STATE(36) |
|
880
|
#endif |
|
881
|
HASHCLASH_SHA1COMPRESS_ROUND2_STEP(e, a, b, c, d, W, 36); |
|
882
|
|
|
883
|
#ifdef DOSTORESTATE37 |
|
884
|
SHA1_STORE_STATE(37) |
|
885
|
#endif |
|
886
|
HASHCLASH_SHA1COMPRESS_ROUND2_STEP(d, e, a, b, c, W, 37); |
|
887
|
|
|
888
|
#ifdef DOSTORESTATE38 |
|
889
|
SHA1_STORE_STATE(38) |
|
890
|
#endif |
|
891
|
HASHCLASH_SHA1COMPRESS_ROUND2_STEP(c, d, e, a, b, W, 38); |
|
892
|
|
|
893
|
#ifdef DOSTORESTATE39 |
|
894
|
SHA1_STORE_STATE(39) |
|
895
|
#endif |
|
896
|
HASHCLASH_SHA1COMPRESS_ROUND2_STEP(b, c, d, e, a, W, 39); |
|
897
|
|
|
898
|
|
|
899
|
|
|
900
|
#ifdef DOSTORESTATE40 |
|
901
|
SHA1_STORE_STATE(40) |
|
902
|
#endif |
|
903
|
HASHCLASH_SHA1COMPRESS_ROUND3_STEP(a, b, c, d, e, W, 40); |
|
904
|
|
|
905
|
#ifdef DOSTORESTATE41 |
|
906
|
SHA1_STORE_STATE(41) |
|
907
|
#endif |
|
908
|
HASHCLASH_SHA1COMPRESS_ROUND3_STEP(e, a, b, c, d, W, 41); |
|
909
|
|
|
910
|
#ifdef DOSTORESTATE42 |
|
911
|
SHA1_STORE_STATE(42) |
|
912
|
#endif |
|
913
|
HASHCLASH_SHA1COMPRESS_ROUND3_STEP(d, e, a, b, c, W, 42); |
|
914
|
|
|
915
|
#ifdef DOSTORESTATE43 |
|
916
|
SHA1_STORE_STATE(43) |
|
917
|
#endif |
|
918
|
HASHCLASH_SHA1COMPRESS_ROUND3_STEP(c, d, e, a, b, W, 43); |
|
919
|
|
|
920
|
#ifdef DOSTORESTATE44 |
|
921
|
SHA1_STORE_STATE(44) |
|
922
|
#endif |
|
923
|
HASHCLASH_SHA1COMPRESS_ROUND3_STEP(b, c, d, e, a, W, 44); |
|
924
|
|
|
925
|
#ifdef DOSTORESTATE45 |
|
926
|
SHA1_STORE_STATE(45) |
|
927
|
#endif |
|
928
|
HASHCLASH_SHA1COMPRESS_ROUND3_STEP(a, b, c, d, e, W, 45); |
|
929
|
|
|
930
|
#ifdef DOSTORESTATE46 |
|
931
|
SHA1_STORE_STATE(46) |
|
932
|
#endif |
|
933
|
HASHCLASH_SHA1COMPRESS_ROUND3_STEP(e, a, b, c, d, W, 46); |
|
934
|
|
|
935
|
#ifdef DOSTORESTATE47 |
|
936
|
SHA1_STORE_STATE(47) |
|
937
|
#endif |
|
938
|
HASHCLASH_SHA1COMPRESS_ROUND3_STEP(d, e, a, b, c, W, 47); |
|
939
|
|
|
940
|
#ifdef DOSTORESTATE48 |
|
941
|
SHA1_STORE_STATE(48) |
|
942
|
#endif |
|
943
|
HASHCLASH_SHA1COMPRESS_ROUND3_STEP(c, d, e, a, b, W, 48); |
|
944
|
|
|
945
|
#ifdef DOSTORESTATE49 |
|
946
|
SHA1_STORE_STATE(49) |
|
947
|
#endif |
|
948
|
HASHCLASH_SHA1COMPRESS_ROUND3_STEP(b, c, d, e, a, W, 49); |
|
949
|
|
|
950
|
#ifdef DOSTORESTATE50 |
|
951
|
SHA1_STORE_STATE(50) |
|
952
|
#endif |
|
953
|
HASHCLASH_SHA1COMPRESS_ROUND3_STEP(a, b, c, d, e, W, 50); |
|
954
|
|
|
955
|
#ifdef DOSTORESTATE51 |
|
956
|
SHA1_STORE_STATE(51) |
|
957
|
#endif |
|
958
|
HASHCLASH_SHA1COMPRESS_ROUND3_STEP(e, a, b, c, d, W, 51); |
|
959
|
|
|
960
|
#ifdef DOSTORESTATE52 |
|
961
|
SHA1_STORE_STATE(52) |
|
962
|
#endif |
|
963
|
HASHCLASH_SHA1COMPRESS_ROUND3_STEP(d, e, a, b, c, W, 52); |
|
964
|
|
|
965
|
#ifdef DOSTORESTATE53 |
|
966
|
SHA1_STORE_STATE(53) |
|
967
|
#endif |
|
968
|
HASHCLASH_SHA1COMPRESS_ROUND3_STEP(c, d, e, a, b, W, 53); |
|
969
|
|
|
970
|
#ifdef DOSTORESTATE54 |
|
971
|
SHA1_STORE_STATE(54) |
|
972
|
#endif |
|
973
|
HASHCLASH_SHA1COMPRESS_ROUND3_STEP(b, c, d, e, a, W, 54); |
|
974
|
|
|
975
|
#ifdef DOSTORESTATE55 |
|
976
|
SHA1_STORE_STATE(55) |
|
977
|
#endif |
|
978
|
HASHCLASH_SHA1COMPRESS_ROUND3_STEP(a, b, c, d, e, W, 55); |
|
979
|
|
|
980
|
#ifdef DOSTORESTATE56 |
|
981
|
SHA1_STORE_STATE(56) |
|
982
|
#endif |
|
983
|
HASHCLASH_SHA1COMPRESS_ROUND3_STEP(e, a, b, c, d, W, 56); |
|
984
|
|
|
985
|
#ifdef DOSTORESTATE57 |
|
986
|
SHA1_STORE_STATE(57) |
|
987
|
#endif |
|
988
|
HASHCLASH_SHA1COMPRESS_ROUND3_STEP(d, e, a, b, c, W, 57); |
|
989
|
|
|
990
|
#ifdef DOSTORESTATE58 |
|
991
|
SHA1_STORE_STATE(58) |
|
992
|
#endif |
|
993
|
HASHCLASH_SHA1COMPRESS_ROUND3_STEP(c, d, e, a, b, W, 58); |
|
994
|
|
|
995
|
#ifdef DOSTORESTATE59 |
|
996
|
SHA1_STORE_STATE(59) |
|
997
|
#endif |
|
998
|
HASHCLASH_SHA1COMPRESS_ROUND3_STEP(b, c, d, e, a, W, 59); |
|
999
|
|
|
1000
|
|
|
1001
|
|
|
1002
|
|
|
1003
|
#ifdef DOSTORESTATE60 |
|
1004
|
SHA1_STORE_STATE(60) |
|
1005
|
#endif |
|
1006
|
HASHCLASH_SHA1COMPRESS_ROUND4_STEP(a, b, c, d, e, W, 60); |
|
1007
|
|
|
1008
|
#ifdef DOSTORESTATE61 |
|
1009
|
SHA1_STORE_STATE(61) |
|
1010
|
#endif |
|
1011
|
HASHCLASH_SHA1COMPRESS_ROUND4_STEP(e, a, b, c, d, W, 61); |
|
1012
|
|
|
1013
|
#ifdef DOSTORESTATE62 |
|
1014
|
SHA1_STORE_STATE(62) |
|
1015
|
#endif |
|
1016
|
HASHCLASH_SHA1COMPRESS_ROUND4_STEP(d, e, a, b, c, W, 62); |
|
1017
|
|
|
1018
|
#ifdef DOSTORESTATE63 |
|
1019
|
SHA1_STORE_STATE(63) |
|
1020
|
#endif |
|
1021
|
HASHCLASH_SHA1COMPRESS_ROUND4_STEP(c, d, e, a, b, W, 63); |
|
1022
|
|
|
1023
|
#ifdef DOSTORESTATE64 |
|
1024
|
SHA1_STORE_STATE(64) |
|
1025
|
#endif |
|
1026
|
HASHCLASH_SHA1COMPRESS_ROUND4_STEP(b, c, d, e, a, W, 64); |
|
1027
|
|
|
1028
|
#ifdef DOSTORESTATE65 |
|
1029
|
SHA1_STORE_STATE(65) |
|
1030
|
#endif |
|
1031
|
HASHCLASH_SHA1COMPRESS_ROUND4_STEP(a, b, c, d, e, W, 65); |
|
1032
|
|
|
1033
|
#ifdef DOSTORESTATE66 |
|
1034
|
SHA1_STORE_STATE(66) |
|
1035
|
#endif |
|
1036
|
HASHCLASH_SHA1COMPRESS_ROUND4_STEP(e, a, b, c, d, W, 66); |
|
1037
|
|
|
1038
|
#ifdef DOSTORESTATE67 |
|
1039
|
SHA1_STORE_STATE(67) |
|
1040
|
#endif |
|
1041
|
HASHCLASH_SHA1COMPRESS_ROUND4_STEP(d, e, a, b, c, W, 67); |
|
1042
|
|
|
1043
|
#ifdef DOSTORESTATE68 |
|
1044
|
SHA1_STORE_STATE(68) |
|
1045
|
#endif |
|
1046
|
HASHCLASH_SHA1COMPRESS_ROUND4_STEP(c, d, e, a, b, W, 68); |
|
1047
|
|
|
1048
|
#ifdef DOSTORESTATE69 |
|
1049
|
SHA1_STORE_STATE(69) |
|
1050
|
#endif |
|
1051
|
HASHCLASH_SHA1COMPRESS_ROUND4_STEP(b, c, d, e, a, W, 69); |
|
1052
|
|
|
1053
|
#ifdef DOSTORESTATE70 |
|
1054
|
SHA1_STORE_STATE(70) |
|
1055
|
#endif |
|
1056
|
HASHCLASH_SHA1COMPRESS_ROUND4_STEP(a, b, c, d, e, W, 70); |
|
1057
|
|
|
1058
|
#ifdef DOSTORESTATE71 |
|
1059
|
SHA1_STORE_STATE(71) |
|
1060
|
#endif |
|
1061
|
HASHCLASH_SHA1COMPRESS_ROUND4_STEP(e, a, b, c, d, W, 71); |
|
1062
|
|
|
1063
|
#ifdef DOSTORESTATE72 |
|
1064
|
SHA1_STORE_STATE(72) |
|
1065
|
#endif |
|
1066
|
HASHCLASH_SHA1COMPRESS_ROUND4_STEP(d, e, a, b, c, W, 72); |
|
1067
|
|
|
1068
|
#ifdef DOSTORESTATE73 |
|
1069
|
SHA1_STORE_STATE(73) |
|
1070
|
#endif |
|
1071
|
HASHCLASH_SHA1COMPRESS_ROUND4_STEP(c, d, e, a, b, W, 73); |
|
1072
|
|
|
1073
|
#ifdef DOSTORESTATE74 |
|
1074
|
SHA1_STORE_STATE(74) |
|
1075
|
#endif |
|
1076
|
HASHCLASH_SHA1COMPRESS_ROUND4_STEP(b, c, d, e, a, W, 74); |
|
1077
|
|
|
1078
|
#ifdef DOSTORESTATE75 |
|
1079
|
SHA1_STORE_STATE(75) |
|
1080
|
#endif |
|
1081
|
HASHCLASH_SHA1COMPRESS_ROUND4_STEP(a, b, c, d, e, W, 75); |
|
1082
|
|
|
1083
|
#ifdef DOSTORESTATE76 |
|
1084
|
SHA1_STORE_STATE(76) |
|
1085
|
#endif |
|
1086
|
HASHCLASH_SHA1COMPRESS_ROUND4_STEP(e, a, b, c, d, W, 76); |
|
1087
|
|
|
1088
|
#ifdef DOSTORESTATE77 |
|
1089
|
SHA1_STORE_STATE(77) |
|
1090
|
#endif |
|
1091
|
HASHCLASH_SHA1COMPRESS_ROUND4_STEP(d, e, a, b, c, W, 77); |
|
1092
|
|
|
1093
|
#ifdef DOSTORESTATE78 |
|
1094
|
SHA1_STORE_STATE(78) |
|
1095
|
#endif |
|
1096
|
HASHCLASH_SHA1COMPRESS_ROUND4_STEP(c, d, e, a, b, W, 78); |
|
1097
|
|
|
1098
|
#ifdef DOSTORESTATE79 |
|
1099
|
SHA1_STORE_STATE(79) |
|
1100
|
#endif |
|
1101
|
HASHCLASH_SHA1COMPRESS_ROUND4_STEP(b, c, d, e, a, W, 79); |
|
1102
|
|
|
1103
|
|
|
1104
|
|
|
1105
|
ihv[0] += a; ihv[1] += b; ihv[2] += c; ihv[3] += d; ihv[4] += e; |
|
1106
|
} |
|
1107
|
|
|
1108
|
|
|
1109
|
|
|
1110
|
|
|
1111
|
#define SHA1_RECOMPRESS(t) \ |
|
1112
|
void sha1recompress_fast_ ## t (uint32_t ihvin[5], uint32_t ihvout[5], const uint32_t me2[80], const uint32_t state[5]) \ |
|
1113
|
{ \ |
|
1114
|
uint32_t a = state[0], b = state[1], c = state[2], d = state[3], e = state[4]; \ |
|
1115
|
if (t > 79) HASHCLASH_SHA1COMPRESS_ROUND4_STEP_BW(b, c, d, e, a, me2, 79); \ |
|
1116
|
if (t > 78) HASHCLASH_SHA1COMPRESS_ROUND4_STEP_BW(c, d, e, a, b, me2, 78); \ |
|
1117
|
if (t > 77) HASHCLASH_SHA1COMPRESS_ROUND4_STEP_BW(d, e, a, b, c, me2, 77); \ |
|
1118
|
if (t > 76) HASHCLASH_SHA1COMPRESS_ROUND4_STEP_BW(e, a, b, c, d, me2, 76); \ |
|
1119
|
if (t > 75) HASHCLASH_SHA1COMPRESS_ROUND4_STEP_BW(a, b, c, d, e, me2, 75); \ |
|
1120
|
if (t > 74) HASHCLASH_SHA1COMPRESS_ROUND4_STEP_BW(b, c, d, e, a, me2, 74); \ |
|
1121
|
if (t > 73) HASHCLASH_SHA1COMPRESS_ROUND4_STEP_BW(c, d, e, a, b, me2, 73); \ |
|
1122
|
if (t > 72) HASHCLASH_SHA1COMPRESS_ROUND4_STEP_BW(d, e, a, b, c, me2, 72); \ |
|
1123
|
if (t > 71) HASHCLASH_SHA1COMPRESS_ROUND4_STEP_BW(e, a, b, c, d, me2, 71); \ |
|
1124
|
if (t > 70) HASHCLASH_SHA1COMPRESS_ROUND4_STEP_BW(a, b, c, d, e, me2, 70); \ |
|
1125
|
if (t > 69) HASHCLASH_SHA1COMPRESS_ROUND4_STEP_BW(b, c, d, e, a, me2, 69); \ |
|
1126
|
if (t > 68) HASHCLASH_SHA1COMPRESS_ROUND4_STEP_BW(c, d, e, a, b, me2, 68); \ |
|
1127
|
if (t > 67) HASHCLASH_SHA1COMPRESS_ROUND4_STEP_BW(d, e, a, b, c, me2, 67); \ |
|
1128
|
if (t > 66) HASHCLASH_SHA1COMPRESS_ROUND4_STEP_BW(e, a, b, c, d, me2, 66); \ |
|
1129
|
if (t > 65) HASHCLASH_SHA1COMPRESS_ROUND4_STEP_BW(a, b, c, d, e, me2, 65); \ |
|
1130
|
if (t > 64) HASHCLASH_SHA1COMPRESS_ROUND4_STEP_BW(b, c, d, e, a, me2, 64); \ |
|
1131
|
if (t > 63) HASHCLASH_SHA1COMPRESS_ROUND4_STEP_BW(c, d, e, a, b, me2, 63); \ |
|
1132
|
if (t > 62) HASHCLASH_SHA1COMPRESS_ROUND4_STEP_BW(d, e, a, b, c, me2, 62); \ |
|
1133
|
if (t > 61) HASHCLASH_SHA1COMPRESS_ROUND4_STEP_BW(e, a, b, c, d, me2, 61); \ |
|
1134
|
if (t > 60) HASHCLASH_SHA1COMPRESS_ROUND4_STEP_BW(a, b, c, d, e, me2, 60); \ |
|
1135
|
if (t > 59) HASHCLASH_SHA1COMPRESS_ROUND3_STEP_BW(b, c, d, e, a, me2, 59); \ |
|
1136
|
if (t > 58) HASHCLASH_SHA1COMPRESS_ROUND3_STEP_BW(c, d, e, a, b, me2, 58); \ |
|
1137
|
if (t > 57) HASHCLASH_SHA1COMPRESS_ROUND3_STEP_BW(d, e, a, b, c, me2, 57); \ |
|
1138
|
if (t > 56) HASHCLASH_SHA1COMPRESS_ROUND3_STEP_BW(e, a, b, c, d, me2, 56); \ |
|
1139
|
if (t > 55) HASHCLASH_SHA1COMPRESS_ROUND3_STEP_BW(a, b, c, d, e, me2, 55); \ |
|
1140
|
if (t > 54) HASHCLASH_SHA1COMPRESS_ROUND3_STEP_BW(b, c, d, e, a, me2, 54); \ |
|
1141
|
if (t > 53) HASHCLASH_SHA1COMPRESS_ROUND3_STEP_BW(c, d, e, a, b, me2, 53); \ |
|
1142
|
if (t > 52) HASHCLASH_SHA1COMPRESS_ROUND3_STEP_BW(d, e, a, b, c, me2, 52); \ |
|
1143
|
if (t > 51) HASHCLASH_SHA1COMPRESS_ROUND3_STEP_BW(e, a, b, c, d, me2, 51); \ |
|
1144
|
if (t > 50) HASHCLASH_SHA1COMPRESS_ROUND3_STEP_BW(a, b, c, d, e, me2, 50); \ |
|
1145
|
if (t > 49) HASHCLASH_SHA1COMPRESS_ROUND3_STEP_BW(b, c, d, e, a, me2, 49); \ |
|
1146
|
if (t > 48) HASHCLASH_SHA1COMPRESS_ROUND3_STEP_BW(c, d, e, a, b, me2, 48); \ |
|
1147
|
if (t > 47) HASHCLASH_SHA1COMPRESS_ROUND3_STEP_BW(d, e, a, b, c, me2, 47); \ |
|
1148
|
if (t > 46) HASHCLASH_SHA1COMPRESS_ROUND3_STEP_BW(e, a, b, c, d, me2, 46); \ |
|
1149
|
if (t > 45) HASHCLASH_SHA1COMPRESS_ROUND3_STEP_BW(a, b, c, d, e, me2, 45); \ |
|
1150
|
if (t > 44) HASHCLASH_SHA1COMPRESS_ROUND3_STEP_BW(b, c, d, e, a, me2, 44); \ |
|
1151
|
if (t > 43) HASHCLASH_SHA1COMPRESS_ROUND3_STEP_BW(c, d, e, a, b, me2, 43); \ |
|
1152
|
if (t > 42) HASHCLASH_SHA1COMPRESS_ROUND3_STEP_BW(d, e, a, b, c, me2, 42); \ |
|
1153
|
if (t > 41) HASHCLASH_SHA1COMPRESS_ROUND3_STEP_BW(e, a, b, c, d, me2, 41); \ |
|
1154
|
if (t > 40) HASHCLASH_SHA1COMPRESS_ROUND3_STEP_BW(a, b, c, d, e, me2, 40); \ |
|
1155
|
if (t > 39) HASHCLASH_SHA1COMPRESS_ROUND2_STEP_BW(b, c, d, e, a, me2, 39); \ |
|
1156
|
if (t > 38) HASHCLASH_SHA1COMPRESS_ROUND2_STEP_BW(c, d, e, a, b, me2, 38); \ |
|
1157
|
if (t > 37) HASHCLASH_SHA1COMPRESS_ROUND2_STEP_BW(d, e, a, b, c, me2, 37); \ |
|
1158
|
if (t > 36) HASHCLASH_SHA1COMPRESS_ROUND2_STEP_BW(e, a, b, c, d, me2, 36); \ |
|
1159
|
if (t > 35) HASHCLASH_SHA1COMPRESS_ROUND2_STEP_BW(a, b, c, d, e, me2, 35); \ |
|
1160
|
if (t > 34) HASHCLASH_SHA1COMPRESS_ROUND2_STEP_BW(b, c, d, e, a, me2, 34); \ |
|
1161
|
if (t > 33) HASHCLASH_SHA1COMPRESS_ROUND2_STEP_BW(c, d, e, a, b, me2, 33); \ |
|
1162
|
if (t > 32) HASHCLASH_SHA1COMPRESS_ROUND2_STEP_BW(d, e, a, b, c, me2, 32); \ |
|
1163
|
if (t > 31) HASHCLASH_SHA1COMPRESS_ROUND2_STEP_BW(e, a, b, c, d, me2, 31); \ |
|
1164
|
if (t > 30) HASHCLASH_SHA1COMPRESS_ROUND2_STEP_BW(a, b, c, d, e, me2, 30); \ |
|
1165
|
if (t > 29) HASHCLASH_SHA1COMPRESS_ROUND2_STEP_BW(b, c, d, e, a, me2, 29); \ |
|
1166
|
if (t > 28) HASHCLASH_SHA1COMPRESS_ROUND2_STEP_BW(c, d, e, a, b, me2, 28); \ |
|
1167
|
if (t > 27) HASHCLASH_SHA1COMPRESS_ROUND2_STEP_BW(d, e, a, b, c, me2, 27); \ |
|
1168
|
if (t > 26) HASHCLASH_SHA1COMPRESS_ROUND2_STEP_BW(e, a, b, c, d, me2, 26); \ |
|
1169
|
if (t > 25) HASHCLASH_SHA1COMPRESS_ROUND2_STEP_BW(a, b, c, d, e, me2, 25); \ |
|
1170
|
if (t > 24) HASHCLASH_SHA1COMPRESS_ROUND2_STEP_BW(b, c, d, e, a, me2, 24); \ |
|
1171
|
if (t > 23) HASHCLASH_SHA1COMPRESS_ROUND2_STEP_BW(c, d, e, a, b, me2, 23); \ |
|
1172
|
if (t > 22) HASHCLASH_SHA1COMPRESS_ROUND2_STEP_BW(d, e, a, b, c, me2, 22); \ |
|
1173
|
if (t > 21) HASHCLASH_SHA1COMPRESS_ROUND2_STEP_BW(e, a, b, c, d, me2, 21); \ |
|
1174
|
if (t > 20) HASHCLASH_SHA1COMPRESS_ROUND2_STEP_BW(a, b, c, d, e, me2, 20); \ |
|
1175
|
if (t > 19) HASHCLASH_SHA1COMPRESS_ROUND1_STEP_BW(b, c, d, e, a, me2, 19); \ |
|
1176
|
if (t > 18) HASHCLASH_SHA1COMPRESS_ROUND1_STEP_BW(c, d, e, a, b, me2, 18); \ |
|
1177
|
if (t > 17) HASHCLASH_SHA1COMPRESS_ROUND1_STEP_BW(d, e, a, b, c, me2, 17); \ |
|
1178
|
if (t > 16) HASHCLASH_SHA1COMPRESS_ROUND1_STEP_BW(e, a, b, c, d, me2, 16); \ |
|
1179
|
if (t > 15) HASHCLASH_SHA1COMPRESS_ROUND1_STEP_BW(a, b, c, d, e, me2, 15); \ |
|
1180
|
if (t > 14) HASHCLASH_SHA1COMPRESS_ROUND1_STEP_BW(b, c, d, e, a, me2, 14); \ |
|
1181
|
if (t > 13) HASHCLASH_SHA1COMPRESS_ROUND1_STEP_BW(c, d, e, a, b, me2, 13); \ |
|
1182
|
if (t > 12) HASHCLASH_SHA1COMPRESS_ROUND1_STEP_BW(d, e, a, b, c, me2, 12); \ |
|
1183
|
if (t > 11) HASHCLASH_SHA1COMPRESS_ROUND1_STEP_BW(e, a, b, c, d, me2, 11); \ |
|
1184
|
if (t > 10) HASHCLASH_SHA1COMPRESS_ROUND1_STEP_BW(a, b, c, d, e, me2, 10); \ |
|
1185
|
if (t > 9) HASHCLASH_SHA1COMPRESS_ROUND1_STEP_BW(b, c, d, e, a, me2, 9); \ |
|
1186
|
if (t > 8) HASHCLASH_SHA1COMPRESS_ROUND1_STEP_BW(c, d, e, a, b, me2, 8); \ |
|
1187
|
if (t > 7) HASHCLASH_SHA1COMPRESS_ROUND1_STEP_BW(d, e, a, b, c, me2, 7); \ |
|
1188
|
if (t > 6) HASHCLASH_SHA1COMPRESS_ROUND1_STEP_BW(e, a, b, c, d, me2, 6); \ |
|
1189
|
if (t > 5) HASHCLASH_SHA1COMPRESS_ROUND1_STEP_BW(a, b, c, d, e, me2, 5); \ |
|
1190
|
if (t > 4) HASHCLASH_SHA1COMPRESS_ROUND1_STEP_BW(b, c, d, e, a, me2, 4); \ |
|
1191
|
if (t > 3) HASHCLASH_SHA1COMPRESS_ROUND1_STEP_BW(c, d, e, a, b, me2, 3); \ |
|
1192
|
if (t > 2) HASHCLASH_SHA1COMPRESS_ROUND1_STEP_BW(d, e, a, b, c, me2, 2); \ |
|
1193
|
if (t > 1) HASHCLASH_SHA1COMPRESS_ROUND1_STEP_BW(e, a, b, c, d, me2, 1); \ |
|
1194
|
if (t > 0) HASHCLASH_SHA1COMPRESS_ROUND1_STEP_BW(a, b, c, d, e, me2, 0); \ |
|
1195
|
ihvin[0] = a; ihvin[1] = b; ihvin[2] = c; ihvin[3] = d; ihvin[4] = e; \ |
|
1196
|
a = state[0]; b = state[1]; c = state[2]; d = state[3]; e = state[4]; \ |
|
1197
|
if (t <= 0) HASHCLASH_SHA1COMPRESS_ROUND1_STEP(a, b, c, d, e, me2, 0); \ |
|
1198
|
if (t <= 1) HASHCLASH_SHA1COMPRESS_ROUND1_STEP(e, a, b, c, d, me2, 1); \ |
|
1199
|
if (t <= 2) HASHCLASH_SHA1COMPRESS_ROUND1_STEP(d, e, a, b, c, me2, 2); \ |
|
1200
|
if (t <= 3) HASHCLASH_SHA1COMPRESS_ROUND1_STEP(c, d, e, a, b, me2, 3); \ |
|
1201
|
if (t <= 4) HASHCLASH_SHA1COMPRESS_ROUND1_STEP(b, c, d, e, a, me2, 4); \ |
|
1202
|
if (t <= 5) HASHCLASH_SHA1COMPRESS_ROUND1_STEP(a, b, c, d, e, me2, 5); \ |
|
1203
|
if (t <= 6) HASHCLASH_SHA1COMPRESS_ROUND1_STEP(e, a, b, c, d, me2, 6); \ |
|
1204
|
if (t <= 7) HASHCLASH_SHA1COMPRESS_ROUND1_STEP(d, e, a, b, c, me2, 7); \ |
|
1205
|
if (t <= 8) HASHCLASH_SHA1COMPRESS_ROUND1_STEP(c, d, e, a, b, me2, 8); \ |
|
1206
|
if (t <= 9) HASHCLASH_SHA1COMPRESS_ROUND1_STEP(b, c, d, e, a, me2, 9); \ |
|
1207
|
if (t <= 10) HASHCLASH_SHA1COMPRESS_ROUND1_STEP(a, b, c, d, e, me2, 10); \ |
|
1208
|
if (t <= 11) HASHCLASH_SHA1COMPRESS_ROUND1_STEP(e, a, b, c, d, me2, 11); \ |
|
1209
|
if (t <= 12) HASHCLASH_SHA1COMPRESS_ROUND1_STEP(d, e, a, b, c, me2, 12); \ |
|
1210
|
if (t <= 13) HASHCLASH_SHA1COMPRESS_ROUND1_STEP(c, d, e, a, b, me2, 13); \ |
|
1211
|
if (t <= 14) HASHCLASH_SHA1COMPRESS_ROUND1_STEP(b, c, d, e, a, me2, 14); \ |
|
1212
|
if (t <= 15) HASHCLASH_SHA1COMPRESS_ROUND1_STEP(a, b, c, d, e, me2, 15); \ |
|
1213
|
if (t <= 16) HASHCLASH_SHA1COMPRESS_ROUND1_STEP(e, a, b, c, d, me2, 16); \ |
|
1214
|
if (t <= 17) HASHCLASH_SHA1COMPRESS_ROUND1_STEP(d, e, a, b, c, me2, 17); \ |
|
1215
|
if (t <= 18) HASHCLASH_SHA1COMPRESS_ROUND1_STEP(c, d, e, a, b, me2, 18); \ |
|
1216
|
if (t <= 19) HASHCLASH_SHA1COMPRESS_ROUND1_STEP(b, c, d, e, a, me2, 19); \ |
|
1217
|
if (t <= 20) HASHCLASH_SHA1COMPRESS_ROUND2_STEP(a, b, c, d, e, me2, 20); \ |
|
1218
|
if (t <= 21) HASHCLASH_SHA1COMPRESS_ROUND2_STEP(e, a, b, c, d, me2, 21); \ |
|
1219
|
if (t <= 22) HASHCLASH_SHA1COMPRESS_ROUND2_STEP(d, e, a, b, c, me2, 22); \ |
|
1220
|
if (t <= 23) HASHCLASH_SHA1COMPRESS_ROUND2_STEP(c, d, e, a, b, me2, 23); \ |
|
1221
|
if (t <= 24) HASHCLASH_SHA1COMPRESS_ROUND2_STEP(b, c, d, e, a, me2, 24); \ |
|
1222
|
if (t <= 25) HASHCLASH_SHA1COMPRESS_ROUND2_STEP(a, b, c, d, e, me2, 25); \ |
|
1223
|
if (t <= 26) HASHCLASH_SHA1COMPRESS_ROUND2_STEP(e, a, b, c, d, me2, 26); \ |
|
1224
|
if (t <= 27) HASHCLASH_SHA1COMPRESS_ROUND2_STEP(d, e, a, b, c, me2, 27); \ |
|
1225
|
if (t <= 28) HASHCLASH_SHA1COMPRESS_ROUND2_STEP(c, d, e, a, b, me2, 28); \ |
|
1226
|
if (t <= 29) HASHCLASH_SHA1COMPRESS_ROUND2_STEP(b, c, d, e, a, me2, 29); \ |
|
1227
|
if (t <= 30) HASHCLASH_SHA1COMPRESS_ROUND2_STEP(a, b, c, d, e, me2, 30); \ |
|
1228
|
if (t <= 31) HASHCLASH_SHA1COMPRESS_ROUND2_STEP(e, a, b, c, d, me2, 31); \ |
|
1229
|
if (t <= 32) HASHCLASH_SHA1COMPRESS_ROUND2_STEP(d, e, a, b, c, me2, 32); \ |
|
1230
|
if (t <= 33) HASHCLASH_SHA1COMPRESS_ROUND2_STEP(c, d, e, a, b, me2, 33); \ |
|
1231
|
if (t <= 34) HASHCLASH_SHA1COMPRESS_ROUND2_STEP(b, c, d, e, a, me2, 34); \ |
|
1232
|
if (t <= 35) HASHCLASH_SHA1COMPRESS_ROUND2_STEP(a, b, c, d, e, me2, 35); \ |
|
1233
|
if (t <= 36) HASHCLASH_SHA1COMPRESS_ROUND2_STEP(e, a, b, c, d, me2, 36); \ |
|
1234
|
if (t <= 37) HASHCLASH_SHA1COMPRESS_ROUND2_STEP(d, e, a, b, c, me2, 37); \ |
|
1235
|
if (t <= 38) HASHCLASH_SHA1COMPRESS_ROUND2_STEP(c, d, e, a, b, me2, 38); \ |
|
1236
|
if (t <= 39) HASHCLASH_SHA1COMPRESS_ROUND2_STEP(b, c, d, e, a, me2, 39); \ |
|
1237
|
if (t <= 40) HASHCLASH_SHA1COMPRESS_ROUND3_STEP(a, b, c, d, e, me2, 40); \ |
|
1238
|
if (t <= 41) HASHCLASH_SHA1COMPRESS_ROUND3_STEP(e, a, b, c, d, me2, 41); \ |
|
1239
|
if (t <= 42) HASHCLASH_SHA1COMPRESS_ROUND3_STEP(d, e, a, b, c, me2, 42); \ |
|
1240
|
if (t <= 43) HASHCLASH_SHA1COMPRESS_ROUND3_STEP(c, d, e, a, b, me2, 43); \ |
|
1241
|
if (t <= 44) HASHCLASH_SHA1COMPRESS_ROUND3_STEP(b, c, d, e, a, me2, 44); \ |
|
1242
|
if (t <= 45) HASHCLASH_SHA1COMPRESS_ROUND3_STEP(a, b, c, d, e, me2, 45); \ |
|
1243
|
if (t <= 46) HASHCLASH_SHA1COMPRESS_ROUND3_STEP(e, a, b, c, d, me2, 46); \ |
|
1244
|
if (t <= 47) HASHCLASH_SHA1COMPRESS_ROUND3_STEP(d, e, a, b, c, me2, 47); \ |
|
1245
|
if (t <= 48) HASHCLASH_SHA1COMPRESS_ROUND3_STEP(c, d, e, a, b, me2, 48); \ |
|
1246
|
if (t <= 49) HASHCLASH_SHA1COMPRESS_ROUND3_STEP(b, c, d, e, a, me2, 49); \ |
|
1247
|
if (t <= 50) HASHCLASH_SHA1COMPRESS_ROUND3_STEP(a, b, c, d, e, me2, 50); \ |
|
1248
|
if (t <= 51) HASHCLASH_SHA1COMPRESS_ROUND3_STEP(e, a, b, c, d, me2, 51); \ |
|
1249
|
if (t <= 52) HASHCLASH_SHA1COMPRESS_ROUND3_STEP(d, e, a, b, c, me2, 52); \ |
|
1250
|
if (t <= 53) HASHCLASH_SHA1COMPRESS_ROUND3_STEP(c, d, e, a, b, me2, 53); \ |
|
1251
|
if (t <= 54) HASHCLASH_SHA1COMPRESS_ROUND3_STEP(b, c, d, e, a, me2, 54); \ |
|
1252
|
if (t <= 55) HASHCLASH_SHA1COMPRESS_ROUND3_STEP(a, b, c, d, e, me2, 55); \ |
|
1253
|
if (t <= 56) HASHCLASH_SHA1COMPRESS_ROUND3_STEP(e, a, b, c, d, me2, 56); \ |
|
1254
|
if (t <= 57) HASHCLASH_SHA1COMPRESS_ROUND3_STEP(d, e, a, b, c, me2, 57); \ |
|
1255
|
if (t <= 58) HASHCLASH_SHA1COMPRESS_ROUND3_STEP(c, d, e, a, b, me2, 58); \ |
|
1256
|
if (t <= 59) HASHCLASH_SHA1COMPRESS_ROUND3_STEP(b, c, d, e, a, me2, 59); \ |
|
1257
|
if (t <= 60) HASHCLASH_SHA1COMPRESS_ROUND4_STEP(a, b, c, d, e, me2, 60); \ |
|
1258
|
if (t <= 61) HASHCLASH_SHA1COMPRESS_ROUND4_STEP(e, a, b, c, d, me2, 61); \ |
|
1259
|
if (t <= 62) HASHCLASH_SHA1COMPRESS_ROUND4_STEP(d, e, a, b, c, me2, 62); \ |
|
1260
|
if (t <= 63) HASHCLASH_SHA1COMPRESS_ROUND4_STEP(c, d, e, a, b, me2, 63); \ |
|
1261
|
if (t <= 64) HASHCLASH_SHA1COMPRESS_ROUND4_STEP(b, c, d, e, a, me2, 64); \ |
|
1262
|
if (t <= 65) HASHCLASH_SHA1COMPRESS_ROUND4_STEP(a, b, c, d, e, me2, 65); \ |
|
1263
|
if (t <= 66) HASHCLASH_SHA1COMPRESS_ROUND4_STEP(e, a, b, c, d, me2, 66); \ |
|
1264
|
if (t <= 67) HASHCLASH_SHA1COMPRESS_ROUND4_STEP(d, e, a, b, c, me2, 67); \ |
|
1265
|
if (t <= 68) HASHCLASH_SHA1COMPRESS_ROUND4_STEP(c, d, e, a, b, me2, 68); \ |
|
1266
|
if (t <= 69) HASHCLASH_SHA1COMPRESS_ROUND4_STEP(b, c, d, e, a, me2, 69); \ |
|
1267
|
if (t <= 70) HASHCLASH_SHA1COMPRESS_ROUND4_STEP(a, b, c, d, e, me2, 70); \ |
|
1268
|
if (t <= 71) HASHCLASH_SHA1COMPRESS_ROUND4_STEP(e, a, b, c, d, me2, 71); \ |
|
1269
|
if (t <= 72) HASHCLASH_SHA1COMPRESS_ROUND4_STEP(d, e, a, b, c, me2, 72); \ |
|
1270
|
if (t <= 73) HASHCLASH_SHA1COMPRESS_ROUND4_STEP(c, d, e, a, b, me2, 73); \ |
|
1271
|
if (t <= 74) HASHCLASH_SHA1COMPRESS_ROUND4_STEP(b, c, d, e, a, me2, 74); \ |
|
1272
|
if (t <= 75) HASHCLASH_SHA1COMPRESS_ROUND4_STEP(a, b, c, d, e, me2, 75); \ |
|
1273
|
if (t <= 76) HASHCLASH_SHA1COMPRESS_ROUND4_STEP(e, a, b, c, d, me2, 76); \ |
|
1274
|
if (t <= 77) HASHCLASH_SHA1COMPRESS_ROUND4_STEP(d, e, a, b, c, me2, 77); \ |
|
1275
|
if (t <= 78) HASHCLASH_SHA1COMPRESS_ROUND4_STEP(c, d, e, a, b, me2, 78); \ |
|
1276
|
if (t <= 79) HASHCLASH_SHA1COMPRESS_ROUND4_STEP(b, c, d, e, a, me2, 79); \ |
|
1277
|
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; \ |
|
1278
|
} |
|
1279
|
|
|
1280
|
SHA1_RECOMPRESS(0) |
|
1281
|
SHA1_RECOMPRESS(1) |
|
1282
|
SHA1_RECOMPRESS(2) |
|
1283
|
SHA1_RECOMPRESS(3) |
|
1284
|
SHA1_RECOMPRESS(4) |
|
1285
|
SHA1_RECOMPRESS(5) |
|
1286
|
SHA1_RECOMPRESS(6) |
|
1287
|
SHA1_RECOMPRESS(7) |
|
1288
|
SHA1_RECOMPRESS(8) |
|
1289
|
SHA1_RECOMPRESS(9) |
|
1290
|
|
|
1291
|
SHA1_RECOMPRESS(10) |
|
1292
|
SHA1_RECOMPRESS(11) |
|
1293
|
SHA1_RECOMPRESS(12) |
|
1294
|
SHA1_RECOMPRESS(13) |
|
1295
|
SHA1_RECOMPRESS(14) |
|
1296
|
SHA1_RECOMPRESS(15) |
|
1297
|
SHA1_RECOMPRESS(16) |
|
1298
|
SHA1_RECOMPRESS(17) |
|
1299
|
SHA1_RECOMPRESS(18) |
|
1300
|
SHA1_RECOMPRESS(19) |
|
1301
|
|
|
1302
|
SHA1_RECOMPRESS(20) |
|
1303
|
SHA1_RECOMPRESS(21) |
|
1304
|
SHA1_RECOMPRESS(22) |
|
1305
|
SHA1_RECOMPRESS(23) |
|
1306
|
SHA1_RECOMPRESS(24) |
|
1307
|
SHA1_RECOMPRESS(25) |
|
1308
|
SHA1_RECOMPRESS(26) |
|
1309
|
SHA1_RECOMPRESS(27) |
|
1310
|
SHA1_RECOMPRESS(28) |
|
1311
|
SHA1_RECOMPRESS(29) |
|
1312
|
|
|
1313
|
SHA1_RECOMPRESS(30) |
|
1314
|
SHA1_RECOMPRESS(31) |
|
1315
|
SHA1_RECOMPRESS(32) |
|
1316
|
SHA1_RECOMPRESS(33) |
|
1317
|
SHA1_RECOMPRESS(34) |
|
1318
|
SHA1_RECOMPRESS(35) |
|
1319
|
SHA1_RECOMPRESS(36) |
|
1320
|
SHA1_RECOMPRESS(37) |
|
1321
|
SHA1_RECOMPRESS(38) |
|
1322
|
SHA1_RECOMPRESS(39) |
|
1323
|
|
|
1324
|
SHA1_RECOMPRESS(40) |
|
1325
|
SHA1_RECOMPRESS(41) |
|
1326
|
SHA1_RECOMPRESS(42) |
|
1327
|
SHA1_RECOMPRESS(43) |
|
1328
|
SHA1_RECOMPRESS(44) |
|
1329
|
SHA1_RECOMPRESS(45) |
|
1330
|
SHA1_RECOMPRESS(46) |
|
1331
|
SHA1_RECOMPRESS(47) |
|
1332
|
SHA1_RECOMPRESS(48) |
|
1333
|
SHA1_RECOMPRESS(49) |
|
1334
|
|
|
1335
|
SHA1_RECOMPRESS(50) |
|
1336
|
SHA1_RECOMPRESS(51) |
|
1337
|
SHA1_RECOMPRESS(52) |
|
1338
|
SHA1_RECOMPRESS(53) |
|
1339
|
SHA1_RECOMPRESS(54) |
|
1340
|
SHA1_RECOMPRESS(55) |
|
1341
|
SHA1_RECOMPRESS(56) |
|
1342
|
SHA1_RECOMPRESS(57) |
|
1343
|
SHA1_RECOMPRESS(58) |
|
1344
|
SHA1_RECOMPRESS(59) |
|
1345
|
|
|
1346
|
SHA1_RECOMPRESS(60) |
|
1347
|
SHA1_RECOMPRESS(61) |
|
1348
|
SHA1_RECOMPRESS(62) |
|
1349
|
SHA1_RECOMPRESS(63) |
|
1350
|
SHA1_RECOMPRESS(64) |
|
1351
|
SHA1_RECOMPRESS(65) |
|
1352
|
SHA1_RECOMPRESS(66) |
|
1353
|
SHA1_RECOMPRESS(67) |
|
1354
|
SHA1_RECOMPRESS(68) |
|
1355
|
SHA1_RECOMPRESS(69) |
|
1356
|
|
|
1357
|
SHA1_RECOMPRESS(70) |
|
1358
|
SHA1_RECOMPRESS(71) |
|
1359
|
SHA1_RECOMPRESS(72) |
|
1360
|
SHA1_RECOMPRESS(73) |
|
1361
|
SHA1_RECOMPRESS(74) |
|
1362
|
SHA1_RECOMPRESS(75) |
|
1363
|
SHA1_RECOMPRESS(76) |
|
1364
|
SHA1_RECOMPRESS(77) |
|
1365
|
SHA1_RECOMPRESS(78) |
|
1366
|
SHA1_RECOMPRESS(79) |
|
1367
|
|
|
1368
|
sha1_recompression_type sha1_recompression_step[80] = |
|
1369
|
{ |
|
1370
|
sha1recompress_fast_0, sha1recompress_fast_1, sha1recompress_fast_2, sha1recompress_fast_3, sha1recompress_fast_4, sha1recompress_fast_5, sha1recompress_fast_6, sha1recompress_fast_7, sha1recompress_fast_8, sha1recompress_fast_9, |
|
1371
|
sha1recompress_fast_10, sha1recompress_fast_11, sha1recompress_fast_12, sha1recompress_fast_13, sha1recompress_fast_14, sha1recompress_fast_15, sha1recompress_fast_16, sha1recompress_fast_17, sha1recompress_fast_18, sha1recompress_fast_19, |
|
1372
|
sha1recompress_fast_20, sha1recompress_fast_21, sha1recompress_fast_22, sha1recompress_fast_23, sha1recompress_fast_24, sha1recompress_fast_25, sha1recompress_fast_26, sha1recompress_fast_27, sha1recompress_fast_28, sha1recompress_fast_29, |
|
1373
|
sha1recompress_fast_30, sha1recompress_fast_31, sha1recompress_fast_32, sha1recompress_fast_33, sha1recompress_fast_34, sha1recompress_fast_35, sha1recompress_fast_36, sha1recompress_fast_37, sha1recompress_fast_38, sha1recompress_fast_39, |
|
1374
|
sha1recompress_fast_40, sha1recompress_fast_41, sha1recompress_fast_42, sha1recompress_fast_43, sha1recompress_fast_44, sha1recompress_fast_45, sha1recompress_fast_46, sha1recompress_fast_47, sha1recompress_fast_48, sha1recompress_fast_49, |
|
1375
|
sha1recompress_fast_50, sha1recompress_fast_51, sha1recompress_fast_52, sha1recompress_fast_53, sha1recompress_fast_54, sha1recompress_fast_55, sha1recompress_fast_56, sha1recompress_fast_57, sha1recompress_fast_58, sha1recompress_fast_59, |
|
1376
|
sha1recompress_fast_60, sha1recompress_fast_61, sha1recompress_fast_62, sha1recompress_fast_63, sha1recompress_fast_64, sha1recompress_fast_65, sha1recompress_fast_66, sha1recompress_fast_67, sha1recompress_fast_68, sha1recompress_fast_69, |
|
1377
|
sha1recompress_fast_70, sha1recompress_fast_71, sha1recompress_fast_72, sha1recompress_fast_73, sha1recompress_fast_74, sha1recompress_fast_75, sha1recompress_fast_76, sha1recompress_fast_77, sha1recompress_fast_78, sha1recompress_fast_79, |
|
1378
|
}; |
|
1379
|
|
|
1380
|
|
|
1381
|
|
|
1382
|
|
|
1383
|
|
|
1384
|
void sha1_process(SHA1_CTX* ctx, const uint32_t block[16]) |
|
1385
|
{ |
|
1386
|
unsigned i, j; |
|
1387
|
uint32_t ubc_dv_mask[DVMASKSIZE]; |
|
1388
|
uint32_t ihvtmp[5]; |
|
1389
|
for (i=0; i < DVMASKSIZE; ++i) |
|
1390
|
ubc_dv_mask[i]=0; |
|
1391
|
ctx->ihv1[0] = ctx->ihv[0]; |
|
1392
|
ctx->ihv1[1] = ctx->ihv[1]; |
|
1393
|
ctx->ihv1[2] = ctx->ihv[2]; |
|
1394
|
ctx->ihv1[3] = ctx->ihv[3]; |
|
1395
|
ctx->ihv1[4] = ctx->ihv[4]; |
|
1396
|
memcpy(ctx->m1, block, 64); |
|
1397
|
sha1_message_expansion(ctx->m1); |
|
1398
|
if (ctx->detect_coll && ctx->ubc_check) |
|
1399
|
{ |
|
1400
|
ubc_check(ctx->m1, ubc_dv_mask); |
|
1401
|
} |
|
1402
|
sha1_compression_states(ctx->ihv, ctx->m1, ctx->states); |
|
1403
|
if (ctx->detect_coll) |
|
1404
|
{ |
|
1405
|
for (i = 0; sha1_dvs[i].dvType != 0; ++i) |
|
1406
|
{ |
|
1407
|
if ((0 == ctx->ubc_check) || (((uint32_t)(1) << sha1_dvs[i].maskb) & ubc_dv_mask[sha1_dvs[i].maski])) |
|
1408
|
{ |
|
1409
|
for (j = 0; j < 80; ++j) |
|
1410
|
ctx->m2[j] = ctx->m1[j] ^ sha1_dvs[i].dm[j]; |
|
1411
|
(sha1_recompression_step[sha1_dvs[i].testt])(ctx->ihv2, ihvtmp, ctx->m2, ctx->states[sha1_dvs[i].testt]); |
|
1412
|
/* to verify SHA-1 collision detection code with collisions for reduced-step SHA-1 */ |
|
1413
|
if ((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]) |
|
1414
|
|| (ctx->reduced_round_coll && 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])) |
|
1415
|
{ |
|
1416
|
ctx->found_collision = 1; |
|
1417
|
/* TODO: call callback */ |
|
1418
|
if (ctx->callback != NULL) |
|
1419
|
ctx->callback(ctx->total - 64, ctx->ihv1, ctx->ihv2, ctx->m1, ctx->m2); |
|
1420
|
|
|
1421
|
if (ctx->safe_hash) |
|
1422
|
{ |
|
1423
|
sha1_compression_W(ctx->ihv, ctx->m1); |
|
1424
|
sha1_compression_W(ctx->ihv, ctx->m1); |
|
1425
|
} |
|
1426
|
|
|
1427
|
break; |
|
1428
|
} |
|
1429
|
} |
|
1430
|
} |
|
1431
|
} |
|
1432
|
} |
|
1433
|
|
|
1434
|
|
|
1435
|
|
|
1436
|
|
|
1437
|
|
|
1438
|
void swap_bytes(uint32_t val[16]) |
|
1439
|
{ |
|
1440
|
unsigned i; |
|
1441
|
for (i = 0; i < 16; ++i) |
|
1442
|
{ |
|
1443
|
val[i] = ((val[i] << 8) & 0xFF00FF00) | ((val[i] >> 8) & 0xFF00FF); |
|
1444
|
val[i] = (val[i] << 16) | (val[i] >> 16); |
|
1445
|
} |
|
1446
|
} |
|
1447
|
|
|
1448
|
void SHA1DCInit(SHA1_CTX* ctx) |
|
1449
|
{ |
|
1450
|
static const union { unsigned char bytes[4]; uint32_t value; } endianness = { { 0, 1, 2, 3 } }; |
|
1451
|
static const uint32_t littleendian = 0x03020100; |
|
1452
|
ctx->total = 0; |
|
1453
|
ctx->ihv[0] = 0x67452301; |
|
1454
|
ctx->ihv[1] = 0xEFCDAB89; |
|
1455
|
ctx->ihv[2] = 0x98BADCFE; |
|
1456
|
ctx->ihv[3] = 0x10325476; |
|
1457
|
ctx->ihv[4] = 0xC3D2E1F0; |
|
1458
|
ctx->found_collision = 0; |
|
1459
|
ctx->safe_hash = 1; |
|
1460
|
ctx->ubc_check = 1; |
|
1461
|
ctx->detect_coll = 1; |
|
1462
|
ctx->reduced_round_coll = 0; |
|
1463
|
ctx->bigendian = (endianness.value != littleendian); |
|
1464
|
ctx->callback = NULL; |
|
1465
|
} |
|
1466
|
|
|
1467
|
void SHA1DCSetSafeHash(SHA1_CTX* ctx, int safehash) |
|
1468
|
{ |
|
1469
|
if (safehash) |
|
1470
|
ctx->safe_hash = 1; |
|
1471
|
else |
|
1472
|
ctx->safe_hash = 0; |
|
1473
|
} |
|
1474
|
|
|
1475
|
|
|
1476
|
void SHA1DCSetUseUBC(SHA1_CTX* ctx, int ubc_check) |
|
1477
|
{ |
|
1478
|
if (ubc_check) |
|
1479
|
ctx->ubc_check = 1; |
|
1480
|
else |
|
1481
|
ctx->ubc_check = 0; |
|
1482
|
} |
|
1483
|
|
|
1484
|
void SHA1DCSetUseDetectColl(SHA1_CTX* ctx, int detect_coll) |
|
1485
|
{ |
|
1486
|
if (detect_coll) |
|
1487
|
ctx->detect_coll = 1; |
|
1488
|
else |
|
1489
|
ctx->detect_coll = 0; |
|
1490
|
} |
|
1491
|
|
|
1492
|
void SHA1DCSetDetectReducedRoundCollision(SHA1_CTX* ctx, int reduced_round_coll) |
|
1493
|
{ |
|
1494
|
if (reduced_round_coll) |
|
1495
|
ctx->reduced_round_coll = 1; |
|
1496
|
else |
|
1497
|
ctx->reduced_round_coll = 0; |
|
1498
|
} |
|
1499
|
|
|
1500
|
void SHA1DCSetCallback(SHA1_CTX* ctx, collision_block_callback callback) |
|
1501
|
{ |
|
1502
|
ctx->callback = callback; |
|
1503
|
} |
|
1504
|
|
|
1505
|
void SHA1DCUpdate(SHA1_CTX* ctx, const unsigned char* buf, unsigned len) |
|
1506
|
{ |
|
1507
|
unsigned left, fill; |
|
1508
|
if (len == 0) |
|
1509
|
return; |
|
1510
|
|
|
1511
|
left = ctx->total & 63; |
|
1512
|
fill = 64 - left; |
|
1513
|
|
|
1514
|
if (left && len >= fill) |
|
1515
|
{ |
|
1516
|
ctx->total += fill; |
|
1517
|
memcpy(ctx->buffer + left, buf, fill); |
|
1518
|
if (!ctx->bigendian) |
|
1519
|
swap_bytes((uint32_t*)(ctx->buffer)); |
|
1520
|
sha1_process(ctx, (uint32_t*)(ctx->buffer)); |
|
1521
|
buf += fill; |
|
1522
|
len -= fill; |
|
1523
|
left = 0; |
|
1524
|
} |
|
1525
|
while (len >= 64) |
|
1526
|
{ |
|
1527
|
ctx->total += 64; |
|
1528
|
if (!ctx->bigendian) |
|
1529
|
{ |
|
1530
|
memcpy(ctx->buffer, buf, 64); |
|
1531
|
swap_bytes((uint32_t*)(ctx->buffer)); |
|
1532
|
sha1_process(ctx, (uint32_t*)(ctx->buffer)); |
|
1533
|
} |
|
1534
|
else |
|
1535
|
sha1_process(ctx, (uint32_t*)(buf)); |
|
1536
|
buf += 64; |
|
1537
|
len -= 64; |
|
1538
|
} |
|
1539
|
if (len > 0) |
|
1540
|
{ |
|
1541
|
ctx->total += len; |
|
1542
|
memcpy(ctx->buffer + left, buf, len); |
|
1543
|
} |
|
1544
|
} |
|
1545
|
|
|
1546
|
static const unsigned char sha1_padding[64] = |
|
1547
|
{ |
|
1548
|
0x80, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, |
|
1549
|
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, |
|
1550
|
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, |
|
1551
|
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 |
|
1552
|
}; |
|
1553
|
|
|
1554
|
int SHA1DCFinal(unsigned char output[20], SHA1_CTX *ctx) |
|
1555
|
{ |
|
1556
|
uint32_t last = ctx->total & 63; |
|
1557
|
uint32_t padn = (last < 56) ? (56 - last) : (120 - last); |
|
1558
|
uint64_t total; |
|
1559
|
SHA1DCUpdate(ctx, sha1_padding, padn); |
|
1560
|
|
|
1561
|
total = ctx->total - padn; |
|
1562
|
total <<= 3; |
|
1563
|
ctx->buffer[56] = (unsigned char)(total >> 56); |
|
1564
|
ctx->buffer[57] = (unsigned char)(total >> 48); |
|
1565
|
ctx->buffer[58] = (unsigned char)(total >> 40); |
|
1566
|
ctx->buffer[59] = (unsigned char)(total >> 32); |
|
1567
|
ctx->buffer[60] = (unsigned char)(total >> 24); |
|
1568
|
ctx->buffer[61] = (unsigned char)(total >> 16); |
|
1569
|
ctx->buffer[62] = (unsigned char)(total >> 8); |
|
1570
|
ctx->buffer[63] = (unsigned char)(total); |
|
1571
|
if (!ctx->bigendian) |
|
1572
|
swap_bytes((uint32_t*)(ctx->buffer)); |
|
1573
|
sha1_process(ctx, (uint32_t*)(ctx->buffer)); |
|
1574
|
output[0] = (unsigned char)(ctx->ihv[0] >> 24); |
|
1575
|
output[1] = (unsigned char)(ctx->ihv[0] >> 16); |
|
1576
|
output[2] = (unsigned char)(ctx->ihv[0] >> 8); |
|
1577
|
output[3] = (unsigned char)(ctx->ihv[0]); |
|
1578
|
output[4] = (unsigned char)(ctx->ihv[1] >> 24); |
|
1579
|
output[5] = (unsigned char)(ctx->ihv[1] >> 16); |
|
1580
|
output[6] = (unsigned char)(ctx->ihv[1] >> 8); |
|
1581
|
output[7] = (unsigned char)(ctx->ihv[1]); |
|
1582
|
output[8] = (unsigned char)(ctx->ihv[2] >> 24); |
|
1583
|
output[9] = (unsigned char)(ctx->ihv[2] >> 16); |
|
1584
|
output[10] = (unsigned char)(ctx->ihv[2] >> 8); |
|
1585
|
output[11] = (unsigned char)(ctx->ihv[2]); |
|
1586
|
output[12] = (unsigned char)(ctx->ihv[3] >> 24); |
|
1587
|
output[13] = (unsigned char)(ctx->ihv[3] >> 16); |
|
1588
|
output[14] = (unsigned char)(ctx->ihv[3] >> 8); |
|
1589
|
output[15] = (unsigned char)(ctx->ihv[3]); |
|
1590
|
output[16] = (unsigned char)(ctx->ihv[4] >> 24); |
|
1591
|
output[17] = (unsigned char)(ctx->ihv[4] >> 16); |
|
1592
|
output[18] = (unsigned char)(ctx->ihv[4] >> 8); |
|
1593
|
output[19] = (unsigned char)(ctx->ihv[4]); |
|
1594
|
return ctx->found_collision; |
|
1595
|
} |
|
1596
|
#endif /* FOSSIL_HARDENED_SHA1 */ |
|
1597
|
|