aboutsummaryrefslogtreecommitdiff
path: root/standalone/src
diff options
context:
space:
mode:
Diffstat (limited to 'standalone/src')
-rw-r--r--standalone/src/main/java/cz/crcs/ectester/standalone/libs/BoringsslLib.java2
-rw-r--r--standalone/src/main/java/cz/crcs/ectester/standalone/libs/IppcpLib.java2
-rw-r--r--standalone/src/main/java/cz/crcs/ectester/standalone/libs/LibresslLib.java2
-rw-r--r--standalone/src/main/java/cz/crcs/ectester/standalone/libs/MbedTLSLib.java2
-rw-r--r--standalone/src/main/java/cz/crcs/ectester/standalone/libs/NativeECLibrary.java24
-rw-r--r--standalone/src/main/resources/cz/crcs/ectester/standalone/libs/jni/Makefile.ext241
6 files changed, 251 insertions, 22 deletions
diff --git a/standalone/src/main/java/cz/crcs/ectester/standalone/libs/BoringsslLib.java b/standalone/src/main/java/cz/crcs/ectester/standalone/libs/BoringsslLib.java
index 5d30d81..06e6b4a 100644
--- a/standalone/src/main/java/cz/crcs/ectester/standalone/libs/BoringsslLib.java
+++ b/standalone/src/main/java/cz/crcs/ectester/standalone/libs/BoringsslLib.java
@@ -8,7 +8,7 @@ import java.util.Set;
*/
public class BoringsslLib extends NativeECLibrary {
public BoringsslLib() {
- super("BoringSSL", "boringssl_provider");
+ super("BoringSSL", "boringssl_provider", "lib_boringssl.so");
}
@Override
diff --git a/standalone/src/main/java/cz/crcs/ectester/standalone/libs/IppcpLib.java b/standalone/src/main/java/cz/crcs/ectester/standalone/libs/IppcpLib.java
index a1c58ce..fa51585 100644
--- a/standalone/src/main/java/cz/crcs/ectester/standalone/libs/IppcpLib.java
+++ b/standalone/src/main/java/cz/crcs/ectester/standalone/libs/IppcpLib.java
@@ -9,7 +9,7 @@ import java.util.Set;
public class IppcpLib extends NativeECLibrary {
public IppcpLib() {
- super("IPPCP", "ippcp_provider");
+ super("IPPCP", "ippcp_provider", "lib_ippcp.so");
}
@Override
diff --git a/standalone/src/main/java/cz/crcs/ectester/standalone/libs/LibresslLib.java b/standalone/src/main/java/cz/crcs/ectester/standalone/libs/LibresslLib.java
index 0911119..e53399c 100644
--- a/standalone/src/main/java/cz/crcs/ectester/standalone/libs/LibresslLib.java
+++ b/standalone/src/main/java/cz/crcs/ectester/standalone/libs/LibresslLib.java
@@ -8,7 +8,7 @@ import java.util.Set;
*/
public class LibresslLib extends NativeECLibrary {
public LibresslLib() {
- super("LibreSSL", "libressl_provider");
+ super("LibreSSL", "libressl_provider", "lib_libressl.so");
}
@Override
diff --git a/standalone/src/main/java/cz/crcs/ectester/standalone/libs/MbedTLSLib.java b/standalone/src/main/java/cz/crcs/ectester/standalone/libs/MbedTLSLib.java
index 038dbe8..efc8cad 100644
--- a/standalone/src/main/java/cz/crcs/ectester/standalone/libs/MbedTLSLib.java
+++ b/standalone/src/main/java/cz/crcs/ectester/standalone/libs/MbedTLSLib.java
@@ -9,7 +9,7 @@ import java.util.Set;
public class MbedTLSLib extends NativeECLibrary {
public MbedTLSLib() {
- super("mbedTLS", "mbedtls_provider");
+ super("mbedTLS", "mbedtls_provider", "lib_mbedtls.so");
}
@Override
diff --git a/standalone/src/main/java/cz/crcs/ectester/standalone/libs/NativeECLibrary.java b/standalone/src/main/java/cz/crcs/ectester/standalone/libs/NativeECLibrary.java
index fb4e430..210a6e9 100644
--- a/standalone/src/main/java/cz/crcs/ectester/standalone/libs/NativeECLibrary.java
+++ b/standalone/src/main/java/cz/crcs/ectester/standalone/libs/NativeECLibrary.java
@@ -38,25 +38,13 @@ public abstract class NativeECLibrary extends ProviderECLibrary {
return false;
}
- /* Load the requirements, if they are bundled, write them in and load them. */
- try {
- for (String requirement : requriements) {
- if (requirement.endsWith(suffix)) {
- /* The requirement is bundled, write it */
- Path reqPath = libReqDir.resolve(requirement);
- found = FileUtil.write(ECTesterStandalone.LIB_RESOURCE_DIR + requirement, reqPath);
- if (!found) {
- return false;
- }
- System.load(reqPath.toString());
- } else {
- System.loadLibrary(requirement);
- }
+ /* Load the requirements, if they are bundled, write them in. */
+ for (String requirement : requriements) {
+ if (requirement.endsWith(suffix)) {
+ /* The requirement is bundled, write it */
+ Path reqPath = libReqDir.resolve(requirement);
+ FileUtil.write(ECTesterStandalone.LIB_RESOURCE_DIR + requirement, reqPath);
}
- } catch (UnsatisfiedLinkError ule) {
- System.err.println(resource);
- ule.printStackTrace();
- return false;
}
System.load(libPath.toString());
diff --git a/standalone/src/main/resources/cz/crcs/ectester/standalone/libs/jni/Makefile.ext b/standalone/src/main/resources/cz/crcs/ectester/standalone/libs/jni/Makefile.ext
new file mode 100644
index 0000000..16a93ff
--- /dev/null
+++ b/standalone/src/main/resources/cz/crcs/ectester/standalone/libs/jni/Makefile.ext
@@ -0,0 +1,241 @@
+###############################################################################
+## General CC setup.
+
+CC?=gcc
+CXX?=g++
+
+LFLAGS+=-fPIC -shared -L "$(JNI_LIBDIR)" -L "$(JNI_LIBDIR)/server" #-ljsig -ljvm
+CFLAGS+=-fPIC -I"$(JNI_INCLUDEDIR)" -I"$(JNI_PLATFORMINCLUDEDIR)" -I. -Wno-deprecated-declarations
+CXXFLAGS+=-fPIC -I"$(JNI_INCLUDEDIR)" -I"$(JNI_PLATFORMINCLUDEDIR)" -I. -Wno-deprecated-declarations
+
+DEBUG ?= 0
+PROJECT_ROOT_PATH ?= ../../../../../../../../../..
+
+ifeq ($(DEBUG), 1)
+ CFLAGS+=-g -O0 -Wall
+ LFLAGS+=-g
+ CXXFLAGS+=-g -O0 -Wall
+else
+ CFLAGS+=-O2
+ LFLAGS+=-O2
+ CXXFLAGS+=-O2
+endif
+
+###############################################################################
+## Java JNI setup.
+
+ifeq ($(JAVA_HOME),)
+ ifeq ($(OS),Windows_NT)
+ which = $(shell where $1)
+ else
+ which = $(shell which $1)
+ endif
+ JAVAC ?= $(realpath $(call which,javac))
+ JAVA_HOME = $(abspath $(dir $(JAVAC))..)
+endif
+
+ifneq ($(JAVA_HOME),)
+ JNI_INCLUDEDIR ?= $(JAVA_HOME)/include
+ JNI_LIBDIR ?= $(JAVA_HOME)/lib
+endif
+
+ifeq ($(JNI_INCLUDEDIR),)
+ $(error "Could not determine JNI include dir. Try specifying either JAVA_HOME or JNI_INCLUDEDIR.")
+endif
+
+ifeq ($(JNI_LIBDIR),)
+ $(error "Could not determine JNI lib dir. Try specifying either JAVA_HOME or JNI_LIBDIR.")
+endif
+
+TARGETTRIPLET := $(shell $(CC) -dumpmachine)
+
+ifeq ($(JNI_PLATFORM),)
+ ifeq ($(findstring mingw,$(TARGETTRIPLET)),mingw)
+ JNI_PLATFORM:= win32
+ else
+ ifeq ($(findstring linux,$(TARGETTRIPLET)),linux)
+ JNI_PLATFORM:= linux
+ endif
+ endif
+endif
+
+JNI_PLATFORMINCLUDEDIR ?= $(JNI_INCLUDEDIR)/$(JNI_PLATFORM)
+
+###############################################################################
+## Targets.
+
+all: tomcrypt botan cryptopp openssl boringssl gcrypt mbedtls ippcp nettle libressl
+
+# Common utils
+c_utils.o: c_utils.c
+ $(CC) $(CFLAGS) -c $<
+
+lib_timing.so: c_timing.c
+ $(CC) -o $@ -shared $(CFLAGS) -Wl,-soname,lib_timing.so $<
+
+prng.o: prng/prng.c
+ $(CC) $(CFLAGS) -c $<
+
+lib_prng.so: c_prng.c
+ $(CC) -o $@ -shared -Wl,-soname,lib_prng.so $(CFLAGS) $<
+
+c_preload.o: c_preload.c
+ $(CC) $(CFLAGS) -c $<
+
+lib_preload.so: c_preload.o prng.o
+ $(CC) -o $@ -shared $(CFLAGS) -ldl -Wl,-soname,lib_preload.so $^
+
+lib_csignals.so: c_signals.c
+ $(CC) -o $@ -shared $(CFLAGS) -pthread -lpthread -Wl,-soname,lib_csignals.so $<
+
+lib_cppsignals.so: cpp_signals.cpp
+ $(CC) -o $@ -shared $(CFLAGS) -pthread -lpthread -Wl,-soname,lib_cppsignals.so $<
+
+cpp_utils.o: cpp_utils.cpp
+ $(CXX) $(CXXFLAGS) -c $<
+
+
+clibs: lib_timing.so lib_csignals.so lib_preload.so lib_prng.so
+
+cpplibs: lib_timing.so lib_cppsignals.so lib_preload.so lib_prng.so
+
+# OpenSSL shim
+openssl: openssl_provider.so
+
+openssl_provider.so: openssl.o c_utils.o | clibs
+ $(CC) $(LFLAGS) -o $@ -Wl,-rpath,'$$ORIGIN/lib' $^ -L. $(shell pkg-config --libs openssl) -l:lib_timing.so -l:lib_csignals.so
+
+openssl.o: openssl.c
+ $(CC) $(shell pkg-config --cflags openssl) $(CFLAGS) -c $<
+
+
+# BoringSSL shim
+boringssl: boringssl_provider.so
+
+lib_boringssl.so:
+ cp $(PROJECT_ROOT_PATH)/ext/boringssl/build/crypto/libcrypto.so lib_boringssl.so
+ patchelf --set-soname lib_boringssl.so lib_boringssl.so
+
+boringssl_provider.so: boringssl.o c_utils.o | clibs lib_boringssl.so
+ $(CC) $(LFLAGS) -o $@ -Wl,-rpath,'$$ORIGIN/lib' $^ -L. lib_boringssl.so -l:lib_timing.so -l:lib_csignals.so
+
+boringssl.o: boringssl.c
+ $(CC) -I$(PROJECT_ROOT_PATH)/ext/boringssl/include/ $(CFLAGS) -c $<
+
+
+# libgcrypt shim
+gcrypt: gcrypt_provider.so
+
+gcrypt_provider.so: gcrypt.o c_utils.o | clibs
+ $(CC) $(LFLAGS) -o $@ -Wl,-rpath,'$$ORIGIN/lib' $^ -L. -pthread -lpthread $(shell libgcrypt-config --libs) -l:lib_timing.so -l:lib_csignals.so
+
+gcrypt.o: gcrypt.c
+ $(CC) $(shell libgcrypt-config --cflags) $(CFLAGS) -c $<
+
+
+# Libtomcrypt shim
+tomcrypt: tomcrypt_provider.so
+
+tomcrypt_provider.so: tomcrypt.o c_utils.o | clibs
+ $(CC) $(LFLAGS) -o $@ -Wl,-rpath,'$$ORIGIN/lib' $^ -L. -ltommath $(shell pkg-config --libs libtomcrypt) -l:lib_timing.so -l:lib_csignals.so
+
+tomcrypt.o: tomcrypt.c
+ $(CC) -DLTM_DESC $(shell pkg-config --cflags libtomcrypt) $(CFLAGS) -c $<
+
+
+# Botan-2 shim
+botan: botan_provider.so
+
+botan_provider.so: botan.o cpp_utils.o | cpplibs
+ $(CXX) $(LFLAGS) -o $@ -Wl,-rpath,'$$ORIGIN/lib' $^ -L. $(shell pkg-config --libs botan-2) -l:lib_timing.so -l:lib_cppsignals.so
+
+botan.o: botan.cpp
+ $(CXX) $(shell pkg-config --cflags botan-2) $(CXXFLAGS) -c $<
+
+
+# Crypto++ shim
+CRYPTOPP_NAME := "libcrypto++"
+ifeq ($(shell pkg-config --exists $(CRYPTOPP_NAME); echo $$?),1)
+ CRYPTOPP_NAME := "libcryptopp"
+endif
+cryptopp: cryptopp_provider.so
+
+cryptopp_provider.so: cryptopp.o cpp_utils.o | cpplibs
+ $(CXX) $(LFLAGS) -o $@ -Wl,-rpath,'$$ORIGIN/lib' $^ -L. $(shell pkg-config --libs $(CRYPTOPP_NAME)) -l:lib_timing.so -l:lib_cppsignals.so
+
+cryptopp.o: cryptopp.cpp
+ $(CXX) $(shell pkg-config --cflags $(CRYPTOPP_NAME)) $(CXXFLAGS) -c $<
+
+
+# mbedTLS shim
+mbedtls: mbedtls_provider.so
+
+lib_mbedtls.so:
+ cp $(PROJECT_ROOT_PATH)/ext/mbedtls/build/library/libmbedcrypto.so lib_mbedtls.so
+ patchelf --set-soname lib_mbedtls.so lib_mbedtls.so
+
+mbedtls_provider.so: mbedtls.o c_utils.o | clibs lib_mbedtls.so
+ $(CC) $(LFLAGS) -o $@ -Wl,-rpath,'$$ORIGIN/lib' $^ -L. lib_mbedtls.so -l:lib_timing.so -l:lib_csignals.so
+
+mbedtls.o: mbedtls.c
+ $(CC) -I$(PROJECT_ROOT_PATH)/ext/mbedtls/build/include/ $(CFLAGS) -c $<
+
+
+# Intel Performance Primitives crypto shim
+ippcp: ippcp_provider.so
+
+lib_ippcp.so:
+ cp $(PROJECT_ROOT_PATH)/ext/ipp-crypto/build/.build/RELEASE/lib/libippcp.so lib_ippcp.so
+ patchelf --set-soname lib_ippcp.so lib_ippcp.so
+
+ippcp_provider.so: ippcp.o c_utils.o | clibs lib_ippcp.so
+ $(CC) $(LFLAGS) -o $@ -Wl,-rpath,'$$ORIGIN/lib' $^ -L. lib_ippcp.so -l:lib_timing.so -l:lib_csignals.so
+
+ippcp.o: ippcp.c
+ $(CC) -I$(PROJECT_ROOT_PATH)/ext/ipp-crypto/build/.build/RELEASE/include/ $(CFLAGS) -c $<
+
+
+# Nettle shim
+nettle: nettle_provider.so
+
+nettle_provider.so: nettle.o c_utils.o | clibs
+ $(CC) $(LFLAGS) -o $@ -Wl,-rpath,'$$ORIGIN/lib' $^ -L. $(shell pkg-config --libs nettle) -l:lib_timing.so -l:lib_csignals.so $(shell pkg-config --libs hogweed) -lgmp
+
+nettle.o: nettle.c
+ $(CC) $(shell pkg-config --cflags nettle) $(shell pkg-config --libs hogweed) -lgmp $(CFLAGS) -c $<
+
+
+# LibreSSL shim
+libressl: libressl_provider.so
+
+lib_libressl.so:
+ cp $(PROJECT_ROOT_PATH)/ext/libressl/build/crypto/libcrypto.so lib_libressl.so
+ patchelf --set-soname lib_libressl.co lib_libressl.so
+
+libressl_provider.so: libressl.o c_utils.o | clibs lib_libressl.so
+ $(CC) $(LFLAGS) -o $@ -Wl,-rpath,'$$ORIGIN/lib' $^ -L. lib_libressl.so -l:lib_timing.so -l:lib_csignals.so
+
+libressl.o: libressl.c
+ $(CC) -I$(PROJECT_ROOT_PATH)/ext/libressl/build/include/ $(CFLAGS) -c $<
+
+
+help:
+ @echo "# This makefile builds the JNI shims necessary to test native libraries."
+ @echo "# Targets:"
+ @echo " - openssl"
+ @echo " - boringssl"
+ @echo " - gcrypt"
+ @echo " - tomcrypt"
+ @echo " - botan"
+ @echo " - cryptopp"
+ @echo " - mbedtls"
+ @echo " - ippcp"
+ @echo " - nettle"
+ @echo " - libressl"
+
+
+clean:
+ rm -rf *.o
+ rm -rf *.so
+
+.PHONY: all help clean openssl boringssl gcrypt tomcrypt botan cryptopp mbedtls ippcp nettle libressl