diff options
| author | J08nY | 2024-03-30 19:16:44 +0100 |
|---|---|---|
| committer | J08nY | 2024-03-30 19:16:44 +0100 |
| commit | b026dacd1af1970fb27f13783e039415cc862015 (patch) | |
| tree | 998c0fb2f082a4529263ab5d551180c4b307bb7f /standalone | |
| parent | fa5ba0e0e0a3168fdbed27b9c21eada9bb9f1587 (diff) | |
| download | ECTester-b026dacd1af1970fb27f13783e039415cc862015.tar.gz ECTester-b026dacd1af1970fb27f13783e039415cc862015.tar.zst ECTester-b026dacd1af1970fb27f13783e039415cc862015.zip | |
Diffstat (limited to 'standalone')
| -rw-r--r-- | standalone/src/main/java/cz/crcs/ectester/standalone/ECTesterStandalone.java | 35 | ||||
| -rw-r--r-- | standalone/src/main/java/cz/crcs/ectester/standalone/output/FileTestWriter.java | 50 |
2 files changed, 58 insertions, 27 deletions
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; + } + } +} |
