diff -urpN cur1/src/dynamic_fmt.c cur/src/dynamic_fmt.c --- cur1/src/dynamic_fmt.c 2013-01-05 08:42:35.484375000 -0600 +++ cur/src/dynamic_fmt.c 2013-01-05 14:09:33.921875000 -0600 @@ -1146,11 +1146,6 @@ key_cleaning: unsigned int len; ARCH_WORD_32 temp; -#ifndef SHA1_SSE_PARA - if (!index) - memset(total_len, 0, sizeof(total_len)); -#endif - len = 0; while((temp = JOHNSWAP(*key32++)) & 0xff000000) { if (!(temp & 0xff0000)) @@ -1237,6 +1232,9 @@ static void clear_keys(void) { #else DynamicFunc__clean_input_full(); #endif +#ifndef SHA1_SSE_PARA + memset(total_len, 0, sizeof(total_len)); +#endif } /********************************************************************************* diff -urpN cur1/src/formats.c cur/src/formats.c --- cur1/src/formats.c 2013-01-05 08:42:35.609375000 -0600 +++ cur/src/formats.c 2013-01-05 12:11:53.734375000 -0600 @@ -204,7 +204,7 @@ char *fmt_self_test(struct fmt_main *for if (index == 1 && lengthcheck == 1 && max > 1) { lengthcheck = 3; - for (i = 1; i < max; i++) { + for (i = 0; i < max; i++) { if (i == index) continue; memset(longcand, 'A' + (i % 23), ml); longcand[ml] = 0; diff -urpN cur1/src/john.c cur/src/john.c --- cur1/src/john.c 2013-01-05 08:42:35.921875000 -0600 +++ cur/src/john.c 2013-01-05 13:26:51.046875000 -0600 @@ -220,8 +221,12 @@ static int exit_status = 0; static void john_register_one(struct fmt_main *format) { - if (options.format) - if (strcmp(options.format, format->params.label)) return; + if (options.format) { + // -format=dynamic is working again. It was 'broke' when switched to thin dynamic format structures. + if (!strcmp(options.format, "dynamic")) { + if ( (format->params.flags & FMT_DYNAMIC) == 0) return; + } else if (strcmp(options.format, format->params.label)) return; + } fmt_register(format); }