diff options
| author | J08nY | 2017-03-27 01:03:56 +0200 |
|---|---|---|
| committer | J08nY | 2017-03-27 01:03:56 +0200 |
| commit | 0ab7f6dd030c866565cb6592b2a40a39af82be09 (patch) | |
| tree | 3b8eeaaad3d6a467ab685470472289086ba0eb09 | |
| parent | de1736c211dc8d27961ef0495c82d25fbf813e05 (diff) | |
| download | ECTester-0ab7f6dd030c866565cb6592b2a40a39af82be09.tar.gz ECTester-0ab7f6dd030c866565cb6592b2a40a39af82be09.tar.zst ECTester-0ab7f6dd030c866565cb6592b2a40a39af82be09.zip | |
33 files changed, 250 insertions, 47 deletions
diff --git a/!uploader/ectester.cap b/!uploader/ectester.cap Binary files differindex 3a5506d..bed5dc6 100644 --- a/!uploader/ectester.cap +++ b/!uploader/ectester.cap diff --git a/dist/ECTester.jar b/dist/ECTester.jar Binary files differindex 348be01..a5dd71c 100644 --- a/dist/ECTester.jar +++ b/dist/ECTester.jar 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)); |
