aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--!uploader/ectester.capbin13783 -> 13811 bytes
-rw-r--r--dist/ECTester.jarbin238953 -> 253043 bytes
-rw-r--r--src/cz/crcs/ectester/applet/EC_Consts.java12
-rw-r--r--src/cz/crcs/ectester/data/EC_Category.java4
-rw-r--r--src/cz/crcs/ectester/data/EC_Store.java3
-rw-r--r--src/cz/crcs/ectester/data/nist/b163.csv1
-rw-r--r--src/cz/crcs/ectester/data/nist/b233.csv1
-rw-r--r--src/cz/crcs/ectester/data/nist/b283.csv1
-rw-r--r--src/cz/crcs/ectester/data/nist/b409.csv9
-rw-r--r--src/cz/crcs/ectester/data/nist/b571.csv1
-rw-r--r--src/cz/crcs/ectester/data/nist/curves.xml61
-rw-r--r--src/cz/crcs/ectester/data/nist/k163.csv1
-rw-r--r--src/cz/crcs/ectester/data/nist/k233.csv1
-rw-r--r--src/cz/crcs/ectester/data/nist/k283.csv1
-rw-r--r--src/cz/crcs/ectester/data/nist/k409.csv1
-rw-r--r--src/cz/crcs/ectester/data/nist/k571.csv1
-rw-r--r--src/cz/crcs/ectester/data/secg/curves.xml42
-rw-r--r--src/cz/crcs/ectester/data/secg/secp112r1.csv1
-rw-r--r--src/cz/crcs/ectester/data/secg/secp112r2.csv1
-rw-r--r--src/cz/crcs/ectester/data/secg/secp128r1.csv1
-rw-r--r--src/cz/crcs/ectester/data/secg/secp128r2.csv1
-rw-r--r--src/cz/crcs/ectester/data/secg/secp160k1.csv1
-rw-r--r--src/cz/crcs/ectester/data/secg/secp160r1.csv1
-rw-r--r--src/cz/crcs/ectester/data/secg/secp160r2.csv1
-rw-r--r--src/cz/crcs/ectester/data/test/secg/sect163k1-dh-kdf.csv1
-rw-r--r--src/cz/crcs/ectester/data/test/secg/sect163k1-dh-raw.csv1
-rw-r--r--src/cz/crcs/ectester/data/test/secg/sect163k1-dh-sha1.csv1
-rw-r--r--src/cz/crcs/ectester/data/test/secg/sect163k1-dhc-kdf.csv1
-rw-r--r--src/cz/crcs/ectester/data/test/secg/sect163k1-dhc-raw.csv1
-rw-r--r--src/cz/crcs/ectester/data/test/secg/sect163k1-dhc-sha1.csv1
-rw-r--r--src/cz/crcs/ectester/data/test/secg/sect163k1-keyU.csv1
-rw-r--r--src/cz/crcs/ectester/data/test/secg/sect163k1-keyV.csv1
-rw-r--r--src/cz/crcs/ectester/reader/ECTester.java142
33 files changed, 250 insertions, 47 deletions
diff --git a/!uploader/ectester.cap b/!uploader/ectester.cap
index 3a5506d..bed5dc6 100644
--- a/!uploader/ectester.cap
+++ b/!uploader/ectester.cap
Binary files differ
diff --git a/dist/ECTester.jar b/dist/ECTester.jar
index 348be01..a5dd71c 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 cac5d79..534d552 100644
--- a/src/cz/crcs/ectester/applet/EC_Consts.java
+++ b/src/cz/crcs/ectester/applet/EC_Consts.java
@@ -958,6 +958,9 @@ public class EC_Consts {
public static final byte CORRUPTION_MAX = (byte) 0x06;
public static final byte CORRUPTION_INCREMENT = (byte) 0x07;
public static final byte CORRUPTION_INFINITY = (byte) 0x08;
+ public static final byte CORRUPTION_PREFIX_COMPRESSED = (byte) 0x09;
+ public static final byte CORRUPTION_PREFIX_HYBRID = (byte) 0x0a;
+ public static final byte CORRUPTION_PREFIX_UNCOMPRESSED = (byte) 0x0b;
// toX962 FORM types
public static final byte X962_UNCOMPRESSED = (byte) 0x00;
@@ -1290,6 +1293,15 @@ public class EC_Consts {
case CORRUPTION_INFINITY:
Util.arrayFillNonAtomic(buffer, offset, length, (byte) 0);
return 1;
+ case CORRUPTION_PREFIX_COMPRESSED:
+ buffer[offset] = 2;
+ break;
+ case CORRUPTION_PREFIX_HYBRID:
+ buffer[offset] = 6;
+ break;
+ case CORRUPTION_PREFIX_UNCOMPRESSED:
+ buffer[offset] = 4;
+ break;
default:
ISOException.throwIt(ISO7816.SW_FUNC_NOT_SUPPORTED);
}
diff --git a/src/cz/crcs/ectester/data/EC_Category.java b/src/cz/crcs/ectester/data/EC_Category.java
index aed7e7d..81b8784 100644
--- a/src/cz/crcs/ectester/data/EC_Category.java
+++ b/src/cz/crcs/ectester/data/EC_Category.java
@@ -3,7 +3,7 @@ package cz.crcs.ectester.data;
import cz.crcs.ectester.reader.ec.EC_Params;
import java.util.Collections;
-import java.util.HashMap;
+import java.util.TreeMap;
import java.util.Map;
/**
@@ -50,7 +50,7 @@ public class EC_Category {
}
public <T extends EC_Params> Map<String, T> getObjects(Class<T> cls) {
- Map<String, T> objs = new HashMap<>();
+ Map<String, T> objs = new TreeMap<>();
for (Map.Entry<String, EC_Params> entry : objects.entrySet()) {
if (cls.isInstance(entry.getValue())) {
objs.put(entry.getKey(), cls.cast(entry.getValue()));
diff --git a/src/cz/crcs/ectester/data/EC_Store.java b/src/cz/crcs/ectester/data/EC_Store.java
index 60a1065..c32f1ce 100644
--- a/src/cz/crcs/ectester/data/EC_Store.java
+++ b/src/cz/crcs/ectester/data/EC_Store.java
@@ -25,6 +25,7 @@ import java.io.InputStream;
import java.util.Collections;
import java.util.HashMap;
import java.util.Map;
+import java.util.TreeMap;
/**
* @author Jan Jancar johny@neuromancer.sk
@@ -95,7 +96,7 @@ public class EC_Store {
private EC_Category parseCategory(String name, String dir, String desc) throws ParserConfigurationException, IOException, SAXException {
- Map<String, EC_Params> objMap = new HashMap<>();
+ Map<String, EC_Params> objMap = new TreeMap<>();
InputStream curvesStream = this.getClass().getResourceAsStream("/cz/crcs/ectester/data/" + dir + "/curves.xml");
if (curvesStream != null) {
diff --git a/src/cz/crcs/ectester/data/nist/b163.csv b/src/cz/crcs/ectester/data/nist/b163.csv
new file mode 100644
index 0000000..b211f63
--- /dev/null
+++ b/src/cz/crcs/ectester/data/nist/b163.csv
@@ -0,0 +1 @@
+00a3,0007,0006,0003,000000000000000000000000000000000000000001,020a601907b8c953ca1481eb10512f78744a3205fd,03f0eba16286a2d57ea0991168d4994637e8343e36,00d51fbc6c71a0094fa2cdd545b11c5c0c797324f1,040000000000000000000292FE77E70C12A4234C33,2 \ No newline at end of file
diff --git a/src/cz/crcs/ectester/data/nist/b233.csv b/src/cz/crcs/ectester/data/nist/b233.csv
new file mode 100644
index 0000000..79f0e85
--- /dev/null
+++ b/src/cz/crcs/ectester/data/nist/b233.csv
@@ -0,0 +1 @@
+00e9,004a,0000,0000,000000000000000000000000000000000000000000000000000000000001,0066647ede6c332c7f8c0923bb58213b333b20e9ce4281fe115f7d8f90ad,00fac9dfcbac8313bb2139f1bb755fef65bc391f8b36f8f8eb7371fd558b,01006a08a41903350678e58528bebf8a0beff867a7ca36716f7e01f81052,1000000000000000000000000000013e974e72f8a6922031d2603cfe0d7,2 \ No newline at end of file
diff --git a/src/cz/crcs/ectester/data/nist/b283.csv b/src/cz/crcs/ectester/data/nist/b283.csv
new file mode 100644
index 0000000..88506b3
--- /dev/null
+++ b/src/cz/crcs/ectester/data/nist/b283.csv
@@ -0,0 +1 @@
+011b,000c,0007,0005,00000000000000000000000000000000000000000000000000000000000000000000001,27b680ac8b8596da5a4af8a19a0303fca97fd7645309fa2a581485af6263e313b79a2f5,5f939258db7dd90e1934f8c70b0dfec2eed25b8557eac9c80e2e198f8cdbecd86b12053,3676854fe24141cb98fe6d4b20d02b4516ff702350eddb0826779c813f0df45be8112f4,3ffffffffffffffffffffffffffffffffffef90399660fc938a90165b042a7cefadb307,2 \ No newline at end of file
diff --git a/src/cz/crcs/ectester/data/nist/b409.csv b/src/cz/crcs/ectester/data/nist/b409.csv
new file mode 100644
index 0000000..ed5ef5b
--- /dev/null
+++ b/src/cz/crcs/ectester/data/nist/b409.csv
@@ -0,0 +1,9 @@
+0199,0057,0000,0000,0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001,021a5c2c8ee9feb5c4b9a753b7b476b7fd6422ef1f3dd674761fa99d6ac27c8a9a197b272822f6cd57a55aa4f50ae317b13545f,15d4860d088ddb3496b0c6064756260441cde4af1771d4db01ffe5b34e59703dc255a868a1180515603aeab60794e54bb7996a7,061b1cfab6be5f32bbfa78324ed106a7636b9c5a7bd198d0158aa4f5488d08f38514f1fdf4b4f40d2181b3681c364ba0273c706,10000000000000000000000000000000000000000000000000001e2aad6a612f33307be5fa47c3c9e052f838164cd37d9a21173,2
+
+
+
+
+
+
+
+
diff --git a/src/cz/crcs/ectester/data/nist/b571.csv b/src/cz/crcs/ectester/data/nist/b571.csv
new file mode 100644
index 0000000..c0bef32
--- /dev/null
+++ b/src/cz/crcs/ectester/data/nist/b571.csv
@@ -0,0 +1 @@
+023b,000a,0005,0002,00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001,2f40e7e2221f295de297117b7f3d62f5c6a97ffcb8ceff1cd6ba8ce4a9a18ad84ffabbd8efa59332be7ad6756a66e294afd185a78ff12aa520e4de739baca0c7ffeff7f2955727a,303001d34b856296c16c0d40d3cd7750a93d1d2955fa80aa5f40fc8db7b2abdbde53950f4c0d293cdd711a35b67fb1499ae60038614f1394abfa3b4c850d927e1e7769c8eec2d19,37bf27342da639b6dccfffeb73d69d78c6c27a6009cbbca1980f8533921e8a684423e43bab08a576291af8f461bb2a8b3531d2f0485c19b16e2f1516e23dd3c1a4827af1b8ac15b,3ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe661ce18ff55987308059b186823851ec7dd9ca1161de93d5174d66e8382e9bb2fe84e47,2 \ No newline at end of file
diff --git a/src/cz/crcs/ectester/data/nist/curves.xml b/src/cz/crcs/ectester/data/nist/curves.xml
index 00b109c..2abf72f 100644
--- a/src/cz/crcs/ectester/data/nist/curves.xml
+++ b/src/cz/crcs/ectester/data/nist/curves.xml
@@ -31,4 +31,65 @@
<field>prime</field>
<file>p521.csv</file>
</curve>
+
+ <curve>
+ <id>K-163</id>
+ <bits>163</bits>
+ <field>binary</field>
+ <file>k163.csv</file>
+ </curve>
+ <curve>
+ <id>B-163</id>
+ <bits>163</bits>
+ <field>binary</field>
+ <file>b163.csv</file>
+ </curve>
+ <curve>
+ <id>K-233</id>
+ <bits>233</bits>
+ <field>binary</field>
+ <file>k233.csv</file>
+ </curve>
+ <curve>
+ <id>B-233</id>
+ <bits>233</bits>
+ <field>binary</field>
+ <file>b233.csv</file>
+ </curve>
+ <curve>
+ <id>K-283</id>
+ <bits>283</bits>
+ <field>binary</field>
+ <file>k283.csv</file>
+ </curve>
+ <curve>
+ <id>B-283</id>
+ <bits>283</bits>
+ <field>binary</field>
+ <file>b283.csv</file>
+ </curve>
+ <curve>
+ <id>K-409</id>
+ <bits>409</bits>
+ <field>binary</field>
+ <file>k409.csv</file>
+ </curve>
+ <curve>
+ <id>B-409</id>
+ <bits>409</bits>
+ <field>binary</field>
+ <file>b409.csv</file>
+ </curve>
+ <curve>
+ <id>K-571</id>
+ <bits>571</bits>
+ <field>binary</field>
+ <file>k571.csv</file>
+ </curve>
+ <curve>
+ <id>B-571</id>
+ <bits>571</bits>
+ <field>binary</field>
+ <file>b571.csv</file>
+ </curve>
</curves> \ No newline at end of file
diff --git a/src/cz/crcs/ectester/data/nist/k163.csv b/src/cz/crcs/ectester/data/nist/k163.csv
new file mode 100644
index 0000000..d4f21be
--- /dev/null
+++ b/src/cz/crcs/ectester/data/nist/k163.csv
@@ -0,0 +1 @@
+00a3,0007,0006,0003,000000000000000000000000000000000000000001,000000000000000000000000000000000000000001,02fe13c0537bbc11acaa07d793de4e6d5e5c94eee8,0289070fb05d38ff58321f2e800536d538ccdaa3d9,04000000000000000000020108A2E0CC0D99F8A5EF,2 \ No newline at end of file
diff --git a/src/cz/crcs/ectester/data/nist/k233.csv b/src/cz/crcs/ectester/data/nist/k233.csv
new file mode 100644
index 0000000..45e3c49
--- /dev/null
+++ b/src/cz/crcs/ectester/data/nist/k233.csv
@@ -0,0 +1 @@
+00e9,004a,0000,0000,000000000000000000000000000000000000000000000000000000000000,000000000000000000000000000000000000000000000000000000000001,017232ba853a7e731af129f22ff4149563a419c26bf50a4c9d6eefad6126,01db537dece819b7f70f555a67c427a8cd9bf18aeb9b56e0c11056fae6a3,8000000000000000000000000000069d5bb915bcd46efb1ad5f173abdf,4 \ No newline at end of file
diff --git a/src/cz/crcs/ectester/data/nist/k283.csv b/src/cz/crcs/ectester/data/nist/k283.csv
new file mode 100644
index 0000000..b0e2800
--- /dev/null
+++ b/src/cz/crcs/ectester/data/nist/k283.csv
@@ -0,0 +1 @@
+011b,000c,0007,0005,00000000000000000000000000000000000000000000000000000000000000000000000,00000000000000000000000000000000000000000000000000000000000000000000001,503213f78ca44883f1a3b8162f188e553cd265f23c1567a16876913b0c2ac2458492836,1ccda380f1c9e318d90f95d07e5426fe87e45c0e8184698e45962364e34116177dd2259,1ffffffffffffffffffffffffffffffffffe9ae2ed07577265dff7f94451e061e163c61,4 \ No newline at end of file
diff --git a/src/cz/crcs/ectester/data/nist/k409.csv b/src/cz/crcs/ectester/data/nist/k409.csv
new file mode 100644
index 0000000..fc44b82
--- /dev/null
+++ b/src/cz/crcs/ectester/data/nist/k409.csv
@@ -0,0 +1 @@
+0199,0057,0000,0000,0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000,0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001,060f05f658f49c1ad3ab1890f7184210efd0987e307c84c27accfb8f9f67cc2c460189eb5aaaa62ee222eb1b35540cfe9023746,1e369050b7c4e42acba1dacbf04299c3460782f918ea427e6325165e9ea10e3da5f6c42e9c55215aa9ca27a5863ec48d8e0286b,7ffffffffffffffffffffffffffffffffffffffffffffffffffe5f83b2d4ea20400ec4557d5ed3e3e7ca5b4b5c83b8e01e5fcf,4 \ No newline at end of file
diff --git a/src/cz/crcs/ectester/data/nist/k571.csv b/src/cz/crcs/ectester/data/nist/k571.csv
new file mode 100644
index 0000000..5660f6a
--- /dev/null
+++ b/src/cz/crcs/ectester/data/nist/k571.csv
@@ -0,0 +1 @@
+023b,000a,0005,0002,00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000,00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001,26eb7a859923fbc82189631f8103fe4ac9ca2970012d5d46024804801841ca44370958493b205e647da304db4ceb08cbbd1ba39494776fb988b47174dca88c7e2945283a01c8972,349dc807f4fbf374f4aeade3bca95314dd58cec9f307a54ffc61efc006d8a2c9d4979c0ac44aea74fbebbb9f772aedcb620b01a7ba7af1b320430c8591984f601cd4c143ef1c7a3,20000000000000000000000000000000000000000000000000000000000000000000000131850e1f19a63e4b391a8db917f4138b630d84be5d639381e91deb45cfe778f637c1001,4 \ No newline at end of file
diff --git a/src/cz/crcs/ectester/data/secg/curves.xml b/src/cz/crcs/ectester/data/secg/curves.xml
index 1807ec3..c04fe38 100644
--- a/src/cz/crcs/ectester/data/secg/curves.xml
+++ b/src/cz/crcs/ectester/data/secg/curves.xml
@@ -2,6 +2,48 @@
<curves xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xsi:noNamespaceSchemaLocation="../schema.xsd">
<curve>
+ <id>secp112r1</id>
+ <bits>112</bits>
+ <field>prime</field>
+ <file>secp112r1.csv</file>
+ </curve>
+ <curve>
+ <id>secp112r2</id>
+ <bits>112</bits>
+ <field>prime</field>
+ <file>secp112r2.csv</file>
+ </curve>
+ <curve>
+ <id>secp128r1</id>
+ <bits>128</bits>
+ <field>prime</field>
+ <file>secp128r1.csv</file>
+ </curve>
+ <curve>
+ <id>secp128r2</id>
+ <bits>128</bits>
+ <field>prime</field>
+ <file>secp128r2.csv</file>
+ </curve>
+ <curve>
+ <id>secp160k1</id>
+ <bits>160</bits>
+ <field>prime</field>
+ <file>secp160k1.csv</file>
+ </curve>
+ <curve>
+ <id>secp160r1</id>
+ <bits>160</bits>
+ <field>prime</field>
+ <file>secp160r1.csv</file>
+ </curve>
+ <curve>
+ <id>secp160r2</id>
+ <bits>160</bits>
+ <field>prime</field>
+ <file>secp160r2.csv</file>
+ </curve>
+ <curve>
<id>secp192k1</id>
<bits>192</bits>
<field>prime</field>
diff --git a/src/cz/crcs/ectester/data/secg/secp112r1.csv b/src/cz/crcs/ectester/data/secg/secp112r1.csv
new file mode 100644
index 0000000..1f63812
--- /dev/null
+++ b/src/cz/crcs/ectester/data/secg/secp112r1.csv
@@ -0,0 +1 @@
+DB7C2ABF62E35E668076BEAD208B,DB7C2ABF62E35E668076BEAD2088,659EF8BA043916EEDE8911702B22,09487239995A5EE76B55F9C2F098,A89CE5AF8724C0A23E0E0FF77500,DB7C2ABF62E35E7628DFAC6561C5,1 \ No newline at end of file
diff --git a/src/cz/crcs/ectester/data/secg/secp112r2.csv b/src/cz/crcs/ectester/data/secg/secp112r2.csv
new file mode 100644
index 0000000..4ed7ad9
--- /dev/null
+++ b/src/cz/crcs/ectester/data/secg/secp112r2.csv
@@ -0,0 +1 @@
+DB7C2ABF62E35E668076BEAD208B,6127C24C05F38A0AAAF65C0EF02C,51DEF1815DB5ED74FCC34C85D709,4BA30AB5E892B4E1649DD0928643,ADCD46F5882E3747DEF36E956E97,36DF0AAFD8B8D7597CA10520D04B,4 \ No newline at end of file
diff --git a/src/cz/crcs/ectester/data/secg/secp128r1.csv b/src/cz/crcs/ectester/data/secg/secp128r1.csv
new file mode 100644
index 0000000..a7f2dc8
--- /dev/null
+++ b/src/cz/crcs/ectester/data/secg/secp128r1.csv
@@ -0,0 +1 @@
+FFFFFFFDFFFFFFFFFFFFFFFFFFFFFFFF,FFFFFFFDFFFFFFFFFFFFFFFFFFFFFFFC,E87579C11079F43DD824993C2CEE5ED3,161FF7528B899B2D0C28607CA52C5B86,CF5AC8395BAFEB13C02DA292DDED7A83,FFFFFFFE0000000075A30D1B9038A115,1 \ No newline at end of file
diff --git a/src/cz/crcs/ectester/data/secg/secp128r2.csv b/src/cz/crcs/ectester/data/secg/secp128r2.csv
new file mode 100644
index 0000000..384de92
--- /dev/null
+++ b/src/cz/crcs/ectester/data/secg/secp128r2.csv
@@ -0,0 +1 @@
+FFFFFFFDFFFFFFFFFFFFFFFFFFFFFFFF,D6031998D1B3BBFEBF59CC9BBFF9AEE1,5EEEFCA380D02919DC2C6558BB6D8A5D,7B6AA5D85E572983E6FB32A7CDEBC140,27B6916A894D3AEE7106FE805FC34B44,3FFFFFFF7FFFFFFFBE0024720613B5A3,4 \ No newline at end of file
diff --git a/src/cz/crcs/ectester/data/secg/secp160k1.csv b/src/cz/crcs/ectester/data/secg/secp160k1.csv
new file mode 100644
index 0000000..6a95e94
--- /dev/null
+++ b/src/cz/crcs/ectester/data/secg/secp160k1.csv
@@ -0,0 +1 @@
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFEFFFFAC73,0000000000000000000000000000000000000000,0000000000000000000000000000000000000007,3B4C382CE37AA192A4019E763036F4F5DD4D7EBB,938CF935318FDCED6BC28286531733C3F03C4FEE,0100000000000000000001B8FA16DFAB9ACA16B6B3,1 \ No newline at end of file
diff --git a/src/cz/crcs/ectester/data/secg/secp160r1.csv b/src/cz/crcs/ectester/data/secg/secp160r1.csv
new file mode 100644
index 0000000..a2be6f9
--- /dev/null
+++ b/src/cz/crcs/ectester/data/secg/secp160r1.csv
@@ -0,0 +1 @@
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF7FFFFFFF,FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF7FFFFFFC,1C97BEFC54BD7A8B65ACF89F81D4D4ADC565FA45,4A96B5688EF573284664698968C38BB913CBFC82,23A628553168947D59DCC912042351377AC5FB32,0100000000000000000001F4C8F927AED3CA752257,1 \ No newline at end of file
diff --git a/src/cz/crcs/ectester/data/secg/secp160r2.csv b/src/cz/crcs/ectester/data/secg/secp160r2.csv
new file mode 100644
index 0000000..354ba53
--- /dev/null
+++ b/src/cz/crcs/ectester/data/secg/secp160r2.csv
@@ -0,0 +1 @@
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFEFFFFAC73,FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFEFFFFAC70,B4E134D3FB59EB8BAB57274904664D5AF50388BA,52DCB034293A117E1F4FF11B30F7199D3144CE6D,FEAFFEF2E331F296E071FA0DF9982CFEA7D43F2E,0100000000000000000000351EE786A818F3A1A16B,1 \ No newline at end of file
diff --git a/src/cz/crcs/ectester/data/test/secg/sect163k1-dh-kdf.csv b/src/cz/crcs/ectester/data/test/secg/sect163k1-dh-kdf.csv
new file mode 100644
index 0000000..fe86cff
--- /dev/null
+++ b/src/cz/crcs/ectester/data/test/secg/sect163k1-dh-kdf.csv
@@ -0,0 +1 @@
+6655A9C8F9E593149DB24C91CE621641035C9282 \ No newline at end of file
diff --git a/src/cz/crcs/ectester/data/test/secg/sect163k1-dh-raw.csv b/src/cz/crcs/ectester/data/test/secg/sect163k1-dh-raw.csv
new file mode 100644
index 0000000..4007c6d
--- /dev/null
+++ b/src/cz/crcs/ectester/data/test/secg/sect163k1-dh-raw.csv
@@ -0,0 +1 @@
+0357C3DCD1DF3E27BD8885170EE4975B5081DA7FA7 \ No newline at end of file
diff --git a/src/cz/crcs/ectester/data/test/secg/sect163k1-dh-sha1.csv b/src/cz/crcs/ectester/data/test/secg/sect163k1-dh-sha1.csv
new file mode 100644
index 0000000..badc2b7
--- /dev/null
+++ b/src/cz/crcs/ectester/data/test/secg/sect163k1-dh-sha1.csv
@@ -0,0 +1 @@
+13132F8088D60F9FE0D955AE04C9D20DA829A38B \ No newline at end of file
diff --git a/src/cz/crcs/ectester/data/test/secg/sect163k1-dhc-kdf.csv b/src/cz/crcs/ectester/data/test/secg/sect163k1-dhc-kdf.csv
new file mode 100644
index 0000000..b9c6f47
--- /dev/null
+++ b/src/cz/crcs/ectester/data/test/secg/sect163k1-dhc-kdf.csv
@@ -0,0 +1 @@
+59798528083F50B07528353CDA99D0E460A7229D \ No newline at end of file
diff --git a/src/cz/crcs/ectester/data/test/secg/sect163k1-dhc-raw.csv b/src/cz/crcs/ectester/data/test/secg/sect163k1-dhc-raw.csv
new file mode 100644
index 0000000..8ec537a
--- /dev/null
+++ b/src/cz/crcs/ectester/data/test/secg/sect163k1-dhc-raw.csv
@@ -0,0 +1 @@
+04CB89474B33A518E1C3CD11BEB6E2B0CF48BEE64D \ No newline at end of file
diff --git a/src/cz/crcs/ectester/data/test/secg/sect163k1-dhc-sha1.csv b/src/cz/crcs/ectester/data/test/secg/sect163k1-dhc-sha1.csv
new file mode 100644
index 0000000..b96d64e
--- /dev/null
+++ b/src/cz/crcs/ectester/data/test/secg/sect163k1-dhc-sha1.csv
@@ -0,0 +1 @@
+08E7DBCB78FE4020578C5EAA0AACA2CFFB7B38ED \ No newline at end of file
diff --git a/src/cz/crcs/ectester/data/test/secg/sect163k1-keyU.csv b/src/cz/crcs/ectester/data/test/secg/sect163k1-keyU.csv
new file mode 100644
index 0000000..23fc166
--- /dev/null
+++ b/src/cz/crcs/ectester/data/test/secg/sect163k1-keyU.csv
@@ -0,0 +1 @@
+037D529FA37E42195F10111127FFB2BB38644806BC,0447026EEE8B34157F3EB51BE5185D2BE0249ED776,03A41434AA99C2EF40C8495B2ED9739CB2155A1E0D \ No newline at end of file
diff --git a/src/cz/crcs/ectester/data/test/secg/sect163k1-keyV.csv b/src/cz/crcs/ectester/data/test/secg/sect163k1-keyV.csv
new file mode 100644
index 0000000..6197eba
--- /dev/null
+++ b/src/cz/crcs/ectester/data/test/secg/sect163k1-keyV.csv
@@ -0,0 +1 @@
+072783FAAB9549002B4F13140B88132D1C75B3886C,05A976794EA79A4DE26E2E19418F097942C08641C7,57E8A78E842BF4ACD5C315AA0569DB1703541D96 \ 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 247a260..80c3fb0 100644
--- a/src/cz/crcs/ectester/reader/ECTester.java
+++ b/src/cz/crcs/ectester/reader/ECTester.java
@@ -82,6 +82,7 @@ public class ECTester {
private boolean optSimulate = false;
//Action-related options
+ private String optListNamed;
private String optTestCase;
private int optGenerateAmount;
private int optECDHCount;
@@ -107,6 +108,10 @@ public class ECTester {
help();
return;
}
+ //if not, read other options first, into attributes, then do action
+ if (!readOptions(cli)) {
+ return;
+ }
dataStore = new EC_Store();
//if list, print and quit
@@ -115,11 +120,6 @@ public class ECTester {
return;
}
- //if not, read other options first, into attributes, then do action
- if (!readOptions(cli)) {
- return;
- }
-
//init CardManager
cardManager = new CardMngr(optVerbose, optSimulate);
@@ -245,7 +245,7 @@ public class ECTester {
OptionGroup actions = new OptionGroup();
actions.setRequired(true);
actions.addOption(Option.builder("h").longOpt("help").desc("Print help.").build());
- actions.addOption(Option.builder("ln").longOpt("list-named").desc("Print the list of supported named curves and keys.").build());
+ 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());
@@ -334,6 +334,11 @@ public class ECTester {
optFresh = cli.hasOption("fresh");
optSimulate = cli.hasOption("simulate");
+ if (cli.hasOption("list-named")) {
+ optListNamed = cli.getOptionValue("list-named");
+ return true;
+ }
+
if ((optKey != null || optNamedKey != null) && (optPublic != null || optPrivate != null || optNamedPublic != null || optNamedPrivate != null)) {
System.err.print("Can only specify the whole key with --key/--named-key or pubkey and privkey with --public/--named-public and --private/--named-private.");
return false;
@@ -403,8 +408,8 @@ public class ECTester {
optPrimeField = true;
}
- optTestCase = cli.getOptionValue("test", "default");
- String[] tests = new String[]{"default", "non-prime", "invalid", "wrong"};
+ optTestCase = cli.getOptionValue("test", "default").toLowerCase();
+ String[] tests = new String[]{"default", "non-prime", "invalid", "smallpub", "test-vectors", "wrong"};
List<String> testsList = Arrays.asList(tests);
if (!testsList.contains(optTestCase)) {
System.err.println("Unknown test case. Should be one of: " + Arrays.toString(tests));
@@ -463,35 +468,54 @@ public class ECTester {
*/
private void list() {
Map<String, EC_Category> categories = dataStore.getCategories();
- for (EC_Category cat : categories.values()) {
- System.out.println("\t- " + cat.getName() + ": " + (cat.getDesc() == null ? "" : cat.getDesc()));
+ if (optListNamed == null) {
+ // print all categories, briefly
+ for (EC_Category cat : categories.values()) {
+ System.out.println("\t- " + cat.getName() + ": " + (cat.getDesc() == null ? "" : cat.getDesc()));
- Map<String, EC_Curve> curves = cat.getObjects(EC_Curve.class);
- int size = curves.size();
- if (size > 0) {
- System.out.print("\t\tCurves: ");
- for (Map.Entry<String, EC_Curve> curve : curves.entrySet()) {
- System.out.print(curve.getKey());
- size--;
- if (size > 0)
- System.out.print(", ");
+ Map<String, EC_Curve> curves = cat.getObjects(EC_Curve.class);
+ int size = curves.size();
+ if (size > 0) {
+ System.out.print("\t\tCurves: ");
+ for (Map.Entry<String, EC_Curve> curve : curves.entrySet()) {
+ System.out.print(curve.getKey());
+ size--;
+ if (size > 0)
+ System.out.print(", ");
+ }
+ System.out.println();
}
- System.out.println();
- }
- Map<String, EC_Key> keys = cat.getObjects(EC_Key.class);
- size = keys.size();
- if (size > 0) {
- System.out.print("\t\tKeys: ");
- for (Map.Entry<String, EC_Key> key : keys.entrySet()) {
- System.out.print(key.getKey());
- size--;
- if (size > 0)
- System.out.print(", ");
+ Map<String, EC_Key> keys = cat.getObjects(EC_Key.class);
+ size = keys.size();
+ if (size > 0) {
+ System.out.print("\t\tKeys: ");
+ for (Map.Entry<String, EC_Key> key : keys.entrySet()) {
+ System.out.print(key.getKey());
+ size--;
+ if (size > 0)
+ System.out.print(", ");
+ }
+ System.out.println();
+ }
+
+ Map<String, EC_Keypair> keypairs = cat.getObjects(EC_Keypair.class);
+ size = keypairs.size();
+ if (size > 0) {
+ System.out.print("\t\tKeypairs: ");
+ for (Map.Entry<String, EC_Keypair> key : keypairs.entrySet()) {
+ System.out.print(key.getKey());
+ size--;
+ if (size > 0)
+ System.out.print(", ");
+ }
+ System.out.println();
}
System.out.println();
}
- System.out.println();
+ } else if (categories.containsKey(optListNamed)) {
+ // print given category
+ //TODO
}
}
@@ -596,8 +620,7 @@ public class ECTester {
private void test() throws IOException, CardException {
List<Command> commands = new LinkedList<>();
- if (optTestCase.equalsIgnoreCase("default")) {
-
+ if (optTestCase.equals("default")) {
if (optNamedCurve != null) {
if (optPrimeField) {
commands.addAll(testCurves(optNamedCurve, KeyPair.ALG_EC_FP));
@@ -641,21 +664,52 @@ public class ECTester {
}
}
}
- } else if (optTestCase.equalsIgnoreCase("wrong")) {
- if (optPrimeField) {
- commands.addAll(testCurves("wrong", KeyPair.ALG_EC_FP));
- }
- if (optBinaryField) {
- commands.addAll(testCurves("wrong", KeyPair.ALG_EC_F2M));
- }
- } else if (optTestCase.equalsIgnoreCase("non-prime")) {
-
- } else if (optTestCase.equalsIgnoreCase("smallpub")) {
+ } else if (optTestCase.equals("test-vectors")) {
+ /* Set original curves (secg/nist/brainpool). Set keypairs from test vectors.
+ * Do ECDH both ways, export and verify that the result is correct.
+ *
+ */
+ String category = optNamedCurve == null ? "secg" : optNamedCurve;
+ Map<String, EC_Curve> curves = dataStore.getObjects(EC_Curve.class, category);
+ //TODO
- } else if (optTestCase.equalsIgnoreCase("invalid")) {
+ } else {
+ // These tests are dangerous, prompt before them.
+ System.out.println("The test you selected (" + optTestCase + ") is potentially dangerous.");
+ System.out.println("Some of these tests have caused temporary DoS of some cards.");
+ System.out.print("Do you want to proceed? (y/n):");
+ String confirmation = System.console().readLine();
+ if (!Arrays.asList("yes", "y", "Y").contains(confirmation)) {
+ return;
+ }
+ if (optTestCase.equals("wrong") || optTestCase.equals("non-prime")) {
+ /* Just do the default tests on the wrong and non-prime curves.
+ * These should generally fail, the curves aren't safe.
+ */
+ if (optPrimeField) {
+ commands.addAll(testCurves(optTestCase, KeyPair.ALG_EC_FP));
+ }
+ if (optBinaryField) {
+ commands.addAll(testCurves(optTestCase, KeyPair.ALG_EC_F2M));
+ }
+ } else if (optTestCase.equals("smallpub")) {
+ /* Do the default tests with the public keys set to provided smallpub keys.
+ * These should fail, the curves aren't safe so that if the computation with
+ * a small order public key succeeds the private key modulo the public key order
+ * is revealed.
+ */
+ //TODO
+ } else if (optTestCase.equals("invalid")) {
+ /* Set original curves (secg/nist/brainpool). Generate local.
+ * Try ECDH with invalid public keys of increasing (or decreasing) order.
+ *
+ */
+ //TODO
+ }
}
+
List<Response> test = Command.sendAll(commands);
systemOutLogger.println(Response.toString(test));