Initial commit
[hashcat.git] / amd / m06211.cl
1 /**
2  * Author......: Jens Steube <jens.steube@gmail.com>
3  * License.....: MIT
4  */
5
6 #define _RIPEMD160_
7
8 #include "include/constants.h"
9 #include "include/kernel_vendor.h"
10
11 #ifdef  VLIW1
12 #define VECT_SIZE1
13 #endif
14
15 #ifdef  VLIW4
16 #define VECT_SIZE1
17 #endif
18
19 #ifdef  VLIW5
20 #define VECT_SIZE1
21 #endif
22
23 #define DGST_R0 0
24 #define DGST_R1 1
25 #define DGST_R2 2
26 #define DGST_R3 3
27
28 #include "include/kernel_functions.c"
29 #include "types_amd.c"
30 #include "common_amd.c"
31
32 #include "gpu_aes256_amd.c"
33 #include "gpu_twofish256_amd.c"
34 #include "gpu_serpent256_amd.c"
35
36 static void ripemd160_transform (const u32x w[16], u32x dgst[5])
37 {
38   u32x a1 = dgst[0];
39   u32x b1 = dgst[1];
40   u32x c1 = dgst[2];
41   u32x d1 = dgst[3];
42   u32x e1 = dgst[4];
43
44   RIPEMD160_STEP (RIPEMD160_F , a1, b1, c1, d1, e1, w[ 0], RIPEMD160C00, RIPEMD160S00);
45   RIPEMD160_STEP (RIPEMD160_F , e1, a1, b1, c1, d1, w[ 1], RIPEMD160C00, RIPEMD160S01);
46   RIPEMD160_STEP (RIPEMD160_F , d1, e1, a1, b1, c1, w[ 2], RIPEMD160C00, RIPEMD160S02);
47   RIPEMD160_STEP (RIPEMD160_F , c1, d1, e1, a1, b1, w[ 3], RIPEMD160C00, RIPEMD160S03);
48   RIPEMD160_STEP (RIPEMD160_F , b1, c1, d1, e1, a1, w[ 4], RIPEMD160C00, RIPEMD160S04);
49   RIPEMD160_STEP (RIPEMD160_F , a1, b1, c1, d1, e1, w[ 5], RIPEMD160C00, RIPEMD160S05);
50   RIPEMD160_STEP (RIPEMD160_F , e1, a1, b1, c1, d1, w[ 6], RIPEMD160C00, RIPEMD160S06);
51   RIPEMD160_STEP (RIPEMD160_F , d1, e1, a1, b1, c1, w[ 7], RIPEMD160C00, RIPEMD160S07);
52   RIPEMD160_STEP (RIPEMD160_F , c1, d1, e1, a1, b1, w[ 8], RIPEMD160C00, RIPEMD160S08);
53   RIPEMD160_STEP (RIPEMD160_F , b1, c1, d1, e1, a1, w[ 9], RIPEMD160C00, RIPEMD160S09);
54   RIPEMD160_STEP (RIPEMD160_F , a1, b1, c1, d1, e1, w[10], RIPEMD160C00, RIPEMD160S0A);
55   RIPEMD160_STEP (RIPEMD160_F , e1, a1, b1, c1, d1, w[11], RIPEMD160C00, RIPEMD160S0B);
56   RIPEMD160_STEP (RIPEMD160_F , d1, e1, a1, b1, c1, w[12], RIPEMD160C00, RIPEMD160S0C);
57   RIPEMD160_STEP (RIPEMD160_F , c1, d1, e1, a1, b1, w[13], RIPEMD160C00, RIPEMD160S0D);
58   RIPEMD160_STEP (RIPEMD160_F , b1, c1, d1, e1, a1, w[14], RIPEMD160C00, RIPEMD160S0E);
59   RIPEMD160_STEP (RIPEMD160_F , a1, b1, c1, d1, e1, w[15], RIPEMD160C00, RIPEMD160S0F);
60
61   RIPEMD160_STEP (RIPEMD160_Go, e1, a1, b1, c1, d1, w[ 7], RIPEMD160C10, RIPEMD160S10);
62   RIPEMD160_STEP (RIPEMD160_Go, d1, e1, a1, b1, c1, w[ 4], RIPEMD160C10, RIPEMD160S11);
63   RIPEMD160_STEP (RIPEMD160_Go, c1, d1, e1, a1, b1, w[13], RIPEMD160C10, RIPEMD160S12);
64   RIPEMD160_STEP (RIPEMD160_Go, b1, c1, d1, e1, a1, w[ 1], RIPEMD160C10, RIPEMD160S13);
65   RIPEMD160_STEP (RIPEMD160_Go, a1, b1, c1, d1, e1, w[10], RIPEMD160C10, RIPEMD160S14);
66   RIPEMD160_STEP (RIPEMD160_Go, e1, a1, b1, c1, d1, w[ 6], RIPEMD160C10, RIPEMD160S15);
67   RIPEMD160_STEP (RIPEMD160_Go, d1, e1, a1, b1, c1, w[15], RIPEMD160C10, RIPEMD160S16);
68   RIPEMD160_STEP (RIPEMD160_Go, c1, d1, e1, a1, b1, w[ 3], RIPEMD160C10, RIPEMD160S17);
69   RIPEMD160_STEP (RIPEMD160_Go, b1, c1, d1, e1, a1, w[12], RIPEMD160C10, RIPEMD160S18);
70   RIPEMD160_STEP (RIPEMD160_Go, a1, b1, c1, d1, e1, w[ 0], RIPEMD160C10, RIPEMD160S19);
71   RIPEMD160_STEP (RIPEMD160_Go, e1, a1, b1, c1, d1, w[ 9], RIPEMD160C10, RIPEMD160S1A);
72   RIPEMD160_STEP (RIPEMD160_Go, d1, e1, a1, b1, c1, w[ 5], RIPEMD160C10, RIPEMD160S1B);
73   RIPEMD160_STEP (RIPEMD160_Go, c1, d1, e1, a1, b1, w[ 2], RIPEMD160C10, RIPEMD160S1C);
74   RIPEMD160_STEP (RIPEMD160_Go, b1, c1, d1, e1, a1, w[14], RIPEMD160C10, RIPEMD160S1D);
75   RIPEMD160_STEP (RIPEMD160_Go, a1, b1, c1, d1, e1, w[11], RIPEMD160C10, RIPEMD160S1E);
76   RIPEMD160_STEP (RIPEMD160_Go, e1, a1, b1, c1, d1, w[ 8], RIPEMD160C10, RIPEMD160S1F);
77
78   RIPEMD160_STEP (RIPEMD160_H , d1, e1, a1, b1, c1, w[ 3], RIPEMD160C20, RIPEMD160S20);
79   RIPEMD160_STEP (RIPEMD160_H , c1, d1, e1, a1, b1, w[10], RIPEMD160C20, RIPEMD160S21);
80   RIPEMD160_STEP (RIPEMD160_H , b1, c1, d1, e1, a1, w[14], RIPEMD160C20, RIPEMD160S22);
81   RIPEMD160_STEP (RIPEMD160_H , a1, b1, c1, d1, e1, w[ 4], RIPEMD160C20, RIPEMD160S23);
82   RIPEMD160_STEP (RIPEMD160_H , e1, a1, b1, c1, d1, w[ 9], RIPEMD160C20, RIPEMD160S24);
83   RIPEMD160_STEP (RIPEMD160_H , d1, e1, a1, b1, c1, w[15], RIPEMD160C20, RIPEMD160S25);
84   RIPEMD160_STEP (RIPEMD160_H , c1, d1, e1, a1, b1, w[ 8], RIPEMD160C20, RIPEMD160S26);
85   RIPEMD160_STEP (RIPEMD160_H , b1, c1, d1, e1, a1, w[ 1], RIPEMD160C20, RIPEMD160S27);
86   RIPEMD160_STEP (RIPEMD160_H , a1, b1, c1, d1, e1, w[ 2], RIPEMD160C20, RIPEMD160S28);
87   RIPEMD160_STEP (RIPEMD160_H , e1, a1, b1, c1, d1, w[ 7], RIPEMD160C20, RIPEMD160S29);
88   RIPEMD160_STEP (RIPEMD160_H , d1, e1, a1, b1, c1, w[ 0], RIPEMD160C20, RIPEMD160S2A);
89   RIPEMD160_STEP (RIPEMD160_H , c1, d1, e1, a1, b1, w[ 6], RIPEMD160C20, RIPEMD160S2B);
90   RIPEMD160_STEP (RIPEMD160_H , b1, c1, d1, e1, a1, w[13], RIPEMD160C20, RIPEMD160S2C);
91   RIPEMD160_STEP (RIPEMD160_H , a1, b1, c1, d1, e1, w[11], RIPEMD160C20, RIPEMD160S2D);
92   RIPEMD160_STEP (RIPEMD160_H , e1, a1, b1, c1, d1, w[ 5], RIPEMD160C20, RIPEMD160S2E);
93   RIPEMD160_STEP (RIPEMD160_H , d1, e1, a1, b1, c1, w[12], RIPEMD160C20, RIPEMD160S2F);
94
95   RIPEMD160_STEP (RIPEMD160_Io, c1, d1, e1, a1, b1, w[ 1], RIPEMD160C30, RIPEMD160S30);
96   RIPEMD160_STEP (RIPEMD160_Io, b1, c1, d1, e1, a1, w[ 9], RIPEMD160C30, RIPEMD160S31);
97   RIPEMD160_STEP (RIPEMD160_Io, a1, b1, c1, d1, e1, w[11], RIPEMD160C30, RIPEMD160S32);
98   RIPEMD160_STEP (RIPEMD160_Io, e1, a1, b1, c1, d1, w[10], RIPEMD160C30, RIPEMD160S33);
99   RIPEMD160_STEP (RIPEMD160_Io, d1, e1, a1, b1, c1, w[ 0], RIPEMD160C30, RIPEMD160S34);
100   RIPEMD160_STEP (RIPEMD160_Io, c1, d1, e1, a1, b1, w[ 8], RIPEMD160C30, RIPEMD160S35);
101   RIPEMD160_STEP (RIPEMD160_Io, b1, c1, d1, e1, a1, w[12], RIPEMD160C30, RIPEMD160S36);
102   RIPEMD160_STEP (RIPEMD160_Io, a1, b1, c1, d1, e1, w[ 4], RIPEMD160C30, RIPEMD160S37);
103   RIPEMD160_STEP (RIPEMD160_Io, e1, a1, b1, c1, d1, w[13], RIPEMD160C30, RIPEMD160S38);
104   RIPEMD160_STEP (RIPEMD160_Io, d1, e1, a1, b1, c1, w[ 3], RIPEMD160C30, RIPEMD160S39);
105   RIPEMD160_STEP (RIPEMD160_Io, c1, d1, e1, a1, b1, w[ 7], RIPEMD160C30, RIPEMD160S3A);
106   RIPEMD160_STEP (RIPEMD160_Io, b1, c1, d1, e1, a1, w[15], RIPEMD160C30, RIPEMD160S3B);
107   RIPEMD160_STEP (RIPEMD160_Io, a1, b1, c1, d1, e1, w[14], RIPEMD160C30, RIPEMD160S3C);
108   RIPEMD160_STEP (RIPEMD160_Io, e1, a1, b1, c1, d1, w[ 5], RIPEMD160C30, RIPEMD160S3D);
109   RIPEMD160_STEP (RIPEMD160_Io, d1, e1, a1, b1, c1, w[ 6], RIPEMD160C30, RIPEMD160S3E);
110   RIPEMD160_STEP (RIPEMD160_Io, c1, d1, e1, a1, b1, w[ 2], RIPEMD160C30, RIPEMD160S3F);
111
112   RIPEMD160_STEP (RIPEMD160_J , b1, c1, d1, e1, a1, w[ 4], RIPEMD160C40, RIPEMD160S40);
113   RIPEMD160_STEP (RIPEMD160_J , a1, b1, c1, d1, e1, w[ 0], RIPEMD160C40, RIPEMD160S41);
114   RIPEMD160_STEP (RIPEMD160_J , e1, a1, b1, c1, d1, w[ 5], RIPEMD160C40, RIPEMD160S42);
115   RIPEMD160_STEP (RIPEMD160_J , d1, e1, a1, b1, c1, w[ 9], RIPEMD160C40, RIPEMD160S43);
116   RIPEMD160_STEP (RIPEMD160_J , c1, d1, e1, a1, b1, w[ 7], RIPEMD160C40, RIPEMD160S44);
117   RIPEMD160_STEP (RIPEMD160_J , b1, c1, d1, e1, a1, w[12], RIPEMD160C40, RIPEMD160S45);
118   RIPEMD160_STEP (RIPEMD160_J , a1, b1, c1, d1, e1, w[ 2], RIPEMD160C40, RIPEMD160S46);
119   RIPEMD160_STEP (RIPEMD160_J , e1, a1, b1, c1, d1, w[10], RIPEMD160C40, RIPEMD160S47);
120   RIPEMD160_STEP (RIPEMD160_J , d1, e1, a1, b1, c1, w[14], RIPEMD160C40, RIPEMD160S48);
121   RIPEMD160_STEP (RIPEMD160_J , c1, d1, e1, a1, b1, w[ 1], RIPEMD160C40, RIPEMD160S49);
122   RIPEMD160_STEP (RIPEMD160_J , b1, c1, d1, e1, a1, w[ 3], RIPEMD160C40, RIPEMD160S4A);
123   RIPEMD160_STEP (RIPEMD160_J , a1, b1, c1, d1, e1, w[ 8], RIPEMD160C40, RIPEMD160S4B);
124   RIPEMD160_STEP (RIPEMD160_J , e1, a1, b1, c1, d1, w[11], RIPEMD160C40, RIPEMD160S4C);
125   RIPEMD160_STEP (RIPEMD160_J , d1, e1, a1, b1, c1, w[ 6], RIPEMD160C40, RIPEMD160S4D);
126   RIPEMD160_STEP (RIPEMD160_J , c1, d1, e1, a1, b1, w[15], RIPEMD160C40, RIPEMD160S4E);
127   RIPEMD160_STEP (RIPEMD160_J , b1, c1, d1, e1, a1, w[13], RIPEMD160C40, RIPEMD160S4F);
128
129   u32x a2 = dgst[0];
130   u32x b2 = dgst[1];
131   u32x c2 = dgst[2];
132   u32x d2 = dgst[3];
133   u32x e2 = dgst[4];
134
135   RIPEMD160_STEP_WORKAROUND_BUG (RIPEMD160_J , a2, b2, c2, d2, e2, w[ 5], RIPEMD160C50, RIPEMD160S50);
136   RIPEMD160_STEP (RIPEMD160_J , e2, a2, b2, c2, d2, w[14], RIPEMD160C50, RIPEMD160S51);
137   RIPEMD160_STEP (RIPEMD160_J , d2, e2, a2, b2, c2, w[ 7], RIPEMD160C50, RIPEMD160S52);
138   RIPEMD160_STEP (RIPEMD160_J , c2, d2, e2, a2, b2, w[ 0], RIPEMD160C50, RIPEMD160S53);
139   RIPEMD160_STEP (RIPEMD160_J , b2, c2, d2, e2, a2, w[ 9], RIPEMD160C50, RIPEMD160S54);
140   RIPEMD160_STEP (RIPEMD160_J , a2, b2, c2, d2, e2, w[ 2], RIPEMD160C50, RIPEMD160S55);
141   RIPEMD160_STEP (RIPEMD160_J , e2, a2, b2, c2, d2, w[11], RIPEMD160C50, RIPEMD160S56);
142   RIPEMD160_STEP (RIPEMD160_J , d2, e2, a2, b2, c2, w[ 4], RIPEMD160C50, RIPEMD160S57);
143   RIPEMD160_STEP (RIPEMD160_J , c2, d2, e2, a2, b2, w[13], RIPEMD160C50, RIPEMD160S58);
144   RIPEMD160_STEP (RIPEMD160_J , b2, c2, d2, e2, a2, w[ 6], RIPEMD160C50, RIPEMD160S59);
145   RIPEMD160_STEP (RIPEMD160_J , a2, b2, c2, d2, e2, w[15], RIPEMD160C50, RIPEMD160S5A);
146   RIPEMD160_STEP (RIPEMD160_J , e2, a2, b2, c2, d2, w[ 8], RIPEMD160C50, RIPEMD160S5B);
147   RIPEMD160_STEP (RIPEMD160_J , d2, e2, a2, b2, c2, w[ 1], RIPEMD160C50, RIPEMD160S5C);
148   RIPEMD160_STEP (RIPEMD160_J , c2, d2, e2, a2, b2, w[10], RIPEMD160C50, RIPEMD160S5D);
149   RIPEMD160_STEP (RIPEMD160_J , b2, c2, d2, e2, a2, w[ 3], RIPEMD160C50, RIPEMD160S5E);
150   RIPEMD160_STEP (RIPEMD160_J , a2, b2, c2, d2, e2, w[12], RIPEMD160C50, RIPEMD160S5F);
151
152   RIPEMD160_STEP (RIPEMD160_Io, e2, a2, b2, c2, d2, w[ 6], RIPEMD160C60, RIPEMD160S60);
153   RIPEMD160_STEP (RIPEMD160_Io, d2, e2, a2, b2, c2, w[11], RIPEMD160C60, RIPEMD160S61);
154   RIPEMD160_STEP (RIPEMD160_Io, c2, d2, e2, a2, b2, w[ 3], RIPEMD160C60, RIPEMD160S62);
155   RIPEMD160_STEP (RIPEMD160_Io, b2, c2, d2, e2, a2, w[ 7], RIPEMD160C60, RIPEMD160S63);
156   RIPEMD160_STEP (RIPEMD160_Io, a2, b2, c2, d2, e2, w[ 0], RIPEMD160C60, RIPEMD160S64);
157   RIPEMD160_STEP (RIPEMD160_Io, e2, a2, b2, c2, d2, w[13], RIPEMD160C60, RIPEMD160S65);
158   RIPEMD160_STEP (RIPEMD160_Io, d2, e2, a2, b2, c2, w[ 5], RIPEMD160C60, RIPEMD160S66);
159   RIPEMD160_STEP (RIPEMD160_Io, c2, d2, e2, a2, b2, w[10], RIPEMD160C60, RIPEMD160S67);
160   RIPEMD160_STEP (RIPEMD160_Io, b2, c2, d2, e2, a2, w[14], RIPEMD160C60, RIPEMD160S68);
161   RIPEMD160_STEP (RIPEMD160_Io, a2, b2, c2, d2, e2, w[15], RIPEMD160C60, RIPEMD160S69);
162   RIPEMD160_STEP (RIPEMD160_Io, e2, a2, b2, c2, d2, w[ 8], RIPEMD160C60, RIPEMD160S6A);
163   RIPEMD160_STEP (RIPEMD160_Io, d2, e2, a2, b2, c2, w[12], RIPEMD160C60, RIPEMD160S6B);
164   RIPEMD160_STEP (RIPEMD160_Io, c2, d2, e2, a2, b2, w[ 4], RIPEMD160C60, RIPEMD160S6C);
165   RIPEMD160_STEP (RIPEMD160_Io, b2, c2, d2, e2, a2, w[ 9], RIPEMD160C60, RIPEMD160S6D);
166   RIPEMD160_STEP (RIPEMD160_Io, a2, b2, c2, d2, e2, w[ 1], RIPEMD160C60, RIPEMD160S6E);
167   RIPEMD160_STEP (RIPEMD160_Io, e2, a2, b2, c2, d2, w[ 2], RIPEMD160C60, RIPEMD160S6F);
168
169   RIPEMD160_STEP (RIPEMD160_H , d2, e2, a2, b2, c2, w[15], RIPEMD160C70, RIPEMD160S70);
170   RIPEMD160_STEP (RIPEMD160_H , c2, d2, e2, a2, b2, w[ 5], RIPEMD160C70, RIPEMD160S71);
171   RIPEMD160_STEP (RIPEMD160_H , b2, c2, d2, e2, a2, w[ 1], RIPEMD160C70, RIPEMD160S72);
172   RIPEMD160_STEP (RIPEMD160_H , a2, b2, c2, d2, e2, w[ 3], RIPEMD160C70, RIPEMD160S73);
173   RIPEMD160_STEP (RIPEMD160_H , e2, a2, b2, c2, d2, w[ 7], RIPEMD160C70, RIPEMD160S74);
174   RIPEMD160_STEP (RIPEMD160_H , d2, e2, a2, b2, c2, w[14], RIPEMD160C70, RIPEMD160S75);
175   RIPEMD160_STEP (RIPEMD160_H , c2, d2, e2, a2, b2, w[ 6], RIPEMD160C70, RIPEMD160S76);
176   RIPEMD160_STEP (RIPEMD160_H , b2, c2, d2, e2, a2, w[ 9], RIPEMD160C70, RIPEMD160S77);
177   RIPEMD160_STEP (RIPEMD160_H , a2, b2, c2, d2, e2, w[11], RIPEMD160C70, RIPEMD160S78);
178   RIPEMD160_STEP (RIPEMD160_H , e2, a2, b2, c2, d2, w[ 8], RIPEMD160C70, RIPEMD160S79);
179   RIPEMD160_STEP (RIPEMD160_H , d2, e2, a2, b2, c2, w[12], RIPEMD160C70, RIPEMD160S7A);
180   RIPEMD160_STEP (RIPEMD160_H , c2, d2, e2, a2, b2, w[ 2], RIPEMD160C70, RIPEMD160S7B);
181   RIPEMD160_STEP (RIPEMD160_H , b2, c2, d2, e2, a2, w[10], RIPEMD160C70, RIPEMD160S7C);
182   RIPEMD160_STEP (RIPEMD160_H , a2, b2, c2, d2, e2, w[ 0], RIPEMD160C70, RIPEMD160S7D);
183   RIPEMD160_STEP (RIPEMD160_H , e2, a2, b2, c2, d2, w[ 4], RIPEMD160C70, RIPEMD160S7E);
184   RIPEMD160_STEP (RIPEMD160_H , d2, e2, a2, b2, c2, w[13], RIPEMD160C70, RIPEMD160S7F);
185
186   RIPEMD160_STEP (RIPEMD160_Go, c2, d2, e2, a2, b2, w[ 8], RIPEMD160C80, RIPEMD160S80);
187   RIPEMD160_STEP (RIPEMD160_Go, b2, c2, d2, e2, a2, w[ 6], RIPEMD160C80, RIPEMD160S81);
188   RIPEMD160_STEP (RIPEMD160_Go, a2, b2, c2, d2, e2, w[ 4], RIPEMD160C80, RIPEMD160S82);
189   RIPEMD160_STEP (RIPEMD160_Go, e2, a2, b2, c2, d2, w[ 1], RIPEMD160C80, RIPEMD160S83);
190   RIPEMD160_STEP (RIPEMD160_Go, d2, e2, a2, b2, c2, w[ 3], RIPEMD160C80, RIPEMD160S84);
191   RIPEMD160_STEP (RIPEMD160_Go, c2, d2, e2, a2, b2, w[11], RIPEMD160C80, RIPEMD160S85);
192   RIPEMD160_STEP (RIPEMD160_Go, b2, c2, d2, e2, a2, w[15], RIPEMD160C80, RIPEMD160S86);
193   RIPEMD160_STEP (RIPEMD160_Go, a2, b2, c2, d2, e2, w[ 0], RIPEMD160C80, RIPEMD160S87);
194   RIPEMD160_STEP (RIPEMD160_Go, e2, a2, b2, c2, d2, w[ 5], RIPEMD160C80, RIPEMD160S88);
195   RIPEMD160_STEP (RIPEMD160_Go, d2, e2, a2, b2, c2, w[12], RIPEMD160C80, RIPEMD160S89);
196   RIPEMD160_STEP (RIPEMD160_Go, c2, d2, e2, a2, b2, w[ 2], RIPEMD160C80, RIPEMD160S8A);
197   RIPEMD160_STEP (RIPEMD160_Go, b2, c2, d2, e2, a2, w[13], RIPEMD160C80, RIPEMD160S8B);
198   RIPEMD160_STEP (RIPEMD160_Go, a2, b2, c2, d2, e2, w[ 9], RIPEMD160C80, RIPEMD160S8C);
199   RIPEMD160_STEP (RIPEMD160_Go, e2, a2, b2, c2, d2, w[ 7], RIPEMD160C80, RIPEMD160S8D);
200   RIPEMD160_STEP (RIPEMD160_Go, d2, e2, a2, b2, c2, w[10], RIPEMD160C80, RIPEMD160S8E);
201   RIPEMD160_STEP (RIPEMD160_Go, c2, d2, e2, a2, b2, w[14], RIPEMD160C80, RIPEMD160S8F);
202
203   RIPEMD160_STEP (RIPEMD160_F , b2, c2, d2, e2, a2, w[12], RIPEMD160C90, RIPEMD160S90);
204   RIPEMD160_STEP (RIPEMD160_F , a2, b2, c2, d2, e2, w[15], RIPEMD160C90, RIPEMD160S91);
205   RIPEMD160_STEP (RIPEMD160_F , e2, a2, b2, c2, d2, w[10], RIPEMD160C90, RIPEMD160S92);
206   RIPEMD160_STEP (RIPEMD160_F , d2, e2, a2, b2, c2, w[ 4], RIPEMD160C90, RIPEMD160S93);
207   RIPEMD160_STEP (RIPEMD160_F , c2, d2, e2, a2, b2, w[ 1], RIPEMD160C90, RIPEMD160S94);
208   RIPEMD160_STEP (RIPEMD160_F , b2, c2, d2, e2, a2, w[ 5], RIPEMD160C90, RIPEMD160S95);
209   RIPEMD160_STEP (RIPEMD160_F , a2, b2, c2, d2, e2, w[ 8], RIPEMD160C90, RIPEMD160S96);
210   RIPEMD160_STEP (RIPEMD160_F , e2, a2, b2, c2, d2, w[ 7], RIPEMD160C90, RIPEMD160S97);
211   RIPEMD160_STEP (RIPEMD160_F , d2, e2, a2, b2, c2, w[ 6], RIPEMD160C90, RIPEMD160S98);
212   RIPEMD160_STEP (RIPEMD160_F , c2, d2, e2, a2, b2, w[ 2], RIPEMD160C90, RIPEMD160S99);
213   RIPEMD160_STEP (RIPEMD160_F , b2, c2, d2, e2, a2, w[13], RIPEMD160C90, RIPEMD160S9A);
214   RIPEMD160_STEP (RIPEMD160_F , a2, b2, c2, d2, e2, w[14], RIPEMD160C90, RIPEMD160S9B);
215   RIPEMD160_STEP (RIPEMD160_F , e2, a2, b2, c2, d2, w[ 0], RIPEMD160C90, RIPEMD160S9C);
216   RIPEMD160_STEP (RIPEMD160_F , d2, e2, a2, b2, c2, w[ 3], RIPEMD160C90, RIPEMD160S9D);
217   RIPEMD160_STEP (RIPEMD160_F , c2, d2, e2, a2, b2, w[ 9], RIPEMD160C90, RIPEMD160S9E);
218   RIPEMD160_STEP (RIPEMD160_F , b2, c2, d2, e2, a2, w[11], RIPEMD160C90, RIPEMD160S9F);
219
220   const u32x a = dgst[1] + c1 + d2;
221   const u32x b = dgst[2] + d1 + e2;
222   const u32x c = dgst[3] + e1 + a2;
223   const u32x d = dgst[4] + a1 + b2;
224   const u32x e = dgst[0] + b1 + c2;
225
226   dgst[0] = a;
227   dgst[1] = b;
228   dgst[2] = c;
229   dgst[3] = d;
230   dgst[4] = e;
231 }
232
233 static void hmac_run2 (const u32x w1[16], const u32x w2[16], const u32x ipad[5], const u32x opad[5], u32x dgst[5])
234 {
235   dgst[0] = ipad[0];
236   dgst[1] = ipad[1];
237   dgst[2] = ipad[2];
238   dgst[3] = ipad[3];
239   dgst[4] = ipad[4];
240
241   ripemd160_transform (w1, dgst);
242   ripemd160_transform (w2, dgst);
243
244   u32x w[16];
245
246   w[ 0] = dgst[0];
247   w[ 1] = dgst[1];
248   w[ 2] = dgst[2];
249   w[ 3] = dgst[3];
250   w[ 4] = dgst[4];
251   w[ 5] = 0x80;
252   w[ 6] = 0;
253   w[ 7] = 0;
254   w[ 8] = 0;
255   w[ 9] = 0;
256   w[10] = 0;
257   w[11] = 0;
258   w[12] = 0;
259   w[13] = 0;
260   w[14] = (64 + 20) * 8;
261   w[15] = 0;
262
263   dgst[0] = opad[0];
264   dgst[1] = opad[1];
265   dgst[2] = opad[2];
266   dgst[3] = opad[3];
267   dgst[4] = opad[4];
268
269   ripemd160_transform (w, dgst);
270 }
271
272 static void hmac_run (u32x w[16], const u32x ipad[5], const u32x opad[5], u32x dgst[5])
273 {
274   dgst[0] = ipad[0];
275   dgst[1] = ipad[1];
276   dgst[2] = ipad[2];
277   dgst[3] = ipad[3];
278   dgst[4] = ipad[4];
279
280   ripemd160_transform (w, dgst);
281
282   w[ 0] = dgst[0];
283   w[ 1] = dgst[1];
284   w[ 2] = dgst[2];
285   w[ 3] = dgst[3];
286   w[ 4] = dgst[4];
287   w[ 5] = 0x80;
288   w[ 6] = 0;
289   w[ 7] = 0;
290   w[ 8] = 0;
291   w[ 9] = 0;
292   w[10] = 0;
293   w[11] = 0;
294   w[12] = 0;
295   w[13] = 0;
296   w[14] = (64 + 20) * 8;
297   w[15] = 0;
298
299   dgst[0] = opad[0];
300   dgst[1] = opad[1];
301   dgst[2] = opad[2];
302   dgst[3] = opad[3];
303   dgst[4] = opad[4];
304
305   ripemd160_transform (w, dgst);
306 }
307
308 static void hmac_init (u32x w[16], u32x ipad[5], u32x opad[5])
309 {
310   w[ 0] ^= 0x36363636;
311   w[ 1] ^= 0x36363636;
312   w[ 2] ^= 0x36363636;
313   w[ 3] ^= 0x36363636;
314   w[ 4] ^= 0x36363636;
315   w[ 5] ^= 0x36363636;
316   w[ 6] ^= 0x36363636;
317   w[ 7] ^= 0x36363636;
318   w[ 8] ^= 0x36363636;
319   w[ 9] ^= 0x36363636;
320   w[10] ^= 0x36363636;
321   w[11] ^= 0x36363636;
322   w[12] ^= 0x36363636;
323   w[13] ^= 0x36363636;
324   w[14] ^= 0x36363636;
325   w[15] ^= 0x36363636;
326
327   ipad[0] = RIPEMD160M_A;
328   ipad[1] = RIPEMD160M_B;
329   ipad[2] = RIPEMD160M_C;
330   ipad[3] = RIPEMD160M_D;
331   ipad[4] = RIPEMD160M_E;
332
333   ripemd160_transform (w, ipad);
334
335   w[ 0] ^= 0x6a6a6a6a;
336   w[ 1] ^= 0x6a6a6a6a;
337   w[ 2] ^= 0x6a6a6a6a;
338   w[ 3] ^= 0x6a6a6a6a;
339   w[ 4] ^= 0x6a6a6a6a;
340   w[ 5] ^= 0x6a6a6a6a;
341   w[ 6] ^= 0x6a6a6a6a;
342   w[ 7] ^= 0x6a6a6a6a;
343   w[ 8] ^= 0x6a6a6a6a;
344   w[ 9] ^= 0x6a6a6a6a;
345   w[10] ^= 0x6a6a6a6a;
346   w[11] ^= 0x6a6a6a6a;
347   w[12] ^= 0x6a6a6a6a;
348   w[13] ^= 0x6a6a6a6a;
349   w[14] ^= 0x6a6a6a6a;
350   w[15] ^= 0x6a6a6a6a;
351
352   opad[0] = RIPEMD160M_A;
353   opad[1] = RIPEMD160M_B;
354   opad[2] = RIPEMD160M_C;
355   opad[3] = RIPEMD160M_D;
356   opad[4] = RIPEMD160M_E;
357
358   ripemd160_transform (w, opad);
359 }
360
361 static u32 u8add (const u32 a, const u32 b)
362 {
363   const u32 a1 = (a >>  0) & 0xff;
364   const u32 a2 = (a >>  8) & 0xff;
365   const u32 a3 = (a >> 16) & 0xff;
366   const u32 a4 = (a >> 24) & 0xff;
367
368   const u32 b1 = (b >>  0) & 0xff;
369   const u32 b2 = (b >>  8) & 0xff;
370   const u32 b3 = (b >> 16) & 0xff;
371   const u32 b4 = (b >> 24) & 0xff;
372
373   const u32 r1 = (a1 + b1) & 0xff;
374   const u32 r2 = (a2 + b2) & 0xff;
375   const u32 r3 = (a3 + b3) & 0xff;
376   const u32 r4 = (a4 + b4) & 0xff;
377
378   const u32 r = r1 <<  0
379                | r2 <<  8
380                | r3 << 16
381                | r4 << 24;
382
383   return r;
384 }
385
386 __kernel void __attribute__((reqd_work_group_size (64, 1, 1))) m06211_init (__global pw_t *pws, __global gpu_rule_t *rules_buf, __global comb_t *combs_buf, __global bf_t *bfs_buf, __global tc_tmp_t *tmps, __global void *hooks, __global u32 *bitmaps_buf_s1_a, __global u32 *bitmaps_buf_s1_b, __global u32 *bitmaps_buf_s1_c, __global u32 *bitmaps_buf_s1_d, __global u32 *bitmaps_buf_s2_a, __global u32 *bitmaps_buf_s2_b, __global u32 *bitmaps_buf_s2_c, __global u32 *bitmaps_buf_s2_d, __global plain_t *plains_buf, __global digest_t *digests_buf, __global u32 *hashes_shown, __global salt_t *salt_bufs, __global tc_t *esalt_bufs, __global u32 *d_return_buf, __global u32 *d_scryptV_buf, const u32 bitmap_mask, const u32 bitmap_shift1, const u32 bitmap_shift2, const u32 salt_pos, const u32 loop_pos, const u32 loop_cnt, const u32 rules_cnt, const u32 digests_cnt, const u32 digests_offset, const u32 combs_mode, const u32 gid_max)
387 {
388   /**
389    * base
390    */
391
392   const u32 gid = get_global_id (0);
393
394   if (gid >= gid_max) return;
395
396   u32x w0[4];
397
398   w0[0] = pws[gid].i[ 0];
399   w0[1] = pws[gid].i[ 1];
400   w0[2] = pws[gid].i[ 2];
401   w0[3] = pws[gid].i[ 3];
402
403   u32x w1[4];
404
405   w1[0] = pws[gid].i[ 4];
406   w1[1] = pws[gid].i[ 5];
407   w1[2] = pws[gid].i[ 6];
408   w1[3] = pws[gid].i[ 7];
409
410   u32x w2[4];
411
412   w2[0] = pws[gid].i[ 8];
413   w2[1] = pws[gid].i[ 9];
414   w2[2] = pws[gid].i[10];
415   w2[3] = pws[gid].i[11];
416
417   u32x w3[4];
418
419   w3[0] = pws[gid].i[12];
420   w3[1] = pws[gid].i[13];
421   w3[2] = pws[gid].i[14];
422   w3[3] = pws[gid].i[15];
423
424   /**
425    * keyfile
426    */
427
428   w0[0] = u8add (w0[0], esalt_bufs[salt_pos].keyfile_buf[ 0]);
429   w0[1] = u8add (w0[1], esalt_bufs[salt_pos].keyfile_buf[ 1]);
430   w0[2] = u8add (w0[2], esalt_bufs[salt_pos].keyfile_buf[ 2]);
431   w0[3] = u8add (w0[3], esalt_bufs[salt_pos].keyfile_buf[ 3]);
432   w1[0] = u8add (w1[0], esalt_bufs[salt_pos].keyfile_buf[ 4]);
433   w1[1] = u8add (w1[1], esalt_bufs[salt_pos].keyfile_buf[ 5]);
434   w1[2] = u8add (w1[2], esalt_bufs[salt_pos].keyfile_buf[ 6]);
435   w1[3] = u8add (w1[3], esalt_bufs[salt_pos].keyfile_buf[ 7]);
436   w2[0] = u8add (w2[0], esalt_bufs[salt_pos].keyfile_buf[ 8]);
437   w2[1] = u8add (w2[1], esalt_bufs[salt_pos].keyfile_buf[ 9]);
438   w2[2] = u8add (w2[2], esalt_bufs[salt_pos].keyfile_buf[10]);
439   w2[3] = u8add (w2[3], esalt_bufs[salt_pos].keyfile_buf[11]);
440   w3[0] = u8add (w3[0], esalt_bufs[salt_pos].keyfile_buf[12]);
441   w3[1] = u8add (w3[1], esalt_bufs[salt_pos].keyfile_buf[13]);
442   w3[2] = u8add (w3[2], esalt_bufs[salt_pos].keyfile_buf[14]);
443   w3[3] = u8add (w3[3], esalt_bufs[salt_pos].keyfile_buf[15]);
444
445   /**
446    * salt
447    */
448
449   u32x salt_buf1[16];
450
451   salt_buf1[ 0] = esalt_bufs[salt_pos].salt_buf[ 0];
452   salt_buf1[ 1] = esalt_bufs[salt_pos].salt_buf[ 1];
453   salt_buf1[ 2] = esalt_bufs[salt_pos].salt_buf[ 2];
454   salt_buf1[ 3] = esalt_bufs[salt_pos].salt_buf[ 3];
455   salt_buf1[ 4] = esalt_bufs[salt_pos].salt_buf[ 4];
456   salt_buf1[ 5] = esalt_bufs[salt_pos].salt_buf[ 5];
457   salt_buf1[ 6] = esalt_bufs[salt_pos].salt_buf[ 6];
458   salt_buf1[ 7] = esalt_bufs[salt_pos].salt_buf[ 7];
459   salt_buf1[ 8] = esalt_bufs[salt_pos].salt_buf[ 8];
460   salt_buf1[ 9] = esalt_bufs[salt_pos].salt_buf[ 9];
461   salt_buf1[10] = esalt_bufs[salt_pos].salt_buf[10];
462   salt_buf1[11] = esalt_bufs[salt_pos].salt_buf[11];
463   salt_buf1[12] = esalt_bufs[salt_pos].salt_buf[12];
464   salt_buf1[13] = esalt_bufs[salt_pos].salt_buf[13];
465   salt_buf1[14] = esalt_bufs[salt_pos].salt_buf[14];
466   salt_buf1[15] = esalt_bufs[salt_pos].salt_buf[15];
467
468   u32x salt_buf2[16];
469
470   salt_buf2[ 0] = 0;
471   salt_buf2[ 1] = 0x80;
472   salt_buf2[ 2] = 0;
473   salt_buf2[ 3] = 0;
474   salt_buf2[ 4] = 0;
475   salt_buf2[ 5] = 0;
476   salt_buf2[ 6] = 0;
477   salt_buf2[ 7] = 0;
478   salt_buf2[ 8] = 0;
479   salt_buf2[ 9] = 0;
480   salt_buf2[10] = 0;
481   salt_buf2[11] = 0;
482   salt_buf2[12] = 0;
483   salt_buf2[13] = 0;
484   salt_buf2[14] = (64 + 64 + 4) * 8;
485   salt_buf2[15] = 0;
486
487   const u32 truecrypt_mdlen = salt_bufs[0].truecrypt_mdlen;
488
489   u32x w[16];
490
491   w[ 0] = w0[0];
492   w[ 1] = w0[1];
493   w[ 2] = w0[2];
494   w[ 3] = w0[3];
495   w[ 4] = w1[0];
496   w[ 5] = w1[1];
497   w[ 6] = w1[2];
498   w[ 7] = w1[3];
499   w[ 8] = w2[0];
500   w[ 9] = w2[1];
501   w[10] = w2[2];
502   w[11] = w2[3];
503   w[12] = w3[0];
504   w[13] = w3[1];
505   w[14] = w3[2];
506   w[15] = w3[3];
507
508   u32x ipad[5];
509   u32x opad[5];
510
511   hmac_init (w, ipad, opad);
512
513   tmps[gid].ipad[0] = ipad[0];
514   tmps[gid].ipad[1] = ipad[1];
515   tmps[gid].ipad[2] = ipad[2];
516   tmps[gid].ipad[3] = ipad[3];
517   tmps[gid].ipad[4] = ipad[4];
518
519   tmps[gid].opad[0] = opad[0];
520   tmps[gid].opad[1] = opad[1];
521   tmps[gid].opad[2] = opad[2];
522   tmps[gid].opad[3] = opad[3];
523   tmps[gid].opad[4] = opad[4];
524
525   for (u32 i = 0, j = 1; i < (truecrypt_mdlen / 8 / 4); i += 5, j += 1)
526   {
527     salt_buf2[0] = swap_workaround (j);
528
529     u32x dgst[5];
530
531     hmac_run2 (salt_buf1, salt_buf2, ipad, opad, dgst);
532
533     tmps[gid].dgst[i + 0] = dgst[0];
534     tmps[gid].dgst[i + 1] = dgst[1];
535     tmps[gid].dgst[i + 2] = dgst[2];
536     tmps[gid].dgst[i + 3] = dgst[3];
537     tmps[gid].dgst[i + 4] = dgst[4];
538
539     tmps[gid].out[i + 0] = dgst[0];
540     tmps[gid].out[i + 1] = dgst[1];
541     tmps[gid].out[i + 2] = dgst[2];
542     tmps[gid].out[i + 3] = dgst[3];
543     tmps[gid].out[i + 4] = dgst[4];
544   }
545 }
546
547 __kernel void __attribute__((reqd_work_group_size (64, 1, 1))) m06211_loop (__global pw_t *pws, __global gpu_rule_t *rules_buf, __global comb_t *combs_buf, __global bf_t *bfs_buf, __global tc_tmp_t *tmps, __global void *hooks, __global u32 *bitmaps_buf_s1_a, __global u32 *bitmaps_buf_s1_b, __global u32 *bitmaps_buf_s1_c, __global u32 *bitmaps_buf_s1_d, __global u32 *bitmaps_buf_s2_a, __global u32 *bitmaps_buf_s2_b, __global u32 *bitmaps_buf_s2_c, __global u32 *bitmaps_buf_s2_d, __global plain_t *plains_buf, __global digest_t *digests_buf, __global u32 *hashes_shown, __global salt_t *salt_bufs, __global tc_t *esalt_bufs, __global u32 *d_return_buf, __global u32 *d_scryptV_buf, const u32 bitmap_mask, const u32 bitmap_shift1, const u32 bitmap_shift2, const u32 salt_pos, const u32 loop_pos, const u32 loop_cnt, const u32 rules_cnt, const u32 digests_cnt, const u32 digests_offset, const u32 combs_mode, const u32 gid_max)
548 {
549   const u32 truecrypt_mdlen = salt_bufs[0].truecrypt_mdlen;
550
551   const u32 gid = get_global_id (0);
552
553   if (gid >= gid_max) return;
554
555   u32x ipad[5];
556   u32x opad[5];
557
558   ipad[0] = tmps[gid].ipad[0];
559   ipad[1] = tmps[gid].ipad[1];
560   ipad[2] = tmps[gid].ipad[2];
561   ipad[3] = tmps[gid].ipad[3];
562   ipad[4] = tmps[gid].ipad[4];
563
564   opad[0] = tmps[gid].opad[0];
565   opad[1] = tmps[gid].opad[1];
566   opad[2] = tmps[gid].opad[2];
567   opad[3] = tmps[gid].opad[3];
568   opad[4] = tmps[gid].opad[4];
569
570   for (u32 i = 0; i < (truecrypt_mdlen / 8 / 4); i += 5)
571   {
572     u32x dgst[5];
573     u32x out[5];
574
575     dgst[0] = tmps[gid].dgst[i + 0];
576     dgst[1] = tmps[gid].dgst[i + 1];
577     dgst[2] = tmps[gid].dgst[i + 2];
578     dgst[3] = tmps[gid].dgst[i + 3];
579     dgst[4] = tmps[gid].dgst[i + 4];
580
581     out[0] = tmps[gid].out[i + 0];
582     out[1] = tmps[gid].out[i + 1];
583     out[2] = tmps[gid].out[i + 2];
584     out[3] = tmps[gid].out[i + 3];
585     out[4] = tmps[gid].out[i + 4];
586
587     for (u32 j = 0; j < loop_cnt; j++)
588     {
589       u32x w[16];
590
591       w[ 0] = dgst[0];
592       w[ 1] = dgst[1];
593       w[ 2] = dgst[2];
594       w[ 3] = dgst[3];
595       w[ 4] = dgst[4];
596       w[ 5] = 0x80;
597       w[ 6] = 0;
598       w[ 7] = 0;
599       w[ 8] = 0;
600       w[ 9] = 0;
601       w[10] = 0;
602       w[11] = 0;
603       w[12] = 0;
604       w[13] = 0;
605       w[14] = (64 + 20) * 8;
606       w[15] = 0;
607
608       hmac_run (w, ipad, opad, dgst);
609
610       out[0] ^= dgst[0];
611       out[1] ^= dgst[1];
612       out[2] ^= dgst[2];
613       out[3] ^= dgst[3];
614       out[4] ^= dgst[4];
615     }
616
617     tmps[gid].dgst[i + 0] = dgst[0];
618     tmps[gid].dgst[i + 1] = dgst[1];
619     tmps[gid].dgst[i + 2] = dgst[2];
620     tmps[gid].dgst[i + 3] = dgst[3];
621     tmps[gid].dgst[i + 4] = dgst[4];
622
623     tmps[gid].out[i + 0] = out[0];
624     tmps[gid].out[i + 1] = out[1];
625     tmps[gid].out[i + 2] = out[2];
626     tmps[gid].out[i + 3] = out[3];
627     tmps[gid].out[i + 4] = out[4];
628   }
629 }
630
631 __kernel void __attribute__((reqd_work_group_size (64, 1, 1))) m06211_comp (__global pw_t *pws, __global gpu_rule_t *rules_buf, __global comb_t *combs_buf, __global bf_t *bfs_buf, __global tc_tmp_t *tmps, __global void *hooks, __global u32 *bitmaps_buf_s1_a, __global u32 *bitmaps_buf_s1_b, __global u32 *bitmaps_buf_s1_c, __global u32 *bitmaps_buf_s1_d, __global u32 *bitmaps_buf_s2_a, __global u32 *bitmaps_buf_s2_b, __global u32 *bitmaps_buf_s2_c, __global u32 *bitmaps_buf_s2_d, __global plain_t *plains_buf, __global digest_t *digests_buf, __global u32 *hashes_shown, __global salt_t *salt_bufs, __global tc_t *esalt_bufs, __global u32 *d_return_buf, __global u32 *d_scryptV_buf, const u32 bitmap_mask, const u32 bitmap_shift1, const u32 bitmap_shift2, const u32 salt_pos, const u32 loop_pos, const u32 loop_cnt, const u32 rules_cnt, const u32 digests_cnt, const u32 digests_offset, const u32 combs_mode, const u32 gid_max)
632 {
633   /**
634    * base
635    */
636
637   const u32 gid = get_global_id (0);
638   const u32 lid = get_local_id (0);
639
640   if (gid >= gid_max) return;
641
642   u32 ukey1[8];
643
644   ukey1[0] = tmps[gid].out[ 0];
645   ukey1[1] = tmps[gid].out[ 1];
646   ukey1[2] = tmps[gid].out[ 2];
647   ukey1[3] = tmps[gid].out[ 3];
648   ukey1[4] = tmps[gid].out[ 4];
649   ukey1[5] = tmps[gid].out[ 5];
650   ukey1[6] = tmps[gid].out[ 6];
651   ukey1[7] = tmps[gid].out[ 7];
652
653   u32 ukey2[8];
654
655   ukey2[0] = tmps[gid].out[ 8];
656   ukey2[1] = tmps[gid].out[ 9];
657   ukey2[2] = tmps[gid].out[10];
658   ukey2[3] = tmps[gid].out[11];
659   ukey2[4] = tmps[gid].out[12];
660   ukey2[5] = tmps[gid].out[13];
661   ukey2[6] = tmps[gid].out[14];
662   ukey2[7] = tmps[gid].out[15];
663
664   u32 data[4];
665
666   data[0] = esalt_bufs[0].data_buf[0];
667   data[1] = esalt_bufs[0].data_buf[1];
668   data[2] = esalt_bufs[0].data_buf[2];
669   data[3] = esalt_bufs[0].data_buf[3];
670
671   u32 tmp[4];
672
673   {
674     tmp[0] = data[0];
675     tmp[1] = data[1];
676     tmp[2] = data[2];
677     tmp[3] = data[3];
678
679     aes256_decrypt_xts (ukey1, ukey2, tmp, tmp);
680
681     if (((tmp[0] == 0x45555254) && (tmp[3] == 0)) || ((tmp[0] == 0x45555254) && ((tmp[1] >> 16) <= 5)))
682     {
683       mark_hash_s0 (plains_buf, hashes_shown, 0, gid, 0);
684
685       d_return_buf[lid] = 1;
686     }
687   }
688
689   {
690     tmp[0] = data[0];
691     tmp[1] = data[1];
692     tmp[2] = data[2];
693     tmp[3] = data[3];
694
695     serpent256_decrypt_xts (ukey1, ukey2, tmp, tmp);
696
697     if (((tmp[0] == 0x45555254) && (tmp[3] == 0)) || ((tmp[0] == 0x45555254) && ((tmp[1] >> 16) <= 5)))
698     {
699       mark_hash_s0 (plains_buf, hashes_shown, 0, gid, 0);
700
701       d_return_buf[lid] = 1;
702     }
703   }
704
705   {
706     tmp[0] = data[0];
707     tmp[1] = data[1];
708     tmp[2] = data[2];
709     tmp[3] = data[3];
710
711     twofish256_decrypt_xts (ukey1, ukey2, tmp, tmp);
712
713     if (((tmp[0] == 0x45555254) && (tmp[3] == 0)) || ((tmp[0] == 0x45555254) && ((tmp[1] >> 16) <= 5)))
714     {
715       mark_hash_s0 (plains_buf, hashes_shown, 0, gid, 0);
716
717       d_return_buf[lid] = 1;
718     }
719   }
720 }