You can not select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
hashcat/OpenCL/inc_veracrypt_keyfile.cl

100 lines
3.3 KiB

/**
* Author......: See docs/credits.txt
* License.....: MIT
*/
#include "inc_vendor.h"
#include "inc_types.h"
#include "inc_platform.h"
#include "inc_common.h"
#include "inc_veracrypt_keyfile.h"
DECLSPEC u32 u8add (const u32 a, const u32 b)
{
const u32 a1 = (a >> 0) & 0xff;
const u32 a2 = (a >> 8) & 0xff;
const u32 a3 = (a >> 16) & 0xff;
const u32 a4 = (a >> 24) & 0xff;
const u32 b1 = (b >> 0) & 0xff;
const u32 b2 = (b >> 8) & 0xff;
const u32 b3 = (b >> 16) & 0xff;
const u32 b4 = (b >> 24) & 0xff;
const u32 r1 = (a1 + b1) & 0xff;
const u32 r2 = (a2 + b2) & 0xff;
const u32 r3 = (a3 + b3) & 0xff;
const u32 r4 = (a4 + b4) & 0xff;
const u32 r = r1 << 0
| r2 << 8
| r3 << 16
| r4 << 24;
return r;
}
DECLSPEC u32 hc_apply_keyfile_vc (u32 *w, const int pw_len, const GLOBAL_AS vc_t *vc)
{
if (vc->keyfile_enabled == 0) return pw_len;
if (pw_len > 64)
{
w[ 0] = u8add (w[ 0], vc->keyfile_buf32[ 0]);
w[ 1] = u8add (w[ 1], vc->keyfile_buf32[ 1]);
w[ 2] = u8add (w[ 2], vc->keyfile_buf32[ 2]);
w[ 3] = u8add (w[ 3], vc->keyfile_buf32[ 3]);
w[ 4] = u8add (w[ 4], vc->keyfile_buf32[ 4]);
w[ 5] = u8add (w[ 5], vc->keyfile_buf32[ 5]);
w[ 6] = u8add (w[ 6], vc->keyfile_buf32[ 6]);
w[ 7] = u8add (w[ 7], vc->keyfile_buf32[ 7]);
w[ 8] = u8add (w[ 8], vc->keyfile_buf32[ 8]);
w[ 9] = u8add (w[ 9], vc->keyfile_buf32[ 9]);
w[10] = u8add (w[10], vc->keyfile_buf32[10]);
w[11] = u8add (w[11], vc->keyfile_buf32[11]);
w[12] = u8add (w[12], vc->keyfile_buf32[12]);
w[13] = u8add (w[13], vc->keyfile_buf32[13]);
w[14] = u8add (w[14], vc->keyfile_buf32[14]);
w[15] = u8add (w[15], vc->keyfile_buf32[15]);
w[16] = u8add (w[16], vc->keyfile_buf32[16]);
w[17] = u8add (w[17], vc->keyfile_buf32[17]);
w[18] = u8add (w[18], vc->keyfile_buf32[18]);
w[19] = u8add (w[19], vc->keyfile_buf32[19]);
w[20] = u8add (w[20], vc->keyfile_buf32[20]);
w[21] = u8add (w[21], vc->keyfile_buf32[21]);
w[22] = u8add (w[22], vc->keyfile_buf32[22]);
w[23] = u8add (w[23], vc->keyfile_buf32[23]);
w[24] = u8add (w[24], vc->keyfile_buf32[24]);
w[25] = u8add (w[25], vc->keyfile_buf32[25]);
w[26] = u8add (w[26], vc->keyfile_buf32[26]);
w[27] = u8add (w[27], vc->keyfile_buf32[27]);
w[28] = u8add (w[28], vc->keyfile_buf32[28]);
w[29] = u8add (w[29], vc->keyfile_buf32[29]);
w[30] = u8add (w[30], vc->keyfile_buf32[30]);
w[31] = u8add (w[31], vc->keyfile_buf32[31]);
return 128;
}
else
{
w[ 0] = u8add (w[ 0], vc->keyfile_buf16[ 0]);
w[ 1] = u8add (w[ 1], vc->keyfile_buf16[ 1]);
w[ 2] = u8add (w[ 2], vc->keyfile_buf16[ 2]);
w[ 3] = u8add (w[ 3], vc->keyfile_buf16[ 3]);
w[ 4] = u8add (w[ 4], vc->keyfile_buf16[ 4]);
w[ 5] = u8add (w[ 5], vc->keyfile_buf16[ 5]);
w[ 6] = u8add (w[ 6], vc->keyfile_buf16[ 6]);
w[ 7] = u8add (w[ 7], vc->keyfile_buf16[ 7]);
w[ 8] = u8add (w[ 8], vc->keyfile_buf16[ 8]);
w[ 9] = u8add (w[ 9], vc->keyfile_buf16[ 9]);
w[10] = u8add (w[10], vc->keyfile_buf16[10]);
w[11] = u8add (w[11], vc->keyfile_buf16[11]);
w[12] = u8add (w[12], vc->keyfile_buf16[12]);
w[13] = u8add (w[13], vc->keyfile_buf16[13]);
w[14] = u8add (w[14], vc->keyfile_buf16[14]);
w[15] = u8add (w[15], vc->keyfile_buf16[15]);
return 64;
}
}