From 9bce1e13ec136c06650868acf3438e789e366d5f Mon Sep 17 00:00:00 2001 From: J08nY Date: Mon, 27 Nov 2017 23:19:48 +0100 Subject: Add a basic NativeECLibrary interface. --- nbproject/reader/project.properties | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) (limited to 'nbproject/reader') diff --git a/nbproject/reader/project.properties b/nbproject/reader/project.properties index 6cd1760..ac98170 100644 --- a/nbproject/reader/project.properties +++ b/nbproject/reader/project.properties @@ -6,7 +6,7 @@ annotation.processing.source.output=${build.generated.sources.dir}/ap-source-out application.title=ECTesterReader application.vendor=xsvenda build.classes.dir=${build.dir}/classes -build.classes.excludes=**/*.java,**/*.form +build.classes.excludes=**/*.java,**/*.form,**/*.c,**/*.h # This directory is removed when the project is cleaned: build.dir=build build.generated.dir=${build.dir}/generated -- cgit v1.2.3-70-g09d2 From cd117b707bfae0271b86b5c647d2fbc72dd3676c Mon Sep 17 00:00:00 2001 From: J08nY Date: Tue, 28 Nov 2017 22:23:31 +0100 Subject: Implement a basic NativeProvider using libtomcrypt. --- .gitignore | 6 ++- build-standalone.xml | 3 +- nbproject/reader/project.properties | 2 +- nbproject/standalone/project.properties | 2 +- .../ectester/standalone/ECTesterStandalone.java | 11 ++--- .../ectester/standalone/libs/NativeECLibrary.java | 22 ++++++--- .../crcs/ectester/standalone/libs/TomcryptLib.java | 2 +- src/cz/crcs/ectester/standalone/libs/jni/Makefile | 48 +++++++++++++++++++ .../standalone/libs/jni/NativeProvider.java | 25 ++++++++++ .../standalone/libs/jni/TomCryptProvider.java | 11 +++++ src/cz/crcs/ectester/standalone/libs/jni/native.h | 54 ++++++++++++++++++++++ .../crcs/ectester/standalone/libs/jni/tomcrypt.c | 40 ++++++++++++++++ src/cz/crcs/ectester/standalone/libs/native.h | 21 --------- 13 files changed, 206 insertions(+), 41 deletions(-) create mode 100644 src/cz/crcs/ectester/standalone/libs/jni/Makefile create mode 100644 src/cz/crcs/ectester/standalone/libs/jni/NativeProvider.java create mode 100644 src/cz/crcs/ectester/standalone/libs/jni/TomCryptProvider.java create mode 100644 src/cz/crcs/ectester/standalone/libs/jni/native.h create mode 100644 src/cz/crcs/ectester/standalone/libs/jni/tomcrypt.c delete mode 100644 src/cz/crcs/ectester/standalone/libs/native.h (limited to 'nbproject/reader') diff --git a/.gitignore b/.gitignore index 4724134..8390d09 100644 --- a/.gitignore +++ b/.gitignore @@ -4,4 +4,8 @@ /dist/ectester-reader.sh /dist/ectester-reader.bat /dist/ECTesterStandalone.jar -/dist/ECTesterStandalone-dist.jar \ No newline at end of file +/dist/ECTesterStandalone-dist.jar + +/src/**/*.a +/src/**/*.o +/src/**/*.so diff --git a/build-standalone.xml b/build-standalone.xml index 05dc174..447b9b1 100644 --- a/build-standalone.xml +++ b/build-standalone.xml @@ -76,8 +76,9 @@ - + + diff --git a/nbproject/reader/project.properties b/nbproject/reader/project.properties index ac98170..d372fd5 100644 --- a/nbproject/reader/project.properties +++ b/nbproject/reader/project.properties @@ -6,7 +6,7 @@ annotation.processing.source.output=${build.generated.sources.dir}/ap-source-out application.title=ECTesterReader application.vendor=xsvenda build.classes.dir=${build.dir}/classes -build.classes.excludes=**/*.java,**/*.form,**/*.c,**/*.h +build.classes.excludes=**/*.java,**/*.form,**/*.c,**/*.h,**/*.a # This directory is removed when the project is cleaned: build.dir=build build.generated.dir=${build.dir}/generated diff --git a/nbproject/standalone/project.properties b/nbproject/standalone/project.properties index 868bcfa..7714914 100644 --- a/nbproject/standalone/project.properties +++ b/nbproject/standalone/project.properties @@ -6,7 +6,7 @@ annotation.processing.source.output=${build.generated.sources.dir}/ap-source-out application.title=ECTesterStandalone application.vendor=xsvenda build.classes.dir=${build.dir}/classes -build.classes.excludes=**/*.java,**/*.form,**/*.c,**/*.h +build.classes.excludes=**/*.java,**/*.form,**/*.c,**/*.h,**/*.a # This directory is removed when the project is cleaned: build.dir=build build.generated.dir=${build.dir}/generated diff --git a/src/cz/crcs/ectester/standalone/ECTesterStandalone.java b/src/cz/crcs/ectester/standalone/ECTesterStandalone.java index 3ec11ed..de9953a 100644 --- a/src/cz/crcs/ectester/standalone/ECTesterStandalone.java +++ b/src/cz/crcs/ectester/standalone/ECTesterStandalone.java @@ -8,10 +8,7 @@ import cz.crcs.ectester.data.EC_Store; import cz.crcs.ectester.standalone.consts.KeyAgreementIdent; import cz.crcs.ectester.standalone.consts.KeyPairGeneratorIdent; import cz.crcs.ectester.standalone.consts.SignatureIdent; -import cz.crcs.ectester.standalone.libs.BouncyCastleLib; -import cz.crcs.ectester.standalone.libs.ECLibrary; -import cz.crcs.ectester.standalone.libs.ProviderECLibrary; -import cz.crcs.ectester.standalone.libs.SunECLib; +import cz.crcs.ectester.standalone.libs.*; import org.apache.commons.cli.DefaultParser; import org.apache.commons.cli.Option; import org.apache.commons.cli.Options; @@ -37,7 +34,7 @@ import java.util.stream.Collectors; * @version v0.1.0 */ public class ECTesterStandalone { - private ECLibrary[] libs = new ECLibrary[]{new SunECLib(), new BouncyCastleLib()}; + private ECLibrary[] libs = new ECLibrary[]{new SunECLib(), new BouncyCastleLib(), new TomcryptLib()}; private EC_Store dataStore; private Config cfg; @@ -297,7 +294,6 @@ public class ECTesterStandalone { } else { Signature sig = sigIdent.getInstance(lib.getProvider()); KeyPairGenerator kpg = kpIdent.getInstance(lib.getProvider()); - AlgorithmParameterSpec spec = null; if (cli.hasOption("ecdsa.bits")) { int bits = Integer.parseInt(cli.getOptionValue("ecdsa.bits")); kpg.initialize(bits); @@ -308,8 +304,7 @@ public class ECTesterStandalone { System.err.println("Curve not found: " + curveName); return; } - spec = curve.toSpec(); - kpg.initialize(spec); + kpg.initialize(curve.toSpec()); } System.out.println("index;data;signtime;verifytime;pubW;privS;signature;verified"); diff --git a/src/cz/crcs/ectester/standalone/libs/NativeECLibrary.java b/src/cz/crcs/ectester/standalone/libs/NativeECLibrary.java index 44fb47b..5d1b9d7 100644 --- a/src/cz/crcs/ectester/standalone/libs/NativeECLibrary.java +++ b/src/cz/crcs/ectester/standalone/libs/NativeECLibrary.java @@ -15,11 +15,13 @@ import java.security.Provider; */ public abstract class NativeECLibrary extends ProviderECLibrary { private String resource; - private String libname; + private String[] requriements; - public NativeECLibrary(String resource, String libname) { + public static String LIB_RESOURCE_DIR = "/cz/crcs/ectester/standalone/libs/jni/"; + + public NativeECLibrary(String resource, String... requirements) { this.resource = resource; - this.libname = libname; + this.requriements = requirements; } @Override @@ -33,8 +35,10 @@ public abstract class NativeECLibrary extends ProviderECLibrary { } else { suffix = "so"; if (System.getProperty("os.name").startsWith("Linux")) { - appData = Paths.get(System.getenv("XDG_DATA_HOME")); - if (appData == null) { + String dataHome = System.getenv("XDG_DATA_HOME"); + if (dataHome != null) { + appData = Paths.get(dataHome); + } else { appData = Paths.get(System.getProperty("user.home"), ".local", "share"); } } else { @@ -43,10 +47,10 @@ public abstract class NativeECLibrary extends ProviderECLibrary { } Path libDir = appData.resolve("ECTesterStandalone"); File libDirFile = libDir.toFile(); - Path libPath = libDir.resolve(libname + "." + suffix); + Path libPath = libDir.resolve(resource + "." + suffix); File libFile = libPath.toFile(); - URL jarURL = NativeECLibrary.class.getResource("/cz/crcs/ectester/standalone/libs/" + resource + "." + suffix); + URL jarURL = NativeECLibrary.class.getResource(LIB_RESOURCE_DIR + resource + "." + suffix); if (jarURL == null) { return false; } @@ -71,6 +75,10 @@ public abstract class NativeECLibrary extends ProviderECLibrary { } jarConnection.getInputStream().close(); + for (String requirement : requriements) { + System.loadLibrary(requirement); + } + System.load(libPath.toString()); provider = createProvider(); diff --git a/src/cz/crcs/ectester/standalone/libs/TomcryptLib.java b/src/cz/crcs/ectester/standalone/libs/TomcryptLib.java index fe4a79d..49e810c 100644 --- a/src/cz/crcs/ectester/standalone/libs/TomcryptLib.java +++ b/src/cz/crcs/ectester/standalone/libs/TomcryptLib.java @@ -8,7 +8,7 @@ import java.security.Provider; public class TomcryptLib extends NativeECLibrary { public TomcryptLib() { - super("tomcrypt", "libtomcrypt"); + super("tomcrypt_provider", "tommath", "tomcrypt"); } @Override diff --git a/src/cz/crcs/ectester/standalone/libs/jni/Makefile b/src/cz/crcs/ectester/standalone/libs/jni/Makefile new file mode 100644 index 0000000..837078c --- /dev/null +++ b/src/cz/crcs/ectester/standalone/libs/jni/Makefile @@ -0,0 +1,48 @@ +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 +endif + +ifeq ($(JNI_INCLUDEDIR),) +$(error could not determine JNI include dir, try specifying either \ + JAVA_HOME or JNI_INCLUDEDIR) +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 +# add more checks here +endif +endif +endif + +JNI_PLATFORMINCLUDEDIR ?= $(JNI_INCLUDEDIR)/$(JNI_PLATFORM) + + + +all: tomcrypt_provider.so + +tomcrypt_provider.so: tomcrypt.o + gcc -DLTM_DESC -DUSE_LTM -fPIC -shared -o $@ $< -ltommath -ltomcrypt + +%.o: %.c + gcc -fPIC -I"$(JNI_INCLUDEDIR)" -I"$(JNI_PLATFORMINCLUDEDIR)" -I. -c $< + +clean: + rm -rf *.o + rm -rf *.so + +.PHONY: all clean \ No newline at end of file diff --git a/src/cz/crcs/ectester/standalone/libs/jni/NativeProvider.java b/src/cz/crcs/ectester/standalone/libs/jni/NativeProvider.java new file mode 100644 index 0000000..43b7827 --- /dev/null +++ b/src/cz/crcs/ectester/standalone/libs/jni/NativeProvider.java @@ -0,0 +1,25 @@ +package cz.crcs.ectester.standalone.libs.jni; + +import java.security.AccessController; +import java.security.PrivilegedAction; +import java.security.Provider; + +/** + * @author Jan Jancar johny@neuromancer.sk + */ +public abstract class NativeProvider extends Provider { + + public NativeProvider(String name, double version, String info) { + super(name, version, info); + + AccessController.doPrivileged(new PrivilegedAction() { + public Object run() { + setup(); + return null; + } + }); + } + + abstract void setup(); + +} diff --git a/src/cz/crcs/ectester/standalone/libs/jni/TomCryptProvider.java b/src/cz/crcs/ectester/standalone/libs/jni/TomCryptProvider.java new file mode 100644 index 0000000..01e4c17 --- /dev/null +++ b/src/cz/crcs/ectester/standalone/libs/jni/TomCryptProvider.java @@ -0,0 +1,11 @@ +package cz.crcs.ectester.standalone.libs.jni; + +public class TomCryptProvider extends NativeProvider { + + public TomCryptProvider(String name, double version, String info) { + super(name, version, info); + } + + @Override + native void setup(); +} diff --git a/src/cz/crcs/ectester/standalone/libs/jni/native.h b/src/cz/crcs/ectester/standalone/libs/jni/native.h new file mode 100644 index 0000000..83ef841 --- /dev/null +++ b/src/cz/crcs/ectester/standalone/libs/jni/native.h @@ -0,0 +1,54 @@ +/* DO NOT EDIT THIS FILE - it is machine generated */ +#include +/* Header for class cz_crcs_ectester_standalone_libs_TomcryptLib */ + +#ifndef _Included_cz_crcs_ectester_standalone_libs_TomcryptLib +#define _Included_cz_crcs_ectester_standalone_libs_TomcryptLib +#ifdef __cplusplus +extern "C" { +#endif +/* + * Class: cz_crcs_ectester_standalone_libs_TomcryptLib + * Method: createProvider + * Signature: ()Ljava/security/Provider; + */ +JNIEXPORT jobject JNICALL Java_cz_crcs_ectester_standalone_libs_TomcryptLib_createProvider + (JNIEnv *, jobject); + +#ifdef __cplusplus +} +#endif +#endif +/* Header for class cz_crcs_ectester_standalone_libs_jni_TomCryptProvider */ + +#ifndef _Included_cz_crcs_ectester_standalone_libs_jni_TomCryptProvider +#define _Included_cz_crcs_ectester_standalone_libs_jni_TomCryptProvider +#ifdef __cplusplus +extern "C" { +#endif +#undef cz_crcs_ectester_standalone_libs_jni_TomCryptProvider_serialVersionUID +#define cz_crcs_ectester_standalone_libs_jni_TomCryptProvider_serialVersionUID 1421746759512286392LL +#undef cz_crcs_ectester_standalone_libs_jni_TomCryptProvider_MAX_ARRAY_SIZE +#define cz_crcs_ectester_standalone_libs_jni_TomCryptProvider_MAX_ARRAY_SIZE 2147483639L +#undef cz_crcs_ectester_standalone_libs_jni_TomCryptProvider_KEYS +#define cz_crcs_ectester_standalone_libs_jni_TomCryptProvider_KEYS 0L +#undef cz_crcs_ectester_standalone_libs_jni_TomCryptProvider_VALUES +#define cz_crcs_ectester_standalone_libs_jni_TomCryptProvider_VALUES 1L +#undef cz_crcs_ectester_standalone_libs_jni_TomCryptProvider_ENTRIES +#define cz_crcs_ectester_standalone_libs_jni_TomCryptProvider_ENTRIES 2L +#undef cz_crcs_ectester_standalone_libs_jni_TomCryptProvider_serialVersionUID +#define cz_crcs_ectester_standalone_libs_jni_TomCryptProvider_serialVersionUID 4112578634029874840LL +#undef cz_crcs_ectester_standalone_libs_jni_TomCryptProvider_serialVersionUID +#define cz_crcs_ectester_standalone_libs_jni_TomCryptProvider_serialVersionUID -4298000515446427739LL +/* + * Class: cz_crcs_ectester_standalone_libs_jni_TomCryptProvider + * Method: setup + * Signature: ()V + */ +JNIEXPORT void JNICALL Java_cz_crcs_ectester_standalone_libs_jni_TomCryptProvider_setup + (JNIEnv *, jobject); + +#ifdef __cplusplus +} +#endif +#endif diff --git a/src/cz/crcs/ectester/standalone/libs/jni/tomcrypt.c b/src/cz/crcs/ectester/standalone/libs/jni/tomcrypt.c new file mode 100644 index 0000000..43ae06b --- /dev/null +++ b/src/cz/crcs/ectester/standalone/libs/jni/tomcrypt.c @@ -0,0 +1,40 @@ +#include "native.h" +#include +#define LTM_DESC +#include + +JNIEXPORT jobject JNICALL Java_cz_crcs_ectester_standalone_libs_TomcryptLib_createProvider(JNIEnv *env, jobject this) { + jclass provider_class = (*env)->FindClass(env, "cz/crcs/ectester/standalone/libs/jni/TomCryptProvider"); + + jmethodID init = (*env)->GetMethodID(env, provider_class, "", "(Ljava/lang/String;DLjava/lang/String;)V"); + if (init == NULL) { + return NULL; + } + jstring name = (*env)->NewStringUTF(env, "libtomcrypt " SCRYPT); + double version = strtod(SCRYPT, NULL); + return (*env)->NewObject(env, provider_class, init, name, version, name); +} + +JNIEXPORT void JNICALL Java_cz_crcs_ectester_standalone_libs_jni_TomCryptProvider_setup(JNIEnv *env, jobject this) { + ltc_mp = ltm_desc; + /* Just test ecc key generation at this time. */ + ecc_key mykey; + prng_state prng; + int err; + /* register yarrow */ + if (register_prng(&yarrow_desc) == -1) { + printf("Error registering Yarrow\n"); + return; + } + /* setup the PRNG */ + if ((err = rng_make_prng(128, find_prng("yarrow"), &prng, NULL)) != CRYPT_OK) { + printf("Error setting up PRNG, %s\n", error_to_string(err)); + return; + } + /* make a 192-bit ECC key */ + if ((err = ecc_make_key(&prng, find_prng("yarrow"), 24, &mykey)) != CRYPT_OK) { + printf("Error making key: %s\n", error_to_string(err)); + return; + } + return; +} \ No newline at end of file diff --git a/src/cz/crcs/ectester/standalone/libs/native.h b/src/cz/crcs/ectester/standalone/libs/native.h deleted file mode 100644 index 979f04a..0000000 --- a/src/cz/crcs/ectester/standalone/libs/native.h +++ /dev/null @@ -1,21 +0,0 @@ -/* DO NOT EDIT THIS FILE - it is machine generated */ -#include -/* Header for class cz_crcs_ectester_standalone_libs_TomcryptLib */ - -#ifndef _Included_cz_crcs_ectester_standalone_libs_TomcryptLib -#define _Included_cz_crcs_ectester_standalone_libs_TomcryptLib -#ifdef __cplusplus -extern "C" { -#endif -/* - * Class: cz_crcs_ectester_standalone_libs_TomcryptLib - * Method: getProvider - * Signature: ()Ljava/security/Provider; - */ -JNIEXPORT jobject JNICALL Java_cz_crcs_ectester_standalone_libs_TomcryptLib_getProvider - (JNIEnv *, jobject); - -#ifdef __cplusplus -} -#endif -#endif -- cgit v1.2.3-70-g09d2 From 03265f4cf09b7bb59c09af722b8f44445a635d83 Mon Sep 17 00:00:00 2001 From: J08nY Date: Wed, 29 Nov 2017 02:22:30 +0100 Subject: Add listing of supported curves to standalone libs. --- build-standalone.xml | 4 +-- nbproject/reader/project.properties | 2 +- nbproject/standalone/project.properties | 2 +- .../ectester/standalone/ECTesterStandalone.java | 5 +++ .../ectester/standalone/libs/BouncyCastleLib.java | 14 ++++++++ .../crcs/ectester/standalone/libs/ECLibrary.java | 2 ++ src/cz/crcs/ectester/standalone/libs/SunECLib.java | 14 ++++++++ .../crcs/ectester/standalone/libs/TomcryptLib.java | 4 +++ .../standalone/libs/jni/NativeProvider.java | 8 ++--- src/cz/crcs/ectester/standalone/libs/jni/native.h | 8 +++++ .../crcs/ectester/standalone/libs/jni/tomcrypt.c | 41 +++++++++++++--------- 11 files changed, 78 insertions(+), 26 deletions(-) (limited to 'nbproject/reader') diff --git a/build-standalone.xml b/build-standalone.xml index 300eec8..6e65c67 100644 --- a/build-standalone.xml +++ b/build-standalone.xml @@ -76,10 +76,10 @@ - + - + diff --git a/nbproject/reader/project.properties b/nbproject/reader/project.properties index d372fd5..21441b3 100644 --- a/nbproject/reader/project.properties +++ b/nbproject/reader/project.properties @@ -6,7 +6,7 @@ annotation.processing.source.output=${build.generated.sources.dir}/ap-source-out application.title=ECTesterReader application.vendor=xsvenda build.classes.dir=${build.dir}/classes -build.classes.excludes=**/*.java,**/*.form,**/*.c,**/*.h,**/*.a +build.classes.excludes=**/*.java,**/*.form,**/*.c,**/*.h,**/*.a,**/*.o,**/Makefile # This directory is removed when the project is cleaned: build.dir=build build.generated.dir=${build.dir}/generated diff --git a/nbproject/standalone/project.properties b/nbproject/standalone/project.properties index 7714914..9fed4c2 100644 --- a/nbproject/standalone/project.properties +++ b/nbproject/standalone/project.properties @@ -6,7 +6,7 @@ annotation.processing.source.output=${build.generated.sources.dir}/ap-source-out application.title=ECTesterStandalone application.vendor=xsvenda build.classes.dir=${build.dir}/classes -build.classes.excludes=**/*.java,**/*.form,**/*.c,**/*.h,**/*.a +build.classes.excludes=**/*.java,**/*.form,**/*.c,**/*.h,**/*.a,**/*.o,**/Makefile # This directory is removed when the project is cleaned: build.dir=build build.generated.dir=${build.dir}/generated diff --git a/src/cz/crcs/ectester/standalone/ECTesterStandalone.java b/src/cz/crcs/ectester/standalone/ECTesterStandalone.java index de9953a..9fca2b6 100644 --- a/src/cz/crcs/ectester/standalone/ECTesterStandalone.java +++ b/src/cz/crcs/ectester/standalone/ECTesterStandalone.java @@ -174,6 +174,11 @@ public class ECTesterStandalone { if (!eckas.isEmpty()) { System.out.println("\t\t- Signatures: " + String.join(",", sigs.stream().map(SignatureIdent::getName).collect(Collectors.toList()))); } + Set curves = lib.getCurves(); + if (!curves.isEmpty()) { + System.out.println("\t\t- Curves: " + String.join(",", curves)); + } + System.out.println(); } } } diff --git a/src/cz/crcs/ectester/standalone/libs/BouncyCastleLib.java b/src/cz/crcs/ectester/standalone/libs/BouncyCastleLib.java index aaf76be..c6600f9 100644 --- a/src/cz/crcs/ectester/standalone/libs/BouncyCastleLib.java +++ b/src/cz/crcs/ectester/standalone/libs/BouncyCastleLib.java @@ -1,7 +1,12 @@ package cz.crcs.ectester.standalone.libs; +import org.bouncycastle.jce.ECNamedCurveTable; import org.bouncycastle.jce.provider.BouncyCastleProvider; +import java.util.Enumeration; +import java.util.Set; +import java.util.TreeSet; + /** * @author Jan Jancar johny@neuromancer.sk */ @@ -11,4 +16,13 @@ public class BouncyCastleLib extends ProviderECLibrary { super(new BouncyCastleProvider()); } + @Override + public Set getCurves() { + Set result = new TreeSet<>(); + Enumeration names = ECNamedCurveTable.getNames(); + while (names.hasMoreElements()) { + result.add((String) names.nextElement()); + } + return result; + } } diff --git a/src/cz/crcs/ectester/standalone/libs/ECLibrary.java b/src/cz/crcs/ectester/standalone/libs/ECLibrary.java index 1e73e61..0f81978 100644 --- a/src/cz/crcs/ectester/standalone/libs/ECLibrary.java +++ b/src/cz/crcs/ectester/standalone/libs/ECLibrary.java @@ -14,6 +14,8 @@ public interface ECLibrary { boolean isInitialized(); + Set getCurves(); + Set getKAs(); Set getSigs(); diff --git a/src/cz/crcs/ectester/standalone/libs/SunECLib.java b/src/cz/crcs/ectester/standalone/libs/SunECLib.java index b64b740..3aec842 100644 --- a/src/cz/crcs/ectester/standalone/libs/SunECLib.java +++ b/src/cz/crcs/ectester/standalone/libs/SunECLib.java @@ -2,6 +2,9 @@ package cz.crcs.ectester.standalone.libs; import sun.security.ec.SunEC; +import java.util.Set; +import java.util.TreeSet; + /** * @author Jan Jancar johny@neuromancer.sk */ @@ -11,4 +14,15 @@ public class SunECLib extends ProviderECLibrary { super(new SunEC()); } + @Override + public Set getCurves() { + String curves = provider.get("AlgorithmParameters.EC SupportedCurves").toString(); + String[] split = curves.split("\\|"); + Set result = new TreeSet<>(); + for (String curve : split) { + String body = curve.split(",")[0].substring(1); + result.add(body); + } + return result; + } } diff --git a/src/cz/crcs/ectester/standalone/libs/TomcryptLib.java b/src/cz/crcs/ectester/standalone/libs/TomcryptLib.java index 49e810c..78db00e 100644 --- a/src/cz/crcs/ectester/standalone/libs/TomcryptLib.java +++ b/src/cz/crcs/ectester/standalone/libs/TomcryptLib.java @@ -1,6 +1,7 @@ package cz.crcs.ectester.standalone.libs; import java.security.Provider; +import java.util.Set; /** * @author Jan Jancar johny@neuromancer.sk @@ -13,4 +14,7 @@ public class TomcryptLib extends NativeECLibrary { @Override native Provider createProvider(); + + @Override + public native Set getCurves(); } diff --git a/src/cz/crcs/ectester/standalone/libs/jni/NativeProvider.java b/src/cz/crcs/ectester/standalone/libs/jni/NativeProvider.java index 53f8b3c..a2233e2 100644 --- a/src/cz/crcs/ectester/standalone/libs/jni/NativeProvider.java +++ b/src/cz/crcs/ectester/standalone/libs/jni/NativeProvider.java @@ -12,11 +12,9 @@ public abstract class NativeProvider extends Provider { public NativeProvider(String name, double version, String info) { super(name, version, info); - AccessController.doPrivileged(new PrivilegedAction() { - public Object run() { - setup(); - return null; - } + AccessController.doPrivileged((PrivilegedAction) () -> { + setup(); + return null; }); } diff --git a/src/cz/crcs/ectester/standalone/libs/jni/native.h b/src/cz/crcs/ectester/standalone/libs/jni/native.h index e4e5009..e607738 100644 --- a/src/cz/crcs/ectester/standalone/libs/jni/native.h +++ b/src/cz/crcs/ectester/standalone/libs/jni/native.h @@ -15,6 +15,14 @@ extern "C" { JNIEXPORT jobject JNICALL Java_cz_crcs_ectester_standalone_libs_TomcryptLib_createProvider (JNIEnv *, jobject); +/* + * Class: cz_crcs_ectester_standalone_libs_TomcryptLib + * Method: getCurves + * Signature: ()Ljava/util/Set; + */ +JNIEXPORT jobject JNICALL Java_cz_crcs_ectester_standalone_libs_TomcryptLib_getCurves + (JNIEnv *, jobject); + #ifdef __cplusplus } #endif diff --git a/src/cz/crcs/ectester/standalone/libs/jni/tomcrypt.c b/src/cz/crcs/ectester/standalone/libs/jni/tomcrypt.c index db1de88..7f8f303 100644 --- a/src/cz/crcs/ectester/standalone/libs/jni/tomcrypt.c +++ b/src/cz/crcs/ectester/standalone/libs/jni/tomcrypt.c @@ -7,49 +7,56 @@ JNIEXPORT jobject JNICALL Java_cz_crcs_ectester_standalone_libs_TomcryptLib_crea jclass provider_class = (*env)->FindClass(env, "cz/crcs/ectester/standalone/libs/jni/NativeProvider$TomCrypt"); jmethodID init = (*env)->GetMethodID(env, provider_class, "", "(Ljava/lang/String;DLjava/lang/String;)V"); - if (init == NULL) { - return NULL; - } + jstring name = (*env)->NewStringUTF(env, "libtomcrypt " SCRYPT); double version = strtod(SCRYPT, NULL); + return (*env)->NewObject(env, provider_class, init, name, version, name); } JNIEXPORT void JNICALL Java_cz_crcs_ectester_standalone_libs_jni_NativeProvider_00024TomCrypt_setup(JNIEnv *env, jobject this) { - /* Initialize libtommath as the math lib. */ ltc_mp = ltm_desc; jclass provider_class = (*env)->FindClass(env, "cz/crcs/ectester/standalone/libs/jni/NativeProvider$TomCrypt"); jmethodID put = (*env)->GetMethodID(env, provider_class, "put", "(Ljava/lang/Object;Ljava/lang/Object;)Ljava/lang/Object;"); - if (put == NULL) { - return; - } - const ltc_ecc_set_type * curve = ltc_ecc_sets; - while (curve->name != NULL) { - printf("%s\n", curve->name); - curve++; - } - /* Just test ecc key generation at this time. */ +/* *//* Just test ecc key generation at this time. *//* ecc_key mykey; prng_state prng; int err; - /* register yarrow */ + *//* register yarrow *//* if (register_prng(&yarrow_desc) == -1) { printf("Error registering Yarrow\n"); return; } - /* setup the PRNG */ + *//* setup the PRNG *//* if ((err = rng_make_prng(128, find_prng("yarrow"), &prng, NULL)) != CRYPT_OK) { printf("Error setting up PRNG, %s\n", error_to_string(err)); return; } - /* make a 192-bit ECC key */ + *//* make a 192-bit ECC key *//* if ((err = ecc_make_key(&prng, find_prng("yarrow"), 24, &mykey)) != CRYPT_OK) { printf("Error making key: %s\n", error_to_string(err)); return; } - return; + return;*/ +} + +JNIEXPORT jobject JNICALL Java_cz_crcs_ectester_standalone_libs_TomcryptLib_getCurves(JNIEnv *env, jobject this) { + jclass hash_set_class = (*env)->FindClass(env, "java/util/TreeSet"); + + jmethodID hash_set_ctr = (*env)->GetMethodID(env, hash_set_class, "", "()V"); + jmethodID hash_set_add = (*env)->GetMethodID(env, hash_set_class, "add", "(Ljava/lang/Object;)Z"); + + jobject result = (*env)->NewObject(env, hash_set_class, hash_set_ctr); + const ltc_ecc_set_type * curve = ltc_ecc_sets; + while (curve->size != 0) { + jstring curve_name = (*env)->NewStringUTF(env, curve->name); + (*env)->CallBooleanMethod(env, result, hash_set_add, curve_name); + curve++; + } + + return result; } \ No newline at end of file -- cgit v1.2.3-70-g09d2 From 9a1cfb31473c89c70dc603f7ae0298ea677577a0 Mon Sep 17 00:00:00 2001 From: J08nY Date: Wed, 6 Dec 2017 15:11:38 +0100 Subject: Fix ant includes. --- nbproject/reader/project.properties | 3 ++- nbproject/standalone/project.properties | 2 +- 2 files changed, 3 insertions(+), 2 deletions(-) (limited to 'nbproject/reader') diff --git a/nbproject/reader/project.properties b/nbproject/reader/project.properties index 21441b3..5eb8ae3 100644 --- a/nbproject/reader/project.properties +++ b/nbproject/reader/project.properties @@ -30,9 +30,10 @@ dist.javadoc.dir=${dist.dir}/javadoc libs.CopyLibs.classpath=nbproject/copylibstask.jar endorsed.classpath= excludes= -includes=**/applet/**,**/common/**,**/data/**,**/reader/** +includes=**/applet/**,**/common/**,**/data/**,**/reader/**,**/standalone/** jar.compress=false javac.classpath=\ + lib/bcprov-jdk15on-1.58.jar:\ lib/jcardsim-3.0.4-SNAPSHOT.jar:\ lib/commons-cli-1.3.1.jar:\ lib/snakeyaml-1.19.jar diff --git a/nbproject/standalone/project.properties b/nbproject/standalone/project.properties index 9fed4c2..2d3a9eb 100644 --- a/nbproject/standalone/project.properties +++ b/nbproject/standalone/project.properties @@ -30,7 +30,7 @@ dist.javadoc.dir=${dist.dir}/javadoc libs.CopyLibs.classpath=nbproject/copylibstask.jar endorsed.classpath= excludes= -includes=**/common/**,**/standalone/**,**/data/**,**/applet/* +includes=**/common/**,**/standalone/**,**/data/**,**/applet/*,**/reader/** jar.compress=false javac.classpath=\ lib/bcprov-jdk15on-1.58.jar:\ -- cgit v1.2.3-70-g09d2