diff options
31 files changed, 452 insertions, 601 deletions
diff --git a/build-standalone.xml b/build-standalone.xml index ae49405..90b4fa9 100644 --- a/build-standalone.xml +++ b/build-standalone.xml @@ -133,6 +133,7 @@ <target name="headers" depends="compile"> <javah classpath="${build.classes.dir}" outputfile="src/cz/crcs/ectester/standalone/libs/jni/native.h"> + <class name="cz.crcs.ectester.standalone.libs.NativeECLibrary"/> <class name="cz.crcs.ectester.standalone.libs.TomcryptLib"/> <class name="cz.crcs.ectester.standalone.libs.jni.NativeProvider$TomCrypt"/> <class name="cz.crcs.ectester.standalone.libs.jni.NativeKeyPairGeneratorSpi$TomCrypt"/> diff --git a/src/cz/crcs/ectester/common/util/FileUtil.java b/src/cz/crcs/ectester/common/util/FileUtil.java index 790596b..e6e319b 100644 --- a/src/cz/crcs/ectester/common/util/FileUtil.java +++ b/src/cz/crcs/ectester/common/util/FileUtil.java @@ -2,10 +2,13 @@ package cz.crcs.ectester.common.util; import cz.crcs.ectester.common.output.TeeOutputStream; -import java.io.FileNotFoundException; -import java.io.FileOutputStream; -import java.io.OutputStream; -import java.io.OutputStreamWriter; +import java.io.*; +import java.net.URL; +import java.net.URLConnection; +import java.nio.file.Files; +import java.nio.file.Path; +import java.nio.file.Paths; +import java.nio.file.StandardCopyOption; import java.util.LinkedList; import java.util.List; @@ -13,6 +16,9 @@ import java.util.List; * @author Jan Jancar johny@neuromancer.sk */ public class FileUtil { + private static Path appData = null; + public static String LIB_RESOURCE_DIR = "/cz/crcs/ectester/standalone/libs/jni/"; + public static OutputStream openStream(String[] files) throws FileNotFoundException { if (files == null) { return null; @@ -30,4 +36,64 @@ public class FileUtil { } return new OutputStreamWriter(openStream(files)); } + + public static Path getAppData() { + if (appData != null) { + return appData; + } + + if (System.getProperty("os.name").startsWith("Windows")) { + appData = Paths.get(System.getenv("AppData")); + } else { + if (System.getProperty("os.name").startsWith("Linux")) { + 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 { + appData = Paths.get(System.getProperty("user.home"), ".local", "share"); + } + } + return appData; + } + + public static boolean isNewer(URLConnection jarConn, Path realPath) throws IOException { + if (realPath.toFile().isFile()) { + long jarModified = jarConn.getLastModified(); + long realModified = Files.getLastModifiedTime(realPath).toMillis(); + return jarModified > realModified; + } + return true; + } + + public static boolean writeNewer(String resourcePath, Path outPath) throws IOException { + URL reqURL = FileUtil.class.getResource(resourcePath); + if (reqURL == null) { + return false; + } + URLConnection reqConn = reqURL.openConnection(); + if (isNewer(reqConn, outPath)) { + Files.copy(reqConn.getInputStream(), outPath, StandardCopyOption.REPLACE_EXISTING); + } + reqConn.getInputStream().close(); + return true; + } + + public static Path getLibDir() { + return getAppData().resolve("ECTesterStandalone"); + } + + public static Path getRequirementsDir() { + return getLibDir().resolve("lib"); + } + + public static String getLibSuffix() { + if (System.getProperty("os.name").startsWith("Windows")) { + return "dll"; + } else { + return "so"; + } + } } diff --git a/src/cz/crcs/ectester/common/util/Util.java b/src/cz/crcs/ectester/common/util/Util.java index 7f18368..3a4912a 100644 --- a/src/cz/crcs/ectester/common/util/Util.java +++ b/src/cz/crcs/ectester/common/util/Util.java @@ -1,5 +1,8 @@ package cz.crcs.ectester.common.util; +/** + * @author Jan Jancar johny@neuromancer.sk + */ public class Util { public static long convertTime(long nanos, String timeUnit) { switch (timeUnit) { diff --git a/src/cz/crcs/ectester/standalone/ECTesterStandalone.java b/src/cz/crcs/ectester/standalone/ECTesterStandalone.java index cad1737..bd10686 100644 --- a/src/cz/crcs/ectester/standalone/ECTesterStandalone.java +++ b/src/cz/crcs/ectester/standalone/ECTesterStandalone.java @@ -52,6 +52,7 @@ import java.io.IOException; import java.io.PrintStream; import java.math.BigInteger; import java.nio.file.Files; +import java.nio.file.Path; import java.security.*; import java.security.interfaces.ECPrivateKey; import java.security.interfaces.ECPublicKey; @@ -93,6 +94,8 @@ public class ECTesterStandalone { private static final String CLI_HEADER = "\n" + DESCRIPTION + "\n\n"; private static final String CLI_FOOTER = "\n" + LICENSE; + public static String LIB_RESOURCE_DIR = "/cz/crcs/ectester/standalone/libs/jni/"; + private void run(String[] args) { try { cli = parseArgs(args); @@ -110,7 +113,17 @@ public class ECTesterStandalone { return; } + Path reqs = FileUtil.getRequirementsDir(); + reqs.toFile().mkdirs(); + + if (!System.getProperty("os.name").startsWith("Windows")) { + FileUtil.writeNewer(LIB_RESOURCE_DIR + "lib_timing.so", reqs.resolve("lib_timing.so")); + System.load(reqs.resolve("lib_timing.so").toString()); + } + + //TODO: push this further down to only initialize if necessary. + // and only initialize the chosen lib (so give libs a name in Java only) for (ECLibrary lib : libs) { lib.initialize(); } @@ -168,6 +181,7 @@ public class ECTesterStandalone { Option curveName = Option.builder("cn").longOpt("curve-name").desc("Use a named curve, search from curves supported by the library: <name>").hasArg().argName("name").optionalArg(false).numberOfArgs(1).build(); Option bits = Option.builder("b").longOpt("bits").hasArg().argName("n").optionalArg(false).desc("What size of curve to use.").numberOfArgs(1).build(); Option output = Option.builder("o").longOpt("output").desc("Output into file <output_file>.").hasArgs().argName("output_file").optionalArg(false).numberOfArgs(1).build(); + Option timeSource = Option.builder("ts").longOpt("time-source").desc("Use a given native timing source: {rdtsc, monotonic, monotonic-raw, cputime-process, cputime-thread, perfcount}").hasArgs().argName("source").optionalArg(false).numberOfArgs(1).build(); Options testOpts = new Options(); testOpts.addOption(bits); @@ -188,6 +202,7 @@ public class ECTesterStandalone { ecdhOpts.addOption(namedCurve); ecdhOpts.addOption(curveName); ecdhOpts.addOption(output); + ecdhOpts.addOption(timeSource); ecdhOpts.addOption(Option.builder("t").longOpt("type").desc("Set KeyAgreement object [type].").hasArg().argName("type").optionalArg(false).build()); ecdhOpts.addOption(Option.builder().longOpt("key-type").desc("Set the key [algorithm] for which the key should be derived in KeyAgreements with KDF. Default is \"AES\".").hasArg().argName("algorithm").optionalArg(false).build()); ecdhOpts.addOption(Option.builder("n").longOpt("amount").hasArg().argName("amount").optionalArg(false).desc("Do ECDH [amount] times.").build()); @@ -203,6 +218,7 @@ public class ECTesterStandalone { ecdsaOpts.addOption(namedCurve); ecdsaOpts.addOption(curveName); ecdsaOpts.addOption(output); + ecdsaOpts.addOption(timeSource); ecdsaOpts.addOptionGroup(privateKey); ecdsaOpts.addOptionGroup(publicKey); ecdsaOpts.addOption(Option.builder("t").longOpt("type").desc("Set Signature object [type].").hasArg().argName("type").optionalArg(false).build()); @@ -216,6 +232,7 @@ public class ECTesterStandalone { generateOpts.addOption(namedCurve); generateOpts.addOption(curveName); generateOpts.addOption(output); + generateOpts.addOption(timeSource); generateOpts.addOption(Option.builder("n").longOpt("amount").hasArg().argName("amount").optionalArg(false).desc("Generate [amount] of EC keys.").build()); generateOpts.addOption(Option.builder("t").longOpt("type").hasArg().argName("type").optionalArg(false).desc("Set KeyPairGenerator object [type].").build()); ParserOptions generate = new ParserOptions(new DefaultParser(), generateOpts, "Generate EC keypairs."); @@ -265,7 +282,7 @@ public class ECTesterStandalone { if (lib.isInitialized() && (cfg.selected == null || lib == cfg.selected)) { System.out.println("\t- " + Colors.bold(lib.name())); System.out.println(Colors.bold("\t\t- Version: ") + String.format("%f", lib.getProvider().getVersion())); - System.out.println(Colors.bold("\t\t- Supports native timing: ") + lib.supportsNativeTiming()); + System.out.println(Colors.bold("\t\t- Supports native timing: ") + lib.getNativeTimingSupport().toString()); Set<KeyPairGeneratorIdent> kpgs = lib.getKPGs(); if (!kpgs.isEmpty()) { System.out.println(Colors.bold("\t\t- KeyPairGenerators: ") + String.join(", ", kpgs.stream().map(KeyPairGeneratorIdent::getName).collect(Collectors.toList()))); @@ -377,6 +394,13 @@ public class ECTesterStandalone { kpg.initialize(spec); } + if (cli.hasOption("ecdh.time-source")) { + if (!lib.setNativeTimingType(cli.getOptionValue("ecdh.time-source"))) { + System.err.println("Couldn't set native time source."); + return; + } + } + PrintStream out; if (cli.hasOption("ecdh.output")) { out = new PrintStream(FileUtil.openStream(cli.getOptionValues("ecdh.output"))); @@ -384,8 +408,13 @@ public class ECTesterStandalone { out = System.out; } + String timeUnit = "nano"; + if (!lib.getNativeTimingSupport().isEmpty()) { + timeUnit = lib.getNativeTimingUnit(); + } + String hashAlgo = kaIdent.getBaseAlgo() != null ? String.format("[%s]", kaIdent.getBaseAlgo()) : "[NONE]"; - out.println("index;time[nano];pubW;privS;secret" + hashAlgo); + out.println(String.format("index;time[%s];pubW;privS;secret%s", timeUnit, hashAlgo)); KeyPair one = null; if (cli.hasOption("ecdh.fixed-private") && !cli.hasOption("ecdh.named-private") && !cli.hasOption("ecdh.private")) { @@ -434,7 +463,7 @@ public class ECTesterStandalone { result = ka.generateSecret(); } elapsed += System.nanoTime(); - if (lib.supportsNativeTiming()) { + if (!lib.getNativeTimingSupport().isEmpty()) { elapsed = lib.getLastNativeTiming(); } ka = kaIdent.getInstance(lib.getProvider()); @@ -524,6 +553,13 @@ public class ECTesterStandalone { kpg.initialize(new ECGenParameterSpec(curveName)); } + if (cli.hasOption("ecdsa.time-source")) { + if (!lib.setNativeTimingType(cli.getOptionValue("ecdsa.time-source"))) { + System.err.println("Couldn't set native time source."); + return; + } + } + PrintStream out; if (cli.hasOption("ecdsa.output")) { out = new PrintStream(FileUtil.openStream(cli.getOptionValues("ecdsa.output"))); @@ -531,8 +567,13 @@ public class ECTesterStandalone { out = System.out; } + String timeUnit = "nano"; + if (!lib.getNativeTimingSupport().isEmpty()) { + timeUnit = lib.getNativeTimingUnit(); + } + String hashAlgo = sigIdent.getHashAlgo() != null ? String.format("[%s]", sigIdent.getHashAlgo()) : ""; - out.println("index;signTime[nano];verifyTime[nano];data;pubW;privS;signature" + hashAlgo + ";nonce;verified"); + out.println(String.format("index;signTime[%s];verifyTime[%s];data;pubW;privS;signature%s;nonce;verified", timeUnit, timeUnit, hashAlgo)); ECPrivateKey privkey = (ECPrivateKey) ECUtil.loadKey(EC_Consts.PARAMETER_S, cli.getOptionValue("ecdsa.named-private"), cli.getOptionValue("ecdsa.private"), spec); ECPublicKey pubkey = (ECPublicKey) ECUtil.loadKey(EC_Consts.PARAMETER_W, cli.getOptionValue("ecdsa.named-public"), cli.getOptionValue("ecdsa.public"), spec); @@ -556,7 +597,7 @@ public class ECTesterStandalone { long signTime = -System.nanoTime(); byte[] signature = sig.sign(); signTime += System.nanoTime(); - if (lib.supportsNativeTiming()) { + if (!lib.getNativeTimingSupport().isEmpty()) { signTime = lib.getLastNativeTiming(); } @@ -566,7 +607,7 @@ public class ECTesterStandalone { long verifyTime = -System.nanoTime(); boolean verified = sig.verify(signature); verifyTime += System.nanoTime(); - if (lib.supportsNativeTiming()) { + if (!lib.getNativeTimingSupport().isEmpty()) { verifyTime = lib.getLastNativeTiming(); } @@ -621,21 +662,33 @@ public class ECTesterStandalone { kpg.initialize(new ECGenParameterSpec(curveName)); } + if (cli.hasOption("generate.time-source")) { + if (!lib.setNativeTimingType(cli.getOptionValue("generate.time-source"))) { + System.err.println("Couldn't set native time source."); + return; + } + } + + String timeUnit = "nano"; + if (!lib.getNativeTimingSupport().isEmpty()) { + timeUnit = lib.getNativeTimingUnit(); + } + PrintStream out; if (cli.hasOption("generate.output")) { - out = new PrintStream(FileUtil.openStream(cli.getOptionValues("ecdh.output"))); + out = new PrintStream(FileUtil.openStream(cli.getOptionValues("generate.output"))); } else { out = System.out; } - out.println("index;time[nano];pubW;privS"); + out.println(String.format("index;time[%s];pubW;privS", timeUnit)); int amount = Integer.parseInt(cli.getOptionValue("generate.amount", "1")); for (int i = 0; i < amount || amount == 0; ++i) { long elapsed = -System.nanoTime(); KeyPair kp = kpg.genKeyPair(); elapsed += System.nanoTime(); - if (lib.supportsNativeTiming()) { + if (!lib.getNativeTimingSupport().isEmpty()) { elapsed = lib.getLastNativeTiming(); } ECPublicKey publicKey = (ECPublicKey) kp.getPublic(); @@ -727,13 +780,14 @@ public class ECTesterStandalone { color = cli.hasOption("color"); Colors.enabled = color; + String next = cli.getNextName(); + if (cli.isNext("generate") || cli.isNext("export") || cli.isNext("ecdh") || cli.isNext("ecdsa") || cli.isNext("test")) { if (!cli.hasArg(-1)) { System.err.println("Missing library name argument."); return false; } - String next = cli.getNextName(); boolean hasBits = cli.hasOption(next + ".bits"); boolean hasNamedCurve = cli.hasOption(next + ".named-curve"); boolean hasCurveName = cli.hasOption(next + ".curve-name"); @@ -792,6 +846,16 @@ public class ECTesterStandalone { } } + if (cli.isNext("generate") || cli.isNext("ecdh") || cli.isNext("ecdsa")) { + if (cli.hasOption(next + ".time-source")) { + String source = cli.getOptionValue(next + ".time-source"); + if (!selected.getNativeTimingSupport().contains(source)) { + System.err.println(String.format("Time source %s unavailable for library %s.", source, selected.name())); + return false; + } + } + } + return true; } } diff --git a/src/cz/crcs/ectester/standalone/libs/BoringsslLib.java b/src/cz/crcs/ectester/standalone/libs/BoringsslLib.java index 35a48a8..60ca5d9 100644 --- a/src/cz/crcs/ectester/standalone/libs/BoringsslLib.java +++ b/src/cz/crcs/ectester/standalone/libs/BoringsslLib.java @@ -12,15 +12,6 @@ public class BoringsslLib extends NativeECLibrary { } @Override - public native boolean supportsNativeTiming(); - - @Override - public native long getNativeTimingResolution(); - - @Override - public native long getLastNativeTiming(); - - @Override native Provider createProvider(); @Override diff --git a/src/cz/crcs/ectester/standalone/libs/BotanLib.java b/src/cz/crcs/ectester/standalone/libs/BotanLib.java index 34fb178..cd28791 100644 --- a/src/cz/crcs/ectester/standalone/libs/BotanLib.java +++ b/src/cz/crcs/ectester/standalone/libs/BotanLib.java @@ -13,15 +13,6 @@ public class BotanLib extends NativeECLibrary { } @Override - public native boolean supportsNativeTiming(); - - @Override - public native long getNativeTimingResolution(); - - @Override - public native long getLastNativeTiming(); - - @Override native Provider createProvider(); @Override diff --git a/src/cz/crcs/ectester/standalone/libs/CryptoppLib.java b/src/cz/crcs/ectester/standalone/libs/CryptoppLib.java index 5153df5..5112d7d 100644 --- a/src/cz/crcs/ectester/standalone/libs/CryptoppLib.java +++ b/src/cz/crcs/ectester/standalone/libs/CryptoppLib.java @@ -13,15 +13,6 @@ public class CryptoppLib extends NativeECLibrary { } @Override - public native boolean supportsNativeTiming(); - - @Override - public native long getNativeTimingResolution(); - - @Override - public native long getLastNativeTiming(); - - @Override native Provider createProvider(); @Override diff --git a/src/cz/crcs/ectester/standalone/libs/GcryptLib.java b/src/cz/crcs/ectester/standalone/libs/GcryptLib.java index ef20f97..a0a7fc8 100644 --- a/src/cz/crcs/ectester/standalone/libs/GcryptLib.java +++ b/src/cz/crcs/ectester/standalone/libs/GcryptLib.java @@ -13,15 +13,6 @@ public class GcryptLib extends NativeECLibrary { } @Override - public native boolean supportsNativeTiming(); - - @Override - public native long getNativeTimingResolution(); - - @Override - public native long getLastNativeTiming(); - - @Override native Provider createProvider(); @Override diff --git a/src/cz/crcs/ectester/standalone/libs/IppcpLib.java b/src/cz/crcs/ectester/standalone/libs/IppcpLib.java index 3c03737..42f9965 100644 --- a/src/cz/crcs/ectester/standalone/libs/IppcpLib.java +++ b/src/cz/crcs/ectester/standalone/libs/IppcpLib.java @@ -13,16 +13,6 @@ public class IppcpLib extends NativeECLibrary { } @Override - public native boolean supportsNativeTiming(); - - @Override - public native long getNativeTimingResolution(); - - @Override - public native long getLastNativeTiming(); - - - @Override native Provider createProvider(); @Override diff --git a/src/cz/crcs/ectester/standalone/libs/MatrixsslLib.java b/src/cz/crcs/ectester/standalone/libs/MatrixsslLib.java index 93edd88..fcc13ea 100644 --- a/src/cz/crcs/ectester/standalone/libs/MatrixsslLib.java +++ b/src/cz/crcs/ectester/standalone/libs/MatrixsslLib.java @@ -13,15 +13,6 @@ public class MatrixsslLib extends NativeECLibrary { } @Override - public native boolean supportsNativeTiming(); - - @Override - public native long getNativeTimingResolution(); - - @Override - public native long getLastNativeTiming(); - - @Override native Provider createProvider(); @Override diff --git a/src/cz/crcs/ectester/standalone/libs/MbedTLSLib.java b/src/cz/crcs/ectester/standalone/libs/MbedTLSLib.java index bc1a6c3..ace10d7 100644 --- a/src/cz/crcs/ectester/standalone/libs/MbedTLSLib.java +++ b/src/cz/crcs/ectester/standalone/libs/MbedTLSLib.java @@ -13,15 +13,6 @@ public class MbedTLSLib extends NativeECLibrary { } @Override - public native boolean supportsNativeTiming(); - - @Override - public native long getNativeTimingResolution(); - - @Override - public native long getLastNativeTiming(); - - @Override native Provider createProvider(); @Override diff --git a/src/cz/crcs/ectester/standalone/libs/MscngLib.java b/src/cz/crcs/ectester/standalone/libs/MscngLib.java index 354199a..527a65b 100644 --- a/src/cz/crcs/ectester/standalone/libs/MscngLib.java +++ b/src/cz/crcs/ectester/standalone/libs/MscngLib.java @@ -13,15 +13,6 @@ public class MscngLib extends NativeECLibrary { } @Override - public native boolean supportsNativeTiming(); - - @Override - public native long getNativeTimingResolution(); - - @Override - public native long getLastNativeTiming(); - - @Override native Provider createProvider(); @Override diff --git a/src/cz/crcs/ectester/standalone/libs/NativeECLibrary.java b/src/cz/crcs/ectester/standalone/libs/NativeECLibrary.java index 7870377..b0b9f37 100644 --- a/src/cz/crcs/ectester/standalone/libs/NativeECLibrary.java +++ b/src/cz/crcs/ectester/standalone/libs/NativeECLibrary.java @@ -1,15 +1,13 @@ package cz.crcs.ectester.standalone.libs; +import cz.crcs.ectester.common.util.FileUtil; +import cz.crcs.ectester.standalone.ECTesterStandalone; + import java.io.File; import java.io.IOException; -import java.lang.reflect.Field; -import java.net.URL; -import java.net.URLConnection; -import java.nio.file.Files; import java.nio.file.Path; -import java.nio.file.Paths; -import java.nio.file.StandardCopyOption; import java.security.Provider; +import java.util.Set; /** * @author Jan Jancar johny@neuromancer.sk @@ -18,7 +16,6 @@ public abstract class NativeECLibrary extends ProviderECLibrary { private String resource; private String[] requriements; - public static String LIB_RESOURCE_DIR = "/cz/crcs/ectester/standalone/libs/jni/"; public NativeECLibrary(String resource, String... requirements) { this.resource = resource; @@ -29,54 +26,15 @@ public abstract class NativeECLibrary extends ProviderECLibrary { public boolean initialize() { try { /* Determine what OS are we running on and use appropriate suffix and path. */ - String suffix; - Path appData; - if (System.getProperty("os.name").startsWith("Windows")) { - suffix = "dll"; - appData = Paths.get(System.getenv("AppData")); - } else { - suffix = "so"; - if (System.getProperty("os.name").startsWith("Linux")) { - 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 { - appData = Paths.get(System.getProperty("user.home"), ".local", "share"); - } - } + String suffix = FileUtil.getLibSuffix(); + /* Resolve and create the ECTester directories in appData. */ - Path libDir = appData.resolve("ECTesterStandalone"); - File libDirFile = libDir.toFile(); - Path libReqDir = libDir.resolve("lib"); - File libReqDirFile = libReqDir.toFile(); + Path libDir = FileUtil.getLibDir(); + Path libReqDir = FileUtil.getRequirementsDir(); Path libPath = libDir.resolve(resource + "." + suffix); - /* Create directory for shims and for requirements. */ - libDirFile.mkdirs(); - libReqDirFile.mkdirs(); - /* Write the shim. */ - writeNewer(resource + "." + suffix, libPath); - - /* - * Need to hack in /usr/local/lib to path. - * See: https://stackoverflow.com/questions/5419039/is-djava-library-path-equivalent-to-system-setpropertyjava-library-path/24988095#24988095 - */ - String path = System.getProperty("java.library.path"); - if (suffix.equals("so")) { - String newPath = path + ":/usr/local/lib"; - System.setProperty("java.library.path", newPath); - Field fieldSysPath; - try { - fieldSysPath = ClassLoader.class.getDeclaredField("sys_paths"); - fieldSysPath.setAccessible(true); - fieldSysPath.set(null, null); - } catch (NoSuchFieldException | IllegalAccessException ignored) { - } - } + FileUtil.writeNewer(ECTesterStandalone.LIB_RESOURCE_DIR + resource + "." + suffix, libPath); /* Load the requirements, if they are bundled, write them in and load them. */ try { @@ -84,7 +42,7 @@ public abstract class NativeECLibrary extends ProviderECLibrary { if (requirement.endsWith(suffix)) { /* The requirement is bundled, write it */ Path reqPath = libReqDir.resolve(requirement); - writeNewer(requirement, reqPath); + FileUtil.writeNewer(ECTesterStandalone.LIB_RESOURCE_DIR + requirement, reqPath); System.load(reqPath.toString()); } else { System.loadLibrary(requirement); @@ -92,10 +50,6 @@ public abstract class NativeECLibrary extends ProviderECLibrary { } } catch (UnsatisfiedLinkError ule) { return false; - } finally { - if (suffix.equals("so")) { - System.setProperty("java.library.path", path); - } } System.load(libPath.toString()); @@ -108,36 +62,21 @@ public abstract class NativeECLibrary extends ProviderECLibrary { return false; } - private boolean isNewer(URLConnection jarConn, Path realPath) throws IOException { - if (realPath.toFile().isFile()) { - long jarModified = jarConn.getLastModified(); - long realModified = Files.getLastModifiedTime(realPath).toMillis(); - return jarModified > realModified; - } - return true; - } - private boolean writeNewer(String resource, Path outPath) throws IOException { - URL reqURL = NativeECLibrary.class.getResource(LIB_RESOURCE_DIR + resource); - if (reqURL == null) { - return false; - } - URLConnection reqConn = reqURL.openConnection(); - if (isNewer(reqConn, outPath)) { - Files.copy(reqConn.getInputStream(), outPath, StandardCopyOption.REPLACE_EXISTING); - } - reqConn.getInputStream().close(); - return true; - } + @Override + public native Set<String> getNativeTimingSupport(); + + @Override + public native boolean setNativeTimingType(String type); @Override - public abstract boolean supportsNativeTiming(); + public native long getNativeTimingResolution(); @Override - public abstract long getNativeTimingResolution(); + public native String getNativeTimingUnit(); @Override - public abstract long getLastNativeTiming(); + public native long getLastNativeTiming(); abstract Provider createProvider(); } diff --git a/src/cz/crcs/ectester/standalone/libs/OpensslLib.java b/src/cz/crcs/ectester/standalone/libs/OpensslLib.java index 4f44a2a..e558336 100644 --- a/src/cz/crcs/ectester/standalone/libs/OpensslLib.java +++ b/src/cz/crcs/ectester/standalone/libs/OpensslLib.java @@ -12,15 +12,6 @@ public class OpensslLib extends NativeECLibrary { } @Override - public native boolean supportsNativeTiming(); - - @Override - public native long getNativeTimingResolution(); - - @Override - public native long getLastNativeTiming(); - - @Override native Provider createProvider(); @Override diff --git a/src/cz/crcs/ectester/standalone/libs/ProviderECLibrary.java b/src/cz/crcs/ectester/standalone/libs/ProviderECLibrary.java index 83a9dc9..dd8e49c 100644 --- a/src/cz/crcs/ectester/standalone/libs/ProviderECLibrary.java +++ b/src/cz/crcs/ectester/standalone/libs/ProviderECLibrary.java @@ -62,14 +62,22 @@ public abstract class ProviderECLibrary implements ECLibrary { return results; } - public boolean supportsNativeTiming() { - return false; + public Set<String> getNativeTimingSupport() { + return new HashSet<>(); + } + + public boolean setNativeTimingType(String type) { + return false; } public long getNativeTimingResolution() { return 0; } + public String getNativeTimingUnit() { + return null; + } + public long getLastNativeTiming() { return 0; } diff --git a/src/cz/crcs/ectester/standalone/libs/TomcryptLib.java b/src/cz/crcs/ectester/standalone/libs/TomcryptLib.java index 6ac74c9..78db00e 100644 --- a/src/cz/crcs/ectester/standalone/libs/TomcryptLib.java +++ b/src/cz/crcs/ectester/standalone/libs/TomcryptLib.java @@ -13,16 +13,6 @@ public class TomcryptLib extends NativeECLibrary { } @Override - public native boolean supportsNativeTiming(); - - @Override - public native long getNativeTimingResolution(); - - @Override - public native long getLastNativeTiming(); - - - @Override native Provider createProvider(); @Override diff --git a/src/cz/crcs/ectester/standalone/libs/jni/.gitignore b/src/cz/crcs/ectester/standalone/libs/jni/.gitignore index dc3463f..7e8075a 100644 --- a/src/cz/crcs/ectester/standalone/libs/jni/.gitignore +++ b/src/cz/crcs/ectester/standalone/libs/jni/.gitignore @@ -1,3 +1,6 @@ libcore_s.a libcrypt_s.a -matrixssl/
\ No newline at end of file +matrixssl/ + +CMakeLists.txt +cmake-build-debug
\ No newline at end of file diff --git a/src/cz/crcs/ectester/standalone/libs/jni/Makefile b/src/cz/crcs/ectester/standalone/libs/jni/Makefile index f686b0e..c884dc5 100644 --- a/src/cz/crcs/ectester/standalone/libs/jni/Makefile +++ b/src/cz/crcs/ectester/standalone/libs/jni/Makefile @@ -58,87 +58,108 @@ JNI_PLATFORMINCLUDEDIR ?= $(JNI_INCLUDEDIR)/$(JNI_PLATFORM) ############################################################################### ## Targets. -all: tomcrypt_provider.so botan_provider.so cryptopp_provider.so openssl_provider.so boringssl_provider.so gcrypt_provider.so mbedtls_provider.so ippcp_provider.so matrixssl_provider.so +all: tomcrypt botan cryptopp openssl boringssl gcrypt mbedtls ippcp matrixssl # Common utils c_utils.o: c_utils.c $(CC) $(CFLAGS) -c $< -c_timing.o: c_timing.c - $(CC) $(CFLAGS) -c $< +lib_timing.so: c_timing.c + $(CC) -o $@ -shared $(CFLAGS) -Wl,-soname,lib_timing.so $< cpp_utils.o: cpp_utils.cpp $(CXX) $(CXXFLAGS) -c $< # OpenSSL shim -openssl_provider.so: openssl.o c_utils.o c_timing.o - $(CC) $(LFLAGS) -o $@ $^ -L. $(shell pkg-config --libs openssl) +openssl: openssl_provider.so + +openssl_provider.so: openssl.o c_utils.o | lib_timing.so + $(CC) $(LFLAGS) -o $@ -Wl,-rpath,'$$ORIGIN/lib' $^ -L. $(shell pkg-config --libs openssl) -l:lib_timing.so openssl.o: openssl.c $(CC) $(shell pkg-config --cflags openssl) $(CFLAGS) -c $< # BoringSSL shim -boringssl_provider.so: boringssl.o c_utils.o c_timing.o - $(CC) $(LFLAGS) -o $@ $^ -L. ../../../../../../../ext/boringssl/build/crypto/libcrypto.so +boringssl: boringssl_provider.so + +lib_boringssl.so: cp ../../../../../../../ext/boringssl/build/crypto/libcrypto.so lib_boringssl.so +boringssl_provider.so: boringssl.o c_utils.o | lib_timing.so lib_boringssl.so + $(CC) $(LFLAGS) -o $@ -Wl,-rpath,'$$ORIGIN/lib' $^ -L. lib_boringssl.so -l:lib_timing.so + + boringssl.o: boringssl.c $(CC) -I../../../../../../../ext/boringssl/include/ $(CFLAGS) -c $< # libgcrypt shim -gcrypt_provider.so: gcrypt.o c_utils.o c_timing.o - $(CC) $(LFLAGS) -o $@ $^ -L. $(shell libgcrypt-config --libs) +gcrypt: gcrypt_provider.so + +gcrypt_provider.so: gcrypt.o c_utils.o | lib_timing.so + $(CC) $(LFLAGS) -o $@ -Wl,-rpath,'$$ORIGIN/lib' $^ -L. $(shell libgcrypt-config --libs) -l:lib_timing.so gcrypt.o: gcrypt.c $(CC) $(shell libgcrypt-config --cflags) $(CFLAGS) -c $< # Libtomcrypt shim -tomcrypt_provider.so: tomcrypt.o c_utils.o c_timing.o - $(CC) $(LFLAGS) -o $@ $^ -L. -ltommath $(shell pkg-config --libs libtomcrypt) +tomcrypt: tomcrypt_provider.so + +tomcrypt_provider.so: tomcrypt.o c_utils.o | lib_timing.so + $(CC) $(LFLAGS) -o $@ -Wl,-rpath,'$$ORIGIN/lib' $^ -L. -ltommath $(shell pkg-config --libs libtomcrypt) -l:lib_timing.so tomcrypt.o: tomcrypt.c $(CC) -DLTM_DESC $(shell pkg-config --cflags libtomcrypt) $(CFLAGS) -c $< # Botan-2 shim -botan_provider.so: botan.o cpp_utils.o c_timing.o - $(CXX) $(LFLAGS) -o $@ $^ -L. $(shell pkg-config --libs botan-2) +botan: botan_provider.so + +botan_provider.so: botan.o cpp_utils.o | lib_timing.so + $(CXX) $(LFLAGS) -o $@ -Wl,-rpath,'$$ORIGIN/lib' $^ -L. $(shell pkg-config --libs botan-2) -l:lib_timing.so botan.o: botan.cpp $(CXX) $(shell pkg-config --cflags botan-2) $(CXXFLAGS) -c $< # Crypto++ shim -cryptopp_provider.so: cryptopp.o cpp_utils.o c_timing.o - $(CXX) $(LFLAGS) -o $@ $^ -L. $(shell pkg-config --libs libcrypto++) +cryptopp: cryptopp_provider.so + +cryptopp_provider.so: cryptopp.o cpp_utils.o | lib_timing.so + $(CXX) $(LFLAGS) -o $@ -Wl,-rpath,'$$ORIGIN/lib' $^ -L. $(shell pkg-config --libs libcrypto++) -l:lib_timing.so cryptopp.o: cryptopp.cpp $(CXX) $(shell pkg-config --cflags libcrypto++) $(CXXFLAGS) -c $< # mbedTLS shim -mbedtls_provider.so: mbedtls.o c_utils.o c_timing.o - $(CC) $(LFLAGS) -o $@ $^ -L. -lmbedcrypto +mbedtls: mbedtls_provider.so + +mbedtls_provider.so: mbedtls.o c_utils.o | lib_timing.so + $(CC) $(LFLAGS) -o $@ -Wl,-rpath,'$$ORIGIN/lib' $^ -L. -lmbedcrypto -l:lib_timing.so mbedtls.o: mbedtls.c $(CC) $(CFLAGS) -c $< # Intel Performance Primitives crypto shim -ippcp_provider.so: ippcp.o c_utils.o c_timing.o - $(CC) $(LFLAGS) -o $@ $^ -L. -lippcp +ippcp: ippcp_provider.so + +ippcp_provider.so: ippcp.o c_utils.o + $(CC) $(LFLAGS) -o $@ -Wl,-rpath,'$$ORIGIN/lib' $^ -L. -lippcp -l:lib_timing.so ippcp.o: ippcp.c $(CC) $(CFLAGS) -c $< # MatrixSSL shim -matrixssl_provider.so: matrixssl.o c_utils.o c_timing.o - $(CC) $(LFLAGS) -o $@ -L. $^ libcrypt_s.a libcore_s.a +matrixssl: matrixssl_provider.so + +matrixssl_provider.so: matrixssl.o c_utils.o | lib_timing.so + $(CC) $(LFLAGS) -o $@ -Wl,-rpath,'$$ORIGIN/lib' -L. $^ libcrypt_s.a libcore_s.a -l:lib_timing.so matrixssl.o: matrixssl.c $(CC) $(CFLAGS) -Imatrixssl/ -c $< @@ -147,18 +168,18 @@ matrixssl.o: matrixssl.c help: @echo "# This makefile builds the JNI shims necessary to test native libraries." @echo "# Targets:" - @echo " - openssl_provider.so" - @echo " - boringssl_provider.so" - @echo " - gcrypt_provider.so" - @echo " - tomcrypt_provider.so" - @echo " - botan_provider.so" - @echo " - cryptopp_provider.so" - @echo " - mbedtls_provider.so" - @echo " - ippcp_provider.so" - @echo " - matrixssl_provider.so" + @echo " - openssl" + @echo " - boringssl" + @echo " - gcrypt" + @echo " - tomcrypt" + @echo " - botan" + @echo " - cryptopp" + @echo " - mbedtls" + @echo " - ippcp" + @echo " - matrixssl" clean: rm -rf *.o rm -rf *.so -.PHONY: all help clean
\ No newline at end of file +.PHONY: all help clean openssl boringssl gcrypt tomcrypt botan cryptopp mbedtls ippcp matrixssl
\ No newline at end of file diff --git a/src/cz/crcs/ectester/standalone/libs/jni/boringssl.c b/src/cz/crcs/ectester/standalone/libs/jni/boringssl.c index 0484d28..bca2ead 100644 --- a/src/cz/crcs/ectester/standalone/libs/jni/boringssl.c +++ b/src/cz/crcs/ectester/standalone/libs/jni/boringssl.c @@ -513,16 +513,4 @@ JNIEXPORT jboolean JNICALL Java_cz_crcs_ectester_standalone_libs_jni_NativeSigna EC_KEY_free(pub); EC_GROUP_free(curve); return (result == 1) ? JNI_TRUE : JNI_FALSE; -} - -JNIEXPORT jboolean JNICALL Java_cz_crcs_ectester_standalone_libs_BoringsslLib_supportsNativeTiming(JNIEnv *env, jobject this) { - return native_timing_supported(); -} - -JNIEXPORT jlong JNICALL Java_cz_crcs_ectester_standalone_libs_BoringsslLib_getNativeTimingResolution(JNIEnv *env, jobject this) { - return native_timing_resolution(); -} - -JNIEXPORT jlong JNICALL Java_cz_crcs_ectester_standalone_libs_BoringsslLib_getLastNativeTiming(JNIEnv *env, jobject this) { - return native_timing_last(); }
\ No newline at end of file diff --git a/src/cz/crcs/ectester/standalone/libs/jni/botan.cpp b/src/cz/crcs/ectester/standalone/libs/jni/botan.cpp index 813b9f8..8781f72 100644 --- a/src/cz/crcs/ectester/standalone/libs/jni/botan.cpp +++ b/src/cz/crcs/ectester/standalone/libs/jni/botan.cpp @@ -1,10 +1,8 @@ #include "native.h" #include <string> -#include <botan/lookup.h> #include <botan/version.h> #include <botan/parsing.h> -#include <botan/init.h> #include <botan/rng.h> #include <botan/secmem.h> #include <botan/auto_rng.h> @@ -528,16 +526,4 @@ JNIEXPORT jboolean JNICALL Java_cz_crcs_ectester_standalone_libs_jni_NativeSigna return JNI_TRUE; } return JNI_FALSE; -} - -JNIEXPORT jboolean JNICALL Java_cz_crcs_ectester_standalone_libs_BotanLib_supportsNativeTiming(JNIEnv *env, jobject self) { - return native_timing_supported(); -} - -JNIEXPORT jlong JNICALL Java_cz_crcs_ectester_standalone_libs_BotanLib_getNativeTimingResolution(JNIEnv *env, jobject self) { - return native_timing_resolution(); -} - -JNIEXPORT jlong JNICALL Java_cz_crcs_ectester_standalone_libs_BotanLib_getLastNativeTiming(JNIEnv *env, jobject self) { - return native_timing_last(); }
\ No newline at end of file diff --git a/src/cz/crcs/ectester/standalone/libs/jni/c_timing.c b/src/cz/crcs/ectester/standalone/libs/jni/c_timing.c index 941cee6..018ceda 100644 --- a/src/cz/crcs/ectester/standalone/libs/jni/c_timing.c +++ b/src/cz/crcs/ectester/standalone/libs/jni/c_timing.c @@ -1,47 +1,84 @@ #include "c_timing.h" #if __linux || __posix -#include<unistd.h> -#endif - -#if _POSIX_TIMERS > 0 +#include <unistd.h> #include <time.h> +#include <string.h> +static unsigned long long tsc_start = 0; +static unsigned long long tsc_end = 0; +static unsigned long long tsc_partial = 0; +static const char *rdtsc_unit = "instr"; + +static inline unsigned long long rdtsc(void) { + unsigned long long int x; + __asm__ volatile ("rdtsc" : "=A" (x)); + return x; +} + +static jlong rdtsc_timing_resolution() { + return 1; +} + +static void rdtsc_timing_start() { + tsc_partial = 0; + tsc_start = rdtsc(); +} + +static void rdtsc_timing_pause() { + tsc_end = rdtsc(); + tsc_partial += tsc_end - tsc_start; +} + +static void rdtsc_timing_restart() { + tsc_start = rdtsc(); +} + +static void rdtsc_timing_stop() { + tsc_end = rdtsc(); +} + +static jlong rdtsc_timing_last() { + jlong res = (jlong) ((tsc_end - tsc_start) + tsc_partial); + if (res < 0) { + return 0; + } else { + return res; + } +} static struct timespec start = {0}; static struct timespec end = {0}; static jlong partial = 0; +static clockid_t clk_id = CLOCK_MONOTONIC_RAW; +static const char *clock_unit = "nano"; -jboolean native_timing_supported() { - return JNI_TRUE; -} - -jlong native_timing_resolution() { +static jlong clock_timing_resolution() { struct timespec timeval; - clock_getres(CLOCK_MONOTONIC, &timeval); + clock_getres(clk_id, &timeval); return timeval.tv_nsec; } -void native_timing_start() { +static void clock_timing_start() { partial = 0; - clock_gettime(CLOCK_MONOTONIC, &start); + clock_gettime(clk_id, &start); } -void native_timing_pause() { - clock_gettime(CLOCK_MONOTONIC, &end); +static void clock_timing_pause() { + clock_gettime(clk_id, &end); partial += (end.tv_sec - start.tv_sec) * 1000000000 + (end.tv_nsec - start.tv_nsec); } -void native_timing_restart() { - clock_gettime(CLOCK_MONOTONIC, &start); +static void clock_timing_restart() { + clock_gettime(clk_id, (struct timespec *)&start); } -void native_timing_stop() { - clock_gettime(CLOCK_MONOTONIC, &end); +static void clock_timing_stop() { + clock_gettime(clk_id, (struct timespec *)&end); } -jlong native_timing_last() { +static jlong clock_timing_last() { jlong res = (end.tv_sec - start.tv_sec) * 1000000000 + (end.tv_nsec - start.tv_nsec) + partial; if (res < 0) { return 0; @@ -50,9 +87,105 @@ jlong native_timing_last() { } } +static jlong (*func_timing_resolution)() = &clock_timing_resolution; +static void (*func_timing_start)() = &clock_timing_start; +static void (*func_timing_pause)() = &clock_timing_pause; +static void (*func_timing_restart)() = &clock_timing_restart; +static void (*func_timing_stop)() = &clock_timing_stop; +static jlong (*func_timing_last)() = &clock_timing_last; +static const char *unit = "nano"; + +JNIEXPORT jobject JNICALL Java_cz_crcs_ectester_standalone_libs_NativeECLibrary_getNativeTimingSupport(JNIEnv *env, jobject self) { + jclass set_class = (*env)->FindClass(env, "java/util/TreeSet"); + + jmethodID set_ctr = (*env)->GetMethodID(env, set_class, "<init>", "()V"); + jmethodID set_add = (*env)->GetMethodID(env, set_class, "add", "(Ljava/lang/Object;)Z"); + + jobject result = (*env)->NewObject(env, set_class, set_ctr); + (*env)->CallBooleanMethod(env, result, set_add, (*env)->NewStringUTF(env, "rdtsc")); + (*env)->CallBooleanMethod(env, result, set_add, (*env)->NewStringUTF(env, "monotonic")); + (*env)->CallBooleanMethod(env, result, set_add, (*env)->NewStringUTF(env, "monotonic-raw")); + (*env)->CallBooleanMethod(env, result, set_add, (*env)->NewStringUTF(env, "cputime-processor")); + (*env)->CallBooleanMethod(env, result, set_add, (*env)->NewStringUTF(env, "cputime-thread")); + return result; +} + +JNIEXPORT jboolean JNICALL Java_cz_crcs_ectester_standalone_libs_NativeECLibrary_setNativeTimingType(JNIEnv *env, jobject self, jstring type) { + const char *type_data = (*env)->GetStringUTFChars(env, type, NULL); + + if (strcmp(type_data, "rdtsc") == 0) { + func_timing_resolution = &rdtsc_timing_resolution; + func_timing_start = &rdtsc_timing_start; + func_timing_pause = &rdtsc_timing_pause; + func_timing_restart = &rdtsc_timing_restart; + func_timing_stop = &rdtsc_timing_stop; + func_timing_last = &rdtsc_timing_last; + unit = rdtsc_unit; + return JNI_TRUE; + } else { + if (strcmp(type_data, "monotonic") == 0) { + clk_id = CLOCK_MONOTONIC; + } else if (strcmp(type_data, "monotonic-raw") == 0) { + clk_id = CLOCK_MONOTONIC_RAW; + } else if (strcmp(type_data, "cputime-processor") == 0) { + clk_id = CLOCK_PROCESS_CPUTIME_ID; + } else if (strcmp(type_data, "cputime-thread") == 0) { + clk_id = CLOCK_THREAD_CPUTIME_ID; + } else { + return JNI_FALSE; + } + + func_timing_resolution = &clock_timing_resolution; + func_timing_start = &clock_timing_start; + func_timing_pause = &clock_timing_pause; + func_timing_restart = &clock_timing_restart; + func_timing_stop = &clock_timing_stop; + func_timing_last = &clock_timing_last; + unit = clock_unit; + return JNI_TRUE; + } +} + +JNIEXPORT jlong JNICALL Java_cz_crcs_ectester_standalone_libs_NativeECLibrary_getNativeTimingResolution(JNIEnv *env, jobject self) { + return native_timing_resolution(); +} + +JNIEXPORT jstring JNICALL Java_cz_crcs_ectester_standalone_libs_NativeECLibrary_getNativeTimingUnit(JNIEnv *env, jobject self) { + return (*env)->NewStringUTF(env, unit); +} + +JNIEXPORT jlong JNICALL Java_cz_crcs_ectester_standalone_libs_NativeECLibrary_getLastNativeTiming(JNIEnv *env, jobject self) { + return native_timing_last(); +} + +jlong native_timing_resolution() { + return func_timing_resolution(); +} + +void native_timing_start() { + func_timing_start(); +} + +void native_timing_pause() { + func_timing_pause(); +} + +void native_timing_restart() { + func_timing_restart(); +} + +void native_timing_stop() { + func_timing_stop(); +} + +jlong native_timing_last() { + return func_timing_last(); +} + #elif defined(__WIN32__) || defined(_MSC_VER) #include <Windows.h> +#error TODO static LARGE_INTEGER start = {0}; static LARGE_INTEGER end = {0}; @@ -97,6 +230,7 @@ jlong native_timing_last() { #else +#error TODO jboolean native_timing_supported() { return JNI_FALSE; } @@ -117,4 +251,4 @@ jlong native_timing_last() { return 0; } -#endif
\ No newline at end of file +#endif diff --git a/src/cz/crcs/ectester/standalone/libs/jni/c_timing.h b/src/cz/crcs/ectester/standalone/libs/jni/c_timing.h index 3325c06..e12ccdd 100644 --- a/src/cz/crcs/ectester/standalone/libs/jni/c_timing.h +++ b/src/cz/crcs/ectester/standalone/libs/jni/c_timing.h @@ -10,38 +10,35 @@ extern "C" /** * */ -jboolean native_timing_supported(); +__attribute__((visibility("default"))) jlong native_timing_resolution(); /** * */ -jlong native_timing_resolution(); +__attribute__((visibility("default"))) void native_timing_start(); /** * */ -void native_timing_start(); +__attribute__((visibility("default"))) void native_timing_pause(); /** * */ -void native_timing_pause(); +__attribute__((visibility("default"))) void native_timing_restart(); /** * */ -void native_timing_restart(); +__attribute__((visibility("default"))) void native_timing_stop(); /** * */ -void native_timing_stop(); +__attribute__((visibility("default"))) jlong native_timing_last(); + -/** - * - */ -jlong native_timing_last(); #ifdef __cplusplus } -#endif
\ No newline at end of file +#endif diff --git a/src/cz/crcs/ectester/standalone/libs/jni/cryptopp.cpp b/src/cz/crcs/ectester/standalone/libs/jni/cryptopp.cpp index 089724e..eb782b7 100644 --- a/src/cz/crcs/ectester/standalone/libs/jni/cryptopp.cpp +++ b/src/cz/crcs/ectester/standalone/libs/jni/cryptopp.cpp @@ -764,16 +764,4 @@ JNIEXPORT jboolean JNICALL Java_cz_crcs_ectester_standalone_libs_jni_NativeSigna } // unreachable return JNI_FALSE; -} - -JNIEXPORT jboolean JNICALL Java_cz_crcs_ectester_standalone_libs_CryptoppLib_supportsNativeTiming(JNIEnv *env, jobject self) { - return native_timing_supported(); -} - -JNIEXPORT jlong JNICALL Java_cz_crcs_ectester_standalone_libs_CryptoppLib_getNativeTimingResolution(JNIEnv *env, jobject self) { - return native_timing_resolution(); -} - -JNIEXPORT jlong JNICALL Java_cz_crcs_ectester_standalone_libs_CryptoppLib_getLastNativeTiming(JNIEnv *env, jobject self) { - return native_timing_last(); }
\ No newline at end of file diff --git a/src/cz/crcs/ectester/standalone/libs/jni/gcrypt.c b/src/cz/crcs/ectester/standalone/libs/jni/gcrypt.c index 359d0f4..5d29d2c 100644 --- a/src/cz/crcs/ectester/standalone/libs/jni/gcrypt.c +++ b/src/cz/crcs/ectester/standalone/libs/jni/gcrypt.c @@ -620,16 +620,4 @@ release_init: gcry_sexp_release(pub_sexp); gcry_sexp_release(data_sexp); return result; -} - -JNIEXPORT jboolean JNICALL Java_cz_crcs_ectester_standalone_libs_GcryptLib_supportsNativeTiming(JNIEnv *env, jobject this) { - return native_timing_supported(); -} - -JNIEXPORT jlong JNICALL Java_cz_crcs_ectester_standalone_libs_GcryptLib_getNativeTimingResolution(JNIEnv *env, jobject this) { - return native_timing_resolution(); -} - -JNIEXPORT jlong JNICALL Java_cz_crcs_ectester_standalone_libs_GcryptLib_getLastNativeTiming(JNIEnv *env, jobject this) { - return native_timing_last(); }
\ No newline at end of file diff --git a/src/cz/crcs/ectester/standalone/libs/jni/ippcp.c b/src/cz/crcs/ectester/standalone/libs/jni/ippcp.c index fc27460..9846f71 100644 --- a/src/cz/crcs/ectester/standalone/libs/jni/ippcp.c +++ b/src/cz/crcs/ectester/standalone/libs/jni/ippcp.c @@ -694,16 +694,4 @@ JNIEXPORT jboolean JNICALL Java_cz_crcs_ectester_standalone_libs_jni_NativeSigna } return JNI_FALSE; -} - -JNIEXPORT jboolean JNICALL Java_cz_crcs_ectester_standalone_libs_IppcpLib_supportsNativeTiming(JNIEnv *env, jobject this) { - return native_timing_supported(); -} - -JNIEXPORT jlong JNICALL Java_cz_crcs_ectester_standalone_libs_IppcpLib_getNativeTimingResolution(JNIEnv *env, jobject this) { - return native_timing_resolution(); -} - -JNIEXPORT jlong JNICALL Java_cz_crcs_ectester_standalone_libs_IppcpLib_getLastNativeTiming(JNIEnv *env, jobject this) { - return native_timing_last(); -} +}
\ No newline at end of file diff --git a/src/cz/crcs/ectester/standalone/libs/jni/matrixssl.c b/src/cz/crcs/ectester/standalone/libs/jni/matrixssl.c index 1e6936d..d336a4f 100644 --- a/src/cz/crcs/ectester/standalone/libs/jni/matrixssl.c +++ b/src/cz/crcs/ectester/standalone/libs/jni/matrixssl.c @@ -394,17 +394,4 @@ JNIEXPORT jboolean JNICALL Java_cz_crcs_ectester_standalone_libs_jni_NativeSigna } return result < 0 ? JNI_FALSE : JNI_TRUE; -} - - -JNIEXPORT jboolean JNICALL Java_cz_crcs_ectester_standalone_libs_MatrixsslLib_supportsNativeTiming(JNIEnv *env, jobject this) { - return native_timing_supported(); -} - -JNIEXPORT jlong JNICALL Java_cz_crcs_ectester_standalone_libs_MatrixsslLib_getNativeTimingResolution(JNIEnv *env, jobject this) { - return native_timing_resolution(); -} - -JNIEXPORT jlong JNICALL Java_cz_crcs_ectester_standalone_libs_MatrixsslLib_getLastNativeTiming(JNIEnv *env, jobject this) { - return native_timing_last(); }
\ No newline at end of file diff --git a/src/cz/crcs/ectester/standalone/libs/jni/mbedtls.c b/src/cz/crcs/ectester/standalone/libs/jni/mbedtls.c index 0239bdb..05010cf 100644 --- a/src/cz/crcs/ectester/standalone/libs/jni/mbedtls.c +++ b/src/cz/crcs/ectester/standalone/libs/jni/mbedtls.c @@ -541,16 +541,4 @@ JNIEXPORT jboolean JNICALL Java_cz_crcs_ectester_standalone_libs_jni_NativeSigna } return JNI_TRUE; -} - -JNIEXPORT jboolean JNICALL Java_cz_crcs_ectester_standalone_libs_MbedTLSLib_supportsNativeTiming(JNIEnv *env, jobject this) { - return native_timing_supported(); -} - -JNIEXPORT jlong JNICALL Java_cz_crcs_ectester_standalone_libs_MbedTLSLib_getNativeTimingResolution(JNIEnv *env, jobject this) { - return native_timing_resolution(); -} - -JNIEXPORT jlong JNICALL Java_cz_crcs_ectester_standalone_libs_MbedTLSLib_getLastNativeTiming(JNIEnv *env, jobject this) { - return native_timing_last(); }
\ No newline at end of file diff --git a/src/cz/crcs/ectester/standalone/libs/jni/mscng.c b/src/cz/crcs/ectester/standalone/libs/jni/mscng.c index 7f3ff5d..a182b98 100644 --- a/src/cz/crcs/ectester/standalone/libs/jni/mscng.c +++ b/src/cz/crcs/ectester/standalone/libs/jni/mscng.c @@ -1270,16 +1270,4 @@ JNIEXPORT jboolean JNICALL Java_cz_crcs_ectester_standalone_libs_jni_NativeSigna throw_new_var(env, "java/security/GeneralSecurityException", "Error 0x%x returned by BCryptVerifySignature\n", status);
return JNI_FALSE;
}
-}
-
-JNIEXPORT jboolean JNICALL Java_cz_crcs_ectester_standalone_libs_MscngLib_supportsNativeTiming(JNIEnv *env, jobject self) {
- return native_timing_supported();
-}
-
-JNIEXPORT jlong JNICALL Java_cz_crcs_ectester_standalone_libs_MscngLib_getNativeTimingResolution(JNIEnv *env, jobject self) {
- return native_timing_resolution();
-}
-
-JNIEXPORT jlong JNICALL Java_cz_crcs_ectester_standalone_libs_MscngLib_getLastNativeTiming(JNIEnv *env, jobject self) {
- return native_timing_last();
}
\ No newline at end of file diff --git a/src/cz/crcs/ectester/standalone/libs/jni/native.h b/src/cz/crcs/ectester/standalone/libs/jni/native.h index 7540ce8..f4a9052 100644 --- a/src/cz/crcs/ectester/standalone/libs/jni/native.h +++ b/src/cz/crcs/ectester/standalone/libs/jni/native.h @@ -1,36 +1,82 @@ /* DO NOT EDIT THIS FILE - it is machine generated */ #include <jni.h> -/* Header for class cz_crcs_ectester_standalone_libs_TomcryptLib */ +/* Header for class cz_crcs_ectester_standalone_libs_jni_Loader */ -#ifndef _Included_cz_crcs_ectester_standalone_libs_TomcryptLib -#define _Included_cz_crcs_ectester_standalone_libs_TomcryptLib +#ifndef _Included_cz_crcs_ectester_standalone_libs_jni_Loader +#define _Included_cz_crcs_ectester_standalone_libs_jni_Loader #ifdef __cplusplus extern "C" { #endif /* - * Class: cz_crcs_ectester_standalone_libs_TomcryptLib - * Method: supportsNativeTiming - * Signature: ()Z + * Class: cz_crcs_ectester_standalone_libs_jni_Loader + * Method: setup + * Signature: (Ljava/lang/String;)V + */ +JNIEXPORT void JNICALL Java_cz_crcs_ectester_standalone_libs_jni_Loader_setup + (JNIEnv *, jclass, jstring); + +#ifdef __cplusplus +} +#endif +#endif +/* Header for class cz_crcs_ectester_standalone_libs_NativeECLibrary */ + +#ifndef _Included_cz_crcs_ectester_standalone_libs_NativeECLibrary +#define _Included_cz_crcs_ectester_standalone_libs_NativeECLibrary +#ifdef __cplusplus +extern "C" { +#endif +/* + * Class: cz_crcs_ectester_standalone_libs_NativeECLibrary + * Method: getNativeTimingSupport + * Signature: ()Ljava/util/Set; */ -JNIEXPORT jboolean JNICALL Java_cz_crcs_ectester_standalone_libs_TomcryptLib_supportsNativeTiming +JNIEXPORT jobject JNICALL Java_cz_crcs_ectester_standalone_libs_NativeECLibrary_getNativeTimingSupport (JNIEnv *, jobject); /* - * Class: cz_crcs_ectester_standalone_libs_TomcryptLib + * Class: cz_crcs_ectester_standalone_libs_NativeECLibrary + * Method: setNativeTimingType + * Signature: (Ljava/lang/String;)Z + */ +JNIEXPORT jboolean JNICALL Java_cz_crcs_ectester_standalone_libs_NativeECLibrary_setNativeTimingType + (JNIEnv *, jobject, jstring); + +/* + * Class: cz_crcs_ectester_standalone_libs_NativeECLibrary * Method: getNativeTimingResolution * Signature: ()J */ -JNIEXPORT jlong JNICALL Java_cz_crcs_ectester_standalone_libs_TomcryptLib_getNativeTimingResolution +JNIEXPORT jlong JNICALL Java_cz_crcs_ectester_standalone_libs_NativeECLibrary_getNativeTimingResolution (JNIEnv *, jobject); /* - * Class: cz_crcs_ectester_standalone_libs_TomcryptLib + * Class: cz_crcs_ectester_standalone_libs_NativeECLibrary + * Method: getNativeTimingUnit + * Signature: ()Ljava/lang/String; + */ +JNIEXPORT jstring JNICALL Java_cz_crcs_ectester_standalone_libs_NativeECLibrary_getNativeTimingUnit + (JNIEnv *, jobject); + +/* + * Class: cz_crcs_ectester_standalone_libs_NativeECLibrary * Method: getLastNativeTiming * Signature: ()J */ -JNIEXPORT jlong JNICALL Java_cz_crcs_ectester_standalone_libs_TomcryptLib_getLastNativeTiming +JNIEXPORT jlong JNICALL Java_cz_crcs_ectester_standalone_libs_NativeECLibrary_getLastNativeTiming (JNIEnv *, jobject); +#ifdef __cplusplus +} +#endif +#endif +/* 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 @@ -214,30 +260,6 @@ extern "C" { #endif /* * Class: cz_crcs_ectester_standalone_libs_BotanLib - * Method: supportsNativeTiming - * Signature: ()Z - */ -JNIEXPORT jboolean JNICALL Java_cz_crcs_ectester_standalone_libs_BotanLib_supportsNativeTiming - (JNIEnv *, jobject); - -/* - * Class: cz_crcs_ectester_standalone_libs_BotanLib - * Method: getNativeTimingResolution - * Signature: ()J - */ -JNIEXPORT jlong JNICALL Java_cz_crcs_ectester_standalone_libs_BotanLib_getNativeTimingResolution - (JNIEnv *, jobject); - -/* - * Class: cz_crcs_ectester_standalone_libs_BotanLib - * Method: getLastNativeTiming - * Signature: ()J - */ -JNIEXPORT jlong JNICALL Java_cz_crcs_ectester_standalone_libs_BotanLib_getLastNativeTiming - (JNIEnv *, jobject); - -/* - * Class: cz_crcs_ectester_standalone_libs_BotanLib * Method: createProvider * Signature: ()Ljava/security/Provider; */ @@ -419,30 +441,6 @@ extern "C" { #endif /* * Class: cz_crcs_ectester_standalone_libs_CryptoppLib - * Method: supportsNativeTiming - * Signature: ()Z - */ -JNIEXPORT jboolean JNICALL Java_cz_crcs_ectester_standalone_libs_CryptoppLib_supportsNativeTiming - (JNIEnv *, jobject); - -/* - * Class: cz_crcs_ectester_standalone_libs_CryptoppLib - * Method: getNativeTimingResolution - * Signature: ()J - */ -JNIEXPORT jlong JNICALL Java_cz_crcs_ectester_standalone_libs_CryptoppLib_getNativeTimingResolution - (JNIEnv *, jobject); - -/* - * Class: cz_crcs_ectester_standalone_libs_CryptoppLib - * Method: getLastNativeTiming - * Signature: ()J - */ -JNIEXPORT jlong JNICALL Java_cz_crcs_ectester_standalone_libs_CryptoppLib_getLastNativeTiming - (JNIEnv *, jobject); - -/* - * Class: cz_crcs_ectester_standalone_libs_CryptoppLib * Method: createProvider * Signature: ()Ljava/security/Provider; */ @@ -624,30 +622,6 @@ extern "C" { #endif /* * Class: cz_crcs_ectester_standalone_libs_OpensslLib - * Method: supportsNativeTiming - * Signature: ()Z - */ -JNIEXPORT jboolean JNICALL Java_cz_crcs_ectester_standalone_libs_OpensslLib_supportsNativeTiming - (JNIEnv *, jobject); - -/* - * Class: cz_crcs_ectester_standalone_libs_OpensslLib - * Method: getNativeTimingResolution - * Signature: ()J - */ -JNIEXPORT jlong JNICALL Java_cz_crcs_ectester_standalone_libs_OpensslLib_getNativeTimingResolution - (JNIEnv *, jobject); - -/* - * Class: cz_crcs_ectester_standalone_libs_OpensslLib - * Method: getLastNativeTiming - * Signature: ()J - */ -JNIEXPORT jlong JNICALL Java_cz_crcs_ectester_standalone_libs_OpensslLib_getLastNativeTiming - (JNIEnv *, jobject); - -/* - * Class: cz_crcs_ectester_standalone_libs_OpensslLib * Method: createProvider * Signature: ()Ljava/security/Provider; */ @@ -829,30 +803,6 @@ extern "C" { #endif /* * Class: cz_crcs_ectester_standalone_libs_MscngLib - * Method: supportsNativeTiming - * Signature: ()Z - */ -JNIEXPORT jboolean JNICALL Java_cz_crcs_ectester_standalone_libs_MscngLib_supportsNativeTiming - (JNIEnv *, jobject); - -/* - * Class: cz_crcs_ectester_standalone_libs_MscngLib - * Method: getNativeTimingResolution - * Signature: ()J - */ -JNIEXPORT jlong JNICALL Java_cz_crcs_ectester_standalone_libs_MscngLib_getNativeTimingResolution - (JNIEnv *, jobject); - -/* - * Class: cz_crcs_ectester_standalone_libs_MscngLib - * Method: getLastNativeTiming - * Signature: ()J - */ -JNIEXPORT jlong JNICALL Java_cz_crcs_ectester_standalone_libs_MscngLib_getLastNativeTiming - (JNIEnv *, jobject); - -/* - * Class: cz_crcs_ectester_standalone_libs_MscngLib * Method: createProvider * Signature: ()Ljava/security/Provider; */ @@ -1034,30 +984,6 @@ extern "C" { #endif /* * Class: cz_crcs_ectester_standalone_libs_BoringsslLib - * Method: supportsNativeTiming - * Signature: ()Z - */ -JNIEXPORT jboolean JNICALL Java_cz_crcs_ectester_standalone_libs_BoringsslLib_supportsNativeTiming - (JNIEnv *, jobject); - -/* - * Class: cz_crcs_ectester_standalone_libs_BoringsslLib - * Method: getNativeTimingResolution - * Signature: ()J - */ -JNIEXPORT jlong JNICALL Java_cz_crcs_ectester_standalone_libs_BoringsslLib_getNativeTimingResolution - (JNIEnv *, jobject); - -/* - * Class: cz_crcs_ectester_standalone_libs_BoringsslLib - * Method: getLastNativeTiming - * Signature: ()J - */ -JNIEXPORT jlong JNICALL Java_cz_crcs_ectester_standalone_libs_BoringsslLib_getLastNativeTiming - (JNIEnv *, jobject); - -/* - * Class: cz_crcs_ectester_standalone_libs_BoringsslLib * Method: createProvider * Signature: ()Ljava/security/Provider; */ @@ -1239,30 +1165,6 @@ extern "C" { #endif /* * Class: cz_crcs_ectester_standalone_libs_GcryptLib - * Method: supportsNativeTiming - * Signature: ()Z - */ -JNIEXPORT jboolean JNICALL Java_cz_crcs_ectester_standalone_libs_GcryptLib_supportsNativeTiming - (JNIEnv *, jobject); - -/* - * Class: cz_crcs_ectester_standalone_libs_GcryptLib - * Method: getNativeTimingResolution - * Signature: ()J - */ -JNIEXPORT jlong JNICALL Java_cz_crcs_ectester_standalone_libs_GcryptLib_getNativeTimingResolution - (JNIEnv *, jobject); - -/* - * Class: cz_crcs_ectester_standalone_libs_GcryptLib - * Method: getLastNativeTiming - * Signature: ()J - */ -JNIEXPORT jlong JNICALL Java_cz_crcs_ectester_standalone_libs_GcryptLib_getLastNativeTiming - (JNIEnv *, jobject); - -/* - * Class: cz_crcs_ectester_standalone_libs_GcryptLib * Method: createProvider * Signature: ()Ljava/security/Provider; */ @@ -1444,30 +1346,6 @@ extern "C" { #endif /* * Class: cz_crcs_ectester_standalone_libs_MbedTLSLib - * Method: supportsNativeTiming - * Signature: ()Z - */ -JNIEXPORT jboolean JNICALL Java_cz_crcs_ectester_standalone_libs_MbedTLSLib_supportsNativeTiming - (JNIEnv *, jobject); - -/* - * Class: cz_crcs_ectester_standalone_libs_MbedTLSLib - * Method: getNativeTimingResolution - * Signature: ()J - */ -JNIEXPORT jlong JNICALL Java_cz_crcs_ectester_standalone_libs_MbedTLSLib_getNativeTimingResolution - (JNIEnv *, jobject); - -/* - * Class: cz_crcs_ectester_standalone_libs_MbedTLSLib - * Method: getLastNativeTiming - * Signature: ()J - */ -JNIEXPORT jlong JNICALL Java_cz_crcs_ectester_standalone_libs_MbedTLSLib_getLastNativeTiming - (JNIEnv *, jobject); - -/* - * Class: cz_crcs_ectester_standalone_libs_MbedTLSLib * Method: createProvider * Signature: ()Ljava/security/Provider; */ @@ -1649,30 +1527,6 @@ extern "C" { #endif /* * Class: cz_crcs_ectester_standalone_libs_IppcpLib - * Method: supportsNativeTiming - * Signature: ()Z - */ -JNIEXPORT jboolean JNICALL Java_cz_crcs_ectester_standalone_libs_IppcpLib_supportsNativeTiming - (JNIEnv *, jobject); - -/* - * Class: cz_crcs_ectester_standalone_libs_IppcpLib - * Method: getNativeTimingResolution - * Signature: ()J - */ -JNIEXPORT jlong JNICALL Java_cz_crcs_ectester_standalone_libs_IppcpLib_getNativeTimingResolution - (JNIEnv *, jobject); - -/* - * Class: cz_crcs_ectester_standalone_libs_IppcpLib - * Method: getLastNativeTiming - * Signature: ()J - */ -JNIEXPORT jlong JNICALL Java_cz_crcs_ectester_standalone_libs_IppcpLib_getLastNativeTiming - (JNIEnv *, jobject); - -/* - * Class: cz_crcs_ectester_standalone_libs_IppcpLib * Method: createProvider * Signature: ()Ljava/security/Provider; */ @@ -1854,30 +1708,6 @@ extern "C" { #endif /* * Class: cz_crcs_ectester_standalone_libs_MatrixsslLib - * Method: supportsNativeTiming - * Signature: ()Z - */ -JNIEXPORT jboolean JNICALL Java_cz_crcs_ectester_standalone_libs_MatrixsslLib_supportsNativeTiming - (JNIEnv *, jobject); - -/* - * Class: cz_crcs_ectester_standalone_libs_MatrixsslLib - * Method: getNativeTimingResolution - * Signature: ()J - */ -JNIEXPORT jlong JNICALL Java_cz_crcs_ectester_standalone_libs_MatrixsslLib_getNativeTimingResolution - (JNIEnv *, jobject); - -/* - * Class: cz_crcs_ectester_standalone_libs_MatrixsslLib - * Method: getLastNativeTiming - * Signature: ()J - */ -JNIEXPORT jlong JNICALL Java_cz_crcs_ectester_standalone_libs_MatrixsslLib_getLastNativeTiming - (JNIEnv *, jobject); - -/* - * Class: cz_crcs_ectester_standalone_libs_MatrixsslLib * Method: createProvider * Signature: ()Ljava/security/Provider; */ diff --git a/src/cz/crcs/ectester/standalone/libs/jni/openssl.c b/src/cz/crcs/ectester/standalone/libs/jni/openssl.c index 1e1ba02..103a9be 100644 --- a/src/cz/crcs/ectester/standalone/libs/jni/openssl.c +++ b/src/cz/crcs/ectester/standalone/libs/jni/openssl.c @@ -582,16 +582,4 @@ JNIEXPORT jboolean JNICALL Java_cz_crcs_ectester_standalone_libs_jni_NativeSigna EC_KEY_free(pub); EC_GROUP_free(curve); return (result == 1) ? JNI_TRUE : JNI_FALSE; -} - -JNIEXPORT jboolean JNICALL Java_cz_crcs_ectester_standalone_libs_OpensslLib_supportsNativeTiming(JNIEnv *env, jobject this) { - return native_timing_supported(); -} - -JNIEXPORT jlong JNICALL Java_cz_crcs_ectester_standalone_libs_OpensslLib_getNativeTimingResolution(JNIEnv *env, jobject this) { - return native_timing_resolution(); -} - -JNIEXPORT jlong JNICALL Java_cz_crcs_ectester_standalone_libs_OpensslLib_getLastNativeTiming(JNIEnv *env, jobject this) { - return native_timing_last(); }
\ No newline at end of file diff --git a/src/cz/crcs/ectester/standalone/libs/jni/tomcrypt.c b/src/cz/crcs/ectester/standalone/libs/jni/tomcrypt.c index 6789ba8..82592f1 100644 --- a/src/cz/crcs/ectester/standalone/libs/jni/tomcrypt.c +++ b/src/cz/crcs/ectester/standalone/libs/jni/tomcrypt.c @@ -462,16 +462,4 @@ JNIEXPORT jboolean JNICALL Java_cz_crcs_ectester_standalone_libs_jni_NativeSigna (*env)->ReleaseByteArrayElements(env, signature, sig_data, JNI_ABORT); free_curve(curve); return result; -} - -JNIEXPORT jboolean JNICALL Java_cz_crcs_ectester_standalone_libs_TomcryptLib_supportsNativeTiming(JNIEnv *env, jobject this) { - return native_timing_supported(); -} - -JNIEXPORT jlong JNICALL Java_cz_crcs_ectester_standalone_libs_TomcryptLib_getNativeTimingResolution(JNIEnv *env, jobject this) { - return native_timing_resolution(); -} - -JNIEXPORT jlong JNICALL Java_cz_crcs_ectester_standalone_libs_TomcryptLib_getLastNativeTiming(JNIEnv *env, jobject this) { - return native_timing_last(); }
\ No newline at end of file |
