From 2a9e5944bd3f444b4866bdf5830d444020799c18 Mon Sep 17 00:00:00 2001 From: J08nY Date: Mon, 19 Aug 2024 20:39:21 +0200 Subject: Allow for no-preload option and correctly handle PRNG support. --- nix/commonlibs.nix | 4 ++-- .../crcs/ectester/standalone/ECTesterStandalone.java | 9 ++++++++- .../crcs/ectester/standalone/libs/BoringsslLib.java | 5 ----- .../cz/crcs/ectester/standalone/libs/GcryptLib.java | 8 +------- .../crcs/ectester/standalone/libs/LibresslLib.java | 5 ----- .../ectester/standalone/libs/NativeECLibrary.java | 3 +++ .../cz/crcs/ectester/standalone/libs/jni/Makefile | 9 ++++++--- .../crcs/ectester/standalone/libs/jni/Makefile.ext | 9 ++++++--- .../cz/crcs/ectester/standalone/libs/jni/c_prng.c | 20 +++++++++++++++++++- .../cz/crcs/ectester/standalone/libs/jni/native.h | 8 ++++++++ 10 files changed, 53 insertions(+), 27 deletions(-) diff --git a/nix/commonlibs.nix b/nix/commonlibs.nix index 22ce2f4..f054683 100644 --- a/nix/commonlibs.nix +++ b/nix/commonlibs.nix @@ -8,12 +8,12 @@ stdenv.mkDerivation rec { pkg-config cmake which - jdk17_headless + jdk ]; dontUseCmakeConfigure = true; - libs = "lib_cppsignals.so lib_csignals.so lib_timing.so lib_preload.so lib_prng.so"; + libs = "lib_cppsignals.so lib_csignals.so lib_timing.so lib_preload.so lib_prng.so lib_prng_dummy.so"; buildPhase = '' make ${libs} diff --git a/standalone/src/main/java/cz/crcs/ectester/standalone/ECTesterStandalone.java b/standalone/src/main/java/cz/crcs/ectester/standalone/ECTesterStandalone.java index 1b56ec6..603a301 100644 --- a/standalone/src/main/java/cz/crcs/ectester/standalone/ECTesterStandalone.java +++ b/standalone/src/main/java/cz/crcs/ectester/standalone/ECTesterStandalone.java @@ -107,6 +107,7 @@ public class ECTesterStandalone { FileUtil.write(LIB_RESOURCE_DIR + "lib_timing.so", reqs.resolve("lib_timing.so")); FileUtil.write(LIB_RESOURCE_DIR + "lib_preload.so", reqs.resolve("lib_preload.so")); FileUtil.write(LIB_RESOURCE_DIR + "lib_prng.so", reqs.resolve("lib_prng.so")); + FileUtil.write(LIB_RESOURCE_DIR + "lib_prng_dummy.so", reqs.resolve("lib_prng_dummy.so")); FileUtil.write(LIB_RESOURCE_DIR + "lib_csignals.so", reqs.resolve("lib_csignals.so")); FileUtil.write(LIB_RESOURCE_DIR + "lib_cppsignals.so", reqs.resolve("lib_cppsignals.so")); @@ -146,7 +147,13 @@ public class ECTesterStandalone { System.exit(result); } else { // Load the utility libs. - System.load(reqs.resolve("lib_prng.so").toString()); + if (cli.hasOption("no-preload")) { + System.err.println("Loading dummy"); + System.load(reqs.resolve("lib_prng_dummy.so").toString()); + } else { + System.err.println("Loading right"); + System.load(reqs.resolve("lib_prng.so").toString()); + } System.load(reqs.resolve("lib_timing.so").toString()); System.load(reqs.resolve("lib_csignals.so").toString()); System.load(reqs.resolve("lib_cppsignals.so").toString()); 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 06e6b4a..4f253e6 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 @@ -17,9 +17,4 @@ public class BoringsslLib extends NativeECLibrary { @Override public native Set getCurves(); - @Override - public boolean supportsDeterministicPRNG() { - // This is provided by the native preload that hooks all randomness sources. - return true; - } } 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 3647ab9..49cdc7c 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"); + super("libgcrypt", "gcrypt_provider"); } @Override @@ -17,10 +17,4 @@ public class GcryptLib extends NativeECLibrary { @Override public native Set getCurves(); - - @Override - public boolean supportsDeterministicPRNG() { - // This is provided by the native preload that hooks all randomness sources. - return true; - } } 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 e53399c..b06bfaf 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 @@ -17,9 +17,4 @@ public class LibresslLib extends NativeECLibrary { @Override public native Set getCurves(); - @Override - public boolean supportsDeterministicPRNG() { - // This is provided by the native preload that hooks all randomness sources. - return true; - } } 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 210a6e9..82ec115 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 @@ -74,6 +74,9 @@ public abstract class NativeECLibrary extends ProviderECLibrary { @Override public native long getLastNativeTiming(); + @Override + public native boolean supportsDeterministicPRNG(); + @Override public native boolean setupDeterministicPRNG(byte[] seed); 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 1393f82..8784d99 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 @@ -77,7 +77,10 @@ prng.o: prng/prng.c $(CC) $(CFLAGS) -c $< lib_prng.so: c_prng.c - $(CC) -o $@ -shared -Wl,-soname,lib_prng.so $(CFLAGS) $< + $(CC) -o $@ -shared $(CFLAGS) -Wl,-soname,lib_prng.so $< + +lib_prng_dummy.so: c_prng.c + $(CC) -DDUMMY_PRELOAD=1 $(CFLAGS) -o $@ -shared -Wl,-soname,lib_prng_dummy.so $< c_preload.o: c_preload.c $(CC) $(CFLAGS) -c $< @@ -95,9 +98,9 @@ cpp_utils.o: cpp_utils.cpp $(CXX) $(CXXFLAGS) -c $< -clibs: lib_timing.so lib_csignals.so lib_preload.so lib_prng.so +clibs: lib_timing.so lib_csignals.so lib_preload.so lib_prng.so lib_prng_dummy.so -cpplibs: lib_timing.so lib_cppsignals.so lib_preload.so lib_prng.so +cpplibs: lib_timing.so lib_cppsignals.so lib_preload.so lib_prng.so lib_prng_dummy.so # OpenSSL shim 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 index 948988b..0b24b46 100644 --- 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 @@ -77,7 +77,10 @@ prng.o: prng/prng.c $(CC) $(CFLAGS) -c $< lib_prng.so: c_prng.c - $(CC) -o $@ -shared -Wl,-soname,lib_prng.so $(CFLAGS) $< + $(CC) -o $@ -shared $(CFLAGS) -Wl,-soname,lib_prng.so $< + +lib_prng_dummy.so: c_prng.c + $(CC) -DDUMMY_PRELOAD=1 $(CFLAGS) -o $@ -shared -Wl,-soname,lib_prng_dummy.so $< c_preload.o: c_preload.c $(CC) $(CFLAGS) -c $< @@ -95,9 +98,9 @@ cpp_utils.o: cpp_utils.cpp $(CXX) $(CXXFLAGS) -c $< -clibs: lib_timing.so lib_csignals.so lib_preload.so lib_prng.so +clibs: lib_timing.so lib_csignals.so lib_preload.so lib_prng.so lib_prng_dummy.so -cpplibs: lib_timing.so lib_cppsignals.so lib_preload.so lib_prng.so +cpplibs: lib_timing.so lib_cppsignals.so lib_preload.so lib_prng.so lib_prng_dummy.so # OpenSSL shim openssl: openssl_provider.so diff --git a/standalone/src/main/resources/cz/crcs/ectester/standalone/libs/jni/c_prng.c b/standalone/src/main/resources/cz/crcs/ectester/standalone/libs/jni/c_prng.c index 13bd172..06d7ad6 100644 --- a/standalone/src/main/resources/cz/crcs/ectester/standalone/libs/jni/c_prng.c +++ b/standalone/src/main/resources/cz/crcs/ectester/standalone/libs/jni/c_prng.c @@ -2,9 +2,25 @@ #include #include "prng/prng.h" +#ifdef DUMMY_PRELOAD + +JNIEXPORT jboolean JNICALL Java_cz_crcs_ectester_standalone_libs_NativeECLibrary_supportsDeterministicPRNG(JNIEnv *env, jobject self) { + return JNI_FALSE; +} + +JNIEXPORT jboolean JNICALL Java_cz_crcs_ectester_standalone_libs_NativeECLibrary_setupDeterministicPRNG(JNIEnv *env, jobject self, jbyteArray seed) { + return JNI_FALSE; +} + +#else + extern prng_state preload_prng_state; extern bool preload_prng_enabled; +JNIEXPORT jboolean JNICALL Java_cz_crcs_ectester_standalone_libs_NativeECLibrary_supportsDeterministicPRNG(JNIEnv *env, jobject self) { + return JNI_TRUE; +} + JNIEXPORT jboolean JNICALL Java_cz_crcs_ectester_standalone_libs_NativeECLibrary_setupDeterministicPRNG(JNIEnv *env, jobject self, jbyteArray seed) { jsize seed_length = (*env)->GetArrayLength(env, seed); jbyte *seed_data = (*env)->GetByteArrayElements(env, seed, NULL); @@ -15,4 +31,6 @@ JNIEXPORT jboolean JNICALL Java_cz_crcs_ectester_standalone_libs_NativeECLibrary (*env)->ReleaseByteArrayElements(env, seed, seed_data, JNI_ABORT); return JNI_TRUE; -} \ No newline at end of file +} +#endif + diff --git a/standalone/src/main/resources/cz/crcs/ectester/standalone/libs/jni/native.h b/standalone/src/main/resources/cz/crcs/ectester/standalone/libs/jni/native.h index 881243f..da1615e 100644 --- a/standalone/src/main/resources/cz/crcs/ectester/standalone/libs/jni/native.h +++ b/standalone/src/main/resources/cz/crcs/ectester/standalone/libs/jni/native.h @@ -47,6 +47,14 @@ JNIEXPORT jstring JNICALL Java_cz_crcs_ectester_standalone_libs_NativeECLibrary_ JNIEXPORT jlong JNICALL Java_cz_crcs_ectester_standalone_libs_NativeECLibrary_getLastNativeTiming (JNIEnv *, jobject); +/* + * Class: cz_crcs_ectester_standalone_libs_NativeECLibrary + * Method: supportsDeterministicPRNG + * Signature: ()Z + */ +JNIEXPORT jboolean JNICALL Java_cz_crcs_ectester_standalone_libs_NativeECLibrary_supportsDeterministicPRNG + (JNIEnv *, jobject); + /* * Class: cz_crcs_ectester_standalone_libs_NativeECLibrary * Method: setupDeterministicPRNG -- cgit v1.2.3-70-g09d2