aboutsummaryrefslogtreecommitdiff
path: root/src
diff options
context:
space:
mode:
authorJ08nY2017-11-13 18:03:00 +0100
committerJ08nY2017-11-13 18:03:00 +0100
commitcccf2c9c382fa63c68a6c3821d587bc2caa72b05 (patch)
treec97b1ce7c3a81b0b2c23d6c36a2c22bef8056c2d /src
parent9e615b101398bd4c8e2678bf86337e2756a8ee7a (diff)
downloadECTester-cccf2c9c382fa63c68a6c3821d587bc2caa72b05.tar.gz
ECTester-cccf2c9c382fa63c68a6c3821d587bc2caa72b05.tar.zst
ECTester-cccf2c9c382fa63c68a6c3821d587bc2caa72b05.zip
Diffstat (limited to 'src')
-rw-r--r--src/cz/crcs/ectester/common/test/TestCallback.java11
-rw-r--r--src/cz/crcs/ectester/reader/output/TextTestWriter.java6
-rw-r--r--src/cz/crcs/ectester/reader/output/XMLTestWriter.java6
-rw-r--r--src/cz/crcs/ectester/reader/output/YAMLTestWriter.java6
-rw-r--r--src/cz/crcs/ectester/reader/test/CommandTest.java (renamed from src/cz/crcs/ectester/reader/test/SimpleTest.java)8
-rw-r--r--src/cz/crcs/ectester/reader/test/CompositeCurvesSuite.java10
-rw-r--r--src/cz/crcs/ectester/reader/test/DefaultSuite.java8
-rw-r--r--src/cz/crcs/ectester/reader/test/InvalidCurvesSuite.java10
-rw-r--r--src/cz/crcs/ectester/reader/test/TestSuite.java22
-rw-r--r--src/cz/crcs/ectester/reader/test/TestVectorSuite.java12
-rw-r--r--src/cz/crcs/ectester/standalone/consts/Ident.java13
-rw-r--r--src/cz/crcs/ectester/standalone/consts/KeyAgreementIdent.java11
-rw-r--r--src/cz/crcs/ectester/standalone/consts/SignatureIdent.java11
-rw-r--r--src/cz/crcs/ectester/standalone/test/KeyAgreementTest.java55
-rw-r--r--src/cz/crcs/ectester/standalone/test/KeyAgreementTestable.java80
-rw-r--r--src/cz/crcs/ectester/standalone/test/KeyGenerationTest.java19
-rw-r--r--src/cz/crcs/ectester/standalone/test/SignatureTest.java19
17 files changed, 256 insertions, 51 deletions
diff --git a/src/cz/crcs/ectester/common/test/TestCallback.java b/src/cz/crcs/ectester/common/test/TestCallback.java
new file mode 100644
index 0000000..488e2f2
--- /dev/null
+++ b/src/cz/crcs/ectester/common/test/TestCallback.java
@@ -0,0 +1,11 @@
+package cz.crcs.ectester.common.test;
+
+import java.util.function.Function;
+
+/**
+ *
+ * @param <T>
+ */
+public abstract class TestCallback<T extends Testable> implements Function<T, Result> {
+
+}
diff --git a/src/cz/crcs/ectester/reader/output/TextTestWriter.java b/src/cz/crcs/ectester/reader/output/TextTestWriter.java
index 07b2a2f..dc285b5 100644
--- a/src/cz/crcs/ectester/reader/output/TextTestWriter.java
+++ b/src/cz/crcs/ectester/reader/output/TextTestWriter.java
@@ -2,7 +2,7 @@ package cz.crcs.ectester.reader.output;
import cz.crcs.ectester.common.test.CompoundTest;
import cz.crcs.ectester.common.test.Test;
-import cz.crcs.ectester.reader.test.SimpleTest;
+import cz.crcs.ectester.reader.test.CommandTest;
import cz.crcs.ectester.reader.test.TestSuite;
import java.io.PrintStream;
@@ -33,8 +33,8 @@ public class TextTestWriter implements TestWriter {
}
StringBuilder out = new StringBuilder();
- if (t instanceof SimpleTest) {
- SimpleTest test = (SimpleTest) t;
+ if (t instanceof CommandTest) {
+ CommandTest test = (CommandTest) t;
out.append(test.ok() ? "OK " : "NOK ");
out.append("━ ");
int width = BASE_WIDTH - (offset + out.length());
diff --git a/src/cz/crcs/ectester/reader/output/XMLTestWriter.java b/src/cz/crcs/ectester/reader/output/XMLTestWriter.java
index 24a308c..0a5155b 100644
--- a/src/cz/crcs/ectester/reader/output/XMLTestWriter.java
+++ b/src/cz/crcs/ectester/reader/output/XMLTestWriter.java
@@ -5,7 +5,7 @@ import cz.crcs.ectester.common.Util;
import cz.crcs.ectester.reader.command.Command;
import cz.crcs.ectester.reader.response.Response;
import cz.crcs.ectester.common.test.Test;
-import cz.crcs.ectester.reader.test.SimpleTest;
+import cz.crcs.ectester.reader.test.CommandTest;
import cz.crcs.ectester.reader.test.TestSuite;
import org.w3c.dom.Document;
import org.w3c.dom.Element;
@@ -91,8 +91,8 @@ public class XMLTestWriter implements TestWriter {
private Element testElement(Test t) {
Element testElem = doc.createElement("test");
- if (t instanceof SimpleTest) {
- SimpleTest test = (SimpleTest) t;
+ if (t instanceof CommandTest) {
+ CommandTest test = (CommandTest) t;
testElem.setAttribute("type", "simple");
testElem.appendChild(commandElement(test.getCommand()));
testElem.appendChild(responseElement(test.getResponse()));
diff --git a/src/cz/crcs/ectester/reader/output/YAMLTestWriter.java b/src/cz/crcs/ectester/reader/output/YAMLTestWriter.java
index c637a13..84f1eac 100644
--- a/src/cz/crcs/ectester/reader/output/YAMLTestWriter.java
+++ b/src/cz/crcs/ectester/reader/output/YAMLTestWriter.java
@@ -5,7 +5,7 @@ import cz.crcs.ectester.common.Util;
import cz.crcs.ectester.reader.command.Command;
import cz.crcs.ectester.reader.response.Response;
import cz.crcs.ectester.common.test.Test;
-import cz.crcs.ectester.reader.test.SimpleTest;
+import cz.crcs.ectester.reader.test.CommandTest;
import cz.crcs.ectester.reader.test.TestSuite;
import org.yaml.snakeyaml.DumperOptions;
import org.yaml.snakeyaml.Yaml;
@@ -66,8 +66,8 @@ public class YAMLTestWriter implements TestWriter {
private Map<String, Object> testObject(Test t) {
Map<String, Object> testObj = new HashMap<>();
- if (t instanceof SimpleTest) {
- SimpleTest test = (SimpleTest) t;
+ if (t instanceof CommandTest) {
+ CommandTest test = (CommandTest) t;
testObj.put("type", "simple");
testObj.put("command", commandObject(test.getCommand()));
testObj.put("response", responseObject(test.getResponse()));
diff --git a/src/cz/crcs/ectester/reader/test/SimpleTest.java b/src/cz/crcs/ectester/reader/test/CommandTest.java
index 067f43e..b7728b6 100644
--- a/src/cz/crcs/ectester/reader/test/SimpleTest.java
+++ b/src/cz/crcs/ectester/reader/test/CommandTest.java
@@ -13,24 +13,24 @@ import java.util.function.BiFunction;
* A simple test that runs one Command to get and evaluate one Response
* to get a Result and compare it with the expected one.
*/
-public class SimpleTest extends Test {
+public class CommandTest extends Test {
private BiFunction<Command, Response, Result> callback;
private Command command;
private Response response;
- public SimpleTest(Command command, BiFunction<Command, Response, Result> callback) {
+ public CommandTest(Command command, BiFunction<Command, Response, Result> callback) {
this.command = command;
this.callback = callback;
}
- public SimpleTest(Command command, Result.ExpectedValue expected, String ok, String nok) {
+ public CommandTest(Command command, Result.ExpectedValue expected, String ok, String nok) {
this(command, (cmd, resp) -> {
Result.Value resultValue = Result.Value.fromExpected(expected, resp.successful(), resp.error());
return new Result(resultValue, resultValue.ok() ? ok : nok);
});
}
- public SimpleTest(Command command, Result.ExpectedValue expected) {
+ public CommandTest(Command command, Result.ExpectedValue expected) {
this(command, expected, null, null);
}
diff --git a/src/cz/crcs/ectester/reader/test/CompositeCurvesSuite.java b/src/cz/crcs/ectester/reader/test/CompositeCurvesSuite.java
index 2e711a2..77df7d6 100644
--- a/src/cz/crcs/ectester/reader/test/CompositeCurvesSuite.java
+++ b/src/cz/crcs/ectester/reader/test/CompositeCurvesSuite.java
@@ -41,12 +41,12 @@ public class CompositeCurvesSuite extends TestSuite {
continue;
}
if ((curve.getBits() == cfg.bits || cfg.all)) {
- tests.add(new SimpleTest(new Command.Allocate(cardManager, ECTesterApplet.KEYPAIR_BOTH, curve.getBits(), curve.getField()), ExpectedValue.SUCCESS));
- tests.add(new SimpleTest(new Command.Set(cardManager, ECTesterApplet.KEYPAIR_BOTH, EC_Consts.CURVE_external, curve.getParams(), curve.flatten()), ExpectedValue.ANY));
- tests.add(new SimpleTest(new Command.Generate(cardManager, ECTesterApplet.KEYPAIR_LOCAL), ExpectedValue.ANY));
+ tests.add(new CommandTest(new Command.Allocate(cardManager, ECTesterApplet.KEYPAIR_BOTH, curve.getBits(), curve.getField()), ExpectedValue.SUCCESS));
+ tests.add(new CommandTest(new Command.Set(cardManager, ECTesterApplet.KEYPAIR_BOTH, EC_Consts.CURVE_external, curve.getParams(), curve.flatten()), ExpectedValue.ANY));
+ tests.add(new CommandTest(new Command.Generate(cardManager, ECTesterApplet.KEYPAIR_LOCAL), ExpectedValue.ANY));
Command ecdhCommand = new Command.ECDH_direct(cardManager, ECTesterApplet.KEYPAIR_LOCAL, ECTesterApplet.EXPORT_FALSE, EC_Consts.CORRUPTION_NONE, EC_Consts.KA_ECDH, key.flatten());
- tests.add(new SimpleTest(ecdhCommand, ExpectedValue.FAILURE, "Card correctly rejected to do ECDH over a composite order curve.", "Card incorrectly does ECDH over a composite order curve, leaks bits of private key."));
- tests.add(new SimpleTest(new Command.Cleanup(cardManager), ExpectedValue.ANY));
+ tests.add(new CommandTest(ecdhCommand, ExpectedValue.FAILURE, "Card correctly rejected to do ECDH over a composite order curve.", "Card incorrectly does ECDH over a composite order curve, leaks bits of private key."));
+ tests.add(new CommandTest(new Command.Cleanup(cardManager), ExpectedValue.ANY));
}
}
}
diff --git a/src/cz/crcs/ectester/reader/test/DefaultSuite.java b/src/cz/crcs/ectester/reader/test/DefaultSuite.java
index fb8fdab..0e25312 100644
--- a/src/cz/crcs/ectester/reader/test/DefaultSuite.java
+++ b/src/cz/crcs/ectester/reader/test/DefaultSuite.java
@@ -23,7 +23,7 @@ public class DefaultSuite extends TestSuite {
@Override
public void setup(CardMngr cardManager) throws IOException {
- tests.add(new SimpleTest(new Command.Support(cardManager), ExpectedValue.ANY));
+ tests.add(new CommandTest(new Command.Support(cardManager), ExpectedValue.ANY));
if (cfg.namedCurve != null) {
String desc = "Default tests over the " + cfg.namedCurve + " curve category.";
if (cfg.primeField) {
@@ -59,11 +59,11 @@ public class DefaultSuite extends TestSuite {
}
private void defaultTests(CardMngr cardManager, short keyLength, byte keyType) throws IOException {
- tests.add(new SimpleTest(new Command.Allocate(cardManager, ECTesterApplet.KEYPAIR_BOTH, keyLength, keyType), ExpectedValue.SUCCESS));
+ tests.add(new CommandTest(new Command.Allocate(cardManager, ECTesterApplet.KEYPAIR_BOTH, keyLength, keyType), ExpectedValue.SUCCESS));
Command curve = Command.prepareCurve(cardManager, dataStore, cfg, ECTesterApplet.KEYPAIR_BOTH, keyLength, keyType);
if (curve != null)
- tests.add(new SimpleTest(curve, ExpectedValue.SUCCESS));
+ tests.add(new CommandTest(curve, ExpectedValue.SUCCESS));
tests.add(defaultCurveTests(cardManager, ExpectedValue.SUCCESS, ExpectedValue.SUCCESS, ExpectedValue.ANY, ExpectedValue.SUCCESS, "Default tests."));
- tests.add(new SimpleTest(new Command.Cleanup(cardManager), ExpectedValue.ANY));
+ tests.add(new CommandTest(new Command.Cleanup(cardManager), ExpectedValue.ANY));
}
}
diff --git a/src/cz/crcs/ectester/reader/test/InvalidCurvesSuite.java b/src/cz/crcs/ectester/reader/test/InvalidCurvesSuite.java
index 1f71ad5..e4afb5d 100644
--- a/src/cz/crcs/ectester/reader/test/InvalidCurvesSuite.java
+++ b/src/cz/crcs/ectester/reader/test/InvalidCurvesSuite.java
@@ -55,16 +55,16 @@ public class InvalidCurvesSuite extends TestSuite {
EC_Curve curve = e.getKey();
List<EC_Key.Public> keys = e.getValue();
- tests.add(new SimpleTest(new Command.Allocate(cardManager, ECTesterApplet.KEYPAIR_BOTH, curve.getBits(), curve.getField()), ExpectedValue.SUCCESS));
- tests.add(new SimpleTest(new Command.Set(cardManager, ECTesterApplet.KEYPAIR_BOTH, EC_Consts.CURVE_external, curve.getParams(), curve.flatten()), ExpectedValue.SUCCESS));
- tests.add(new SimpleTest(new Command.Generate(cardManager, ECTesterApplet.KEYPAIR_LOCAL), ExpectedValue.SUCCESS));
+ tests.add(new CommandTest(new Command.Allocate(cardManager, ECTesterApplet.KEYPAIR_BOTH, curve.getBits(), curve.getField()), ExpectedValue.SUCCESS));
+ tests.add(new CommandTest(new Command.Set(cardManager, ECTesterApplet.KEYPAIR_BOTH, EC_Consts.CURVE_external, curve.getParams(), curve.flatten()), ExpectedValue.SUCCESS));
+ tests.add(new CommandTest(new Command.Generate(cardManager, ECTesterApplet.KEYPAIR_LOCAL), ExpectedValue.SUCCESS));
List<Test> ecdhTests = new LinkedList<>();
for (EC_Key.Public pub : keys) {
Command ecdhCommand = new Command.ECDH_direct(cardManager, ECTesterApplet.KEYPAIR_LOCAL, ECTesterApplet.EXPORT_FALSE, EC_Consts.CORRUPTION_NONE, EC_Consts.KA_ANY, pub.flatten());
- ecdhTests.add(new SimpleTest(ecdhCommand, ExpectedValue.FAILURE, "Card correctly rejected point on invalid curve." , "Card incorrectly accepted point on invalid curve."));
+ ecdhTests.add(new CommandTest(ecdhCommand, ExpectedValue.FAILURE, "Card correctly rejected point on invalid curve." , "Card incorrectly accepted point on invalid curve."));
}
tests.add(CompoundTest.all(ExpectedValue.SUCCESS, "Invalid curve test of " + curve.getId(), ecdhTests.toArray(new Test[0])));
- tests.add(new SimpleTest(new Command.Cleanup(cardManager), ExpectedValue.ANY));
+ tests.add(new CommandTest(new Command.Cleanup(cardManager), ExpectedValue.ANY));
}
}
}
diff --git a/src/cz/crcs/ectester/reader/test/TestSuite.java b/src/cz/crcs/ectester/reader/test/TestSuite.java
index dc8167b..034f579 100644
--- a/src/cz/crcs/ectester/reader/test/TestSuite.java
+++ b/src/cz/crcs/ectester/reader/test/TestSuite.java
@@ -64,14 +64,14 @@ public abstract class TestSuite {
Test defaultCurveTests(CardMngr cardManager, ExpectedValue generateExpected, ExpectedValue ecdhExpected, ExpectedValue ecdhCompressExpected, ExpectedValue ecdsaExpected, String description) {
List<Test> tests = new LinkedList<>();
- tests.add(new SimpleTest(new Command.Generate(cardManager, ECTesterApplet.KEYPAIR_BOTH), generateExpected));
- tests.add(new SimpleTest(new Command.ECDH(cardManager, ECTesterApplet.KEYPAIR_LOCAL, ECTesterApplet.KEYPAIR_REMOTE, ECTesterApplet.EXPORT_FALSE, EC_Consts.CORRUPTION_NONE, EC_Consts.KA_ECDH), ecdhExpected));
- tests.add(new SimpleTest(new Command.ECDH(cardManager, ECTesterApplet.KEYPAIR_LOCAL, ECTesterApplet.KEYPAIR_REMOTE, ECTesterApplet.EXPORT_FALSE, EC_Consts.CORRUPTION_COMPRESS, EC_Consts.KA_ECDH), ecdhExpected));
- tests.add(new SimpleTest(new Command.ECDH(cardManager, ECTesterApplet.KEYPAIR_LOCAL, ECTesterApplet.KEYPAIR_REMOTE, ECTesterApplet.EXPORT_FALSE, EC_Consts.CORRUPTION_ONE, EC_Consts.KA_ECDH), ExpectedValue.FAILURE));
- tests.add(new SimpleTest(new Command.ECDH(cardManager, ECTesterApplet.KEYPAIR_LOCAL, ECTesterApplet.KEYPAIR_REMOTE, ECTesterApplet.EXPORT_FALSE, EC_Consts.CORRUPTION_ZERO, EC_Consts.KA_ECDH), ExpectedValue.FAILURE));
- tests.add(new SimpleTest(new Command.ECDH(cardManager, ECTesterApplet.KEYPAIR_LOCAL, ECTesterApplet.KEYPAIR_REMOTE, ECTesterApplet.EXPORT_FALSE, EC_Consts.CORRUPTION_MAX, EC_Consts.KA_ECDH), ExpectedValue.FAILURE));
- tests.add(new SimpleTest(new Command.ECDH(cardManager, ECTesterApplet.KEYPAIR_LOCAL, ECTesterApplet.KEYPAIR_REMOTE, ECTesterApplet.EXPORT_FALSE, EC_Consts.CORRUPTION_FULLRANDOM, EC_Consts.KA_ECDH), ExpectedValue.FAILURE));
- tests.add(new SimpleTest(new Command.ECDSA(cardManager, ECTesterApplet.KEYPAIR_LOCAL, ECTesterApplet.EXPORT_FALSE, null), ecdsaExpected));
+ tests.add(new CommandTest(new Command.Generate(cardManager, ECTesterApplet.KEYPAIR_BOTH), generateExpected));
+ tests.add(new CommandTest(new Command.ECDH(cardManager, ECTesterApplet.KEYPAIR_LOCAL, ECTesterApplet.KEYPAIR_REMOTE, ECTesterApplet.EXPORT_FALSE, EC_Consts.CORRUPTION_NONE, EC_Consts.KA_ECDH), ecdhExpected));
+ tests.add(new CommandTest(new Command.ECDH(cardManager, ECTesterApplet.KEYPAIR_LOCAL, ECTesterApplet.KEYPAIR_REMOTE, ECTesterApplet.EXPORT_FALSE, EC_Consts.CORRUPTION_COMPRESS, EC_Consts.KA_ECDH), ecdhExpected));
+ tests.add(new CommandTest(new Command.ECDH(cardManager, ECTesterApplet.KEYPAIR_LOCAL, ECTesterApplet.KEYPAIR_REMOTE, ECTesterApplet.EXPORT_FALSE, EC_Consts.CORRUPTION_ONE, EC_Consts.KA_ECDH), ExpectedValue.FAILURE));
+ tests.add(new CommandTest(new Command.ECDH(cardManager, ECTesterApplet.KEYPAIR_LOCAL, ECTesterApplet.KEYPAIR_REMOTE, ECTesterApplet.EXPORT_FALSE, EC_Consts.CORRUPTION_ZERO, EC_Consts.KA_ECDH), ExpectedValue.FAILURE));
+ tests.add(new CommandTest(new Command.ECDH(cardManager, ECTesterApplet.KEYPAIR_LOCAL, ECTesterApplet.KEYPAIR_REMOTE, ECTesterApplet.EXPORT_FALSE, EC_Consts.CORRUPTION_MAX, EC_Consts.KA_ECDH), ExpectedValue.FAILURE));
+ tests.add(new CommandTest(new Command.ECDH(cardManager, ECTesterApplet.KEYPAIR_LOCAL, ECTesterApplet.KEYPAIR_REMOTE, ECTesterApplet.EXPORT_FALSE, EC_Consts.CORRUPTION_FULLRANDOM, EC_Consts.KA_ECDH), ExpectedValue.FAILURE));
+ tests.add(new CommandTest(new Command.ECDSA(cardManager, ECTesterApplet.KEYPAIR_LOCAL, ECTesterApplet.EXPORT_FALSE, null), ecdsaExpected));
return CompoundTest.function((testArray) -> {
Function<ExpectedValue, String> shouldHave = (expected) -> {
@@ -126,10 +126,10 @@ public abstract class TestSuite {
for (Map.Entry<String, EC_Curve> entry : curves.entrySet()) {
EC_Curve curve = entry.getValue();
if (curve.getField() == field && (curve.getBits() == cfg.bits || cfg.all)) {
- tests.add(new SimpleTest(new Command.Allocate(cardManager, ECTesterApplet.KEYPAIR_BOTH, curve.getBits(), field), ExpectedValue.SUCCESS));
- tests.add(new SimpleTest(new Command.Set(cardManager, ECTesterApplet.KEYPAIR_BOTH, EC_Consts.CURVE_external, curve.getParams(), curve.flatten()), setExpected));
+ tests.add(new CommandTest(new Command.Allocate(cardManager, ECTesterApplet.KEYPAIR_BOTH, curve.getBits(), field), ExpectedValue.SUCCESS));
+ tests.add(new CommandTest(new Command.Set(cardManager, ECTesterApplet.KEYPAIR_BOTH, EC_Consts.CURVE_external, curve.getParams(), curve.flatten()), setExpected));
tests.add(defaultCurveTests(cardManager, generateExpected, ecdhExpected, ecdhCompressedExpected, ecdsaExpected, description));
- tests.add(new SimpleTest(new Command.Cleanup(cardManager), ExpectedValue.ANY));
+ tests.add(new CommandTest(new Command.Cleanup(cardManager), ExpectedValue.ANY));
}
}
diff --git a/src/cz/crcs/ectester/reader/test/TestVectorSuite.java b/src/cz/crcs/ectester/reader/test/TestVectorSuite.java
index 3f11a79..77653d1 100644
--- a/src/cz/crcs/ectester/reader/test/TestVectorSuite.java
+++ b/src/cz/crcs/ectester/reader/test/TestVectorSuite.java
@@ -61,12 +61,12 @@ public class TestVectorSuite extends TestSuite {
}
List<Test> testVector = new LinkedList<>();
- testVector.add(new SimpleTest(new Command.Allocate(cardManager, ECTesterApplet.KEYPAIR_BOTH, curve.getBits(), curve.getField()), ExpectedValue.SUCCESS));
- testVector.add(new SimpleTest(new Command.Set(cardManager, ECTesterApplet.KEYPAIR_BOTH, EC_Consts.CURVE_external, curve.getParams(), curve.flatten()), ExpectedValue.SUCCESS));
+ testVector.add(new CommandTest(new Command.Allocate(cardManager, ECTesterApplet.KEYPAIR_BOTH, curve.getBits(), curve.getField()), ExpectedValue.SUCCESS));
+ testVector.add(new CommandTest(new Command.Set(cardManager, ECTesterApplet.KEYPAIR_BOTH, EC_Consts.CURVE_external, curve.getParams(), curve.flatten()), ExpectedValue.SUCCESS));
//tests.add(new Test.Simple(new Command.Generate(cardManager, ECTesterApplet.KEYPAIR_BOTH), ExpectedValue.SUCCESS));
- testVector.add(new SimpleTest(new Command.Set(cardManager, ECTesterApplet.KEYPAIR_LOCAL, EC_Consts.CURVE_external, EC_Consts.PARAMETER_S, onekey.flatten(EC_Consts.PARAMETER_S)), ExpectedValue.SUCCESS));
- testVector.add(new SimpleTest(new Command.Set(cardManager, ECTesterApplet.KEYPAIR_REMOTE, EC_Consts.CURVE_external, EC_Consts.PARAMETER_W, otherkey.flatten(EC_Consts.PARAMETER_W)), ExpectedValue.SUCCESS));
- testVector.add(new SimpleTest(new Command.ECDH(cardManager, ECTesterApplet.KEYPAIR_REMOTE, ECTesterApplet.KEYPAIR_LOCAL, ECTesterApplet.EXPORT_TRUE, EC_Consts.CORRUPTION_NONE, result.getKA()), (command, response) -> {
+ testVector.add(new CommandTest(new Command.Set(cardManager, ECTesterApplet.KEYPAIR_LOCAL, EC_Consts.CURVE_external, EC_Consts.PARAMETER_S, onekey.flatten(EC_Consts.PARAMETER_S)), ExpectedValue.SUCCESS));
+ testVector.add(new CommandTest(new Command.Set(cardManager, ECTesterApplet.KEYPAIR_REMOTE, EC_Consts.CURVE_external, EC_Consts.PARAMETER_W, otherkey.flatten(EC_Consts.PARAMETER_W)), ExpectedValue.SUCCESS));
+ testVector.add(new CommandTest(new Command.ECDH(cardManager, ECTesterApplet.KEYPAIR_REMOTE, ECTesterApplet.KEYPAIR_LOCAL, ECTesterApplet.EXPORT_TRUE, EC_Consts.CORRUPTION_NONE, result.getKA()), (command, response) -> {
Response.ECDH dh = (Response.ECDH) response;
if (!dh.successful())
return new Result(Value.FAILURE, "ECDH was unsuccessful.");
@@ -79,7 +79,7 @@ public class TestVectorSuite extends TestSuite {
return new Result(Value.SUCCESS);
}));
tests.add(CompoundTest.all(ExpectedValue.SUCCESS, "Test vector " + result.getId(), testVector.toArray(new Test[0])));
- tests.add(new SimpleTest(new Command.Cleanup(cardManager), ExpectedValue.ANY));
+ tests.add(new CommandTest(new Command.Cleanup(cardManager), ExpectedValue.ANY));
}
}
diff --git a/src/cz/crcs/ectester/standalone/consts/Ident.java b/src/cz/crcs/ectester/standalone/consts/Ident.java
index 3228c37..eaea0e3 100644
--- a/src/cz/crcs/ectester/standalone/consts/Ident.java
+++ b/src/cz/crcs/ectester/standalone/consts/Ident.java
@@ -6,11 +6,18 @@ import java.util.Set;
import java.util.TreeSet;
public abstract class Ident {
- private Set<String> idents;
+ Set<String> idents;
+ String name;
- public Ident(String... names) {
+ public Ident(String name, String... aliases) {
+ this.name = name;
this.idents = new TreeSet<>(String.CASE_INSENSITIVE_ORDER);
- this.idents.addAll(Arrays.asList(names));
+ this.idents.add(name);
+ this.idents.addAll(Arrays.asList(aliases));
+ }
+
+ public String getName() {
+ return name;
}
public Set<String> getIdents() {
diff --git a/src/cz/crcs/ectester/standalone/consts/KeyAgreementIdent.java b/src/cz/crcs/ectester/standalone/consts/KeyAgreementIdent.java
index 9dc9797..22b03a4 100644
--- a/src/cz/crcs/ectester/standalone/consts/KeyAgreementIdent.java
+++ b/src/cz/crcs/ectester/standalone/consts/KeyAgreementIdent.java
@@ -1,5 +1,8 @@
package cz.crcs.ectester.standalone.consts;
+import javax.crypto.KeyAgreement;
+import java.security.NoSuchAlgorithmException;
+import java.security.Provider;
import java.util.LinkedList;
import java.util.List;
@@ -47,7 +50,11 @@ public class KeyAgreementIdent extends Ident {
return null;
}
- private KeyAgreementIdent(String... names) {
- super(names);
+ private KeyAgreementIdent(String name, String... aliases) {
+ super(name, aliases);
+ }
+
+ public KeyAgreement getInstance(Provider provider) throws NoSuchAlgorithmException {
+ return KeyAgreement.getInstance(name, provider);
}
}
diff --git a/src/cz/crcs/ectester/standalone/consts/SignatureIdent.java b/src/cz/crcs/ectester/standalone/consts/SignatureIdent.java
index b41e9e4..dc554e2 100644
--- a/src/cz/crcs/ectester/standalone/consts/SignatureIdent.java
+++ b/src/cz/crcs/ectester/standalone/consts/SignatureIdent.java
@@ -1,5 +1,8 @@
package cz.crcs.ectester.standalone.consts;
+import java.security.NoSuchAlgorithmException;
+import java.security.Provider;
+import java.security.Signature;
import java.util.LinkedList;
import java.util.List;
@@ -71,7 +74,11 @@ public class SignatureIdent extends Ident {
return null;
}
- private SignatureIdent(String... names) {
- super(names);
+ private SignatureIdent(String name, String... aliases) {
+ super(name, aliases);
+ }
+
+ public Signature getInstance(Provider provider) throws NoSuchAlgorithmException {
+ return Signature.getInstance(name, provider);
}
}
diff --git a/src/cz/crcs/ectester/standalone/test/KeyAgreementTest.java b/src/cz/crcs/ectester/standalone/test/KeyAgreementTest.java
new file mode 100644
index 0000000..9c761fa
--- /dev/null
+++ b/src/cz/crcs/ectester/standalone/test/KeyAgreementTest.java
@@ -0,0 +1,55 @@
+package cz.crcs.ectester.standalone.test;
+
+import cz.crcs.ectester.common.test.Result;
+import cz.crcs.ectester.common.test.Test;
+import cz.crcs.ectester.common.test.TestCallback;
+import cz.crcs.ectester.common.test.TestException;
+
+import java.util.Arrays;
+
+/**
+ * @author Jan Jancar johny@neuromancer.sk
+ */
+public class KeyAgreementTest extends Test {
+ private KeyAgreementTestable ka;
+ private TestCallback<KeyAgreementTestable> callback;
+
+ private KeyAgreementTest(KeyAgreementTestable ka, TestCallback<KeyAgreementTestable> callback) {
+ this.ka = ka;
+ this.callback = callback;
+ }
+
+ public static KeyAgreementTest match(KeyAgreementTestable ka, byte[] expectedSecret) {
+ return new KeyAgreementTest(ka, new TestCallback<KeyAgreementTestable>() {
+ @Override
+ public Result apply(KeyAgreementTestable ka) {
+ if (Arrays.equals(ka.getSecret(), expectedSecret)) {
+ return new Result(Result.Value.SUCCESS);
+ } else {
+ return new Result(Result.Value.FAILURE);
+ }
+ }
+ });
+ }
+
+ public static KeyAgreementTest expect(KeyAgreementTestable ka, Result.ExpectedValue expected) {
+ return new KeyAgreementTest(ka, new TestCallback<KeyAgreementTestable>() {
+ @Override
+ public Result apply(KeyAgreementTestable keyAgreementTestable) {
+ return new Result(Result.Value.fromExpected(expected, keyAgreementTestable.ok(), keyAgreementTestable.error()));
+ }
+ });
+ }
+
+ @Override
+ public String getDescription() {
+ return null;
+ }
+
+ @Override
+ public void run() throws TestException {
+ ka.run();
+ result = callback.apply(ka);
+ hasRun = true;
+ }
+}
diff --git a/src/cz/crcs/ectester/standalone/test/KeyAgreementTestable.java b/src/cz/crcs/ectester/standalone/test/KeyAgreementTestable.java
new file mode 100644
index 0000000..51c295c
--- /dev/null
+++ b/src/cz/crcs/ectester/standalone/test/KeyAgreementTestable.java
@@ -0,0 +1,80 @@
+package cz.crcs.ectester.standalone.test;
+
+import cz.crcs.ectester.common.test.TestException;
+import cz.crcs.ectester.common.test.Testable;
+
+import javax.crypto.KeyAgreement;
+import java.security.InvalidKeyException;
+import java.security.interfaces.ECPrivateKey;
+import java.security.interfaces.ECPublicKey;
+
+/**
+ * @author Jan Jancar johny@neuromancer.sk
+ */
+public class KeyAgreementTestable implements Testable {
+ private KeyAgreement ka;
+ private ECPrivateKey privateKey;
+ private ECPublicKey publicKey;
+ private byte[] secret;
+ private boolean hasRun;
+ private boolean error;
+ private boolean ok;
+
+ public KeyAgreementTestable(KeyAgreement ka, ECPrivateKey privateKey, ECPublicKey publicKey) {
+ this.ka = ka;
+ this.privateKey = privateKey;
+ this.publicKey = publicKey;
+ }
+
+ public byte[] getSecret() {
+ if (!hasRun) {
+ return null;
+ }
+ return secret;
+ }
+
+ @Override
+ public boolean hasRun() {
+ return hasRun;
+ }
+
+ @Override
+ public void run() throws TestException {
+ try {
+ ka.init(privateKey);
+ } catch (InvalidKeyException ikex) {
+ throw new TestException(ikex);
+ }
+
+ try {
+ ka.doPhase(publicKey, true);
+ } catch (InvalidKeyException ikex) {
+ throw new TestException(ikex);
+ } catch (IllegalStateException isex) {
+ error = true;
+ ok = false;
+ hasRun = true;
+ return;
+ }
+
+ try {
+ secret = ka.generateSecret();
+ } catch (IllegalStateException isex) {
+ error = true;
+ ok = false;
+ hasRun = true;
+ return;
+ }
+ ok = true;
+ }
+
+ @Override
+ public boolean ok() {
+ return ok;
+ }
+
+ @Override
+ public boolean error() {
+ return error;
+ }
+}
diff --git a/src/cz/crcs/ectester/standalone/test/KeyGenerationTest.java b/src/cz/crcs/ectester/standalone/test/KeyGenerationTest.java
new file mode 100644
index 0000000..7a96ba1
--- /dev/null
+++ b/src/cz/crcs/ectester/standalone/test/KeyGenerationTest.java
@@ -0,0 +1,19 @@
+package cz.crcs.ectester.standalone.test;
+
+import cz.crcs.ectester.common.test.Test;
+import cz.crcs.ectester.common.test.TestException;
+
+/**
+ * @author Jan Jancar johny@neuromancer.sk
+ */
+public class KeyGenerationTest extends Test {
+ @Override
+ public String getDescription() {
+ return null;
+ }
+
+ @Override
+ public void run() throws TestException {
+
+ }
+}
diff --git a/src/cz/crcs/ectester/standalone/test/SignatureTest.java b/src/cz/crcs/ectester/standalone/test/SignatureTest.java
new file mode 100644
index 0000000..2102db0
--- /dev/null
+++ b/src/cz/crcs/ectester/standalone/test/SignatureTest.java
@@ -0,0 +1,19 @@
+package cz.crcs.ectester.standalone.test;
+
+import cz.crcs.ectester.common.test.Test;
+import cz.crcs.ectester.common.test.TestException;
+
+/**
+ * @author Jan Jancar johny@neuromancer.sk
+ */
+public class SignatureTest extends Test {
+ @Override
+ public String getDescription() {
+ return null;
+ }
+
+ @Override
+ public void run() throws TestException {
+
+ }
+}