diff options
| author | J08nY | 2017-03-07 23:54:16 +0100 |
|---|---|---|
| committer | J08nY | 2017-03-07 23:54:16 +0100 |
| commit | c6cb9f4cda4391713bd59cc1e1e7cae8d50cf331 (patch) | |
| tree | 5f2b601b871acd66bbf154d002bbba29cbd52b96 | |
| parent | 197434b2bb2882277b21044331d0a2b64bc314c8 (diff) | |
| download | ECTester-c6cb9f4cda4391713bd59cc1e1e7cae8d50cf331.tar.gz ECTester-c6cb9f4cda4391713bd59cc1e1e7cae8d50cf331.tar.zst ECTester-c6cb9f4cda4391713bd59cc1e1e7cae8d50cf331.zip | |
| -rw-r--r-- | dist/ECTester.jar | bin | 208535 -> 104311 bytes | |||
| -rw-r--r-- | src/cz/crcs/ectester/reader/CardMngr.java | 73 | ||||
| -rw-r--r-- | src/cz/crcs/ectester/reader/ECTester.java | 11 | ||||
| -rw-r--r-- | src/cz/crcs/ectester/reader/Response.java | 9 |
4 files changed, 64 insertions, 29 deletions
diff --git a/dist/ECTester.jar b/dist/ECTester.jar Binary files differindex 0f2e8c6..8201bec 100644 --- a/dist/ECTester.jar +++ b/dist/ECTester.jar diff --git a/src/cz/crcs/ectester/reader/CardMngr.java b/src/cz/crcs/ectester/reader/CardMngr.java index 6875d2e..e11bcb3 100644 --- a/src/cz/crcs/ectester/reader/CardMngr.java +++ b/src/cz/crcs/ectester/reader/CardMngr.java @@ -22,6 +22,7 @@ public class CardMngr { private JavaxSmartCardInterface simulator = null; private boolean simulate = false; + private boolean verbose = true; private final byte[] selectCM = { (byte) 0x00, (byte) 0xa4, (byte) 0x04, (byte) 0x00, (byte) 0x07, (byte) 0xa0, (byte) 0x00, (byte) 0x00, @@ -39,10 +40,14 @@ public class CardMngr { public static final short NUMBER_OF_RECORDS = (short) 0x0a; // 10 records public CardMngr() { - this(false); } - public CardMngr(boolean simulate) { + public CardMngr(boolean verbose) { + this.verbose = verbose; + } + + public CardMngr(boolean verbose, boolean simulate) { + this(verbose); this.simulate = simulate; } @@ -54,22 +59,27 @@ public class CardMngr { List<CardTerminal> terminalList = getReaderList(); if (terminalList == null || terminalList.isEmpty()) { - System.out.println("No terminals found"); + System.err.println("No terminals found"); return false; } //List numbers of Card readers boolean cardFound = false; for (int i = 0; i < terminalList.size(); i++) { - System.out.println(i + " : " + terminalList.get(i)); + + if (verbose) + System.out.println(i + " : " + terminalList.get(i)); + terminal = terminalList.get(i); if (terminal.isCardPresent()) { card = terminal.connect("*"); - System.out.println("card: " + card); + if (verbose) + System.out.println("card: " + card); channel = card.getBasicChannel(); //reset the card - System.out.println(Util.bytesToHex(card.getATR().getBytes())); + if (verbose) + System.out.println(Util.bytesToHex(card.getATR().getBytes())); cardFound = true; } @@ -85,7 +95,7 @@ public class CardMngr { // Test available card - if more present, let user to select one List<CardTerminal> terminalList = CardMngr.getReaderList(); if (terminalList == null || terminalList.isEmpty()) { - System.out.println("ERROR: No suitable reader with card detected. Please check your reader connection"); + System.err.println("ERROR: No suitable reader with card detected. Please check your reader connection"); return false; } else { if (terminalList.size() == 1) { @@ -116,7 +126,8 @@ public class CardMngr { if (terminal != null) { card = terminal.connect("*"); - System.out.println("card: " + card); + if (verbose) + System.out.println("card: " + card); channel = card.getBasicChannel(); } @@ -166,7 +177,7 @@ public class CardMngr { ResponseAPDU resp = send(apdu); if (resp.getSW() != 0x9000) { // 0x9000 is "OK" - System.out.println("Fail to obtain card's response data"); + System.err.println("Fail to obtain card's response data"); data = null; } else { byte temp[] = resp.getBytes(); @@ -191,7 +202,8 @@ public class CardMngr { ResponseAPDU resp = send(apdu); - System.out.println("Response: " + Integer.toHexString(resp.getSW())); + if (verbose) + System.out.println("Response: " + Integer.toHexString(resp.getSW())); if (resp.getSW() != 0x6D00) { // Note: 0x6D00 is SW_INS_NOT_SUPPORTED // something? @@ -204,16 +216,18 @@ public class CardMngr { TerminalFactory factory = TerminalFactory.getDefault(); return factory.terminals().list(); } catch (CardException ex) { - System.out.println("Exception : " + ex); + System.err.println("Exception : " + ex); return null; } } public ResponseAPDU sendAPDU(CommandAPDU apdu) throws CardException { - System.out.println(">>>>"); - System.out.println(apdu); + if (verbose) { + System.out.println(">>>>"); + System.out.println(apdu); - System.out.println(Util.bytesToHex(apdu.getBytes())); + System.out.println(Util.bytesToHex(apdu.getBytes())); + } long elapsed = -System.nanoTime(); @@ -221,8 +235,10 @@ public class CardMngr { elapsed += System.nanoTime(); - System.out.println(responseAPDU); - System.out.println(Util.bytesToHex(responseAPDU.getBytes())); + if (verbose) { + System.out.println(responseAPDU); + System.out.println(Util.bytesToHex(responseAPDU.getBytes())); + } if (responseAPDU.getSW1() == (byte) 0x61) { CommandAPDU apduToSend = new CommandAPDU((byte) 0x00, @@ -230,11 +246,14 @@ public class CardMngr { responseAPDU.getSW1()); responseAPDU = channel.transmit(apduToSend); - System.out.println(Util.bytesToHex(responseAPDU.getBytes())); + if (verbose) + System.out.println(Util.bytesToHex(responseAPDU.getBytes())); } - System.out.println("<<<<"); - System.out.println("Elapsed time (ms): " + elapsed / 1000000); + if (verbose) { + System.out.println("<<<<"); + System.out.println("Elapsed time (ms): " + elapsed / 1000000); + } return responseAPDU; } @@ -254,16 +273,20 @@ public class CardMngr { } public ResponseAPDU sendAPDUSimulator(CommandAPDU apdu) { - System.out.println(">>>>"); - System.out.println(apdu); - System.out.println(Util.bytesToHex(apdu.getBytes())); + if (verbose) { + System.out.println(">>>>"); + System.out.println(apdu); + System.out.println(Util.bytesToHex(apdu.getBytes())); + } ResponseAPDU response = simulator.transmitCommand(apdu); byte[] responseBytes = response.getBytes(); - System.out.println(response); - System.out.println(Util.bytesToHex(responseBytes)); - System.out.println("<<<<"); + if (verbose) { + System.out.println(response); + System.out.println(Util.bytesToHex(responseBytes)); + System.out.println("<<<<"); + } return response; } diff --git a/src/cz/crcs/ectester/reader/ECTester.java b/src/cz/crcs/ectester/reader/ECTester.java index d94279e..c4d29a5 100644 --- a/src/cz/crcs/ectester/reader/ECTester.java +++ b/src/cz/crcs/ectester/reader/ECTester.java @@ -73,7 +73,8 @@ public class ECTester { private String optLog = null; - private String optInput; + private boolean optVerbose = false; + private String optInput = null; private String optOutput = null; private boolean optFresh = false; private boolean optSimulate = false; @@ -119,7 +120,7 @@ public class ECTester { } //init CardManager - cardManager = new CardMngr(optSimulate); + cardManager = new CardMngr(optVerbose, optSimulate); //connect or simulate connection if (optSimulate) { @@ -213,6 +214,9 @@ public class ECTester { * -k / --key [key_file] wx,wy,s * -nk / --named-key [cat/id] * + * -v / --verbose + * + * -i / --input [input_file] * -o / --output [output_file] * -f / --fresh * -s / --simulate @@ -260,6 +264,7 @@ public class ECTester { opts.addOption(Option.builder("i").longOpt("input").desc("Input from fileĀ [input_file], for ecdsa signing.").hasArg().argName("input_file").build()); opts.addOption(Option.builder("o").longOpt("output").desc("Output into file [output_file].").hasArg().argName("output_file").build()); opts.addOption(Option.builder("l").longOpt("log").desc("Log output into file [log_file].").hasArg().argName("log_file").optionalArg(true).build()); + opts.addOption(Option.builder("v").longOpt("verbose").desc("Turn on verbose logging.").build()); opts.addOption(Option.builder("f").longOpt("fresh").desc("Generate fresh keys(set domain parameters before every generation).").build()); opts.addOption(Option.builder("s").longOpt("simulate").desc("Simulate a card with jcardsim instead of using a terminal.").build()); @@ -295,6 +300,8 @@ public class ECTester { if (cli.hasOption("log")) { optLog = cli.getOptionValue("log", String.format("ECTESTER_log_%d.log", System.currentTimeMillis() / 1000)); } + + optVerbose = cli.hasOption("verbose"); optInput = cli.getOptionValue("input"); optOutput = cli.getOptionValue("output"); optFresh = cli.hasOption("fresh"); diff --git a/src/cz/crcs/ectester/reader/Response.java b/src/cz/crcs/ectester/reader/Response.java index cdf82fc..28b6c17 100644 --- a/src/cz/crcs/ectester/reader/Response.java +++ b/src/cz/crcs/ectester/reader/Response.java @@ -119,7 +119,9 @@ public abstract class Response { public static String toString(List<Response> responses) { StringBuilder out = new StringBuilder(); - for (Response r : responses) { + for (int i = 0; i < responses.size(); ++i) { + Response r = responses.get(i); + String message = r.toString(); String suffix; if (r.getNumSW() == 1) { @@ -127,7 +129,10 @@ public abstract class Response { } else { suffix = String.format("%s %s", Util.getPrintError(r.getSW1()), Util.getPrintError(r.getSW2())); } - out.append(String.format("%-55s: %5d ms : %s\n", message, r.time/1000000, suffix)); + out.append(String.format("%-55s: %5d ms : %s", message, r.time/1000000, suffix)); + if (i < responses.size() - 1) { + out.append("\n"); + } } return out.toString(); } |
