aboutsummaryrefslogtreecommitdiff
path: root/src
diff options
context:
space:
mode:
Diffstat (limited to 'src')
-rw-r--r--src/cz/crcs/ectester/applet/EC_Consts.java7
-rw-r--r--src/cz/crcs/ectester/reader/Command.java20
-rw-r--r--src/cz/crcs/ectester/reader/ECTester.java27
-rw-r--r--src/cz/crcs/ectester/reader/Response.java18
4 files changed, 59 insertions, 13 deletions
diff --git a/src/cz/crcs/ectester/applet/EC_Consts.java b/src/cz/crcs/ectester/applet/EC_Consts.java
index 50f14a9..89cd8c9 100644
--- a/src/cz/crcs/ectester/applet/EC_Consts.java
+++ b/src/cz/crcs/ectester/applet/EC_Consts.java
@@ -947,7 +947,8 @@ public class EC_Consts {
public static final byte CORRUPTION_ONEBYTERANDOM = (byte) 0x03;
public static final byte CORRUPTION_ZERO = (byte) 0x04;
public static final byte CORRUPTION_ONE = (byte) 0x05;
- public static final byte CORRUPTION_INCREMENT = (byte) 0x06;
+ public static final byte CORRUPTION_MAX = (byte) 0x06;
+ public static final byte CORRUPTION_INCREMENT = (byte) 0x07;
// Supported embedded curves, getCurveParameter
@@ -1259,6 +1260,10 @@ public class EC_Consts {
Util.arrayFillNonAtomic(buffer, offset, length, (byte) 0);
break;
case CORRUPTION_ONE:
+ Util.arrayFillNonAtomic(buffer, offset, length, (byte) 0);
+ buffer[(short) (offset + length)] = (byte) 1;
+ break;
+ case CORRUPTION_MAX:
Util.arrayFillNonAtomic(buffer, offset, length, (byte) 1);
break;
case CORRUPTION_INCREMENT:
diff --git a/src/cz/crcs/ectester/reader/Command.java b/src/cz/crcs/ectester/reader/Command.java
index 876e999..c5cef00 100644
--- a/src/cz/crcs/ectester/reader/Command.java
+++ b/src/cz/crcs/ectester/reader/Command.java
@@ -319,5 +319,25 @@ public abstract class Command {
return new Response.ECDSA(response, elapsed, keyPair, export, raw);
}
}
+
+ /**
+ *
+ */
+ public static class Cleanup extends Command {
+
+ protected Cleanup(CardMngr cardManager) {
+ super(cardManager);
+
+ this.cmd = new CommandAPDU(ECTesterApplet.CLA_ECTESTERAPPLET, ECTesterApplet.INS_CLEANUP, 0, 0);
+ }
+
+ @Override
+ public Response.Cleanup send() throws CardException {
+ long elapsed = -System.nanoTime();
+ ResponseAPDU response = cardManager.send(cmd);
+ elapsed += System.nanoTime();
+ return new Response.Cleanup(response, elapsed);
+ }
+ }
}
diff --git a/src/cz/crcs/ectester/reader/ECTester.java b/src/cz/crcs/ectester/reader/ECTester.java
index 9398a69..f70c119 100644
--- a/src/cz/crcs/ectester/reader/ECTester.java
+++ b/src/cz/crcs/ectester/reader/ECTester.java
@@ -45,9 +45,9 @@ import java.util.*;
*/
public class ECTester {
- private CardMngr cardManager = null;
- private DirtyLogger systemOutLogger = null;
- private EC_Data dataDB = null;
+ private CardMngr cardManager;
+ private DirtyLogger systemOutLogger;
+ private EC_Data dataDB;
//Options
private int optBits;
@@ -401,13 +401,10 @@ public class ECTester {
}
optTestCase = cli.getOptionValue("test", "default");
- List<String> tests = Arrays.asList("default", "non-prime", "invalid", "wrong");
- if (!tests.contains(optTestCase)) {
- System.err.print("Unknown test case. Should be one of: [");
- for (String test : tests) {
- System.err.print("\"" + test + "\",");
- }
- System.err.println("]");
+ String[] tests = new String[]{"default", "non-prime", "invalid", "wrong"};
+ List<String> testsList = Arrays.asList(tests);
+ if (!testsList.contains(optTestCase)) {
+ System.err.println("Unknown test case. Should be one of: " + Arrays.toString(tests));
return false;
}
@@ -602,6 +599,7 @@ public class ECTester {
byte[] external = curve.flatten();
commands.add(new Command.Set(cardManager, ECTesterApplet.KEYPAIR_BOTH, EC_Consts.CURVE_external, curve.getParams(), external));
commands.addAll(testCurve());
+ commands.add(new Command.Cleanup(cardManager));
}
}
}
@@ -613,6 +611,7 @@ public class ECTester {
byte[] external = curve.flatten();
commands.add(new Command.Set(cardManager, ECTesterApplet.KEYPAIR_BOTH, EC_Consts.CURVE_external, curve.getParams(), external));
commands.addAll(testCurve());
+ commands.add(new Command.Cleanup(cardManager));
}
}
}
@@ -623,6 +622,7 @@ public class ECTester {
commands.add(new Command.Allocate(cardManager, ECTesterApplet.KEYPAIR_BOTH, keyLength, KeyPair.ALG_EC_FP));
commands.addAll(prepareCurve(ECTesterApplet.KEYPAIR_BOTH, keyLength, KeyPair.ALG_EC_FP));
commands.addAll(testCurve());
+ commands.add(new Command.Cleanup(cardManager));
}
}
if (optBinaryField) {
@@ -631,6 +631,7 @@ public class ECTester {
commands.add(new Command.Allocate(cardManager, ECTesterApplet.KEYPAIR_BOTH, keyLength, KeyPair.ALG_EC_F2M));
commands.addAll(prepareCurve(ECTesterApplet.KEYPAIR_BOTH, keyLength, KeyPair.ALG_EC_F2M));
commands.addAll(testCurve());
+ commands.add(new Command.Cleanup(cardManager));
}
}
}
@@ -639,12 +640,14 @@ public class ECTester {
commands.add(new Command.Allocate(cardManager, ECTesterApplet.KEYPAIR_BOTH, (short) optBits, KeyPair.ALG_EC_FP));
commands.addAll(prepareCurve(ECTesterApplet.KEYPAIR_BOTH, (short) optBits, KeyPair.ALG_EC_FP));
commands.addAll(testCurve());
+ commands.add(new Command.Cleanup(cardManager));
}
if (optBinaryField) {
commands.add(new Command.Allocate(cardManager, ECTesterApplet.KEYPAIR_BOTH, (short) optBits, KeyPair.ALG_EC_F2M));
commands.addAll(prepareCurve(ECTesterApplet.KEYPAIR_BOTH, (short) optBits, KeyPair.ALG_EC_F2M));
commands.addAll(testCurve());
+ commands.add(new Command.Cleanup(cardManager));
}
}
} else if (optTestCase.equalsIgnoreCase("wrong")) {
@@ -655,7 +658,6 @@ public class ECTester {
}
-
List<Response> test = Command.sendAll(commands);
systemOutLogger.println(Response.toString(test));
}
@@ -920,9 +922,10 @@ public class ECTester {
List<Command> commands = new LinkedList<>();
commands.add(new Command.Generate(cardManager, ECTesterApplet.KEYPAIR_BOTH));
commands.add(new Command.ECDH(cardManager, ECTesterApplet.KEYPAIR_LOCAL, ECTesterApplet.KEYPAIR_REMOTE, ECTesterApplet.EXPORT_FALSE, EC_Consts.CORRUPTION_NONE));
- commands.add(new Command.ECDH(cardManager, ECTesterApplet.KEYPAIR_LOCAL, ECTesterApplet.KEYPAIR_REMOTE, ECTesterApplet.EXPORT_FALSE, EC_Consts.CORRUPTION_FULLRANDOM));
commands.add(new Command.ECDH(cardManager, ECTesterApplet.KEYPAIR_LOCAL, ECTesterApplet.KEYPAIR_REMOTE, ECTesterApplet.EXPORT_FALSE, EC_Consts.CORRUPTION_ONE));
commands.add(new Command.ECDH(cardManager, ECTesterApplet.KEYPAIR_LOCAL, ECTesterApplet.KEYPAIR_REMOTE, ECTesterApplet.EXPORT_FALSE, EC_Consts.CORRUPTION_ZERO));
+ commands.add(new Command.ECDH(cardManager, ECTesterApplet.KEYPAIR_LOCAL, ECTesterApplet.KEYPAIR_REMOTE, ECTesterApplet.EXPORT_FALSE, EC_Consts.CORRUPTION_MAX));
+ commands.add(new Command.ECDH(cardManager, ECTesterApplet.KEYPAIR_LOCAL, ECTesterApplet.KEYPAIR_REMOTE, ECTesterApplet.EXPORT_FALSE, EC_Consts.CORRUPTION_FULLRANDOM));
commands.add(new Command.ECDSA(cardManager, ECTesterApplet.KEYPAIR_LOCAL, ECTesterApplet.EXPORT_FALSE, null));
return commands;
}
diff --git a/src/cz/crcs/ectester/reader/Response.java b/src/cz/crcs/ectester/reader/Response.java
index 7cc85bf..691bc5a 100644
--- a/src/cz/crcs/ectester/reader/Response.java
+++ b/src/cz/crcs/ectester/reader/Response.java
@@ -488,6 +488,24 @@ public abstract class Response {
String data = raw == null ? "random" : "provided";
return String.format("ECDSA with %s keypair(%s data)", key, data);
}
+ }
+
+ /**
+ *
+ */
+ public static class Cleanup extends Response {
+
+ protected Cleanup(ResponseAPDU response, long time) {
+ super(response, time);
+
+ parse(1, 0);
+ }
+
+ @Override
+ public String toString() {
+ return String.format("Requested JCSystem object deletion");
+ }
+
}
}