aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--common/src/main/java/cz/crcs/ectester/common/output/BaseFileTestWriter.java27
-rw-r--r--reader/src/main/java/cz/crcs/ectester/reader/output/FileTestWriter.java33
-rw-r--r--standalone/src/main/java/cz/crcs/ectester/standalone/ECTesterStandalone.java35
-rw-r--r--standalone/src/main/java/cz/crcs/ectester/standalone/output/FileTestWriter.java50
4 files changed, 100 insertions, 45 deletions
diff --git a/common/src/main/java/cz/crcs/ectester/common/output/BaseFileTestWriter.java b/common/src/main/java/cz/crcs/ectester/common/output/BaseFileTestWriter.java
new file mode 100644
index 0000000..523a92f
--- /dev/null
+++ b/common/src/main/java/cz/crcs/ectester/common/output/BaseFileTestWriter.java
@@ -0,0 +1,27 @@
+package cz.crcs.ectester.common.output;
+
+import javax.xml.parsers.ParserConfigurationException;
+import java.io.FileNotFoundException;
+import java.io.FileOutputStream;
+import java.io.PrintStream;
+
+public abstract class BaseFileTestWriter extends TeeTestWriter {
+
+ public BaseFileTestWriter(String defaultFormat, boolean systemOut, String[] files) throws ParserConfigurationException, FileNotFoundException {
+ int fLength = files == null ? 0 : files.length;
+ writers = new TestWriter[systemOut ? fLength + 1 : fLength];
+ if (systemOut) {
+ writers[0] = createWriter(defaultFormat, System.out);
+ }
+ for (int i = 0; i < fLength; ++i) {
+ String[] matched = matchName(files[i]);
+ String format = matched[0];
+ String fName = matched[1];
+ writers[i + 1] = createWriter(format, new PrintStream(new FileOutputStream(fName)));
+ }
+ }
+
+ protected abstract String[] matchName(String name);
+
+ protected abstract TestWriter createWriter(String format, PrintStream out) throws ParserConfigurationException;
+}
diff --git a/reader/src/main/java/cz/crcs/ectester/reader/output/FileTestWriter.java b/reader/src/main/java/cz/crcs/ectester/reader/output/FileTestWriter.java
index 69e5f41..da8dbfc 100644
--- a/reader/src/main/java/cz/crcs/ectester/reader/output/FileTestWriter.java
+++ b/reader/src/main/java/cz/crcs/ectester/reader/output/FileTestWriter.java
@@ -1,40 +1,37 @@
package cz.crcs.ectester.reader.output;
-import cz.crcs.ectester.common.output.TeeTestWriter;
+import cz.crcs.ectester.common.output.BaseFileTestWriter;
import cz.crcs.ectester.common.output.TestWriter;
import javax.xml.parsers.ParserConfigurationException;
import java.io.FileNotFoundException;
-import java.io.FileOutputStream;
import java.io.PrintStream;
import java.util.regex.Pattern;
/**
* @author Jan Jancar johny@neuromancer.sk
*/
-public class FileTestWriter extends TeeTestWriter {
+public class FileTestWriter extends BaseFileTestWriter {
private static final Pattern PREFIX = Pattern.compile("(text|xml|yaml|yml):.+");
public FileTestWriter(String defaultFormat, boolean systemOut, String[] files) throws ParserConfigurationException, FileNotFoundException {
- int fLength = files == null ? 0 : files.length;
- writers = new TestWriter[systemOut ? fLength + 1 : fLength];
- if (systemOut) {
- writers[0] = createWriter(defaultFormat, System.out);
- }
- for (int i = 0; i < fLength; ++i) {
- String fName = files[i];
- String format = null;
- if (PREFIX.matcher(fName).matches()) {
- String[] split = fName.split(":", 2);
- format = split[0];
- fName = split[1];
- }
- writers[i + 1] = createWriter(format, new PrintStream(new FileOutputStream(fName)));
+ super(defaultFormat, systemOut, files);
+ }
+
+ @Override
+ protected String[] matchName(String name) {
+ String[] result = new String[2];
+ if (PREFIX.matcher(name).matches()) {
+ result = name.split(":", 2);
+ } else {
+ result[0] = null;
+ result[1] = name;
}
+ return result;
}
- private TestWriter createWriter(String format, PrintStream out) throws ParserConfigurationException {
+ protected TestWriter createWriter(String format, PrintStream out) throws ParserConfigurationException {
if (format == null) {
return new TextTestWriter(out);
}
diff --git a/standalone/src/main/java/cz/crcs/ectester/standalone/ECTesterStandalone.java b/standalone/src/main/java/cz/crcs/ectester/standalone/ECTesterStandalone.java
index 77eaf85..a3b6e5b 100644
--- a/standalone/src/main/java/cz/crcs/ectester/standalone/ECTesterStandalone.java
+++ b/standalone/src/main/java/cz/crcs/ectester/standalone/ECTesterStandalone.java
@@ -36,6 +36,7 @@ import cz.crcs.ectester.standalone.consts.KeyAgreementIdent;
import cz.crcs.ectester.standalone.consts.KeyPairGeneratorIdent;
import cz.crcs.ectester.standalone.consts.SignatureIdent;
import cz.crcs.ectester.standalone.libs.*;
+import cz.crcs.ectester.standalone.output.FileTestWriter;
import cz.crcs.ectester.standalone.output.TextTestWriter;
import cz.crcs.ectester.standalone.output.XMLTestWriter;
import cz.crcs.ectester.standalone.output.YAMLTestWriter;
@@ -194,7 +195,8 @@ public class ECTesterStandalone {
privateKey.addOption(filePrivate);
Option curveName = Option.builder("cn").longOpt("curve-name").desc("Use a named curve, search from curves supported by the library: <name>").hasArg().argName("name").optionalArg(false).numberOfArgs(1).build();
Option bits = Option.builder("b").longOpt("bits").hasArg().argName("n").optionalArg(false).desc("What size of curve to use.").numberOfArgs(1).build();
- Option output = Option.builder("o").longOpt("output").desc("Output into file <output_file>.").hasArgs().argName("output_file").optionalArg(false).numberOfArgs(1).build();
+ Option output = Option.builder("o").longOpt("output").desc("Output into file <output_file>. The file can be prefixed by the format (one of text,yml,xml), such as: xml:<output_file>.").hasArgs().argName("output_file").optionalArg(false).numberOfArgs(1).build();
+ Option outputRaw = Option.builder("o").longOpt("output").desc("Output CSV into file <output_file>.").hasArgs().argName("output_file").optionalArg(false).numberOfArgs(1).build();
Option timeSource = Option.builder("ts").longOpt("time-source").desc("Use a given native timing source: {rdtsc, monotonic, monotonic-raw, cputime-process, cputime-thread, perfcount}").hasArgs().argName("source").optionalArg(false).numberOfArgs(1).build();
Options testOpts = new Options();
@@ -216,7 +218,7 @@ public class ECTesterStandalone {
ecdhOpts.addOption(bits);
ecdhOpts.addOption(namedCurve);
ecdhOpts.addOption(curveName);
- ecdhOpts.addOption(output);
+ ecdhOpts.addOption(outputRaw);
ecdhOpts.addOption(timeSource);
ecdhOpts.addOption(Option.builder("t").longOpt("type").desc("Set KeyAgreement object [type].").hasArg().argName("type").optionalArg(false).build());
ecdhOpts.addOption(Option.builder().longOpt("key-type").desc("Set the key [algorithm] for which the key should be derived in KeyAgreements with KDF. Default is \"AES\".").hasArg().argName("algorithm").optionalArg(false).build());
@@ -232,7 +234,7 @@ public class ECTesterStandalone {
ecdsaOpts.addOption(bits);
ecdsaOpts.addOption(namedCurve);
ecdsaOpts.addOption(curveName);
- ecdsaOpts.addOption(output);
+ ecdsaOpts.addOption(outputRaw);
ecdsaOpts.addOption(timeSource);
ecdsaOpts.addOptionGroup(privateKey);
ecdsaOpts.addOptionGroup(publicKey);
@@ -247,7 +249,7 @@ public class ECTesterStandalone {
generateOpts.addOption(bits);
generateOpts.addOption(namedCurve);
generateOpts.addOption(curveName);
- generateOpts.addOption(output);
+ generateOpts.addOption(outputRaw);
generateOpts.addOption(timeSource);
generateOpts.addOption(Option.builder("n").longOpt("amount").hasArg().argName("amount").optionalArg(false).desc("Generate [amount] of EC keys.").build());
generateOpts.addOption(Option.builder("t").longOpt("type").hasArg().argName("type").optionalArg(false).desc("Set KeyPairGenerator object [type].").build());
@@ -256,7 +258,7 @@ public class ECTesterStandalone {
Options exportOpts = new Options();
exportOpts.addOption(bits);
- exportOpts.addOption(output);
+ exportOpts.addOption(outputRaw);
exportOpts.addOption(Option.builder("t").longOpt("type").hasArg().argName("type").optionalArg(false).desc("Set KeyPair object [type].").build());
ParserOptions export = new ParserOptions(new DefaultParser(), exportOpts, "Export default curve parameters.");
actions.put("export", export);
@@ -757,28 +759,7 @@ public class ECTesterStandalone {
*
*/
private void test() throws TestException, ParserConfigurationException, FileNotFoundException {
- PrintStream out;
- if (cli.hasOption("test.output")) {
- out = new PrintStream(FileUtil.openStream(cli.getOptionValues("test.output")));
- } else {
- out = System.out;
- }
-
- TestWriter writer;
- switch (cli.getOptionValue("test.format", "text").toLowerCase()) {
- case "yaml":
- case "yml":
- writer = new YAMLTestWriter(out);
- break;
- case "xml":
- writer = new XMLTestWriter(out);
- break;
- case "text":
- default:
- writer = new TextTestWriter(out);
- break;
- }
-
+ TestWriter writer = new FileTestWriter(cli.getOptionValue("test.format", "text"), true, cli.getOptionValues("test.output"));
StandaloneTestSuite suite;
switch (cli.getArg(0).toLowerCase()) {
diff --git a/standalone/src/main/java/cz/crcs/ectester/standalone/output/FileTestWriter.java b/standalone/src/main/java/cz/crcs/ectester/standalone/output/FileTestWriter.java
new file mode 100644
index 0000000..a7dd017
--- /dev/null
+++ b/standalone/src/main/java/cz/crcs/ectester/standalone/output/FileTestWriter.java
@@ -0,0 +1,50 @@
+package cz.crcs.ectester.standalone.output;
+
+import cz.crcs.ectester.common.output.BaseFileTestWriter;
+import cz.crcs.ectester.common.output.TestWriter;
+
+import javax.xml.parsers.ParserConfigurationException;
+import java.io.FileNotFoundException;
+import java.io.PrintStream;
+import java.util.regex.Pattern;
+
+/**
+ * @author Jan Jancar johny@neuromancer.sk
+ */
+public class FileTestWriter extends BaseFileTestWriter {
+
+ private static final Pattern PREFIX = Pattern.compile("(text|xml|yaml|yml):.+");
+
+ public FileTestWriter(String defaultFormat, boolean systemOut, String[] files) throws ParserConfigurationException, FileNotFoundException {
+ super(defaultFormat, systemOut, files);
+ }
+
+ @Override
+ protected String[] matchName(String name) {
+ String[] result = new String[2];
+ if (PREFIX.matcher(name).matches()) {
+ result = name.split(":", 2);
+ } else {
+ result[0] = null;
+ result[1] = name;
+ }
+ return result;
+ }
+
+ protected TestWriter createWriter(String format, PrintStream out) throws ParserConfigurationException {
+ if (format == null) {
+ return new TextTestWriter(out);
+ }
+ switch (format) {
+ case "text":
+ return new TextTestWriter(out);
+ case "xml":
+ return new XMLTestWriter(out);
+ case "yaml":
+ case "yml":
+ return new YAMLTestWriter(out);
+ default:
+ return null;
+ }
+ }
+}