Permalink
Browse files

Jumbo-7RC-JimF-fixes.diff

  • Loading branch information...
1 parent d57ca73 commit 61cea42f979eb07284afc099550f90ae50bb858a @jfoug jfoug committed with Jul 9, 2012
Showing with 143 additions and 73 deletions.
  1. +6 −3 run/dynamic.conf
  2. +1 −0 run/relbench
  3. +6 −0 src/common.h
  4. +43 −35 src/dynamic_fmt.c
  5. +4 −4 src/dynamic_parser.c
  6. +23 −7 src/dynamic_preloads.c
  7. +6 −8 src/john.c
  8. +19 −0 src/johnswap.h
  9. +2 −1 src/md4.c
  10. +2 −1 src/md5.c
  11. +1 −1 src/md5_eq.c
  12. +1 −1 src/md5_go.c
  13. +1 −3 src/memory.c
  14. +14 −0 src/misc.c
  15. +5 −0 src/misc.h
  16. +9 −9 src/radmin_fmt_plug.c
View
@@ -221,11 +221,14 @@ Func=DynamicFunc__append_keys
Func=DynamicFunc__crypt_md5
Test=$dynamic_1009$0b9b9fdf75fc79d85c5b69aa1de26288$Salt:test1
+######################################################################
+# Dynamic Type for algorithm used in RAdmin v2.x Responses md5($p.NULL-to-100-bytes)
+# v2, where keys are in input, and set_input_len_100 'cleans' up if needed.
+######################################################################
[List.Generic:dynamic_1010]
-Expression=RAdmin v2.x MD5
+Expression=md5($p null_padded_to_len_100) RAdmin v2.x MD5
Flag=MGF_NOTSSE2Safe
-Func=DynamicFunc__clean_input
-Func=DynamicFunc__append_keys
+Flag=MGF_KEYS_INPUT
Func=DynamicFunc__set_input_len_100
Func=DynamicFunc__crypt_md5
Test=$dynamic_1010$B137F09CF92F465CABCA06AB1B283C1F:lastwolf
View
@@ -33,6 +33,7 @@ $onlyin2 = 0;
sub parse
{
chomp;
+ s/\r$//; # strip CR for non-Windows
if (/^$/) {
undef $id;
undef $name;
View
@@ -15,10 +15,16 @@
#if ARCH_INT_GT_32
typedef unsigned short ARCH_WORD_32;
+typedef unsigned int ARCH_WORD_64;
#else
typedef unsigned int ARCH_WORD_32;
+typedef unsigned long long ARCH_WORD_64;
#endif
+/* ONLY use this to check alignments of even power of 2 (2, 4, 8, 16, etc) byte counts (CNT).
+ the cast to void* MUST be done, due to C spec. http://stackoverflow.com/a/1898487 */
+#define is_aligned(PTR, CNT) ((((ARCH_WORD)(const void *)(PTR))&(CNT-1))==0)
+
#ifdef __GNUC__
#if __GNUC__ > 3 || (__GNUC__ == 3 && __GNUC_MINOR__ >= 1)
#define MAYBE_INLINE __attribute__((always_inline))
View
@@ -3864,7 +3864,6 @@ void DynamicFunc__set_input_len_64()
total_len_X86[j] = 64;
}
}
-
void DynamicFunc__set_input_len_100()
{
unsigned j;
@@ -3875,10 +3874,18 @@ void DynamicFunc__set_input_len_100()
#endif
for (j = 0; j < m_count; ++j)
{
+ unsigned char *cp;
+#if MD5_X2
+ if (j&1)
+ cp = &(input_buf_X86[j>>MD5_X2].x2.B2[total_len_X86[j]+1]);
+ else
+#endif
+ cp = &(input_buf_X86[j>>MD5_X2].x1.B[total_len_X86[j]+1]);
+ while (*cp)
+ *cp++ = 0;
total_len_X86[j] = 100;
}
}
-
void DynamicFunc__set_input2_len_64()
{
unsigned j;
@@ -4821,7 +4828,7 @@ void DynamicFunc__PHPassCrypt()
Lcount = atoi64[ARCH_INDEX(cursalt[8])];
if (Lcount < 7 || Lcount > 31)
- exit(fprintf(stderr, "Error, invalid loop byte in a php salt %s\n",cursalt));
+ exit(!!fprintf(stderr, "Error, invalid loop byte in a php salt %s\n",cursalt));
Lcount = (1<<Lcount);
DynamicFunc__clean_input();
@@ -6869,19 +6876,19 @@ void DynamicFunc__SHA1_crypt_input2_to_output1_FINAL()
*************************************************************/
void DynamicFunc__overwrite_from_last_output2_to_input1_as_base16_no_size_fix()
{
- exit(fprintf(stderr, "Error, DynamicFunc__overwrite_from_last_output2_to_input1_as_base16_no_size_fix() primitive has not been implemented\n"));
+ exit(!!fprintf(stderr, "Error, DynamicFunc__overwrite_from_last_output2_to_input1_as_base16_no_size_fix() primitive has not been implemented\n"));
}
void DynamicFunc__append2_from_last_output2_as_raw()
{
- exit(fprintf(stderr, "Error, DynamicFunc__append2_from_last_output2_as_raw() primitive has not been implemented\n"));
+ exit(!!fprintf(stderr, "Error, DynamicFunc__append2_from_last_output2_as_raw() primitive has not been implemented\n"));
}
void DynamicFunc__append_from_last_output1_as_raw()
{
- exit(fprintf(stderr, "Error, DynamicFunc__append_from_last_output1_as_raw() primitive has not been implemented\n"));
+ exit(!!fprintf(stderr, "Error, DynamicFunc__append_from_last_output1_as_raw() primitive has not been implemented\n"));
}
void DynamicFunc__append2_from_last_output1_as_raw()
{
- exit(fprintf(stderr, "Error, DynamicFunc__append2_from_last_output1_as_raw() primitive has not been implemented\n"));
+ exit(!!fprintf(stderr, "Error, DynamicFunc__append2_from_last_output1_as_raw() primitive has not been implemented\n"));
}
/**************************************************************
@@ -7109,7 +7116,7 @@ int dynamic_SETUP(DYNAMIC_Setup *Setup, struct fmt_main *pFmt)
if ( (Setup->flags & MGF_SALT_AS_HEX_TO_SALT2) == MGF_SALT_AS_HEX_TO_SALT2) {
curdat.dynamic_salt_as_hex = 2;
if (curdat.b2Salts)
- exit(fprintf(stderr, "Error, MGF_SALT_AS_HEX_TO_SALT2 and MGF_SALTED2 are not valid to use in same format\n"));
+ return !fprintf(stderr, "Error invalid format %s: MGF_SALT_AS_HEX_TO_SALT2 and MGF_SALTED2 are not valid to use in same format\n", Setup->szFORMAT_NAME);
curdat.b2Salts = 2;
}
if ( (Setup->flags & MGF_SALT_UNICODE_B4_CRYPT) == MGF_SALT_UNICODE_B4_CRYPT && curdat.dynamic_salt_as_hex)
@@ -7163,7 +7170,7 @@ int dynamic_SETUP(DYNAMIC_Setup *Setup, struct fmt_main *pFmt)
curdat.store_keys_in_input_unicode_convert = !!(Setup->startFlags&MGF_KEYS_UNICODE_B4_CRYPT);
if (curdat.store_keys_in_input_unicode_convert && curdat.store_keys_in_input)
- return !!fprintf(stderr, "Invalid format. Using MGF_KEYS_INPUT and MGF_KEYS_UNICODE_B4_CRYPT in same format is NOT valid\n");
+ return !fprintf(stderr, "Error invalid format %s: Using MGF_KEYS_INPUT and MGF_KEYS_UNICODE_B4_CRYPT in same format is NOT valid\n", Setup->szFORMAT_NAME);
curdat.store_keys_normal_but_precompute_md5_to_output2 = !!(Setup->startFlags&MGF_KEYS_CRYPT_IN2);
@@ -7300,12 +7307,12 @@ int dynamic_SETUP(DYNAMIC_Setup *Setup, struct fmt_main *pFmt)
Setup->pFuncs[0] != DynamicFunc__clean_input_kwik &&
Setup->pFuncs[0] != DynamicFunc__clean_input2_kwik &&
Setup->pFuncs[0] != DynamicFunc__clean_input_full)
- return !!fprintf(stderr, "Invalid format. The first command MUST be a clean of input 1 or input 2\nOR a special key 2 input loader function\n");
+ return !fprintf(stderr, "Error invalid format %s: The first command MUST be a clean of input 1 or input 2 OR a special key 2 input loader function\n", Setup->szFORMAT_NAME);
}
if ( (Setup->flags&MGF_SALTED2)==MGF_SALTED2 && (Setup->flags&MGF_SALT_AS_HEX) == MGF_SALT_AS_HEX)
{
// if the user wants salt_as_hex, then here can NOT be 2 salts.
- return !!fprintf(stderr, "Invalid format. If using MGF_SALT_AS_HEX flag, then you can NOT have a 2nd salt.\n");
+ return !fprintf(stderr, "Error invalid format %s: If using MGF_SALT_AS_HEX flag, then you can NOT have a 2nd salt.\n", Setup->szFORMAT_NAME);
}
if (Setup->pFuncs && Setup->pFuncs[0])
@@ -7360,51 +7367,51 @@ int dynamic_SETUP(DYNAMIC_Setup *Setup, struct fmt_main *pFmt)
if (curdat.store_keys_in_input)
{
if (Setup->pFuncs[i] == DynamicFunc__append_keys)
- return !!fprintf(stderr, "MGF_KEYS_INPUT used, but append_keys called and that is invalid\n");
+ return !fprintf(stderr, "Error invalid format %s: MGF_KEYS_INPUT used, but append_keys called and that is invalid\n", Setup->szFORMAT_NAME);
if (Setup->pFuncs[i] == DynamicFunc__append_keys2)
- return !!fprintf(stderr, "MGF_KEYS_INPUT used, but append_keys2 called and that is invalid\n");
+ return !fprintf(stderr, "Error invalid format %s: MGF_KEYS_INPUT used, but append_keys2 called and that is invalid\n", Setup->szFORMAT_NAME);
if (Setup->pFuncs[i] == DynamicFunc__clean_input)
- return !!fprintf(stderr, "MGF_KEYS_INPUT used, but clean_input called and that is invalid\n");
+ return !fprintf(stderr, "Error invalid format %s: MGF_KEYS_INPUT used, but clean_input called and that is invalid\n", Setup->szFORMAT_NAME);
if (Setup->pFuncs[i] == DynamicFunc__append_salt)
- return !!fprintf(stderr, "MGF_KEYS_INPUT used, but append_salt called and that is invalid\n");
+ return !fprintf(stderr, "Error invalid format %s: MGF_KEYS_INPUT used, but append_salt called and that is invalid\n", Setup->szFORMAT_NAME);
if (Setup->pFuncs[i] == DynamicFunc__append_from_last_output2_to_input1_as_base16)
- return !!fprintf(stderr, "MGF_KEYS_INPUT used, but append_from_last_output2_to_input1_as_base16 called and that is invalid\n");
+ return !fprintf(stderr, "Error invalid format %s: MGF_KEYS_INPUT used, but append_from_last_output2_to_input1_as_base16 called and that is invalid\n", Setup->szFORMAT_NAME);
if (Setup->pFuncs[i] == DynamicFunc__overwrite_from_last_output2_to_input1_as_base16_no_size_fix)
- return !!fprintf(stderr, "MGF_KEYS_INPUT used, but overwrite_from_last_output2_to_input1_as_base16_no_size_fix called and that is invalid\n");
+ return !fprintf(stderr, "Error invalid format %s: MGF_KEYS_INPUT used, but overwrite_from_last_output2_to_input1_as_base16_no_size_fix called and that is invalid\n", Setup->szFORMAT_NAME);
if (Setup->pFuncs[i] == DynamicFunc__append_from_last_output_as_base16)
- return !!fprintf(stderr, "MGF_KEYS_INPUT used, but append_from_last_output_as_base16s called and that is invalid\n");
+ return !fprintf(stderr, "Error invalid format %s: MGF_KEYS_INPUT used, but append_from_last_output_as_base16s called and that is invalid\n", Setup->szFORMAT_NAME);
if (Setup->pFuncs[i] == DynamicFunc__overwrite_from_last_output_as_base16_no_size_fix)
- return !!fprintf(stderr, "MGF_KEYS_INPUT used, but overwrite_from_last_output_as_base16_no_size_fix called and that is invalid\n");
+ return !fprintf(stderr, "Error invalid format %s: MGF_KEYS_INPUT used, but overwrite_from_last_output_as_base16_no_size_fix called and that is invalid\n", Setup->szFORMAT_NAME);
if (Setup->pFuncs[i] == DynamicFunc__append_2nd_salt)
- return !!fprintf(stderr, "MGF_KEYS_INPUT used, but append_2nd_salt called and that is invalid\n");
+ return !fprintf(stderr, "Error invalid format %s: MGF_KEYS_INPUT used, but append_2nd_salt called and that is invalid\n", Setup->szFORMAT_NAME);
if (Setup->pFuncs[i] == DynamicFunc__set_input_len_32)
- return !!fprintf(stderr, "MGF_KEYS_INPUT used, but DynamicFunc__set_input_len_32 called and that is invalid\n");
+ return !fprintf(stderr, "Error invalid format %s: MGF_KEYS_INPUT used, but DynamicFunc__set_input_len_32 called and that is invalid\n", Setup->szFORMAT_NAME);
if (Setup->pFuncs[i] == DynamicFunc__set_input_len_64)
- return !!fprintf(stderr, "MGF_KEYS_INPUT used, but DynamicFunc__set_input_len_32 called and that is invalid\n");
+ return !fprintf(stderr, "Error invalid format %s: MGF_KEYS_INPUT used, but DynamicFunc__set_input_len_32 called and that is invalid\n", Setup->szFORMAT_NAME);
if (Setup->pFuncs[i] == DynamicFunc__overwrite_salt_to_input1_no_size_fix)
- return !!fprintf(stderr, "MGF_KEYS_INPUT used, but DynamicFunc__set_input_len_32 called and that is invalid\n");
+ return !fprintf(stderr, "Error invalid format %s: MGF_KEYS_INPUT used, but DynamicFunc__set_input_len_32 called and that is invalid\n", Setup->szFORMAT_NAME);
if (Setup->pFuncs[i] == DynamicFunc__append_input_from_input2)
- return !!fprintf(stderr, "MGF_KEYS_INPUT used, but DynamicFunc__set_input_len_32 called and that is invalid\n");
+ return !fprintf(stderr, "Error invalid format %s: MGF_KEYS_INPUT used, but DynamicFunc__set_input_len_32 called and that is invalid\n", Setup->szFORMAT_NAME);
}
// Ok if copy constants are set, make SURE we have that many constants.
if ( (Setup->pFuncs[i] == DynamicFunc__append_input1_from_CONST1 || Setup->pFuncs[i] == DynamicFunc__append_input2_from_CONST1) && curdat.nConsts == 0)
- return !!fprintf(stderr, "Append Constant function called, but NO constants in the format\n");
+ return !fprintf(stderr, "Error invalid format %s: Append Constant function called, but NO constants in the format\n", Setup->szFORMAT_NAME);
if ( (Setup->pFuncs[i] == DynamicFunc__append_input1_from_CONST2 || Setup->pFuncs[i] == DynamicFunc__append_input2_from_CONST2) && curdat.nConsts < 2)
- return !!fprintf(stderr, "Append Constant #2 function called, but NO constants, or less than 2 constants in the format\n");
+ return !fprintf(stderr, "Error invalid format %s: Append Constant #2 function called, but NO constants, or less than 2 constants in the format\n", Setup->szFORMAT_NAME);
if ( (Setup->pFuncs[i] == DynamicFunc__append_input1_from_CONST3 || Setup->pFuncs[i] == DynamicFunc__append_input2_from_CONST3) && curdat.nConsts < 3)
- return !!fprintf(stderr, "Append Constant #3 function called, but NO constants, or less than 3 constants in the format\n");
+ return !fprintf(stderr, "Error invalid format %s: Append Constant #3 function called, but NO constants, or less than 3 constants in the format\n", Setup->szFORMAT_NAME);
if ( (Setup->pFuncs[i] == DynamicFunc__append_input1_from_CONST4 || Setup->pFuncs[i] == DynamicFunc__append_input2_from_CONST4) && curdat.nConsts < 4)
- return !!fprintf(stderr, "Append Constant #4 function called, but NO constants, or less than 4 constants in the format\n");
+ return !fprintf(stderr, "Error invalid format %s: Append Constant #4 function called, but NO constants, or less than 4 constants in the format\n", Setup->szFORMAT_NAME);
if ( (Setup->pFuncs[i] == DynamicFunc__append_input1_from_CONST5 || Setup->pFuncs[i] == DynamicFunc__append_input2_from_CONST5) && curdat.nConsts < 5)
- return !!fprintf(stderr, "Append Constant #5 function called, but NO constants, or less than 5 constants in the format\n");
+ return !fprintf(stderr, "Error invalid format %s: Append Constant #5 function called, but NO constants, or less than 5 constants in the format\n", Setup->szFORMAT_NAME);
if ( (Setup->pFuncs[i] == DynamicFunc__append_input1_from_CONST6 || Setup->pFuncs[i] == DynamicFunc__append_input2_from_CONST6) && curdat.nConsts < 6)
- return !!fprintf(stderr, "Append Constant #6 function called, but NO constants, or less than 6 constants in the format\n");
+ return !fprintf(stderr, "Error invalid format %s: Append Constant #6 function called, but NO constants, or less than 6 constants in the format\n", Setup->szFORMAT_NAME);
if ( (Setup->pFuncs[i] == DynamicFunc__append_input1_from_CONST7 || Setup->pFuncs[i] == DynamicFunc__append_input2_from_CONST7) && curdat.nConsts < 7)
- return !!fprintf(stderr, "Append Constant #7 function called, but NO constants, or less than 7 constants in the format\n");
+ return !fprintf(stderr, "Error invalid format %s: Append Constant #7 function called, but NO constants, or less than 7 constants in the format\n", Setup->szFORMAT_NAME);
if ( (Setup->pFuncs[i] == DynamicFunc__append_input1_from_CONST8 || Setup->pFuncs[i] == DynamicFunc__append_input2_from_CONST8) && curdat.nConsts < 8)
- return !!fprintf(stderr, "Append Constant #8 function called, but NO constants, or less than 8 constants in the format\n");
+ return !fprintf(stderr, "Error invalid format %s: Append Constant #8 function called, but NO constants, or less than 8 constants in the format\n", Setup->szFORMAT_NAME);
if ( (Setup->pFuncs[i] == DynamicFunc__append_2nd_salt || Setup->pFuncs[i] == DynamicFunc__append_2nd_salt2) && curdat.b2Salts == 0)
- return !!fprintf(stderr, "A call to one of the 'salt-2' functions, but this format does not have MFG_SALT2 flag set\n");
+ return !fprintf(stderr, "Error invalid format %s: A call to one of the 'salt-2' functions, but this format does not have MFG_SALT2 flag set\n", Setup->szFORMAT_NAME);
// Ok, if we have made it here, the function is 'currently' still valid. Load this pointer into our array of pointers.
pFuncs = ConvertFuncs(Setup->pFuncs[i], &cnt2);
@@ -7418,14 +7425,14 @@ int dynamic_SETUP(DYNAMIC_Setup *Setup, struct fmt_main *pFmt)
curdat.dynamic_FUNCTIONS[j-1] == DynamicFunc__SHA1_crypt_input2_to_output1_FINAL)
{
if (Setup->pFuncs[i+1])
- return !!fprintf(stderr, "DynamicFunc__SHA1_crypt_inputX_to_output1_FINAL, can ONLY be used as the last function in a script\n");
+ return !fprintf(stderr, "Error invalid format %s: DynamicFunc__SHA1_crypt_inputX_to_output1_FINAL, can ONLY be used as the last function in a script\n", Setup->szFORMAT_NAME);
}
}
curdat.dynamic_FUNCTIONS[j] = NULL;
}
if (!Setup->pPreloads || Setup->pPreloads[0].ciphertext == NULL)
{
- return !!fprintf(stderr, "Error, no validation hash(s) for this format\n");
+ return !fprintf(stderr, "Error invalid format %s: Error, no validation hash(s) for this format\n", Setup->szFORMAT_NAME);
}
cnt = 0;
@@ -7526,6 +7533,7 @@ static int LoadOneFormat(int idx, struct fmt_main *pFmt)
{
fprintf(stderr, "ERROR, when loading dynamic formats, the wrong curdat item was linked to this type:\nTYPE_SIG=%s\nTest_Dat=%s\n",
curdat.dynamic_WHICH_TYPE_SIG, pFmt->params.tests[0].ciphertext);
+ return 0;
}
return 1;
}
View
@@ -573,7 +573,7 @@ char *dynamic_LOAD_PARSER_SIGNATURE(int which)
return NULL;
// Setup the 'default' format name
- sprintf(Sig, "dynamic_%d ", which);
+ sprintf(Sig, "dynamic_%d: ", which);
gen_line = gen_source->head;
while (gen_line)
@@ -644,13 +644,13 @@ int dynamic_LOAD_PARSER_FUNCTIONS(int which, struct fmt_main *pFmt)
if (mpi_id == 0)
#endif
fprintf(stderr, "Could not find section [List.Generic:dynamic_%d] in the john.ini/conf file\n", which);
- error();
+ //error();
}
// Setup the 'default' format name
sprintf(SetupName, "$dynamic_%d$", which);
sprintf(SetupNameID, "dynamic_%d", which);
- pSetup->szFORMAT_NAME = str_alloc_copy(SetupName);
+ pSetup->szFORMAT_NAME = str_alloc_copy(SetupNameID);
// allocate (and set null) enough file pointers
cnt = Count_Items("Func=");
@@ -687,7 +687,7 @@ int dynamic_LOAD_PARSER_FUNCTIONS(int which, struct fmt_main *pFmt)
if (mpi_id == 0)
#endif
fprintf(stderr, "Error parsing section [List.Generic:dynamic_%d]\nError in line %d file is %s\n", which, gen_line->number, gen_line->cfg_name);
- error();
+ //error();
}
gen_line = gen_line->next;
}
View
@@ -399,13 +399,29 @@ static struct fmt_tests _Preloads_14[] =
//dynamic_15 --> md5($u.md5($p).$s)
static DYNAMIC_primitive_funcp _Funcs_15[] =
{
- // MGF_KEYS_CRYPT_IN2
- DynamicFunc__clean_input,
- DynamicFunc__append_userid,
- DynamicFunc__append_from_last_output2_to_input1_as_base16,
- DynamicFunc__append_salt,
- DynamicFunc__crypt_md5,
+//#if defined (MMX_COEF)
+// // -any Many salts: 3264K Only one salt: 1677K
+// // -sse2i Many salts: 3195K Only one salt: 1638K (md5_asm 1, md5_x2 0 md5_imm 1)
+// // generic Many salts: 3539K Only one salt: 1843K (md5_asm 0, md5_x2 1 md5_imm 1)
+// // MGF_KEYS_CRYPT_IN2
+// DynamicFunc__clean_input,
+// DynamicFunc__append_userid,
+// DynamicFunc__append_from_last_output2_to_input1_as_base16,
+// DynamicFunc__append_salt,
+// DynamicFunc__crypt_md5,
+// NULL
+//#else
+ // -any Many salts: 3401K Only one salt: 1515K
+ // -sse2i Many salts: 3412K Only one salt: 1510K (md5_asm 1, md5_x2 0 md5_imm 1)
+ // generic Many salts: 3688K Only one salt: 1666K (md5_asm 0, md5_x2 1 md5_imm 1)
+ // MGF_KEYS_BASE16_IN1
+ DynamicFunc__clean_input2,
+ DynamicFunc__append_userid2,
+ DynamicFunc__append_input2_from_input,
+ DynamicFunc__append_salt2,
+ DynamicFunc__crypt_md5_in2_to_out1,
NULL
+//#endif
};
static struct fmt_tests _Preloads_15[] =
{
@@ -891,7 +907,7 @@ static DYNAMIC_Setup Setups[] =
#else
{ "dynamic_14: md5($s.md5($p).$s)", _Funcs_14,_Preloads_14,_ConstDefault, MGF_SALTED, MGF_KEYS_BASE16_IN1, -11, 55, 80, -24},
#endif
- { "dynamic_15: md5($u.md5($p).$s)", _Funcs_15,_Preloads_15,_ConstDefault, MGF_SALTED|MGF_USERNAME|MGF_NOTSSE2Safe|MGF_FULL_CLEAN_REQUIRED, MGF_KEYS_CRYPT_IN2, -12, 55, 80 }, // 26 is 12+12+2 so 24+52 'fits
+ { "dynamic_15: md5($u.md5($p).$s)", _Funcs_15,_Preloads_15,_ConstDefault, MGF_SALTED|MGF_USERNAME|MGF_NOTSSE2Safe|MGF_FULL_CLEAN_REQUIRED, MGF_KEYS_BASE16_IN1, -12, 55, 80 }, // 26 is 12+12+2 so 24+52 'fits
{ "dynamic_16: md5(md5(md5($p).$s).$s2)", _Funcs_16,_Preloads_16,_ConstDefault, MGF_SALTED|MGF_SALTED2|MGF_NOTSSE2Safe, MGF_KEYS_BASE16_IN1, -23, 55, 80 },
{ "dynamic_17: phpass ($P$ or $H$)", _Funcs_17,_Preloads_17,_ConstDefault, MGF_SALTED|MGF_INPBASE64, MGF_PHPassSetup, 9, 38 },
{ "dynamic_18: md5($s.Y.$p.0xF7.$s)(Post.Office MD5)", _Funcs_18,_Preloads_18,_Const_18, MGF_SALTED|MGF_NOTSSE2Safe, MGF_POSetup, 32, 32 },
Oops, something went wrong.

0 comments on commit 61cea42

Please sign in to comment.