|
|
Message-ID: <20150508115831.GA6499@openwall.com>
Date: Fri, 8 May 2015 14:58:31 +0300
From: Aleksey Cherepanov <lyosha@...nwall.com>
To: john-dev@...ts.openwall.com
Subject: Re: get_binary_*() and get_hash_*() methods
On Tue, May 05, 2015 at 10:40:24PM +0200, magnum wrote:
> On 2015-05-05 21:53, Aleksey Cherepanov wrote:
> >Does binary_hash_6() and get_hash_6() functions have to return the
> >same values for the same hashes?
>
> Yes that's the whole point of these functions, and the self-tests tries to
> verify this.
In dummy.c:
static int get_hash_0(int index)
{
ARCH_WORD_32 hash = string_hash(saved_key[index]);
hash ^= hash >> 8;
return (hash ^ (hash >> 4)) & 0xf;
}
[...]
static int get_hash_4(int index)
{
return string_hash(saved_key[index]) & 0xfffff;
}
So I think it is ok to have different algorithms in get_hash*() methods.
As Solar Designer told, get_hash*() methods are slow for bitslice.
DES_bs.c:
int DES_bs_get_hash_0(int index)
{
return DES_bs_get_hash(index, 4, 0);
}
int DES_bs_get_hash_1(int index)
{
return DES_bs_get_hash(index, 8, 0);
}
static MAYBE_INLINE int DES_bs_get_hash(int index, int count, int trip)
[...]
result = GET_BIT(0);
result |= MOVE_BIT(1);
result |= MOVE_BIT(2);
result |= MOVE_BIT(3);
if (count == 4) return result;
result |= MOVE_BIT(4);
result |= MOVE_BIT(5);
result |= MOVE_BIT(6);
b += trip; /* for tripcodes, skip bit 7 */
result |= MOVE_BIT(7);
if (count == 8) return result;
DES_bs_get_hash() collects 'count' bits starting from 0. Though we may
just return bits 0-3 from get_hash_1(), bits 4-7 from get_hash_2()
(i.e. without bits 0-3) and so on not collecting the whole chain of 27
bits (or like that, most probably starting with fewer operators). Or
is it required to return a hash with ~31 bits of information about the
hash from get_hash_6? Or the question may sound differently: are
get_hash[]() methods called sequentially for each binary like the
following algo?
for each index
if not table_0[get_hash[0](index)]
next index
end if
if not table_1[get_hash[1](index)]
next index
end if
...
if not table_6[get_hash[6](index)]
next index
end if
... most probably hash is matching ...
end for
Thanks!
--
Regards,
Aleksey Cherepanov
Powered by blists - more mailing lists
Confused about mailing lists and their use? Read about mailing lists on Wikipedia and check out these guidelines on proper formatting of your messages.