aboutsummaryrefslogtreecommitdiff
path: root/standalone/src/main/java
diff options
context:
space:
mode:
authorJ08nY2024-04-30 17:20:02 +0200
committerJ08nY2024-04-30 17:20:02 +0200
commitd11222dc25c2a5363b451dd9dbc81482530c9107 (patch)
treef5d5ae7f51bab87f0f087979504755f197ac697a /standalone/src/main/java
parent1b2386dbdb9fc7eb0863bdad15d3e6eca51946b2 (diff)
downloadECTester-d11222dc25c2a5363b451dd9dbc81482530c9107.tar.gz
ECTester-d11222dc25c2a5363b451dd9dbc81482530c9107.tar.zst
ECTester-d11222dc25c2a5363b451dd9dbc81482530c9107.zip
Add way of handling SIGSEGV and SIGABRT in native code.
Diffstat (limited to 'standalone/src/main/java')
-rw-r--r--standalone/src/main/java/cz/crcs/ectester/standalone/ECTesterStandalone.java16
-rw-r--r--standalone/src/main/java/cz/crcs/ectester/standalone/libs/jni/SigInfo.java80
-rw-r--r--standalone/src/main/java/cz/crcs/ectester/standalone/libs/jni/SignalException.java18
-rw-r--r--standalone/src/main/java/cz/crcs/ectester/standalone/libs/jni/TimeoutException.java11
4 files changed, 124 insertions, 1 deletions
diff --git a/standalone/src/main/java/cz/crcs/ectester/standalone/ECTesterStandalone.java b/standalone/src/main/java/cz/crcs/ectester/standalone/ECTesterStandalone.java
index ab7e45b..82c2362 100644
--- a/standalone/src/main/java/cz/crcs/ectester/standalone/ECTesterStandalone.java
+++ b/standalone/src/main/java/cz/crcs/ectester/standalone/ECTesterStandalone.java
@@ -36,6 +36,8 @@ import cz.crcs.ectester.standalone.consts.KeyAgreementIdent;
import cz.crcs.ectester.standalone.consts.KeyPairGeneratorIdent;
import cz.crcs.ectester.standalone.consts.SignatureIdent;
import cz.crcs.ectester.standalone.libs.*;
+import cz.crcs.ectester.standalone.libs.jni.SignalException;
+import cz.crcs.ectester.standalone.libs.jni.TimeoutException;
import cz.crcs.ectester.standalone.output.FileTestWriter;
import cz.crcs.ectester.standalone.test.suites.*;
import org.apache.commons.cli.*;
@@ -103,6 +105,9 @@ public class ECTesterStandalone {
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());
+
+ FileUtil.writeNewer(LIB_RESOURCE_DIR + "lib_signals.so", reqs.resolve("lib_signals.so"));
+ System.load(reqs.resolve("lib_signals.so").toString());
}
List<ProviderECLibrary> libObjects = new LinkedList<>();
@@ -739,7 +744,16 @@ public class ECTesterStandalone {
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();
+ KeyPair kp;
+ try {
+ kp = kpg.genKeyPair();
+ } catch (SignalException exc) {
+ System.err.println(exc.getSigInfo());
+ continue;
+ } catch (TimeoutException exc) {
+ System.err.println(exc);
+ continue;
+ }
elapsed += System.nanoTime();
if (!lib.getNativeTimingSupport().isEmpty()) {
elapsed = lib.getLastNativeTiming();
diff --git a/standalone/src/main/java/cz/crcs/ectester/standalone/libs/jni/SigInfo.java b/standalone/src/main/java/cz/crcs/ectester/standalone/libs/jni/SigInfo.java
new file mode 100644
index 0000000..3cb7bad
--- /dev/null
+++ b/standalone/src/main/java/cz/crcs/ectester/standalone/libs/jni/SigInfo.java
@@ -0,0 +1,80 @@
+package cz.crcs.ectester.standalone.libs.jni;
+
+/**
+ * @author Jan Jancar johny@neuromancer.sk
+ */
+public class SigInfo {
+
+ private final int signo;
+ private final int code;
+ private final int errno;
+ private final int pid;
+ private final int uid;
+ private final long addr;
+ private final int status;
+ private final long band;
+ private final long sigval;
+
+ public SigInfo(int signo, int code, int errno, int pid, int uid, long addr, int status, long band, long sigval) {
+ this.signo = signo;
+ this.code = code;
+ this.errno = errno;
+ this.pid = pid;
+ this.uid = uid;
+ this.addr = addr;
+ this.status = status;
+ this.band = band;
+ this.sigval = sigval;
+ }
+
+ public int getSigno() {
+ return signo;
+ }
+
+ public int getCode() {
+ return code;
+ }
+
+ public int getErrno() {
+ return errno;
+ }
+
+ public int getPid() {
+ return pid;
+ }
+
+ public int getUid() {
+ return uid;
+ }
+
+ public long getAddr() {
+ return addr;
+ }
+
+ public int getStatus() {
+ return status;
+ }
+
+ public long getBand() {
+ return band;
+ }
+
+ public long getSigval() {
+ return sigval;
+ }
+
+ @Override
+ public String toString() {
+ return "SigInfo{" +
+ "signo=" + signo +
+ ", code=" + code +
+ ", errno=" + errno +
+ ", pid=" + pid +
+ ", uid=" + uid +
+ ", addr=" + addr +
+ ", status=" + status +
+ ", band=" + band +
+ ", sigval=" + sigval +
+ '}';
+ }
+}
diff --git a/standalone/src/main/java/cz/crcs/ectester/standalone/libs/jni/SignalException.java b/standalone/src/main/java/cz/crcs/ectester/standalone/libs/jni/SignalException.java
new file mode 100644
index 0000000..726286e
--- /dev/null
+++ b/standalone/src/main/java/cz/crcs/ectester/standalone/libs/jni/SignalException.java
@@ -0,0 +1,18 @@
+package cz.crcs.ectester.standalone.libs.jni;
+
+/**
+ * @author Jan Jancar johny@neuromancer.sk
+ */
+public class SignalException extends RuntimeException {
+
+ private final SigInfo sigInfo;
+
+ public SignalException(SigInfo sigInfo) {
+ super("Signal caught.");
+ this.sigInfo = sigInfo;
+ }
+
+ public SigInfo getSigInfo() {
+ return sigInfo;
+ }
+}
diff --git a/standalone/src/main/java/cz/crcs/ectester/standalone/libs/jni/TimeoutException.java b/standalone/src/main/java/cz/crcs/ectester/standalone/libs/jni/TimeoutException.java
new file mode 100644
index 0000000..c4084b9
--- /dev/null
+++ b/standalone/src/main/java/cz/crcs/ectester/standalone/libs/jni/TimeoutException.java
@@ -0,0 +1,11 @@
+package cz.crcs.ectester.standalone.libs.jni;
+
+/**
+ * @author Jan Jancar johny@neuromancer.sk
+ */
+public class TimeoutException extends RuntimeException {
+
+ public TimeoutException(String message) {
+ super(message);
+ }
+}