diff options
Diffstat (limited to 'src/cz')
| -rw-r--r-- | src/cz/crcs/ectester/data/EC_Category.java | 15 | ||||
| -rw-r--r-- | src/cz/crcs/ectester/data/EC_Store.java | 95 | ||||
| -rw-r--r-- | src/cz/crcs/ectester/data/schema.xsd | 43 | ||||
| -rw-r--r-- | src/cz/crcs/ectester/data/test/results.xml | 174 | ||||
| -rw-r--r-- | src/cz/crcs/ectester/reader/ECTester.java | 55 | ||||
| -rw-r--r-- | src/cz/crcs/ectester/reader/ec/EC_Data.java | 8 | ||||
| -rw-r--r-- | src/cz/crcs/ectester/reader/ec/EC_KAResult.java | 48 |
7 files changed, 394 insertions, 44 deletions
diff --git a/src/cz/crcs/ectester/data/EC_Category.java b/src/cz/crcs/ectester/data/EC_Category.java index 859b942..57d9ca3 100644 --- a/src/cz/crcs/ectester/data/EC_Category.java +++ b/src/cz/crcs/ectester/data/EC_Category.java @@ -1,5 +1,6 @@ package cz.crcs.ectester.data; +import cz.crcs.ectester.reader.ec.EC_Data; import cz.crcs.ectester.reader.ec.EC_Params; import java.util.Collections; @@ -15,7 +16,7 @@ public class EC_Category { private String directory; private String desc; - private Map<String, EC_Params> objects; + private Map<String, EC_Data> objects; public EC_Category(String name, String directory) { @@ -28,7 +29,7 @@ public class EC_Category { this.desc = desc; } - public EC_Category(String name, String directory, String desc, Map<String, EC_Params> objects) { + public EC_Category(String name, String directory, String desc, Map<String, EC_Data> objects) { this(name, directory, desc); this.objects = objects; } @@ -45,13 +46,13 @@ public class EC_Category { return desc; } - public Map<String, EC_Params> getObjects() { + public Map<String, EC_Data> getObjects() { return Collections.unmodifiableMap(objects); } - public <T extends EC_Params> Map<String, T> getObjects(Class<T> cls) { + public <T extends EC_Data> Map<String, T> getObjects(Class<T> cls) { Map<String, T> objs = new TreeMap<>(); - for (Map.Entry<String, EC_Params> entry : objects.entrySet()) { + for (Map.Entry<String, EC_Data> entry : objects.entrySet()) { if (cls.isInstance(entry.getValue())) { objs.put(entry.getKey(), cls.cast(entry.getValue())); } @@ -59,8 +60,8 @@ public class EC_Category { return Collections.unmodifiableMap(objs); } - public <T extends EC_Params> T getObject(Class<T> cls, String id) { - EC_Params obj = objects.get(id); + public <T extends EC_Data> T getObject(Class<T> cls, String id) { + EC_Data obj = objects.get(id); if (cls.isInstance(obj)) { return cls.cast(obj); } else { diff --git a/src/cz/crcs/ectester/data/EC_Store.java b/src/cz/crcs/ectester/data/EC_Store.java index aec635e..abf0a9b 100644 --- a/src/cz/crcs/ectester/data/EC_Store.java +++ b/src/cz/crcs/ectester/data/EC_Store.java @@ -1,11 +1,8 @@ package cz.crcs.ectester.data; -import cz.crcs.ectester.reader.ec.EC_Curve; -import cz.crcs.ectester.reader.ec.EC_Key; -import cz.crcs.ectester.reader.ec.EC_Keypair; -import cz.crcs.ectester.reader.ec.EC_Params; +import cz.crcs.ectester.applet.EC_Consts; +import cz.crcs.ectester.reader.ec.*; import javacard.security.KeyPair; -import org.omg.PortableInterceptor.SYSTEM_EXCEPTION; import org.w3c.dom.Document; import org.w3c.dom.Element; import org.w3c.dom.Node; @@ -36,7 +33,7 @@ public class EC_Store { private Map<String, EC_Category> categories; - public EC_Store() { + public EC_Store() throws IOException { DocumentBuilderFactory dbf = DocumentBuilderFactory.newInstance(); try { @@ -61,18 +58,24 @@ public class EC_Store { @Override public void fatalError(SAXParseException exception) throws SAXException { System.err.println("EC_Store | Fatal : " + exception); + throw new SAXException(exception); } }); parse(); - } catch (ParserConfigurationException | IOException | SAXException e) { + } catch (ParserConfigurationException | SAXException e) { e.printStackTrace(); } } private void parse() throws SAXException, ParserConfigurationException, IOException { - Document categoriesDoc = db.parse(this.getClass().getResourceAsStream("/cz/crcs/ectester/data/categories.xml")); + InputStream categories = this.getClass().getResourceAsStream("/cz/crcs/ectester/data/categories.xml"); + if (categories == null) { + throw new IOException(); + } + Document categoriesDoc = db.parse(categories); + categories.close(); categoriesDoc.normalize(); NodeList catList = categoriesDoc.getElementsByTagName("category"); @@ -96,11 +99,11 @@ public class EC_Store { private EC_Category parseCategory(String name, String dir, String desc) throws ParserConfigurationException, IOException, SAXException { - Map<String, EC_Params> objMap = new TreeMap<>(); + Map<String, EC_Data> objMap = new TreeMap<>(); - InputStream curvesStream = this.getClass().getResourceAsStream("/cz/crcs/ectester/data/" + dir + "/curves.xml"); - if (curvesStream != null) { - Document curvesDoc = db.parse(curvesStream); + InputStream curves = this.getClass().getResourceAsStream("/cz/crcs/ectester/data/" + dir + "/curves.xml"); + if (curves != null) { + Document curvesDoc = db.parse(curves); curvesDoc.normalize(); NodeList curveList = curvesDoc.getElementsByTagName("curve"); @@ -138,11 +141,12 @@ public class EC_Store { throw new SAXException("?"); } } + curves.close(); } - InputStream keysStream = this.getClass().getResourceAsStream("/cz/crcs/ectester/data/" + dir + "/keys.xml"); - if (keysStream != null) { - Document keysDoc = db.parse(keysStream); + InputStream keys = this.getClass().getResourceAsStream("/cz/crcs/ectester/data/" + dir + "/keys.xml"); + if (keys != null) { + Document keysDoc = db.parse(keys); keysDoc.normalize(); NodeList directs = keysDoc.getDocumentElement().getChildNodes(); @@ -174,6 +178,51 @@ public class EC_Store { throw new SAXException("?"); } } + keys.close(); + } + + InputStream results = this.getClass().getResourceAsStream("/cz/crcs/ectester/data/" + dir + "/results.xml"); + if (results != null) { + Document resultsDoc = db.parse(results); + resultsDoc.normalize(); + + NodeList directs = resultsDoc.getDocumentElement().getChildNodes(); + for (int i = 0; i < directs.getLength(); ++i) { + Node direct = directs.item(i); + if (direct instanceof Element) { + Element elem = (Element) direct; + + Node id = elem.getElementsByTagName("id").item(0); + Node ka = elem.getElementsByTagName("ka").item(0); + Node file = elem.getElementsByTagName("file").item(0); + Node curve = elem.getElementsByTagName("curve").item(0); + Node onekey = elem.getElementsByTagName("onekey").item(0); + Node otherkey = elem.getElementsByTagName("otherkey").item(0); + + NodeList descc = elem.getElementsByTagName("desc"); + String descs = null; + if (descc.getLength() != 0) { + descs = descc.item(0).getTextContent(); + } + + byte kab; + if (ka.getTextContent().equals("DH")) { + kab = EC_Consts.KA_ECDH; + } else { + kab = EC_Consts.KA_ECDHC; + } + + EC_KAResult kaResult = new EC_KAResult(kab, curve.getTextContent(), onekey.getTextContent(), otherkey.getTextContent(), descs); + if (!kaResult.readCSV(this.getClass().getResourceAsStream("/cz/crcs/ectester/data/" + dir + "/" + file.getTextContent()))) { + throw new IOException("Invalid csv data."); + } + + objMap.put(id.getTextContent(), kaResult); + } else { + throw new SAXException("?"); + } + } + results.close(); } return new EC_Category(name, dir, desc, objMap); @@ -199,7 +248,7 @@ public class EC_Store { } else { throw new SAXException("?"); } - if(!result.readCSV(this.getClass().getResourceAsStream("/cz/crcs/ectester/data/" + dir + "/" + file.getTextContent()))) { + if (!result.readCSV(this.getClass().getResourceAsStream("/cz/crcs/ectester/data/" + dir + "/" + file.getTextContent()))) { throw new IOException("Invalid CSV data."); } return result; @@ -213,7 +262,7 @@ public class EC_Store { return categories.get(category); } - public Map<String, EC_Params> getObjects(String category) { + public Map<String, EC_Data> getObjects(String category) { EC_Category cat = categories.get(category); if (cat != null) { return cat.getObjects(); @@ -221,7 +270,7 @@ public class EC_Store { return null; } - public <T extends EC_Params> Map<String, T> getObjects(Class<T> objClass, String category) { + public <T extends EC_Data> Map<String, T> getObjects(Class<T> objClass, String category) { EC_Category cat = categories.get(category); if (cat != null) { return cat.getObjects(objClass); @@ -229,7 +278,7 @@ public class EC_Store { return null; } - public <T extends EC_Params> T getObject(Class<T> objClass, String category, String id) { + public <T extends EC_Data> T getObject(Class<T> objClass, String category, String id) { EC_Category cat = categories.get(category); if (cat != null) { return cat.getObject(objClass, id); @@ -237,12 +286,12 @@ public class EC_Store { return null; } - public <T extends EC_Params> T getObject(Class<T> objClass, String query) { - String[] parts = query.split("/"); - if (parts.length != 2) { + public <T extends EC_Data> T getObject(Class<T> objClass, String query) { + int split = query.indexOf("/"); + if (split < 0) { return null; } - return getObject(objClass, parts[0], parts[1]); + return getObject(objClass, query.substring(0, split), query.substring(split + 1)); } } diff --git a/src/cz/crcs/ectester/data/schema.xsd b/src/cz/crcs/ectester/data/schema.xsd index a4dbe15..8f9427d 100644 --- a/src/cz/crcs/ectester/data/schema.xsd +++ b/src/cz/crcs/ectester/data/schema.xsd @@ -1,5 +1,5 @@ <?xml version="1.0" encoding="UTF-8" ?> -<xs:schema xmlns:xs="http://www.w3.org/2001/XMLSchema" +<xs:schema xmlns:xs="http://www.w3.org/2001/XMLSchema" xmlns:xsd="http://www.w3.org/2001/XMLSchema" elementFormDefault="qualified"> <!-- /<category>/curves.xml --> @@ -12,13 +12,13 @@ </xs:simpleType> <xs:complexType name="curveType"> - <xs:sequence> + <xs:all> <xs:element name="id" type="xs:string"/> <xs:element name="bits" type="xs:positiveInteger"/> <xs:element name="field" type="fieldType"/> <xs:element name="file" type="xs:string"/> <xs:element name="desc" type="xs:string" minOccurs="0"/> - </xs:sequence> + </xs:all> </xs:complexType> <xs:element name="curves"> @@ -32,12 +32,12 @@ <!-- /<category>/keys.xml --> <xs:complexType name="keyType"> - <xs:sequence> + <xs:all> <xs:element name="id" type="xs:string"/> <xs:element name="file" type="xs:string"/> <xs:element name="curve" type="xs:string"/> <xs:element name="desc" type="xs:string" minOccurs="0"/> - </xs:sequence> + </xs:all> </xs:complexType> <xs:element name="keys"> @@ -52,14 +52,43 @@ </xs:complexType> </xs:element> + <!-- /<category>/results.xml --> + + <xs:simpleType name="kaType"> + <xs:restriction base="xs:string"> + <xs:enumeration value="DH"/> + <xs:enumeration value="DHC"/> + </xs:restriction> + </xs:simpleType> + + <xs:complexType name="resultType"> + <xs:all> + <xs:element name="id" type="xs:string"/> + <xs:element name="ka" type="kaType"/> + <xs:element name="file" type="xs:string"/> + <xs:element name="curve" type="xs:string"/> + <xs:element name="onekey" type="xs:string"/> + <xs:element name="otherkey" type="xs:string"/> + <xs:element name="desc" type="xs:string" minOccurs="0"/> + </xs:all> + </xs:complexType> + + <xs:element name="results"> + <xs:complexType> + <xs:sequence> + <xs:element name="result" type="resultType" minOccurs="0" maxOccurs="unbounded"/> + </xs:sequence> + </xs:complexType> + </xs:element> + <!-- /categories.xml --> <xs:complexType name="categoryType"> - <xs:sequence> + <xs:all> <xs:element name="name" type="xs:string"/> <xs:element name="directory" type="xs:string"/> <xs:element name="desc" minOccurs="0" type="xs:string"/> - </xs:sequence> + </xs:all> </xs:complexType> <xs:element name="categories"> diff --git a/src/cz/crcs/ectester/data/test/results.xml b/src/cz/crcs/ectester/data/test/results.xml new file mode 100644 index 0000000..e382cd4 --- /dev/null +++ b/src/cz/crcs/ectester/data/test/results.xml @@ -0,0 +1,174 @@ +<?xml version="1.0" encoding="utf-8" ?> +<results xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" + xsi:noNamespaceSchemaLocation="../schema.xsd"> + <result> + <id>secp160r1-dh</id> + <ka>DH</ka> + <file>secg/secp160r1-dh-sha1.csv</file> + <curve>secg/secp160r1</curve> + <onekey>test/secp160r1-U</onekey> + <otherkey>test/secp160r1-V</otherkey> + </result> + <result> + <id>sect163k1-dh</id> + <ka>DH</ka> + <file>secg/sect163k1-dh-sha1.csv</file> + <curve>secg/sect163k1</curve> + <onekey>test/sect163k1-U</onekey> + <otherkey>test/sect163k1-V</otherkey> + </result> + + <result> + <id>brainpoolP224r1-dh</id> + <ka>DH</ka> + <file>brainpool/brainpoolP224r1-dh-sha1.csv</file> + <curve>brainpool/brainpoolP224r1</curve> + <onekey>test/brainpoolP224r1-A</onekey> + <otherkey>test/brainpoolP224r1-B</otherkey> + </result> + <result> + <id>brainpoolP256r1-dh</id> + <ka>DH</ka> + <file>brainpool/brainpoolP256r1-dh-sha1.csv</file> + <curve>brainpool/brainpoolP256r1</curve> + <onekey>test/brainpoolP256r1-A</onekey> + <otherkey>test/brainpoolP256r1-B</otherkey> + </result> + <result> + <id>brainpoolP384r1-dh</id> + <ka>DH</ka> + <file>brainpool/brainpoolP384r1-dh-sha1.csv</file> + <curve>brainpool/brainpoolP384r1</curve> + <onekey>test/brainpoolP384r1-A</onekey> + <otherkey>test/brainpoolP384r1-B</otherkey> + </result> + <result> + <id>brainpoolP512r1-dh</id> + <ka>DH</ka> + <file>brainpool/brainpoolP512r1-dh-sha1.csv</file> + <curve>brainpool/brainpoolP512r1</curve> + <onekey>test/brainpoolP512r1-A</onekey> + <otherkey>test/brainpoolP512r1-B</otherkey> + </result> + + <result> + <id>b163-dhc</id> + <ka>DHC</ka> + <file>nist/b163-dhc-sha1.csv</file> + <curve>nist/B-163</curve> + <onekey>test/b163-A</onekey> + <otherkey>test/b163-B</otherkey> + </result> + <result> + <id>b233-dhc</id> + <ka>DHC</ka> + <file>nist/b233-dhc-sha1.csv</file> + <curve>nist/B-233</curve> + <onekey>test/b233-A</onekey> + <otherkey>test/b233-B</otherkey> + </result> + <result> + <id>b283-dhc</id> + <ka>DHC</ka> + <file>nist/b283-dhc-sha1.csv</file> + <curve>nist/B-283</curve> + <onekey>test/b283-A</onekey> + <otherkey>test/b283-B</otherkey> + </result> + <result> + <id>b409-dhc</id> + <ka>DHC</ka> + <file>nist/b409-dhc-sha1.csv</file> + <curve>nist/B-409</curve> + <onekey>test/b409-A</onekey> + <otherkey>test/b409-B</otherkey> + </result> + <result> + <id>b571-dhc</id> + <ka>DHC</ka> + <file>nist/b571-dhc-sha1.csv</file> + <curve>nist/B-571</curve> + <onekey>test/b571-A</onekey> + <otherkey>test/b571-B</otherkey> + </result> + <result> + <id>k163-dhc</id> + <ka>DHC</ka> + <file>nist/k163-dhc-sha1.csv</file> + <curve>nist/B-163</curve> + <onekey>test/k163-A</onekey> + <otherkey>test/k163-B</otherkey> + </result> + <result> + <id>k233-dhc</id> + <ka>DHC</ka> + <file>nist/k233-dhc-sha1.csv</file> + <curve>nist/B-233</curve> + <onekey>test/k233-A</onekey> + <otherkey>test/k233-B</otherkey> + </result> + <result> + <id>k283-dhc</id> + <ka>DHC</ka> + <file>nist/k283-dhc-sha1.csv</file> + <curve>nist/B-283</curve> + <onekey>test/k283-A</onekey> + <otherkey>test/k283-B</otherkey> + </result> + <result> + <id>k409-dhc</id> + <ka>DHC</ka> + <file>nist/k409-dhc-sha1.csv</file> + <curve>nist/B-409</curve> + <onekey>test/k409-A</onekey> + <otherkey>test/k409-B</otherkey> + </result> + <result> + <id>k571-dhc</id> + <ka>DHC</ka> + <file>nist/k571-dhc-sha1.csv</file> + <curve>nist/B-571</curve> + <onekey>test/k571-A</onekey> + <otherkey>test/k571-B</otherkey> + </result> + <result> + <id>p192-dhc</id> + <ka>DHC</ka> + <file>nist/p192-dhc-sha1.csv</file> + <curve>nist/P-192</curve> + <onekey>test/p192-A</onekey> + <otherkey>test/p192-B</otherkey> + </result> + <result> + <id>p224-dhc</id> + <ka>DHC</ka> + <file>nist/p224-dhc-sha1.csv</file> + <curve>nist/P-224</curve> + <onekey>test/p224-A</onekey> + <otherkey>test/p224-B</otherkey> + </result> + <result> + <id>p256-dhc</id> + <ka>DHC</ka> + <file>nist/p256-dhc-sha1.csv</file> + <curve>nist/P-256</curve> + <onekey>test/p256-A</onekey> + <otherkey>test/p256-B</otherkey> + </result> + <result> + <id>p384-dhc</id> + <ka>DHC</ka> + <file>nist/p384-dhc-sha1.csv</file> + <curve>nist/P-384</curve> + <onekey>test/p384-A</onekey> + <otherkey>test/p384-B</otherkey> + </result> + <result> + <id>p521-dhc</id> + <ka>DHC</ka> + <file>nist/p521-dhc-sha1.csv</file> + <curve>nist/P-521</curve> + <onekey>test/p521-A</onekey> + <otherkey>test/p521-B</otherkey> + </result> +</results>
\ No newline at end of file diff --git a/src/cz/crcs/ectester/reader/ECTester.java b/src/cz/crcs/ectester/reader/ECTester.java index b8b0c04..9926d3e 100644 --- a/src/cz/crcs/ectester/reader/ECTester.java +++ b/src/cz/crcs/ectester/reader/ECTester.java @@ -25,10 +25,7 @@ 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_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; -import cz.crcs.ectester.reader.ec.EC_Params; +import cz.crcs.ectester.reader.ec.*; import javacard.security.KeyPair; import org.apache.commons.cli.*; @@ -248,7 +245,7 @@ public class ECTester { actions.addOption(Option.builder("ln").longOpt("list-named").desc("Print the list of supported named curves and keys.").hasArg().argName("what").optionalArg(true).build()); actions.addOption(Option.builder("e").longOpt("export").desc("Export the defaut curve parameters of the card(if any).").build()); actions.addOption(Option.builder("g").longOpt("generate").desc("Generate [amount] of EC keys.").hasArg().argName("amount").optionalArg(true).build()); - actions.addOption(Option.builder("t").longOpt("test").desc("Test ECC support.").hasArg().argName("test_case").optionalArg(true).build()); + actions.addOption(Option.builder("t").longOpt("test").desc("Test ECC support. <test_case>:\n- default:\n- invalid:\n- wrong:\n- nonprime:\n- smallpub:\n- test-vectors:").hasArg().argName("test_case").optionalArg(true).build()); actions.addOption(Option.builder("dh").longOpt("ecdh").desc("Do ECDH, [count] times.").hasArg().argName("count").optionalArg(true).build()); actions.addOption(Option.builder("dhc").longOpt("ecdhc").desc("Do ECDHC, [count] times.").hasArg().argName("count").optionalArg(true).build()); actions.addOption(Option.builder("dsa").longOpt("ecdsa").desc("Sign data with ECDSA, [count] times.").hasArg().argName("count").optionalArg(true).build()); @@ -511,6 +508,20 @@ public class ECTester { } System.out.println(); } + + Map<String, EC_KAResult> results = cat.getObjects(EC_KAResult.class); + size = results.size(); + if (size > 0) { + System.out.print("\t\tResults: "); + for (Map.Entry<String, EC_KAResult> result : results.entrySet()) { + System.out.print(result.getKey()); + size--; + if (size > 0) + System.out.print(", "); + } + System.out.println(); + } + System.out.println(); } } else if (categories.containsKey(optListNamed)) { @@ -669,7 +680,30 @@ public class ECTester { * Do ECDH both ways, export and verify that the result is correct. * */ - //TODO + Map<String, EC_KAResult> results = dataStore.getObjects(EC_KAResult.class, "test"); + for (EC_KAResult result : results.values()) { + EC_Curve curve = dataStore.getObject(EC_Curve.class, result.getCurve()); + EC_Params onekey = dataStore.getObject(EC_Keypair.class, result.getOneKey()); + if (onekey == null) { + onekey = dataStore.getObject(EC_Key.Private.class, result.getOneKey()); + } + EC_Params otherkey = dataStore.getObject(EC_Keypair.class, result.getOtherKey()); + if (otherkey == null) { + otherkey = dataStore.getObject(EC_Key.Public.class, result.getOtherKey()); + } + if (onekey == null || otherkey == null) { + throw new IOException("Test vector keys not located"); + } + + commands.add(new Command.Allocate(cardManager, ECTesterApplet.KEYPAIR_BOTH, curve.getBits(), curve.getField())); + commands.add(new Command.Set(cardManager, ECTesterApplet.KEYPAIR_BOTH, EC_Consts.CURVE_external, curve.getParams(), curve.flatten())); + commands.add(new Command.Generate(cardManager, ECTesterApplet.KEYPAIR_BOTH)); + commands.add(new Command.Set(cardManager, ECTesterApplet.KEYPAIR_LOCAL, EC_Consts.CURVE_external, EC_Consts.PARAMETER_S, onekey.flatten(EC_Consts.PARAMETER_S))); + commands.add(new Command.Set(cardManager, ECTesterApplet.KEYPAIR_REMOTE, EC_Consts.CURVE_external, EC_Consts.PARAMETER_W, otherkey.flatten(EC_Consts.PARAMETER_W))); + commands.add(new Command.ECDH(cardManager, ECTesterApplet.KEYPAIR_REMOTE, ECTesterApplet.KEYPAIR_LOCAL, ECTesterApplet.EXPORT_TRUE, EC_Consts.CORRUPTION_NONE, result.getKA())); + //TODO add compare with result.getParam(0); + commands.add(new Command.Cleanup(cardManager)); + } } else { // These tests are dangerous, prompt before them. @@ -721,7 +755,14 @@ public class ECTester { List<Response> test = Command.sendAll(commands); systemOutLogger.println(Response.toString(test)); - // + for (Response response : test) { + if (response instanceof Response.ECDH) { + Response.ECDH ecdh = (Response.ECDH) response; + if (ecdh.hasSecret()) { + System.out.println(Util.bytesToHex(ecdh.getSecret(), false)); + } + } + } } /** diff --git a/src/cz/crcs/ectester/reader/ec/EC_Data.java b/src/cz/crcs/ectester/reader/ec/EC_Data.java index c1fb54c..2e1eb29 100644 --- a/src/cz/crcs/ectester/reader/ec/EC_Data.java +++ b/src/cz/crcs/ectester/reader/ec/EC_Data.java @@ -31,6 +31,10 @@ public class EC_Data { this.data = data; } + public int getCount() { + return count; + } + public byte[][] getData() { return data; } @@ -39,6 +43,10 @@ public class EC_Data { return data != null; } + public byte[] getParam(int index) { + return data[index]; + } + public byte[] flatten() { ByteArrayOutputStream out = new ByteArrayOutputStream(); for (byte[] param : data) { diff --git a/src/cz/crcs/ectester/reader/ec/EC_KAResult.java b/src/cz/crcs/ectester/reader/ec/EC_KAResult.java new file mode 100644 index 0000000..e556f90 --- /dev/null +++ b/src/cz/crcs/ectester/reader/ec/EC_KAResult.java @@ -0,0 +1,48 @@ +package cz.crcs.ectester.reader.ec; + +/** + * @author Jan Jancar johny@neuromancer.sk + */ +public class EC_KAResult extends EC_Data { + + private byte ka; + private String curve; + private String oneKey; + private String otherKey; + + private String desc; + + public EC_KAResult(byte ka, String curve, String oneKey, String otherKey) { + super(1); + this.ka = ka; + this.curve = curve; + this.oneKey = oneKey; + this.otherKey = otherKey; + } + + public EC_KAResult(byte ka, String curve, String oneKey, String otherKey, String desc) { + this(ka, curve, oneKey, otherKey); + this.desc = desc; + } + + public byte getKA() { + return ka; + } + + public String getCurve() { + return curve; + } + + public String getOneKey() { + return oneKey; + } + + public String getOtherKey() { + return otherKey; + } + + public String getDesc() { + return desc; + } + +} |
