summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--src/cz/crcs/ectester/reader/output/ResponseWriter.java2
-rw-r--r--src/cz/crcs/ectester/reader/output/TextTestWriter.java50
-rw-r--r--src/cz/crcs/ectester/reader/output/XMLTestWriter.java3
-rw-r--r--src/cz/crcs/ectester/reader/output/YAMLTestWriter.java3
-rw-r--r--src/cz/crcs/ectester/reader/test/CompositeCurvesSuite.java12
-rw-r--r--src/cz/crcs/ectester/reader/test/DefaultSuite.java16
-rw-r--r--src/cz/crcs/ectester/reader/test/InvalidCurvesSuite.java14
-rw-r--r--src/cz/crcs/ectester/reader/test/Result.java33
-rw-r--r--src/cz/crcs/ectester/reader/test/Test.java38
-rw-r--r--src/cz/crcs/ectester/reader/test/TestSuite.java39
-rw-r--r--src/cz/crcs/ectester/reader/test/TestVectorSuite.java25
-rw-r--r--src/cz/crcs/ectester/reader/test/WrongCurvesSuite.java6
12 files changed, 157 insertions, 84 deletions
diff --git a/src/cz/crcs/ectester/reader/output/ResponseWriter.java b/src/cz/crcs/ectester/reader/output/ResponseWriter.java
index ee5d652..0f932e7 100644
--- a/src/cz/crcs/ectester/reader/output/ResponseWriter.java
+++ b/src/cz/crcs/ectester/reader/output/ResponseWriter.java
@@ -26,7 +26,7 @@ public class ResponseWriter {
if (suffix.length() == 0) {
suffix.append(" [").append(Util.getSW(r.getNaturalSW())).append("]");
}
- return String.format("%4d ms : %s", r.getDuration() / 1000000, suffix);
+ return String.format("%4d ms ┃ %s", r.getDuration() / 1000000, suffix);
}
public void outputResponse(Response r) {
diff --git a/src/cz/crcs/ectester/reader/output/TextTestWriter.java b/src/cz/crcs/ectester/reader/output/TextTestWriter.java
index dedefe6..d697761 100644
--- a/src/cz/crcs/ectester/reader/output/TextTestWriter.java
+++ b/src/cz/crcs/ectester/reader/output/TextTestWriter.java
@@ -1,7 +1,6 @@
package cz.crcs.ectester.reader.output;
import cz.crcs.ectester.reader.test.Test;
-import cz.crcs.ectester.reader.test.Result;
import cz.crcs.ectester.reader.test.TestSuite;
import java.io.PrintStream;
@@ -13,6 +12,8 @@ public class TextTestWriter implements TestWriter {
private PrintStream output;
private ResponseWriter respWriter;
+ public static int BASE_WIDTH = 72;
+
public TextTestWriter(PrintStream output) {
this.output = output;
this.respWriter = new ResponseWriter(output);
@@ -24,34 +25,51 @@ public class TextTestWriter implements TestWriter {
output.println("=== " + suite.getDescription());
}
- private String testPrefix(Test t) {
- return String.format("%-4s", t.getResultValue() == Result.Value.SUCCESS ? "OK" : "NOK");
- }
- private String testString(Test t) {
- if (!t.hasRun())
+ private String testString(Test t, int offset) {
+ if (!t.hasRun()) {
return null;
+ }
StringBuilder out = new StringBuilder();
if (t instanceof Test.Simple) {
Test.Simple test = (Test.Simple) t;
- out.append(String.format("%-70s:", testPrefix(t) + " : " + test.getDescription())).append(" : ");
+ out.append(test.ok() ? "OK " : "NOK ");
+ out.append("━ ");
+ int width = BASE_WIDTH - (offset + out.length());
+ String widthSpec = "%-" + String.valueOf(width) + "s";
+ out.append(String.format(widthSpec, t.getDescription()));
+ out.append(" ┃ ");
+ out.append(String.format("%-9s", test.getResultValue().name()));
+ out.append(" ┃ ");
out.append(respWriter.responseSuffix(test.getResponse()));
- } else if (t instanceof Test.Compound) {
+ } else {
+ out.append(System.lineSeparator());
Test.Compound test = (Test.Compound) t;
+ out.append(test.ok() ? "OK " : "NOK ");
+ out.append("┳ ");
+ int width = BASE_WIDTH - (offset + out.length());
+ String widthSpec = "%-" + String.valueOf(width) + "s";
+ out.append(String.format(widthSpec, t.getDescription()));
+ out.append(" ┃ ");
+ out.append(String.format("%-9s", test.getResultValue().name()));
+ out.append(" ┃ ");
+ out.append(test.getResultCause());
+ out.append(System.lineSeparator());
Test[] tests = test.getTests();
for (int i = 0; i < tests.length; ++i) {
- if (i == 0) {
- out.append(" /- ");
- } else if (i == tests.length - 1) {
- out.append(" \\- ");
+ if (i == tests.length - 1) {
+ out.append(" ┗ ");
} else {
- out.append(" | ");
+ out.append(" ┣ ");
+ }
+ out.append(testString(tests[i], offset + 6));
+ if (i != tests.length - 1) {
+ out.append(System.lineSeparator());
}
- out.append(testString(tests[i])).append(System.lineSeparator());
}
- out.append(String.format("%-70s", testPrefix(t) + " : " + test.getDescription()));
}
+
return out.toString();
}
@@ -59,7 +77,7 @@ public class TextTestWriter implements TestWriter {
public void outputTest(Test t) {
if (!t.hasRun())
return;
- output.println(testString(t));
+ output.println(testString(t, 0));
output.flush();
}
diff --git a/src/cz/crcs/ectester/reader/output/XMLTestWriter.java b/src/cz/crcs/ectester/reader/output/XMLTestWriter.java
index b4accdd..709d215 100644
--- a/src/cz/crcs/ectester/reader/output/XMLTestWriter.java
+++ b/src/cz/crcs/ectester/reader/output/XMLTestWriter.java
@@ -107,10 +107,13 @@ public class XMLTestWriter implements TestWriter {
testElem.appendChild(description);
Element result = doc.createElement("result");
+ Element ok = doc.createElement("ok");
+ ok.setTextContent(String.valueOf(t.ok()));
Element value = doc.createElement("value");
value.setTextContent(t.getResultValue().name());
Element cause = doc.createElement("cause");
cause.setTextContent(t.getResultCause());
+ result.appendChild(ok);
result.appendChild(value);
result.appendChild(cause);
testElem.appendChild(result);
diff --git a/src/cz/crcs/ectester/reader/output/YAMLTestWriter.java b/src/cz/crcs/ectester/reader/output/YAMLTestWriter.java
index 93e2b45..f0dcd3a 100644
--- a/src/cz/crcs/ectester/reader/output/YAMLTestWriter.java
+++ b/src/cz/crcs/ectester/reader/output/YAMLTestWriter.java
@@ -80,7 +80,8 @@ public class YAMLTestWriter implements TestWriter {
}
testObj.put("desc", t.getDescription());
- Map<String, String> result = new HashMap<>();
+ Map<String, Object> result = new HashMap<>();
+ result.put("ok", t.ok());
result.put("value", t.getResultValue().name());
result.put("cause", t.getResultCause());
testObj.put("result", result);
diff --git a/src/cz/crcs/ectester/reader/test/CompositeCurvesSuite.java b/src/cz/crcs/ectester/reader/test/CompositeCurvesSuite.java
index c777a77..8e7ca31 100644
--- a/src/cz/crcs/ectester/reader/test/CompositeCurvesSuite.java
+++ b/src/cz/crcs/ectester/reader/test/CompositeCurvesSuite.java
@@ -12,6 +12,8 @@ import javacard.security.KeyPair;
import java.util.Map;
+import static cz.crcs.ectester.reader.test.Result.ExpectedValue;
+
/**
* @author Jan Jancar johny@neuromancer.sk
*/
@@ -39,12 +41,12 @@ public class CompositeCurvesSuite extends TestSuite {
continue;
}
if ((curve.getBits() == cfg.bits || cfg.all)) {
- tests.add(new Test.Simple(new Command.Allocate(cardManager, ECTesterApplet.KEYPAIR_BOTH, curve.getBits(), curve.getField()), Result.Value.SUCCESS));
- tests.add(new Test.Simple(new Command.Set(cardManager, ECTesterApplet.KEYPAIR_BOTH, EC_Consts.CURVE_external, curve.getParams(), curve.flatten()), Result.Value.ANY));
- tests.add(new Test.Simple(new Command.Generate(cardManager, ECTesterApplet.KEYPAIR_LOCAL), Result.Value.ANY));
+ tests.add(new Test.Simple(new Command.Allocate(cardManager, ECTesterApplet.KEYPAIR_BOTH, curve.getBits(), curve.getField()), ExpectedValue.SUCCESS));
+ tests.add(new Test.Simple(new Command.Set(cardManager, ECTesterApplet.KEYPAIR_BOTH, EC_Consts.CURVE_external, curve.getParams(), curve.flatten()), ExpectedValue.ANY));
+ tests.add(new Test.Simple(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 Test.Simple(ecdhCommand, Result.Value.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 Test.Simple(new Command.Cleanup(cardManager), Result.Value.ANY));
+ tests.add(new Test.Simple(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 Test.Simple(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 8fea661..736b7c5 100644
--- a/src/cz/crcs/ectester/reader/test/DefaultSuite.java
+++ b/src/cz/crcs/ectester/reader/test/DefaultSuite.java
@@ -10,6 +10,8 @@ import javacard.security.KeyPair;
import java.io.IOException;
+import static cz.crcs.ectester.reader.test.Result.ExpectedValue;
+
/**
* @author Jan Jancar johny@neuromancer.sk
*/
@@ -21,14 +23,14 @@ public class DefaultSuite extends TestSuite {
@Override
public void setup(CardMngr cardManager) throws IOException {
- tests.add(new Test.Simple(new Command.Support(cardManager), Result.Value.ANY));
+ tests.add(new Test.Simple(new Command.Support(cardManager), ExpectedValue.ANY));
if (cfg.namedCurve != null) {
String desc = "Default tests over the " + cfg.namedCurve + " curve category.";
if (cfg.primeField) {
- tests.addAll(defaultCategoryTests(cardManager, cfg.namedCurve, KeyPair.ALG_EC_FP, Result.Value.SUCCESS, Result.Value.SUCCESS, Result.Value.SUCCESS, Result.Value.ANY, Result.Value.SUCCESS, desc));
+ tests.addAll(defaultCategoryTests(cardManager, cfg.namedCurve, KeyPair.ALG_EC_FP, ExpectedValue.SUCCESS, ExpectedValue.SUCCESS, ExpectedValue.SUCCESS, ExpectedValue.ANY, ExpectedValue.SUCCESS, desc));
}
if (cfg.binaryField) {
- tests.addAll(defaultCategoryTests(cardManager, cfg.namedCurve, KeyPair.ALG_EC_F2M, Result.Value.SUCCESS, Result.Value.SUCCESS, Result.Value.SUCCESS, Result.Value.ANY, Result.Value.SUCCESS, desc));
+ tests.addAll(defaultCategoryTests(cardManager, cfg.namedCurve, KeyPair.ALG_EC_F2M, ExpectedValue.SUCCESS, ExpectedValue.SUCCESS, ExpectedValue.SUCCESS, ExpectedValue.ANY, ExpectedValue.SUCCESS, desc));
}
} else {
if (cfg.all) {
@@ -57,11 +59,11 @@ public class DefaultSuite extends TestSuite {
}
private void defaultTests(CardMngr cardManager, short keyLength, byte keyType) throws IOException {
- tests.add(new Test.Simple(new Command.Allocate(cardManager, ECTesterApplet.KEYPAIR_BOTH, keyLength, keyType), Result.Value.SUCCESS));
+ tests.add(new Test.Simple(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 Test.Simple(curve, Result.Value.SUCCESS));
- tests.add(defaultCurveTests(cardManager, Result.Value.SUCCESS, Result.Value.SUCCESS, Result.Value.ANY, Result.Value.SUCCESS, "Default tests."));
- tests.add(new Test.Simple(new Command.Cleanup(cardManager), Result.Value.ANY));
+ tests.add(new Test.Simple(curve, ExpectedValue.SUCCESS));
+ tests.add(defaultCurveTests(cardManager, ExpectedValue.SUCCESS, ExpectedValue.SUCCESS, ExpectedValue.ANY, ExpectedValue.SUCCESS, "Default tests."));
+ tests.add(new Test.Simple(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 229a5a3..f61b695 100644
--- a/src/cz/crcs/ectester/reader/test/InvalidCurvesSuite.java
+++ b/src/cz/crcs/ectester/reader/test/InvalidCurvesSuite.java
@@ -16,6 +16,8 @@ import java.util.LinkedList;
import java.util.List;
import java.util.Map;
+import static cz.crcs.ectester.reader.test.Result.ExpectedValue;
+
/**
* @author Jan Jancar johny@neuromancer.sk
*/
@@ -51,16 +53,16 @@ public class InvalidCurvesSuite extends TestSuite {
EC_Curve curve = e.getKey();
List<EC_Key.Public> keys = e.getValue();
- tests.add(new Test.Simple(new Command.Allocate(cardManager, ECTesterApplet.KEYPAIR_BOTH, curve.getBits(), curve.getField()), Result.Value.SUCCESS));
- tests.add(new Test.Simple(new Command.Set(cardManager, ECTesterApplet.KEYPAIR_BOTH, EC_Consts.CURVE_external, curve.getParams(), curve.flatten()), Result.Value.SUCCESS));
- tests.add(new Test.Simple(new Command.Generate(cardManager, ECTesterApplet.KEYPAIR_LOCAL), Result.Value.SUCCESS));
+ tests.add(new Test.Simple(new Command.Allocate(cardManager, ECTesterApplet.KEYPAIR_BOTH, curve.getBits(), curve.getField()), ExpectedValue.SUCCESS));
+ tests.add(new Test.Simple(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_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 Test.Simple(ecdhCommand, Result.Value.FAILURE, "Card correctly rejected point on invalid curve." , "Card incorrectly accepted point on invalid curve."));
+ ecdhTests.add(new Test.Simple(ecdhCommand, ExpectedValue.FAILURE, "Card correctly rejected point on invalid curve." , "Card incorrectly accepted point on invalid curve."));
}
- tests.add(Test.Compound.all(Result.Value.SUCCESS, "Invalid curve test of " + curve.getId(), ecdhTests.toArray(new Test[0])));
- tests.add(new Test.Simple(new Command.Cleanup(cardManager), Result.Value.ANY));
+ tests.add(Test.Compound.all(ExpectedValue.SUCCESS, "Invalid curve test of " + curve.getId(), ecdhTests.toArray(new Test[0])));
+ tests.add(new Test.Simple(new Command.Cleanup(cardManager), ExpectedValue.ANY));
}
}
}
diff --git a/src/cz/crcs/ectester/reader/test/Result.java b/src/cz/crcs/ectester/reader/test/Result.java
index c6439ef..9110929 100644
--- a/src/cz/crcs/ectester/reader/test/Result.java
+++ b/src/cz/crcs/ectester/reader/test/Result.java
@@ -25,7 +25,40 @@ public class Result {
return cause;
}
+ public boolean ok() {
+ return value.ok();
+ }
+
public enum Value {
+ SUCCESS(true),
+ FAILURE(false),
+ UXSUCCESS(false),
+ XFAILURE(true);
+
+ private boolean ok;
+
+ Value(boolean ok) {
+ this.ok = ok;
+ }
+
+ public static Value fromExpected(ExpectedValue expected, boolean successful) {
+ switch (expected) {
+ case SUCCESS:
+ return successful ? SUCCESS : FAILURE;
+ case FAILURE:
+ return successful ? UXSUCCESS : XFAILURE;
+ case ANY:
+ return SUCCESS;
+ }
+ return SUCCESS;
+ }
+
+ public boolean ok() {
+ return ok;
+ }
+ }
+
+ public enum ExpectedValue {
SUCCESS,
FAILURE,
ANY
diff --git a/src/cz/crcs/ectester/reader/test/Test.java b/src/cz/crcs/ectester/reader/test/Test.java
index 3848df2..48280ed 100644
--- a/src/cz/crcs/ectester/reader/test/Test.java
+++ b/src/cz/crcs/ectester/reader/test/Test.java
@@ -7,6 +7,7 @@ import javax.smartcardio.CardException;
import java.util.function.BiFunction;
import java.util.function.Function;
+import static cz.crcs.ectester.reader.test.Result.ExpectedValue;
import static cz.crcs.ectester.reader.test.Result.Value;
/**
@@ -39,6 +40,13 @@ public abstract class Test {
return result.getCause();
}
+ public boolean ok() {
+ if (!hasRun) {
+ return true;
+ }
+ return result.ok();
+ }
+
public abstract String getDescription();
public boolean hasRun() {
@@ -61,18 +69,14 @@ public abstract class Test {
this.callback = callback;
}
- public Simple(Command command, Value expected, String ok, String nok) {
+ public Simple(Command command, ExpectedValue expected, String ok, String nok) {
this(command, (cmd, resp) -> {
- if (expected == Value.ANY) {
- return new Result(Value.SUCCESS, ok);
- }
- Value respResult = resp.successful() ? Value.SUCCESS : Value.FAILURE;
- boolean cond = expected == respResult;
- return new Result(cond ? Value.SUCCESS : Value.FAILURE, cond ? ok : nok);
+ Value resultValue = Value.fromExpected(expected, resp.successful());
+ return new Result(resultValue, resultValue.ok() ? ok : nok);
});
}
- public Simple(Command command, Value expected) {
+ public Simple(Command command, ExpectedValue expected) {
this(command, expected, null, null);
}
@@ -134,10 +138,10 @@ public abstract class Test {
return new Compound(callback, description, tests);
}
- public static Compound all(Value what, Test... all) {
+ public static Compound all(ExpectedValue what, Test... all) {
return new Compound((tests) -> {
for (Test test : tests) {
- if (test.getResultValue() != what) {
+ if (!Value.fromExpected(what, test.ok()).ok()) {
return new Result(Value.FAILURE, "At least one of the sub-tests did not have the expected result.");
}
}
@@ -145,16 +149,16 @@ public abstract class Test {
}, all);
}
- public static Compound all(Value what, String description, Test... all) {
+ public static Compound all(ExpectedValue what, String description, Test... all) {
Compound result = Compound.all(what, all);
result.setDescription(description);
return result;
}
- public static Compound any(Value what, Test... any) {
+ public static Compound any(ExpectedValue what, Test... any) {
return new Compound((tests) -> {
for (Test test : tests) {
- if (test.getResultValue() == what) {
+ if (Value.fromExpected(what, test.ok()).ok()) {
return new Result(Value.SUCCESS, "At least one of the sub-tests did have the expected result.");
}
}
@@ -162,16 +166,16 @@ public abstract class Test {
}, any);
}
- public static Compound any(Value what, String description, Test... any) {
+ public static Compound any(ExpectedValue what, String description, Test... any) {
Compound result = Compound.any(what, any);
result.setDescription(description);
return result;
}
- public static Compound mask(Value[] results, Test... masked) {
+ public static Compound mask(ExpectedValue[] results, Test... masked) {
return new Compound((tests) -> {
for (int i = 0; i < results.length; ++i) {
- if (results[i] != Value.ANY && results[i] != tests[i].getResultValue()) {
+ if (!Value.fromExpected(results[i], tests[i].ok()).ok()) {
return new Result(Value.FAILURE, "At least one of the sub-tests did not match the result mask.");
}
}
@@ -179,7 +183,7 @@ public abstract class Test {
}, masked);
}
- public static Compound mask(Value[] results, String description, Test... masked) {
+ public static Compound mask(ExpectedValue[] results, String description, Test... masked) {
Compound result = Compound.mask(results, masked);
result.setDescription(description);
return result;
diff --git a/src/cz/crcs/ectester/reader/test/TestSuite.java b/src/cz/crcs/ectester/reader/test/TestSuite.java
index c0e8e91..cb3211d 100644
--- a/src/cz/crcs/ectester/reader/test/TestSuite.java
+++ b/src/cz/crcs/ectester/reader/test/TestSuite.java
@@ -15,6 +15,9 @@ import java.util.List;
import java.util.Map;
import java.util.function.Function;
+import static cz.crcs.ectester.reader.test.Result.ExpectedValue;
+import static cz.crcs.ectester.reader.test.Result.Value;
+
/**
* @author Jan Jancar johny@neuromancer.sk
*/
@@ -55,23 +58,23 @@ public abstract class TestSuite {
* @param description compound test description
* @return test to run
*/
- Test defaultCurveTests(CardMngr cardManager, Result.Value generateExpected, Result.Value ecdhExpected, Result.Value ecdhCompressExpected, Result.Value ecdsaExpected, String description) {
+ Test defaultCurveTests(CardMngr cardManager, ExpectedValue generateExpected, ExpectedValue ecdhExpected, ExpectedValue ecdhCompressExpected, ExpectedValue ecdsaExpected, String description) {
List<Test> tests = new LinkedList<>();
tests.add(new Test.Simple(new Command.Generate(cardManager, ECTesterApplet.KEYPAIR_BOTH), generateExpected));
tests.add(new Test.Simple(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 Test.Simple(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 Test.Simple(new Command.ECDH(cardManager, ECTesterApplet.KEYPAIR_LOCAL, ECTesterApplet.KEYPAIR_REMOTE, ECTesterApplet.EXPORT_FALSE, EC_Consts.CORRUPTION_ONE, EC_Consts.KA_ECDH), Result.Value.FAILURE));
- tests.add(new Test.Simple(new Command.ECDH(cardManager, ECTesterApplet.KEYPAIR_LOCAL, ECTesterApplet.KEYPAIR_REMOTE, ECTesterApplet.EXPORT_FALSE, EC_Consts.CORRUPTION_ZERO, EC_Consts.KA_ECDH), Result.Value.FAILURE));
- tests.add(new Test.Simple(new Command.ECDH(cardManager, ECTesterApplet.KEYPAIR_LOCAL, ECTesterApplet.KEYPAIR_REMOTE, ECTesterApplet.EXPORT_FALSE, EC_Consts.CORRUPTION_MAX, EC_Consts.KA_ECDH), Result.Value.FAILURE));
- tests.add(new Test.Simple(new Command.ECDH(cardManager, ECTesterApplet.KEYPAIR_LOCAL, ECTesterApplet.KEYPAIR_REMOTE, ECTesterApplet.EXPORT_FALSE, EC_Consts.CORRUPTION_FULLRANDOM, EC_Consts.KA_ECDH), Result.Value.FAILURE));
+ tests.add(new Test.Simple(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 Test.Simple(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 Test.Simple(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 Test.Simple(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 Test.Simple(new Command.ECDSA(cardManager, ECTesterApplet.KEYPAIR_LOCAL, ECTesterApplet.EXPORT_FALSE, null), ecdsaExpected));
return Test.Compound.function((testArray) -> {
- Function<Result.Value, String> shouldHave = (expected) -> {
+ Function<ExpectedValue, String> shouldHave = (expected) -> {
switch (expected) {
case SUCCESS:
- return "been successful";
+ return "succeeded";
case FAILURE:
return "failed";
case ANY:
@@ -82,21 +85,21 @@ public abstract class TestSuite {
for (int i = 0; i < testArray.length; ++i) {
Test t = testArray[i];
- if (t.getResultValue() != Result.Value.SUCCESS) {
+ if (!t.ok()) {
if (i == 0) { // generate
- return new Result(Result.Value.FAILURE, "The generation of a key should have " + shouldHave.apply(generateExpected) + ", but it did not.");
+ return new Result(Value.FAILURE, "The generation of a key should have " + shouldHave.apply(generateExpected) + ", but it did not.");
} else if (i == 2) { // ecdh compress
- return new Result(Result.Value.FAILURE, "The ECDH should have " + shouldHave.apply(ecdhExpected) + ", but it did not.");
+ return new Result(Value.FAILURE, "The ECDH should have " + shouldHave.apply(ecdhExpected) + ", but it did not.");
} else if (i == 1) { // ecdh normal
- return new Result(Result.Value.FAILURE, "The ECDH of a compressed point should have " + shouldHave.apply(ecdhCompressExpected) + ", but it did not.");
+ return new Result(Value.FAILURE, "The ECDH of a compressed point should have " + shouldHave.apply(ecdhCompressExpected) + ", but it did not.");
} else if (i <= 6) { // ecdh wrong, should fail
- return new Result(Result.Value.FAILURE, "The ECDH of a corrupted point should have failed, but it dit not.");
+ return new Result(Value.FAILURE, "The ECDH of a corrupted point should have failed, but it dit not.");
} else { // ecdsa
- return new Result(Result.Value.FAILURE, "The ECDSA should have " + shouldHave.apply(ecdsaExpected) + ", but it did not.");
+ return new Result(Value.FAILURE, "The ECDSA should have " + shouldHave.apply(ecdsaExpected) + ", but it did not.");
}
}
}
- return new Result(Result.Value.SUCCESS);
+ return new Result(Value.SUCCESS);
}, description, tests.toArray(new Test[0]));
}
@@ -107,12 +110,12 @@ public abstract class TestSuite {
* @param setExpected expected result of the Set (curve) command
* @param generateExpected expected result of the Generate command
* @param ecdhExpected expected result of the ordinary ECDH command
- * @param ecdhCompressedExpected
+ * @param ecdhCompressedExpected expected result of the ECDH command with a compressed point.
* @param ecdsaExpected expected result of the ordinary ECDSA command
* @param description compound test description
* @return tests to run
*/
- List<Test> defaultCategoryTests(CardMngr cardManager, String category, byte field, Result.Value setExpected, Result.Value generateExpected, Result.Value ecdhExpected, Result.Value ecdhCompressedExpected, Result.Value ecdsaExpected, String description) {
+ List<Test> defaultCategoryTests(CardMngr cardManager, String category, byte field, ExpectedValue setExpected, ExpectedValue generateExpected, ExpectedValue ecdhExpected, ExpectedValue ecdhCompressedExpected, ExpectedValue ecdsaExpected, String description) {
List<Test> tests = new LinkedList<>();
Map<String, EC_Curve> curves = dataStore.getObjects(EC_Curve.class, category);
if (curves == null)
@@ -120,10 +123,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 Test.Simple(new Command.Allocate(cardManager, ECTesterApplet.KEYPAIR_BOTH, curve.getBits(), field), Result.Value.SUCCESS));
+ tests.add(new Test.Simple(new Command.Allocate(cardManager, ECTesterApplet.KEYPAIR_BOTH, curve.getBits(), field), ExpectedValue.SUCCESS));
tests.add(new Test.Simple(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 Test.Simple(new Command.Cleanup(cardManager), Result.Value.ANY));
+ tests.add(new Test.Simple(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 7a2767e..ff46feb 100644
--- a/src/cz/crcs/ectester/reader/test/TestVectorSuite.java
+++ b/src/cz/crcs/ectester/reader/test/TestVectorSuite.java
@@ -16,6 +16,9 @@ import java.util.LinkedList;
import java.util.List;
import java.util.Map;
+import static cz.crcs.ectester.reader.test.Result.ExpectedValue;
+import static cz.crcs.ectester.reader.test.Result.Value;
+
/**
* @author Jan Jancar johny@neuromancer.sk
*/
@@ -55,25 +58,25 @@ public class TestVectorSuite extends TestSuite {
}
List<Test> testVector = new LinkedList<>();
- testVector.add(new Test.Simple(new Command.Allocate(cardManager, ECTesterApplet.KEYPAIR_BOTH, curve.getBits(), curve.getField()), Result.Value.SUCCESS));
- testVector.add(new Test.Simple(new Command.Set(cardManager, ECTesterApplet.KEYPAIR_BOTH, EC_Consts.CURVE_external, curve.getParams(), curve.flatten()), Result.Value.SUCCESS));
- //tests.add(new Test.Simple(new Command.Generate(cardManager, ECTesterApplet.KEYPAIR_BOTH), Result.Value.SUCCESS));
- testVector.add(new Test.Simple(new Command.Set(cardManager, ECTesterApplet.KEYPAIR_LOCAL, EC_Consts.CURVE_external, EC_Consts.PARAMETER_S, onekey.flatten(EC_Consts.PARAMETER_S)), Result.Value.SUCCESS));
- testVector.add(new Test.Simple(new Command.Set(cardManager, ECTesterApplet.KEYPAIR_REMOTE, EC_Consts.CURVE_external, EC_Consts.PARAMETER_W, otherkey.flatten(EC_Consts.PARAMETER_W)), Result.Value.SUCCESS));
+ testVector.add(new Test.Simple(new Command.Allocate(cardManager, ECTesterApplet.KEYPAIR_BOTH, curve.getBits(), curve.getField()), ExpectedValue.SUCCESS));
+ testVector.add(new Test.Simple(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 Test.Simple(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 Test.Simple(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 Test.Simple(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(Result.Value.FAILURE, "ECDH was unsuccessful.");
+ return new Result(Value.FAILURE, "ECDH was unsuccessful.");
if (!dh.hasSecret())
- return new Result(Result.Value.FAILURE, "ECDH response did not contain the derived secret.");
+ return new Result(Value.FAILURE, "ECDH response did not contain the derived secret.");
if (!Util.compareBytes(dh.getSecret(), 0, result.getParam(0), 0, dh.secretLength())) {
int firstDiff = Util.diffBytes(dh.getSecret(), 0, result.getParam(0), 0, dh.secretLength());
- return new Result(Result.Value.FAILURE, "ECDH derived secret does not match the test, first difference was at byte " + String.valueOf(firstDiff) + ".");
+ return new Result(Value.FAILURE, "ECDH derived secret does not match the test, first difference was at byte " + String.valueOf(firstDiff) + ".");
}
- return new Result(Result.Value.SUCCESS);
+ return new Result(Value.SUCCESS);
}));
- tests.add(Test.Compound.all(Result.Value.SUCCESS, "Test vector " + result.getId(), testVector.toArray(new Test[0])));
- tests.add(new Test.Simple(new Command.Cleanup(cardManager), Result.Value.ANY));
+ tests.add(Test.Compound.all(ExpectedValue.SUCCESS, "Test vector " + result.getId(), testVector.toArray(new Test[0])));
+ tests.add(new Test.Simple(new Command.Cleanup(cardManager), ExpectedValue.ANY));
}
}
diff --git a/src/cz/crcs/ectester/reader/test/WrongCurvesSuite.java b/src/cz/crcs/ectester/reader/test/WrongCurvesSuite.java
index 20cb405..e9389b4 100644
--- a/src/cz/crcs/ectester/reader/test/WrongCurvesSuite.java
+++ b/src/cz/crcs/ectester/reader/test/WrongCurvesSuite.java
@@ -7,6 +7,8 @@ import javacard.security.KeyPair;
import java.io.IOException;
+import static cz.crcs.ectester.reader.test.Result.ExpectedValue;
+
/**
* @author Jan Jancar johny@neuromancer.sk
*/
@@ -23,10 +25,10 @@ public class WrongCurvesSuite extends TestSuite {
*/
String desc = "Default tests over wrong curve params.";
if (cfg.primeField) {
- tests.addAll(defaultCategoryTests(cardManager, cfg.testSuite, KeyPair.ALG_EC_FP, Result.Value.FAILURE, Result.Value.FAILURE, Result.Value.FAILURE, Result.Value.FAILURE, Result.Value.FAILURE, desc));
+ tests.addAll(defaultCategoryTests(cardManager, cfg.testSuite, KeyPair.ALG_EC_FP, ExpectedValue.FAILURE, ExpectedValue.FAILURE, ExpectedValue.FAILURE, ExpectedValue.FAILURE, ExpectedValue.FAILURE, desc));
}
if (cfg.binaryField) {
- tests.addAll(defaultCategoryTests(cardManager, cfg.testSuite, KeyPair.ALG_EC_F2M, Result.Value.FAILURE, Result.Value.FAILURE, Result.Value.FAILURE, Result.Value.FAILURE, Result.Value.FAILURE, desc));
+ tests.addAll(defaultCategoryTests(cardManager, cfg.testSuite, KeyPair.ALG_EC_F2M, ExpectedValue.FAILURE, ExpectedValue.FAILURE, ExpectedValue.FAILURE, ExpectedValue.FAILURE, ExpectedValue.FAILURE, desc));
}
}
}