Follow @Openwall on Twitter for new release announcements and other news
[<prev] [next>] [<thread-prev] [thread-next>] [day] [month] [year] [list]
Date: Fri, 9 Sep 2011 11:47:12 -0500
From: "jfoug" <jfoug@....net>
To: <john-dev@...ts.openwall.com>
Subject: RE: Question over validity of concept in JtR's benchmarking code.

Here is -v3 of the patch. I had to add 2 case statements to the message
building code in bench (so I did not change things from single salt/multi
salt, into long/short).

Here are some timings:

1.7.8-j6 with current pkzip_fmt code:

$ ../run/john -test=4 -form=pkzip
Benchmarking: pkzip [N/A]... DONE
Short:  7622K c/s
Long:   5065K c/s

$ ../run/john -test=4 -form=NT
Benchmarking: NT MD4 [128/128 SSE2 + 32/32]... DONE
Raw:    19418K c/s

$ ../run/john -test=4 -form=pdf
Benchmarking: pdf [32/32]... DONE
Many salts:     10135 c/s
Only one salt:  16938 c/s

$ ../run/john -test=4 -form=ssh
Benchmarking: ssh [32/32]... DONE
Raw:    68715 c/s


Timings of same machine, with the patch below, with -1001 bench timing set
for pdf and pkzip, and -1000 set for ssh (NT is still using original 0 bench
timing, it simply shows there is NO change at all).

$ ../run/john -test=4 -form=pkzip
Benchmarking: pkzip [N/A]... DONE
Many salts:     7652K c/s
Only one salt:  5074K c/s

$ ../run/john -test=4 -form=nt
Benchmarking: NT MD4 [128/128 SSE2 + 32/32]... DONE
Raw:    19540K c/s

$ ../run/john -test=4 -form=ssh
Benchmarking: ssh [32/32]... DONE
Raw:    135926 c/s

$ ../run/john -test=4 -form=pdf
Benchmarking: pdf [32/32]... DONE
Many salts:     13817 c/s
Only one salt:  29822 c/s


Jim.



diff -urpN john-1.7.8-jumbo-6a/src/bench.c john-1.7.8-jumbo-6b/src/bench.c
--- john-1.7.8-jumbo-6a/src/bench.c	2011-08-03 16:19:13.000000000 +0000
+++ john-1.7.8-jumbo-6b/src/bench.c	2011-09-09 16:37:25.515625000 +0000
@@ -114,6 +114,8 @@ char *benchmark_format(struct fmt_main *
 	static void *binary = NULL;
 	static int binary_size = 0;
 	static char s_error[64];
+	char *TmpPW[1024];
+	int pw_mangled=0;
 	char *where;
 	struct fmt_tests *current;
 	int cond;
@@ -163,8 +165,29 @@ char *benchmark_format(struct fmt_main *
 	if (format->params.benchmark_length > 0) {
 		cond = (salts == 1) ? 1 : -1;
 		salts = 1;
-	} else
+	} else {
 		cond = 0;
+		if (format->params.benchmark_length < -950) {
+			/* smash the passwords */
+			struct fmt_tests *current = format->params.tests;
+			int i=0;
+			pw_mangled = 1;
+			while (current->ciphertext) {
+				if (current->plaintext[0]) {
+					TmpPW[i] =
str_alloc_copy(current->plaintext);
+					TmpPW[i][0] ^= 5;
+					current->plaintext = TmpPW[i++];
+				}
+				++current;
+			}
+			/* -1001 turns into -1 and -1000 turns into 0 , and
-999 turns into 1 for benchmark length */
+			format->params.benchmark_length += 1000;
+			if (format->params.benchmark_length > 0) {
+				cond = (salts == 1) ? 1 : -1;
+				salts = 1;
+			}
+		}
+	}
 
 	bench_set_keys(format, current, cond);
 
@@ -239,6 +262,21 @@ char *benchmark_format(struct fmt_main *
 	for (index = 0; index < 2; index++)
 		MEM_FREE(two_salts[index]);
 
+	/* unsmash the passwords */
+	if (pw_mangled) {
+		struct fmt_tests *current = format->params.tests;
+		int i=0;
+		while (current->ciphertext) {
+			if (current->plaintext[0]) {
+				TmpPW[i][0] ^= 5;
+				current->plaintext = TmpPW[i++];
+			}
+			++current;
+		}
+		/* -1001 turns into -1 and -1000 turns into 0 , and -999
turns into 1 for benchmark length */
+		format->params.benchmark_length -= 1000;
+	}
+
 	return event_abort ? "" : NULL;
 }
 
@@ -378,11 +416,13 @@ int benchmark_all(void)
 #endif /* HAVE_MPI */
 		switch (format->params.benchmark_length) {
 		case -1:
+		case -1000:
 			msg_m = "Raw";
 			msg_1 = NULL;
 			break;
 
 		case 0:
+		case -1001:
 			msg_m = "Many salts";
 			msg_1 = "Only one salt";
 			break;

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.