diff -ru a/src/DES_bs.c b/src/DES_bs.c --- a/src/DES_bs.c 2012-07-14 09:36:44.000000000 -0400 +++ b/src/DES_bs.c 2016-08-07 15:08:48.011369100 -0400 @@ -52,7 +52,7 @@ }; #if DES_BS_ASM -extern void DES_bs_init_asm(void); +extern void DES_INTERNAL_CALL DES_bs_init_asm(void); #endif void DES_bs_init(int LM, int cpt) diff -ru a/src/DES_bs.h b/src/DES_bs.h --- a/src/DES_bs.h 2013-05-06 02:19:49.000000000 -0400 +++ b/src/DES_bs.h 2016-08-07 15:09:17.512056400 -0400 @@ -35,6 +35,16 @@ #define DES_bs_vector ARCH_WORD #endif +#ifndef HAVE_INTERNAL_ATTR +#define HAVE_INTERNAL_ATTR 0 +#endif + +#if HAVE_INTERNAL_ATTR +#define DES_INTERNAL_CALL __attribute__((visibility("internal"))) +#else +#define DES_INTERNAL_CALL +#endif + /* * All bitslice DES parameters combined into one struct for more efficient * cache usage. Don't re-order unless you know what you're doing, as there @@ -112,7 +122,7 @@ #else #define DES_bs_mt 0 #define DES_bs_cpt 1 -extern DES_bs_combined DES_bs_all; +extern DES_INTERNAL_CALL DES_bs_combined DES_bs_all; #define for_each_t(n) #define init_t() #endif @@ -120,7 +130,7 @@ /* * Initializes the internal structures. */ -extern void DES_bs_init(int LM, int cpt); +extern void DES_INTERNAL_CALL DES_bs_init(int LM, int cpt); /* * Sets a salt for DES_bs_crypt(). @@ -139,12 +149,12 @@ /* * Almost generic implementation: 24-bit salts, variable iteration count. */ -extern void DES_bs_crypt(int count, int keys_count); +extern void DES_INTERNAL_CALL DES_bs_crypt(int count, int keys_count); /* * A simplified special-case implementation: 12-bit salts, 25 iterations. */ -extern void DES_bs_crypt_25(int keys_count); +extern void DES_INTERNAL_CALL DES_bs_crypt_25(int keys_count); /* * Another special-case version: a non-zero IV, no salts, no iterations. diff -ru a/src/Makefile b/src/Makefile --- a/src/Makefile 2013-05-29 19:21:25.000000000 -0400 +++ b/src/Makefile 2016-08-07 16:23:07.246422700 -0400 @@ -104,6 +104,8 @@ # @echo "linux-ppc64-altivec Linux, PowerPC 64-bit w/AltiVec" @echo "linux-ppc64 Linux, PowerPC 64-bit" @echo "linux-ia64 Linux, IA-64" + @echo "midipix-x86-64-avx Midipix, x86-64 with AVX (2011+ Intel CPUs)" + @echo "midipix-x86-64 Midipix, x86-64 with SSE2 (most common)" @echo "freebsd-x86-64 FreeBSD, x86-64 with SSE2 (best)" @echo "freebsd-x86-sse2 FreeBSD, x86 with SSE2 (best if 32-bit)" @echo "freebsd-x86-mmx FreeBSD, x86 with MMX" @@ -306,6 +308,22 @@ CFLAGS="$(CFLAGS) -DHAVE_CRYPT" \ LDFLAGS="$(LDFLAGS) -lcrypt" +midipix-x86-64-avx: + $(LN) x86-64.h arch.h + $(MAKE) $(PROJ) \ + JOHN_OBJS="$(JOHN_OBJS) c3_fmt.o x86-64.o" \ + CFLAGS_MAIN="$(CFLAGS) -DJOHN_AVX -DHAVE_CRYPT" \ + CFLAGS="$(CFLAGS) -mavx -DHAVE_CRYPT -DHAVE_INTERNAL_ATTR" \ + ASFLAGS="$(ASFLAGS) -mavx" \ + LDFLAGS="$(LDFLAGS) -lcrypt" + +midipix-x86-64: + $(LN) x86-64.h arch.h + $(MAKE) $(PROJ) \ + JOHN_OBJS="$(JOHN_OBJS) c3_fmt.o x86-64.o" \ + CFLAGS="$(CFLAGS) -DHAVE_CRYPT -DHAVE_INTERNAL_ATTR" \ + LDFLAGS="$(LDFLAGS) -lcrypt" + freebsd-x86-64: $(LN) x86-64.h arch.h $(MAKE) $(PROJ) \