Giter VIP home page Giter VIP logo

john-tests's People

Contributors

claudioandre-br avatar frank-dittrich avatar jfoug avatar kholia avatar magnumripper avatar ukasz avatar

Stargazers

 avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar

Watchers

 avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar

john-tests's Issues

New TS dictionary

I have created a c++ file that generates a new input dictionary. I am hopeful that this dictionary will help put a bit more stress on JtR, especially on length boundary issues.

There are no passwords with a ':' char (colon)
there are no passwords that have a space and ( char together, i.e " (" (this is a problem for some new logic in the TS)
I tried to get the start of each password to be unique. This is so that JtR chopping off the word to a shorter length will not match anything.
All passwords are 4 bytes or more (except for a null pw, and a single letter password).
I tried to make some sections vary greatly between lengths of adjacent passwords.
I have areas where passwords grow or shrink in size each time.
I have areas where passwords grow or shrink every 5 passwords.
I have values that have high bits set (but it was much more controlled that before).

Please comment on this strategy NOTE, if we put the passwords in the input files, they will be larger, since we are using longer passwords for input.

580bc7d
59e8737

TS: Test more modes

We currently only test wordlist mode, without rules.

We should test variants of the wordlist mode (rules, loopback, --min/max-length, dupe suppression, --mem=1, pipe and stdin) as well as other modes (incremental, markov, mask, perhaps some external mode). These tests can be performed using just a few, or even one single format (descrypt and NT would be a good choice because they include 7-bit, Unicode and short length).

Example:

  1. (on the fly) produce a dictionary using --incremental --stdout. Pick all the first 500 words and then 1000 more out of eg. 150000 (randomly distributed but using a fixed random seed - so reproducible!).
  2. (on the fly) produce NT hashes from the dict
  3. run JtR on the NT hashes, using --incremental
  4. delete the generated files

If the above is cleverly implemented, the same function can be used with markov or other modes instead of incremental.

If the --show command fails, jtrts.pl -v should print the failing --show command...

To reproduce, first checkout commit 250c03d.

Then run

$ ./jtrts.pl -v -stoponerror -passthru="--mkpc=4"
-------------------------------------------------------------------------------
- JtR-TestSuite (jtrts). Version 1.13, Dec 21, 2014.  By, Jim Fougeron & others
- Testing:  John the Ripper password cracker, version 1.8.0.4-jumbo-1-bleeding [linux-gnu 32-bit AVX2-autoconf]
--------------------------------------------------------------------------------

John Jumbo build detected.
Can't set mkpc larger than 2 for bcrypt format
--pot=NAME option is valid
--encoding=NAME option is valid
all.chr (../run/all.chr) not found
alnum.chr found, inc_alnum_ee8763c850dee8e4b88ef547a8ed39b8 added as a capability
Setting default for john-jumbo to be:   base+koi8r+utf8
Capabilities in this build of john:
jumbo core inc local_pot_valid encode_valid utf8 cp1252 cp1251 koi8r cp437 cp737 cp850 cp858 cp866 iso8859-1 iso8859-15 inc_alnum_ee8763c850dee8e4b88ef547a8ed39b8

form=dynamic_0                    guesses: 1500 -show=   0 0:00:00:00 DONE : Expected count(s) (1500)(-show1502)  [!!!FAILED3!!!]
Exiting on error. The .pot file ./tst.pot contains the found data
The command used to run this test was:

../run/john -ses=./tst  --mkpc=4 -pot=./tst.pot dynamic_0_tst.in --wordlist=pw.dic

Since the error was that --show doesn't allow --mkpc, the last line of output should have been the failing ../run/john --show command.

Alternate tests for all formats, independent of jtrts.dat

Over the last few months we've seen at least two formats that were not in TS and that could not crack their own test vectors when put in an external file and ran like IRL.

We should automate this. Just use --list=formats and iterate over them.

Then, for each format:

  • Run john -format=$fmt -list=format-tests | cut -f3 > tempfile
  • Run john -format=$fmt -list=format-tests | cut -f4 > tempdict
  • Perhaps cat pw.dic tempdict | shuf > tempdict2 or something like that
  • Finally john -format=$fmt tempfile -w:tempdict2
  • Verify results

Parsing error for status lines ending with ')'

See also the last comments in openwall/john#1074.
It is a real TS bug (parsing error, not related to mangled stdout output due to fork.)

Here is how to reproduce it without fork:

First make sure that all the passwords in pw-new.dic that end with a ) character are at the end of that file:

(master)test $ grep "[)]$" pw-new.dic > pw-new.dic2
(master)test $ grep -v "[)]$" pw-new.dic > pw-new.dic1
cat pw-new.dic1 pw-new.dic2 > pw-new.dic

Then

(master)test $ ./jtrts.pl -type=dynamic -stoponerror
-------------------------------------------------------------------------------
- JtR-TestSuite (jtrts). Version 1.13, Dec 21, 2014.  By, Jim Fougeron & others
- Testing:  John the Ripper password cracker, version 1.8.0.2-jumbo-1-bleeding_omp [linux-gnu 64-bit AVX-autoconf]
--------------------------------------------------------------------------------

John Jumbo build detected.

form=dynamic_0                    guesses: 1502 0:00:00:00 DONE  [PASSED]
.pot CHK:dynamic_0                guesses: 1500 0:00:00:00 DONE  [PASSED] (1500 val-pwd)

form=dynamic_0                    guesses:  920 0:00:00:00 DONE  [PASSED]
.pot CHK:dynamic_0                guesses:  920 -show= 920 0:00:00:00 DONE : Expected count(s) (1500)  [!!!FAILED4!!!]  (920 val-pwd  1 inval-pwd)
Exiting on error. The .pot file ./tst.pot contains the found data
The command used to run this test was:

../run/john -ses=./tst  -pot=./tst.pot dynamic_0_new_tst.in --wordlist=pw-new.dic
(master)test $ ./jtrts.pl -type=dynamic -stoponerror -v -v
...
t6)FppppV'j)     (t6)FppppV'j))
?ziypppppG"Z)    (?ziypppppG"Z))
Warning: detected hash type "dynamic_0", but the string is also recognized as "Raw-MD5"
Use the "--format=Raw-MD5" option to force loading these as that type instead
Warning: poor OpenMP scalability for this hash type, consider --fork=8
Will run 8 OpenMP threads
Press 'q' or Ctrl-C to abort, almost any other key for status
920g 0:00:00:00 DONE (2015-03-04 16:52) 30666g/s 30666p/s 30666c/s 28213KC/s aab2b..?ziypppppG"Z)
Use the "--show" option to display all of the cracked passwords reliably
Session completed


FAILED line = guesses: 920  0:00:00:00 DONE (2015-03-04 16:52) 30666g/s 30666p/s 30666c/s 28213KC/s aab2b..?ziypppppG"Z)
Execute john: ../run/john -show   -pot=./tst.pot dynamic_0_new_tst.in -form=dynamic_0 2>&1

d_show_line2 = 
920 password hashes cracked, 580 left
1 invalid passwords
920 valid passwords

.pot CHK:dynamic_0                guesses:  920 -show= 920 0:00:00:00 DONE : Expected count(s) (1500)  [!!!FAILED4!!!]  (920 val-pwd  1 inval-pwd)
Exiting on error. The .pot file ./tst.pot contains the found data
The command used to run this test was:

../run/john -ses=./tst  -pot=./tst.pot dynamic_0_new_tst.in --wordlist=pw-new.dic

Out of 920 passwords, there are 920 valid passwords + 1 invalid (due to the parsing error)

./jtrtr -passthru <s> is useless

Certain john options can only be used for real cracking, not for --test or --show etc.
That's why, -passthru should either be changed to just pass additional options to the real cracking run, or another ./jtrts option is needed to allow passing options like --fork=2 to real cracking.

(master)test $ ./jtrts.pl -passthru "--fork=2"
-------------------------------------------------------------------------------
- JtR-TestSuite (jtrts). Version 1.12.14, June 30, 2014.  By, Jim Fougeron & others
- Testing:  John the Ripper password cracker, version 1.8.0.2-bleeding-jumbo [linux-gnu 64-bit AVX-autoconf]
--------------------------------------------------------------------------------

John Jumbo build detected.
testing: john -test=0  
Invalid options combination or duplicate option: "-test=0"
testing: john -test=0 --encoding=utf8
Invalid options combination or duplicate option: "-test=0"
testing: john -test=0 --encoding=koi8r
Invalid options combination or duplicate option: "-test=0"

form=dynamic_0                    guesses:    0 unk unk : Expected count(s) (1500)  [!!!FAILED!!!]
.pot CHK:dynamic_0                guesses:    0 unk unk  [PASSED]

[...]

form=dynamic_20                   guesses:    0 unk unk : Expected count(s) (1500)  [!!!FAILED!!!]
.pot CHK:dynamic_20               guesses:    0 unk unk  [PASSED]
sh: line 1: 23469 Segmentation fault      (core dumped) ../run/john -ses=./tst --fork=2 -pot=./tst.pot dynamic_21_tst.in --wordlist=pw.dic 2>&1 > /dev/null

form=dynamic_21                   guesses:    0 unk unk : Expected count(s) (1500)  [!!!FAILED!!!]
.pot CHK:dynamic_21               guesses:    0 unk unk  [PASSED]

[...]

form=rar                          guesses:    0 unk unk : Expected count(s) (130)  [!!!FAILED!!!]
.pot CHK:rar                      guesses:    0 unk unk  [PASSED]

Some tests had Errors. Performed 289 tests.289 errors
Time used was 1052 seconds

The tests pass if I don't try to use --fork=2

jtrts assumes core john supports md5_smd5, but it doesn't

(master)test $ ./jtrts.pl -type full -v -stoponerror
-------------------------------------------------------------------------------
- JtR-TestSuite (jtrts). Version 1.13, Dec 21, 2014.  By, Jim Fougeron & others
- Testing:  John the Ripper password cracker, version 1.8.0
--------------------------------------------------------------------------------

John CORE build detected.  Only core formats can be tested.
all.chr (../run/all.chr) not found
alnum.chr (../run/alnum.chr) not found
Types to filter on:
full
Capabilities in this build of john:
core inc

