mirror of
https://github.com/hashcat/hashcat.git
synced 2024-12-27 17:08:12 +00:00
Convert pstoken_parse_hash() to make use of input_tokenizer()
This commit is contained in:
parent
3caee75913
commit
d36e70b598
@ -1242,8 +1242,6 @@ typedef enum display_len
|
|||||||
DISPLAY_LEN_MAX_13200 = 1 + 7 + 1 + 1 + 1 + 1 + 50 + 1 + 32 + 1 + 48 + 1 + 20480,
|
DISPLAY_LEN_MAX_13200 = 1 + 7 + 1 + 1 + 1 + 1 + 50 + 1 + 32 + 1 + 48 + 1 + 20480,
|
||||||
DISPLAY_LEN_MIN_13400 = 1 + 7 + 1 + 1 + 1 + 1 + 1 + 1 + 32 + 1 + 64 + 1 + 32 + 1 + 64 + 1 + 1 + 1 + 1,
|
DISPLAY_LEN_MIN_13400 = 1 + 7 + 1 + 1 + 1 + 1 + 1 + 1 + 32 + 1 + 64 + 1 + 32 + 1 + 64 + 1 + 1 + 1 + 1,
|
||||||
DISPLAY_LEN_MAX_13400 = 1 + 7 + 1 + 1 + 10 + 1 + 3 + 1 + 64 + 1 + 64 + 1 + 32 + 1 + 64 + 1 + 4 + 1 + 600000 + 1 + 2 + 1 + 64,
|
DISPLAY_LEN_MAX_13400 = 1 + 7 + 1 + 1 + 10 + 1 + 3 + 1 + 64 + 1 + 64 + 1 + 32 + 1 + 64 + 1 + 4 + 1 + 600000 + 1 + 2 + 1 + 64,
|
||||||
DISPLAY_LEN_MIN_13500 = 40 + 1 + 32,
|
|
||||||
DISPLAY_LEN_MAX_13500 = 40 + 1 + 1024,
|
|
||||||
DISPLAY_LEN_MIN_13600 = 6 + 1 + 1 + 1 + 1 + 1 + 1 + 1 + 16 + 1 + 1 + 1 + 1 + 1 + 0 + 1 + 20 + 1 + 7,
|
DISPLAY_LEN_MIN_13600 = 6 + 1 + 1 + 1 + 1 + 1 + 1 + 1 + 16 + 1 + 1 + 1 + 1 + 1 + 0 + 1 + 20 + 1 + 7,
|
||||||
DISPLAY_LEN_MAX_13600 = 6 + 1 + 1 + 1 + 1 + 1 + 1 + 1 + 32 + 1 + 4 + 1 + 4 + 1 + 8192 + 1 + 20 + 1 + 7,
|
DISPLAY_LEN_MAX_13600 = 6 + 1 + 1 + 1 + 1 + 1 + 1 + 1 + 32 + 1 + 4 + 1 + 4 + 1 + 8192 + 1 + 20 + 1 + 7,
|
||||||
DISPLAY_LEN_MIN_13800 = 64 + 1 + 256,
|
DISPLAY_LEN_MIN_13800 = 64 + 1 + 256,
|
||||||
|
@ -5242,21 +5242,38 @@ int sha1s_parse_hash (u8 *input_buf, u32 input_len, hash_t *hash_buf, MAYBE_UNUS
|
|||||||
|
|
||||||
int pstoken_parse_hash (u8 *input_buf, u32 input_len, hash_t *hash_buf, MAYBE_UNUSED hashconfig_t *hashconfig)
|
int pstoken_parse_hash (u8 *input_buf, u32 input_len, hash_t *hash_buf, MAYBE_UNUSED hashconfig_t *hashconfig)
|
||||||
{
|
{
|
||||||
if ((input_len < DISPLAY_LEN_MIN_13500) || (input_len > DISPLAY_LEN_MAX_13500)) return (PARSER_GLOBAL_LENGTH);
|
|
||||||
|
|
||||||
u32 *digest = (u32 *) hash_buf->digest;
|
u32 *digest = (u32 *) hash_buf->digest;
|
||||||
|
|
||||||
salt_t *salt = hash_buf->salt;
|
salt_t *salt = hash_buf->salt;
|
||||||
|
|
||||||
pstoken_t *pstoken = (pstoken_t *) hash_buf->esalt;
|
pstoken_t *pstoken = (pstoken_t *) hash_buf->esalt;
|
||||||
|
|
||||||
if (is_valid_hex_string (input_buf, 40) == false) return (PARSER_HASH_ENCODING);
|
token_t token;
|
||||||
|
|
||||||
digest[0] = hex_to_u32 ((const u8 *) &input_buf[ 0]);
|
token.token_cnt = 2;
|
||||||
digest[1] = hex_to_u32 ((const u8 *) &input_buf[ 8]);
|
|
||||||
digest[2] = hex_to_u32 ((const u8 *) &input_buf[16]);
|
token.sep[0] = hashconfig->separator;
|
||||||
digest[3] = hex_to_u32 ((const u8 *) &input_buf[24]);
|
token.len_min[0] = 40;
|
||||||
digest[4] = hex_to_u32 ((const u8 *) &input_buf[32]);
|
token.len_max[0] = 40;
|
||||||
|
token.attr[0] = TOKEN_ATTR_VERIFY_LENGTH
|
||||||
|
| TOKEN_ATTR_VERIFY_HEX;
|
||||||
|
|
||||||
|
token.len_min[1] = 32;
|
||||||
|
token.len_max[1] = 1024;
|
||||||
|
token.attr[1] = TOKEN_ATTR_VERIFY_LENGTH
|
||||||
|
| TOKEN_ATTR_VERIFY_HEX;
|
||||||
|
|
||||||
|
const int rc_tokenizer = input_tokenizer (input_buf, input_len, &token);
|
||||||
|
|
||||||
|
if (rc_tokenizer != PARSER_OK) return (rc_tokenizer);
|
||||||
|
|
||||||
|
u8 *hash_pos = token.buf[0];
|
||||||
|
|
||||||
|
digest[0] = hex_to_u32 (hash_pos + 0);
|
||||||
|
digest[1] = hex_to_u32 (hash_pos + 8);
|
||||||
|
digest[2] = hex_to_u32 (hash_pos + 16);
|
||||||
|
digest[3] = hex_to_u32 (hash_pos + 24);
|
||||||
|
digest[4] = hex_to_u32 (hash_pos + 32);
|
||||||
|
|
||||||
digest[0] = byte_swap_32 (digest[0]);
|
digest[0] = byte_swap_32 (digest[0]);
|
||||||
digest[1] = byte_swap_32 (digest[1]);
|
digest[1] = byte_swap_32 (digest[1]);
|
||||||
@ -5264,21 +5281,14 @@ int pstoken_parse_hash (u8 *input_buf, u32 input_len, hash_t *hash_buf, MAYBE_UN
|
|||||||
digest[3] = byte_swap_32 (digest[3]);
|
digest[3] = byte_swap_32 (digest[3]);
|
||||||
digest[4] = byte_swap_32 (digest[4]);
|
digest[4] = byte_swap_32 (digest[4]);
|
||||||
|
|
||||||
if (input_buf[40] != hashconfig->separator) return (PARSER_SEPARATOR_UNMATCHED);
|
u8 *salt_pos = token.buf[1];
|
||||||
|
int salt_len = token.len[1];
|
||||||
u32 salt_len = input_len - 40 - 1;
|
|
||||||
|
|
||||||
u8 *salt_buf = input_buf + 40 + 1;
|
|
||||||
|
|
||||||
if (salt_len == UINT_MAX || salt_len % 2 != 0) return (PARSER_SALT_LENGTH);
|
|
||||||
|
|
||||||
u8 *pstoken_ptr = (u8 *) pstoken->salt_buf;
|
u8 *pstoken_ptr = (u8 *) pstoken->salt_buf;
|
||||||
|
|
||||||
if (is_valid_hex_string (salt_buf, salt_len) == false) return (PARSER_SALT_ENCODING);
|
for (int i = 0, j = 0; i < salt_len; i += 2, j += 1)
|
||||||
|
|
||||||
for (u32 i = 0, j = 0; i < salt_len; i += 2, j += 1)
|
|
||||||
{
|
{
|
||||||
pstoken_ptr[j] = hex_to_u8 ((const u8 *) &salt_buf[i]);
|
pstoken_ptr[j] = hex_to_u8 (salt_pos + i);
|
||||||
}
|
}
|
||||||
|
|
||||||
pstoken->salt_len = salt_len / 2;
|
pstoken->salt_len = salt_len / 2;
|
||||||
|
Loading…
Reference in New Issue
Block a user