diff options
| -rw-r--r-- | !uploader/ectester.cap | bin | 13573 -> 13592 bytes | |||
| -rw-r--r-- | dist/ECTester.jar | bin | 218187 -> 221080 bytes | |||
| -rw-r--r-- | src/cz/crcs/ectester/applet/EC_Consts.java | 7 | ||||
| -rw-r--r-- | src/cz/crcs/ectester/reader/Command.java | 20 | ||||
| -rw-r--r-- | src/cz/crcs/ectester/reader/ECTester.java | 27 | ||||
| -rw-r--r-- | src/cz/crcs/ectester/reader/Response.java | 18 |
6 files changed, 59 insertions, 13 deletions
diff --git a/!uploader/ectester.cap b/!uploader/ectester.cap Binary files differindex dec01be..ace0044 100644 --- a/!uploader/ectester.cap +++ b/!uploader/ectester.cap diff --git a/dist/ECTester.jar b/dist/ECTester.jar Binary files differindex 6f8c516..2749d89 100644 --- a/dist/ECTester.jar +++ b/dist/ECTester.jar 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"); + } + } } |
