aboutsummaryrefslogtreecommitdiff
path: root/src/cz/crcs/ectester/reader/output
diff options
context:
space:
mode:
authorJ08nY2017-12-12 12:32:25 +0100
committerJ08nY2017-12-12 12:32:25 +0100
commit4dbc748a207bcee2c8fbe22566646b27a9f61dc0 (patch)
treefdf069ac9a25ff82f9509826425bd4796c514da0 /src/cz/crcs/ectester/reader/output
parente329190e496ecf847cfd7afa886ac08cacb2fc92 (diff)
parent9e8fbbc907f4157988ac425af4dce541f7e42328 (diff)
downloadECTester-4dbc748a207bcee2c8fbe22566646b27a9f61dc0.tar.gz
ECTester-4dbc748a207bcee2c8fbe22566646b27a9f61dc0.tar.zst
ECTester-4dbc748a207bcee2c8fbe22566646b27a9f61dc0.zip
Merge branch 'feature/standalone-lib-testing' into devel
Diffstat (limited to '')
-rw-r--r--src/cz/crcs/ectester/common/output/TestWriter.java (renamed from src/cz/crcs/ectester/reader/output/TestWriter.java)4
-rw-r--r--src/cz/crcs/ectester/common/output/TextTestWriter.java (renamed from src/cz/crcs/ectester/reader/output/TextTestWriter.java)44
-rw-r--r--src/cz/crcs/ectester/common/output/XMLTestWriter.java (renamed from src/cz/crcs/ectester/reader/output/XMLTestWriter.java)77
-rw-r--r--src/cz/crcs/ectester/common/output/YAMLTestWriter.java (renamed from src/cz/crcs/ectester/reader/output/YAMLTestWriter.java)66
-rw-r--r--src/cz/crcs/ectester/reader/output/ResponseWriter.java14
5 files changed, 152 insertions, 53 deletions
diff --git a/src/cz/crcs/ectester/reader/output/TestWriter.java b/src/cz/crcs/ectester/common/output/TestWriter.java
index d79252d..0ecfd5a 100644
--- a/src/cz/crcs/ectester/reader/output/TestWriter.java
+++ b/src/cz/crcs/ectester/common/output/TestWriter.java
@@ -1,7 +1,7 @@
-package cz.crcs.ectester.reader.output;
+package cz.crcs.ectester.common.output;
import cz.crcs.ectester.common.test.Test;
-import cz.crcs.ectester.reader.test.TestSuite;
+import cz.crcs.ectester.common.test.TestSuite;
/**
* @author Jan Jancar johny@neuromancer.sk
diff --git a/src/cz/crcs/ectester/reader/output/TextTestWriter.java b/src/cz/crcs/ectester/common/output/TextTestWriter.java
index 07b2a2f..2691ccb 100644
--- a/src/cz/crcs/ectester/reader/output/TextTestWriter.java
+++ b/src/cz/crcs/ectester/common/output/TextTestWriter.java
@@ -1,9 +1,9 @@
-package cz.crcs.ectester.reader.output;
+package cz.crcs.ectester.common.output;
import cz.crcs.ectester.common.test.CompoundTest;
+import cz.crcs.ectester.common.test.SimpleTest;
import cz.crcs.ectester.common.test.Test;
-import cz.crcs.ectester.reader.test.SimpleTest;
-import cz.crcs.ectester.reader.test.TestSuite;
+import cz.crcs.ectester.common.test.TestSuite;
import java.io.PrintStream;
@@ -12,13 +12,13 @@ import java.io.PrintStream;
*/
public class TextTestWriter implements TestWriter {
private PrintStream output;
- private ResponseWriter respWriter;
+ private TestableWriter testableWriter;
public static int BASE_WIDTH = 76;
public TextTestWriter(PrintStream output) {
this.output = output;
- this.respWriter = new ResponseWriter(output);
+ this.testableWriter = new TestableWriter(output);
}
@Override
@@ -33,27 +33,17 @@ public class TextTestWriter implements TestWriter {
}
StringBuilder out = new StringBuilder();
- if (t instanceof SimpleTest) {
- SimpleTest test = (SimpleTest) t;
- out.append(test.ok() ? "OK " : "NOK ");
- out.append("━ ");
- int width = BASE_WIDTH - (offset + out.length());
- String widthSpec = "%-" + String.valueOf(width) + "s";
- out.append(String.format(widthSpec, t.getDescription()));
- out.append(" ┃ ");
- out.append(String.format("%-9s", test.getResultValue().name()));
- out.append(" ┃ ");
- out.append(respWriter.responseSuffix(test.getResponse()));
- } else {
+ out.append(t.ok() ? "OK " : "NOK ");
+ out.append("━ ");
+ int width = BASE_WIDTH - (offset + out.length());
+ String widthSpec = "%-" + String.valueOf(width) + "s";
+ out.append(String.format(widthSpec, t.getDescription()));
+ out.append(" ┃ ");
+ out.append(String.format("%-9s", t.getResultValue().name()));
+ out.append(" ┃ ");
+
+ if (t instanceof CompoundTest) {
CompoundTest test = (CompoundTest) t;
- out.append(test.ok() ? "OK " : "NOK ");
- out.append("┳ ");
- int width = BASE_WIDTH - (offset + out.length());
- String widthSpec = "%-" + String.valueOf(width) + "s";
- out.append(String.format(widthSpec, t.getDescription()));
- out.append(" ┃ ");
- out.append(String.format("%-9s", test.getResultValue().name()));
- out.append(" ┃ ");
out.append(test.getResultCause());
out.append(System.lineSeparator());
Test[] tests = test.getTests();
@@ -68,8 +58,10 @@ public class TextTestWriter implements TestWriter {
out.append(System.lineSeparator());
}
}
+ } else {
+ SimpleTest test = (SimpleTest) t;
+ out.append(testableWriter.outputTestableSuffix(test.getTestable()));
}
-
return out.toString();
}
diff --git a/src/cz/crcs/ectester/reader/output/XMLTestWriter.java b/src/cz/crcs/ectester/common/output/XMLTestWriter.java
index 24a308c..4139330 100644
--- a/src/cz/crcs/ectester/reader/output/XMLTestWriter.java
+++ b/src/cz/crcs/ectester/common/output/XMLTestWriter.java
@@ -1,12 +1,13 @@
-package cz.crcs.ectester.reader.output;
+package cz.crcs.ectester.common.output;
import cz.crcs.ectester.common.test.CompoundTest;
-import cz.crcs.ectester.common.Util;
+import cz.crcs.ectester.common.test.Test;
+import cz.crcs.ectester.common.test.TestSuite;
+import cz.crcs.ectester.common.util.ByteUtil;
import cz.crcs.ectester.reader.command.Command;
import cz.crcs.ectester.reader.response.Response;
-import cz.crcs.ectester.common.test.Test;
-import cz.crcs.ectester.reader.test.SimpleTest;
-import cz.crcs.ectester.reader.test.TestSuite;
+import cz.crcs.ectester.reader.test.CommandTest;
+import cz.crcs.ectester.standalone.test.*;
import org.w3c.dom.Document;
import org.w3c.dom.Element;
import org.w3c.dom.Node;
@@ -21,6 +22,8 @@ import javax.xml.transform.TransformerFactory;
import javax.xml.transform.dom.DOMSource;
import javax.xml.transform.stream.StreamResult;
import java.io.OutputStream;
+import java.security.PrivateKey;
+import java.security.PublicKey;
/**
* @author Jan Jancar johny@neuromancer.sk
@@ -51,7 +54,7 @@ public class XMLTestWriter implements TestWriter {
Element commandElem = doc.createElement("command");
Element apdu = doc.createElement("apdu");
- apdu.setTextContent(Util.bytesToHex(c.getAPDU().getBytes()));
+ apdu.setTextContent(ByteUtil.bytesToHex(c.getAPDU().getBytes()));
commandElem.appendChild(apdu);
return commandElem;
@@ -62,7 +65,7 @@ public class XMLTestWriter implements TestWriter {
responseElem.setAttribute("successful", r.successful() ? "true" : "false");
Element apdu = doc.createElement("apdu");
- apdu.setTextContent(Util.bytesToHex(r.getAPDU().getBytes()));
+ apdu.setTextContent(ByteUtil.bytesToHex(r.getAPDU().getBytes()));
responseElem.appendChild(apdu);
Element naturalSW = doc.createElement("natural-sw");
@@ -88,14 +91,68 @@ public class XMLTestWriter implements TestWriter {
return responseElem;
}
+ private Element kaElement(KeyAgreementTestable kat) {
+ Element katElem = doc.createElement("key-agreement");
+
+ Element secret = doc.createElement("secret");
+ secret.setTextContent(ByteUtil.bytesToHex(kat.getSecret()));
+ katElem.appendChild(secret);
+
+ return katElem;
+ }
+
+ private Element kgtElement(KeyGeneratorTestable kgt) {
+ Element kgtElem = doc.createElement("key-pair-generator");
+
+ Element keyPair = doc.createElement("key-pair");
+ Element pubkey = doc.createElement("pubkey");
+ PublicKey pkey = kgt.getKeyPair().getPublic();
+ pubkey.setAttribute("algorithm", pkey.getAlgorithm());
+ pubkey.setAttribute("format", pkey.getFormat());
+ pubkey.setTextContent(ByteUtil.bytesToHex(pkey.getEncoded()));
+ keyPair.appendChild(pubkey);
+
+ Element privkey = doc.createElement("privkey");
+ PrivateKey skey = kgt.getKeyPair().getPrivate();
+ privkey.setAttribute("algorithm", skey.getAlgorithm());
+ privkey.setAttribute("format", skey.getFormat());
+ privkey.setTextContent(ByteUtil.bytesToHex(skey.getEncoded()));
+ keyPair.appendChild(privkey);
+
+ return kgtElem;
+ }
+
+ private Element sigElement(SignatureTestable sig) {
+ Element sigElem = doc.createElement("signature");
+ sigElem.setAttribute("verified", sig.getVerified() ? "true" : "false");
+
+ Element raw = doc.createElement("raw");
+ raw.setTextContent(ByteUtil.bytesToHex(sig.getSignature()));
+ sigElem.appendChild(raw);
+
+ return sigElem;
+ }
+
private Element testElement(Test t) {
Element testElem = doc.createElement("test");
- if (t instanceof SimpleTest) {
- SimpleTest test = (SimpleTest) t;
- testElem.setAttribute("type", "simple");
+ if (t instanceof CommandTest) {
+ CommandTest test = (CommandTest) t;
+ testElem.setAttribute("type", "command");
testElem.appendChild(commandElement(test.getCommand()));
testElem.appendChild(responseElement(test.getResponse()));
+ } else if (t instanceof KeyAgreementTest) {
+ KeyAgreementTest test = (KeyAgreementTest) t;
+ testElem.setAttribute("type", "key-agreement");
+ testElem.appendChild(kaElement(test.getTestable()));
+ } else if (t instanceof KeyGeneratorTest) {
+ KeyGeneratorTest test = (KeyGeneratorTest) t;
+ testElem.setAttribute("type", "key-pair-generator");
+ testElem.appendChild(kgtElement(test.getTestable()));
+ } else if (t instanceof SignatureTest) {
+ SignatureTest test = (SignatureTest) t;
+ testElem.setAttribute("type", "signature");
+ testElem.appendChild(sigElement(test.getTestable()));
} else if (t instanceof CompoundTest) {
CompoundTest test = (CompoundTest) t;
testElem.setAttribute("type", "compound");
diff --git a/src/cz/crcs/ectester/reader/output/YAMLTestWriter.java b/src/cz/crcs/ectester/common/output/YAMLTestWriter.java
index c637a13..ba9fa43 100644
--- a/src/cz/crcs/ectester/reader/output/YAMLTestWriter.java
+++ b/src/cz/crcs/ectester/common/output/YAMLTestWriter.java
@@ -1,16 +1,19 @@
-package cz.crcs.ectester.reader.output;
+package cz.crcs.ectester.common.output;
import cz.crcs.ectester.common.test.CompoundTest;
-import cz.crcs.ectester.common.Util;
+import cz.crcs.ectester.common.test.Test;
+import cz.crcs.ectester.common.test.TestSuite;
+import cz.crcs.ectester.common.util.ByteUtil;
import cz.crcs.ectester.reader.command.Command;
import cz.crcs.ectester.reader.response.Response;
-import cz.crcs.ectester.common.test.Test;
-import cz.crcs.ectester.reader.test.SimpleTest;
-import cz.crcs.ectester.reader.test.TestSuite;
+import cz.crcs.ectester.reader.test.CommandTest;
+import cz.crcs.ectester.standalone.test.*;
import org.yaml.snakeyaml.DumperOptions;
import org.yaml.snakeyaml.Yaml;
import java.io.PrintStream;
+import java.security.PrivateKey;
+import java.security.PublicKey;
import java.util.HashMap;
import java.util.LinkedList;
import java.util.List;
@@ -44,14 +47,14 @@ public class YAMLTestWriter implements TestWriter {
private Map<String, Object> commandObject(Command c) {
Map<String, Object> commandObj = new HashMap<>();
- commandObj.put("apdu", Util.bytesToHex(c.getAPDU().getBytes()));
+ commandObj.put("apdu", ByteUtil.bytesToHex(c.getAPDU().getBytes()));
return commandObj;
}
private Map<String, Object> responseObject(Response r) {
Map<String, Object> responseObj = new HashMap<>();
responseObj.put("successful", r.successful());
- responseObj.put("apdu", Util.bytesToHex(r.getAPDU().getBytes()));
+ responseObj.put("apdu", ByteUtil.bytesToHex(r.getAPDU().getBytes()));
responseObj.put("natural_sw", Short.toUnsignedInt(r.getNaturalSW()));
List<Integer> sws = new LinkedList<>();
for (int i = 0; i < r.getNumSW(); ++i) {
@@ -63,14 +66,57 @@ public class YAMLTestWriter implements TestWriter {
return responseObj;
}
+ private Map<String, Object> kaObject(KeyAgreementTestable kat) {
+ Map<String, Object> katObject = new HashMap<>();
+ katObject.put("secret", ByteUtil.bytesToHex(kat.getSecret()));
+ return katObject;
+ }
+
+ private Map<String, Object> kgtObject(KeyGeneratorTestable kgt) {
+ Map<String, Object> kgtObject = new HashMap<>();
+ Map<String, Object> pubObject = new HashMap<>();
+ PublicKey pkey = kgt.getKeyPair().getPublic();
+ pubObject.put("algorithm", pkey.getAlgorithm());
+ pubObject.put("format", pkey.getFormat());
+ pubObject.put("raw", ByteUtil.bytesToHex(pkey.getEncoded()));
+ kgtObject.put("pubkey", pubObject);
+
+ Map<String, Object> privObject = new HashMap<>();
+ PrivateKey skey = kgt.getKeyPair().getPrivate();
+ privObject.put("algorithm", skey.getAlgorithm());
+ privObject.put("format", skey.getFormat());
+ privObject.put("raw", ByteUtil.bytesToHex(skey.getEncoded()));
+ kgtObject.put("privkey", privObject);
+ return kgtObject;
+ }
+
+ private Map<String, Object> sigObject(SignatureTestable sig) {
+ Map<String, Object> sigObject = new HashMap<>();
+ sigObject.put("verified", sig.getVerified());
+ sigObject.put("raw", ByteUtil.bytesToHex(sig.getSignature()));
+ return sigObject;
+ }
+
private Map<String, Object> testObject(Test t) {
Map<String, Object> testObj = new HashMap<>();
- if (t instanceof SimpleTest) {
- SimpleTest test = (SimpleTest) t;
- testObj.put("type", "simple");
+ if (t instanceof CommandTest) {
+ CommandTest test = (CommandTest) t;
+ testObj.put("type", "command");
testObj.put("command", commandObject(test.getCommand()));
testObj.put("response", responseObject(test.getResponse()));
+ } else if (t instanceof KeyAgreementTest) {
+ KeyAgreementTest test = (KeyAgreementTest) t;
+ testObj.put("type", "key-agreement");
+ testObj.put("key-agreement", kaObject(test.getTestable()));
+ } else if (t instanceof KeyGeneratorTest) {
+ KeyGeneratorTest test = (KeyGeneratorTest) t;
+ testObj.put("type", "key-pair-generator");
+ testObj.put("key-pair-generator", kgtObject(test.getTestable()));
+ } else if (t instanceof SignatureTest) {
+ SignatureTest test = (SignatureTest) t;
+ testObj.put("type", "signature");
+ testObj.put("signature", sigObject(test.getTestable()));
} else if (t instanceof CompoundTest) {
CompoundTest test = (CompoundTest) t;
testObj.put("type", "compound");
diff --git a/src/cz/crcs/ectester/reader/output/ResponseWriter.java b/src/cz/crcs/ectester/reader/output/ResponseWriter.java
index 0f5b6e8..f8837f8 100644
--- a/src/cz/crcs/ectester/reader/output/ResponseWriter.java
+++ b/src/cz/crcs/ectester/reader/output/ResponseWriter.java
@@ -1,6 +1,6 @@
package cz.crcs.ectester.reader.output;
-import cz.crcs.ectester.common.Util;
+import cz.crcs.ectester.common.util.CardUtil;
import cz.crcs.ectester.reader.response.Response;
import java.io.PrintStream;
@@ -20,20 +20,24 @@ public class ResponseWriter {
for (int j = 0; j < r.getNumSW(); ++j) {
short sw = r.getSW(j);
if (sw != 0) {
- suffix.append(" ").append(Util.getSWString(sw));
+ suffix.append(" ").append(CardUtil.getSWString(sw));
}
}
if (suffix.length() == 0) {
- suffix.append(" [").append(Util.getSW(r.getNaturalSW())).append("]");
+ suffix.append(" [").append(CardUtil.getSW(r.getNaturalSW())).append("]");
}
return String.format("%4d ms ┃ %s", r.getDuration() / 1000000, suffix);
}
- public void outputResponse(Response r) {
+ public String responseString(Response r) {
String out = "";
out += String.format("%-70s", r.getDescription()) + " ┃ ";
out += responseSuffix(r);
- output.println(out);
+ return out;
+ }
+
+ public void outputResponse(Response r) {
+ output.println(responseString(r));
output.flush();
}
}