aboutsummaryrefslogtreecommitdiff
path: root/src/cz/crcs/ectester/reader/ECTesterReader.java
diff options
context:
space:
mode:
Diffstat (limited to 'src/cz/crcs/ectester/reader/ECTesterReader.java')
-rw-r--r--src/cz/crcs/ectester/reader/ECTesterReader.java42
1 files changed, 31 insertions, 11 deletions
diff --git a/src/cz/crcs/ectester/reader/ECTesterReader.java b/src/cz/crcs/ectester/reader/ECTesterReader.java
index 2a931f5..7a9d3eb 100644
--- a/src/cz/crcs/ectester/reader/ECTesterReader.java
+++ b/src/cz/crcs/ectester/reader/ECTesterReader.java
@@ -285,6 +285,7 @@ public class ECTesterReader {
* -ka/ --ka-type <type>
* -sig/--sig-type <type>
* -C / --color
+ * -to/ --test-options <opts>
*/
OptionGroup actions = new OptionGroup();
actions.setRequired(true);
@@ -294,7 +295,7 @@ public class ECTesterReader {
actions.addOption(Option.builder("ls").longOpt("list-suites").desc("List supported test suites.").build());
actions.addOption(Option.builder("e").longOpt("export").desc("Export the defaut curve parameters of the card(if any).").build());
actions.addOption(Option.builder("g").longOpt("generate").desc("Generate <amount> of EC keys.").hasArg().argName("amount").optionalArg(true).build());
- actions.addOption(Option.builder("t").longOpt("test").desc("Test ECC support. Optionally specify a test number to run only a part of a test suite. <test_suite>:\n- default:\n- compression:\n- invalid:\n- twist:\n- degenerate:\n- cofactor:\n- wrong:\n- signature:\n- composite:\n- test-vectors:\n- edge-cases:\n- miscellaneous:").hasArg().argName("test_suite[:from[:to]]").optionalArg(true).build());
+ actions.addOption(Option.builder("t").longOpt("test").desc("Test ECC support. Optionally specify a test number to run only a part of a test suite. <test_suite>:\n- default\n- compression\n- invalid\n- twist\n- degenerate\n- cofactor\n- wrong\n- signature\n- composite\n- test-vectors\n- edge-cases\n- miscellaneous").hasArg().argName("test_suite[:from[:to]]").optionalArg(true).build());
actions.addOption(Option.builder("dh").longOpt("ecdh").desc("Do EC KeyAgreement (ECDH...), [count] times.").hasArg().argName("count").optionalArg(true).build());
actions.addOption(Option.builder("dsa").longOpt("ecdsa").desc("Sign data with ECDSA, [count] times.").hasArg().argName("count").optionalArg(true).build());
actions.addOption(Option.builder("nf").longOpt("info").desc("Get applet info.").build());
@@ -340,7 +341,7 @@ public class ECTesterReader {
opts.addOption(Option.builder().longOpt("cleanup").desc("Send the cleanup command trigerring JCSystem.requestObjectDeletion() after some operations.").build());
opts.addOption(Option.builder("s").longOpt("simulate").desc("Simulate a card with jcardsim instead of using a terminal.").build());
opts.addOption(Option.builder("y").longOpt("yes").desc("Accept all warnings and prompts.").build());
- opts.addOption(Option.builder("to").longOpt("test-options").desc("Test options to use.").hasArg().argName("options").build());
+ opts.addOption(Option.builder("to").longOpt("test-options").desc("Test options to use:\n- preset: Use preset semi-random private keys instead of generating keypairs on the cards when the test needs one.").hasArg().argName("options").build());
opts.addOption(Option.builder("ka").longOpt("ka-type").desc("Set KeyAgreement object [type], corresponds to JC.KeyAgreement constants.").hasArg().argName("type").optionalArg(true).build());
opts.addOption(Option.builder("sig").longOpt("sig-type").desc("Set Signature object [type], corresponds to JC.Signature constants.").hasArg().argName("type").optionalArg(true).build());
@@ -369,6 +370,9 @@ public class ECTesterReader {
for (String line : suite.getDescription()) {
System.out.println("\t" + line);
}
+ if (suite.getOptions() != null) {
+ System.out.println("\t" + Colors.underline("Options:") + " " + Arrays.toString(suite.getOptions()));
+ }
}
System.out.println();
System.out.println("For more information, look at the documentation at https://github.com/crocs-muni/ECTester.");
@@ -620,7 +624,7 @@ public class ECTesterReader {
int retry = 0;
int done = 0;
- while (done < cfg.ECKACount) {
+ while (done < cfg.ECKACount || cfg.ECKACount == 0) {
if (generate != null) {
Response regen = generate.send();
respWriter.outputResponse(regen);
@@ -655,6 +659,7 @@ public class ECTesterReader {
time += result.getDuration();
out.write(String.format("%d;%d;%s;%s;%s\n", done, time / 1000000, ByteUtil.bytesToHex(pubkey_bytes, false), ByteUtil.bytesToHex(privkey_bytes, false), ByteUtil.bytesToHex(result.getSecret(), false)));
+ out.flush();
}
++done;
@@ -724,7 +729,7 @@ public class ECTesterReader {
int retry = 0;
int done = 0;
- while (done < cfg.ECDSACount) {
+ while (done < cfg.ECDSACount || cfg.ECDSACount == 0) {
if (!cfg.fixedKey) {
respWriter.outputResponse(generate.send());
exported = export.send();
@@ -785,6 +790,7 @@ public class ECTesterReader {
}
}
out.write(String.format("%d;%d;%d;%s;%s;%s;%s;%s;%d\n", done, signTime / 1000000, verifyTime / 1000000, dataString, pub, priv, ByteUtil.bytesToHex(signature, false), k, verifyResp.successful() ? 1 : 0));
+ out.flush();
}
++done;
@@ -984,14 +990,14 @@ public class ECTesterReader {
try {
testFrom = Integer.parseInt(parts[1]);
} catch (NumberFormatException nfe) {
- System.err.println("Invalid test from number: " + parts[1] + ".");
+ System.err.println("Invalid test_from number: " + parts[1] + ".");
return false;
}
if (parts.length == 3) {
try {
testTo = Integer.parseInt(parts[2]);
} catch (NumberFormatException nfe) {
- System.err.println("Invalid test to number: " + parts[2] + ".");
+ System.err.println("Invalid test_to number: " + parts[2] + ".");
return false;
}
} else if (parts.length != 2) {
@@ -1005,10 +1011,24 @@ public class ECTesterReader {
testFrom = 0;
testTo = -1;
}
+
String[] tests = new String[]{"default", "composite", "compression", "invalid", "degenerate", "test-vectors", "wrong", "twist", "cofactor", "edge-cases", "miscellaneous", "signature"};
- if (!Arrays.asList(tests).contains(testSuite)) {
+ String selected = null;
+ for (String test : tests) {
+ if (test.startsWith(testSuite)) {
+ if (selected != null) {
+ System.err.println(Colors.error("Test suite ambiguous " + test + " or " + selected + "?"));
+ return false;
+ } else {
+ selected = test;
+ }
+ }
+ }
+ if (selected == null) {
System.err.println(Colors.error("Unknown test suite " + testSuite + ". Should be one of: " + Arrays.toString(tests)));
return false;
+ } else {
+ testSuite = selected;
}
String[] opts = cli.getOptionValue("test-options", "").split(",");
@@ -1036,8 +1056,8 @@ public class ECTesterReader {
}
ECKACount = Integer.parseInt(cli.getOptionValue("ecdh", "1"));
- if (ECKACount <= 0) {
- System.err.println(Colors.error("ECDH count cannot be <= 0."));
+ if (ECKACount < 0) {
+ System.err.println(Colors.error("ECDH count cannot be < 0."));
return false;
}
@@ -1058,8 +1078,8 @@ public class ECTesterReader {
}
ECDSACount = Integer.parseInt(cli.getOptionValue("ecdsa", "1"));
- if (ECDSACount <= 0) {
- System.err.println(Colors.error("ECDSA count cannot be <= 0."));
+ if (ECDSACount < 0) {
+ System.err.println(Colors.error("ECDSA count cannot be < 0."));
return false;
}