diff options
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; + } + } +} |
