diff options
Diffstat (limited to 'common')
7 files changed, 124 insertions, 5 deletions
diff --git a/common/build.gradle.kts b/common/build.gradle.kts index 1aff0d7..ee30247 100644 --- a/common/build.gradle.kts +++ b/common/build.gradle.kts @@ -20,6 +20,11 @@ dependencies { api("org.yaml:snakeyaml:2.2") // https://mvnrepository.com/artifact/com.klinec/jcardsim api("com.klinec:jcardsim:3.0.5.11") + + testImplementation(platform("org.junit:junit-bom:5.10.2")) + testImplementation("org.junit.jupiter:junit-jupiter") + testImplementation("org.junit-pioneer:junit-pioneer:2.2.0") + testRuntimeOnly("org.junit.platform:junit-platform-launcher") } java { diff --git a/common/src/main/resources/cz/crcs/ectester/data/anomalous/anomalous521.csv b/common/src/main/resources/cz/crcs/ectester/data/anomalous/anomalous521.csv index e0d935e..2f7eb22 100644 --- a/common/src/main/resources/cz/crcs/ectester/data/anomalous/anomalous521.csv +++ b/common/src/main/resources/cz/crcs/ectester/data/anomalous/anomalous521.csv @@ -1 +1 @@ -0x1dcf4a3c1f9ac39550c7eb7bfb1dd6c345658a277d888d9b23273aac2914cde52ee7e8f424767d62fd266d46491d805564f32919b265d784941d61eefa43da0501f,0x14fb5e18b58eaa6e879edb5542e5c1e1140a0cb1df41c49b5d4be6b7abdaf2afd7a22b8bc95711dd9196968677a1edf9a99e60db654ad62755904ee34b592db2838,0x1c543ff6f595aaf4651f0315c95b1f433b9aa3b5be69f300d4a7f4441bb3331781fbc9527b62fe60d4eb7aaedb2cd50ea4a8ad70ab2935bf8e129cf6ffc30ec027c,0x11fd1c6612169a69250632396ec192b97490c6af601f2d0b2ffad81a2a8772c8f8c0ac6cf273335aed6852fda2a3fb0b32a366ad19662513751412d9d2e168c144d,0x11c894ae2c3647cae6ca89b7c090bf19a52781bddbebb2a21b4123cf16445f7bca20aa1fac5a0228c37e8b89c974c5a659810d29afa96f48cdca6ba77baa88fbac,0x1dcf4a3c1f9ac39550c7eb7bfb1dd6c345658a277d888d9b23273aac2914cde52ee7e8f424767d62fd266d46491d805564f32919b265d784941d61eefa43da0501f,0x1
\ No newline at end of file +0x1dcf4a3c1f9ac39550c7eb7bfb1dd6c345658a277d888d9b23273aac2914cde52ee7e8f424767d62fd266d46491d805564f32919b265d784941d61eefa43da0501f,0x14fb5e18b58eaa6e879edb5542e5c1e1140a0cb1df41c49b5d4be6b7abdaf2afd7a22b8bc95711dd9196968677a1edf9a99e60db654ad62755904ee34b592db2838,0x1c543ff6f595aaf4651f0315c95b1f433b9aa3b5be69f300d4a7f4441bb3331781fbc9527b62fe60d4eb7aaedb2cd50ea4a8ad70ab2935bf8e129cf6ffc30ec027c,0x11fd1c6612169a69250632396ec192b97490c6af601f2d0b2ffad81a2a8772c8f8c0ac6cf273335aed6852fda2a3fb0b32a366ad19662513751412d9d2e168c144d,0x0011c894ae2c3647cae6ca89b7c090bf19a52781bddbebb2a21b4123cf16445f7bca20aa1fac5a0228c37e8b89c974c5a659810d29afa96f48cdca6ba77baa88fbac,0x1dcf4a3c1f9ac39550c7eb7bfb1dd6c345658a277d888d9b23273aac2914cde52ee7e8f424767d62fd266d46491d805564f32919b265d784941d61eefa43da0501f,0x1
\ No newline at end of file diff --git a/common/src/main/resources/cz/crcs/ectester/data/gost/gost256.csv b/common/src/main/resources/cz/crcs/ectester/data/gost/gost256.csv index baea45a..32f6f32 100644 --- a/common/src/main/resources/cz/crcs/ectester/data/gost/gost256.csv +++ b/common/src/main/resources/cz/crcs/ectester/data/gost/gost256.csv @@ -1 +1 @@ -0x8000000000000000000000000000000000000000000000000000000000000431,0x7,0x5fbff498aa938ce739b8e022fbafef40563f6e6a3472fc2a514c0ce9dae23b7e,0x2,0x8e2a8a0e65147d4bd6316030e16d19c85c97f0a9ca267122b96abbcea7e8fc8,0x8000000000000000000000000000000150fe8a1892976154c59cfc193accf5b3,0x1
\ No newline at end of file +0x8000000000000000000000000000000000000000000000000000000000000431,0x7,0x5fbff498aa938ce739b8e022fbafef40563f6e6a3472fc2a514c0ce9dae23b7e,0x000000000000000000000000000000000000000000000000000000000000002,0x8e2a8a0e65147d4bd6316030e16d19c85c97f0a9ca267122b96abbcea7e8fc8,0x8000000000000000000000000000000150fe8a1892976154c59cfc193accf5b3,0x1
\ No newline at end of file diff --git a/common/src/main/resources/cz/crcs/ectester/data/invalid/nist/k233.xml b/common/src/main/resources/cz/crcs/ectester/data/invalid/nist/k233.xml index 250c9df..2c080a4 100644 --- a/common/src/main/resources/cz/crcs/ectester/data/invalid/nist/k233.xml +++ b/common/src/main/resources/cz/crcs/ectester/data/invalid/nist/k233.xml @@ -55,7 +55,7 @@ </pubkey> <pubkey> <id>k233/9</id> - <inline>0x0193d8ff00ac50effd52134acd2f15c51e452727a948b310c367328dcc,0x01bed4420061e99f86f9e4f87092dde4f9a0f8ffb91164f175619ed01f8d</inline> + <inline>0x00193d8ff00ac50effd52134acd2f15c51e452727a948b310c367328dcc,0x01bed4420061e99f86f9e4f87092dde4f9a0f8ffb91164f175619ed01f8d</inline> <curve>nist/K-233</curve> <desc>invalid order = 29</desc> </pubkey> diff --git a/common/src/main/resources/cz/crcs/ectester/data/misc/keys.xml b/common/src/main/resources/cz/crcs/ectester/data/misc/keys.xml index e17b45b..7aebc63 100644 --- a/common/src/main/resources/cz/crcs/ectester/data/misc/keys.xml +++ b/common/src/main/resources/cz/crcs/ectester/data/misc/keys.xml @@ -14,7 +14,7 @@ <pubkey> <id>compression/128/non-residue</id> - <inline>0xb6707fa8afeddf79b9579e8dda4eaf51,0x000000000000000000000000000000</inline> + <inline>0xb6707fa8afeddf79b9579e8dda4eaf51,0x0000000000000000000000000000000</inline> <curve>secg/secp128r1</curve> </pubkey> <pubkey> diff --git a/common/src/main/resources/cz/crcs/ectester/data/wrong/pseudo521.csv b/common/src/main/resources/cz/crcs/ectester/data/wrong/pseudo521.csv index 4e7c30e..d185ff5 100644 --- a/common/src/main/resources/cz/crcs/ectester/data/wrong/pseudo521.csv +++ b/common/src/main/resources/cz/crcs/ectester/data/wrong/pseudo521.csv @@ -1 +1 @@ -0x153212291c26fe063b78bbca97d35dda6b0b349fe3fc1d4dee21786fc85296e22d93ce855a2d3ed048498c6a1f378cea240f029df302cffb658efe9e12379629acb,0x5a4b83e21db14397282aab529b230058a165962eadf8e8f15703ca5b91501463fc8bf866d7f1a2ce785c4ff0c5797e20e3fb6952bd42e3421ed1c589b2853a0c30,0x1196a7bc6d754b0224fcace252f9056acebba295a7a0763a95fd0fa90cca4bbcc1d030cbee049d06e103bb28c8b870a1d5989d9c56870ff7fde969f3bfd0278fbf7,0xd74e5bf4d166a2d75d57d49be58f9bf3900bda81bbb283a8f311d9972c7cd1ed547403b52c657af133297f852f938b6a7ba8ef52c2ca8eb79799b15f7123c5d2af,0x7ed2303056596fb09cfade2ca0f691c515da266565ba5afa4700c6c6ed38091f3cf4fdc67ee1426b849bb9be26c1e8c3b53530fc4510dad8b7badc81bad7276c5b,0x153212291c26fe063b78bc114fd2c18a365faa9b5b3fecbb87c2690125099ddd8baa5052aa2fda7f14120d3d6af0ac185902f97bae06a009588286cf5ce93b1cce3,0x0001
\ No newline at end of file +0x153212291c26fe063b78bbca97d35dda6b0b349fe3fc1d4dee21786fc85296e22d93ce855a2d3ed048498c6a1f378cea240f029df302cffb658efe9e12379629acb,0x5a4b83e21db14397282aab529b230058a165962eadf8e8f15703ca5b91501463fc8bf866d7f1a2ce785c4ff0c5797e20e3fb6952bd42e3421ed1c589b2853a0c30,0x1196a7bc6d754b0224fcace252f9056acebba295a7a0763a95fd0fa90cca4bbcc1d030cbee049d06e103bb28c8b870a1d5989d9c56870ff7fde969f3bfd0278fbf7,0x00d74e5bf4d166a2d75d57d49be58f9bf3900bda81bbb283a8f311d9972c7cd1ed547403b52c657af133297f852f938b6a7ba8ef52c2ca8eb79799b15f7123c5d2af,0x007ed2303056596fb09cfade2ca0f691c515da266565ba5afa4700c6c6ed38091f3cf4fdc67ee1426b849bb9be26c1e8c3b53530fc4510dad8b7badc81bad7276c5b,0x153212291c26fe063b78bc114fd2c18a365faa9b5b3fecbb87c2690125099ddd8baa5052aa2fda7f14120d3d6af0ac185902f97bae06a009588286cf5ce93b1cce3,0x0001
\ No newline at end of file diff --git a/common/src/test/java/cz/crcs/ectester/common/CardIntegerPaddingTests.java b/common/src/test/java/cz/crcs/ectester/common/CardIntegerPaddingTests.java new file mode 100644 index 0000000..560935f --- /dev/null +++ b/common/src/test/java/cz/crcs/ectester/common/CardIntegerPaddingTests.java @@ -0,0 +1,114 @@ +package cz.crcs.ectester.common; + +import cz.crcs.ectester.common.ec.*; +import cz.crcs.ectester.data.EC_Store; +import org.junit.jupiter.api.Test; +import org.opentest4j.AssertionFailedError; + +import java.util.ArrayList; +import java.util.List; +import java.util.Map; + +import static org.junit.jupiter.api.Assertions.assertEquals; + +public class CardIntegerPaddingTests { + + @Test + public void testKeys() { + EC_Store store = EC_Store.getInstance(); + Map<String, EC_Category> categories = store.getCategories(); + List<AssertionFailedError> errors = new ArrayList<>(); + + for (EC_Category category : categories.values()) { + Map<String, EC_Data> objects = category.getObjects(); + List<EC_Key> keys = new ArrayList<>(); + for (EC_Data object : objects.values()) { + if (object instanceof EC_Key) { + EC_Key key = (EC_Key) object; + keys.add(key); + } + } + Map<EC_Curve, List<EC_Key>> keyMap = EC_Store.mapKeyToCurve(keys); + for (EC_Curve curve : keyMap.keySet()) { + List<EC_Key> curveKeys = keyMap.get(curve); + int bits = curve.getBits(); + int bytes = (bits + 7) / 8; + for (EC_Key key : curveKeys) { + if (key instanceof EC_Key.Private) { + continue; + } + byte[][] data = key.getData(); + byte[] xCoord = data[0]; + byte[] yCoord = data[1]; + try { + assertEquals(bytes, xCoord.length, "Curve: " + curve.getId() + ", Key: " + category.getName() + "/" + key.getId() + " (x)"); + } catch (AssertionFailedError e) { + errors.add(e); + } + try { + assertEquals(bytes, yCoord.length, "Curve: " + curve.getId() + ", Key: " + category.getName() + "/" + key.getId() + " (y)"); + } catch (AssertionFailedError e) { + errors.add(e); + } + } + } + } + + if (!errors.isEmpty()) { + StringBuilder sb = new StringBuilder("There were assertion errors:\n"); + for (AssertionFailedError error : errors) { + sb.append(error.getMessage()).append("\n"); + } + AssertionFailedError e = new AssertionFailedError(sb.toString()); + for (AssertionFailedError error : errors) { + e.addSuppressed(error); + } + throw e; + } + } + + @Test + public void testCurves() { + EC_Store store = EC_Store.getInstance(); + Map<String, EC_Category> categories = store.getCategories(); + List<AssertionFailedError> errors = new ArrayList<>(); + + for (EC_Category category : categories.values()) { + Map<String, EC_Data> objects = category.getObjects(); + for (EC_Data object : objects.values()) { + if (object instanceof EC_Curve) { + EC_Curve curve = (EC_Curve) object; + if (curve.getField() == EC_Consts.ALG_EC_FP) { + int bits = curve.getBits(); + int bytes = (bits + 7) / 8; + byte[][] generator = curve.getParam(EC_Consts.PARAMETER_G); + byte[] xCoord = generator[0]; + byte[] yCoord = generator[1]; + try { + assertEquals(bytes, xCoord.length, "Curve: " + category.getName() + "/" + curve.getId() + " (generator x)"); + } catch (AssertionFailedError e) { + errors.add(e); + } + try { + assertEquals(bytes, yCoord.length, "Curve: " + category.getName() + "/" + curve.getId() + " (generator y)"); + } catch (AssertionFailedError e) { + errors.add(e); + } + } + } + } + } + + if (!errors.isEmpty()) { + StringBuilder sb = new StringBuilder("There were assertion errors:\n"); + for (AssertionFailedError error : errors) { + sb.append(error.getMessage()).append("\n"); + } + AssertionFailedError e = new AssertionFailedError(sb.toString()); + for (AssertionFailedError error : errors) { + e.addSuppressed(error); + } + throw e; + } + } +} |
