From 562263257560b06a0759972744ddbfbaa5bc81f8 Mon Sep 17 00:00:00 2001 From: quapka Date: Thu, 18 Jul 2024 13:43:15 +0200 Subject: Don't build LibreSSL from submodule --- .../src/main/java/cz/crcs/ectester/standalone/libs/LibresslLib.java | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) (limited to 'standalone/src/main/java') 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 2dba049..a403896 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", "lib_libressl.so"); + super("LibreSSL", "libressl_provider"); } @Override -- cgit v1.3.1 From af299ba4547319a2bcd6a0e035e2fd5cfadd47a7 Mon Sep 17 00:00:00 2001 From: quapka Date: Mon, 22 Jul 2024 13:38:29 +0200 Subject: Remove unnecessary dependency since MbedTLS package is now used --- .../src/main/java/cz/crcs/ectester/standalone/libs/MbedTLSLib.java | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) (limited to 'standalone/src/main/java') 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 e44598c..26b4d09 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", "lib_mbedtls.so"); + super("mbedTLS", "mbedtls_provider"); } @Override -- cgit v1.3.1 From 272a2b40619bb07d05c6ae5df9e6db839cb0404c Mon Sep 17 00:00:00 2001 From: quapka Date: Mon, 22 Jul 2024 16:17:05 +0200 Subject: Link BoringSSL statically In order to prevent problems with dynamic linking of OpenSSL, LibreSSL and BoringSSL -- that all have libcrypto.so -- we link statically into the providers. --- flake.nix | 12 +++++------- .../java/cz/crcs/ectester/standalone/libs/BoringsslLib.java | 2 +- .../resources/cz/crcs/ectester/standalone/libs/jni/Makefile | 2 +- 3 files changed, 7 insertions(+), 9 deletions(-) (limited to 'standalone/src/main/java') diff --git a/flake.nix b/flake.nix index 8311b35..6d85575 100644 --- a/flake.nix +++ b/flake.nix @@ -23,7 +23,7 @@ # NOTE this build does not match upstream, but is what ECTester did at the time of writing buildPhase = '' - cmake -GNinja -DBUILD_SHARED_LIBS=1 -Bbuild + cmake -GNinja -Bbuild pushd build ninja crypto popd @@ -34,7 +34,7 @@ mv include $dev pushd build - mv crypto/libcrypto.so $out/lib/lib_boringssl.so + mv crypto/libcrypto.a $out/lib/lib_boringssl.a popd ''; @@ -116,7 +116,7 @@ preConfigure = '' cp ${libresslShim.out}/lib/libressl_provider.so standalone/src/main/resources/cz/crcs/ectester/standalone/libs/jni/ cp ${boringsslShim.out}/lib/boringssl_provider.so standalone/src/main/resources/cz/crcs/ectester/standalone/libs/jni/ - cp ${patched_boringssl.out}/lib/lib_boringssl.so standalone/src/main/resources/cz/crcs/ectester/standalone/libs/jni/ + cp ${patched_boringssl.out}/lib/lib_boringssl.a standalone/src/main/resources/cz/crcs/ectester/standalone/libs/jni/ cp ${mbedtlsShim.out}/lib/mbedtls_provider.so standalone/src/main/resources/cz/crcs/ectester/standalone/libs/jni/ pushd standalone/src/main/resources/cz/crcs/ectester/standalone/libs/jni/ make lib_timing.so lib_csignals.so lib_cppsignals.so @@ -235,15 +235,13 @@ }; devShells.default = with pkgs; mkShell rec { nativeBuildInputs = [ - libresslShim + pkg-config ]; preConfigure = '' - cp ${libresslShim.out}/libressl_provider.so standalone/src/main/resources/cz/crcs/ectester/standalone/libs/jni/ - ls standalone/src/main/resources/cz/crcs/ectester/standalone/libs/jni + cp ${patched_boringssl}/lib/lib_boringssl.a standalone/src/main/resources/cz/crcs/ectester/standalone/libs/jni/ ''; - buildInputs = [ # # gradle2nix # libresslShim 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 af4d969..ddc25c6 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", "lib_boringssl.so"); + super("BoringSSL", "boringssl_provider"); } @Override diff --git a/standalone/src/main/resources/cz/crcs/ectester/standalone/libs/jni/Makefile b/standalone/src/main/resources/cz/crcs/ectester/standalone/libs/jni/Makefile index 5c71f87..32df65f 100644 --- a/standalone/src/main/resources/cz/crcs/ectester/standalone/libs/jni/Makefile +++ b/standalone/src/main/resources/cz/crcs/ectester/standalone/libs/jni/Makefile @@ -100,7 +100,7 @@ boringssl: boringssl_provider.so # cp $(PROJECT_ROOT_PATH)/ext/boringssl/build/crypto/libcrypto.so lib_boringssl.so boringssl_provider.so: boringssl.o c_utils.o | lib_timing.so lib_csignals.so - NIX_CFLAGS_COMPILE= $(CC) $(CFLAGS) $(LFLAGS) -o $@ -Wl,-rpath,'$$ORIGIN/lib' $^ -L. -l:lib_boringssl.so -l:lib_timing.so -l:lib_csignals.so + NIX_CFLAGS_COMPILE= $(CC) $(CFLAGS) $(LFLAGS) -o $@ -Wl,-rpath,'$$ORIGIN/lib' $^ -L. -Wl,-Bstatic -l:lib_boringssl.a -Wl,-Bdynamic -l:lib_timing.so -l:lib_csignals.so boringssl.o: boringssl.c NIX_CFLAGS_COMPILE= $(CC) -I$(BORINGSSL_CFLAGS) $(CFLAGS) -c $< -- cgit v1.3.1 From 40dde8f2c1297f8bb85ddf34f9e278af9d8b3904 Mon Sep 17 00:00:00 2001 From: quapka Date: Tue, 23 Jul 2024 10:53:56 +0200 Subject: Fix IPPCP ECLib requirements --- standalone/src/main/java/cz/crcs/ectester/standalone/libs/IppcpLib.java | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) (limited to 'standalone/src/main/java') 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 115fe00..1b0047e 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", "lib_ippcp.so"); + super("IPPCP", "ippcp_provider"); } @Override -- cgit v1.3.1 From ccdd0a2b894abc2aad1e777643813d20956e0fe3 Mon Sep 17 00:00:00 2001 From: quapka Date: Wed, 24 Jul 2024 16:02:19 +0200 Subject: Unify patching OpenSSL for all Flake outputs --- flake.nix | 47 +++++++++------------- .../crcs/ectester/standalone/libs/OpensslLib.java | 2 +- 2 files changed, 20 insertions(+), 29 deletions(-) (limited to 'standalone/src/main/java') diff --git a/flake.nix b/flake.nix index f0338b7..93d87ed 100644 --- a/flake.nix +++ b/flake.nix @@ -46,10 +46,17 @@ mv crypto/libcrypto.a $out/lib/lib_boringssl.a popd ''; - }); - - + # FIXME: `nix develeop` now has different version than `nix run` + openssl = { version ? "", hash ? "" }: (pkgs.openssl.override { static = true; }).overrideAttrs (final: prev: rec { + pname = "openssl"; + src = if version != "" then pkgs.fetchurl { + url = "https://www.openssl.org/source/openssl-${version}.tar.gz"; + hash = hash; + } else prev.src; + # FIXME Removing patches might cause unwanted things; this should be version based! + patches = []; + }); libressl = pkgs.libressl.overrideAttrs (_old: rec { # devLibPath = pkgs.lib.makeLibraryPath [ pkgs.libressl.dev ]; # pname = "libressl"; @@ -99,23 +106,7 @@ }; buildECTesterStandalone = { opensslVersion, opensslHash }: ( let - patched_openssl = pkgs.openssl.overrideAttrs (_old: rec { - version = opensslVersion; - pname = "openssl"; - src = pkgs.fetchurl { - url = "https://www.openssl.org/source/openssl-${version}.tar.gz"; - hash = opensslHash; - }; - # FIXME Removing patches might cause unwanted things. - patches = []; - }); - - # devLibPath = pkgs.lib.makeLibraryPath [ pkgs.libressl.dev ]; - # libressl = pkgs.libressl.overrideAttrs (_old: { - # fixupPhase = '' - # cp ${devLibPath}/openssl.pc ${devLibPath}/libressl.pc - # ''; - # }); + opensslx = (openssl { version = opensslVersion; hash = opensslHash; }); in with pkgs; gradle2nix.builders.${system}.buildGradlePackage rec { @@ -146,7 +137,7 @@ pkg-config global-platform-pro gradle - # patched_openssl + opensslx makeWrapper # libraries to test @@ -189,7 +180,7 @@ buildInputs = [ jdk17_headless # libressl - # patched_openssl + opensslx ]; LD_LIBRARY_PATH = lib.makeLibraryPath [ @@ -201,8 +192,7 @@ botan2 cryptopp libgcrypt - patched_openssl - libressl + opensslx patched_boringssl ninja nettle @@ -219,9 +209,9 @@ installPhase = '' mkdir -p $out cp -r standalone/build $out - echo ${opensslVersion} > $out/build/opensslVersion + ls ${opensslx}/lib/* > $out/po ''; - + postFixup = '' makeWrapper \ ${jdk17_headless}/bin/java $out/bin/${pname} \ @@ -269,7 +259,7 @@ global-platform-pro gradle # libraries to test - openssl + (openssl {}) libressl # glibc patched_boringssl @@ -313,7 +303,8 @@ libtomcrypt botan2 cryptopp - openssl + # (openssl {}) + (openssl {}) patched_boringssl libgcrypt nettle diff --git a/standalone/src/main/java/cz/crcs/ectester/standalone/libs/OpensslLib.java b/standalone/src/main/java/cz/crcs/ectester/standalone/libs/OpensslLib.java index 61f00a4..23d7ac1 100644 --- a/standalone/src/main/java/cz/crcs/ectester/standalone/libs/OpensslLib.java +++ b/standalone/src/main/java/cz/crcs/ectester/standalone/libs/OpensslLib.java @@ -8,7 +8,7 @@ import java.util.Set; */ public class OpensslLib extends NativeECLibrary { public OpensslLib() { - super("OpenSSL", "openssl_provider", "crypto"); + super("OpenSSL", "openssl_provider"); } @Override -- cgit v1.3.1 From 98e95fbfe9b3b1dc889cd227a1b700ff0a61e136 Mon Sep 17 00:00:00 2001 From: quapka Date: Thu, 25 Jul 2024 10:09:32 +0200 Subject: Static linking does not require loading botan-2 --- flake.nix | 2 +- standalone/src/main/java/cz/crcs/ectester/standalone/libs/BotanLib.java | 2 +- 2 files changed, 2 insertions(+), 2 deletions(-) (limited to 'standalone/src/main/java') diff --git a/flake.nix b/flake.nix index 27a0927..0f8c3f6 100644 --- a/flake.nix +++ b/flake.nix @@ -64,7 +64,7 @@ configureFlags = ( prev.configureFlags or [] ) ++ [ "--enable-static" ]; }); libtomcrypt = pkgs.libtomcrypt.overrideAttrs (final: prev: { - makefile = "makefile"; + makefile = "makefile.unix"; }); libressl = pkgs.libressl.overrideAttrs (_old: rec { # devLibPath = pkgs.lib.makeLibraryPath [ pkgs.libressl.dev ]; diff --git a/standalone/src/main/java/cz/crcs/ectester/standalone/libs/BotanLib.java b/standalone/src/main/java/cz/crcs/ectester/standalone/libs/BotanLib.java index e8f6e13..3ed27f2 100644 --- a/standalone/src/main/java/cz/crcs/ectester/standalone/libs/BotanLib.java +++ b/standalone/src/main/java/cz/crcs/ectester/standalone/libs/BotanLib.java @@ -9,7 +9,7 @@ import java.util.Set; public class BotanLib extends NativeECLibrary { public BotanLib() { - super("Botan", "botan_provider", "botan-2"); + super("Botan", "botan_provider"); } @Override -- cgit v1.3.1 From c7300fb4a772b0d2364b0fff20f9676fdb79ac9b Mon Sep 17 00:00:00 2001 From: quapka Date: Thu, 25 Jul 2024 10:11:36 +0200 Subject: Link Crypto++ statically --- flake.nix | 1 + .../src/main/java/cz/crcs/ectester/standalone/libs/CryptoppLib.java | 2 +- .../src/main/resources/cz/crcs/ectester/standalone/libs/jni/Makefile | 2 +- 3 files changed, 3 insertions(+), 2 deletions(-) (limited to 'standalone/src/main/java') diff --git a/flake.nix b/flake.nix index 0f8c3f6..7265e2f 100644 --- a/flake.nix +++ b/flake.nix @@ -66,6 +66,7 @@ libtomcrypt = pkgs.libtomcrypt.overrideAttrs (final: prev: { makefile = "makefile.unix"; }); + cryptopp = pkgs.cryptopp.override { enableStatic = true; }; libressl = pkgs.libressl.overrideAttrs (_old: rec { # devLibPath = pkgs.lib.makeLibraryPath [ pkgs.libressl.dev ]; # pname = "libressl"; diff --git a/standalone/src/main/java/cz/crcs/ectester/standalone/libs/CryptoppLib.java b/standalone/src/main/java/cz/crcs/ectester/standalone/libs/CryptoppLib.java index 66aa9ea..6e001e2 100644 --- a/standalone/src/main/java/cz/crcs/ectester/standalone/libs/CryptoppLib.java +++ b/standalone/src/main/java/cz/crcs/ectester/standalone/libs/CryptoppLib.java @@ -9,7 +9,7 @@ import java.util.Set; public class CryptoppLib extends NativeECLibrary { public CryptoppLib() { - super("Crypto++","cryptopp_provider", "cryptopp"); + super("Crypto++","cryptopp_provider"); } @Override diff --git a/standalone/src/main/resources/cz/crcs/ectester/standalone/libs/jni/Makefile b/standalone/src/main/resources/cz/crcs/ectester/standalone/libs/jni/Makefile index f3d95c0..fa9e3ed 100644 --- a/standalone/src/main/resources/cz/crcs/ectester/standalone/libs/jni/Makefile +++ b/standalone/src/main/resources/cz/crcs/ectester/standalone/libs/jni/Makefile @@ -141,7 +141,7 @@ endif cryptopp: cryptopp_provider.so cryptopp_provider.so: cryptopp.o cpp_utils.o | lib_timing.so lib_cppsignals.so - $(CXX) $(LFLAGS) -o $@ -Wl,-rpath,'$$ORIGIN/lib' $^ -L. $(shell pkg-config --libs $(CRYPTOPP_NAME)) -l:lib_timing.so -l:lib_cppsignals.so + $(CXX) $(LFLAGS) -o $@ -Wl,-rpath,'$$ORIGIN/lib' $^ -L. -Wl,-Bstatic $(shell pkg-config --libs $(CRYPTOPP_NAME)) -Wl,-Bdynamic -l:lib_timing.so -l:lib_cppsignals.so cryptopp.o: cryptopp.cpp $(CXX) $(shell pkg-config --cflags $(CRYPTOPP_NAME)) $(CXXFLAGS) -c $< -- cgit v1.3.1 From b29f697ad640653c976f9f25c97358aa96a509a9 Mon Sep 17 00:00:00 2001 From: quapka Date: Thu, 25 Jul 2024 14:22:14 +0200 Subject: Link TomCrypt statically and build the shim with Nix --- flake.nix | 13 ++++++++++++- .../java/cz/crcs/ectester/standalone/libs/TomcryptLib.java | 2 +- .../resources/cz/crcs/ectester/standalone/libs/jni/Makefile | 2 +- 3 files changed, 14 insertions(+), 3 deletions(-) (limited to 'standalone/src/main/java') diff --git a/flake.nix b/flake.nix index bd93f5e..c841ce4 100644 --- a/flake.nix +++ b/flake.nix @@ -64,9 +64,17 @@ libgpg-error = pkgs.libgpg-error.overrideAttrs (final: prev: { configureFlags = ( prev.configureFlags or [] ) ++ [ "--enable-static" ]; }); - libtomcrypt = pkgs.libtomcrypt.overrideAttrs (final: prev: { + libtomcrypt = (pkgs.libtomcrypt.override { libtommath = libtommath; }).overrideAttrs (final: prev: { makefile = "makefile.unix"; }); + libtommath = pkgs.libtommath.overrideAttrs (final: prev: rec { + makefile = "makefile.unix"; + version = "1.3.0"; + src = pkgs.fetchurl { + url = "https://github.com/libtom/libtommath/releases/download/v${version}/ltm-${version}.tar.xz"; + sha256 = "sha256-KWJy2TQ1mRMI63NgdgDANLVYgHoH6CnnURQuZcz6nQg="; + }; + }); nettle = pkgs.nettle.overrideAttrs (final: prev: { configureFlags = ( prev.configureFlags or [] ) ++ [ "--enable-static" ]; }); @@ -109,6 +117,8 @@ }); libresslShim = import ./nix/libresslshim.nix { pkgs = pkgs; libressl = libressl; }; boringsslShim = import ./nix/boringsslshim.nix { pkgs = pkgs; boringssl = patched_boringssl; }; + # Current list of targets: tomcrypt botan cryptopp openssl boringssl gcrypt mbedtls ippcp nettle libressl + tomcryptShim = import ./nix/tomcryptshim.nix { inherit pkgs libtomcrypt libtommath; }; botanShim = import ./nix/botanshim.nix { inherit pkgs; }; mbedtlsShim = import ./nix/mbedtlsshim.nix { pkgs = pkgs; }; ippcryptoShim = import ./nix/ippcryptoshim.nix { pkgs = pkgs; ipp-crypto = customPkgs.ipp-crypto; }; @@ -146,6 +156,7 @@ pushd standalone/src/main/resources/cz/crcs/ectester/standalone/libs/jni/ make lib_timing.so lib_csignals.so lib_cppsignals.so popd + cp ${tomcryptShim.out}/lib/tomcrypt_provider.so ${jniLibsPath} cp ${botanShim.out}/lib/botan_provider.so ${jniLibsPath} cp ${commonLibs}/lib/* ${jniLibsPath} ''; diff --git a/standalone/src/main/java/cz/crcs/ectester/standalone/libs/TomcryptLib.java b/standalone/src/main/java/cz/crcs/ectester/standalone/libs/TomcryptLib.java index 8c000a2..9339986 100644 --- a/standalone/src/main/java/cz/crcs/ectester/standalone/libs/TomcryptLib.java +++ b/standalone/src/main/java/cz/crcs/ectester/standalone/libs/TomcryptLib.java @@ -9,7 +9,7 @@ import java.util.Set; public class TomcryptLib extends NativeECLibrary { public TomcryptLib() { - super("tomcrypt","tomcrypt_provider", "tommath", "tomcrypt"); + super("tomcrypt","tomcrypt_provider"); } @Override diff --git a/standalone/src/main/resources/cz/crcs/ectester/standalone/libs/jni/Makefile b/standalone/src/main/resources/cz/crcs/ectester/standalone/libs/jni/Makefile index 8ea1f8d..1e98956 100644 --- a/standalone/src/main/resources/cz/crcs/ectester/standalone/libs/jni/Makefile +++ b/standalone/src/main/resources/cz/crcs/ectester/standalone/libs/jni/Makefile @@ -117,7 +117,7 @@ gcrypt.o: gcrypt.c tomcrypt: tomcrypt_provider.so tomcrypt_provider.so: tomcrypt.o c_utils.o | lib_timing.so lib_csignals.so - $(CC) $(LFLAGS) -o $@ -Wl,-rpath,'$$ORIGIN/lib' $^ -L. -ltommath -Wl,-Bstatic $(shell pkg-config --libs libtomcrypt) -Wl,-Bdynamic -l:lib_timing.so -l:lib_csignals.so + $(CC) $(LFLAGS) -o $@ -Wl,-rpath,'$$ORIGIN/lib' $^ -L. -Wl,-Bstatic $(shell pkg-config --libs libtomcrypt libtommath) -Wl,-Bdynamic -l:lib_timing.so -l:lib_csignals.so tomcrypt.o: tomcrypt.c $(CC) -DLTM_DESC $(shell pkg-config --cflags libtomcrypt) $(CFLAGS) -c $< -- cgit v1.3.1 From aa36d350ddc4545bf777d7ee1740137c868ea498 Mon Sep 17 00:00:00 2001 From: quapka Date: Thu, 25 Jul 2024 15:27:38 +0200 Subject: Remove runtime lib deps unnecessary due to static linking --- flake.nix | 5 ----- .../src/main/java/cz/crcs/ectester/standalone/libs/GcryptLib.java | 2 +- 2 files changed, 1 insertion(+), 6 deletions(-) (limited to 'standalone/src/main/java') diff --git a/flake.nix b/flake.nix index e423566..d13f707 100644 --- a/flake.nix +++ b/flake.nix @@ -190,8 +190,6 @@ libb64 clang - libgcrypt - libgpg-error mbedtls nasm libtool @@ -217,14 +215,11 @@ libtomcrypt botan2 cryptopp - libgcrypt - libgpg-error # libressl # patched_boringssl ninja nettle gmp - libgpg-error libconfig wolfcryptjni commonLibs diff --git a/standalone/src/main/java/cz/crcs/ectester/standalone/libs/GcryptLib.java b/standalone/src/main/java/cz/crcs/ectester/standalone/libs/GcryptLib.java index 83d78ef..7dffb3f 100644 --- a/standalone/src/main/java/cz/crcs/ectester/standalone/libs/GcryptLib.java +++ b/standalone/src/main/java/cz/crcs/ectester/standalone/libs/GcryptLib.java @@ -9,7 +9,7 @@ import java.util.Set; public class GcryptLib extends NativeECLibrary { public GcryptLib() { - super("libgcrypt","gcrypt_provider", "gcrypt", "gpg-error"); + super("libgcrypt","gcrypt_provider"); } @Override -- cgit v1.3.1 From 095a210092b536fd70c10d5dd58c2668c4ce9331 Mon Sep 17 00:00:00 2001 From: quapka Date: Mon, 29 Jul 2024 18:51:44 +0200 Subject: Link Nettle statically and build the shim with Nix --- flake.nix | 29 +++++++--------------- nix/nettleshim.nix | 2 ++ .../crcs/ectester/standalone/libs/NettleLib.java | 2 +- .../cz/crcs/ectester/standalone/libs/jni/Makefile | 5 ++-- 4 files changed, 15 insertions(+), 23 deletions(-) (limited to 'standalone/src/main/java') diff --git a/flake.nix b/flake.nix index a15be19..630cb8a 100644 --- a/flake.nix +++ b/flake.nix @@ -133,21 +133,6 @@ index bee51a1..b36a13a 100644 }); cryptopp = pkgs.cryptopp.override { enableStatic = true; }; libressl = (pkgs.libressl.override { buildShared = false; } ).overrideAttrs (_old: rec { - # devLibPath = pkgs.lib.makeLibraryPath [ pkgs.libressl.dev ]; - # pname = "libressl"; - # version = "3.9.2"; - # includes = [ "tests/tlstest.sh" ]; - # src = pkgs.fetchurl { - # url = "mirror://openbsd/LibreSSL/${pname}-${version}.tar.gz"; - # hash = "sha256-ewMdrGSlnrbuMwT3/7ddrTOrjJ0nnIR/ksifuEYGj5c="; - # }; - # nativeBuildInputs = _old.nativeBuildInputs ++ (with pkgs; [ - # pkg-config - # ]); - - # Patched according to the previous versions: - # https://github.com/NixOS/nixpkgs/blob/nixos-24.05/pkgs/development/libraries/libressl/default.nix#L118 - # For unknown reasons the newer versions are not patched this way (yet?) patches = [ (pkgs.fetchpatch { url = "https://github.com/libressl/portable/commit/86e4965d7f20c3a6afc41d95590c9f6abb4fe788.patch"; @@ -157,7 +142,10 @@ index bee51a1..b36a13a 100644 ]; # NOTE: Due to name conflicts between OpenSSL and LibreSSL we need to resolve this manually. - postFixup = pkgs.lib.concatLines [ + # This is not needed for building the individual shims through Nix, as libresslShim build env does not + # contain OpenSSL at all, but for the interactive shell (started with `nix develop`), when multiple + # lib shims are built alongside each other. + postFixup = pkgs.lib.concatLines [ ( _old.postFixup or "" ) '' cp $dev/lib/pkgconfig/libcrypto.pc $dev/lib/pkgconfig/libresslcrypto.pc @@ -168,6 +156,7 @@ index bee51a1..b36a13a 100644 ]; }); + gmp = pkgs.gmp.override { withStatic = true; }; # Current list of targets: tomcrypt botan cryptopp openssl boringssl gcrypt mbedtls ippcp nettle libressl tomcryptShim = import ./nix/tomcryptshim.nix { inherit pkgs libtomcrypt libtommath; }; botanShim = import ./nix/botanshim.nix { inherit pkgs; }; @@ -177,7 +166,7 @@ index bee51a1..b36a13a 100644 gcryptShim = import ./nix/gcryptshim.nix { inherit pkgs libgcrypt libgpg-error; }; mbedtlsShim = import ./nix/mbedtlsshim.nix { pkgs = pkgs; }; ippcpShim = import ./nix/ippcpshim.nix { pkgs = pkgs; ipp-crypto = customPkgs.ipp-crypto; }; - nettleShim = import ./nix/nettleshim.nix { inherit pkgs nettle; }; + nettleShim = import ./nix/nettleshim.nix { inherit pkgs nettle gmp; }; libresslShim = import ./nix/libresslshim.nix { inherit pkgs libressl; }; overlays = []; @@ -255,7 +244,7 @@ index bee51a1..b36a13a 100644 wolfssl nettle - gmp + # gmp libgpg-error wget libconfig @@ -275,8 +264,8 @@ index bee51a1..b36a13a 100644 # libressl # patched_boringssl ninja - nettle - gmp + # nettle + # gmp libconfig wolfcryptjni commonLibs diff --git a/nix/nettleshim.nix b/nix/nettleshim.nix index f00c4e4..b431a2a 100644 --- a/nix/nettleshim.nix +++ b/nix/nettleshim.nix @@ -1,6 +1,7 @@ { pkgs , nettle + , gmp }: with pkgs; stdenv.mkDerivation rec { name = "NettleShim"; @@ -8,6 +9,7 @@ with pkgs; stdenv.mkDerivation rec { buildInputs = [ nettle + gmp pkg-config jdk11_headless ]; diff --git a/standalone/src/main/java/cz/crcs/ectester/standalone/libs/NettleLib.java b/standalone/src/main/java/cz/crcs/ectester/standalone/libs/NettleLib.java index d4df414..6dcdb24 100644 --- a/standalone/src/main/java/cz/crcs/ectester/standalone/libs/NettleLib.java +++ b/standalone/src/main/java/cz/crcs/ectester/standalone/libs/NettleLib.java @@ -18,7 +18,7 @@ import java.util.Set; public class NettleLib extends NativeECLibrary { public NettleLib() { - super("Nettle", "nettle_provider", "nettle","hogweed", "gmp"); + super("Nettle", "nettle_provider"); } @Override diff --git a/standalone/src/main/resources/cz/crcs/ectester/standalone/libs/jni/Makefile b/standalone/src/main/resources/cz/crcs/ectester/standalone/libs/jni/Makefile index 1e98956..0ee834c 100644 --- a/standalone/src/main/resources/cz/crcs/ectester/standalone/libs/jni/Makefile +++ b/standalone/src/main/resources/cz/crcs/ectester/standalone/libs/jni/Makefile @@ -172,10 +172,11 @@ ippcp.o: ippcp.c nettle: nettle_provider.so nettle_provider.so: nettle.o c_utils.o | lib_timing.so lib_csignals.so - $(CC) $(LFLAGS) -o $@ -Wl,-rpath,'$$ORIGIN/lib' $^ -L. -Wl,-Bstatic $(shell pkg-config --libs nettle) -Wl,-Bdynamic -l:lib_timing.so -l:lib_csignals.so $(shell pkg-config --libs hogweed) -lgmp + $(CC) $(LFLAGS) -o $@ -Wl,-rpath,'$$ORIGIN/lib' $^ -L. -Wl,-Bstatic $(shell pkg-config --libs nettle hogweed gmp) \ + -Wl,-Bdynamic -l:lib_timing.so -l:lib_csignals.so nettle.o: nettle.c - $(CC) $(shell pkg-config --cflags nettle) $(shell pkg-config --libs hogweed) -lgmp $(CFLAGS) -c $< + $(CC) -Wl,-static $(shell pkg-config --cflags nettle hogweed gmp) $(CFLAGS) -c $< # LibreSSL shim -- cgit v1.3.1 From 209a4f83eb43fa20a0f95f957a824a67d02c0214 Mon Sep 17 00:00:00 2001 From: J08nY Date: Fri, 16 Aug 2024 00:41:04 +0200 Subject: Attempt to fix submodule build. --- standalone/build.gradle.kts | 12 +- .../ectester/standalone/libs/BoringsslLib.java | 2 +- .../cz/crcs/ectester/standalone/libs/IppcpLib.java | 2 +- .../crcs/ectester/standalone/libs/LibresslLib.java | 2 +- .../crcs/ectester/standalone/libs/MbedTLSLib.java | 2 +- .../ectester/standalone/libs/NativeECLibrary.java | 24 +- .../crcs/ectester/standalone/libs/jni/Makefile.ext | 241 +++++++++++++++++++++ 7 files changed, 260 insertions(+), 25 deletions(-) create mode 100644 standalone/src/main/resources/cz/crcs/ectester/standalone/libs/jni/Makefile.ext (limited to 'standalone/src/main/java') 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("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 -- cgit v1.3.1