aboutsummaryrefslogtreecommitdiff
path: root/src/cz
diff options
context:
space:
mode:
Diffstat (limited to 'src/cz')
-rw-r--r--src/cz/crcs/ectester/applet/AppletBase.java9
-rw-r--r--src/cz/crcs/ectester/applet/ECTesterApplet.java2
-rw-r--r--src/cz/crcs/ectester/applet/ECTesterAppletExtended.java2
-rw-r--r--src/cz/crcs/ectester/reader/CardMngr.java13
-rw-r--r--src/cz/crcs/ectester/reader/ECTesterReader.java21
5 files changed, 31 insertions, 16 deletions
diff --git a/src/cz/crcs/ectester/applet/AppletBase.java b/src/cz/crcs/ectester/applet/AppletBase.java
index 94f790b..31ddbd9 100644
--- a/src/cz/crcs/ectester/applet/AppletBase.java
+++ b/src/cz/crcs/ectester/applet/AppletBase.java
@@ -97,10 +97,13 @@ public abstract class AppletBase extends Applet {
// go to proprietary data
dataOffset++;
*/
+ short resetMemory = JCSystem.getAvailableMemory(JCSystem.MEMORY_TYPE_TRANSIENT_RESET);
+ short deselectMemory = JCSystem.getAvailableMemory(JCSystem.MEMORY_TYPE_TRANSIENT_DESELECT);
+ byte memoryType = (resetMemory > deselectMemory) ? JCSystem.CLEAR_ON_RESET : JCSystem.CLEAR_ON_DESELECT;
- ramArray = JCSystem.makeTransientByteArray(ARRAY_LENGTH, JCSystem.CLEAR_ON_RESET);
- ramArray2 = JCSystem.makeTransientByteArray(ARRAY_LENGTH, JCSystem.CLEAR_ON_RESET);
- apduArray = JCSystem.makeTransientByteArray(APDU_MAX_LENGTH, JCSystem.CLEAR_ON_RESET);
+ ramArray = JCSystem.makeTransientByteArray(ARRAY_LENGTH, memoryType);
+ ramArray2 = JCSystem.makeTransientByteArray(ARRAY_LENGTH, memoryType);
+ apduArray = JCSystem.makeTransientByteArray(APDU_MAX_LENGTH, memoryType);
randomData = RandomData.getInstance(RandomData.ALG_SECURE_RANDOM);
EC_Consts.randomData = randomData;
diff --git a/src/cz/crcs/ectester/applet/ECTesterApplet.java b/src/cz/crcs/ectester/applet/ECTesterApplet.java
index 95009aa..b222d46 100644
--- a/src/cz/crcs/ectester/applet/ECTesterApplet.java
+++ b/src/cz/crcs/ectester/applet/ECTesterApplet.java
@@ -22,7 +22,7 @@
*/
/*
* PACKAGEID: 4543546573746572
- * APPLETID: 45435465737465723031
+ * APPLETID: 454354657374657230333262 // VERSION v0.3.2
*/
package cz.crcs.ectester.applet;
diff --git a/src/cz/crcs/ectester/applet/ECTesterAppletExtended.java b/src/cz/crcs/ectester/applet/ECTesterAppletExtended.java
index 8ddfeb9..c31544a 100644
--- a/src/cz/crcs/ectester/applet/ECTesterAppletExtended.java
+++ b/src/cz/crcs/ectester/applet/ECTesterAppletExtended.java
@@ -22,7 +22,7 @@
*/
/*
* PACKAGEID: 4543546573746572
- * APPLETID: 45435465737465723031
+ * APPLETID: 454354657374657230333278 // VERSION v0.3.2
*/
package cz.crcs.ectester.applet;
diff --git a/src/cz/crcs/ectester/reader/CardMngr.java b/src/cz/crcs/ectester/reader/CardMngr.java
index 5479f31..abbc440 100644
--- a/src/cz/crcs/ectester/reader/CardMngr.java
+++ b/src/cz/crcs/ectester/reader/CardMngr.java
@@ -23,7 +23,7 @@ public class CardMngr {
private boolean simulate = false;
private boolean verbose = true;
- private boolean extendedLength = false;
+ private boolean chunking = false;
private final byte[] selectCM = {
(byte) 0x00, (byte) 0xa4, (byte) 0x04, (byte) 0x00, (byte) 0x07, (byte) 0xa0, (byte) 0x00, (byte) 0x00,
@@ -59,6 +59,9 @@ public class CardMngr {
if (verbose)
System.out.println("T=1 failed, trying protocol '*'");
card = terminal.connect("*");
+ if (card.getProtocol().equals("T=0")) {
+ chunking = true;
+ }
}
}
@@ -176,6 +179,10 @@ public class CardMngr {
}
}
+ public void setChunking(boolean state) {
+ chunking = state;
+ }
+
// Functions for CPLC taken and modified from https://github.com/martinpaljak/GlobalPlatformPro
private static final byte CLA_GP = (byte) 0x80;
private static final byte ISO7816_INS_GET_DATA = (byte) 0xCA;
@@ -330,7 +337,7 @@ public class CardMngr {
}
long elapsed;
- if (card.getProtocol().equals("T=0") && apdu.getNc() >= 0xff) {
+ if (chunking && apdu.getNc() >= 0xff) {
if (verbose) {
System.out.print("Chunking:");
}
@@ -407,7 +414,7 @@ public class CardMngr {
}
/*
- if (apdu.getNc() >= 0xff) {
+ if (chunking && apdu.getNc() >= 0xff) {
byte[] data = apdu.getBytes();
int numChunks = (data.length + 254) / 255;
for (int i = 0; i < numChunks; ++i) {
diff --git a/src/cz/crcs/ectester/reader/ECTesterReader.java b/src/cz/crcs/ectester/reader/ECTesterReader.java
index 9447814..ab21cd9 100644
--- a/src/cz/crcs/ectester/reader/ECTesterReader.java
+++ b/src/cz/crcs/ectester/reader/ECTesterReader.java
@@ -81,9 +81,9 @@ public class ECTesterReader {
private static String CLI_HEADER;
private static String CLI_FOOTER = "\n" + LICENSE;
- private static final byte[] SELECT_ECTESTERAPPLET = {(byte) 0x00, (byte) 0xa4, (byte) 0x04, (byte) 0x00, (byte) 0x0a,
- (byte) 0x45, (byte) 0x43, (byte) 0x54, (byte) 0x65, (byte) 0x73, (byte) 0x74, (byte) 0x65, (byte) 0x72, (byte) 0x30, (byte) 0x31};
- private static final byte[] AID = {(byte) 0x45, (byte) 0x43, (byte) 0x54, (byte) 0x65, (byte) 0x73, (byte) 0x74, (byte) 0x65, (byte) 0x72, (byte) 0x30, (byte) 0x31};
+ 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) 0x32, (byte) 0x62}; // VERSION v0.3.2
+ 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) 0x32, (byte) 0x78}; // VERSION v0.3.2
private static final byte[] INSTALL_DATA = new byte[10];
static {
@@ -137,7 +137,7 @@ public class ECTesterReader {
//connect or simulate connection
if (cfg.simulate) {
- if (!cardManager.prepareLocalSimulatorApplet(AID, INSTALL_DATA, ECTesterApplet.class)) {
+ if (!cardManager.prepareLocalSimulatorApplet(AID_221, INSTALL_DATA, ECTesterApplet.class)) {
System.err.println(Colors.error("Failed to establish a simulator."));
System.exit(1);
}
@@ -146,11 +146,16 @@ public class ECTesterReader {
System.err.println(Colors.error("Failed to connect to card."));
System.exit(1);
}
- ResponseAPDU selectResp = cardManager.send(SELECT_ECTESTERAPPLET);
+ ResponseAPDU selectResp = cardManager.send(ByteUtil.concatenate(SELECT_PREFIX, AID_222));
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);
+ selectResp = cardManager.send(ByteUtil.concatenate(SELECT_PREFIX, AID_221));
+ 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);
+ } else {
+ cardManager.setChunking(true);
+ }
}
}