1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
180
181
182
183
184
185
186
187
188
189
190
191
192
|
/* Template for recompress method; run through cpp. */
#define ROUND1_STEP(a, b, c, d, e, T) {e += s1(a,b,c,d,w2[T]); b = rotateLeft(b, 30);}
#define ROUND2_STEP(a, b, c, d, e, T) {e += s2(a,b,c,d,w2[T]); b = rotateLeft(b, 30);}
#define ROUND3_STEP(a, b, c, d, e, T) {e += s3(a,b,c,d,w2[T]); b = rotateLeft(b, 30);}
#define ROUND4_STEP(a, b, c, d, e, T) {e += s4(a,b,c,d,w2[T]); b = rotateLeft(b, 30);}
#define ROUND1_STEP_BW(a, b, c, d, e, T) {b = rotateRight(b, 30); e -= s1(a,b,c,d,w2[T]);}
#define ROUND2_STEP_BW(a, b, c, d, e, T) {b = rotateRight(b, 30); e -= s2(a,b,c,d,w2[T]);}
#define ROUND3_STEP_BW(a, b, c, d, e, T) {b = rotateRight(b, 30); e -= s3(a,b,c,d,w2[T]);}
#define ROUND4_STEP_BW(a, b, c, d, e, T) {b = rotateRight(b, 30); e -= s4(a,b,c,d,w2[T]);}
/* Condition to go backwards: if (t > step) */
/* t=80-66 have no identified DV; skip.
ROUND4_STEP_BW(b, c, d, e, a, 79)
ROUND4_STEP_BW(c, d, e, a, b, 78)
ROUND4_STEP_BW(d, e, a, b, c, 77)
ROUND4_STEP_BW(e, a, b, c, d, 76)
ROUND4_STEP_BW(a, b, c, d, e, 75)
ROUND4_STEP_BW(b, c, d, e, a, 74)
ROUND4_STEP_BW(c, d, e, a, b, 73)
ROUND4_STEP_BW(d, e, a, b, c, 72)
ROUND4_STEP_BW(e, a, b, c, d, 71)
ROUND4_STEP_BW(a, b, c, d, e, 70)
ROUND4_STEP_BW(b, c, d, e, a, 69)
ROUND4_STEP_BW(c, d, e, a, b, 68)
ROUND4_STEP_BW(d, e, a, b, c, 67)
ROUND4_STEP_BW(e, a, b, c, d, 66)
ROUND4_STEP_BW(a, b, c, d, e, 65)
*/
if (t == 65) {
ROUND4_STEP_BW(b, c, d, e, a, 64)
ROUND4_STEP_BW(c, d, e, a, b, 63)
ROUND4_STEP_BW(d, e, a, b, c, 62)
ROUND4_STEP_BW(e, a, b, c, d, 61)
ROUND4_STEP_BW(a, b, c, d, e, 60)
ROUND3_STEP_BW(b, c, d, e, a, 59)
ROUND3_STEP_BW(c, d, e, a, b, 58)
}
ROUND3_STEP_BW(d, e, a, b, c, 57)
ROUND3_STEP_BW(e, a, b, c, d, 56)
ROUND3_STEP_BW(a, b, c, d, e, 55)
ROUND3_STEP_BW(b, c, d, e, a, 54)
ROUND3_STEP_BW(c, d, e, a, b, 53)
ROUND3_STEP_BW(d, e, a, b, c, 52)
ROUND3_STEP_BW(e, a, b, c, d, 51)
ROUND3_STEP_BW(a, b, c, d, e, 50)
ROUND3_STEP_BW(b, c, d, e, a, 49)
ROUND3_STEP_BW(c, d, e, a, b, 48)
ROUND3_STEP_BW(d, e, a, b, c, 47)
ROUND3_STEP_BW(e, a, b, c, d, 46)
ROUND3_STEP_BW(a, b, c, d, e, 45)
ROUND3_STEP_BW(b, c, d, e, a, 44)
ROUND3_STEP_BW(c, d, e, a, b, 43)
ROUND3_STEP_BW(d, e, a, b, c, 42)
ROUND3_STEP_BW(e, a, b, c, d, 41)
ROUND3_STEP_BW(a, b, c, d, e, 40)
ROUND2_STEP_BW(b, c, d, e, a, 39)
ROUND2_STEP_BW(c, d, e, a, b, 38)
ROUND2_STEP_BW(d, e, a, b, c, 37)
ROUND2_STEP_BW(e, a, b, c, d, 36)
ROUND2_STEP_BW(a, b, c, d, e, 35)
ROUND2_STEP_BW(b, c, d, e, a, 34)
ROUND2_STEP_BW(c, d, e, a, b, 33)
ROUND2_STEP_BW(d, e, a, b, c, 32)
ROUND2_STEP_BW(e, a, b, c, d, 31)
ROUND2_STEP_BW(a, b, c, d, e, 30)
ROUND2_STEP_BW(b, c, d, e, a, 29)
ROUND2_STEP_BW(c, d, e, a, b, 28)
ROUND2_STEP_BW(d, e, a, b, c, 27)
ROUND2_STEP_BW(e, a, b, c, d, 26)
ROUND2_STEP_BW(a, b, c, d, e, 25)
ROUND2_STEP_BW(b, c, d, e, a, 24)
ROUND2_STEP_BW(c, d, e, a, b, 23)
ROUND2_STEP_BW(d, e, a, b, c, 22)
ROUND2_STEP_BW(e, a, b, c, d, 21)
ROUND2_STEP_BW(a, b, c, d, e, 20)
ROUND1_STEP_BW(b, c, d, e, a, 19)
ROUND1_STEP_BW(c, d, e, a, b, 18)
ROUND1_STEP_BW(d, e, a, b, c, 17)
ROUND1_STEP_BW(e, a, b, c, d, 16)
ROUND1_STEP_BW(a, b, c, d, e, 15)
ROUND1_STEP_BW(b, c, d, e, a, 14)
ROUND1_STEP_BW(c, d, e, a, b, 13)
ROUND1_STEP_BW(d, e, a, b, c, 12)
ROUND1_STEP_BW(e, a, b, c, d, 11)
ROUND1_STEP_BW(a, b, c, d, e, 10)
ROUND1_STEP_BW(b, c, d, e, a, 9)
ROUND1_STEP_BW(c, d, e, a, b, 8)
ROUND1_STEP_BW(d, e, a, b, c, 7)
ROUND1_STEP_BW(e, a, b, c, d, 6)
ROUND1_STEP_BW(a, b, c, d, e, 5)
ROUND1_STEP_BW(b, c, d, e, a, 4)
ROUND1_STEP_BW(c, d, e, a, b, 3)
ROUND1_STEP_BW(d, e, a, b, c, 2)
ROUND1_STEP_BW(e, a, b, c, d, 1)
ROUND1_STEP_BW(a, b, c, d, e, 0)
hIn.save(a, b, c, d, e);
a = s.a; b = s.b; c = s.c; d = s.d; e = s.e;
/* Condition to go fowards: if (t <= step) */
/* Earliest restart is T=58; skip.
ROUND1_STEP(a, b, c, d, e, 0)
ROUND1_STEP(e, a, b, c, d, 1)
ROUND1_STEP(d, e, a, b, c, 2)
ROUND1_STEP(c, d, e, a, b, 3)
ROUND1_STEP(b, c, d, e, a, 4)
ROUND1_STEP(a, b, c, d, e, 5)
ROUND1_STEP(e, a, b, c, d, 6)
ROUND1_STEP(d, e, a, b, c, 7)
ROUND1_STEP(c, d, e, a, b, 8)
ROUND1_STEP(b, c, d, e, a, 9)
ROUND1_STEP(a, b, c, d, e, 10)
ROUND1_STEP(e, a, b, c, d, 11)
ROUND1_STEP(d, e, a, b, c, 12)
ROUND1_STEP(c, d, e, a, b, 13)
ROUND1_STEP(b, c, d, e, a, 14)
ROUND1_STEP(a, b, c, d, e, 15)
ROUND1_STEP(e, a, b, c, d, 16)
ROUND1_STEP(d, e, a, b, c, 17)
ROUND1_STEP(c, d, e, a, b, 18)
ROUND1_STEP(b, c, d, e, a, 19)
ROUND2_STEP(a, b, c, d, e, 20)
ROUND2_STEP(e, a, b, c, d, 21)
ROUND2_STEP(d, e, a, b, c, 22)
ROUND2_STEP(c, d, e, a, b, 23)
ROUND2_STEP(b, c, d, e, a, 24)
ROUND2_STEP(a, b, c, d, e, 25)
ROUND2_STEP(e, a, b, c, d, 26)
ROUND2_STEP(d, e, a, b, c, 27)
ROUND2_STEP(c, d, e, a, b, 28)
ROUND2_STEP(b, c, d, e, a, 29)
ROUND2_STEP(a, b, c, d, e, 30)
ROUND2_STEP(e, a, b, c, d, 31)
ROUND2_STEP(d, e, a, b, c, 32)
ROUND2_STEP(c, d, e, a, b, 33)
ROUND2_STEP(b, c, d, e, a, 34)
ROUND2_STEP(a, b, c, d, e, 35)
ROUND2_STEP(e, a, b, c, d, 36)
ROUND2_STEP(d, e, a, b, c, 37)
ROUND2_STEP(c, d, e, a, b, 38)
ROUND2_STEP(b, c, d, e, a, 39)
ROUND3_STEP(a, b, c, d, e, 40)
ROUND3_STEP(e, a, b, c, d, 41)
ROUND3_STEP(d, e, a, b, c, 42)
ROUND3_STEP(c, d, e, a, b, 43)
ROUND3_STEP(b, c, d, e, a, 44)
ROUND3_STEP(a, b, c, d, e, 45)
ROUND3_STEP(e, a, b, c, d, 46)
ROUND3_STEP(d, e, a, b, c, 47)
ROUND3_STEP(c, d, e, a, b, 48)
ROUND3_STEP(b, c, d, e, a, 49)
ROUND3_STEP(a, b, c, d, e, 50)
ROUND3_STEP(e, a, b, c, d, 51)
ROUND3_STEP(d, e, a, b, c, 52)
ROUND3_STEP(c, d, e, a, b, 53)
ROUND3_STEP(b, c, d, e, a, 54)
ROUND3_STEP(a, b, c, d, e, 55)
ROUND3_STEP(e, a, b, c, d, 56)
ROUND3_STEP(d, e, a, b, c, 57)
*/
if (t == 58) {
ROUND3_STEP(c, d, e, a, b, 58)
ROUND3_STEP(b, c, d, e, a, 59)
ROUND4_STEP(a, b, c, d, e, 60)
ROUND4_STEP(e, a, b, c, d, 61)
ROUND4_STEP(d, e, a, b, c, 62)
ROUND4_STEP(c, d, e, a, b, 63)
ROUND4_STEP(b, c, d, e, a, 64)
}
ROUND4_STEP(a, b, c, d, e, 65)
ROUND4_STEP(e, a, b, c, d, 66)
ROUND4_STEP(d, e, a, b, c, 67)
ROUND4_STEP(c, d, e, a, b, 68)
ROUND4_STEP(b, c, d, e, a, 69)
ROUND4_STEP(a, b, c, d, e, 70)
ROUND4_STEP(e, a, b, c, d, 71)
ROUND4_STEP(d, e, a, b, c, 72)
ROUND4_STEP(c, d, e, a, b, 73)
ROUND4_STEP(b, c, d, e, a, 74)
ROUND4_STEP(a, b, c, d, e, 75)
ROUND4_STEP(e, a, b, c, d, 76)
ROUND4_STEP(d, e, a, b, c, 77)
ROUND4_STEP(c, d, e, a, b, 78)
ROUND4_STEP(b, c, d, e, a, 79)
|