From d61af849107b1f872bdd01438d6c406db3d24124 Mon Sep 17 00:00:00 2001 From: J08nY Date: Sat, 28 Apr 2018 19:33:48 +0200 Subject: Add degenerate curves test suite. --- .../ectester/common/output/BaseTextTestWriter.java | 4 +- src/cz/crcs/ectester/data/EC_Store.java | 1 + src/cz/crcs/ectester/data/categories.xml | 40 +- src/cz/crcs/ectester/data/degenerate/brainpool.xml | 317 +++++++++++ src/cz/crcs/ectester/data/degenerate/keys.xml | 16 + src/cz/crcs/ectester/data/degenerate/secg.xml | 628 +++++++++++++++++++++ src/cz/crcs/ectester/reader/ECTesterReader.java | 7 +- .../reader/test/CardDegenerateCurvesSuite.java | 55 ++ 8 files changed, 1049 insertions(+), 19 deletions(-) create mode 100644 src/cz/crcs/ectester/data/degenerate/brainpool.xml create mode 100644 src/cz/crcs/ectester/data/degenerate/keys.xml create mode 100644 src/cz/crcs/ectester/data/degenerate/secg.xml create mode 100644 src/cz/crcs/ectester/reader/test/CardDegenerateCurvesSuite.java (limited to 'src') diff --git a/src/cz/crcs/ectester/common/output/BaseTextTestWriter.java b/src/cz/crcs/ectester/common/output/BaseTextTestWriter.java index 43928ff..1b85f36 100644 --- a/src/cz/crcs/ectester/common/output/BaseTextTestWriter.java +++ b/src/cz/crcs/ectester/common/output/BaseTextTestWriter.java @@ -27,7 +27,9 @@ public abstract class BaseTextTestWriter implements TestWriter { @Override public void begin(TestSuite suite) { output.println("═══ Running test suite: " + suite.getName() + " ═══"); - output.println("═══ " + suite.getDescription()); + for (String d : suite.getDescription().split("\n")) { + output.println("═══ " + d); + } DateFormat dateFormat = new SimpleDateFormat("yyyy.MM.dd HH:mm:ss"); Date date = new Date(); output.println("═══ Date: " + dateFormat.format(date)); diff --git a/src/cz/crcs/ectester/data/EC_Store.java b/src/cz/crcs/ectester/data/EC_Store.java index 426dcd9..63a0275 100644 --- a/src/cz/crcs/ectester/data/EC_Store.java +++ b/src/cz/crcs/ectester/data/EC_Store.java @@ -40,6 +40,7 @@ public class EC_Store { dbf.setSchema(sch); dbf.setNamespaceAware(true); dbf.setIgnoringComments(true); + dbf.setXIncludeAware(true); dbf.setIgnoringElementContentWhitespace(true); db = dbf.newDocumentBuilder(); db.setErrorHandler(new ErrorHandler() { diff --git a/src/cz/crcs/ectester/data/categories.xml b/src/cz/crcs/ectester/data/categories.xml index 3451588..0e1b142 100644 --- a/src/cz/crcs/ectester/data/categories.xml +++ b/src/cz/crcs/ectester/data/categories.xml @@ -1,6 +1,7 @@ + anomalous anomalous @@ -32,38 +33,45 @@ GOST R 34.10-2001: RFC5832 - composite - composite - Composite order curves, with points of very small order pregenerated. - - - wrong - wrong - Wrong field curves. These should definitely give an error when used. Since the "prime" used for the field are not prime, and the field polynomials are also not irreducible. Simply put these parameters don't specify a valid elliptic curve. + x962 + x962 + ANSI X9.62 example curves. + + invalid invalid - + Invalid curves and points on them for common standard named curves. twist twist - + Points on quadratic twists of common standard named curves. + + + degenerate + degenerate + Points on degenerate curves for common standard named curves. cofactor cofactor - + Curves of order n * p, with p prime and n in {2,4,8,16,32,64,128}. Generator of order p, with points on the subgroup of order n. + + + composite + composite + Composite order curves, with points of very small order pre-generated. + + + wrong + wrong + Wrong field curves. These should definitely give an error when used. Since the "prime" used for the field are not prime, and the field polynomials are also not irreducible. Simply put these parameters don't specify a valid elliptic curve. test test Test vectors - - x962 - x962 - ANSI X9.62 example curves. - \ No newline at end of file diff --git a/src/cz/crcs/ectester/data/degenerate/brainpool.xml b/src/cz/crcs/ectester/data/degenerate/brainpool.xml new file mode 100644 index 0000000..9dc860a --- /dev/null +++ b/src/cz/crcs/ectester/data/degenerate/brainpool.xml @@ -0,0 +1,317 @@ + + brainpoolP160r1/0 + 0x0000000000000000000000000000000000000000,0xe95e4a5f737059dc60dfc7ad95b3d8139515620e + brainpool/brainpoolP160r1 + degenerate order = 2 + + + brainpoolP160r1/1 + 0x0000000000000000000000000000000000000000,0x3290e9c18a987fec8da975f2433060ce9a5d67a4 + brainpool/brainpoolP160r1 + degenerate order = 3 + + + brainpoolP160r1/2 + 0x0000000000000000000000000000000000000000,0xb70d585c2b880eb1dfdf91e77b37f1b755c8f73d + brainpool/brainpoolP160r1 + degenerate order = 7 + + + brainpoolP160r1/3 + 0x0000000000000000000000000000000000000000,0xd6dcfdaf8654e853148d03b11a346873bda99f78 + brainpool/brainpoolP160r1 + degenerate order = 53 + + + brainpoolP160r1/4 + 0x0000000000000000000000000000000000000000,0x132024d2fa2b15b992fd336077f7da8644367c84 + brainpool/brainpoolP160r1 + degenerate order = 82977018063719683 + + + brainpoolP160r1/5 + 0x0000000000000000000000000000000000000000,0x5cad9ba4b9e18c1d1167683b8d2e89340cb7391f + brainpool/brainpoolP160r1 + degenerate order = 136095069548351808925828417 + + + brainpoolP160r1/gen + 0x0000000000000000000000000000000000000000,0x0000000000000000000000000000000000000003 + brainpool/brainpoolP160r1 + generator of Fp^* + + + + brainpoolP192r1/0 + 0x000000000000000000000000000000000000000000000000,0xc302f41d932a36cda7a3463093d18db78fce476de1a86296 + brainpool/brainpoolP192r1 + degenerate order = 2 + + + brainpoolP192r1/1 + 0x000000000000000000000000000000000000000000000000,0xc2d59e85f6c3b8e1f01fc05f5185f332c44928215c7713b2 + brainpool/brainpoolP192r1 + degenerate order = 3 + + + brainpoolP192r1/2 + 0x000000000000000000000000000000000000000000000000,0x5e649a10e22dbb7f226426a753c977dc23ed974d33107dde + brainpool/brainpoolP192r1 + degenerate order = 7 + + + brainpoolP192r1/3 + 0x000000000000000000000000000000000000000000000000,0x87c26e71982b23eb6e9df053ad929f67dbd26566729d303e + brainpool/brainpoolP192r1 + degenerate order = 51326679042491 + + + brainpoolP192r1/4 + 0x000000000000000000000000000000000000000000000000,0x28bd61f0833fb3c4106cbba35c74280bdb897ffb4ef1663d + brainpool/brainpoolP192r1 + degenerate order = 2218130291019312052925190546351456293022253 + + + brainpoolP192r1/gen + 0x000000000000000000000000000000000000000000000000,0x000000000000000000000000000000000000000000000007 + brainpool/brainpoolP192r1 + generator of Fp^* + + + + brainpoolP224r1/0 + 0x00000000000000000000000000000000000000000000000000000000,0xd7c134aa264366862a18302575d1d787b09f075797da89f57ec8c0fe + brainpool/brainpoolP224r1 + degenerate order = 2 + + + brainpoolP224r1/1 + 0x00000000000000000000000000000000000000000000000000000000,0x5d0ee8269faa5766328ef18457528c874c408f5dd8b9991c005894ae + brainpool/brainpoolP224r1 + degenerate order = 3 + + + brainpoolP224r1/2 + 0x00000000000000000000000000000000000000000000000000000000,0x9fae816f63ae358d9ab07d30aed377ca63572c8b1cb1f982af33496c + brainpool/brainpoolP224r1 + degenerate order = 5 + + + brainpoolP224r1/3 + 0x00000000000000000000000000000000000000000000000000000000,0x1dfa7dc36ec72696d874d99b8b09013ce924820fdecaa1bd9cd09b7e + brainpool/brainpoolP224r1 + degenerate order = 11 + + + brainpoolP224r1/4 + 0x00000000000000000000000000000000000000000000000000000000,0x5267eb8a73ff20d570e131f6a0a33558c3a85cbecb51d7e4f4104132 + brainpool/brainpoolP224r1 + degenerate order = 89 + + + brainpoolP224r1/5 + 0x00000000000000000000000000000000000000000000000000000000,0x92d82ad4ea31d2c90853b5a0da3f3dd233ebfbee9ef3e4eb4269846f + brainpool/brainpoolP224r1 + degenerate order = 257 + + + brainpoolP224r1/6 + 0x00000000000000000000000000000000000000000000000000000000,0xc09fd12cf48c63d65e152f6a208bb2ab4eb003e1d9ddeb17d599a54c + brainpool/brainpoolP224r1 + degenerate order = 1091 + + + brainpoolP224r1/7 + 0x00000000000000000000000000000000000000000000000000000000,0x6af88537440e290df74852480f628ce983f542958c08768592e44dfa + brainpool/brainpoolP224r1 + degenerate order = 2713 + + + brainpoolP224r1/8 + 0x00000000000000000000000000000000000000000000000000000000,0x6e85c24f03a0dbdd4e4ddfe8a3c7b335f7bfeb83d6fecf3a9c1c23e6 + brainpool/brainpoolP224r1 + degenerate order = 6553 + + + brainpoolP224r1/9 + 0x00000000000000000000000000000000000000000000000000000000,0xb60e89dbc1fedacb81b2e172db5ec0b7ad6b797786582113b56d6955 + brainpool/brainpoolP224r1 + degenerate order = 1322801685354439 + + + brainpoolP224r1/10 + 0x00000000000000000000000000000000000000000000000000000000,0x6634b0f61120124365dc719bc583a9821a027bea6dd3b6366d216be3 + brainpool/brainpoolP224r1 + degenerate order = 13036179062997789943375385313119191 + + + brainpoolP224r1/gen + 0x00000000000000000000000000000000000000000000000000000000,0x00000000000000000000000000000000000000000000000000000003 + brainpool/brainpoolP224r1 + generator of Fp^* + + + + brainpoolP256r1/0 + 0x0000000000000000000000000000000000000000000000000000000000000000,0xa9fb57dba1eea9bc3e660a909d838d726e3bf623d52620282013481d1f6e5376 + brainpool/brainpoolP256r1 + degenerate order = 2 + + + brainpoolP256r1/1 + 0x0000000000000000000000000000000000000000000000000000000000000000,0x88dbe84830c188e78ac83f1107fbd561631bdc35d59ec7fb8ed568b12eb8dbab + brainpool/brainpoolP256r1 + degenerate order = 5 + + + brainpoolP256r1/2 + 0x0000000000000000000000000000000000000000000000000000000000000000,0x295770494572e605f3a972816bf9c65701efe08c180da9736ad216400553b2ea + brainpool/brainpoolP256r1 + degenerate order = 23 + + + brainpoolP256r1/3 + 0x0000000000000000000000000000000000000000000000000000000000000000,0x817663dd4fecc333507f8d78f9605b24196d7e212d0184f277768751c2ec4c46 + brainpool/brainpoolP256r1 + degenerate order = 1667 + + + brainpoolP256r1/4 + 0x0000000000000000000000000000000000000000000000000000000000000000,0x716b3a9abe12db2eeb97c18ecb121d31eed98538c62d35fc5a28ba9b930d4ae5 + brainpool/brainpoolP256r1 + degenerate order = 149459 + + + brainpoolP256r1/5 + 0x0000000000000000000000000000000000000000000000000000000000000000,0x2ddf09c88fb6f4d0ffa124121cc3a3cd34254e45a2361f4ba3c2cef5e9098d5f + brainpool/brainpoolP256r1 + degenerate order = 17543087 + + + brainpoolP256r1/6 + 0x0000000000000000000000000000000000000000000000000000000000000000,0x029af8201d9619fb12bc9238dbeeed0629fc221438893b6ca92b44d7459a9bfb + brainpool/brainpoolP256r1 + degenerate order = 3059213862715144055733503214373292934438943635608167530247 + + + brainpoolP256r1/gen + 0x0000000000000000000000000000000000000000000000000000000000000000,0x000000000000000000000000000000000000000000000000000000000000000b + brainpool/brainpoolP256r1 + generator of Fp^* + + + + brainpoolP320r1/0 + 0x00000000000000000000000000000000000000000000000000000000000000000000000000000000,0xd35e472036bc4fb7e13c785ed201e065f98fcfa6f6f40def4f92b9ec7893ec28fcd412b1f1b32e26 + brainpool/brainpoolP320r1 + degenerate order = 2 + + + brainpoolP320r1/1 + 0x00000000000000000000000000000000000000000000000000000000000000000000000000000000,0x762fa9e1988fdb911a91a2ee9938e0c667364417df5b2a1d470dfcb2386fc42bec7c67b3595dcd8e + brainpool/brainpoolP320r1 + degenerate order = 11 + + + brainpoolP320r1/2 + 0x00000000000000000000000000000000000000000000000000000000000000000000000000000000,0x04fe1e15fa803fdb486be596b00abc53feb2eeeb9081d5b2a539e333646138d298d36b588bfbd041 + brainpool/brainpoolP320r1 + degenerate order = 13 + + + brainpoolP320r1/3 + 0x00000000000000000000000000000000000000000000000000000000000000000000000000000000,0x595c3f8fddf0bca7f722d69a59d0cf269bea1e5f1e5b0ed7ad0ae6341a30ef8733865deb5996bb37 + brainpool/brainpoolP320r1 + degenerate order = 59 + + + brainpoolP320r1/4 + 0x00000000000000000000000000000000000000000000000000000000000000000000000000000000,0x85de1d0bfec99e087e3315a045261dfa7ad55e035575d61d858c7b4dc807df052b2dbfa803374020 + brainpool/brainpoolP320r1 + degenerate order = 196907 + + + brainpoolP320r1/5 + 0x00000000000000000000000000000000000000000000000000000000000000000000000000000000,0x044664f95553a4e4204b3c584eed7eb3c91ae92c8ee7dc9ee37e7cc067b58688c42fa8f26f3ad828 + brainpool/brainpoolP320r1 + degenerate order = 146208281456251399783 + + + brainpoolP320r1/6 + 0x00000000000000000000000000000000000000000000000000000000000000000000000000000000,0x0d728bc8ccd9b7fd249f959dad0b57ff028e7858deff4cf9c9d65b11e3b5bbd01b6f568be5910dd6 + brainpool/brainpoolP320r1 + degenerate order = 2307908307480288228542246803936276549862379769663891118114524423 + + + brainpoolP320r1/gen + 0x00000000000000000000000000000000000000000000000000000000000000000000000000000000,0x00000000000000000000000000000000000000000000000000000000000000000000000000000005 + brainpool/brainpoolP320r1 + generator of Fp^* + + + + brainpoolP384r1/0 + 0x000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000,0x8cb91e82a3386d280f5d6f7e50e641df152f7109ed5456b412b1da197fb71123acd3a729901d1a71874700133107ec52 + brainpool/brainpoolP384r1 + degenerate order = 2 + + + brainpoolP384r1/1 + 0x000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000,0x70269a7b61909d9fbdc89c77a359c168b31f40d488f4a817f2811d0aeda71aec407ecb8d2d561af30e52ab55bb126ae9 + brainpool/brainpoolP384r1 + degenerate order = 3 + + + brainpoolP384r1/2 + 0x000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000,0x3ef4b5a9b5525a600cdfd481ff13dbeacb9f25f29af360d0e9bed208a4b650f9a26bbe89248d3bf7bc5cfd1bf1108054 + brainpool/brainpoolP384r1 + degenerate order = 5 + + + brainpoolP384r1/3 + 0x000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000,0x8ca0a25e4fbf0d7b69585acdd9cb26f2cc2e6036061a960c9f342c0c2f2bef9ce8d410df3da73f2955f82dc6cfede0f6 + brainpool/brainpoolP384r1 + degenerate order = 11 + + + brainpoolP384r1/4 + 0x000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000,0x7ca77491eca28a1dd1667da80aa95ecbe84ba9e379e12d1d30482790c43dcd59a0e0e2e8fad09dac4ead54b18e4911b2 + brainpool/brainpoolP384r1 + degenerate order = 79 + + + brainpoolP384r1/5 + 0x000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000,0x34d6057691520ed040a958956ee8821efffa9f4827f8507b9f7d86ffdccee6a09a866839b9b631fae9b330ece487a1fb + brainpool/brainpoolP384r1 + degenerate order = 734647 + + + brainpoolP384r1/6 + 0x000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000,0x8c1e0c36b3dd4de379143acb43f078cb211543f95d85405fbcc2474f6c88701d5aece6c92d8d21e2b7b42be1e7da67b3 + brainpool/brainpoolP384r1 + degenerate order = 27093605140967 + + + brainpoolP384r1/7 + 0x000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000,0x7d712d6ebcceb876c1f40263ad5c952cf2264c660c17d4567a24dfb776cd94182560094ab0f1353341851079bfdf99bd + brainpool/brainpoolP384r1 + degenerate order = 3012146720727260651 + + + brainpoolP384r1/8 + 0x000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000,0x84cf53d9ffa36b9300dcf53a1db4030f5afba0c2b5299685620432993772359358ccef721662b7d6b679207517b52817 + brainpool/brainpoolP384r1 + degenerate order = 13857381403312519376221497559214358876512960238914501360589056738895920081 + + + brainpoolP384r1/gen + 0x000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000,0x000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000003 + brainpool/brainpoolP384r1 + generator of Fp^* + + + + + diff --git a/src/cz/crcs/ectester/data/degenerate/keys.xml b/src/cz/crcs/ectester/data/degenerate/keys.xml new file mode 100644 index 0000000..cbeecce --- /dev/null +++ b/src/cz/crcs/ectester/data/degenerate/keys.xml @@ -0,0 +1,16 @@ + + + + ]> + + + &secg; + &brainpool; + \ No newline at end of file diff --git a/src/cz/crcs/ectester/data/degenerate/secg.xml b/src/cz/crcs/ectester/data/degenerate/secg.xml new file mode 100644 index 0000000..7d6bce8 --- /dev/null +++ b/src/cz/crcs/ectester/data/degenerate/secg.xml @@ -0,0 +1,628 @@ + + secp112r1/0 + 0x0000000000000000000000000000,0xdb7c2abf62e35e668076bead208a + secg/secp112r1 + degenerate order = 2 + + + secp112r1/1 + 0x0000000000000000000000000000,0x75087e0bcdb604d9ca3a0998a8f6 + secg/secp112r1 + degenerate order = 23 + + + secp112r1/2 + 0x0000000000000000000000000000,0x9ceca7fd3423a8580f4d8be19b71 + secg/secp112r1 + degenerate order = 452873 + + + secp112r1/3 + 0x0000000000000000000000000000,0x250b6a43ac8a790cf22b7cdb36bd + secg/secp112r1 + degenerate order = 213692946505768378488901547 + + + secp112r1/gen + 0x0000000000000000000000000000,0x0000000000000000000000000005 + secg/secp112r1 + generator of Fp^* + + + + secp128r1/0 + 0x00000000000000000000000000000000,0xfffffffdfffffffffffffffffffffffe + secg/secp128r1 + degenerate order = 2 + + + secp128r1/1 + 0x00000000000000000000000000000000,0x0a50650222aa47d2cd1077082c2b77a1 + secg/secp128r1 + degenerate order = 3 + + + secp128r1/2 + 0x00000000000000000000000000000000,0x5acdd440659ebf4945f5e131da2097c4 + secg/secp128r1 + degenerate order = 7 + + + secp128r1/3 + 0x00000000000000000000000000000000,0x86ba614538631a14c10485c80d2e52aa + secg/secp128r1 + degenerate order = 2700653704464143955832110573370478657 + + + secp128r1/gen + 0x00000000000000000000000000000000,0x00000000000000000000000000000003 + secg/secp128r1 + generator of Fp^* + + + + secp160r2/0 + 0x0000000000000000000000000000000000000000,0xfffffffffffffffffffffffffffffffeffffac72 + secg/secp160r2 + degenerate order = 2 + + + secp160r2/1 + 0x0000000000000000000000000000000000000000,0x9ba48cba5ebcb9b6bd33b92830b2a2e0e192f10a + secg/secp160r2 + degenerate order = 3 + + + secp160r2/2 + 0x0000000000000000000000000000000000000000,0x508a8264d56922add3cd40482649d840497476e8 + secg/secp160r2 + degenerate order = 5 + + + secp160r2/3 + 0x0000000000000000000000000000000000000000,0x36aec30a63930538841d0324a54aecf4f89bf859 + secg/secp160r2 + degenerate order = 7 + + + secp160r2/4 + 0x0000000000000000000000000000000000000000,0xd2204d87c083aa9062de5c195c88de10d5f82f39 + secg/secp160r2 + degenerate order = 113 + + + secp160r2/5 + 0x0000000000000000000000000000000000000000,0xaf2fb7626db439a172b14b80a13f4f871d0aaf97 + secg/secp160r2 + degenerate order = 61588775277324185343602394973294691093621473 + + + secp160r2/gen + 0x0000000000000000000000000000000000000000,0x0000000000000000000000000000000000000002 + secg/secp160r2 + generator of Fp^* + + + + secp160r1/0 + 0x0000000000000000000000000000000000000000,0xffffffffffffffffffffffffffffffff7ffffffe + secg/secp160r1 + degenerate order = 2 + + + secp160r1/1 + 0x0000000000000000000000000000000000000000,0x5286e47bcbf86e7587ca6053773787924c765eb8 + secg/secp160r1 + degenerate order = 3 + + + secp160r1/2 + 0x0000000000000000000000000000000000000000,0x6c391d32e5649a5a9fdd84584abc45d0e3604ad0 + secg/secp160r1 + degenerate order = 19 + + + secp160r1/3 + 0x0000000000000000000000000000000000000000,0x26c2e1fa26e422ee36b7cdf067cd73278d1d2da4 + secg/secp160r1 + degenerate order = 115901 + + + secp160r1/4 + 0x0000000000000000000000000000000000000000,0xffcb6408974e4377c57bd619ef22e839bc025fe1 + secg/secp160r1 + degenerate order = 6030259 + + + secp160r1/5 + 0x0000000000000000000000000000000000000000,0x14cc0ef773488d788c437edb4e462689cb9e6004 + secg/secp160r1 + degenerate order = 104179991 + + + secp160r1/6 + 0x0000000000000000000000000000000000000000,0xbdaa241dd40b0d7df97b00b41170fcb4a6fdabf9 + secg/secp160r1 + degenerate order = 176070659401435712181211511 + + + secp160r1/gen + 0x0000000000000000000000000000000000000000,0x0000000000000000000000000000000000000003 + secg/secp160r1 + generator of Fp^* + + + + secp192r1/0 + 0x000000000000000000000000000000000000000000000000,0xfffffffffffffffffffffffffffffffefffffffffffffffe + secg/secp192r1 + degenerate order = 2 + + + secp192r1/1 + 0x000000000000000000000000000000000000000000000000,0x2f9fe7a38e825c1f01de3418bc1d118d66ed4626e89a9b62 + secg/secp192r1 + degenerate order = 59 + + + secp192r1/2 + 0x000000000000000000000000000000000000000000000000,0x9fbf41aed6e2e0ef99359b0316f6645402f602a520af5e3f + secg/secp192r1 + degenerate order = 149309 + + + secp192r1/3 + 0x000000000000000000000000000000000000000000000000,0x8c89aea49b8b009d7f0d0e3af71bdd9bba9fbde0fabc5f9e + secg/secp192r1 + degenerate order = 11393611 + + + secp192r1/4 + 0x000000000000000000000000000000000000000000000000,0xbfc817a4572bbd90b5a1b7bdcc3f2822d79fc8445541b033 + secg/secp192r1 + degenerate order = 108341181769254293 + + + secp192r1/5 + 0x000000000000000000000000000000000000000000000000,0xef8804cd3326d6354ecc3ec957019d8fde73325cf7ffd877 + secg/secp192r1 + degenerate order = 288626509448065367648032903 + + + secp192r1/gen + 0x000000000000000000000000000000000000000000000000,0x00000000000000000000000000000000000000000000000b + secg/secp192r1 + generator of Fp^* + + + + secp192k1/0 + 0x000000000000000000000000000000000000000000000000,0xfffffffffffffffffffffffffffffffffffffffeffffee36 + secg/secp192k1 + degenerate order = 2 + + + secp192k1/1 + 0x000000000000000000000000000000000000000000000000,0xbb85691939b869c1d087f601554b96b80cb4f55b35f433c2 + secg/secp192k1 + degenerate order = 3 + + + secp192k1/2 + 0x000000000000000000000000000000000000000000000000,0x52bc2dde06d9be0fca70e761d5f395852750edf7e5ded184 + secg/secp192k1 + degenerate order = 7 + + + secp192k1/3 + 0x000000000000000000000000000000000000000000000000,0x0e79be49b05f5ac28e2ac611eeafb14a4c75900d643ff5fe + secg/secp192k1 + degenerate order = 11 + + + secp192k1/4 + 0x000000000000000000000000000000000000000000000000,0xc06c0ad9b66541332b54f95c96021bfb6d6edfccc3c01c6a + secg/secp192k1 + degenerate order = 1295233555201613 + + + secp192k1/5 + 0x000000000000000000000000000000000000000000000000,0xf73770178fa1a34019c04218683af4621b41b80e9669f2a5 + secg/secp192k1 + degenerate order = 10489845818524887021689201254173392444641 + + + secp192k1/gen + 0x000000000000000000000000000000000000000000000000,0x000000000000000000000000000000000000000000000003 + secg/secp192k1 + generator of Fp^* + + + + secp224r1/0 + 0x00000000000000000000000000000000000000000000000000000000,0xffffffffffffffffffffffffffffffff000000000000000000000000 + secg/secp224r1 + degenerate order = 2 + + + secp224r1/1 + 0x00000000000000000000000000000000000000000000000000000000,0x94353937171b8337606664f1900be8995691cf49934d5551cc5ace29 + secg/secp224r1 + degenerate order = 3 + + + secp224r1/2 + 0x00000000000000000000000000000000000000000000000000000000,0xa2bd9c773c593dd8031caa9a1d9f6483b4731af7167d6d795e0d9e9f + secg/secp224r1 + degenerate order = 5 + + + secp224r1/3 + 0x00000000000000000000000000000000000000000000000000000000,0xf15055c151148708a733ec4650e58279fb849e792c4af526f029729a + secg/secp224r1 + degenerate order = 17 + + + secp224r1/4 + 0x00000000000000000000000000000000000000000000000000000000,0xef92abfcfef7401f48b092a12e1abd4834f0de67a8fabccfec740794 + secg/secp224r1 + degenerate order = 257 + + + secp224r1/5 + 0x00000000000000000000000000000000000000000000000000000000,0x3acd587a1347c0b6b0e94dc195e63cae7bd568649255ea00f8c3f844 + secg/secp224r1 + degenerate order = 641 + + + secp224r1/6 + 0x00000000000000000000000000000000000000000000000000000000,0x7515e65e8ab6e99753c979b6b111d4dd7f9a5cc17ef79d43924b38a9 + secg/secp224r1 + degenerate order = 65537 + + + secp224r1/7 + 0x00000000000000000000000000000000000000000000000000000000,0x872df407d9718cf23e4a9b3da9226accec9cf29f4fb1d287f222c841 + secg/secp224r1 + degenerate order = 274177 + + + secp224r1/8 + 0x00000000000000000000000000000000000000000000000000000000,0x3012a7ffd8177bfdc61e62209414d3ec85bf25334e231f9dec255211 + secg/secp224r1 + degenerate order = 6700417 + + + secp224r1/9 + 0x00000000000000000000000000000000000000000000000000000000,0xf366138e28cf4ac57586d5759a79949fa71225114a8925cf21a2ae35 + secg/secp224r1 + degenerate order = 67280421310721 + + + secp224r1/gen + 0x00000000000000000000000000000000000000000000000000000000,0x00000000000000000000000000000000000000000000000000000016 + secg/secp224r1 + generator of Fp^* + + + + secp256r1/0 + 0x0000000000000000000000000000000000000000000000000000000000000000,0xffffffff00000001000000000000000000000000fffffffffffffffffffffffe + secg/secp256r1 + degenerate order = 2 + + + secp256r1/1 + 0x0000000000000000000000000000000000000000000000000000000000000000,0x4d6ea8928adb86cf62388a8e0ef623312e68c59bdef3e53fd964598eb819acce + secg/secp256r1 + degenerate order = 3 + + + secp256r1/2 + 0x0000000000000000000000000000000000000000000000000000000000000000,0x0dc5b3bf9607f9854b836abbd19428f556a1cea2ebb7a71e3e71710ffa4f2b0e + secg/secp256r1 + degenerate order = 5 + + + secp256r1/3 + 0x0000000000000000000000000000000000000000000000000000000000000000,0x04b8252e44493fb6f06c6b88e3c665c9f0d470cc964557955b267519f531a262 + secg/secp256r1 + degenerate order = 17 + + + secp256r1/4 + 0x0000000000000000000000000000000000000000000000000000000000000000,0xd18ddce5e27dd6a457c4ab955e351bb61b4d8d796ef679744fc0554baa8d8fc2 + secg/secp256r1 + degenerate order = 257 + + + secp256r1/5 + 0x0000000000000000000000000000000000000000000000000000000000000000,0xa319d26b19bcd46157ff4f68c57b3a3f780dd35a9df3dd4a4991ea6fffa0d54e + secg/secp256r1 + degenerate order = 641 + + + secp256r1/6 + 0x0000000000000000000000000000000000000000000000000000000000000000,0xc0875c9f1d579d82da2e2e3bf14cb1f836852a2349501fd82ded6f8e772301c7 + secg/secp256r1 + degenerate order = 1531 + + + secp256r1/7 + 0x0000000000000000000000000000000000000000000000000000000000000000,0xef45524f9bdfa9473bb8020719dbc64297b7f80ea1939fb69041e799d3d5c977 + secg/secp256r1 + degenerate order = 65537 + + + secp256r1/8 + 0x0000000000000000000000000000000000000000000000000000000000000000,0x69214c4575b40595c02c63b57fb6de6ce6bb01e34c4a7a4cfa38fa917d3b5f74 + secg/secp256r1 + degenerate order = 490463 + + + secp256r1/9 + 0x0000000000000000000000000000000000000000000000000000000000000000,0xc01fe1a04efa7f9e140ccea80e206c138fa68f40900d0b75b36241e4a05f8d40 + secg/secp256r1 + degenerate order = 6700417 + + + secp256r1/10 + 0x0000000000000000000000000000000000000000000000000000000000000000,0xcf8f641aa234fe4b4e4d2620abc597a13300e19bcfa247ec3c33123ce7d719cb + secg/secp256r1 + degenerate order = 835945042244614951780389953367877943453916927241 + + + secp256r1/gen + 0x0000000000000000000000000000000000000000000000000000000000000000,0x0000000000000000000000000000000000000000000000000000000000000006 + secg/secp256r1 + generator of Fp^* + + + + secp256k1/0 + 0x00000000000000000000000000000000000000000000000000000000000000000000,0x0000fffffffffffffffffffffffffffffffffffffffffffffffffffffffefffffc2e + secg/secp256k1 + degenerate order = 2 + + + secp256k1/1 + 0x00000000000000000000000000000000000000000000000000000000000000000000,0x0000851695d49a83f8ef919bb86153cbcb16630fb68aed0a766a3ec693d68e6afa40 + secg/secp256k1 + degenerate order = 3 + + + secp256k1/2 + 0x00000000000000000000000000000000000000000000000000000000000000000000,0x0000a2ab335e7a5b9784e9425431411a8f02a1e39029745c0d2567e7b217154fe2cb + secg/secp256k1 + degenerate order = 7 + + + secp256k1/3 + 0x00000000000000000000000000000000000000000000000000000000000000000000,0x000068105a205ec4e9ceb2b1dd5285ab623cf09e207bad567e15482d24e582ff833f + secg/secp256k1 + degenerate order = 13441 + + + secp256k1/4 + 0x00000000000000000000000000000000000000000000000000000000000000000000,0x0000212e9abc82e8709493c087cd14e2ebd253ecf3cd0abd68a2b7b766fcc2aa4ca6 + secg/secp256k1 + degenerate order = 205115282021455665897114700593932402728804164701536103180137503955397371 + + + secp256k1/gen + 0x00000000000000000000000000000000000000000000000000000000000000000000,0x00000000000000000000000000000000000000000000000000000000000000000003 + secg/secp256k1 + generator of Fp^* + + + + secp384r1/0 + 0x000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000,0xfffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffeffffffff0000000000000000fffffffe + secg/secp384r1 + degenerate order = 2 + + + secp384r1/1 + 0x000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000,0xad23fbead5a22478b4da040e57fea836a345078a37cb2c7045c3daf1de0db10dbda32da13fd3da4dcf3d95150e3522c8 + secg/secp384r1 + degenerate order = 19 + + + secp384r1/2 + 0x000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000,0x83eb94214f07c841569b4da60430f7fc19aef03de2d2812d91ae40f9b2a7f5a83262b640fa4b31995a93869f71109783 + secg/secp384r1 + degenerate order = 67 + + + secp384r1/3 + 0x000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000,0xb3538721ea2a7edbae6973a8efb8f5109f49af10882e02239c90c7581c7f00f4cd892daede62ca75dd89971cedb618f0 + secg/secp384r1 + degenerate order = 807145746439 + + + secp384r1/4 + 0x000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000,0xab5c6abb2811893a9a7c4d0331e755786b1555daa209b805aec474a742d0cfd02c511e764f764543b394c6c7f89865e5 + secg/secp384r1 + degenerate order = 19173790298027098165721053155794528970226934547887232785722672956982046098136719667167519737147526097 + + + secp384r1/gen + 0x000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000,0x000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000013 + secg/secp384r1 + generator of Fp^* + + + + secp521r1/0 + 0x000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000,0x01fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe + secg/secp521r1 + degenerate order = 2 + + + secp521r1/1 + 0x000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000,0x0032749246cef38c558b84265cbe9454c5b08624d5cb14a69636a701122712fcae5faafa042ad6c33247520b119fd582bcd5a02f43e801348f88f734ddb0b41f5b39 + secg/secp521r1 + degenerate order = 3 + + + secp521r1/2 + 0x000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000,0x01257bef538f850baff583c2dccc5da15be046297570d85a4dfa580a1fe9534b616321c5fb944fe9a7927ad420147aba2b6793e1a7ec25556c21ba0c60d1f29f7e93 + secg/secp521r1 + degenerate order = 5 + + + secp521r1/3 + 0x000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000,0x01f2f4b8697ed47692e132c92228e98f0dfe1d7b868852a7d76cf9f5c08ade0dfb5033be7c9dca15b8aa68fab9a01b35abd28b490ae8f8fcfa1a2bd50bcecbca89bc + secg/secp521r1 + degenerate order = 11 + + + secp521r1/4 + 0x000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000,0x001836c4a3a70b921586e1194e0a17cb438619edb43846933957b7a9dc09d0f447c6a0d3163cf3a5bc8ba2b4a55658e70602dc3512021d48ece14cd625e7ac7f5985 + secg/secp521r1 + degenerate order = 17 + + + secp521r1/5 + 0x000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000,0x01736df798237091ff59864f3fd212e01b6c496869bdc020beabf83bf656abf6fcce4c6286ea5caf1002401e1f272b1321850ad1d38e9e66abd68be0e79ad6834daa + secg/secp521r1 + degenerate order = 31 + + + secp521r1/6 + 0x000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000,0x011d3bf2a0312f01791ff702149a1616abb9e7cfa93f1ec4c7b9612c5204dfa8a76fcbb24a370774a2f615d98caf2964f87658de9c619b778343275a257cde6c7bab + secg/secp521r1 + degenerate order = 41 + + + secp521r1/7 + 0x000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000,0x0085a52672e46236148b9485bcede803ffab149344b77a389c7537bb94b9df1b3a3854192fa512c6da411653f93d8db663fd4586beef48cd05208f38870fcd763f59 + secg/secp521r1 + degenerate order = 53 + + + secp521r1/8 + 0x000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000,0x01f5a1f4766a51e254ac60b54635b79f5830543199fdb957c0e161640a0f74a3fa85cced7857f26bd4be935b06d9fa535d9948f3bcbf1d2dadff3125c8807a21a6d6 + secg/secp521r1 + degenerate order = 131 + + + secp521r1/9 + 0x000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000,0x00dc13e71619071f58005d54b6b16682be219d85946ea9d199f81591f795003a508b5ea8e7a392450bc2da15673d0deb35d56ac9c10ab0887a1bdcbfd0c86d9d0213 + secg/secp521r1 + degenerate order = 157 + + + secp521r1/10 + 0x000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000,0x000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000004000000000000000000000000000000 + secg/secp521r1 + degenerate order = 521 + + + secp521r1/11 + 0x000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000,0x00309b3c9a4b45feef07448138eccff629e43e28acdb4fec0e08b0dff64e7292a076a9c733f209232968d60a7d9b7c08026865300f0c355f92021e9238b0558b483f + secg/secp521r1 + degenerate order = 1613 + + + secp521r1/12 + 0x000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000,0x00662f3ca82bbfc958876666a9902a96f3437fb0999c8fa28490d8a51c89a1822d576ec48085e14bd55b6cf5cd89903cbe83b3eeef30ec38e1c885222ffc954e8b84 + secg/secp521r1 + degenerate order = 2731 + + + secp521r1/13 + 0x000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000,0x00f50e74a0ed52f6181c9a1c070de5f693c3d409e4e3bb668935b45d2a2cffcd4daabc6797d8914f18cdd44a13de1b71ca14fea6e611848495ced1f719395eed453f + secg/secp521r1 + degenerate order = 8191 + + + secp521r1/14 + 0x000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000,0x0156f644f4d1c482f9c79e122733067cac22834fdb56ddec5e486bbd2e61bda8ec451cce3db115e8424793bc754744fc448b8100015a4f6b8a46b5dd38efec521841 + secg/secp521r1 + degenerate order = 42641 + + + secp521r1/15 + 0x000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000,0x018c5c75b44635605ab7f529f86851e323612933fe10cbc72a806c2bafb86e85d254246e1c7468466cc8663cd1cc3aa44ff15ad808e729df4e75fb23da6374d48e8b + secg/secp521r1 + degenerate order = 51481 + + + secp521r1/16 + 0x000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000,0x0043c1af0a225ffebeb76cf2d98e0480691871125d1c65304789110f60941a8e3b6265fbe338f584569f0245984050cc94afc190bcc1abc143c557609644cf10f3cf + secg/secp521r1 + degenerate order = 61681 + + + secp521r1/17 + 0x000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000,0x00391b1adb891ad8156a8056781c9f665eb51cd4fa6837fc2a7d7d31f7161a7b94b52a7697f24e956b4eec6956d483f52efad14f581360bc8091544932bc14767a3a + secg/secp521r1 + degenerate order = 409891 + + + secp521r1/18 + 0x000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000,0x01757c67f02f8b94f08642e00d4032a721d13a34243686fbb4cec8c0472bbda45fba8ab338b4afd7bac07260b4e8a21a8997eaee01cb5928f605ce0587138fde3e8c + secg/secp521r1 + degenerate order = 858001 + + + secp521r1/19 + 0x000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000,0x009297636ecc72ad872103c99fd3ed0ee94d24af2051d87d77a96df45b52ff26df768d8ddc0ce6e53d24ac482f9b3cc7b6ebf25601a47ce9ba95052a5dc80e4c79e5 + secg/secp521r1 + degenerate order = 5746001 + + + secp521r1/20 + 0x000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000,0x0130713f9de95587ba4272d1a5e996beee9530e10bd5c15e3e531a9f7ae59e0587106db1802309f49b5812e8811aa667d0ce9b838d814e984caf2833e2144dfc57b7 + secg/secp521r1 + degenerate order = 7623851 + + + secp521r1/21 + 0x000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000,0x00d08a1bd1285c19d86a1a4fd85f378bcd09a83addfdcc7e392fa9d8f9fa00b3d4af8887aff110f565c50cbc3b99bd7e5d55e051eeea5772cafb6bcec9e936de4955 + secg/secp521r1 + degenerate order = 34110701 + + + secp521r1/22 + 0x000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000,0x00791d7f3bf9c19a1b61f8f262a2e60a22fa9adfdcc0d6afeffab8068fbd91bc079188ba0365c0fe86c92073e244294a0da331ba36ccd01dcf323e92b16d11ca2b39 + secg/secp521r1 + degenerate order = 308761441 + + + secp521r1/23 + 0x000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000,0x0066fd8474256e396de2160ee4590caccdec49c5d099e12c7e405315a92dfb21e8277549d8d291744d79b841e8e1e86d5273fe07d3f56fed6f1c1220c2c217c289ef + secg/secp521r1 + degenerate order = 2400573761 + + + secp521r1/24 + 0x000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000,0x01e5be0afc4fa36bc186c73de3ab924e6572d2b239887cf028af290befab2b168e7333f78a80f66525d5bd1534c8fab6b002c5ce2ac2279c1dc0f356dc199ff98c42 + secg/secp521r1 + degenerate order = 65427463921 + + + secp521r1/25 + 0x000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000,0x019d8298bbd7449ff8e27bb3cd2243c182bd8dee40b287e903b1da711cf8f90f21b8ab497aba68fa6f252998a16eea60f6ec0a747f58dbf34e5e4544e7b392fb96ce + secg/secp521r1 + degenerate order = 108140989558681 + + + secp521r1/26 + 0x000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000,0x01243fb23685cf51dcab5d05385275f63fd3eb2225aeb2ae3e0e0260d09e84c6a7f655ece1b14e54b17aa512c55ed94168a203bf70c908e1934f8b6fc04f971cdbfc + secg/secp521r1 + degenerate order = 145295143558111 + + + secp521r1/27 + 0x000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000,0x01f803543c1ed5ed182210105552c99b8df0b740f67423a960cd35327914efbf2ae2d4debd0116ffa6d726f9727123f3a2083c8f4633a6a6531afcea86b72a301c6c + secg/secp521r1 + degenerate order = 173308343918874810521923841 + + + secp521r1/gen + 0x000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000,0x000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000003 + secg/secp521r1 + generator of Fp^* + diff --git a/src/cz/crcs/ectester/reader/ECTesterReader.java b/src/cz/crcs/ectester/reader/ECTesterReader.java index e982721..0a3031b 100644 --- a/src/cz/crcs/ectester/reader/ECTesterReader.java +++ b/src/cz/crcs/ectester/reader/ECTesterReader.java @@ -247,7 +247,7 @@ public class ECTesterReader { 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. [test_suite]:\n- default:\n- invalid:\n- twist:\n- cofactor:\n- wrong:\n- composite:\n- test-vectors:").hasArg().argName("test_suite").optionalArg(true).build()); + actions.addOption(Option.builder("t").longOpt("test").desc("Test ECC support. [test_suite]:\n- default:\n- invalid:\n- twist:\n- degenerate:\n- cofactor:\n- wrong:\n- composite:\n- test-vectors:").hasArg().argName("test_suite").optionalArg(true).build()); actions.addOption(Option.builder("dh").longOpt("ecdh").desc("Do EC KeyAgreement (ECDH...), [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()); @@ -429,6 +429,9 @@ public class ECTesterReader { case "invalid": suite = new CardInvalidCurvesSuite(writer, cfg, cardManager); break; + case "degenerate": + suite = new CardDegenerateCurvesSuite(writer, cfg, cardManager); + break; case "twist": suite = new CardTwistTestSuite(writer, cfg, cardManager); break; @@ -764,7 +767,7 @@ public class ECTesterReader { } testSuite = cli.getOptionValue("test", "default").toLowerCase(); - String[] tests = new String[]{"default", "composite", "invalid", "test-vectors", "wrong", "twist", "cofactor"}; + String[] tests = new String[]{"default", "composite", "invalid", "degenerate", "test-vectors", "wrong", "twist", "cofactor"}; if (!Arrays.asList(tests).contains(testSuite)) { System.err.println("Unknown test suite " + testSuite + ". Should be one of: " + Arrays.toString(tests)); return false; diff --git a/src/cz/crcs/ectester/reader/test/CardDegenerateCurvesSuite.java b/src/cz/crcs/ectester/reader/test/CardDegenerateCurvesSuite.java new file mode 100644 index 0000000..81c2fbf --- /dev/null +++ b/src/cz/crcs/ectester/reader/test/CardDegenerateCurvesSuite.java @@ -0,0 +1,55 @@ +package cz.crcs.ectester.reader.test; + +import cz.crcs.ectester.applet.ECTesterApplet; +import cz.crcs.ectester.applet.EC_Consts; +import cz.crcs.ectester.common.ec.EC_Curve; +import cz.crcs.ectester.common.ec.EC_Key; +import cz.crcs.ectester.common.output.TestWriter; +import cz.crcs.ectester.common.test.CompoundTest; +import cz.crcs.ectester.common.test.Result; +import cz.crcs.ectester.common.test.Test; +import cz.crcs.ectester.data.EC_Store; +import cz.crcs.ectester.reader.CardMngr; +import cz.crcs.ectester.reader.ECTesterReader; +import cz.crcs.ectester.reader.command.Command; + +import java.util.LinkedList; +import java.util.List; +import java.util.Map; + +/** + * @author Jan Jancar johny@neuromancer.sk + */ +public class CardDegenerateCurvesSuite extends CardTestSuite { + + public CardDegenerateCurvesSuite(TestWriter writer, ECTesterReader.Config cfg, CardMngr cardManager) { + super(writer, cfg, cardManager, "degenerate", "The degenerate suite tests whether the card rejects points outside of the curve during ECDH.\n" + + "The tested points lie on a part of the plane for which some Edwards, Hessian and Huff form addition formulas work."); + } + + @Override + protected void runTests() throws Exception { + Map pubkeys = EC_Store.getInstance().getObjects(EC_Key.Public.class, "degenerate"); + List>> curveList = EC_Store.mapToCurve(pubkeys.values()); + for (Map.Entry> e : curveList) { + EC_Curve curve = e.getKey(); + List keys = e.getValue(); + + Test allocate = CommandTest.expect(new Command.Allocate(this.card, ECTesterApplet.KEYPAIR_BOTH, curve.getBits(), curve.getField()), Result.ExpectedValue.SUCCESS); + Test set = CommandTest.expect(new Command.Set(this.card, ECTesterApplet.KEYPAIR_BOTH, EC_Consts.CURVE_external, curve.getParams(), curve.flatten()), Result.ExpectedValue.SUCCESS); + Test generate = CommandTest.expect(new Command.Generate(this.card, ECTesterApplet.KEYPAIR_LOCAL), Result.ExpectedValue.SUCCESS); + + Test prepare = CompoundTest.all(Result.ExpectedValue.SUCCESS, "Prepare and generate keypair on " + curve.getId(), allocate, set, generate); + + List ecdhTests = new LinkedList<>(); + for (EC_Key.Public pub : keys) { + Command ecdhCommand = new Command.ECDH_direct(this.card, ECTesterApplet.KEYPAIR_LOCAL, ECTesterApplet.EXPORT_FALSE, EC_Consts.TRANSFORMATION_NONE, EC_Consts.KeyAgreement_ALG_EC_SVDP_DH, pub.flatten()); + ecdhTests.add(CommandTest.expect(ecdhCommand, Result.ExpectedValue.FAILURE, "Card correctly rejected point on degenerate curve.", "Card incorrectly accepted point on degenerate curve.")); + } + Test ecdh = CompoundTest.all(Result.ExpectedValue.SUCCESS, "Perform ECDH with degenerate public points", ecdhTests.toArray(new Test[0])); + + doTest(CompoundTest.greedyAllTry(Result.ExpectedValue.SUCCESS, "Degenerate curve test of " + curve.getId(), prepare, ecdh)); + new Command.Cleanup(this.card).send(); + } + } +} -- cgit v1.3.1