summaryrefslogtreecommitdiff
path: root/src
diff options
context:
space:
mode:
authorJ08nY2018-05-28 17:56:59 +0200
committerJ08nY2018-05-28 17:56:59 +0200
commit90dcc61a9a9f47b93e043eba54602a96c26fce6f (patch)
tree2092aa2a7217b22e8ed13f46bea834a61be887fb /src
parenta14900f5b106fb6cfbccb928b2d6306cd9aacf68 (diff)
downloadECTester-90dcc61a9a9f47b93e043eba54602a96c26fce6f.tar.gz
ECTester-90dcc61a9a9f47b93e043eba54602a96c26fce6f.tar.zst
ECTester-90dcc61a9a9f47b93e043eba54602a96c26fce6f.zip
Diffstat (limited to 'src')
-rw-r--r--src/cz/crcs/ectester/common/test/BaseTestable.java6
-rw-r--r--src/cz/crcs/ectester/common/test/Test.java8
-rw-r--r--src/cz/crcs/ectester/common/test/Testable.java5
-rw-r--r--src/cz/crcs/ectester/standalone/ECTesterStandalone.java27
-rw-r--r--src/cz/crcs/ectester/standalone/test/KeyAgreementTestable.java79
5 files changed, 80 insertions, 45 deletions
diff --git a/src/cz/crcs/ectester/common/test/BaseTestable.java b/src/cz/crcs/ectester/common/test/BaseTestable.java
index a4b9a00..979b2a4 100644
--- a/src/cz/crcs/ectester/common/test/BaseTestable.java
+++ b/src/cz/crcs/ectester/common/test/BaseTestable.java
@@ -7,6 +7,7 @@ public abstract class BaseTestable implements Testable {
protected boolean hasRun;
protected boolean ok;
protected boolean error;
+ protected Object errorCause;
@Override
public boolean hasRun() {
@@ -24,6 +25,11 @@ public abstract class BaseTestable implements Testable {
}
@Override
+ public Object errorCause() {
+ return errorCause;
+ }
+
+ @Override
public void reset() {
hasRun = false;
ok = false;
diff --git a/src/cz/crcs/ectester/common/test/Test.java b/src/cz/crcs/ectester/common/test/Test.java
index 868fd22..055ec1c 100644
--- a/src/cz/crcs/ectester/common/test/Test.java
+++ b/src/cz/crcs/ectester/common/test/Test.java
@@ -32,6 +32,14 @@ public abstract class Test implements Testable {
}
@Override
+ public Object errorCause() {
+ if (result == null || !result.compareTo(Value.ERROR)) {
+ return null;
+ }
+ return result.getCause();
+ }
+
+ @Override
public boolean hasRun() {
return hasRun;
}
diff --git a/src/cz/crcs/ectester/common/test/Testable.java b/src/cz/crcs/ectester/common/test/Testable.java
index ea1380a..7b4545c 100644
--- a/src/cz/crcs/ectester/common/test/Testable.java
+++ b/src/cz/crcs/ectester/common/test/Testable.java
@@ -15,6 +15,11 @@ public interface Testable {
boolean error();
/**
+ * @return The cause of an error, if it happened, otherwise null.
+ */
+ Object errorCause();
+
+ /**
* @return Whether this runnable was run.
*/
boolean hasRun();
diff --git a/src/cz/crcs/ectester/standalone/ECTesterStandalone.java b/src/cz/crcs/ectester/standalone/ECTesterStandalone.java
index 5f2a420..56dde42 100644
--- a/src/cz/crcs/ectester/standalone/ECTesterStandalone.java
+++ b/src/cz/crcs/ectester/standalone/ECTesterStandalone.java
@@ -53,6 +53,7 @@ import java.security.*;
import java.security.interfaces.ECPrivateKey;
import java.security.interfaces.ECPublicKey;
import java.security.spec.AlgorithmParameterSpec;
+import java.security.spec.ECGenParameterSpec;
import java.security.spec.ECParameterSpec;
import java.util.*;
import java.util.stream.Collectors;
@@ -128,12 +129,14 @@ public class ECTesterStandalone {
private TreeCommandLine parseArgs(String[] args) throws ParseException {
Map<String, ParserOptions> actions = new TreeMap<>();
- Option namedCurve = Option.builder("nc").longOpt("named-curve").desc("Use a named curve, from CurveDB: <cat/id>").hasArg().argName("cat/id").build();
+ Option namedCurve = Option.builder("nc").longOpt("named-curve").desc("Use a named curve, from CurveDB: <cat/id>").hasArg().argName("cat/id").optionalArg(false).build();
+ 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).build();
Option bits = Option.builder("b").longOpt("bits").hasArg().argName("n").optionalArg(false).desc("What size of curve to use.").build();
Options testOpts = new Options();
testOpts.addOption(bits);
testOpts.addOption(namedCurve);
+ testOpts.addOption(curveName);
testOpts.addOption(Option.builder("gt").longOpt("kpg-type").desc("Set the KeyPairGenerator object [type].").hasArg().argName("type").optionalArg(false).build());
testOpts.addOption(Option.builder("kt").longOpt("ka-type").desc("Set the KeyAgreement object [type].").hasArg().argName("type").optionalArg(false).build());
testOpts.addOption(Option.builder("st").longOpt("sig-type").desc("Set the Signature object [type].").hasArg().argName("type").optionalArg(false).build());
@@ -146,6 +149,7 @@ public class ECTesterStandalone {
Options ecdhOpts = new Options();
ecdhOpts.addOption(bits);
ecdhOpts.addOption(namedCurve);
+ ecdhOpts.addOption(curveName);
ecdhOpts.addOption(Option.builder("t").longOpt("type").desc("Set KeyAgreement object [type].").hasArg().argName("type").optionalArg(false).build());
ecdhOpts.addOption(Option.builder("n").longOpt("amount").hasArg().argName("amount").optionalArg(false).desc("Do ECDH [amount] times.").build());
ParserOptions ecdh = new ParserOptions(new DefaultParser(), ecdhOpts);
@@ -154,6 +158,7 @@ public class ECTesterStandalone {
Options ecdsaOpts = new Options();
ecdsaOpts.addOption(bits);
ecdsaOpts.addOption(namedCurve);
+ ecdsaOpts.addOption(curveName);
ecdsaOpts.addOption(Option.builder("t").longOpt("type").desc("Set Signature object [type].").hasArg().argName("type").optionalArg(false).build());
ecdsaOpts.addOption(Option.builder("n").longOpt("amount").hasArg().argName("amount").optionalArg(false).desc("Do ECDSA [amount] times.").build());
ecdsaOpts.addOption(Option.builder("f").longOpt("file").hasArg().argName("file").optionalArg(false).desc("Input [file] to sign.").build());
@@ -163,6 +168,7 @@ public class ECTesterStandalone {
Options generateOpts = new Options();
generateOpts.addOption(bits);
generateOpts.addOption(namedCurve);
+ generateOpts.addOption(curveName);
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);
@@ -264,7 +270,11 @@ public class ECTesterStandalone {
}
spec = curve.toSpec();
kpg.initialize(spec);
- }//TODO: allow ECGenNamedSpec
+ } else if (cli.hasOption("ecdh.curve-name")) {
+ String curveName = cli.getOptionValue("ecdh.curve-name");
+ spec = new ECGenParameterSpec(curveName);
+ kpg.initialize(spec);
+ }
System.out.println("index;nanotime;pubW;privS;secret");
@@ -349,6 +359,9 @@ public class ECTesterStandalone {
return;
}
kpg.initialize(curve.toSpec());
+ } else if (cli.hasOption("ecdsa.curve-name")) {
+ String curveName = cli.getOptionValue("ecdsa.curve-name");
+ kpg.initialize(new ECGenParameterSpec(curveName));
}
System.out.println("index;data;signtime;verifytime;pubW;privS;signature;verified");
@@ -411,6 +424,9 @@ public class ECTesterStandalone {
return;
}
kpg.initialize(curve.toSpec());
+ } else if (cli.hasOption("generate.curve-name")) {
+ String curveName = cli.getOptionValue("generate.curve-name");
+ kpg.initialize(new ECGenParameterSpec(curveName));
}
System.out.println("index;nanotime;pubW;privS");
@@ -507,8 +523,11 @@ public class ECTesterStandalone {
}
String next = cli.getNextName();
- if (cli.hasOption(next + ".bits") && cli.hasOption(next + ".named-curve")) {
- System.err.println("You can only specify bitsize or a named curve, nor both.");
+ boolean hasBits = cli.hasOption(next + ".bits");
+ boolean hasNamedCurve = cli.hasOption(next + ".named-curve");
+ boolean hasCurveName = cli.hasOption(next + ".curve-name");
+ if (hasBits ^ hasNamedCurve ? hasCurveName : hasBits) {
+ System.err.println("You can only specify bitsize or a named curve/curve name, nor both.");
return false;
}
}
diff --git a/src/cz/crcs/ectester/standalone/test/KeyAgreementTestable.java b/src/cz/crcs/ectester/standalone/test/KeyAgreementTestable.java
index 8a635e0..aac2127 100644
--- a/src/cz/crcs/ectester/standalone/test/KeyAgreementTestable.java
+++ b/src/cz/crcs/ectester/standalone/test/KeyAgreementTestable.java
@@ -1,7 +1,6 @@
package cz.crcs.ectester.standalone.test;
import cz.crcs.ectester.common.test.BaseTestable;
-import cz.crcs.ectester.common.test.TestException;
import javax.crypto.KeyAgreement;
import java.security.InvalidAlgorithmParameterException;
@@ -71,54 +70,52 @@ public class KeyAgreementTestable extends BaseTestable {
@Override
public void run() {
- if (kgtPrivate != null) {
- privateKey = (ECPrivateKey) kgtPrivate.getKeyPair().getPrivate();
- }
+ try {
+ if (kgtPrivate != null) {
+ privateKey = (ECPrivateKey) kgtPrivate.getKeyPair().getPrivate();
+ }
- if (kgtPublic != null) {
- publicKey = (ECPublicKey) kgtPublic.getKeyPair().getPublic();
- }
+ if (kgtPublic != null) {
+ publicKey = (ECPublicKey) kgtPublic.getKeyPair().getPublic();
+ }
- try {
- if (spec != null) {
- ka.init(privateKey, spec);
- } else {
- ka.init(privateKey);
+ try {
+ if (spec != null) {
+ ka.init(privateKey, spec);
+ } else {
+ ka.init(privateKey);
+ }
+ } catch (InvalidKeyException | InvalidAlgorithmParameterException e) {
+ ok = false;
+ error = false;
+ hasRun = true;
+ return;
}
- } catch (InvalidKeyException | InvalidAlgorithmParameterException e) {
- ok = false;
- error = true;
- hasRun = true;
- return;
- }
- try {
- ka.doPhase(publicKey, true);
- } catch (IllegalStateException e) {
- ok = false;
- hasRun = true;
- return;
- } catch (InvalidKeyException e) {
- ok = false;
- error = true;
- hasRun = true;
- return;
- }
+ try {
+ ka.doPhase(publicKey, true);
+ } catch (IllegalStateException | InvalidKeyException e) {
+ ok = false;
+ error = false;
+ hasRun = true;
+ return;
+ }
- try {
- secret = ka.generateSecret();
- } catch (IllegalStateException isex) {
- ok = false;
- hasRun = true;
- return;
- } catch (UnsupportedOperationException uoe) {
+ try {
+ secret = ka.generateSecret();
+ } catch (IllegalStateException | UnsupportedOperationException isex) {
+ ok = false;
+ error = false;
+ hasRun = true;
+ return;
+ }
+
+ ok = true;
+ } catch (Exception ex) {
ok = false;
error = true;
- hasRun = false;
- return;
+ errorCause = ex;
}
-
- ok = true;
hasRun = true;
}
}