aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--!uploader/ectester.capbin14586 -> 14675 bytes
-rw-r--r--FORMAT.md7
-rw-r--r--TESTS.md4
-rw-r--r--dist/ECTester.jarbin323844 -> 343742 bytes
-rw-r--r--src/cz/crcs/ectester/applet/EC_Consts.java8
-rw-r--r--src/cz/crcs/ectester/data/EC_Store.java16
-rw-r--r--src/cz/crcs/ectester/data/anomalous/anomalous112.csv1
-rw-r--r--src/cz/crcs/ectester/data/anomalous/anomalous128.csv1
-rw-r--r--src/cz/crcs/ectester/data/anomalous/anomalous160.csv1
-rw-r--r--src/cz/crcs/ectester/data/anomalous/anomalous192.csv1
-rw-r--r--src/cz/crcs/ectester/data/anomalous/anomalous224.csv1
-rw-r--r--src/cz/crcs/ectester/data/anomalous/anomalous256.csv1
-rw-r--r--src/cz/crcs/ectester/data/anomalous/anomalous320.csv1
-rw-r--r--src/cz/crcs/ectester/data/anomalous/anomalous384.csv1
-rw-r--r--src/cz/crcs/ectester/data/anomalous/anomalous512.csv1
-rw-r--r--src/cz/crcs/ectester/data/anomalous/anomalous521.csv1
-rw-r--r--src/cz/crcs/ectester/data/anomalous/curves.xml60
-rw-r--r--src/cz/crcs/ectester/data/invalid/brainpool/keys.xml2
-rw-r--r--src/cz/crcs/ectester/data/invalid/nist/keys.xml6
-rw-r--r--src/cz/crcs/ectester/data/invalid/secg/keys.xml7
-rw-r--r--src/cz/crcs/ectester/reader/TestSuite.java21
-rw-r--r--src/cz/crcs/ectester/reader/ec/EC_Category.java12
-rw-r--r--src/cz/crcs/ectester/reader/ec/EC_Data.java36
-rw-r--r--src/cz/crcs/ectester/reader/ec/EC_Params.java1
24 files changed, 141 insertions, 49 deletions
diff --git a/!uploader/ectester.cap b/!uploader/ectester.cap
index ea66c8f..0d50b57 100644
--- a/!uploader/ectester.cap
+++ b/!uploader/ectester.cap
Binary files differ
diff --git a/FORMAT.md b/FORMAT.md
index a753c75..b68db39 100644
--- a/FORMAT.md
+++ b/FORMAT.md
@@ -5,7 +5,6 @@ CSV based, little-endian hexadecimal values.
### Prime field
`p,a,b,gx,gy,n,h`
-
### Binary field
`m,e1,e2,e3,a,b,gx,gy,n,h`
@@ -22,9 +21,9 @@ CSV based, little-endian hexadecimal values.
# Notation
- `p` - prime F_p
- `m` - binary field exponent F_2^m
- - e1 - largest exponent of the field polynomial
- - e2 - middle exponenet of the field polynomial, or `0000` if field poly is a trinomial
- - e3 - smallest exponent (except zero) of the field polynomial, or `0000` if field poly is a trinomial
+ - `e1` - largest exponent of the field polynomial
+ - `e2` - middle exponenet of the field polynomial, or `0000` if field poly is a trinomial
+ - `e3` - smallest exponent (except zero) of the field polynomial, or `0000` if field poly is a trinomial
- `a` - a parameter in short Weierstrass curve equation
- `b` - b parameter in short Weierstrass curve equation
- `gx` - x coordinate of the curve base-point g
diff --git a/TESTS.md b/TESTS.md
index 710a04b..1e4f5ca 100644
--- a/TESTS.md
+++ b/TESTS.md
@@ -77,6 +77,4 @@ For example:
```bash
java -jar ECTester.jar -t invalid -nc nist -a -fp
```
-tests using all(`-a`), prime-field(`-fp`) NIST curves and pregenerated *invalid* public keys for these curves.
-
-**TODO: CURRENTLY NOT IMPLEMENTED** \ No newline at end of file
+tests using all(`-a`), prime-field(`-fp`) NIST curves and pregenerated *invalid* public keys for these curves. \ No newline at end of file
diff --git a/dist/ECTester.jar b/dist/ECTester.jar
index adfa6d4..d764a7b 100644
--- a/dist/ECTester.jar
+++ b/dist/ECTester.jar
Binary files differ
diff --git a/src/cz/crcs/ectester/applet/EC_Consts.java b/src/cz/crcs/ectester/applet/EC_Consts.java
index f749af5..d970542 100644
--- a/src/cz/crcs/ectester/applet/EC_Consts.java
+++ b/src/cz/crcs/ectester/applet/EC_Consts.java
@@ -1249,7 +1249,7 @@ public class EC_Consts {
while (corruptionMask <= CORRUPTION_COMPRESS) {
short corruptionPart = (short) (corruptionMask & corruption);
switch (corruptionPart) {
- case 0:
+ case (short) 0:
break;
case CORRUPTION_FIXED:
if (length >= 1) {
@@ -1301,14 +1301,14 @@ public class EC_Consts {
length = 1;
break;
case CORRUPTION_COMPRESS:
- if (length % 2 != 1) {
+
+ if ((short) (length % 2) != 1) {
// an uncompressed point should have odd length (since 1 byte type, + 2 * coords)
ISOException.throwIt(ISO7816.SW_FUNC_NOT_SUPPORTED);
}
- short half = (short) ((length - 1) / 2);
+ short half = (short) ((short)(length - 1) / 2);
byte yLSB = buffer[(short) (offset + length)];
byte yBit = (byte) (yLSB & 0x01);
-
if (yBit == 1) {
buffer[offset] = 3;
} else {
diff --git a/src/cz/crcs/ectester/data/EC_Store.java b/src/cz/crcs/ectester/data/EC_Store.java
index 906eb8d..94eb011 100644
--- a/src/cz/crcs/ectester/data/EC_Store.java
+++ b/src/cz/crcs/ectester/data/EC_Store.java
@@ -178,21 +178,11 @@ public class EC_Store {
if (direct instanceof Element) {
Element elem = (Element) direct;
- NodeList childs = elem.getChildNodes();
- String id = null;
- for (int j = 0; j < childs.getLength(); ++j) {
- Node child = childs.item(j);
- if (child instanceof Element) {
- Element childElem = (Element) child;
- if (childElem.getTagName().equals("id")) {
- id = childElem.getTextContent();
- break;
- }
- }
- }
- if (id == null) {
+ NodeList ids = elem.getElementsByTagName("id");
+ if (ids.getLength() != 1) {
throw new SAXException("key no id?");
}
+ String id = ids.item(0).getTextContent();
EC_Params result = parseKeylike(dir, elem);
diff --git a/src/cz/crcs/ectester/data/anomalous/anomalous112.csv b/src/cz/crcs/ectester/data/anomalous/anomalous112.csv
new file mode 100644
index 0000000..6711b71
--- /dev/null
+++ b/src/cz/crcs/ectester/data/anomalous/anomalous112.csv
@@ -0,0 +1 @@
+0xa2d803b165bdb58f5282cd95ae0f,0x5de65e36c0ec85d5908cdce4c978,0x71801c406b1541de2f9e96b0dc55,0x8073044c904d588dde72e51009c8,0x9dda8938ea7144df116677ae5d93,0xa2d803b165bdb58f5282cd95ae0f,0x1 \ No newline at end of file
diff --git a/src/cz/crcs/ectester/data/anomalous/anomalous128.csv b/src/cz/crcs/ectester/data/anomalous/anomalous128.csv
new file mode 100644
index 0000000..2dcf172
--- /dev/null
+++ b/src/cz/crcs/ectester/data/anomalous/anomalous128.csv
@@ -0,0 +1 @@
+0xe617383c9d207ab3a6ea5e83ab21b241,0x6ff1fa365aafec734e23d52b50edd6ba,0x1813525c76d5183ce9053236ab4d5699,0x27b56a1b55ed41fd2d25b8e7680c65fb,0xcd4b59a0a7814bf14ea6deb5d40d5c9,0xe617383c9d207ab3a6ea5e83ab21b241,0x1 \ No newline at end of file
diff --git a/src/cz/crcs/ectester/data/anomalous/anomalous160.csv b/src/cz/crcs/ectester/data/anomalous/anomalous160.csv
new file mode 100644
index 0000000..bc50f6d
--- /dev/null
+++ b/src/cz/crcs/ectester/data/anomalous/anomalous160.csv
@@ -0,0 +1 @@
+0xc1980258d215dfa641705a68dec6398f69cfb7dd,0x539387a1d2901a0d0aa82e18d31e6b6e45c725c2,0x908c9541398e59bcb0679dcfc1d5e3165a4228e6,0x781ad9264fab66e82a9661efe5cfb7ae963ee2bb,0x8dc2f7237e152c3287658738986d1cce2397e8a6,0xc1980258d215dfa641705a68dec6398f69cfb7dd,0x1 \ No newline at end of file
diff --git a/src/cz/crcs/ectester/data/anomalous/anomalous192.csv b/src/cz/crcs/ectester/data/anomalous/anomalous192.csv
new file mode 100644
index 0000000..35a5c07
--- /dev/null
+++ b/src/cz/crcs/ectester/data/anomalous/anomalous192.csv
@@ -0,0 +1 @@
+0x856728e701179222ea33faa5c3634dc2220f7f8a9a6f1215,0x35db21b91c3044ca550379891307606e9d6b81928a9f09eb,0x80839b7e6774fa9964008017048de3cbaa966a501cb1a5f1,0x78a3df2e57554cd64ac3723d0329c9582a80aac3316ea732,0x7150cc7660022e4b9f4460bc5afbbfa9a11eeb7a40ae5ae6,0x856728e701179222ea33faa5c3634dc2220f7f8a9a6f1215,0x1 \ No newline at end of file
diff --git a/src/cz/crcs/ectester/data/anomalous/anomalous224.csv b/src/cz/crcs/ectester/data/anomalous/anomalous224.csv
new file mode 100644
index 0000000..bf24496
--- /dev/null
+++ b/src/cz/crcs/ectester/data/anomalous/anomalous224.csv
@@ -0,0 +1 @@
+0xed0377332aa665c2d0eaf466a536ddd7d478e66f573eeb8b0973b7a3,0x7fe9c52bb4892ac826d50355f24b6bfb0f4165d2f1dd550e231fa5fb,0xa0b20244694978a19e1910718b57b990542b5fb95c33be692f80e276,0x8225e0f325d74d4b4a729749ef24a0a3edd9c53c7e0bc3cb2cc87466,0x6dfacd713b83267a78a9c2bb0596cc12ddbe0bdfe4008daa277a95b3,0xed0377332aa665c2d0eaf466a536ddd7d478e66f573eeb8b0973b7a3,0x1 \ No newline at end of file
diff --git a/src/cz/crcs/ectester/data/anomalous/anomalous256.csv b/src/cz/crcs/ectester/data/anomalous/anomalous256.csv
new file mode 100644
index 0000000..24d7454
--- /dev/null
+++ b/src/cz/crcs/ectester/data/anomalous/anomalous256.csv
@@ -0,0 +1 @@
+0x8a17b15dd963f53ed8253cb6dd2644819db58d1b1a70a8cf14a6f7ad5c61b7a9,0x7a6c106d27dea9b6c826b5aa585f3ed2dd17b23c8287f0a8de0364baba01b7d7,0x2d42716d40e73c4fe01de111ad155a84350613d8580379b764d207a87242a884,0x3489a3d1ba3181626a6f52badafe4ed68c07efa6ebcff001d78e5c770c3189ba,0x883a994b4dfea1a1fc2b7bffa46a3336e64d5e19bc81e5991bc2a821a2aaf9b1,0x8a17b15dd963f53ed8253cb6dd2644819db58d1b1a70a8cf14a6f7ad5c61b7a9,0x1 \ No newline at end of file
diff --git a/src/cz/crcs/ectester/data/anomalous/anomalous320.csv b/src/cz/crcs/ectester/data/anomalous/anomalous320.csv
new file mode 100644
index 0000000..96e98e5
--- /dev/null
+++ b/src/cz/crcs/ectester/data/anomalous/anomalous320.csv
@@ -0,0 +1 @@
+0xac418bcddf4be30b913032dab704fe4b24cf2fec47b36a0463ab5f7e1ab9985e38f4551408f82439,0x9e7dba38d327f78e918193af78700ebab0deecfbd884995dbbbed047ecab7c55c7d3d5fbb6fafd38,0x5eb3a1f211d52c0eb92e47bd151e05d471da8eb18a1ebe0cd4d6e99c50237c56230f69d517188e0b,0x88fb80cc5aa7dc8dfdd8f275d1c5ef9fe0680e3d5cabd08ac22407e3935ac0a15ecfe6690ee37783,0x44810f747b41aedc20a2d022d35a29391522c3843cb36bf73840b56ccca93626a336ab81f613010,0xac418bcddf4be30b913032dab704fe4b24cf2fec47b36a0463ab5f7e1ab9985e38f4551408f82439,0x1 \ No newline at end of file
diff --git a/src/cz/crcs/ectester/data/anomalous/anomalous384.csv b/src/cz/crcs/ectester/data/anomalous/anomalous384.csv
new file mode 100644
index 0000000..6034b4a
--- /dev/null
+++ b/src/cz/crcs/ectester/data/anomalous/anomalous384.csv
@@ -0,0 +1 @@
+0xfddbf8939f25d39bb926c45a1d3eb5b45ef9af276821fbefbee51174464cdd8b90181d7a111275cf394dd6015589d827,0x7c80b4961ae672c74b5db842293ad567bed30efd6f693143f9bb3d3e1e7587e5b379c36188d3e19c8336a3025f66deb7,0x7aa96bf076ddf659bdcf4c0f2eea1ed80017ead209cc21931e6156171dd8b423edeeab77cc01b30c979993756d398ebd,0xfcf723a7b33621ab6af8e42cf3e5dc7b3143f1df037e82708acfad0fc953f797f31d38e2c651781f5f70aeb0b8abd165,0x259d66287d38573dcc4fa3260e1c0fe6d93c1ed739f91deae1a89d14109f027dd972cba62406f7fca1d0082634f08b2c,0xfddbf8939f25d39bb926c45a1d3eb5b45ef9af276821fbefbee51174464cdd8b90181d7a111275cf394dd6015589d827,0x1 \ No newline at end of file
diff --git a/src/cz/crcs/ectester/data/anomalous/anomalous512.csv b/src/cz/crcs/ectester/data/anomalous/anomalous512.csv
new file mode 100644
index 0000000..ed7ee5b
--- /dev/null
+++ b/src/cz/crcs/ectester/data/anomalous/anomalous512.csv
@@ -0,0 +1 @@
+0x83503ecb98832514b71d0e9fcfea296a3a8ad4f58661c1d997823213343b1ffb7533cb0d589485fd45527d7af1f3896ee0efc67d008b24d5e6fae51edca998f1,0x3ee9f2b4493b7572e5becbe781655ef6a462d20051cc526d5ae89b45a145eb2b31006ac9cc62fd549d370eccd1cbb4945afada0a258cf6c0505814cbbdf4c1dd,0x7fb55135325e108e20914f6558af59dbe328a04629c576efc86184fdb48402a2968f2eb2d9fa6bc6e19f0ca41fb99984f1278197b3c901c20d9f3fa0a5242952,0x52cd825e32cbc4da7f927b5f7a36f15c4d7b42cb03d426654f8f3526711336f1d18dbe4c8ca8843539d3f416de4039c9fe030d30cba1b292fec155dedf8e5c5b,0x39258758239cde1ff6cf41d2b219585ed533c4a042c7714c2d14247e853668839979e60f82255c0657356912a4113e148efbaec32ecb2b4f489f637d88b868da,0x83503ecb98832514b71d0e9fcfea296a3a8ad4f58661c1d997823213343b1ffb7533cb0d589485fd45527d7af1f3896ee0efc67d008b24d5e6fae51edca998f1,0x1 \ No newline at end of file
diff --git a/src/cz/crcs/ectester/data/anomalous/anomalous521.csv b/src/cz/crcs/ectester/data/anomalous/anomalous521.csv
new file mode 100644
index 0000000..e0d935e
--- /dev/null
+++ b/src/cz/crcs/ectester/data/anomalous/anomalous521.csv
@@ -0,0 +1 @@
+0x1dcf4a3c1f9ac39550c7eb7bfb1dd6c345658a277d888d9b23273aac2914cde52ee7e8f424767d62fd266d46491d805564f32919b265d784941d61eefa43da0501f,0x14fb5e18b58eaa6e879edb5542e5c1e1140a0cb1df41c49b5d4be6b7abdaf2afd7a22b8bc95711dd9196968677a1edf9a99e60db654ad62755904ee34b592db2838,0x1c543ff6f595aaf4651f0315c95b1f433b9aa3b5be69f300d4a7f4441bb3331781fbc9527b62fe60d4eb7aaedb2cd50ea4a8ad70ab2935bf8e129cf6ffc30ec027c,0x11fd1c6612169a69250632396ec192b97490c6af601f2d0b2ffad81a2a8772c8f8c0ac6cf273335aed6852fda2a3fb0b32a366ad19662513751412d9d2e168c144d,0x11c894ae2c3647cae6ca89b7c090bf19a52781bddbebb2a21b4123cf16445f7bca20aa1fac5a0228c37e8b89c974c5a659810d29afa96f48cdca6ba77baa88fbac,0x1dcf4a3c1f9ac39550c7eb7bfb1dd6c345658a277d888d9b23273aac2914cde52ee7e8f424767d62fd266d46491d805564f32919b265d784941d61eefa43da0501f,0x1 \ No newline at end of file
diff --git a/src/cz/crcs/ectester/data/anomalous/curves.xml b/src/cz/crcs/ectester/data/anomalous/curves.xml
index b0b9b02..5486f35 100644
--- a/src/cz/crcs/ectester/data/anomalous/curves.xml
+++ b/src/cz/crcs/ectester/data/anomalous/curves.xml
@@ -29,4 +29,64 @@
<file>miyaji128b2.csv</file>
<desc>Second curve in the "Proposed scheme B" section of Atsuko Miyaji's paper.</desc>
</curve>
+ <curve>
+ <id>anomalous112</id>
+ <bits>112</bits>
+ <field>prime</field>
+ <file>anomalous112.csv</file>
+ </curve>
+ <curve>
+ <id>anomalous128</id>
+ <bits>128</bits>
+ <field>prime</field>
+ <file>anomalous128.csv</file>
+ </curve>
+ <curve>
+ <id>anomalous160</id>
+ <bits>160</bits>
+ <field>prime</field>
+ <file>anomalous160.csv</file>
+ </curve>
+ <curve>
+ <id>anomalous192</id>
+ <bits>192</bits>
+ <field>prime</field>
+ <file>anomalous192.csv</file>
+ </curve>
+ <curve>
+ <id>anomalous224</id>
+ <bits>224</bits>
+ <field>prime</field>
+ <file>anomalous224.csv</file>
+ </curve>
+ <curve>
+ <id>anomalous256</id>
+ <bits>256</bits>
+ <field>prime</field>
+ <file>anomalous256.csv</file>
+ </curve>
+ <curve>
+ <id>anomalous320</id>
+ <bits>320</bits>
+ <field>prime</field>
+ <file>anomalous320.csv</file>
+ </curve>
+ <curve>
+ <id>anomalous384</id>
+ <bits>384</bits>
+ <field>prime</field>
+ <file>anomalous384.csv</file>
+ </curve>
+ <curve>
+ <id>anomalous512</id>
+ <bits>512</bits>
+ <field>prime</field>
+ <file>anomalous512.csv</file>
+ </curve>
+ <curve>
+ <id>anomalous521</id>
+ <bits>521</bits>
+ <field>prime</field>
+ <file>anomalous521.csv</file>
+ </curve>
</curves>
diff --git a/src/cz/crcs/ectester/data/invalid/brainpool/keys.xml b/src/cz/crcs/ectester/data/invalid/brainpool/keys.xml
index 985fab6..3823658 100644
--- a/src/cz/crcs/ectester/data/invalid/brainpool/keys.xml
+++ b/src/cz/crcs/ectester/data/invalid/brainpool/keys.xml
@@ -1,7 +1,7 @@
<?xml version="1.0" encoding="UTF-8" ?>
<pubkey>
<id>160r1-1</id>
- <inline>0xc4d7ddb433381eeb0c62b502b4059e616caf6fcf,0x0</inline>
+ <inline>0xc4d7ddb433381eeb0c62b502b4059e616caf6fcf,0x0000000000000000000000000000000000000000</inline>
<curve>brainpool/brainpoolP160r1</curve>
<desc>invalid order = 2</desc>
</pubkey>
diff --git a/src/cz/crcs/ectester/data/invalid/nist/keys.xml b/src/cz/crcs/ectester/data/invalid/nist/keys.xml
index 5427845..e69de29 100644
--- a/src/cz/crcs/ectester/data/invalid/nist/keys.xml
+++ b/src/cz/crcs/ectester/data/invalid/nist/keys.xml
@@ -1,6 +0,0 @@
-<pubkey>
- <id>160r1-1</id>
- <inline>0xc4d7ddb433381eeb0c62b502b4059e616caf6fcf,0x0</inline>
- <curve>brainpool/brainpoolP160r1</curve>
- <desc>order = 2</desc>
-</pubkey>
diff --git a/src/cz/crcs/ectester/data/invalid/secg/keys.xml b/src/cz/crcs/ectester/data/invalid/secg/keys.xml
index 5427845..8b13789 100644
--- a/src/cz/crcs/ectester/data/invalid/secg/keys.xml
+++ b/src/cz/crcs/ectester/data/invalid/secg/keys.xml
@@ -1,6 +1 @@
-<pubkey>
- <id>160r1-1</id>
- <inline>0xc4d7ddb433381eeb0c62b502b4059e616caf6fcf,0x0</inline>
- <curve>brainpool/brainpoolP160r1</curve>
- <desc>order = 2</desc>
-</pubkey>
+
diff --git a/src/cz/crcs/ectester/reader/TestSuite.java b/src/cz/crcs/ectester/reader/TestSuite.java
index c2ccb54..e4d7dd6 100644
--- a/src/cz/crcs/ectester/reader/TestSuite.java
+++ b/src/cz/crcs/ectester/reader/TestSuite.java
@@ -8,10 +8,7 @@ import javacard.security.KeyPair;
import javax.smartcardio.CardException;
import java.io.IOException;
-import java.util.Collections;
-import java.util.LinkedList;
-import java.util.List;
-import java.util.Map;
+import java.util.*;
/**
* @author Jan Jancar johny@neuromancer.sk
@@ -250,6 +247,7 @@ public abstract class TestSuite {
* Try ECDH with invalid public keys of increasing (or decreasing) order.
*/
Map<String, EC_Key.Public> pubkeys = dataStore.getObjects(EC_Key.Public.class, "invalid");
+ Map<EC_Curve, List<EC_Key.Public>> curves = new HashMap<>();
for (EC_Key.Public key : pubkeys.values()) {
EC_Curve curve = dataStore.getObject(EC_Curve.class, key.getCurve());
if (cfg.namedCurve != null && !(key.getCurve().startsWith(cfg.namedCurve) || key.getCurve().equals(cfg.namedCurve))) {
@@ -258,13 +256,24 @@ public abstract class TestSuite {
if (curve.getBits() != cfg.bits && !cfg.all) {
continue;
}
+ List<EC_Key.Public> keys = curves.getOrDefault(curve, new LinkedList<>());
+ keys.add(key);
+ curves.putIfAbsent(curve, keys);
+ }
+ for (Map.Entry<EC_Curve, List<EC_Key.Public>> e : curves.entrySet()) {
+ EC_Curve curve = e.getKey();
+ List<EC_Key.Public> keys = e.getValue();
+
tests.add(new Test(new Command.Allocate(cardManager, ECTesterApplet.KEYPAIR_BOTH, curve.getBits(), curve.getField()), Test.Result.SUCCESS));
tests.add(new Test(new Command.Set(cardManager, ECTesterApplet.KEYPAIR_BOTH, EC_Consts.CURVE_external, curve.getParams(), curve.flatten()), Test.Result.SUCCESS));
tests.add(new Test(new Command.Generate(cardManager, ECTesterApplet.KEYPAIR_LOCAL), Test.Result.SUCCESS));
- tests.add(new Test(new Command.Set(cardManager, ECTesterApplet.KEYPAIR_REMOTE, EC_Consts.CURVE_external, key.getParams(), key.flatten()), Test.Result.ANY));
- tests.add(new Test(new Command.ECDH(cardManager, ECTesterApplet.KEYPAIR_REMOTE, ECTesterApplet.KEYPAIR_LOCAL, ECTesterApplet.EXPORT_FALSE, EC_Consts.CORRUPTION_NONE, EC_Consts.KA_BOTH), Test.Result.FAILURE));
+ for (EC_Key.Public pub : keys) {
+ tests.add(new Test(new Command.Set(cardManager, ECTesterApplet.KEYPAIR_REMOTE, EC_Consts.CURVE_external, pub.getParams(), pub.flatten()), Test.Result.ANY));
+ tests.add(new Test(new Command.ECDH(cardManager, ECTesterApplet.KEYPAIR_REMOTE, ECTesterApplet.KEYPAIR_LOCAL, ECTesterApplet.EXPORT_FALSE, EC_Consts.CORRUPTION_NONE, EC_Consts.KA_BOTH), Test.Result.FAILURE));
+ }
tests.add(new Test(new Command.Cleanup(cardManager), Test.Result.ANY));
}
+
return super.run(cardManager);
}
}
diff --git a/src/cz/crcs/ectester/reader/ec/EC_Category.java b/src/cz/crcs/ectester/reader/ec/EC_Category.java
index a0c8755..97dd1b4 100644
--- a/src/cz/crcs/ectester/reader/ec/EC_Category.java
+++ b/src/cz/crcs/ectester/reader/ec/EC_Category.java
@@ -2,6 +2,7 @@ package cz.crcs.ectester.reader.ec;
import java.util.Collections;
import java.util.Map;
+import java.util.Objects;
import java.util.TreeMap;
/**
@@ -125,4 +126,15 @@ public class EC_Category {
}
return out.toString();
}
+
+ @Override
+ public boolean equals(Object obj) {
+ return obj instanceof EC_Category && Objects.equals(this.name, ((EC_Category) obj).name);
+ }
+
+ @Override
+ public int hashCode() {
+ return this.name.hashCode() ^ this.directory.hashCode();
+ }
+
}
diff --git a/src/cz/crcs/ectester/reader/ec/EC_Data.java b/src/cz/crcs/ectester/reader/ec/EC_Data.java
index 5197665..9dcbbe0 100644
--- a/src/cz/crcs/ectester/reader/ec/EC_Data.java
+++ b/src/cz/crcs/ectester/reader/ec/EC_Data.java
@@ -3,16 +3,13 @@ package cz.crcs.ectester.reader.ec;
import cz.crcs.ectester.reader.Util;
import java.io.*;
-import java.util.ArrayList;
-import java.util.LinkedList;
-import java.util.List;
-import java.util.Scanner;
+import java.util.*;
import java.util.regex.Pattern;
/**
* @author Jan Jancar johny@neuromancer.sk
*/
-public class EC_Data {
+public abstract class EC_Data {
String id;
int count;
byte[][] data;
@@ -167,4 +164,33 @@ public class EC_Data {
public String toString() {
return String.join(",", expand());
}
+
+ @Override
+ public boolean equals(Object obj) {
+ if (obj instanceof EC_Data) {
+ EC_Data other = (EC_Data) obj;
+ if (this.id != null || other.id != null) {
+ return Objects.equals(this.id, other.id);
+ }
+
+ if (this.count != other.count)
+ return false;
+ for (int i = 0; i < this.count; ++i) {
+ if (!Arrays.equals(this.data[i], other.data[i])) {
+ return false;
+ }
+ }
+ return true;
+ } else {
+ return false;
+ }
+ }
+
+ @Override
+ public int hashCode() {
+ if (this.id != null) {
+ return this.id.hashCode();
+ }
+ return Arrays.deepHashCode(this.data);
+ }
}
diff --git a/src/cz/crcs/ectester/reader/ec/EC_Params.java b/src/cz/crcs/ectester/reader/ec/EC_Params.java
index 7192b61..ea2e633 100644
--- a/src/cz/crcs/ectester/reader/ec/EC_Params.java
+++ b/src/cz/crcs/ectester/reader/ec/EC_Params.java
@@ -4,7 +4,6 @@ import cz.crcs.ectester.applet.EC_Consts;
import cz.crcs.ectester.reader.Util;
import java.io.ByteArrayOutputStream;
-import java.io.InputStream;
import java.util.ArrayList;
import java.util.List;