diff options
Diffstat (limited to 'standalone')
7 files changed, 260 insertions, 25 deletions
diff --git a/standalone/build.gradle.kts b/standalone/build.gradle.kts index c58be6a..c8baa36 100644 --- a/standalone/build.gradle.kts +++ b/standalone/build.gradle.kts @@ -11,8 +11,14 @@ repositories { } dependencies { - val wolfcryptLibPath = System.getenv("WOLFCRYPT_LIB_PATH") + "/wolfcrypt-jni.jar"; - implementation(files(wolfcryptLibPath)) + // First see if Nix gave us a path, then try the ext build, then the bundled. + if (System.getenv("WOLFCRYPT_LIB_PATH") != null) { + implementation(files(System.getenv("WOLFCRYPT_LIB_PATH") + "/wolfcrypt-jni.jar")); + } else if (file("$rootDir/ext/wolfcrypt-jni/lib/wolfcrypt-jni.jar").exists()) { + implementation(files("$rootDir/ext/wolfcrypt-jni/lib/wolfcrypt-jni.jar")) + } else { + implementation(files("$rootDir/ext/wolfcrypt-jni.jar")) + } implementation(project(":common")) testImplementation(platform("org.junit:junit-bom:5.10.2")) @@ -102,7 +108,7 @@ tasks.register<Exec>("libs") { if (osdetector.os == "windows") { commandLine("makefile.bat", "/c", libName) } else if (osdetector.os == "linux") { - commandLine("make", "-k", "-B", libName) + commandLine("make", "-f", "Makefile.ext", "-k", "-B", libName) } } 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 |
