Fixed a bug introduced in 1.7.9.5 where --show would omit the first hex digit
of LM hashes.  Thanks to magnum for reporting this and providing the patch.
1.7.9.7:
Fixed a bug introduced in 1.7.9.5 where --show would omit the first hex digit
of LM hashes.  Thanks to magnum for reporting this and providing the patch.
(The actual fix to loader.c was committed separately, on 2012/08/23.)
Self-test each format just once (rather than before the start of each cracking
mode) unless we're debugging.
Added support for format destructors (the done() method), which is important
e.g. when running --test across many GPU-using formats, not to run out of GPU
memory after testing only a subset of the formats.
Added reset(), a format method called whenever the set of password hashes being
cracked changes, such as after self-test, but before actual cracking starts.
Normally, this is a no-op since a format implementation shouldn't mess with the
database unnecessarily.  However, when there is a good reason to do so this may
e.g. transfer the salts and hashes onto a GPU card.
Revised the crypt_all() format method prototype and semantics such that it may
optionally perform preliminary checking for possible matches.
Revised the crypt_all() format method prototype and semantics, as well as the
semantics of get_key() and some other format methods called after crypt_all(),
such that crypt_all() may alter and/or generate candidate passwords on its own,
including beyond its originally supplied candidate password count.
Handle possible NULL returns from crypt() and crypt_r()
1.7.9.8:
- The formats interface has been enhanced to better support GPU implementations
(in jumbo), as well as fast hashes on multi-CPU systems (not yet made use of).
- Handle possible NULL returns from crypt() and crypt_r().
Fixed OpenMP-specific issues with the previous change: make stderr available in
the parallel region, wrap the warning printing in "#pragma omp critical".
Revised incremental mode such that the counts of character indices grow
independently for each position.  This change breaks compatibility with older
.chr files.
Dropped the remnants of old .chr file compatibility code
Source code indentation: consistently put the blocks after "if" on a new line
Optimized the charset file generation algorithms and code ("--make-charset").
On a certain test case, this has improved the time to generate a charset file
from 55.5 to 19.5 seconds while generating the exact same file.
In cmp_ratio(), stabilize the sorting order differently from the way we
happened to be doing it before.  This results in subtly different charset files
being generated for the same input data, but arguably the new stabilization is
more logical, and it helps reduce the number of recalculations and thus speeds
up charset file generation (now 16.5 seconds in the test case mentioned in the
previous commit).
Stabilize the sort order in cmp_count()
Minor optimizations in cmp_ratio()
In count_sort_t, renamed the pos field to index since its meaning is different
from that of the pos variable that we use in the same function.
Allocate memory up to the currently configured max_length, not up to the
(possibly larger) charset file's header->length.
Don't store/restore the counts array, but instead infer its contents by
processing the order just like we do during actual cracking.  This change is
needed to speedup fix_state() and to reduce the .rec file size, which is
desirable for reliability.