summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorJ08nY2019-03-18 14:29:11 +0100
committerJ08nY2019-03-18 14:29:11 +0100
commitb99057bc15e72397f3951ddee28d4db481caad02 (patch)
treec6a64abe5d38c7f0a76cc6890626320513f855ad
parent9bd35dfc2e5e6c4fca10a67080743afdf043eaf1 (diff)
downloadECTester-b99057bc15e72397f3951ddee28d4db481caad02.tar.gz
ECTester-b99057bc15e72397f3951ddee28d4db481caad02.tar.zst
ECTester-b99057bc15e72397f3951ddee28d4db481caad02.zip
-rw-r--r--src/cz/crcs/ectester/reader/ECTesterReader.java53
1 files changed, 43 insertions, 10 deletions
diff --git a/src/cz/crcs/ectester/reader/ECTesterReader.java b/src/cz/crcs/ectester/reader/ECTesterReader.java
index 8e0c62b..6e34f6a 100644
--- a/src/cz/crcs/ectester/reader/ECTesterReader.java
+++ b/src/cz/crcs/ectester/reader/ECTesterReader.java
@@ -81,9 +81,12 @@ public class ECTesterReader {
private static String CLI_FOOTER = "\n" + LICENSE;
private static final byte[] SELECT_PREFIX = {(byte) 0x00, (byte) 0xa4, (byte) 0x04, (byte) 0x00, (byte) 0x0c};
- private static final byte[] AID_221 = {(byte) 0x45, (byte) 0x43, (byte) 0x54, (byte) 0x65, (byte) 0x73, (byte) 0x74, (byte) 0x65, (byte) 0x72, (byte) 0x30, (byte) 0x33, (byte) 0x33, (byte) 0x62}; // VERSION v0.3.3
- private static final byte[] AID_222 = {(byte) 0x45, (byte) 0x43, (byte) 0x54, (byte) 0x65, (byte) 0x73, (byte) 0x74, (byte) 0x65, (byte) 0x72, (byte) 0x30, (byte) 0x33, (byte) 0x33, (byte) 0x78}; // VERSION v0.3.3
+ private static final byte[] AID_PREFIX = {(byte) 0x45, (byte) 0x43, (byte) 0x54, (byte) 0x65, (byte) 0x73, (byte) 0x74, (byte) 0x65, (byte) 0x72};
+ private static final byte[] AID_CURRENT_VERSION = {(byte) 0x30, (byte) 0x33, (byte) 0x33}; // VERSION v0.3.3
+ private static final byte[] AID_SUFFIX_221 = {(byte) 0x62};
+ private static final byte[] AID_SUFFIX_222 = {(byte) 0x78};
private static final byte[] INSTALL_DATA = new byte[10];
+ private static final int TRY_VERSIONS = 10;
static {
URLClassLoader cl = (URLClassLoader) ECTesterReader.class.getClassLoader();
@@ -136,7 +139,7 @@ public class ECTesterReader {
//connect or simulate connection
if (cfg.simulate) {
- if (!cardManager.prepareLocalSimulatorApplet(AID_221, INSTALL_DATA, ECTesterApplet.class)) {
+ if (!cardManager.prepareLocalSimulatorApplet(ByteUtil.concatenate(AID_PREFIX, AID_CURRENT_VERSION, AID_SUFFIX_221), INSTALL_DATA, ECTesterApplet.class)) {
System.err.println(Colors.error("Failed to establish a simulator."));
System.exit(1);
} else {
@@ -147,17 +150,47 @@ public class ECTesterReader {
System.err.println(Colors.error("Failed to connect to card."));
System.exit(1);
}
- ResponseAPDU selectResp = cardManager.send(ByteUtil.concatenate(SELECT_PREFIX, AID_222));
- if ((short) selectResp.getSW() != ISO7816.SW_NO_ERROR) {
- selectResp = cardManager.send(ByteUtil.concatenate(SELECT_PREFIX, AID_221));
+ //Try the highest known version first
+ byte[] versionByte = AID_CURRENT_VERSION.clone();
+ boolean selected = false;
+ for (int i = 0; i < TRY_VERSIONS; ++i) {
+ byte[] select222 = ByteUtil.concatenate(SELECT_PREFIX, AID_PREFIX, versionByte, AID_SUFFIX_222);
+ ResponseAPDU selectResp = cardManager.send(select222);
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);
+ byte[] select221 = ByteUtil.concatenate(SELECT_PREFIX, AID_PREFIX, versionByte, AID_SUFFIX_221);
+ selectResp = cardManager.send(select221);
+ if ((short) selectResp.getSW() == ISO7816.SW_NO_ERROR) {
+ cardManager.setChunking(true);
+ selected = true;
+ break;
+ }
+ } else {
+ selected = true;
+ break;
+ }
+ // Count down by versions
+ if (versionByte[2] == 0x30) {
+ if (versionByte[1] == 0x30) {
+ if (versionByte[0] == 0x30) {
+ break;
+ } else {
+ versionByte[0]--;
+ versionByte[1] = 0x39;
+ versionByte[2] = 0x39;
+ }
+ } else {
+ versionByte[1]--;
+ versionByte[2] = 0x39;
+ }
} else {
- cardManager.setChunking(true);
+ versionByte[2]--;
}
}
+ if (!selected) {
+ System.err.println(Colors.error("Failed to select ECTester applet, is it installed?"));
+ cardManager.disconnectFromCard();
+ System.exit(1);
+ }
}
// Setup logger and respWriter