form=md5crypt                     guesses: 1500 0:00:00:12 DONE  [PASSED]
.pot CHK:md5crypt                 guesses: 1500 0:00:00:09 100%  [PASSED] (1500 val-pwd)

form=md5_apr1                     guesses: 1500 0:00:00:12 DONE  [PASSED]
.pot CHK:md5_apr1                 guesses: 1500 0:00:00:10 100%  [PASSED] (1500 val-pwd)

form=md5_smd5                     guesses:    0 -show=   0 unk unk : Expected count(s) (1500)  [!!!FAILED!!!]
Exiting on error. The .pot file ../run/john.pot contains the found data
The command used to run this test was:

../run/john -ses=./tst  md5crypt-smd5_tst.in --wordlist=pw-80.dic -form=md5crypt
(master)test $ ../run/john -ses=./tst  md5crypt-smd5_tst.in --wordlist=pw-80.dic -form=md5crypt
No password hashes loaded (see FAQ)
(master)test $ ../run/john -ses=./tst  md5crypt-smd5_tst.in --wordlist=pw-80.dic 
No password hashes loaded (see FAQ)

./jtrts.pl -prelims -q doesn't filter john's stderr output

(master)test $ ./jtrts.pl -prelims -q
-------------------------------------------------------------------------------
- JtR-TestSuite (jtrts). Version 1.13, Dec 21, 2014.  By, Jim Fougeron & others
- Testing:  John the Ripper password cracker, version 1.8.0.2-jumbo-1-bleeding_omp [linux-gnu 64-bit AVX2-autoconf]
--------------------------------------------------------------------------------
Will run 4 OpenMP threadst=0   
Will run 4 OpenMP threadst=0 --encoding=utf8 
Will run 4 OpenMP threadst=0 --encoding=koi8r 
All tests passed without error.  Performed 195 tests.  Time used was 318 seconds

The Will run 4 OpenMP threads is john's stderr output.

Mask mode tests

See openwall/john#841 for lots of very small tests that TS should verify (if there is a mask mode present at all). They will ensure ranges and placeholders are parsed (or not) correctly, when things are escaped.

Support new --test=0 output

Testing: descrypt, traditional crypt(3) [DES 128/128 AVX-16]... PASS
Testing: bsdicrypt, BSDI crypt(3) ("_J9..", 725 iterations) [DES 128/128 AVX-16]... PASS
Testing: md5crypt, crypt(3) $1$ [MD5 128/128 AVX 12x]... PASS
Testing: bcrypt ("$2a$05", 32 iterations) [Blowfish 32/64 X2]... PASS
Testing: scrypt (16384, 8, 1) [Salsa20/8 128/128 AVX]... PASS
...
Testing: PFX, PKCS12 (.pfx, .p12) [32/64]... PASS
Testing: rar, RAR3 (4 characters) [SHA1 AES 32/64]... PASS
Testing: SSH (one 2048-bit RSA and one 1024-bit DSA key) [RSA/DSA 32/64]... PASS
Testing: wpapsk, WPA/WPA2 PSK [PBKDF2-SHA1 128/128 AVX 8x]... PASS
Testing: crypt, generic crypt(3) DES [?/64]... PASS
All 361 formats passed self-tests!

Old style output still needs to be supported:

Warning: doing quick benchmarking - the performance numbers will be inaccurate
Benchmarking: descrypt, traditional crypt(3) [DES 128/128 AVX-16]... DONE
Many salts: 5568K c/s real, 5568K c/s virtual
Only one salt:  1740K c/s real, 3481K c/s virtual

...
Benchmarking: crypt, generic crypt(3) DES [?/64]... DONE
Many salts: 307200 c/s real, 307200 c/s virtual
Only one salt:  201600 c/s real, 201600 c/s virtual

All 361 formats passed self-tests!

-internal Current failures

Start working on these. Some we will fix jtrts.pl (list when we do), and some we will fix the format. Some we may just accept the problem,, but at least list why.

NOTE, this list updated with cpu AFTER 9a46ca2 was applied.

$ ./jtrts.pl -internal -q -case_mangle cpu  ***** ALL FIXED *****


here is the GPU failures from my laptop (NOTE some are driver fails)

$ ./jtrts.pl -internal -case_mangle gpu
-------------------------------------------------------------------------------
- JtR-TestSuite (jtrts). Version 1.13, Dec 21, 2014.  By, Jim Fougeron & others
- Testing:  John the Ripper password cracker, version 1.8.0.2-jumbo-1-bleeding_omp [cygwin 64-bit XOP-autoconf]
--------------------------------------------------------------------------------

ALL of these fail ST on my laptop card.
descrypt-opencl           guesses:    0 -show=   0 0:00:00:00 DONE : Expected (6)(-show6)
pbkdf2-hmac-sha512-opencl guesses:    0 -show=   0 0:00:00:38 DONE : Expected (9)(-show27)
sha256crypt-opencl        guesses:    0 -show=   0 0:00:00:01 DONE : Expected (4)(-show4)
sha512crypt-opencl        guesses:    0 -show=   0 0:00:00:01 DONE : Expected (5)(-show5)


krb5pg-md5 fails ST on get_hash[0](3)  The only reason it finds 6 (vs 9), is because we are using -skip
krb5pa-md5-opencl         guesses:    6 -show=  21 0:00:00:00 DONE : Expected (9)(-show27)

oldoffice-opencl  fails ST on cmp_all(1)  The only reason it finds 6 (vs 9), is because we are using -skip
oldoffice-opencl          guesses:    1 -show=   3 0:00:00:00 DONE : Expected (5)(-show15)

gpg crashed my driver
gpg-opencl                guesses:    0 -show=   0 unk unk : Expected (6)(-show6)

Fixed split() function (for tagged hashes)
raw-sha512-opencl         guesses:   13 -show=  33 0:00:00:00 DONE : Expected (12)(-show36)

These were fixed by making them FMT_SPLIT_UNI formats

form=skein-256                    guesses:    1 0:00:00:00 DONE  [PASSED]
form=skein-512                    guesses:    2 0:00:00:00 DONE  [PASSED]
form=tiger                        guesses:    2 0:00:00:00 DONE  [PASSED]
form=whirlpool                    guesses:    1 0:00:00:00 DONE  [PASSED]
form=whirlpool0                   guesses:    1 0:00:00:00 DONE  [PASSED]
form=whirlpool1                   guesses:    1 0:00:00:00 DONE  [PASSED]

These were fixed by making non proper cased hashes fail valid()

./jtrts.pl -stoponerror should stop even when a test passes, but john exits with $? > 0

This is especially important if -random -seed=n is used, because otherwise it might be hard to get hold of the rendomized dictionary file to reproduce the error.

The following change is required:

