DES BITSLICE
#1
I'm new to hashcat and recently working on DES BITSLICE (hashmode 14000-a3).
I've already known about the usage for these buffers:
salt_buf_pc for salted(or raw) plaintext;
digest_buf for digest(namely cipher);
I don't have a clue what should I supposed to put into these buffers: 
mod buffer for modifier;
pws buffer for base password;
As far as I know, they are bounded to gid which is obtained from current GPU thread.
But I'm not sure how to combine mod and pws to expand to whole keyspace 2^56.

Here's the code for modifier:
Code:
KERNEL_FQ void m14000_tm (GLOBAL_AS u32 *mod, GLOBAL_AS bs_word_t *words_buf_b)
{
  const u64 gid = get_global_id (0);

  const u32 block = gid / 32;
  const u32 slice = gid % 32;

  const u32 w0 = mod[gid];

  #ifdef _unroll
  #pragma unroll
  #endif
  for (int i = 0, j = 0; i < 32; i += 8, j += 7)
  {
    hc_atomic_or (&words_buf_b[block].b[j + 0], (((w0 >> (i + 7)) & 1) << slice));
    hc_atomic_or (&words_buf_b[block].b[j + 1], (((w0 >> (i + 6)) & 1) << slice));
    hc_atomic_or (&words_buf_b[block].b[j + 2], (((w0 >> (i + 5)) & 1) << slice));
    hc_atomic_or (&words_buf_b[block].b[j + 3], (((w0 >> (i + 4)) & 1) << slice));
    hc_atomic_or (&words_buf_b[block].b[j + 4], (((w0 >> (i + 3)) & 1) << slice));
    hc_atomic_or (&words_buf_b[block].b[j + 5], (((w0 >> (i + 2)) & 1) << slice));
    hc_atomic_or (&words_buf_b[block].b[j + 6], (((w0 >> (i + 1)) & 1) << slice));
  }
}


Here's part of the code for combination:
Code:
    const u32 w0 = pws[gid].i[0];
    const u32 w1 = pws[gid].i[1];

  #define K00 (((w0 >> ( 0 + 7)) & 1) ? -1 : 0)
  #define K01 (((w0 >> ( 0 + 6)) & 1) ? -1 : 0)
  #define K02 (((w0 >> ( 0 + 5)) & 1) ? -1 : 0)
  #define K03 (((w0 >> ( 0 + 4)) & 1) ? -1 : 0)
  #define K04 (((w0 >> ( 0 + 3)) & 1) ? -1 : 0)
  #define K05 (((w0 >> ( 0 + 2)) & 1) ? -1 : 0)
  #define K06 (((w0 >> ( 0 + 1)) & 1) ? -1 : 0)
  #define K07 (((w0 >> ( 8 + 7)) & 1) ? -1 : 0)
  #define K08 (((w0 >> ( 8 + 6)) & 1) ? -1 : 0)
  #define K09 (((w0 >> ( 8 + 5)) & 1) ? -1 : 0)
  #define K10 (((w0 >> ( 8 + 4)) & 1) ? -1 : 0)
  #define K11 (((w0 >> ( 8 + 3)) & 1) ? -1 : 0)
  #define K12 (((w0 >> ( 8 + 2)) & 1) ? -1 : 0)
  #define K13 (((w0 >> ( 8 + 1)) & 1) ? -1 : 0)
  #define K14 (((w0 >> (16 + 7)) & 1) ? -1 : 0)
  #define K15 (((w0 >> (16 + 6)) & 1) ? -1 : 0)
  #define K16 (((w0 >> (16 + 5)) & 1) ? -1 : 0)
  #define K17 (((w0 >> (16 + 4)) & 1) ? -1 : 0)
  #define K18 (((w0 >> (16 + 3)) & 1) ? -1 : 0)
  #define K19 (((w0 >> (16 + 2)) & 1) ? -1 : 0)
  #define K20 (((w0 >> (16 + 1)) & 1) ? -1 : 0)
  #define K21 (((w0 >> (24 + 7)) & 1) ? -1 : 0)
  #define K22 (((w0 >> (24 + 6)) & 1) ? -1 : 0)
  #define K23 (((w0 >> (24 + 5)) & 1) ? -1 : 0)
  #define K24 (((w0 >> (24 + 4)) & 1) ? -1 : 0)
  #define K25 (((w0 >> (24 + 3)) & 1) ? -1 : 0)
  #define K26 (((w0 >> (24 + 2)) & 1) ? -1 : 0)
  #define K27 (((w0 >> (24 + 1)) & 1) ? -1 : 0)


    ...


    k00 |= words_buf_s[pc_pos].b[ 0];
    k01 |= words_buf_s[pc_pos].b[ 1];
    k02 |= words_buf_s[pc_pos].b[ 2];
    k03 |= words_buf_s[pc_pos].b[ 3];
    k04 |= words_buf_s[pc_pos].b[ 4];
    k05 |= words_buf_s[pc_pos].b[ 5];
    k06 |= words_buf_s[pc_pos].b[ 6];
    k07 |= words_buf_s[pc_pos].b[ 7];
    k08 |= words_buf_s[pc_pos].b[ 8];
    k09 |= words_buf_s[pc_pos].b[ 9];
    k10 |= words_buf_s[pc_pos].b[10];
    k11 |= words_buf_s[pc_pos].b[11];
    k12 |= words_buf_s[pc_pos].b[12];
    k13 |= words_buf_s[pc_pos].b[13];
    k14 |= words_buf_s[pc_pos].b[14];
    k15 |= words_buf_s[pc_pos].b[15];
    k16 |= words_buf_s[pc_pos].b[16];
    k17 |= words_buf_s[pc_pos].b[17];
    k18 |= words_buf_s[pc_pos].b[18];
    k19 |= words_buf_s[pc_pos].b[19];
    k20 |= words_buf_s[pc_pos].b[20];
    k21 |= words_buf_s[pc_pos].b[21];
    k22 |= words_buf_s[pc_pos].b[22];
    k23 |= words_buf_s[pc_pos].b[23];
    k24 |= words_buf_s[pc_pos].b[24];
    k25 |= words_buf_s[pc_pos].b[25];
    k26 |= words_buf_s[pc_pos].b[26];
    k27 |= words_buf_s[pc_pos].b[27];
Reply
#2
solved here: https://hashcat.net/forum/thread-10239.h...t=bitslice
Reply