|
|
|
@ -48,8 +48,11 @@ u32 module_salt_type (MAYBE_UNUSED const hashconfig_t *hashconfig,
|
|
|
|
|
const char *module_st_hash (MAYBE_UNUSED const hashconfig_t *hashconfig, MAYBE_UNUSED const user_options_t *user_options, MAYBE_UNUSED const user_options_extra_t *user_options_extra) { return ST_HASH; }
|
|
|
|
|
const char *module_st_pass (MAYBE_UNUSED const hashconfig_t *hashconfig, MAYBE_UNUSED const user_options_t *user_options, MAYBE_UNUSED const user_options_extra_t *user_options_extra) { return ST_PASS; }
|
|
|
|
|
|
|
|
|
|
#define TC_SALT_LEN 64
|
|
|
|
|
#define TC_DATA_LEN 448
|
|
|
|
|
#define TC_SALT_LEN ( 64)
|
|
|
|
|
#define TC_SALT_HEX_LEN (TC_SALT_LEN * 2)
|
|
|
|
|
|
|
|
|
|
#define TC_DATA_LEN ( 448)
|
|
|
|
|
#define TC_DATA_HEX_LEN (TC_DATA_LEN * 2)
|
|
|
|
|
|
|
|
|
|
typedef struct tc64_tmp
|
|
|
|
|
{
|
|
|
|
@ -63,7 +66,7 @@ typedef struct tc64_tmp
|
|
|
|
|
|
|
|
|
|
typedef struct tc
|
|
|
|
|
{
|
|
|
|
|
u32 data_buf[112];
|
|
|
|
|
u32 data_buf[TC_DATA_LEN / 4];
|
|
|
|
|
u32 keyfile_buf16[16];
|
|
|
|
|
u32 keyfile_buf32[32];
|
|
|
|
|
u32 keyfile_enabled;
|
|
|
|
@ -134,14 +137,14 @@ int module_hash_decode (MAYBE_UNUSED const hashconfig_t *hashconfig, MAYBE_UNUSE
|
|
|
|
|
| TOKEN_ATTR_VERIFY_SIGNATURE;
|
|
|
|
|
|
|
|
|
|
token.sep[1] = '$';
|
|
|
|
|
token.len_min[1] = 128;
|
|
|
|
|
token.len_max[1] = 128;
|
|
|
|
|
token.len_min[1] = TC_SALT_HEX_LEN;
|
|
|
|
|
token.len_max[1] = TC_SALT_HEX_LEN;
|
|
|
|
|
token.attr[1] = TOKEN_ATTR_VERIFY_LENGTH
|
|
|
|
|
| TOKEN_ATTR_VERIFY_HEX;
|
|
|
|
|
|
|
|
|
|
token.sep[2] = '$';
|
|
|
|
|
token.len_min[2] = 896;
|
|
|
|
|
token.len_max[2] = 896;
|
|
|
|
|
token.len_min[2] = TC_DATA_HEX_LEN;
|
|
|
|
|
token.len_max[2] = TC_DATA_HEX_LEN;
|
|
|
|
|
token.attr[2] = TOKEN_ATTR_VERIFY_LENGTH
|
|
|
|
|
| TOKEN_ATTR_VERIFY_HEX;
|
|
|
|
|
|
|
|
|
@ -153,12 +156,7 @@ int module_hash_decode (MAYBE_UNUSED const hashconfig_t *hashconfig, MAYBE_UNUSE
|
|
|
|
|
|
|
|
|
|
const u8 *salt_pos = token.buf[1];
|
|
|
|
|
|
|
|
|
|
for (u32 i = 0, j = 0; i < TC_SALT_LEN / 4; i += 1, j += 8)
|
|
|
|
|
{
|
|
|
|
|
salt->salt_buf[i] = hex_to_u32 (salt_pos + j);
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
salt->salt_len = TC_SALT_LEN;
|
|
|
|
|
salt->salt_len = hex_decode (salt_pos, TC_SALT_HEX_LEN, (u8 *) salt->salt_buf);
|
|
|
|
|
|
|
|
|
|
// iter
|
|
|
|
|
|
|
|
|
@ -168,10 +166,7 @@ int module_hash_decode (MAYBE_UNUSED const hashconfig_t *hashconfig, MAYBE_UNUSE
|
|
|
|
|
|
|
|
|
|
const u8 *data_pos = token.buf[2];
|
|
|
|
|
|
|
|
|
|
for (u32 i = 0, j = 0; i < TC_DATA_LEN / 4; i += 1, j += 8)
|
|
|
|
|
{
|
|
|
|
|
tc->data_buf[i] = hex_to_u32 (data_pos + j);
|
|
|
|
|
}
|
|
|
|
|
hex_decode (data_pos, TC_DATA_HEX_LEN, (u8 *) tc->data_buf);
|
|
|
|
|
|
|
|
|
|
// entropy
|
|
|
|
|
|
|
|
|
@ -185,7 +180,7 @@ int module_hash_decode (MAYBE_UNUSED const hashconfig_t *hashconfig, MAYBE_UNUSE
|
|
|
|
|
|
|
|
|
|
// fake digest
|
|
|
|
|
|
|
|
|
|
memcpy (digest, tc->data_buf, 112);
|
|
|
|
|
memcpy (digest, tc->data_buf, TC_DATA_LEN / 4);
|
|
|
|
|
|
|
|
|
|
return (PARSER_OK);
|
|
|
|
|
}
|
|
|
|
@ -239,25 +234,15 @@ int module_hash_encode (MAYBE_UNUSED const hashconfig_t *hashconfig, MAYBE_UNUSE
|
|
|
|
|
|
|
|
|
|
// salt
|
|
|
|
|
|
|
|
|
|
#define TC_SALT_HEX_LEN TC_SALT_LEN * 2 + 1
|
|
|
|
|
char salt_buf[TC_SALT_HEX_LEN + 1] = { 0 };
|
|
|
|
|
|
|
|
|
|
char salt_buf[TC_SALT_HEX_LEN] = { 0 };
|
|
|
|
|
|
|
|
|
|
for (u32 i = 0, j = 0; i < TC_SALT_LEN / 4; i += 1, j += 8)
|
|
|
|
|
{
|
|
|
|
|
snprintf (salt_buf + j, TC_SALT_HEX_LEN - j, "%08x", byte_swap_32 (salt->salt_buf[i]));
|
|
|
|
|
}
|
|
|
|
|
hex_encode ((const u8 *) salt->salt_buf, TC_SALT_LEN, (u8 *) salt_buf);
|
|
|
|
|
|
|
|
|
|
// data
|
|
|
|
|
|
|
|
|
|
#define TC_DATA_HEX_LEN TC_DATA_LEN * 2 + 1
|
|
|
|
|
char data_buf[TC_DATA_HEX_LEN + 1] = { 0 };
|
|
|
|
|
|
|
|
|
|
char data_buf[TC_DATA_HEX_LEN] = { 0 };
|
|
|
|
|
|
|
|
|
|
for (u32 i = 0, j = 0; i < TC_DATA_LEN / 4; i += 1, j += 8)
|
|
|
|
|
{
|
|
|
|
|
snprintf (data_buf + j, TC_DATA_HEX_LEN - j, "%08x", byte_swap_32 (tc->data_buf[i]));
|
|
|
|
|
}
|
|
|
|
|
hex_encode ((const u8 *) tc->data_buf, TC_DATA_LEN, (u8 *) data_buf);
|
|
|
|
|
|
|
|
|
|
// output
|
|
|
|
|
|
|
|
|
|