From 87ee30fdf73db49cc538985a3937b8a792c2b30f Mon Sep 17 00:00:00 2001 From: J08nY Date: Fri, 19 Jan 2018 18:06:23 +0100 Subject: Add quadratic twist tests into their own test suite. --- src/cz/crcs/ectester/data/twist/nist/b163.xml | 12 ++--- src/cz/crcs/ectester/data/twist/nist/b233.xml | 14 ++--- src/cz/crcs/ectester/data/twist/nist/b283.xml | 14 ++--- src/cz/crcs/ectester/data/twist/nist/k163.xml | 10 ++-- src/cz/crcs/ectester/data/twist/nist/k233.xml | 12 ++--- src/cz/crcs/ectester/data/twist/nist/k283.xml | 4 +- src/cz/crcs/ectester/data/twist/nist/p192.xml | 6 +-- src/cz/crcs/ectester/data/twist/nist/p224.xml | 14 ++--- src/cz/crcs/ectester/data/twist/nist/p256.xml | 10 ++-- src/cz/crcs/ectester/data/twist/nist/p384.xml | 2 +- src/cz/crcs/ectester/data/twist/nist/p521.xml | 10 ++-- src/cz/crcs/ectester/reader/ECTesterReader.java | 7 ++- .../reader/test/CardInvalidCurvesSuite.java | 2 +- .../ectester/reader/test/CardTwistTestSuite.java | 62 ++++++++++++++++++++++ 14 files changed, 122 insertions(+), 57 deletions(-) create mode 100644 src/cz/crcs/ectester/reader/test/CardTwistTestSuite.java diff --git a/src/cz/crcs/ectester/data/twist/nist/b163.xml b/src/cz/crcs/ectester/data/twist/nist/b163.xml index 89ee6a4..03690ac 100644 --- a/src/cz/crcs/ectester/data/twist/nist/b163.xml +++ b/src/cz/crcs/ectester/data/twist/nist/b163.xml @@ -2,36 +2,36 @@ b163/0 0x000000000000000000000000000000000000000000,0x02c25b85badf8927593d21c366da89c03969f34da5 - nist/b163 + nist/B-163 twist order = 0x2 b163/1 0x03a98eb9fc1007f0a2b0e8de7da23cc6a7f7dd76b1,0x019971752926a2aca5407bffbf2a73f3f884b97127 - nist/b163 + nist/B-163 twist order = 0x1f b163/2 0x023ae22e69bac70ca24078fdf63753eaf6cb89e857,0x03674a33443dc657c24685eb761ab7efbb63a8adbc - nist/b163 + nist/B-163 twist order = 0x38b b163/3 0x04feb095cf083a783cac4107305889efa9f401cc27,0x0403abb00aa4712e4b9120391d59745e9fbad39db3 - nist/b163 + nist/B-163 twist order = 0x1208485 b163/4 0x00a72a640e05acc0e6c6956ab5be24240b92623add,0x031dfc8af709b3db0a05126f17a7b4d703de503475 - nist/b163 + nist/B-163 twist order = 0xb78fc77 b163/5 0x031b5fc734d73023a06e4fe1b7921811221c6d1b2a,0x05432357b4a42a7b8f51b04dfab95a5ecf03547500 - nist/b163 + nist/B-163 twist order = 0x5c4bf9b1205a07afbe718429 diff --git a/src/cz/crcs/ectester/data/twist/nist/b233.xml b/src/cz/crcs/ectester/data/twist/nist/b233.xml index 51768d3..7a0b579 100644 --- a/src/cz/crcs/ectester/data/twist/nist/b233.xml +++ b/src/cz/crcs/ectester/data/twist/nist/b233.xml @@ -2,42 +2,42 @@ b233/0 0x000000000000000000000000000000000000000000000000000000000000,0x0187f85627b97874e747ee31e06d71caaeea52f21253e5f946d061da9138 - nist/b233 + nist/B-233 twist order = 0x2 b233/1 0x01143eef5ed49cf4b4c552259589988a019e98418c012194a255e9186870,0x01f8070b0ef657563e5d584ce23fc58ef70265d4178d78717c6acebb8c78 - nist/b233 + nist/B-233 twist order = 0x5 b233/2 0x01c8185b4f7d07a7eca7deb9f2adcd3c9402461f8679cbc9618ad1d82be3,0x002d17d4fa7eafbf4f6238b94ddc95f6a56384a4028f50e7de1838c21c8c - nist/b233 + nist/B-233 twist order = 0x11b b233/3 0x01af53fdcb81b561803cb01ba4d384fa3ef7633b1c0dfb35f0e437ffc201,0x012a092d0b600cc59c2234ae65261513eee7a085428b2b42e96253b1143e - nist/b233 + nist/B-233 twist order = 0x21d b233/4 0x01f4b2e29d7a3796e3aa4a6b3ff40805d322292acefd80149ff954d75e04,0x00df2f3258674f799c4dcc8cef118abb4c00abf0c1f10144b47af7a6f41b - nist/b233 + nist/B-233 twist order = 0x22dba0b9 b233/5 0x01b6b9ce48a1428cb554a76a3f659d8b443ebee6b5619c88100bf3f83bb1,0x00dcafc85dfc3758e99736abe5ed2c4f03cbed5a3b478c9e233b976f7258 - nist/b233 + nist/B-233 twist order = 0x2a7504c0fda95a2311 b233/6 0x015cc90c0fdc2fc5fefddf1e9890627f87250b74fbaacd77feb761085d59,0x00059ccb49d156720dd3bcd75438225df9f9e84e7ffc0fc0dda02a647613 - nist/b233 + nist/B-233 twist order = 0x1e53fa33649df4ef97d6b29ded5a7 diff --git a/src/cz/crcs/ectester/data/twist/nist/b283.xml b/src/cz/crcs/ectester/data/twist/nist/b283.xml index bf6d1e6..7f57585 100644 --- a/src/cz/crcs/ectester/data/twist/nist/b283.xml +++ b/src/cz/crcs/ectester/data/twist/nist/b283.xml @@ -2,42 +2,42 @@ b283/0 0x000000000000000000000000000000000000000000000000000000000000000000000000,0x072bcc9c5792b1ebe81983089fb6f835a2fd220a304424ca17c082ae17442aede9b9b3f6 - nist/b283 + nist/B-283 twist order = 0x2 b283/1 0x0297e6d1f2b857a79f5dc85c2f1259d5d801c61a4d0a4312a04f65f09a887a7b93cf7ae1,0x051963c38ac61f05fef93707abcfbda7bc0f39eacddb2bdd3077f19c0e65c8be66ecb30e - nist/b283 + nist/B-283 twist order = 0x7 b283/2 0x022b522e9e120300e74563dee496f8feb64209b858abd5da50f31c92ae4a1eee751c92d6,0x012647d0d771016622e899c2a54afad773907e42e15d45e1db3e4fb0ae6a6df2934dba63 - nist/b283 + nist/B-283 twist order = 0x13 b283/3 0x02597a5336d18d9effde2820bed7352dccc8824abc81cde80914ea3cd072da55e9f91368,0x04a6d2c92a1ee699cda25dafa88191ef34218e9ea5c996d37e9ce507c318e7649b3b02d9 - nist/b283 + nist/B-283 twist order = 0x1623ab619 b283/4 0x01b011689cef74d9b2be4e8fb548eeabe31a678f560fc7b893c330b3939da9451a0cff78,0x022fd9ba4762f742a18e299f035a837b0525d7030e6b061eaa9242237d0767e7c28b608d - nist/b283 + nist/B-283 twist order = 0x2a4aa67aaaf5413fb b283/5 0x06ac85dce72aa795b5b90d43849dec9d4ee0ffc4d41f87fe8d48de2ac3cf84dfc5c20263,0x008e5147dba15ff3cb287457b3f41d32ca6c074df014f85033368d982c1670907d6afa05 - nist/b283 + nist/B-283 twist order = 0x25a8cdb1f2e470f3ac1ba7 b283/6 0x0132803a996ebd53ffa3553fc994b583cdb9514e4476c79336acf72f82ac36add519e655,0x004d30604436960af06b2eab63027ca8f59ca105f505afcd3413e1e72f5fb9c0f29d3a20 - nist/b283 + nist/B-283 twist order = 0x606749a9c147da03ad3f37 diff --git a/src/cz/crcs/ectester/data/twist/nist/k163.xml b/src/cz/crcs/ectester/data/twist/nist/k163.xml index 12e0f8e..31040c0 100644 --- a/src/cz/crcs/ectester/data/twist/nist/k163.xml +++ b/src/cz/crcs/ectester/data/twist/nist/k163.xml @@ -2,30 +2,30 @@ k163/0 0x000000000000000000000000000000000000000000,0x000000000000000000000000000000000000000001 - nist/k163 + nist/K-163 twist order = 0x2 k163/1 0x04410857858628f16bd3ef77fce6732525d6d75f6c,0x00c51e38c5eb613ff4c8b594d754a218f30e8b1c39 - nist/k163 + nist/K-163 twist order = 0x28d k163/2 0x004c291913c2e75103b38481fbda3830850ee4c026,0x0403ff8ccadf20f12e10e40b8eed4872d4c128aaa2 - nist/k163 + nist/K-163 twist order = 0x1979 k163/3 0x03868f9f75e8d0056c6e1aabed4a3df1437a56b386,0x07473bb4e85044c95af468d5374da860c4e563159c - nist/k163 + nist/K-163 twist order = 0x7926bec180108d k163/4 0x0162deb07d5848fc45fd580549a6f17fecea1b7497,0x0297440c5cfd9e8fe781004db92f9f106b9d33235f - nist/k163 + nist/K-163 twist order = 0x10a6989de57d15c65ba229 diff --git a/src/cz/crcs/ectester/data/twist/nist/k233.xml b/src/cz/crcs/ectester/data/twist/nist/k233.xml index 2367e25..6354ff9 100644 --- a/src/cz/crcs/ectester/data/twist/nist/k233.xml +++ b/src/cz/crcs/ectester/data/twist/nist/k233.xml @@ -2,36 +2,36 @@ k233/0 0x000000000000000000000000000000000000000000000000000000000000,0x000000000000000000000000000000000000000000000000000000000001 - nist/k233 + nist/K-233 twist order = 0x2 k233/1 0x01f5c35c89f8294442218a24a7e62ce3dac66c3ee5e9d2b70aaf51f520b2,0x001328eb45743dd96c4deaaa299b5394abfec9852e73a1e051a745fa95d8 - nist/k233 + nist/K-233 twist order = 0x1686d k233/2 0x00959e63a797bf3b2ea48d328ea3a9985da6bc95f296d1fc5e8cf17c257c,0x0070034f2e503a97be8766dd6db086870eea2e3fcb02260e9fcc0df8704c - nist/k233 + nist/K-233 twist order = 0x6d8a417 k233/3 0x00103cf39b9ffa6da7ef9f19f601daf698148663f6e0ae3b4ae2dca53782,0x013c1241644b61fb8c811287c2277c863eb0c31287e30d57d99169b1f509 - nist/k233 + nist/K-233 twist order = 0x7c02977 k233/4 0x003d84c97077988af52d6d825080c0c79276fc168e092260d67b5d4ca3a3,0x01d3fa5b63a25a8f08828117edb78a1ab31724ecfc74d4fc2c4b7ea00703 - nist/k233 + nist/K-233 twist order = 0x46403a035013f70d k233/5 0x01a053f3903f7b9e7e5c8784b01e43fd427b7264781b1e6c7a8755065a38,0x01ed5e24cd66d3d42b4a869aee65bff9506a8cdbc9f3c3c86543ba14db12 - nist/k233 + nist/K-233 twist order = 0xc7cb3894752e561e6abf871db diff --git a/src/cz/crcs/ectester/data/twist/nist/k283.xml b/src/cz/crcs/ectester/data/twist/nist/k283.xml index d27fad9..48a2dd9 100644 --- a/src/cz/crcs/ectester/data/twist/nist/k283.xml +++ b/src/cz/crcs/ectester/data/twist/nist/k283.xml @@ -2,12 +2,12 @@ k283/0 0x000000000000000000000000000000000000000000000000000000000000000000000000,0x000000000000000000000000000000000000000000000000000000000000000000000001 - nist/k283 + nist/K-283 twist order = 0x2 k283/1 0x02707778aaa47f7a075be036522a6c2998ce118bf7e6314f342ba399dbc3572750791e4d,0x0568810a78107353690d1429cb7f4f408650cbf112d096907f563971baafad1b36436ec2 - nist/k283 + nist/K-283 twist order = 0x400000000000000000000000000000000002ca3a25f1511b3440100d775c3f3c3d3873f diff --git a/src/cz/crcs/ectester/data/twist/nist/p192.xml b/src/cz/crcs/ectester/data/twist/nist/p192.xml index ddb547e..d1fdf49 100644 --- a/src/cz/crcs/ectester/data/twist/nist/p192.xml +++ b/src/cz/crcs/ectester/data/twist/nist/p192.xml @@ -2,18 +2,18 @@ p192/0 0x489ba2a146ac0e7bb9f008fb780005e48d3588893c7ebca9,0x7caac0b203223010fb59940946a12e35d227fcb3ee6c9afc - nist/p192 + nist/P-192 twist order = 0x17 p192/1 0xfaebaecd2737a6c22b5023d236ad48ab9acacb2cac075379,0x43810e9a10dabc2f835af837ac83fc4f0225773f3a84103f - nist/p192 + nist/P-192 twist order = 0x231acce82af76d32ca5d526f p192/2 0x7af6e161dcb8cd7852d5102ab42974af5179706d4616cce0,0xa3177747f0de49227575d2afc449187ab546e9ab827fcac9 - nist/p192 + nist/P-192 twist order = 0x512b1bfde874086edba50007 diff --git a/src/cz/crcs/ectester/data/twist/nist/p224.xml b/src/cz/crcs/ectester/data/twist/nist/p224.xml index 693b2f8..3ae34ff 100644 --- a/src/cz/crcs/ectester/data/twist/nist/p224.xml +++ b/src/cz/crcs/ectester/data/twist/nist/p224.xml @@ -2,42 +2,42 @@ p224/0 0x90427f4a141f94c26f98d40060292350fcace2356961ef27dda08d7b,0x58877d4992c377c33459aa0caeb0526881326f201beb519fc11aadc8 - nist/p224 + nist/P-224 twist order = 0x3 p224/1 0x7f87c1db4213f1032c251a514e324f4360390476e0f7cd025547df58,0x2498f43e46af6fa0ad6480cfd61fb40caa78e349db0766a8760ff021 - nist/p224 + nist/P-224 twist order = 0xb p224/2 0x2a2d61174fd561e9da2f279b96f7a69ae50a78d87f09674f465c9184,0xc9c7232ca8a50587181d8c96204c1eec6e976bcbd58e3c7181dbb2a7 - nist/p224 + nist/P-224 twist order = 0x2f p224/3 0x15da8f68bfe51bc75f0cd892f7400c3d5ce5a9c6da126171527767cc,0x0cee3612475887d31963b62c69580191d1158df3f0c0305765175c9c - nist/p224 + nist/P-224 twist order = 0x2e0273 p224/4 0xbd813fcdea2281a452733516e4e2625fac96573c41f3b37c56d0d1d7,0x351de92e6b06928fec37ee0ffd03606fecc5022edc1a72453c433ef4 - nist/p224 + nist/P-224 twist order = 0x268160f p224/5 0x2a379d972d016116067b5bf2c23937b6182b4dc6bf8aa0625eb58b9f,0xb9ec1e372728d3334a762e5d64faca1e0cd47f46c3e5402ff14cb140 - nist/p224 + nist/P-224 twist order = 0xf3bac7aa52cf p224/6 0xc5e229bfc9f4e0992ecf51a3c354e6aac1a4673056bee9a673beae5a,0x73a2e7d530b13c281d460ea2d2c3bddb49a8eb3446b9308ec64d5a70 - nist/p224 + nist/P-224 twist order = 0x22340ff0f7eba57b33ac73e28a14d1 diff --git a/src/cz/crcs/ectester/data/twist/nist/p256.xml b/src/cz/crcs/ectester/data/twist/nist/p256.xml index fd7854c..2e1c55e 100644 --- a/src/cz/crcs/ectester/data/twist/nist/p256.xml +++ b/src/cz/crcs/ectester/data/twist/nist/p256.xml @@ -2,30 +2,30 @@ p256/0 0x92787586fc8a5d065a2a754e229a66ea3c845c8d5f7120792ee3aacee88ca01c,0xee95a42047d9eae3bb007aa7aed3a87ee6986df813f6c76d8f19866a1b1f9c20 - nist/p256 + nist/P-256 twist order = 0x3 p256/1 0x40d27c77cf9fb36e49a850b1ae7357c9ab3f1d917d52ba3edb648bd33354d3da,0xd30662382d8440919f4decbc58c6d9ca8745d39cdd71c26063fd2fa8bcbb69f7 - nist/p256 + nist/P-256 twist order = 0x5 p256/2 0x33961ae81d08958d1dbc42bdadb05e7cb7bdda383b1c49e18c3a2f5908c833a2,0xc4a96d4f905a1d7e32d4c82d6e79f1ef7047d09bf1d1518be2c65d13815306fe - nist/p256 + nist/P-256 twist order = 0xd p256/3 0x21fa3bf4b7d23dea73a1751d3b02dd8724a2a5a0ae9b28fdd98b8ef18bb610f5,0x7d933ab51ac8bc7e5d3c5a44d9875c64a080eba393c6492e4e5ce2367f133dd1 - nist/p256 + nist/P-256 twist order = 0xb3 p256/4 0x3819da45c7b025be543fd40ec49b2613891c12f2ae2daf014396c70270eff92c,0xbec84d62254dbc67864ced51966d4f419ad5b1ec9ee1d72cce291a8a034518da - nist/p256 + nist/P-256 twist order = 0x1e0a75640070a738557cc30f68bd56eaea65c94f98411d17ac4e16ece1a47 diff --git a/src/cz/crcs/ectester/data/twist/nist/p384.xml b/src/cz/crcs/ectester/data/twist/nist/p384.xml index eef02b8..8e0d2b6 100644 --- a/src/cz/crcs/ectester/data/twist/nist/p384.xml +++ b/src/cz/crcs/ectester/data/twist/nist/p384.xml @@ -2,6 +2,6 @@ p384/0 0x77e3431a4d6b9d63985798eb41188f9af7eb6c0f38745d360bf82b5c2c162cb8393adf2dbc4d5531c49322d9c7b4c9cd,0x2b38ea158d3c980e9b3618cfe42599dd9d78e630ac83c66673949121ca6c8997fbf5e08c060076f3fa60d6dec8ac8624 - nist/p384 + nist/P-384 twist order = 0x1000000000000000000000000000000000000000000000000389cb27e0bc8d21ea7e5f24bb74f58851313e697333ad68d diff --git a/src/cz/crcs/ectester/data/twist/nist/p521.xml b/src/cz/crcs/ectester/data/twist/nist/p521.xml index 82eb773..1564c80 100644 --- a/src/cz/crcs/ectester/data/twist/nist/p521.xml +++ b/src/cz/crcs/ectester/data/twist/nist/p521.xml @@ -2,30 +2,30 @@ p521/0 0x01a0c6f0e5b2c6948218fb8d1e913d750ace27674e59ec0a45f8f5883518c65c401af5a2275b7c2c74e717f5b64c48056f1440de1d48ef0825086f12db4f862e4467,0x00c93c77edf1cac8bab534a28c49446113a22833e05658b69f73658d7867b43c94f58d52e17b726e3f6d0b5847d91980509250210c4e1c73eeec72e185529c1450b0 - nist/p521 + nist/P-521 twist order = 0x5 p521/1 0x00e84fb16849133c2e4c24e7efc4df752ed9f01204aa692342bc619a8a9ccdd1b058996f3896790d0ee1b7c480cb117cc0b9272c116c6f544b99dca9d441976c69c0,0x00e6d2c8adb57c81db0bead3d225ee900c81e049d0e36bf20bf421f5620449b1638f2b1998f3e1ffbee369a74bc4833d01f45b46388755ba16abf67c5f7f53ac9110 - nist/p521 + nist/P-521 twist order = 0x7 p521/2 0x0161cb810a7d7f9092d518ed483208f202cf5a984e98ff50f94b13e04bf94be942c91a007cff215d55bf124912b8620312bc94e813d7956e3821b45da439f0b0e8e7,0x005194f315423bcacf38ea558ff344daedf9a51a81b0a9ef27f1d687c8d1b6952b60b6486fc2c3d394749fb00e4921a5cfced55c1fe821e8b80279f6cec89ba1ac1f - nist/p521 + nist/P-521 twist order = 0x4277ffb p521/3 0x01c133c394ad86829a9252e4d5e266c3d2830eb9b899e2cb16b815a5c7050c3bc53c415296339d33427087bdef04c0ae2d8f7d63d4a41176bd76d3c07cbd1ecfd1ee,0x01fee0c7535c40e01f2c12ee2a6ae1e54cafc147c3b491602da1f278b46c6ae3c04705b3bb3c72af70aaf3d4c684411ede8694d7a21b3734ce43ecc2b4a1ee2efee7 - nist/p521 + nist/P-521 twist order = 0x25e6d2cd p521/4 0x01232e18498e6cafe2572ec0b511376cf0d4844ec3b94472fb53346d7d9611726065cc922b3d2132117c99bce0ff8bc7f51bb30c6909a53b7c8a88e81807c31a1999,0x0112ada376c25bdc96440e0e2bf936377b287e885a08e6e1b5aa54f9b269cce4ed6ca6e6e44bd6d8e092e4864b278951648e897682096488e2a36036e989b1af7b24 - nist/p521 + nist/P-521 twist order = 0x17c8b8fa594c0fc63a5c0043ab498c1762d92f18fdfe2fea8f074695615d886d81bf930a0ac77d01bf9dd8c1a1ae121dab4e860c5dc18e265de3 diff --git a/src/cz/crcs/ectester/reader/ECTesterReader.java b/src/cz/crcs/ectester/reader/ECTesterReader.java index ff0f403..4097d81 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- 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- 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()); @@ -446,6 +446,9 @@ public class ECTesterReader { case "invalid": suite = new CardInvalidCurvesSuite(writer, cfg, cardManager); break; + case "twist": + suite = new CardTwistTestSuite(writer, cfg, cardManager); + break; default: System.err.println("Unknown test suite."); return; @@ -780,7 +783,7 @@ public class ECTesterReader { } testSuite = cli.getOptionValue("test", "default").toLowerCase(); - String[] tests = new String[]{"default", "composite", "invalid", "test-vectors", "wrong"}; + String[] tests = new String[]{"default", "composite", "invalid", "test-vectors", "wrong", "twist"}; 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/CardInvalidCurvesSuite.java b/src/cz/crcs/ectester/reader/test/CardInvalidCurvesSuite.java index 0572a66..8424d45 100644 --- a/src/cz/crcs/ectester/reader/test/CardInvalidCurvesSuite.java +++ b/src/cz/crcs/ectester/reader/test/CardInvalidCurvesSuite.java @@ -26,7 +26,7 @@ import static cz.crcs.ectester.common.test.Result.ExpectedValue; public class CardInvalidCurvesSuite extends CardTestSuite { public CardInvalidCurvesSuite(TestWriter writer, ECTesterReader.Config cfg, CardMngr cardManager) { - super(writer, cfg, cardManager, "invalid", "The invalid curve suite run whether the card rejects points outside of the curve during ECDH."); + super(writer, cfg, cardManager, "invalid", "The invalid curve suite tests whether the card rejects points outside of the curve during ECDH."); } @Override diff --git a/src/cz/crcs/ectester/reader/test/CardTwistTestSuite.java b/src/cz/crcs/ectester/reader/test/CardTwistTestSuite.java new file mode 100644 index 0000000..c43b234 --- /dev/null +++ b/src/cz/crcs/ectester/reader/test/CardTwistTestSuite.java @@ -0,0 +1,62 @@ +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 javacard.security.KeyPair; + +import java.util.HashMap; +import java.util.LinkedList; +import java.util.List; +import java.util.Map; + +/** + * @author Jan Jancar johny@neuromancer.sk + */ +public class CardTwistTestSuite extends CardTestSuite { + public CardTwistTestSuite(TestWriter writer, ECTesterReader.Config cfg, CardMngr cardManager) { + super(writer, cfg, cardManager, "twist", "The twist test suite tests whether the card correctly rejects points on the quadratic twist of the curve during ECDH."); + } + + @Override + protected void runTests() throws Exception { + Map pubkeys = EC_Store.getInstance().getObjects(EC_Key.Public.class, "twist"); + Map> curves = new HashMap<>(); + for (EC_Key.Public key : pubkeys.values()) { + EC_Curve curve = EC_Store.getInstance().getObject(EC_Curve.class, key.getCurve()); + if (curve.getBits() != cfg.bits && !cfg.all) { + continue; + } + if (curve.getField() == KeyPair.ALG_EC_FP && !cfg.primeField || curve.getField() == KeyPair.ALG_EC_F2M && !cfg.binaryField) { + continue; + } + List keys = curves.getOrDefault(curve, new LinkedList<>()); + keys.add(key); + curves.putIfAbsent(curve, keys); + } + for (Map.Entry> e : curves.entrySet()) { + EC_Curve curve = e.getKey(); + List keys = e.getValue(); + + doTest(CommandTest.expect(new Command.Allocate(this.card, ECTesterApplet.KEYPAIR_BOTH, curve.getBits(), curve.getField()), Result.ExpectedValue.SUCCESS)); + doTest(CommandTest.expect(new Command.Set(this.card, ECTesterApplet.KEYPAIR_BOTH, EC_Consts.CURVE_external, curve.getParams(), curve.flatten()), Result.ExpectedValue.SUCCESS)); + doTest(CommandTest.expect(new Command.Generate(this.card, ECTesterApplet.KEYPAIR_LOCAL), Result.ExpectedValue.SUCCESS)); + 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.CORRUPTION_NONE, ECTesterApplet.KeyAgreement_ALG_EC_SVDP_DH, pub.flatten()); + ecdhTests.add(CommandTest.expect(ecdhCommand, Result.ExpectedValue.FAILURE, "Card correctly rejected point on twist.", "Card incorrectly accepted point on twist.")); + } + doTest(CompoundTest.all(Result.ExpectedValue.SUCCESS, "Twist test of " + curve.getId(), ecdhTests.toArray(new Test[0]))); + new Command.Cleanup(this.card).send(); + } + } +} -- cgit v1.2.3-70-g09d2