|
Message-ID: <20150507142449.GA12369@openwall.com> Date: Thu, 7 May 2015 17:24:49 +0300 From: Solar Designer <solar@...nwall.com> To: john-dev@...ts.openwall.com Subject: Re: get_binary_*() and get_hash_*() methods Aleksey, On Thu, May 07, 2015 at 05:11:34PM +0300, Solar Designer wrote: > On Thu, May 07, 2015 at 04:17:00PM +0300, Aleksey Cherepanov wrote: > > May cmp_one() be called without cmp_all()? > > You should assume that it may, yet you may choose to optimize for the > case when cmp_all() is called first. As you probably already figured out, cmp_all() is in fact skipped when bitmaps and hash tables are in use. Please see two versions of the loop in crk_password_loop(): if (!salt->bitmap) { pw = salt->list; do { if (crk_methods.cmp_all(pw->binary, match)) for (index = 0; index < match; index++) if (crk_methods.cmp_one(pw->binary, index)) if (crk_methods.cmp_exact(crk_methods.source( pw->source, pw->binary), index)) { if (crk_process_guess(salt, pw, index)) return 1; else break; } } while ((pw = pw->next)); } else for (index = 0; index < match; index++) { int hash = salt->index(index); if (salt->bitmap[hash / (sizeof(*salt->bitmap) * 8)] & (1U << (hash % (sizeof(*salt->bitmap) * 8)))) { pw = salt->hash[hash >> PASSWORD_HASH_SHR]; do { if (crk_methods.cmp_one(pw->binary, index)) if (crk_methods.cmp_exact(crk_methods.source( pw->source, pw->binary), index)) if (crk_process_guess(salt, pw, index)) return 1; } while ((pw = pw->next_hash)); } } Alexander
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.