aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorJ08nY2019-07-24 23:19:03 +0200
committerJ08nY2019-07-24 23:19:03 +0200
commit2d09947b4200799b554c55de52afd612bb06d84e (patch)
tree28bda4dc20527d0bb4b6d9fb50ed116f48bf1416
parent628bfd7258bcefa5d0005a370d35e1227ce2f844 (diff)
downloadECTester-2d09947b4200799b554c55de52afd612bb06d84e.tar.gz
ECTester-2d09947b4200799b554c55de52afd612bb06d84e.tar.zst
ECTester-2d09947b4200799b554c55de52afd612bb06d84e.zip
-rw-r--r--build-standalone.xml1
-rw-r--r--src/cz/crcs/ectester/common/util/FileUtil.java74
-rw-r--r--src/cz/crcs/ectester/common/util/Util.java3
-rw-r--r--src/cz/crcs/ectester/standalone/ECTesterStandalone.java84
-rw-r--r--src/cz/crcs/ectester/standalone/libs/BoringsslLib.java9
-rw-r--r--src/cz/crcs/ectester/standalone/libs/BotanLib.java9
-rw-r--r--src/cz/crcs/ectester/standalone/libs/CryptoppLib.java9
-rw-r--r--src/cz/crcs/ectester/standalone/libs/GcryptLib.java9
-rw-r--r--src/cz/crcs/ectester/standalone/libs/IppcpLib.java10
-rw-r--r--src/cz/crcs/ectester/standalone/libs/MatrixsslLib.java9
-rw-r--r--src/cz/crcs/ectester/standalone/libs/MbedTLSLib.java9
-rw-r--r--src/cz/crcs/ectester/standalone/libs/MscngLib.java9
-rw-r--r--src/cz/crcs/ectester/standalone/libs/NativeECLibrary.java97
-rw-r--r--src/cz/crcs/ectester/standalone/libs/OpensslLib.java9
-rw-r--r--src/cz/crcs/ectester/standalone/libs/ProviderECLibrary.java12
-rw-r--r--src/cz/crcs/ectester/standalone/libs/TomcryptLib.java10
-rw-r--r--src/cz/crcs/ectester/standalone/libs/jni/.gitignore5
-rw-r--r--src/cz/crcs/ectester/standalone/libs/jni/Makefile83
-rw-r--r--src/cz/crcs/ectester/standalone/libs/jni/boringssl.c12
-rw-r--r--src/cz/crcs/ectester/standalone/libs/jni/botan.cpp14
-rw-r--r--src/cz/crcs/ectester/standalone/libs/jni/c_timing.c174
-rw-r--r--src/cz/crcs/ectester/standalone/libs/jni/c_timing.h19
-rw-r--r--src/cz/crcs/ectester/standalone/libs/jni/cryptopp.cpp12
-rw-r--r--src/cz/crcs/ectester/standalone/libs/jni/gcrypt.c12
-rw-r--r--src/cz/crcs/ectester/standalone/libs/jni/ippcp.c14
-rw-r--r--src/cz/crcs/ectester/standalone/libs/jni/matrixssl.c13
-rw-r--r--src/cz/crcs/ectester/standalone/libs/jni/mbedtls.c12
-rw-r--r--src/cz/crcs/ectester/standalone/libs/jni/mscng.c12
-rw-r--r--src/cz/crcs/ectester/standalone/libs/jni/native.h284
-rw-r--r--src/cz/crcs/ectester/standalone/libs/jni/openssl.c12
-rw-r--r--src/cz/crcs/ectester/standalone/libs/jni/tomcrypt.c12
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