@ -23,7 +23,9 @@ typedef struct vc
{
{
u32 salt_buf[32] ;
u32 salt_buf[32] ;
u32 data_buf[112] ;
u32 data_buf[112] ;
u32 keyfile_buf[16] ;
u32 keyfile_buf16[16] ;
u32 keyfile_buf32[32] ;
u32 keyfile_enabled ;
u32 signature ;
u32 signature ;
keyboard_layout_mapping_t keyboard_layout_mapping_buf[256] ;
keyboard_layout_mapping_t keyboard_layout_mapping_buf[256] ;
@ -36,10 +38,10 @@ typedef struct vc
} vc_t ;
} vc_t ;
# ifdef KERNEL_STATIC
# ifdef KERNEL_STATIC
# include "inc_truecrypt_keyfile.cl"
# include "inc_truecrypt_crc32.cl"
# include "inc_truecrypt_crc32.cl"
# include "inc_truecrypt_xts.cl"
# include "inc_truecrypt_xts.cl"
# include "inc_veracrypt_xts.cl"
# include "inc_veracrypt_xts.cl"
# include "inc_veracrypt_keyfile.cl"
# endif
# endif
typedef struct vc64_tmp
typedef struct vc64_tmp
@ -172,105 +174,50 @@ KERNEL_FQ void m13721_init (KERN_ATTR_TMPS_ESALT (vc64_tmp_t, vc_t))
* base
* base
*/
*/
u32 w0[4] ;
u32 w[32] ;
u32 w1[4] ;
u32 w2[4] ;
w[ 0] = pws[gid].i[ 0] ;
u32 w3[4] ;
w[ 1] = pws[gid].i[ 1] ;
u32 w4[4] ;
w[ 2] = pws[gid].i[ 2] ;
u32 w5[4] ;
w[ 3] = pws[gid].i[ 3] ;
u32 w6[4] ;
w[ 4] = pws[gid].i[ 4] ;
u32 w7[4] ;
w[ 5] = pws[gid].i[ 5] ;
w[ 6] = pws[gid].i[ 6] ;
w0[0] = pws[gid].i[ 0] ;
w[ 7] = pws[gid].i[ 7] ;
w0[1] = pws[gid].i[ 1] ;
w[ 8] = pws[gid].i[ 8] ;
w0[2] = pws[gid].i[ 2] ;
w[ 9] = pws[gid].i[ 9] ;
w0[3] = pws[gid].i[ 3] ;
w[10] = pws[gid].i[10] ;
w1[0] = pws[gid].i[ 4] ;
w[11] = pws[gid].i[11] ;
w1[1] = pws[gid].i[ 5] ;
w[12] = pws[gid].i[12] ;
w1[2] = pws[gid].i[ 6] ;
w[13] = pws[gid].i[13] ;
w1[3] = pws[gid].i[ 7] ;
w[14] = pws[gid].i[14] ;
w2[0] = pws[gid].i[ 8] ;
w[15] = pws[gid].i[15] ;
w2[1] = pws[gid].i[ 9] ;
w[16] = pws[gid].i[16] ;
w2[2] = pws[gid].i[10] ;
w[17] = pws[gid].i[17] ;
w2[3] = pws[gid].i[11] ;
w[18] = pws[gid].i[18] ;
w3[0] = pws[gid].i[12] ;
w[19] = pws[gid].i[19] ;
w3[1] = pws[gid].i[13] ;
w[20] = pws[gid].i[20] ;
w3[2] = pws[gid].i[14] ;
w[21] = pws[gid].i[21] ;
w3[3] = pws[gid].i[15] ;
w[22] = pws[gid].i[22] ;
w4[0] = pws[gid].i[16] ;
w[23] = pws[gid].i[23] ;
w4[1] = pws[gid].i[17] ;
w[24] = pws[gid].i[24] ;
w4[2] = pws[gid].i[18] ;
w[25] = pws[gid].i[25] ;
w4[3] = pws[gid].i[19] ;
w[26] = pws[gid].i[26] ;
w5[0] = pws[gid].i[20] ;
w[27] = pws[gid].i[27] ;
w5[1] = pws[gid].i[21] ;
w[28] = pws[gid].i[28] ;
w5[2] = pws[gid].i[22] ;
w[29] = pws[gid].i[29] ;
w5[3] = pws[gid].i[23] ;
w[30] = pws[gid].i[30] ;
w6[0] = pws[gid].i[24] ;
w[31] = pws[gid].i[31] ;
w6[1] = pws[gid].i[25] ;
w6[2] = pws[gid].i[26] ;
u32 pw_len = pws[gid].pw_len ;
w6[3] = pws[gid].i[27] ;
w7[0] = pws[gid].i[28] ;
hc_execute_keyboard_layout_mapping ( w, pw_len, s_keyboard_layout_mapping_buf, keyboard_layout_mapping_cnt ) ;
w7[1] = pws[gid].i[29] ;
w7[2] = pws[gid].i[30] ;
pw_len = hc_apply_keyfile_vc ( w, pw_len, &esalt_bufs[DIGESTS_OFFSET] ) ;
w7[3] = pws[gid].i[31] ;
const u32 pw_len = pws[gid].pw_len ;
hc_execute_keyboard_layout_mapping ( w0, w1, w2, w3, pw_len, s_keyboard_layout_mapping_buf, keyboard_layout_mapping_cnt ) ;
w0[0] = u8add ( w0[0], esalt_bufs[DIGESTS_OFFSET].keyfile_buf[ 0] ) ;
w0[1] = u8add ( w0[1], esalt_bufs[DIGESTS_OFFSET].keyfile_buf[ 1] ) ;
w0[2] = u8add ( w0[2], esalt_bufs[DIGESTS_OFFSET].keyfile_buf[ 2] ) ;
w0[3] = u8add ( w0[3], esalt_bufs[DIGESTS_OFFSET].keyfile_buf[ 3] ) ;
w1[0] = u8add ( w1[0], esalt_bufs[DIGESTS_OFFSET].keyfile_buf[ 4] ) ;
w1[1] = u8add ( w1[1], esalt_bufs[DIGESTS_OFFSET].keyfile_buf[ 5] ) ;
w1[2] = u8add ( w1[2], esalt_bufs[DIGESTS_OFFSET].keyfile_buf[ 6] ) ;
w1[3] = u8add ( w1[3], esalt_bufs[DIGESTS_OFFSET].keyfile_buf[ 7] ) ;
w2[0] = u8add ( w2[0], esalt_bufs[DIGESTS_OFFSET].keyfile_buf[ 8] ) ;
w2[1] = u8add ( w2[1], esalt_bufs[DIGESTS_OFFSET].keyfile_buf[ 9] ) ;
w2[2] = u8add ( w2[2], esalt_bufs[DIGESTS_OFFSET].keyfile_buf[10] ) ;
w2[3] = u8add ( w2[3], esalt_bufs[DIGESTS_OFFSET].keyfile_buf[11] ) ;
w3[0] = u8add ( w3[0], esalt_bufs[DIGESTS_OFFSET].keyfile_buf[12] ) ;
w3[1] = u8add ( w3[1], esalt_bufs[DIGESTS_OFFSET].keyfile_buf[13] ) ;
w3[2] = u8add ( w3[2], esalt_bufs[DIGESTS_OFFSET].keyfile_buf[14] ) ;
w3[3] = u8add ( w3[3], esalt_bufs[DIGESTS_OFFSET].keyfile_buf[15] ) ;
w0[0] = hc_swap32_S ( w0[0] ) ;
w0[1] = hc_swap32_S ( w0[1] ) ;
w0[2] = hc_swap32_S ( w0[2] ) ;
w0[3] = hc_swap32_S ( w0[3] ) ;
w1[0] = hc_swap32_S ( w1[0] ) ;
w1[1] = hc_swap32_S ( w1[1] ) ;
w1[2] = hc_swap32_S ( w1[2] ) ;
w1[3] = hc_swap32_S ( w1[3] ) ;
w2[0] = hc_swap32_S ( w2[0] ) ;
w2[1] = hc_swap32_S ( w2[1] ) ;
w2[2] = hc_swap32_S ( w2[2] ) ;
w2[3] = hc_swap32_S ( w2[3] ) ;
w3[0] = hc_swap32_S ( w3[0] ) ;
w3[1] = hc_swap32_S ( w3[1] ) ;
w3[2] = hc_swap32_S ( w3[2] ) ;
w3[3] = hc_swap32_S ( w3[3] ) ;
w4[0] = hc_swap32_S ( w4[0] ) ;
w4[1] = hc_swap32_S ( w4[1] ) ;
w4[2] = hc_swap32_S ( w4[2] ) ;
w4[3] = hc_swap32_S ( w4[3] ) ;
w5[0] = hc_swap32_S ( w5[0] ) ;
w5[1] = hc_swap32_S ( w5[1] ) ;
w5[2] = hc_swap32_S ( w5[2] ) ;
w5[3] = hc_swap32_S ( w5[3] ) ;
w6[0] = hc_swap32_S ( w6[0] ) ;
w6[1] = hc_swap32_S ( w6[1] ) ;
w6[2] = hc_swap32_S ( w6[2] ) ;
w6[3] = hc_swap32_S ( w6[3] ) ;
w7[0] = hc_swap32_S ( w7[0] ) ;
w7[1] = hc_swap32_S ( w7[1] ) ;
w7[2] = hc_swap32_S ( w7[2] ) ;
w7[3] = hc_swap32_S ( w7[3] ) ;
sha512_hmac_ctx_t sha512_hmac_ctx ;
sha512_hmac_ctx_t sha512_hmac_ctx ;
sha512_hmac_init_ 128 ( &sha512_hmac_ctx, w0, w1, w2, w3, w4, w5, w6, w7 ) ;
sha512_hmac_init_swap ( &sha512_hmac_ctx, w, pw_len ) ;
tmps[gid].ipad[0] = sha512_hmac_ctx.ipad.h[0] ;
tmps[gid].ipad[0] = sha512_hmac_ctx.ipad.h[0] ;
tmps[gid].ipad[1] = sha512_hmac_ctx.ipad.h[1] ;
tmps[gid].ipad[1] = sha512_hmac_ctx.ipad.h[1] ;
@ -296,6 +243,15 @@ KERNEL_FQ void m13721_init (KERN_ATTR_TMPS_ESALT (vc64_tmp_t, vc_t))
{
{
sha512_hmac_ctx_t sha512_hmac_ctx2 = sha512_hmac_ctx ;
sha512_hmac_ctx_t sha512_hmac_ctx2 = sha512_hmac_ctx ;
u32 w0[4] ;
u32 w1[4] ;
u32 w2[4] ;
u32 w3[4] ;
u32 w4[4] ;
u32 w5[4] ;
u32 w6[4] ;
u32 w7[4] ;
w0[0] = j ;
w0[0] = j ;
w0[1] = 0 ;
w0[1] = 0 ;
w0[2] = 0 ;
w0[2] = 0 ;