aboutsummaryrefslogtreecommitdiff
path: root/src/cz/crcs/ectester/reader/ECTester.java
diff options
context:
space:
mode:
Diffstat (limited to 'src/cz/crcs/ectester/reader/ECTester.java')
-rw-r--r--src/cz/crcs/ectester/reader/ECTester.java139
1 files changed, 80 insertions, 59 deletions
diff --git a/src/cz/crcs/ectester/reader/ECTester.java b/src/cz/crcs/ectester/reader/ECTester.java
index 2f26275..247a260 100644
--- a/src/cz/crcs/ectester/reader/ECTester.java
+++ b/src/cz/crcs/ectester/reader/ECTester.java
@@ -24,7 +24,7 @@ package cz.crcs.ectester.reader;
import cz.crcs.ectester.applet.ECTesterApplet;
import cz.crcs.ectester.applet.EC_Consts;
import cz.crcs.ectester.data.EC_Category;
-import cz.crcs.ectester.data.EC_Data;
+import cz.crcs.ectester.data.EC_Store;
import cz.crcs.ectester.reader.ec.EC_Curve;
import cz.crcs.ectester.reader.ec.EC_Key;
import cz.crcs.ectester.reader.ec.EC_Keypair;
@@ -47,7 +47,7 @@ public class ECTester {
private CardMngr cardManager;
private DirtyLogger systemOutLogger;
- private EC_Data dataDB;
+ private EC_Store dataStore;
//Options
private int optBits;
@@ -108,7 +108,7 @@ public class ECTester {
return;
}
- dataDB = new EC_Data();
+ dataStore = new EC_Store();
//if list, print and quit
if (cli.hasOption("list-named")) {
list();
@@ -462,7 +462,7 @@ public class ECTester {
* List categories and named curves.
*/
private void list() {
- Map<String, EC_Category> categories = dataDB.getCategories();
+ Map<String, EC_Category> categories = dataStore.getCategories();
for (EC_Category cat : categories.values()) {
System.out.println("\t- " + cat.getName() + ": " + (cat.getDesc() == null ? "" : cat.getDesc()));
@@ -597,34 +597,16 @@ public class ECTester {
List<Command> commands = new LinkedList<>();
if (optTestCase.equalsIgnoreCase("default")) {
- if (optAll) {
- if (optNamedCurve != null) {
- Map<String, EC_Curve> curves = dataDB.getObjects(EC_Curve.class, optNamedCurve);
- if (optPrimeField) {
- for (Map.Entry<String, EC_Curve> entry : curves.entrySet()) {
- EC_Curve curve = entry.getValue();
- if (curve.getField() == KeyPair.ALG_EC_FP) {
- commands.add(new Command.Allocate(cardManager, ECTesterApplet.KEYPAIR_BOTH, curve.getBits(), KeyPair.ALG_EC_FP));
- 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));
- }
- }
- }
- if (optBinaryField) {
- for (Map.Entry<String, EC_Curve> entry : curves.entrySet()) {
- EC_Curve curve = entry.getValue();
- if (curve.getField() == KeyPair.ALG_EC_F2M) {
- commands.add(new Command.Allocate(cardManager, ECTesterApplet.KEYPAIR_BOTH, curve.getBits(), KeyPair.ALG_EC_F2M));
- 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));
- }
- }
- }
- } else {
+
+ if (optNamedCurve != null) {
+ if (optPrimeField) {
+ commands.addAll(testCurves(optNamedCurve, KeyPair.ALG_EC_FP));
+ }
+ if (optBinaryField) {
+ commands.addAll(testCurves(optNamedCurve, KeyPair.ALG_EC_F2M));
+ }
+ } else {
+ if (optAll) {
if (optPrimeField) {
//iterate over prime curve sizes used: EC_Consts.FP_SIZES
for (short keyLength : EC_Consts.FP_SIZES) {
@@ -643,32 +625,41 @@ public class ECTester {
commands.add(new Command.Cleanup(cardManager));
}
}
- }
- } else {
- if (optPrimeField) {
- 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));
- }
+ } else {
+ if (optPrimeField) {
+ 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));
+ 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")) {
-
+ if (optPrimeField) {
+ commands.addAll(testCurves("wrong", KeyPair.ALG_EC_FP));
+ }
+ if (optBinaryField) {
+ commands.addAll(testCurves("wrong", KeyPair.ALG_EC_F2M));
+ }
} else if (optTestCase.equalsIgnoreCase("non-prime")) {
+ } else if (optTestCase.equalsIgnoreCase("smallpub")) {
+
} else if (optTestCase.equalsIgnoreCase("invalid")) {
}
List<Response> test = Command.sendAll(commands);
systemOutLogger.println(Response.toString(test));
+
+ //
}
/**
@@ -685,15 +676,14 @@ public class ECTester {
systemOutLogger.println(Response.toString(prepare));
+ byte pubkey = (optAnyPublic || optAnyKey) ? ECTesterApplet.KEYPAIR_REMOTE : ECTesterApplet.KEYPAIR_LOCAL;
+ byte privkey = (optAnyPrivate || optAnyKey) ? ECTesterApplet.KEYPAIR_REMOTE : ECTesterApplet.KEYPAIR_LOCAL;
+
List<Command> generate = new LinkedList<>();
+ generate.add(new Command.Generate(cardManager, ECTesterApplet.KEYPAIR_BOTH));
if (optAnyPublic || optAnyPrivate || optAnyKey) {
- generate.add(new Command.Generate(cardManager, ECTesterApplet.KEYPAIR_LOCAL));
generate.add(prepareKey(ECTesterApplet.KEYPAIR_REMOTE));
- } else {
- generate.add(new Command.Generate(cardManager, ECTesterApplet.KEYPAIR_BOTH));
}
- byte pubkey = (optAnyPublic || optAnyKey) ? ECTesterApplet.KEYPAIR_REMOTE : ECTesterApplet.KEYPAIR_LOCAL;
- byte privkey = (optAnyPrivate || optAnyKey) ? ECTesterApplet.KEYPAIR_REMOTE : ECTesterApplet.KEYPAIR_LOCAL;
FileWriter out = null;
if (optOutput != null) {
@@ -816,7 +806,7 @@ public class ECTester {
} else if (optNamedCurve != null) {
// Set a named curve.
// parse optNamedCurve -> cat / id | cat | id
- EC_Curve curve = dataDB.getObject(EC_Curve.class, optNamedCurve);
+ EC_Curve curve = dataStore.getObject(EC_Curve.class, optNamedCurve);
if (curve == null) {
throw new IOException("Curve could no be found.");
}
@@ -873,7 +863,7 @@ public class ECTester {
keypair.readCSV(in);
in.close();
} else {
- keypair = dataDB.getObject(EC_Keypair.class, optNamedKey);
+ keypair = dataStore.getObject(EC_Keypair.class, optNamedKey);
}
data = keypair.flatten();
@@ -892,12 +882,15 @@ public class ECTester {
pub.readCSV(in);
in.close();
} else {
- pub = dataDB.getObject(EC_Key.Public.class, optNamedPublic);
+ pub = dataStore.getObject(EC_Key.Public.class, optNamedPublic);
+ if (pub == null) {
+ pub = dataStore.getObject(EC_Keypair.class, optNamedPublic);
+ }
}
- byte[] pubkey = pub.flatten();
+ byte[] pubkey = pub.flatten(EC_Consts.PARAMETER_W);
if (pubkey == null) {
- throw new IOException("Couldn't read the key file correctly.");
+ throw new IOException("Couldn't read the public key file correctly.");
}
data = pubkey;
}
@@ -911,12 +904,15 @@ public class ECTester {
priv.readCSV(in);
in.close();
} else {
- priv = dataDB.getObject(EC_Key.Public.class, optNamedPrivate);
+ priv = dataStore.getObject(EC_Key.Public.class, optNamedPrivate);
+ if (priv == null) {
+ priv = dataStore.getObject(EC_Keypair.class, optNamedPrivate);
+ }
}
- byte[] privkey = priv.flatten();
+ byte[] privkey = priv.flatten(EC_Consts.PARAMETER_S);
if (privkey == null) {
- throw new IOException("Couldn't read the key file correctly.");
+ throw new IOException("Couldn't read the private key file correctly.");
}
data = Util.concatenate(data, privkey);
}
@@ -939,6 +935,31 @@ public class ECTester {
return commands;
}
+ /**
+ * @param category
+ * @param field
+ * @return
+ * @throws IOException
+ */
+ private List<Command> testCurves(String category, byte field) throws IOException {
+ List<Command> commands = new LinkedList<>();
+ Map<String, EC_Curve> curves = dataStore.getObjects(EC_Curve.class, category);
+ if (curves == null)
+ return commands;
+ for (Map.Entry<String, EC_Curve> entry : curves.entrySet()) {
+ EC_Curve curve = entry.getValue();
+ if (curve.getField() == field && (curve.getBits() == optBits || optAll)) {
+ commands.add(new Command.Allocate(cardManager, ECTesterApplet.KEYPAIR_BOTH, curve.getBits(), field));
+ 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));
+ }
+ }
+
+ return commands;
+ }
+
public static void main(String[] args) {
ECTester app = new ECTester();
app.run(args);