1/**
2 * Author......: see docs/credits.txt
3 * License.....: MIT
4 */
5
6//too much register pressure
7//#define NEW_SIMD_CODE
8
9#ifdef KERNEL_STATIC
10#include "inc_vendor.h"
11#include "inc_types.h"
12#include "inc_platform.cl"
13#include "inc_common.cl"
14#include "inc_simd.cl"
15#include "inc_hash_md4.cl"
16#include "inc_hash_md5.cl"
17#include "inc_cipher_rc4.cl"
18#endif
19
20typedef struct krb5tgs
21{
22  u32 account_info[512];
23  u32 checksum[4];
24  u32 edata2[5120];
25  u32 edata2_len;
26
27} krb5tgs_t;
28
29DECLSPEC void hmac_md5_pad (u32 *w0, u32 *w1, u32 *w2, u32 *w3, u32 *ipad, u32 *opad)
30{
31  w0[0] = w0[0] ^ 0x36363636;
32  w0[1] = w0[1] ^ 0x36363636;
33  w0[2] = w0[2] ^ 0x36363636;
34  w0[3] = w0[3] ^ 0x36363636;
35  w1[0] = w1[0] ^ 0x36363636;
36  w1[1] = w1[1] ^ 0x36363636;
37  w1[2] = w1[2] ^ 0x36363636;
38  w1[3] = w1[3] ^ 0x36363636;
39  w2[0] = w2[0] ^ 0x36363636;
40  w2[1] = w2[1] ^ 0x36363636;
41  w2[2] = w2[2] ^ 0x36363636;
42  w2[3] = w2[3] ^ 0x36363636;
43  w3[0] = w3[0] ^ 0x36363636;
44  w3[1] = w3[1] ^ 0x36363636;
45  w3[2] = w3[2] ^ 0x36363636;
46  w3[3] = w3[3] ^ 0x36363636;
47
48  ipad[0] = MD5M_A;
49  ipad[1] = MD5M_B;
50  ipad[2] = MD5M_C;
51  ipad[3] = MD5M_D;
52
53  md5_transform (w0, w1, w2, w3, ipad);
54
55  w0[0] = w0[0] ^ 0x6a6a6a6a;
56  w0[1] = w0[1] ^ 0x6a6a6a6a;
57  w0[2] = w0[2] ^ 0x6a6a6a6a;
58  w0[3] = w0[3] ^ 0x6a6a6a6a;
59  w1[0] = w1[0] ^ 0x6a6a6a6a;
60  w1[1] = w1[1] ^ 0x6a6a6a6a;
61  w1[2] = w1[2] ^ 0x6a6a6a6a;
62  w1[3] = w1[3] ^ 0x6a6a6a6a;
63  w2[0] = w2[0] ^ 0x6a6a6a6a;
64  w2[1] = w2[1] ^ 0x6a6a6a6a;
65  w2[2] = w2[2] ^ 0x6a6a6a6a;
66  w2[3] = w2[3] ^ 0x6a6a6a6a;
67  w3[0] = w3[0] ^ 0x6a6a6a6a;
68  w3[1] = w3[1] ^ 0x6a6a6a6a;
69  w3[2] = w3[2] ^ 0x6a6a6a6a;
70  w3[3] = w3[3] ^ 0x6a6a6a6a;
71
72  opad[0] = MD5M_A;
73  opad[1] = MD5M_B;
74  opad[2] = MD5M_C;
75  opad[3] = MD5M_D;
76
77  md5_transform (w0, w1, w2, w3, opad);
78}
79
80DECLSPEC void hmac_md5_run (u32 *w0, u32 *w1, u32 *w2, u32 *w3, u32 *ipad, u32 *opad, u32 *digest)
81{
82  digest[0] = ipad[0];
83  digest[1] = ipad[1];
84  digest[2] = ipad[2];
85  digest[3] = ipad[3];
86
87  md5_transform (w0, w1, w2, w3, digest);
88
89  w0[0] = digest[0];
90  w0[1] = digest[1];
91  w0[2] = digest[2];
92  w0[3] = digest[3];
93  w1[0] = 0x80;
94  w1[1] = 0;
95  w1[2] = 0;
96  w1[3] = 0;
97  w2[0] = 0;
98  w2[1] = 0;
99  w2[2] = 0;
100  w2[3] = 0;
101  w3[0] = 0;
102  w3[1] = 0;
103  w3[2] = (64 + 16) * 8;
104  w3[3] = 0;
105
106  digest[0] = opad[0];
107  digest[1] = opad[1];
108  digest[2] = opad[2];
109  digest[3] = opad[3];
110
111  md5_transform (w0, w1, w2, w3, digest);
112}
113
114DECLSPEC int decrypt_and_check (LOCAL_AS u32 *S, u32 *data, GLOBAL_AS const u32 *edata2, const u32 edata2_len, const u32 *K2, const u32 *checksum)
115{
116  rc4_init_128 (S, data);
117
118  u32 out0[4];
119  u32 out1[4];
120
121  u8 i = 0;
122  u8 j = 0;
123
124  /*
125    8 first bytes are nonce, then ASN1 structs (DER encoding: type-length-data)
126
127    if length >= 128 bytes:
128        length is on 2 bytes and type is \x63\x82 (encode_krb5_enc_tkt_part) and data is an ASN1 sequence \x30\x82
129    else:
130        length is on 1 byte and type is \x63\x81 and data is an ASN1 sequence \x30\x81
131
132    next headers follow the same ASN1 "type-length-data" scheme
133  */
134
135  j = rc4_next_16_global (S, i, j, edata2 + 0, out0); i += 16;
136
137  if (((out0[2] & 0xff00ffff) != 0x30008163) && ((out0[2] & 0x0000ffff) != 0x00008263)) return 0;
138
139  j = rc4_next_16_global (S, i, j, edata2 + 4, out1); i += 16;
140
141  if (((out1[0] & 0x00ffffff) != 0x00000503) && (out1[0] != 0x050307A0)) return 0;
142
143  rc4_init_128 (S, data);
144
145  i = 0;
146  j = 0;
147
148  // init hmac
149
150  u32 w0[4];
151  u32 w1[4];
152  u32 w2[4];
153  u32 w3[4];
154
155  w0[0] = K2[0];
156  w0[1] = K2[1];
157  w0[2] = K2[2];
158  w0[3] = K2[3];
159  w1[0] = 0;
160  w1[1] = 0;
161  w1[2] = 0;
162  w1[3] = 0;
163  w2[0] = 0;
164  w2[1] = 0;
165  w2[2] = 0;
166  w2[3] = 0;
167  w3[0] = 0;
168  w3[1] = 0;
169  w3[2] = 0;
170  w3[3] = 0;
171
172  u32 ipad[4];
173  u32 opad[4];
174
175  hmac_md5_pad (w0, w1, w2, w3, ipad, opad);
176
177  int edata2_left;
178
179  for (edata2_left = edata2_len; edata2_left >= 64; edata2_left -= 64)
180  {
181    j = rc4_next_16_global (S, i, j, edata2, w0); i += 16; edata2 += 4;
182    j = rc4_next_16_global (S, i, j, edata2, w1); i += 16; edata2 += 4;
183    j = rc4_next_16_global (S, i, j, edata2, w2); i += 16; edata2 += 4;
184    j = rc4_next_16_global (S, i, j, edata2, w3); i += 16; edata2 += 4;
185
186    md5_transform (w0, w1, w2, w3, ipad);
187  }
188
189  w0[0] = 0;
190  w0[1] = 0;
191  w0[2] = 0;
192  w0[3] = 0;
193  w1[0] = 0;
194  w1[1] = 0;
195  w1[2] = 0;
196  w1[3] = 0;
197  w2[0] = 0;
198  w2[1] = 0;
199  w2[2] = 0;
200  w2[3] = 0;
201  w3[0] = 0;
202  w3[1] = 0;
203  w3[2] = 0;
204  w3[3] = 0;
205
206  if (edata2_left < 16)
207  {
208    j = rc4_next_16_global (S, i, j, edata2, w0); i += 16; edata2 += 4;
209
210    truncate_block_4x4_le_S (w0, edata2_left & 0xf);
211
212    append_0x80_1x4 (w0, edata2_left & 0xf);
213
214    w3[2] = (64 + edata2_len) * 8;
215    w3[3] = 0;
216
217    md5_transform (w0, w1, w2, w3, ipad);
218  }
219  else if (edata2_left < 32)
220  {
221    j = rc4_next_16_global (S, i, j, edata2, w0); i += 16; edata2 += 4;
222    j = rc4_next_16_global (S, i, j, edata2, w1); i += 16; edata2 += 4;
223
224    truncate_block_4x4_le_S (w1, edata2_left & 0xf);
225
226    append_0x80_1x4 (w1, edata2_left & 0xf);
227
228    w3[2] = (64 + edata2_len) * 8;
229    w3[3] = 0;
230
231    md5_transform (w0, w1, w2, w3, ipad);
232  }
233  else if (edata2_left < 48)
234  {
235    j = rc4_next_16_global (S, i, j, edata2, w0); i += 16; edata2 += 4;
236    j = rc4_next_16_global (S, i, j, edata2, w1); i += 16; edata2 += 4;
237    j = rc4_next_16_global (S, i, j, edata2, w2); i += 16; edata2 += 4;
238
239    truncate_block_4x4_le_S (w2, edata2_left & 0xf);
240
241    append_0x80_1x4 (w2, edata2_left & 0xf);
242
243    w3[2] = (64 + edata2_len) * 8;
244    w3[3] = 0;
245
246    md5_transform (w0, w1, w2, w3, ipad);
247  }
248  else
249  {
250    j = rc4_next_16_global (S, i, j, edata2, w0); i += 16; edata2 += 4;
251    j = rc4_next_16_global (S, i, j, edata2, w1); i += 16; edata2 += 4;
252    j = rc4_next_16_global (S, i, j, edata2, w2); i += 16; edata2 += 4;
253    j = rc4_next_16_global (S, i, j, edata2, w3); i += 16; edata2 += 4;
254
255    truncate_block_4x4_le_S (w3, edata2_left & 0xf);
256
257    append_0x80_1x4 (w3, edata2_left & 0xf);
258
259    if (edata2_left < 56)
260    {
261      w3[2] = (64 + edata2_len) * 8;
262      w3[3] = 0;
263
264      md5_transform (w0, w1, w2, w3, ipad);
265    }
266    else
267    {
268      md5_transform (w0, w1, w2, w3, ipad);
269
270      w0[0] = 0;
271      w0[1] = 0;
272      w0[2] = 0;
273      w0[3] = 0;
274      w1[0] = 0;
275      w1[1] = 0;
276      w1[2] = 0;
277      w1[3] = 0;
278      w2[0] = 0;
279      w2[1] = 0;
280      w2[2] = 0;
281      w2[3] = 0;
282      w3[0] = 0;
283      w3[1] = 0;
284      w3[2] = (64 + edata2_len) * 8;
285      w3[3] = 0;
286
287      md5_transform (w0, w1, w2, w3, ipad);
288    }
289  }
290
291  w0[0] = ipad[0];
292  w0[1] = ipad[1];
293  w0[2] = ipad[2];
294  w0[3] = ipad[3];
295  w1[0] = 0x80;
296  w1[1] = 0;
297  w1[2] = 0;
298  w1[3] = 0;
299  w2[0] = 0;
300  w2[1] = 0;
301  w2[2] = 0;
302  w2[3] = 0;
303  w3[0] = 0;
304  w3[1] = 0;
305  w3[2] = (64 + 16) * 8;
306  w3[3] = 0;
307
308  md5_transform (w0, w1, w2, w3, opad);
309
310  if (checksum[0] != opad[0]) return 0;
311  if (checksum[1] != opad[1]) return 0;
312  if (checksum[2] != opad[2]) return 0;
313  if (checksum[3] != opad[3]) return 0;
314
315  return 1;
316}
317
318DECLSPEC void kerb_prepare (const u32 *w0, const u32 *w1, const u32 pw_len, const u32 *checksum, u32 *digest, u32 *K2)
319{
320  /**
321   * pads
322   */
323
324  u32 w0_t[4];
325  u32 w1_t[4];
326  u32 w2_t[4];
327  u32 w3_t[4];
328
329  w0_t[0] = w0[0];
330  w0_t[1] = w0[1];
331  w0_t[2] = w0[2];
332  w0_t[3] = w0[3];
333  w1_t[0] = w1[0];
334  w1_t[1] = w1[1];
335  w1_t[2] = w1[2];
336  w1_t[3] = w1[3];
337  w2_t[0] = 0;
338  w2_t[1] = 0;
339  w2_t[2] = 0;
340  w2_t[3] = 0;
341  w3_t[0] = 0;
342  w3_t[1] = 0;
343  w3_t[2] = 0;
344  w3_t[3] = 0;
345
346  // K=MD4(Little_indian(UNICODE(pwd))
347
348  append_0x80_2x4 (w0_t, w1_t, pw_len);
349
350  make_utf16le (w1_t, w2_t, w3_t);
351  make_utf16le (w0_t, w0_t, w1_t);
352
353  w3_t[2] = pw_len * 8 * 2;
354  w3_t[3] = 0;
355
356  digest[0] = MD4M_A;
357  digest[1] = MD4M_B;
358  digest[2] = MD4M_C;
359  digest[3] = MD4M_D;
360
361  md4_transform (w0_t, w1_t, w2_t, w3_t, digest);
362
363  // K1=MD5_HMAC(K,1); with 2 encoded as little indian on 4 bytes (02000000 in hexa);
364
365  w0_t[0] = digest[0];
366  w0_t[1] = digest[1];
367  w0_t[2] = digest[2];
368  w0_t[3] = digest[3];
369  w1_t[0] = 0;
370  w1_t[1] = 0;
371  w1_t[2] = 0;
372  w1_t[3] = 0;
373  w2_t[0] = 0;
374  w2_t[1] = 0;
375  w2_t[2] = 0;
376  w2_t[3] = 0;
377  w3_t[0] = 0;
378  w3_t[1] = 0;
379  w3_t[2] = 0;
380  w3_t[3] = 0;
381
382  u32 ipad[4];
383  u32 opad[4];
384
385  hmac_md5_pad (w0_t, w1_t, w2_t, w3_t, ipad, opad);
386
387  w0_t[0] = 2;
388  w0_t[1] = 0x80;
389  w0_t[2] = 0;
390  w0_t[3] = 0;
391  w1_t[0] = 0;
392  w1_t[1] = 0;
393  w1_t[2] = 0;
394  w1_t[3] = 0;
395  w2_t[0] = 0;
396  w2_t[1] = 0;
397  w2_t[2] = 0;
398  w2_t[3] = 0;
399  w3_t[0] = 0;
400  w3_t[1] = 0;
401  w3_t[2] = (64 + 4) * 8;
402  w3_t[3] = 0;
403
404  hmac_md5_run (w0_t, w1_t, w2_t, w3_t, ipad, opad, digest);
405
406  // K2 = K1;
407
408  K2[0] = digest[0];
409  K2[1] = digest[1];
410  K2[2] = digest[2];
411  K2[3] = digest[3];
412
413  // K3=MD5_HMAC(K1,checksum);
414
415  w0_t[0] = digest[0];
416  w0_t[1] = digest[1];
417  w0_t[2] = digest[2];
418  w0_t[3] = digest[3];
419  w1_t[0] = 0;
420  w1_t[1] = 0;
421  w1_t[2] = 0;
422  w1_t[3] = 0;
423  w2_t[0] = 0;
424  w2_t[1] = 0;
425  w2_t[2] = 0;
426  w2_t[3] = 0;
427  w3_t[0] = 0;
428  w3_t[1] = 0;
429  w3_t[2] = 0;
430  w3_t[3] = 0;
431
432  hmac_md5_pad (w0_t, w1_t, w2_t, w3_t, ipad, opad);
433
434  w0_t[0] = checksum[0];
435  w0_t[1] = checksum[1];
436  w0_t[2] = checksum[2];
437  w0_t[3] = checksum[3];
438  w1_t[0] = 0x80;
439  w1_t[1] = 0;
440  w1_t[2] = 0;
441  w1_t[3] = 0;
442  w2_t[0] = 0;
443  w2_t[1] = 0;
444  w2_t[2] = 0;
445  w2_t[3] = 0;
446  w3_t[0] = 0;
447  w3_t[1] = 0;
448  w3_t[2] = (64 + 16) * 8;
449  w3_t[3] = 0;
450
451  hmac_md5_run (w0_t, w1_t, w2_t, w3_t, ipad, opad, digest);
452}
453
454DECLSPEC void m13100 (LOCAL_AS u32 *S, u32 *w0, u32 *w1, u32 *w2, u32 *w3, const u32 pw_len, KERN_ATTR_ESALT (krb5tgs_t))
455{
456  /**
457   * modifier
458   */
459
460  const u64 gid = get_global_id (0);
461  const u64 lid = get_local_id (0);
462
463  /**
464   * salt
465   */
466
467  u32 checksum[4];
468
469  checksum[0] = esalt_bufs[DIGESTS_OFFSET].checksum[0];
470  checksum[1] = esalt_bufs[DIGESTS_OFFSET].checksum[1];
471  checksum[2] = esalt_bufs[DIGESTS_OFFSET].checksum[2];
472  checksum[3] = esalt_bufs[DIGESTS_OFFSET].checksum[3];
473
474  /**
475   * loop
476   */
477
478  u32 w0l = w0[0];
479
480  for (u32 il_pos = 0; il_pos < il_cnt; il_pos++)
481  {
482    const u32 w0r = bfs_buf[il_pos].i;
483
484    w0[0] = w0l | w0r;
485
486    /**
487     * kerberos
488     */
489
490    u32 digest[4];
491
492    u32 K2[4];
493
494    kerb_prepare (w0, w1, pw_len, checksum, digest, K2);
495
496    u32 tmp[4];
497
498    tmp[0] = digest[0];
499    tmp[1] = digest[1];
500    tmp[2] = digest[2];
501    tmp[3] = digest[3];
502
503    if (decrypt_and_check (S, tmp, esalt_bufs[DIGESTS_OFFSET].edata2, esalt_bufs[DIGESTS_OFFSET].edata2_len, K2, checksum) == 1)
504    {
505      if (hc_atomic_inc (&hashes_shown[DIGESTS_OFFSET]) == 0)
506      {
507        mark_hash (plains_buf, d_return_buf, SALT_POS, digests_cnt, 0, DIGESTS_OFFSET + 0, gid, il_pos, 0, 0);
508      }
509    }
510  }
511}
512
513KERNEL_FQ void m13100_m04 (KERN_ATTR_ESALT (krb5tgs_t))
514{
515  /**
516   * base
517   */
518
519  const u64 gid = get_global_id (0);
520  const u64 lid = get_local_id (0);
521
522  if (gid >= gid_max) return;
523
524  u32 w0[4];
525
526  w0[0] = pws[gid].i[ 0];
527  w0[1] = pws[gid].i[ 1];
528  w0[2] = pws[gid].i[ 2];
529  w0[3] = pws[gid].i[ 3];
530
531  u32 w1[4];
532
533  w1[0] = 0;
534  w1[1] = 0;
535  w1[2] = 0;
536  w1[3] = 0;
537
538  u32 w2[4];
539
540  w2[0] = 0;
541  w2[1] = 0;
542  w2[2] = 0;
543  w2[3] = 0;
544
545  u32 w3[4];
546
547  w3[0] = 0;
548  w3[1] = 0;
549  w3[2] = 0;
550  w3[3] = 0;
551
552  const u32 pw_len = pws[gid].pw_len & 63;
553
554  /**
555   * main
556   */
557
558  LOCAL_VK u32 S[64 * FIXED_LOCAL_SIZE];
559
560  m13100 (S, w0, w1, w2, w3, pw_len, pws, rules_buf, combs_buf, bfs_buf, tmps, hooks, bitmaps_buf_s1_a, bitmaps_buf_s1_b, bitmaps_buf_s1_c, bitmaps_buf_s1_d, bitmaps_buf_s2_a, bitmaps_buf_s2_b, bitmaps_buf_s2_c, bitmaps_buf_s2_d, plains_buf, digests_buf, hashes_shown, salt_bufs, esalt_bufs, d_return_buf, d_extra0_buf, d_extra1_buf, d_extra2_buf, d_extra3_buf, bitmap_mask, bitmap_shift1, bitmap_shift2, SALT_POS, loop_pos, loop_cnt, il_cnt, digests_cnt, DIGESTS_OFFSET, combs_mode, salt_repeat, pws_pos, gid_max);
561}
562
563KERNEL_FQ void m13100_m08 (KERN_ATTR_ESALT (krb5tgs_t))
564{
565  /**
566   * base
567   */
568
569  const u64 gid = get_global_id (0);
570  const u64 lid = get_local_id (0);
571
572  if (gid >= gid_max) return;
573
574  u32 w0[4];
575
576  w0[0] = pws[gid].i[ 0];
577  w0[1] = pws[gid].i[ 1];
578  w0[2] = pws[gid].i[ 2];
579  w0[3] = pws[gid].i[ 3];
580
581  u32 w1[4];
582
583  w1[0] = pws[gid].i[ 4];
584  w1[1] = pws[gid].i[ 5];
585  w1[2] = pws[gid].i[ 6];
586  w1[3] = pws[gid].i[ 7];
587
588  u32 w2[4];
589
590  w2[0] = 0;
591  w2[1] = 0;
592  w2[2] = 0;
593  w2[3] = 0;
594
595  u32 w3[4];
596
597  w3[0] = 0;
598  w3[1] = 0;
599  w3[2] = 0;
600  w3[3] = 0;
601
602  const u32 pw_len = pws[gid].pw_len & 63;
603
604  /**
605   * main
606   */
607
608  LOCAL_VK u32 S[64 * FIXED_LOCAL_SIZE];
609
610  m13100 (S, w0, w1, w2, w3, pw_len, pws, rules_buf, combs_buf, bfs_buf, tmps, hooks, bitmaps_buf_s1_a, bitmaps_buf_s1_b, bitmaps_buf_s1_c, bitmaps_buf_s1_d, bitmaps_buf_s2_a, bitmaps_buf_s2_b, bitmaps_buf_s2_c, bitmaps_buf_s2_d, plains_buf, digests_buf, hashes_shown, salt_bufs, esalt_bufs, d_return_buf, d_extra0_buf, d_extra1_buf, d_extra2_buf, d_extra3_buf, bitmap_mask, bitmap_shift1, bitmap_shift2, SALT_POS, loop_pos, loop_cnt, il_cnt, digests_cnt, DIGESTS_OFFSET, combs_mode, salt_repeat, pws_pos, gid_max);
611}
612
613KERNEL_FQ void m13100_m16 (KERN_ATTR_ESALT (krb5tgs_t))
614{
615}
616
617KERNEL_FQ void m13100_s04 (KERN_ATTR_ESALT (krb5tgs_t))
618{
619  /**
620   * base
621   */
622
623  const u64 gid = get_global_id (0);
624  const u64 lid = get_local_id (0);
625
626  if (gid >= gid_max) return;
627
628  u32 w0[4];
629
630  w0[0] = pws[gid].i[ 0];
631  w0[1] = pws[gid].i[ 1];
632  w0[2] = pws[gid].i[ 2];
633  w0[3] = pws[gid].i[ 3];
634
635  u32 w1[4];
636
637  w1[0] = 0;
638  w1[1] = 0;
639  w1[2] = 0;
640  w1[3] = 0;
641
642  u32 w2[4];
643
644  w2[0] = 0;
645  w2[1] = 0;
646  w2[2] = 0;
647  w2[3] = 0;
648
649  u32 w3[4];
650
651  w3[0] = 0;
652  w3[1] = 0;
653  w3[2] = 0;
654  w3[3] = 0;
655
656  const u32 pw_len = pws[gid].pw_len & 63;
657
658  /**
659   * main
660   */
661
662  LOCAL_VK u32 S[64 * FIXED_LOCAL_SIZE];
663
664  m13100 (S, w0, w1, w2, w3, pw_len, pws, rules_buf, combs_buf, bfs_buf, tmps, hooks, bitmaps_buf_s1_a, bitmaps_buf_s1_b, bitmaps_buf_s1_c, bitmaps_buf_s1_d, bitmaps_buf_s2_a, bitmaps_buf_s2_b, bitmaps_buf_s2_c, bitmaps_buf_s2_d, plains_buf, digests_buf, hashes_shown, salt_bufs, esalt_bufs, d_return_buf, d_extra0_buf, d_extra1_buf, d_extra2_buf, d_extra3_buf, bitmap_mask, bitmap_shift1, bitmap_shift2, SALT_POS, loop_pos, loop_cnt, il_cnt, digests_cnt, DIGESTS_OFFSET, combs_mode, salt_repeat, pws_pos, gid_max);
665}
666
667KERNEL_FQ void m13100_s08 (KERN_ATTR_ESALT (krb5tgs_t))
668{
669  /**
670   * base
671   */
672
673  const u64 gid = get_global_id (0);
674  const u64 lid = get_local_id (0);
675
676  if (gid >= gid_max) return;
677
678  u32 w0[4];
679
680  w0[0] = pws[gid].i[ 0];
681  w0[1] = pws[gid].i[ 1];
682  w0[2] = pws[gid].i[ 2];
683  w0[3] = pws[gid].i[ 3];
684
685  u32 w1[4];
686
687  w1[0] = pws[gid].i[ 4];
688  w1[1] = pws[gid].i[ 5];
689  w1[2] = pws[gid].i[ 6];
690  w1[3] = pws[gid].i[ 7];
691
692  u32 w2[4];
693
694  w2[0] = 0;
695  w2[1] = 0;
696  w2[2] = 0;
697  w2[3] = 0;
698
699  u32 w3[4];
700
701  w3[0] = 0;
702  w3[1] = 0;
703  w3[2] = 0;
704  w3[3] = 0;
705
706  const u32 pw_len = pws[gid].pw_len & 63;
707
708  /**
709   * main
710   */
711
712  LOCAL_VK u32 S[64 * FIXED_LOCAL_SIZE];
713
714  m13100 (S, w0, w1, w2, w3, pw_len, pws, rules_buf, combs_buf, bfs_buf, tmps, hooks, bitmaps_buf_s1_a, bitmaps_buf_s1_b, bitmaps_buf_s1_c, bitmaps_buf_s1_d, bitmaps_buf_s2_a, bitmaps_buf_s2_b, bitmaps_buf_s2_c, bitmaps_buf_s2_d, plains_buf, digests_buf, hashes_shown, salt_bufs, esalt_bufs, d_return_buf, d_extra0_buf, d_extra1_buf, d_extra2_buf, d_extra3_buf, bitmap_mask, bitmap_shift1, bitmap_shift2, SALT_POS, loop_pos, loop_cnt, il_cnt, digests_cnt, DIGESTS_OFFSET, combs_mode, salt_repeat, pws_pos, gid_max);
715}
716
717KERNEL_FQ void m13100_s16 (KERN_ATTR_ESALT (krb5tgs_t))
718{
719}
720