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) \