(master)test $ git diff
diff --git a/jtrts.pl b/jtrts.pl
index 15097bc..d428b83 100755
--- a/jtrts.pl
+++ b/jtrts.pl
@@ -793,6 +793,12 @@ sub process {
                        my $str = sprintf("form=%-28.28s guesses: %4.4s $crack_xx[3] $crack_xx[4]  [pass, but return code $ret_val]\n", $ar[4], $orig_crack_cnt);
                        ScreenOutAlways($str);
                        $ret_val_non_zero_cnt += 1;
+                       if ($stop_on_error) {
+                               ScreenOut("Exiting on error.  The pot file $pot contains the found data\n");
+                               $cmd =~ s# 2>&1 >/dev/null##;
+                               ScreenOut("The command used to run this test was:\n\n$cmd\n");
+                               exit(1);
+                       }
                }
                if ($dict_name_ex ne "") {
                        unlink ($dict_name_ex);
@@ -875,6 +881,12 @@ sub process {
                                my $str = sprintf(".pot CHK:%-24.24s guesses: %4.4s $crack_xx[3] $crack_xx[4]  [pass, but return code $ret_val]\n", $ar[4], $orig_pot_cnt);
                                ScreenOutAlways($str);
                                $ret_val_non_zero_cnt += 1;
+                               if ($stop_on_error) {
+                                       ScreenOut("Exiting on error.  The pot file $pot contains the found data\n");
+                                       $cmd =~ s# 2>&1 >/dev/null##;
+                                       ScreenOut("The command used to run this test was:\n\n$cmd\n");
+                                       exit(1);
+                               }
                        }
                        unlink("$pot");
                        unlink("pw3");

BTW, meanwhile there are several instances of if ($stop_on_error) { ... }. I hesitated to add even more copies, that's why no commit.
May be the stoponerror handling should be moved into a separate subroutine.

TS errors after new Unicode defaults

Not sure yet whether this is due to the recent memdbg, utf-8 default, or other changes, or a mix of those.


$ ./jtrts.pl -q
-------------------------------------------------------------------------------
- JtR-TestSuite (jtrts). Version 1.13, Dec 21, 2014.  By, Jim Fougeron & others
- Testing:  John the Ripper password cracker, version 1.8.0.4-jumbo-1-bleeding_omp_memdbg [linux-gnu 64-bit AVX-autoconf]
--------------------------------------------------------------------------------
Warning: SAP-B format should never be UTF-8.
Use --target-encoding=iso-8859-1 or whatever is applicable.
form=dynamic_29-raw               guesses: 1229 -show=1229 0:00:00:00 DONE : Expected count(s) (1500)  [!!!FAILED1!!!]
form=dynamic_29                   guesses: 1229 -show=1229 0:00:00:00 DONE : Expected count(s) (1500)  [!!!FAILED1!!!]
form=dynamic_33                   guesses: 1229 -show=1229 0:00:00:00 DONE : Expected count(s) (1500)  [!!!FAILED1!!!]
form=dynamic_33                   guesses: 1327 -show=1327 0:00:00:00 DONE : Expected count(s) (1500)(1365)  [!!!FAILED1!!!]
form=dynamic_33-NT                guesses: 1229 -show=1229 0:00:00:00 DONE : Expected count(s) (1500)  [!!!FAILED1!!!]
form=dynamic_1032                 guesses:    0 -show=   0 unk unk : Expected count(s) (1500)  [!!!FAILED2!!! exited, return code 1]
.pot CHK:dynamic_1032             guesses:    0 -show=   0 unk unk : Expected count(s) (1500)  [!!!FAILED4!!!]  (0 val-pwd  1 inval-pwd)
form=dynamic_1400                 guesses:    0 -show=   0 unk unk : Expected count(s) (1500)  [!!!FAILED2!!! exited, return code 1]
.pot CHK:dynamic_1400             guesses:    0 -show=   0 unk unk : Expected count(s) (1500)  [!!!FAILED4!!!]  (0 val-pwd  1 inval-pwd)
form=dynamic_1400                 guesses:    0 -show=   0 unk unk : Expected count(s) (1500)(920)  [!!!FAILED2!!! exited, return code 1]
.pot CHK:dynamic_1400             guesses:    0 -show=   0 unk unk : Expected count(s) (1500)  [!!!FAILED4!!!]  (0 val-pwd  1 inval-pwd)
form=raw-md5u-raw                 guesses: 1229 -show=1229 0:00:00:00 DONE : Expected count(s) (1500)  [!!!FAILED1!!!]
form=raw-md5u                     guesses: 1229 -show=1229 0:00:00:00 DONE : Expected count(s) (1500)  [!!!FAILED1!!!]
form=raw-md5u                     guesses: 1229 -show=1229 0:00:00:00 DONE : Expected count(s) (1500)  [!!!FAILED1!!!]
form=raw-md5u-raw                 guesses: 1229 -show=1229 0:00:00:00 DONE : Expected count(s) (1500)  [!!!FAILED1!!!]
form=NT                           guesses: 1229 -show=1229 0:00:00:00 DONE : Expected count(s) (1500)  [!!!FAILED1!!!]
form=NT-raw                       guesses: 1229 -show=1229 0:00:00:00 DONE : Expected count(s) (1500)  [!!!FAILED1!!!]
form=mscash                       guesses: 1229 -show=1229 0:00:00:00 DONE : Expected count(s) (1500)  [!!!FAILED1!!!]
form=mscash_crash                 guesses: 1169 -show=1169 0:00:00:00 DONE : Expected count(s) (1440)  [!!!FAILED1!!!]
form=pwdump_lm                    guesses:  646 -show=2385 0:00:00:00 DONE : Expected count(s) (986)(-show2760)  [!!!FAILED1!!!]
form=pwdump_nt                    guesses: 1229 -show=1229 0:00:00:00 DONE : Expected count(s) (1500)  [!!!FAILED1!!!]
form=krb5pa-md5                   guesses: 1229 -show=1229 0:00:00:02 DONE : Expected count(s) (1500)  [!!!FAILED1!!!]
form=krb5pa-md5                   guesses: 1442 -show=1442 0:00:00:01 DONE : Expected count(s) (1500)  [!!!FAILED1!!!]
form=MSSql12                      guesses: 1229 -show=1229 0:00:00:00 DONE : Expected count(s) (1500)  [!!!FAILED1!!!]
form=MSSql05                      guesses: 1229 -show=1229 0:00:00:00 DONE : Expected count(s) (1500)  [!!!FAILED1!!!]
form=MSSql                        guesses: 1229 -show=1229 0:00:00:00 DONE : Expected count(s) (1500)  [!!!FAILED1!!!]
.pot CHK:MSSql-8859-1             guesses: 1195 -show=1195 0:00:00:00 DONE : Expected count(s) (1500)  [!!!FAILED4!!!]  (1195 val-pwd  0 inval-pwd)
.pot CHK:MSSql-8859-1-gen         guesses:  390 -show= 390 0:00:00:00 DONE : Expected count(s) (1500)  [!!!FAILED4!!!]  (390 val-pwd  0 inval-pwd)
form=oracle                       guesses: 1229 -show=1229 0:00:00:00 DONE : Expected count(s) (1500)  [!!!FAILED1!!!]
form=netntlm-naive                guesses: 1229 -show=1229 0:00:00:00 DONE : Expected count(s) (1500)  [!!!FAILED1!!!]
form=netntlm-naive-l0phtcrack     guesses: 1229 -show=1229 0:00:00:00 DONE : Expected count(s) (1500)  [!!!FAILED1!!!]
form=netlm-l0phtcrack             guesses: 1069 -show=1069 0:00:00:00 DONE : Expected count(s) (1351)  [!!!FAILED1!!!]
form=netlmv2                      guesses: 1229 -show=1229 0:00:00:02 DONE : Expected count(s) (1500)  [!!!FAILED1!!!]
form=netntlmv2                    guesses: 1229 -show=1229 0:00:00:02 DONE : Expected count(s) (1500)  [!!!FAILED1!!!]
form=mschapv2-naive               guesses: 1229 -show=1229 0:00:00:00 DONE : Expected count(s) (1500)  [!!!FAILED1!!!]
form=episerver_sha1               guesses: 1229 -show=1229 0:00:00:00 DONE : Expected count(s) (1500)  [!!!FAILED1!!!]
form=episerver_sha256             guesses: 1229 -show=1229 0:00:00:01 DONE : Expected count(s) (1500)  [!!!FAILED1!!!]
sh: line 1:  3639 Segmentation fault      (core dumped) ../run/john -ses=tst -pot=tst.pot sybasease_tst.in --wordlist=pw.dic -form=sybasease 2>&1 > /dev/null
form=sybasease                    guesses:    0 -show=   0 unk unk : Expected count(s) (1500)  [!!!FAILED2!!! exited, return code 139]
.pot CHK:sybasease                guesses:    0 -show=   0 unk unk : Expected count(s) (1500)  [!!!FAILED4!!!]  (0 val-pwd  1 inval-pwd)
[...]

jtrTestSuite fails in some situations

A command like this, that used to work, is failing now:

I expect 5 tests performed (not two).

./jtrts.pl -noprelims -stoponerror -type raw-sha256-opencl raw-sha512-ng-opencl sha256crypt-opencl sha512crypt-opencl xsha512-ng-opencl -passthru "-pla:0 -de:1"
-------------------------------------------------------------------------------
- JtR-TestSuite (jtrts). Version 1.12.11, July 20, 2012.  By, Jim Fougeron & others
- Testing:  John the Ripper password cracker, version 1.8.0.1-bleeding-jumbo [linux-x86-64-opencl]
--------------------------------------------------------------------------------

John Jumbo build detected.

form=sha256crypt-opencl           guesses: 1500 0:00:00:01 DONE  [PASSED]
.pot CHK:sha256crypt-opencl       guesses: 1500 0:00:00:01 DONE  [PASSED]

form=sha512crypt-opencl           guesses: 1500 0:00:00:01 DONE  [PASSED]
.pot CHK:sha512crypt-opencl       guesses: 1500 0:00:00:01 DONE  [PASSED]

All tests passed without error.  Performed 2 tests.  Time used was 18 seconds

./jtrts.pl -internal -q fails for form=osc

"caused" by openwall/john@546a203 which repeated the test hash in the canonical format used for john.pot.

(master)test $ ./jtrts.pl -internal -q
-------------------------------------------------------------------------------
- JtR-TestSuite (jtrts). Version 1.13, Dec 21, 2014.  By, Jim Fougeron & others
- Testing:  John the Ripper password cracker, version 1.8.0.2-jumbo-1-bleeding_omp [linux-gnu 64-bit AVX2-autoconf]
--------------------------------------------------------------------------------
form=osc                          guesses:    1 -show=   1 0:00:00:00 DONE : Expected count(s) (2)(-show2)  [!!!FAILED!!!]
Some tests had Errors. Performed 295 tests.  1 errors00:00 DONE  [PASSED]
Time used was 75 seconds

I didn't revert this JtR addition:

+ // repeat hash in the same form that is used in john.pot
+ {"$dynamic_4$05de5c963ee6234dc7d52f7589a1922b$ ", "welcome"},

Because I think it is a TS problem. (./john --test doesn't fail)

Missing lotus5-opencl in JtrTestSuite

From 1fc9bcd1857ad9035fe64f2e83dcc1caab38794a Mon Sep 17 00:00:00 2001
From: =?UTF-8?q?Claudio=20Andr=C3=A9?= <[email protected]>
Date: Sun, 14 Sep 2014 20:33:05 -0300
Subject: [PATCH 2/2] Add lotus5-opencl to JtrTestSuite.

---
 jtrts.dat | 1 +
 1 file changed, 1 insertion(+)

diff --git a/jtrts.dat b/jtrts.dat
index a99ccb0..c5655f1 100644
--- a/jtrts.dat
+++ b/jtrts.dat
@@ -535,6 +535,7 @@
 (opencl)(gpu),(X),(jumbo)&(opencl),30,rar-opencl,pw,rar_tst.in,rar-opencl,Y,X,(130),(130)
 (opencl)(gpu),(X),(jumbo)&(opencl),10000,rakp-opencl,pw,rakp_tst.in,rakp-opencl,Y,X,(1500)(1451),(1500)(1451)
 (opencl)(gpu),(X),(jumbo),10000,krb5pa-md5-opencl,pw,mskrb5_tst.in,krb5pa-md5-opencl,Y,X,(1500),(1500)
+(opencl)(gpu),(X),(jumbo),10000,lotus5-opencl,pw,lotus5_tst.in,lotus5-opencl,Y,X,(1500),(1500)

 # This is a very slow, and VERY large input file hash.
 (ssh),(full),(jumbo),1600,ssh,pass,ssh_1500_tst.in,ssh,N,X,(1500),(1500)
-- 
1.9.1

john.local.conf is a footgun

openwall/john#758 (comment)

I got really weird results and could not find the problem until long after: Turned out I had custom encoding and UTF-8 settings in john.local.conf.

If possible we should warn about that situation, but I'm not sure how to detect it from TS.

Should jtrts.pl handle -passthru="--dupe-suppression" or -passthru="--save-memory=1"?

$ ./jtrts.pl -v -stoponerror -passthru="--dupe-suppression"
-------------------------------------------------------------------------------
- JtR-TestSuite (jtrts). Version 1.13, Dec 21, 2014.  By, Jim Fougeron & others
- Testing:  John the Ripper password cracker, version 1.8.0.4-jumbo-1-bleeding [linux-gnu 32-bit AVX2-autoconf]
--------------------------------------------------------------------------------

John Jumbo build detected.
Invalid options combination or duplicate option: "--dupe-suppression"
--pot=NAME option is valid
--encoding=NAME option is valid
all.chr (../run/all.chr) not found
alnum.chr found, inc_alnum_ee8763c850dee8e4b88ef547a8ed39b8 added as a capability
Setting default for john-jumbo to be:   base+koi8r+utf8
Capabilities in this build of john:
jumbo core inc local_pot_valid encode_valid utf8 cp1252 cp1251 koi8r cp437 cp737 cp850 cp858 cp866 iso8859-1 iso8859-15 inc_alnum_ee8763c850dee8e4b88ef547a8ed39b8

form=asa-md5                      guesses: 1500 0:00:00:00 DONE  [PASSED]
Use of uninitialized value in split at ./jtrts.pl line 652.
Use of uninitialized value $details[4] in hex at ./jtrts.pl line 653.
.pot CHK:asa-md5                  guesses: 1500 0:00:00:00 DONE  [PASSED] (1500 val-pwd)

form=asa-md5                      guesses: 1293 0:00:00:00 DONE  [PASSED]
Use of uninitialized value in split at ./jtrts.pl line 652.
Use of uninitialized value $details[4] in hex at ./jtrts.pl line 653.
.pot CHK:asa-md5                  guesses: 1293 0:00:00:00 DONE  [PASSED] (1293 val-pwd)

form=formspring                   guesses: 1500 0:00:00:00 DONE  [PASSED]
Use of uninitialized value in split at ./jtrts.pl line 652.
Use of uninitialized value $details[4] in hex at ./jtrts.pl line 653.
.pot CHK:formspring               guesses: 1500 0:00:00:00 DONE  [PASSED] (1500 val-pwd)

form=formspring                   guesses: 1500 0:00:00:00 DONE  [PASSED]
Use of uninitialized value in split at ./jtrts.pl line 652.
Use of uninitialized value $details[4] in hex at ./jtrts.pl line 653.
.pot CHK:formspring               guesses: 1500 0:00:00:00 DONE  [PASSED] (1500 val-pwd)

form=raw-md5u-raw                 guesses: 1500 0:00:00:00 DONE  [PASSED]
Use of uninitialized value in split at ./jtrts.pl line 652.
Use of uninitialized value $details[4] in hex at ./jtrts.pl line 653.
.pot CHK:raw-md5u-raw             guesses: 1500 0:00:00:00 DONE  [PASSED] (1500 val-pwd)

form=raw-md5u                     guesses: 1500 0:00:00:00 DONE  [PASSED]
Use of uninitialized value in split at ./jtrts.pl line 652.
Use of uninitialized value $details[4] in hex at ./jtrts.pl line 653.
.pot CHK:raw-md5u                 guesses: 1500 0:00:00:00 DONE  [PASSED] (1500 val-pwd)

form=raw-md5u-raw-utf8            guesses: 1229 0:00:00:00 DONE  [PASSED]
Use of uninitialized value in split at ./jtrts.pl line 652.
Use of uninitialized value $details[4] in hex at ./jtrts.pl line 653.
.pot CHK:raw-md5u-raw-utf8        guesses: 1229 0:00:00:00 DONE  [PASSED] (1229 val-pwd)

form=raw-md5u-raw-utf8            guesses: 1500 0:00:00:00 DONE  [PASSED]
Use of uninitialized value in split at ./jtrts.pl line 652.
Use of uninitialized value $details[4] in hex at ./jtrts.pl line 653.
Invalid negative number (-1) in chr at ./jtrts.pl line 660.
Invalid negative number (-1) in chr at ./jtrts.pl line 660.
FAILED line = à(àç&ç-à         (à(àç&ç-à)
FAILED line = é-àçéàà(         (é-àçéàà()
.pot CHK:raw-md5u-raw-utf8        guesses: 1500 -show=1500 0:00:00:00 DONE : Expected count(s) (1500)  [!!!FAILED4!!!]  (1498 val-pwd  2 inval-pwd)
Exiting on error. The .pot file ./tst.pot contains the found data
The command used to run this test was:

../run/john -ses=./tst  --dupe-suppression -pot=./tst.pot rawmd5u_raw_tst_utf8.in --wordlist=pw-utf8.dic -form=raw-md5u --encoding=utf-8
[fd@f20x32 test]$ ./jtrts.pl -v -stoponerror -passthru="--save-memory=1" -type rar
-------------------------------------------------------------------------------
- JtR-TestSuite (jtrts). Version 1.13, Dec 21, 2014.  By, Jim Fougeron & others
- Testing:  John the Ripper password cracker, version 1.8.0.4-jumbo-1-bleeding [linux-gnu 32-bit AVX2-autoconf]
--------------------------------------------------------------------------------

John Jumbo build detected.
--pot=NAME option is valid
--encoding=NAME option is valid
all.chr (../run/all.chr) not found
alnum.chr found, inc_alnum_ee8763c850dee8e4b88ef547a8ed39b8 added as a capability
Types to filter on:
rar
Capabilities in this build of john:
jumbo core inc local_pot_valid encode_valid utf8 cp1252 cp1251 koi8r cp437 cp737 cp850 cp858 cp866 iso8859-1 iso8859-15 inc_alnum_ee8763c850dee8e4b88ef547a8ed39b8

form=rar                          guesses:  130 0:00:01:05 DONE  [PASSED]
FAILED line = Bert$ErnIE       (?)
FAILED line = Bert$ErnIE       (?)
FAILED line = Bert$ErnIE       (?)
[...]
FAILED line = alsfdkja;        (?)
FAILED line = alsfdkja;        (?)
FAILED line = alsfdkja;        (?)
.pot CHK:rar                      guesses:  130 -show= 130 0:00:00:11 DONE : Expected count(s) (130)  [!!!FAILED4!!!]  (0 val-pwd  130 inval-pwd)
Exiting on error. The .pot file ./tst.pot contains the found data
The command used to run this test was:

../run/john -ses=./tst  --save-memory=1 -pot=./tst.pot rar_tst.in --wordlist=pw-40.dic -form=rar

Bug with "-passthru=--fork=2" again (CORE ONLY)

(master)test $ ./jtrts.pl -type full "-passthru=--fork=2" -q
-------------------------------------------------------------------------------
- JtR-TestSuite (jtrts). Version 1.13, Dec 21, 2014.  By, Jim Fougeron & others
- Testing:  John the Ripper password cracker, version 1.8.0.2-jumbo-1-bleeding_omp_asAN [linux-gnu 64-bit AVX-autoconf]
--------------------------------------------------------------------------------
.pot CHK:dynamic_0                guesses: 1500 -show=1502 0:00:00:00 DONE : Expected count(s) (1500)  [!!!FAILED!!!]  (1495 val-pwd)
.pot CHK:dynamic_0-raw            guesses: 1500 -show=1500 0:00:00:00 DONE : Expected count(s) (1500)  [!!!FAILED!!!]  (1491 val-pwd)
.pot CHK:dynamic_1                guesses: 1500 -show=1500 0:00:00:00 DONE : Expected count(s) (1500)  [!!!FAILED!!!]  (1491 val-pwd)
.pot CHK:dynamic_2                guesses: 1500 -show=1500 0:00:00:00 DONE : Expected count(s) (1500)  [!!!FAILED!!!]  (1493 val-pwd)
.pot CHK:dynamic_2-raw            guesses: 1500 -show=1500 0:00:00:00 DONE : Expected count(s) (1500)  [!!!FAILED!!!]  (1497 val-pwd)
.pot CHK:dynamic_3                guesses: 1500 -show=1500 0:00:00:00 DONE : Expected count(s) (1500)  [!!!FAILED!!!]  (1497 val-pwd)
.pot CHK:dynamic_3-raw            guesses: 1500 -show=1500 0:00:00:00 DONE : Expected count(s) (1500)  [!!!FAILED!!!]  (1491 val-pwd)
.pot CHK:dynamic_4                guesses: 1500 -show=1500 0:00:00:00 DONE : Expected count(s) (1500)  [!!!FAILED!!!]  (1489 val-pwd)
.pot CHK:dynamic_5                guesses: 1500 -show=1500 0:00:00:00 DONE : Expected count(s) (1500)  [!!!FAILED!!!]  (1490 val-pwd)
.pot CHK:dynamic_6                guesses: 1500 -show=1500 0:00:00:00 DONE : Expected count(s) (1500)  [!!!FAILED!!!]  (1489 val-pwd)
.pot CHK:dynamic_6-1salt          guesses: 1500 -show=1500 0:00:00:00 DONE : Expected count(s) (1500)  [!!!FAILED!!!]  (1495 val-pwd)
.pot CHK:dynamic_8                guesses: 1500 -show=1500 0:00:00:00 DONE : Expected count(s) (1500)  [!!!FAILED!!!]  (1491 val-pwd)
^C

etc

HDAA format will not remove dupe salts

I have not checked this for sure, BUT looking at this, it allocates an array that holds each of the fields, then allocated into those fields, and that is part of the salt. No way would this detect dupe salts.

This should either be a dyna salt, or better yet, the 12 fields (if needed), should be inline fixed sized char buffers, so the salt logic works properly.

Argument "ssword" isn't numeric in numeric ne (!=) at ./jtrts.pl line 732.

With randomly shuffled dictionary files:

mkdir dic
mv *.dic dic
cd dic
for for f in *.dic; do   shuf< $f > ../$f; done
cd ..

I sometimes get errors at ./jtrts.pl line 732 (somehow parsing john --show output didn't work, and $orig_show_cnt contains strings ("eft" or "ssword"):

./jtrts.pl -q
-------------------------------------------------------------------------------
- JtR-TestSuite (jtrts). Version 1.13, Dec 21, 2014.  By, Jim Fougeron & others
- Testing:  John the Ripper password cracker, version 1.8.0.2-jumbo-1-bleeding_omp [linux-gnu 64-bit AVX-autoconf]
--------------------------------------------------------------------------------
Argument "eft" isn't numeric in numeric ne (!=) at ./jtrts.pl line 732.  
form=dynamic_29-utf8              guesses: 1229 -show= eft 0:00:00:00 DONE : Expected count(s) (1229)  [!!!FAILED!!!]
form=dynamic_2004                 guesses: 1501 -show=1500 0:00:00:01 DONE : Expected count(s) (1500)  [!!!FAILED!!!]
form=sha256crypt                  guesses:    0 -show=   0 0:00:00:02 DONE : Expected count(s) (1500)  [!!!FAILED!!!]
.pot CHK:sha256crypt              guesses:    0 unk unk  [pass, but return code 256]
form=drupal7                      guesses:    0 -show=   0 0:00:00:09 DONE : Expected count(s) (1485)  [!!!FAILED!!!]
.pot CHK:drupal7                  guesses:    0 unk unk  [pass, but return code 256]
form=krb5-18                      guesses:    0 -show=   0 0:00:00:01 DONE : Expected count(s) (1500)  [!!!FAILED!!!]
.pot CHK:krb5-18                  guesses:    0 unk unk  [pass, but return code 256]
Argument "ssword" isn't numeric in numeric ne (!=) at ./jtrts.pl line 732.
form=mssql-utf8                   guesses: 1229 -show=sswo 0:00:00:00 DONE : Expected count(s) (1229)  [!!!FAILED!!!]
Some tests had Errors. Performed 244 tests.  6 errors  3 runs had non-zero return code (cores?)
Time used was 646 seconds

./jtrts.pl confused by memdbg output when using -passthru="--fork=16"

When I repeatedly run

./jtrts.pl -q -passthru="--fork=16" -type dynamic"

(on my quad code system with HT) for a john build with memdbg enabled, I regularly but not always get errors like these:

-------------------------------------------------------------------------------
- JtR-TestSuite (jtrts). Version 1.13, Dec 21, 2014.  By, Jim Fougeron & others
- Testing:  John the Ripper password cracker, version 1.8.0.2-jumbo-1-bleeding_omp [linux-gnu 64-bit AVX-autoconf]
--------------------------------------------------------------------------------
form=dynamic_80                   guesses: 1397 -show=1500 0:00:00:00 DONE : Expected count(s) (1500)  [!!!FAILED!!!]
Some tests had Errors. Performed 113 tests.  1 errors                    
Time used was 200 seconds
-------------------------------------------------------------------------------
- JtR-TestSuite (jtrts). Version 1.13, Dec 21, 2014.  By, Jim Fougeron & others
- Testing:  John the Ripper password cracker, version 1.8.0.2-jumbo-1-bleeding_omp [linux-gnu 64-bit AVX-autoconf]
--------------------------------------------------------------------------------
form=dynamic_23                   guesses: 1415 -show=1500 0:00:00:00 DONE : Expected count(s) (1500)  [!!!FAILED!!!]
Some tests had Errors. Performed 113 tests.  1 errors                    
Time used was 203 seconds

So, -show has the expected number of cracked hashes, but guesses reports a number which is too small.

My guess is that jtrts.pl has trouble parsinf the memdbg output if that memdbg output of tifferent forked processes gets mixed likes this:

outleft__5       (u521-dynamic_70)
11 96g 0:00:00:00 DONE (2015-01-03 19:31) 3200g/s 12233p/s 12233c/s 18350KC/s ReplyNow__10..12346295
10 95g 0:00:00:00 DONE (2015-01-03 19:31) 3166g/s 12233p/s 12233c/s 18350KC/s limiey__18..B413
At Program Exit
At Program Exit
MemDbg_Validate level 0 checkingMemDbg_Validate level 0 checking Passed
 Passed
At Program Exit
MemDbg_Validate level 0 checking Passed
1 87g 0:00:00:00 DONE (2015-01-03 19:31) 2175g/s 9175p/s 9175c/s 13762KC/s AB1168..3_�5
Waiting for 15 children to terminate
9 94g 0:00:00:00 DONE (2015-01-03 19:31) 2350g/s 9175p/s 9175c/s 13762KC/s SH�_�..P__9
At Program Exit
At Program Exit
MemDbg_Validate level 0 checking Passed
MemDbg_Validate level 0 checking Passed
At Program Exit
At Program Exit
MemDbg_Validate level 0 checking Passed
At Program Exit
MemDbg_Validate level 0 checking Passed
At Program Exit
MemDbg_Validate level 0 checking Passed
At Program Exit
MemDbg_Validate level 0 checking Passed
At Program Exit
MemDbg_Validate level 0 checking Passed
At Program Exit
MemDbg_Validate level 0 checking Passed
MemDbg_Validate level 0 checking Passed
Use the "--show" option to display all of the cracked passwords reliably
Session completed
At Program Exit
MemDbg_Validate level 0 checking Passed

support -random mode which changes the sequence of candidate passwords in a dictionary file.

Since this simple shuffling

mkdir dic
mv *.dic dic
cd dic
for f in *.dic; do shuf < $f > ../$f; done
cd ..

helped to uncover bugs in certain formats:

Argument "eft" isn't numeric in numeric ne (!=) at ./jtrts.pl line 732.  
form=dynamic_29-utf8              guesses: 1229 -show= eft 0:00:00:00 DONE : Expected count(s) (1229)  [!!!FAILED!!!]
form=sha256crypt                  guesses:    0 -show=   0 0:00:00:02 DONE : Expected count(s) (1500)  [!!!FAILED!!!]
.pot CHK:sha256crypt              guesses:    0 unk unk  [pass, but return code 256]
form=drupal7                      guesses:    0 -show=   0 0:00:00:08 DONE : Expected count(s) (1485)  [!!!FAILED!!!]
.pot CHK:drupal7                  guesses:    0 unk unk  [pass, but return code 256]
form=krb5-18                      guesses:    0 -show=   0 0:00:00:01 DONE : Expected count(s) (1500)  [!!!FAILED!!!]
.pot CHK:krb5-18                  guesses:    0 unk unk  [pass, but return code 256]
Argument "ssword" isn't numeric in numeric ne (!=) at ./jtrts.pl line 732.
form=mssql-utf8                   guesses: 1229 -show=sswo 0:00:00:00 DONE : Expected count(s) (1229)  [!!!FAILED!!!]
Some tests had Errors. Performed 244 tests.  5 errors  3 runs had non-zero return code (cores?)
Time used was 640 seconds

I'd like to have a -random mode.
A first version could just support that random shuffling using shuf, and run in an endless loop unless an error occurs and -stoponerror has been specified.

A more sophisticated way shouldn't randomly shuffle the dictionary files.
Istead, you should be able to specify a seed, so that with the same seed the dictionary files will be shuffled in exactly the same way. This would make error reporting much easier, because you could just report the seed instead of copying the random dictionaty files.

TS hiding a bug?

Have you guys ever seen this?

$ ../run/john -ses=./tst -pot=./tst.pot SHA512crypt_tst.in --wordlist=pw.dic -form=sha512crypt-opencl 2>&1 >/dev/null
Device 0: GeForce GTX 570
Local worksize (LWS) 512, global worksize (GWS) 46080
Press 'q' or Ctrl-C to abort, almost any other key for status
OpenCL error (CL_INVALID_COMMAND_QUEUE) in file (opencl_cryptsha512_fmt_plug.c) at line (497) - (Error running loop kernel)
$ ./jtrts.pl -noprelims -stoponerror -type sha512crypt-opencl
-------------------------------------------------------------------------------
- JtR-TestSuite (jtrts). Version 1.12.16, Sept 24, 2014.  By, Jim Fougeron & others
- Testing:  John the Ripper password cracker, version 1.8.0.2-bleeding-jumbo_omp [linux-gnu 64-bit XOP-autoconf]
--------------------------------------------------------------------------------

John Jumbo build detected.

form=sha512crypt-opencl           guesses: 1500 0:00:00:43 DONE  [PASSED]
.pot CHK:sha512crypt-opencl       guesses: 1500 0:00:00:43 DONE  [PASSED]

All tests passed without error.  Performed 1 tests.  Time used was 145 seconds

Or JtR running under Test Suite doesn't trigger the bug? Any ideas?

TS should handle segfaults/crashes better

$ ./jtrts.pl -q -noprel
-------------------------------------------------------------------------------
- JtR-TestSuite (jtrts). Version 1.12.12, July 21, 2013.  By, Jim Fougeron & others
- Testing:  John the Ripper password cracker, version 1.8.0.2-bleeding-jumbo_omp [macosx-x86-64-native-gpu]
--------------------------------------------------------------------------------
Use of uninitialized value $crack_xx[4] in substitution (s///) at ./jtrts.pl line 612.
^C

The above typically means john crashed. This should be detected and errors should be shown. Currently it seems to hang forever after the Use of uninitialized... output.

Use of uninitialized value $crack_xx[3] in concatenation (.) or string at ./jtrts.pl line 860.

(master)test $ ./jtrts.pl -type mssql12 -passthru="--fork=2" -q
-------------------------------------------------------------------------------
- JtR-TestSuite (jtrts). Version 1.13, Dec 21, 2014.  By, Jim Fougeron & others
- Testing:  John the Ripper password cracker, version 1.8.0.2-jumbo-1-bleeding_omp [linux-gnu 64-bit AVX-autoconf]
--------------------------------------------------------------------------------
sh: line 1:  3495 Segmentation fault      (core dumped) ../run/john -ses=./tst --fork=2 -pot=./tst.pot MsSql12_tst.in --wordlist=pw.dic 2>&1 > /dev/null

Use of uninitialized value $crack_xx[3] in concatenation (.) or string at ./jtrts.pl line 860.
Use of uninitialized value in concatenation (.) or string at ./jtrts.pl line 860.
form=MSSql12                      guesses:    0    [pass, but return code 35584]
Some tests had Errors. Performed 1 tests.  1 runs had non-zero return code (cores?)     
Time used was 3 seconds

There's openwall/john#1076 for the segfault.
This is about the Use of uninitialized value which should be avoided if john crashes.

Don't parse status lines for number of guesses, use --show output instead.

Even with the recent changes to make -passthru --fork work, there are many "FAILED" tests, because the same password might get cracked more than once.
This occurs if the word list contains words that are to long for the format, but after truncation produce a valid password.

The result is something like this:

$ ./jtrts.pl -noprelim -passthru "--fork=2 --dupe" -q
-------------------------------------------------------------------------------
- JtR-TestSuite (jtrts). Version 1.12.14, June 30, 2014.  By, Jim Fougeron & others
- Testing:  John the Ripper password cracker, version 1.8.0.2-bleeding-jumbo [linux-gnu 64-bit AVX-autoconf]
--------------------------------------------------------------------------------
form=dynamic_19                   guesses: 1501 0:00:00:00 DONE : Expected count(s) (1500)  [!!!FAILED!!!]
form=dynamic_20                   guesses: 1890 0:00:00:00 DONE : Expected count(s) (1500)  [!!!FAILED!!!]

So, instead of reading the guesses from the status lines (one per process), jtrts should call

./john --show --format=... --prot= | tail -n 1

and get the number of cracked paswords from the --show status line.

With -stoponerror -v, jtrts.pl shouldn't remove files that are required to reproduce the error

$ ./jtrts.pl -v -stoponerror -passthru="--save-memory=1" -type rar
-------------------------------------------------------------------------------
- JtR-TestSuite (jtrts). Version 1.13, Dec 21, 2014.  By, Jim Fougeron & others
- Testing:  John the Ripper password cracker, version 1.8.0.4-jumbo-1-bleeding_omp_dbg [linux-gnu 64-bit AVX-autoconf]
--------------------------------------------------------------------------------

John Jumbo build detected.
--pot=NAME option is valid
--encoding=NAME option is valid
all.chr (../run/all.chr) not found
alnum.chr found, inc_alnum_ee8763c850dee8e4b88ef547a8ed39b8 added as a capability
Types to filter on:
rar
Capabilities in this build of john:
jumbo core inc local_pot_valid encode_valid utf8 cp1252 cp1251 koi8r cp437 cp737 cp850 cp858 cp866 iso8859-1 iso8859-15 inc_alnum_ee8763c850dee8e4b88ef547a8ed39b8

form=rar                          guesses:  130 0:00:01:17 DONE  [PASSED]
FAILED line = dffffffffffff    (?)
FAILED line = alsfdkja;        (?)
[...]
FAILED line = 1                (?)
FAILED line = password         (?)
.pot CHK:rar                      guesses:  130 -show= 130 0:00:00:17 DONE : Expected count(s) (130)  [!!!FAILED4!!!]  (0 val-pwd  130 inval-pwd)
Exiting on error. The .pot file tst.pot contains the found data
The command used to run this test was:

../run/john -ses=tst  --save-memory=1 -pot=tst.pot rar_tst.in --wordlist=pw-40.dic -form=rar
$ ../run/john -ses=tst  --save-memory=1 -pot=tst.pot rar_tst.in --wordlist=pw-40.dic -form=rar
Loaded 130 password hashes with 130 different salts (rar, RAR3 [SHA1 AES 32/64])
No password hashes left to crack (see FAQ)
$ rm tst.pot
$ ../run/john -ses=tst  --save-memory=1 -pot=tst.pot rar_tst.in --wordlist=pw-40.dic -form=rar
Loaded 130 password hashes with 130 different salts (rar, RAR3 [SHA1 AES 32/64])
Will run 8 OpenMP threads
fopen: pw-40.dic: No such file or directory

Apparently, jtrts.pl removed pw-40.dic, because the first command actually worked, i.e., there were 130 guesses.
The error was that jtrts.pl couldn't parse the output, because ? instead of user names were printed.

Nevertheless, I would have liked to run this command with and without -save-memory=1, and compare the output.

same salt bug in rar not detected

openwall/john#868

TS says all is clear, since jtr says it cracked all items. However, not all were cracked, and there is issues where jtr was thinking there were dupe salts when there should not be.

To work around this (or possibly show OTHER issues), I will re-run JtR after each test, simply to make sure it says no passwords are left.

NOTE This MAY be a problem for formats that are not precise (CRC32, etc). But I can think of no other way to detect this type bug, and it is POSSIBLE that other formats also list that they cracked X number of hashes when in actually they did not.

Replace tests for SAP F/G

Frank has provided good tests for 1-4 byte UTF-8 up to maximum length. Wrap them up and use them.

Bail, or at least warn, on invalid options.

I ran tests with -dev=cpu but it did not work, the default device was used. Took me a while to realize I forgot to say -pass=-dev=cpu... so that was a PEBCAK but TS should really not silently allow an invalid option!

Add a large file processing mode (to exercise wordlist.c)

Build a very large file (say 200mb), of arbitrary data lines (none matching). Scatter into that file while it is created, the lines of pw.dic. Then for some fast formats, use this larger dic to run. Things like LM, raw-*, etc. But also sapB/sapG, since they are read past the end of buffer formats also. This is to make sure we are now reading past end of buffer in ways that could crash john on certain systems. This would be good to also run an ASan build of john when doing this, not just expecting the OS to crash the app for us.

This issue in reference to openwall/john@72b22f1#commitcomment-9026535

Problems when testing core version 1.8.0

This is on a 64bit Linux system (Fedora 20):

(master)test $ ./jtrts.pl -type full
-------------------------------------------------------------------------------
- JtR-TestSuite (jtrts). Version 1.13, Dec 21, 2014.  By, Jim Fougeron & others
- Testing:  John the Ripper password cracker, version 1.8.0
--------------------------------------------------------------------------------

John CORE build detected.  Only core formats can be tested.

form=md5crypt                     guesses: 1500 0:00:00:11 DONE  [PASSED]
readline() on closed filehandle POTFILE at ./jtrts.pl line 828.
.pot CHK:md5crypt                 guesses:    0 -show=   0 unk unk : Expected count(s) (1500)  [!!!FAILED!!!]  (0 val-pwd)

form=md5_apr1                     guesses: 1500 0:00:00:11 DONE  [PASSED]
readline() on closed filehandle POTFILE at ./jtrts.pl line 828.
.pot CHK:md5_apr1                 guesses:    0 -show=   0 unk unk : Expected count(s) (1500)  [!!!FAILED!!!]  (0 val-pwd)

form=md5_smd5                     guesses:    0 -show=   0 unk unk : Expected count(s) (1500)  [!!!FAILED!!!]

form=BSDIcrypt                    guesses: 1500 0:00:00:01 DONE  [PASSED]
readline() on closed filehandle POTFILE at ./jtrts.pl line 828.
.pot CHK:BSDIcrypt                guesses:    0 -show=   0 unk unk : Expected count(s) (1500)  [!!!FAILED!!!]  (0 val-pwd)

form=Bcrypt                       guesses: 1500 0:00:00:02 DONE  [PASSED]
readline() on closed filehandle POTFILE at ./jtrts.pl line 828.
.pot CHK:Bcrypt                   guesses:    0 -show=   0 unk unk : Expected count(s) (1500)  [!!!FAILED!!!]  (0 val-pwd)

form=Bcrypt_broken                guesses: 1500 0:00:00:02 DONE  [PASSED]
readline() on closed filehandle POTFILE at ./jtrts.pl line 828.
.pot CHK:Bcrypt_broken            guesses:    0 -show=   0 unk unk : Expected count(s) (1500)  [!!!FAILED!!!]  (0 val-pwd)

form=descrypt                     guesses: 1500 0:00:00:00 DONE  [PASSED]
readline() on closed filehandle POTFILE at ./jtrts.pl line 828.
.pot CHK:descrypt                 guesses:    0 -show=   0 unk unk : Expected count(s) (1500)  [!!!FAILED!!!]  (0 val-pwd)

form=descrypt                     guesses: 1500 0:00:00:01 DONE  [PASSED]
readline() on closed filehandle POTFILE at ./jtrts.pl line 828.
.pot CHK:descrypt                 guesses:    0 -show=   0 unk unk : Expected count(s) (1500)  [!!!FAILED!!!]  (0 val-pwd)

form=lm                           guesses: 3000 0:00:00:00 DONE  [PASSED]
readline() on closed filehandle POTFILE at ./jtrts.pl line 828.
.pot CHK:lm                       guesses:    0 -show=   0 unk unk : Expected count(s) (1500)  [!!!FAILED!!!]  (0 val-pwd)

form=pwdump_lm                    guesses: 2760 0:00:00:00 DONE  [PASSED]
readline() on closed filehandle POTFILE at ./jtrts.pl line 828.
.pot CHK:pwdump_lm                guesses:    0 -show=   0 unk unk : Expected count(s) (986)  [!!!FAILED!!!]  (0 val-pwd)

Some tests had Errors. Performed 10 tests.  1 errors  9 errors reprocessing the .POT files
Time used was 33 seconds

./jtrts.pl claims john returned with return code 1

I see this for dynamic_12 and dynamic_1503

$ ./jtrts.pl -type dynamic_12 -q
-------------------------------------------------------------------------------
- JtR-TestSuite (jtrts). Version 1.13, Dec 21, 2014.  By, Jim Fougeron & others
- Testing:  John the Ripper 1.8.0.6-jumbo-1-199-geacddf1 OMP [linux-gnu 64-bit AVX2-autoconf]
--------------------------------------------------------------------------------
Warning: SAP-B format should never be UTF-8.
Use --target-encoding=iso-8859-1 or whatever is applicable.
.pot CHK:dynamic_12               guesses:    0 -show=   0 unk unk : Expected count(s) (1500)  [!!!FAILED6!!! exited, return code 1]
.pot CHK:dynamic_12               guesses:    0 -show=   0 unk unk : Expected count(s) (1500)  [!!!FAILED6!!! exited, return code 1]
Some tests had Errors. Performed 2 tests.  2 errors reprocessing the .POT files  2 runs had non-clean exit
Time used was 2 seconds
$ ./jtrts.pl -type dynamic_12 -v -stoponerror
-------------------------------------------------------------------------------
- JtR-TestSuite (jtrts). Version 1.13, Dec 21, 2014.  By, Jim Fougeron & others
- Testing:  John the Ripper 1.8.0.6-jumbo-1-199-geacddf1 OMP [linux-gnu 64-bit AVX2-autoconf]
--------------------------------------------------------------------------------

John Jumbo build detected.
Warning: SAP-B format should never be UTF-8.
Use --target-encoding=iso-8859-1 or whatever is applicable.
--pot=NAME option is valid
--encoding=NAME option is valid
all.chr (../run/all.chr) not found
alnum.chr found, inc_alnum_ee8763c850dee8e4b88ef547a8ed39b8 added as a capability
Types to filter on:
dynamic_12
Capabilities in this build of john:
jumbo core inc local_pot_valid encode_valid utf8 cp1252 cp1251 koi8r cp437 cp737 cp850 cp858 cp866 iso8859-1 iso8859-15 inc_alnum_ee8763c850dee8e4b88ef547a8ed39b8

form=dynamic_12                   guesses: 1500 0:00:00:00 DONE  [PASSED]
.pot CHK:dynamic_12               guesses:    0 -show=   0 unk unk : Expected count(s) (1500)  [!!!FAILED6!!! exited, return code 1]
Exiting on error. The .pot file tst.pot contains the found data
The command used to run this test was:

../run/john -ses=tst  -pot=tst.pot dynamic_12_tst.in --wordlist=pw.dic

But executing

../run/john -ses=tst  -pot=tst.pot dynamic_12_tst.in --wordlist=pw.dic

cracks the expected 1500 passwords, and exit code is 0:

$ ../run/john -ses=tst  -pot=tst.pot dynamic_12_tst.in --wordlist=pw.dic
Warning: invalid UTF-8 seen reading dynamic_12_tst.in
Using default input encoding: UTF-8
Loaded 1500 password hashes with 1500 different salts (dynamic_12 [md5(md5($s).md5($p)) (IPB) 256/256 AVX2 8x3])
Warning: no OpenMP support for this hash type, consider --fork=4
Press 'q' or Ctrl-C to abort, almost any other key for status
aksarban__5      (u471-dynamic_12)
[...]

Skipping and& Dipping__4 (u362-dynamic_12)
1500g 0:00:00:00 DONE (2015-07-03 19:03) 3571g/s 4000p/s 6000Kc/s 6000KC/s Skippin� an�*..IwasJu$there__19
Use the "--show" option to display all of the cracked passwords reliably
Session completed
$ echo $?
0

$ ../run/john -show -pot=tst.pot dynamic_12_tst.in
Warning: invalid UTF-8 seen reading dynamic_12_tst.in
u0-dynamic_12:Skippin� an�_:0:0:Skippin� an�_::
[...]
u1499-dynamic_12:1__18:1499:0:1__18::

1500 password hashes cracked, 0 left
$ echo $?
0

So, what command did jtrts.pl really run which didn't crack any passwords and ended with exit code 1?
Obviously not the command listed with `-v`.

If we got any "Terminating on error" in log file, show them

$ ./jtrts.pl -noprelims lm --stoponerror -pass=-fork=666
-------------------------------------------------------------------------------
- JtR-TestSuite (jtrts). Version 1.12.16, Sept 24, 2014.  By, Jim Fougeron & others
- Testing:  John the Ripper password cracker, version 1.8.0.2-bleeding-jumbo_omp [darwin13.4.0 64-bit AVX-autoconf]
--------------------------------------------------------------------------------

John Jumbo build detected.

form=lm                           guesses: 1409 -show=2888 0:00:00:00 DONE : Expected count(s) (1500)(-show3000)  [!!!FAILED!!!]
Exiting on error.  The pot file ./tst.pot contains the found data
The command used to run this test was:

../run/john -ses=./tst -fork=666  -pot=./tst.pot LM_tst.in --wordlist=pw.dic -form=lm

Actual problem:

$ grep Terminating tst.log
1 0:00:00:00 Terminating on error, john.c:496

Looking at the referenced source line, it's obvious I just hit my ulimits.

I guess we could always grep for that and show it, as a hint.

Add real detection of segfaults

After a system() or backtick call, $? is the real exit code left shifted by 8, plus: bit 7 tells if we got a core dump and bits 0-6 tells we had a segfault and with what signal.

    if ($? & 127) {
        printf "child died with signal %d, %s coredump\n",
            ($? & 127),  ($? & 128) ? 'with' : 'without';
    }
    else {
        printf "child exited with value %d\n", $? >> 8;
    }

8a91223 just fixed the reporting of exit value (right shifts by 8) but with something like the above we could also add whether it died and with what signal.

descrypt ascii vs. non-ascii characters

Since descrypt accepts 8bit characters, but ignores the highest bit, TS has to treat several possible password candidates as valid, as long as they match after stripping the highest bit.

form=descrypt                     guesses: 1500 0:00:00:00 DONE  [PASSED]
FAILED line = P�II             (PIII)
FAILED line = hello__1         (hello__�)
FAILED line = �23�5�_2         (12345__2)
FAILED line = 1__3             (1�_3)
FAILED line = P�II             (PIII)
FAILED line = 1__3             (1�_3)
FAILED line = BBSPw__5         (B�S�w_�5)
FAILED line = �23�5�_2         (12345__2)
FAILED line = 1__�             (1__1)
FAILED line = ad�in__1         (admin__1)
FAILED line = hello__1         (hello__�)
FAILED line = qerwt__2         (qe�wt_߲)
FAILED line = BBSPw__1         (B�SP�__�)
FAILED line = qerwt__2         (qe�wt_߲)
FAILED line = qerwt__5         (q�rwt_ߵ)
FAILED line = letM�in          (letMein)
FAILED line = qe��t__�         (qerwt__3)
FAILED line = admin__5         (�d�in__5)
FAILED line = ad�in__1         (admin__1)
FAILED line = test__�          (test__5)
FAILED line = 1234�__�         (12345__4)
FAILED line = test             (��st)
FAILED line = test__�          (test__5)
FAILED line = BBSPw__1         (B�SP�__�)
FAILED line = test             (��st)
FAILED line = admin__5         (�d�in__5)
FAILED line = qe��t__�         (qerwt__3)
FAILED line = BBSPw__5         (B�S�w_�5)
FAILED line = qerwt__5         (q�rwt_ߵ)
FAILED line = 1__�             (1__1)
FAILED line = letM�in          (letMein)
FAILED line = 1234�__�         (12345__4)
.pot CHK:descrypt                 guesses: 1532 -show=1500 0:00:00:00 DONE : Expected count(s) (1500)  [!!!FAILED!!!]  (1500 val-pwd)
Exiting on error. The .pot file ./tst.pot contains the found data
The command used to run this test was:

../run/john -ses=./tst  --fork=3 -pot=./tst.pot DES_tst.in --wordlist=pw.dic

In the FAILED lines above, the test suite either expects ascii-only passwords where john found non-ascii passwords, or it expects non-ascii paswords where john found ascii passwords.

TS should honor the -enc option with -show

After the -show tests were added, we get these complaints from sapF

$ ./jtrts.pl sapf 
-------------------------------------------------------------------------------
- JtR-TestSuite (jtrts). Version 1.12.14, June 30, 2014.  By, Jim Fougeron & others
- Testing:  John the Ripper password cracker, version 1.8.0.2-bleeding-jumbo [darwin13.4.0 64-bit AVX-autoconf]
--------------------------------------------------------------------------------

John Jumbo build detected.

Warning: SAP-F/G format should always be UTF-8.
Convert your input files to UTF-8 and use --input-encoding=utf8
form=SAP F/G                      guesses: 6794 0:00:00:00 DONE  [PASSED]
Warning: SAP-F/G format should always be UTF-8.
Convert your input files to UTF-8 and use --input-encoding=utf8
.pot CHK:SAP F/G                  guesses: 6794 0:00:00:00 DONE  [PASSED]

All tests passed without error.  Performed 1 tests.  Time used was 1 seconds

jtrts.dat says that -enc=utf8 should be used, and the normal tests does so. The -show tests doesn't.

Use of uninitialized value in concatenation (.) or string at jtrts_inc.pm line 27.

$ ./jtrts.pl -h 
Use of uninitialized value in concatenation (.) or string at jtrts_inc.pm line 27.

JtR TestSuite, command usage:
usage: ./jtrts.pl [-h|-?] [-option[s]]
    Options can be abbreviated!

    Options are:
    -basepath  <s> set the basepath where john exe is located. By default 
                   this is set to 
[...]

To fix this, the following change is required:

$ git diff
diff --git a/jtrts.pl b/jtrts.pl
index a904e1b..ab08610 100755
--- a/jtrts.pl
+++ b/jtrts.pl
@@ -95,7 +95,7 @@ sub parseArgs {
                'stoponerror!'     => \$stop_on_error,
                'showstderr!'      => \$show_stderr,
                );
-       if ($help) { usage(); }
+       if ($help) { usage($JOHN_PATH); }
        if ($basepath ne "") {
                $JOHN_PATH = $basepath;
                $JOHN_EXE  = "$JOHN_PATH/john";

Result:

$ ./jtrts.pl -h

JtR TestSuite, command usage:

usage: ./jtrts.pl [-h|-?] [-option[s]]
    Options can be abbreviated!

    Options are:
    -basepath  <s> set the basepath where john exe is located. By default 
                   this is set to ../run

Internal mode now broken

$ ./jtrts.pl -internal
-------------------------------------------------------------------------------
- JtR-TestSuite (jtrts). Version 1.13, Dec 21, 2014.  By, Jim Fougeron & others
- Testing:  John the Ripper password cracker, version 1.8.0.2-jumbo-1-bleeding_omp_asan [darwin14.1.0 64-bit AVX-autoconf]
--------------------------------------------------------------------------------

John Jumbo build detected.
John CORE build detected.
 The -internal mode ONLY works for jumbo build of john.

I suppose this is due to the format list being suppressed from normal usage blob.

These dynamic formats are NOT in the TS (I think).

As I start to either add these, or figure out why they are not included, I will update this list.

dynamic_17   (there but only run on a 'full' mode)
dynamic_39  (added this, and also a net-md5 file I converted from the dyna_39)
dynamic_40  (added this, and also a net-sha1 file I converted from the dyna_40)
dynamic_53  53 to 158 have all been added.

Updated all above: 724ccf9 and e4c8357

dynamic_1010  (not in pass_gen.pl)
dynamic_1013  (not in pass_gen.pl)
dynamic_1400
dynamic_1401
dynamic_1501
dynamic_1502
dynamic_1503

Add missing formats to pass_gen.pl and the TS.

This issue should stay perpetually open. When new formats are added to pass_gen.pl (or we have some other technique to generate them), they should be added here.

Also, when new formats are added to JtR, but are not in the TS, we should also add them, and then move them to the 'in pass_gen' table when we code it there, then remove it when it gets added to the TS.

I added code to the -showtypes function in the jtrts.pl file, and now I think we have a pretty comprehensive list of data that we have in pass_gen.pl but not in the TS yet, AND a list of items not even added to pass_gen.pl yet. This is some decent 'todo' work, lol.

These are not in pass_gen.pl or in the TS yet.

  • krb5pa-sha1
  • krb5pa-sha1-opencl
  • 7z
  • 7z-opencl
  • afs
  • cq
  • crypt
  • dmg
  • dmg-opencl
  • dominosec
  • encfs
  • encfs-opencl
  • fde
  • gpg
  • gpg-opencl
  • haval-128-4
  • haval-256-3
  • ike
  • keepass
  • krb4
  • kwallet
  • lotus85
  • luks
  • oldoffice
  • oldoffice-opencl
  • openbsd-softraid
  • openssl-enc
  • openvms
  • panama
  • pdf
  • pfx
  • pkzip
  • putty
  • racf
  • rar5
  • rar5-opencl
  • skein-256
  • skein-512
  • ssh-ng
  • sybase-prop
  • tripcode
  • whirlpool0
  • krb5
  • rawsha3-224 (in pass_gen only)
  • rawsha3-256 (in pass_gen only)
  • rawsha3-384 (in pass_gen only)

---These have been added to pass_gen.pl and also placed into TS ---

  • keystore
  • efs
  • keyring
  • keyring-opencl
  • palshop
  • iwork
  • mdc2
  • has-160
  • mongodb-scram
  • zipmonster
  • eigrp
  • snefru-128
  • snefru-256
  • whirlpool1 (had to hand edit whirlpool.c in perl code to get right vectors)
  • mhac-sha224 with variable length salts (bug found in long salt code)
  • mhac-sha384 with variable length salts (bug found in long salt code)
  • mhac-sha512 with variable length salts (bug found in long salt code)
  • mhac-md5 with variable length salts (bug found in long salt code)
  • mhac-sha256 with variable length salts (bug found in long salt code)
  • cloudkeychain
  • vtp
  • vnc
  • sxc
  • sxc-opencl
  • dynamic 310-308, 370-428
  • blockchain (only v1 hashes)
  • blockchain-opencl (only v1 hashes, 64 byte plaintext vs 125 byte built input file.)
  • rawsha3-512
  • AzureAD
  • vdi_256 (full test)
  • vdi_128 (full test)
  • qnx_md5
  • qnx_sha256
  • qnx_sha512
  • agilekeychain
  • agilekeychain-opencl
  • bitcoin
  • siemens-s7
  • strip
  • strip-opencl
  • clipperz (serious bugs fixed. 2 types input files, flush and 0-LPad)
  • citrix_ns10
  • blackberry-es10
  • chap
  • dynamic_1010
  • asa-md5
  • known_hosts
  • hsrp
  • sha1crypt
  • sha1crypt-opencl
  • keychain
  • keychain-opencl
  • sunmd5
  • wpapsk
  • wpapsk-opencl
  • dummy
  • tiger
  • whirlpool
  • wowsrp (serious bugs fixed. 2 types input files, flush and 0-LPad)
  • skey (all 4 types)
  • osc
  • ripemd-128
  • ripemd-160
  • raw-sha256-ng
  • raw-sha512-ng
  • bcrypt-opencl (just needed jtrts.dat lines added)
  • aix-smd5

Office format tests too slow

This is insane

form=office_2007                  guesses: 1500 0:00:20:21 DONE  [PASSED]
.pot CHK:office_2007              guesses: 1500 0:00:17:17 DONE  [PASSED]

We should run like 50 of them instead, for a 300x faster run.

Use of uninitialized value in is_format_8bit when testing core version

$ ./jtrts.pl
-------------------------------------------------------------------------------
- JtR-TestSuite (jtrts). Version 1.13, Dec 21, 2014.  By, Jim Fougeron & others
- Testing:  John the Ripper password cracker, version 1.8.0.4
--------------------------------------------------------------------------------

John CORE build detected.  Only core formats can be tested.

form=md5crypt                     guesses: 1500 0:00:00:08 DONE  [PASSED]
Use of uninitialized value in split at ./jtrts.pl line 650.
Use of uninitialized value $details[4] in hex at ./jtrts.pl line 651.
.pot CHK:md5crypt                 guesses: 1500 0:00:00:06 100%  [PASSED] (1500 val-pwd)

form=md5crypt                     guesses: 1500 0:00:00:01 DONE  [PASSED]
Use of uninitialized value in split at ./jtrts.pl line 650.
Use of uninitialized value $details[4] in hex at ./jtrts.pl line 651.
.pot CHK:md5crypt                 guesses: 1500 0:00:00:00 100%  [PASSED] (1500 val-pwd)

form=md5_apr1                     guesses: 1500 0:00:00:08 DONE  [PASSED]
Use of uninitialized value in split at ./jtrts.pl line 650.
Use of uninitialized value $details[4] in hex at ./jtrts.pl line 651.
.pot CHK:md5_apr1                 guesses: 1500 0:00:00:06 100%  [PASSED] (1500 val-pwd)

form=md5_apr1                     guesses: 1500 0:00:00:01 DONE  [PASSED]
Use of uninitialized value in split at ./jtrts.pl line 650.
Use of uninitialized value $details[4] in hex at ./jtrts.pl line 651.
.pot CHK:md5_apr1                 guesses: 1500 0:00:00:00 100%  [PASSED] (1500 val-pwd)

form=BSDIcrypt                    guesses: 1500 0:00:00:01 DONE  [PASSED]
Use of uninitialized value in split at ./jtrts.pl line 650.
Use of uninitialized value $details[4] in hex at ./jtrts.pl line 651.
.pot CHK:BSDIcrypt                guesses: 1500 0:00:00:01 100%  [PASSED] (1500 val-pwd)

form=Bcrypt                       guesses: 1500 0:00:00:01 DONE  [PASSED]
Use of uninitialized value in split at ./jtrts.pl line 650.
Use of uninitialized value $details[4] in hex at ./jtrts.pl line 651.
.pot CHK:Bcrypt                   guesses: 1500 0:00:00:01 100%  [PASSED] (1500 val-pwd)

form=Bcrypt_broken                guesses: 1500 0:00:00:01 DONE  [PASSED]
Use of uninitialized value in split at ./jtrts.pl line 650.
Use of uninitialized value $details[4] in hex at ./jtrts.pl line 651.
.pot CHK:Bcrypt_broken            guesses: 1500 0:00:00:01 100%  [PASSED] (1500 val-pwd)

form=descrypt                     guesses: 1500 0:00:00:00 DONE  [PASSED]
Use of uninitialized value in split at ./jtrts.pl line 650.
Use of uninitialized value $details[4] in hex at ./jtrts.pl line 651.
.pot CHK:descrypt                 guesses: 1500 0:00:00:00 100%  [PASSED] (1500 val-pwd)

form=descrypt                     guesses: 1500 0:00:00:01 DONE  [PASSED]
Use of uninitialized value in split at ./jtrts.pl line 650.
Use of uninitialized value $details[4] in hex at ./jtrts.pl line 651.
.pot CHK:descrypt                 guesses: 1500 0:00:00:00 100%  [PASSED] (1500 val-pwd)

form=lm                           guesses: 3000 0:00:00:00 DONE  [PASSED]
Use of uninitialized value in split at ./jtrts.pl line 650.
Use of uninitialized value $details[4] in hex at ./jtrts.pl line 651.
.pot CHK:lm                       guesses: 1500 0:00:00:00 100%  [PASSED] (1500 val-pwd)

form=pwdump_lm                    guesses: 2760 0:00:00:00 DONE  [PASSED]
Use of uninitialized value in split at ./jtrts.pl line 650.
Use of uninitialized value $details[4] in hex at ./jtrts.pl line 651.
.pot CHK:pwdump_lm                guesses:  986 0:00:00:00 100%  [PASSED] (986 val-pwd)

All tests passed without error.  Performed 11 tests.  Time used was 48 seconds

Since core doesn't have --list=, the only way here would be a hard coded list (or we just ignore $is_8bit for core builds.

Recommend Projects

  • React photo React

    A declarative, efficient, and flexible JavaScript library for building user interfaces.

  • Vue.js photo Vue.js

    🖖 Vue.js is a progressive, incrementally-adoptable JavaScript framework for building UI on the web.

  • Typescript photo Typescript

    TypeScript is a superset of JavaScript that compiles to clean JavaScript output.

  • TensorFlow photo TensorFlow

    An Open Source Machine Learning Framework for Everyone

  • Django photo Django

    The Web framework for perfectionists with deadlines.

  • D3 photo D3

    Bring data to life with SVG, Canvas and HTML. 📊📈🎉

Recommend Topics

  • javascript

    JavaScript (JS) is a lightweight interpreted programming language with first-class functions.

  • web

    Some thing interesting about web. New door for the world.

  • server

    A server is a program made to process requests and deliver data to clients.

  • Machine learning

    Machine learning is a way of modeling and interpreting data that allows a piece of software to respond intelligently.

  • Game

    Some thing interesting about game, make everyone happy.

Recommend Org

  • Facebook photo Facebook

    We are working to build community through open source technology. NB: members must have two-factor auth.

  • Microsoft photo Microsoft

    Open source projects and samples from Microsoft.

  • Google photo Google

    Google ❤️ Open Source for everyone.

  • D3 photo D3

    Data-Driven Documents codes.