aboutsummaryrefslogtreecommitdiff
path: root/src
diff options
context:
space:
mode:
authorJ08nY2018-11-07 11:20:06 +0100
committerJ08nY2018-11-07 11:20:06 +0100
commitf0ae5fdc1ba778acc922d5269a5523a88ca97976 (patch)
treedeeb293db93e31a2ca260c64c02d7b9782788e3c /src
parentc676bacffd1305e1efc49b34d87ffd0a0a695ea7 (diff)
downloadECTester-f0ae5fdc1ba778acc922d5269a5523a88ca97976.tar.gz
ECTester-f0ae5fdc1ba778acc922d5269a5523a88ca97976.tar.zst
ECTester-f0ae5fdc1ba778acc922d5269a5523a88ca97976.zip
Add --info command to get and output applet info.
Diffstat (limited to 'src')
-rw-r--r--src/cz/crcs/ectester/reader/ECTesterReader.java24
-rw-r--r--src/cz/crcs/ectester/reader/response/Response.java7
2 files changed, 28 insertions, 3 deletions
diff --git a/src/cz/crcs/ectester/reader/ECTesterReader.java b/src/cz/crcs/ectester/reader/ECTesterReader.java
index c3c0e13..1359dc2 100644
--- a/src/cz/crcs/ectester/reader/ECTesterReader.java
+++ b/src/cz/crcs/ectester/reader/ECTesterReader.java
@@ -37,10 +37,12 @@ import cz.crcs.ectester.reader.output.FileTestWriter;
import cz.crcs.ectester.reader.output.ResponseWriter;
import cz.crcs.ectester.reader.response.Response;
import cz.crcs.ectester.reader.test.*;
+import javacard.framework.ISO7816;
import javacard.security.KeyPair;
import org.apache.commons.cli.*;
import javax.smartcardio.CardException;
+import javax.smartcardio.ResponseAPDU;
import javax.xml.parsers.ParserConfigurationException;
import java.io.*;
import java.net.URL;
@@ -141,7 +143,12 @@ public class ECTesterReader {
System.err.println(Colors.error("Failed to connect to card."));
System.exit(1);
}
- cardManager.send(SELECT_ECTESTERAPPLET);
+ ResponseAPDU selectResp = cardManager.send(SELECT_ECTESTERAPPLET);
+ if ((short) selectResp.getSW() != ISO7816.SW_NO_ERROR) {
+ System.err.println(Colors.error("Failed to select ECTester applet, is it installed?"));
+ cardManager.disconnectFromCard();
+ System.exit(1);
+ }
}
// Setup logger and respWriter
@@ -159,6 +166,8 @@ public class ECTesterReader {
ecdh();
} else if (cli.hasOption("ecdsa")) {
ecdsa();
+ } else if (cli.hasOption("info")) {
+ info();
}
//disconnect
@@ -231,6 +240,8 @@ public class ECTesterReader {
* -dh / --ecdh [count]]
* -dsa / --ecdsa [count]
* -ln / --list-named [obj]
+ * -ls / --list-suites
+ * -nfo / --info
*
* Options:
* -b / --bit-size <b> // -a / --all
@@ -271,12 +282,13 @@ public class ECTesterReader {
actions.addOption(Option.builder("V").longOpt("version").desc("Print version info.").build());
actions.addOption(Option.builder("h").longOpt("help").desc("Print help.").build());
actions.addOption(Option.builder("ln").longOpt("list-named").desc("Print the list of supported named curves and keys.").hasArg().argName("what").optionalArg(true).build());
+ 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("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("ls").longOpt("list-suites").desc("List supported test suites.").build());
+ actions.addOption(Option.builder("nf").longOpt("info").desc("Get applet info.").build());
opts.addOptionGroup(actions);
@@ -346,6 +358,14 @@ public class ECTesterReader {
}
}
+ private void info() throws CardException {
+ Response.GetInfo info = new Command.GetInfo(cardManager).send();
+ System.out.println(String.format("ECTester applet version: %s", info.getVersion()));
+ System.out.println(String.format("ECTester applet APDU support: %s", (info.getBase() == ECTesterApplet.BASE_221) ? "basic" : "extended length"));
+ System.out.println(String.format("JavaCard API version: %.1f", info.getJavaCardVersion()));
+ System.out.println(String.format("JavaCard supports system cleanup: %s", info.getCleanupSupport()));
+ }
+
/**
* Exports default card/simulation EC domain parameters to output file.
*
diff --git a/src/cz/crcs/ectester/reader/response/Response.java b/src/cz/crcs/ectester/reader/response/Response.java
index b0cd0f8..afac1bc 100644
--- a/src/cz/crcs/ectester/reader/response/Response.java
+++ b/src/cz/crcs/ectester/reader/response/Response.java
@@ -461,7 +461,12 @@ public abstract class Response {
public float getJavaCardVersion() {
byte major = (byte) (jcVersion >> 8);
byte minor = (byte) (jcVersion & 0xff);
- int minorSize = (int) Math.ceil(Math.log10(minor));
+ int minorSize;
+ if (minor == 0) {
+ minorSize = 1;
+ } else {
+ minorSize = (int) Math.ceil(Math.log10(minor));
+ }
return (major + ((float) (minor) / (minorSize * 10)));
}