Skip to content

Commit

Permalink
Fix padding of points and public keys sent to cards, add a test.
Browse files Browse the repository at this point in the history
  • Loading branch information
J08nY committed Jan 30, 2025
1 parent a9e49b6 commit 2d1f792
Show file tree
Hide file tree
Showing 7 changed files with 124 additions and 5 deletions.
5 changes: 5 additions & 0 deletions common/build.gradle.kts
Original file line number Diff line number Diff line change
Expand Up @@ -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 {
Expand Down
Original file line number Diff line number Diff line change
@@ -1 +1 @@
0x1dcf4a3c1f9ac39550c7eb7bfb1dd6c345658a277d888d9b23273aac2914cde52ee7e8f424767d62fd266d46491d805564f32919b265d784941d61eefa43da0501f,0x14fb5e18b58eaa6e879edb5542e5c1e1140a0cb1df41c49b5d4be6b7abdaf2afd7a22b8bc95711dd9196968677a1edf9a99e60db654ad62755904ee34b592db2838,0x1c543ff6f595aaf4651f0315c95b1f433b9aa3b5be69f300d4a7f4441bb3331781fbc9527b62fe60d4eb7aaedb2cd50ea4a8ad70ab2935bf8e129cf6ffc30ec027c,0x11fd1c6612169a69250632396ec192b97490c6af601f2d0b2ffad81a2a8772c8f8c0ac6cf273335aed6852fda2a3fb0b32a366ad19662513751412d9d2e168c144d,0x11c894ae2c3647cae6ca89b7c090bf19a52781bddbebb2a21b4123cf16445f7bca20aa1fac5a0228c37e8b89c974c5a659810d29afa96f48cdca6ba77baa88fbac,0x1dcf4a3c1f9ac39550c7eb7bfb1dd6c345658a277d888d9b23273aac2914cde52ee7e8f424767d62fd266d46491d805564f32919b265d784941d61eefa43da0501f,0x1
0x1dcf4a3c1f9ac39550c7eb7bfb1dd6c345658a277d888d9b23273aac2914cde52ee7e8f424767d62fd266d46491d805564f32919b265d784941d61eefa43da0501f,0x14fb5e18b58eaa6e879edb5542e5c1e1140a0cb1df41c49b5d4be6b7abdaf2afd7a22b8bc95711dd9196968677a1edf9a99e60db654ad62755904ee34b592db2838,0x1c543ff6f595aaf4651f0315c95b1f433b9aa3b5be69f300d4a7f4441bb3331781fbc9527b62fe60d4eb7aaedb2cd50ea4a8ad70ab2935bf8e129cf6ffc30ec027c,0x11fd1c6612169a69250632396ec192b97490c6af601f2d0b2ffad81a2a8772c8f8c0ac6cf273335aed6852fda2a3fb0b32a366ad19662513751412d9d2e168c144d,0x0011c894ae2c3647cae6ca89b7c090bf19a52781bddbebb2a21b4123cf16445f7bca20aa1fac5a0228c37e8b89c974c5a659810d29afa96f48cdca6ba77baa88fbac,0x1dcf4a3c1f9ac39550c7eb7bfb1dd6c345658a277d888d9b23273aac2914cde52ee7e8f424767d62fd266d46491d805564f32919b265d784941d61eefa43da0501f,0x1
Original file line number Diff line number Diff line change
@@ -1 +1 @@
0x8000000000000000000000000000000000000000000000000000000000000431,0x7,0x5fbff498aa938ce739b8e022fbafef40563f6e6a3472fc2a514c0ce9dae23b7e,0x2,0x8e2a8a0e65147d4bd6316030e16d19c85c97f0a9ca267122b96abbcea7e8fc8,0x8000000000000000000000000000000150fe8a1892976154c59cfc193accf5b3,0x1
0x8000000000000000000000000000000000000000000000000000000000000431,0x7,0x5fbff498aa938ce739b8e022fbafef40563f6e6a3472fc2a514c0ce9dae23b7e,0x000000000000000000000000000000000000000000000000000000000000002,0x8e2a8a0e65147d4bd6316030e16d19c85c97f0a9ca267122b96abbcea7e8fc8,0x8000000000000000000000000000000150fe8a1892976154c59cfc193accf5b3,0x1
Original file line number Diff line number Diff line change
Expand Up @@ -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>
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -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>
Expand Down
Original file line number Diff line number Diff line change
@@ -1 +1 @@
0x153212291c26fe063b78bbca97d35dda6b0b349fe3fc1d4dee21786fc85296e22d93ce855a2d3ed048498c6a1f378cea240f029df302cffb658efe9e12379629acb,0x5a4b83e21db14397282aab529b230058a165962eadf8e8f15703ca5b91501463fc8bf866d7f1a2ce785c4ff0c5797e20e3fb6952bd42e3421ed1c589b2853a0c30,0x1196a7bc6d754b0224fcace252f9056acebba295a7a0763a95fd0fa90cca4bbcc1d030cbee049d06e103bb28c8b870a1d5989d9c56870ff7fde969f3bfd0278fbf7,0xd74e5bf4d166a2d75d57d49be58f9bf3900bda81bbb283a8f311d9972c7cd1ed547403b52c657af133297f852f938b6a7ba8ef52c2ca8eb79799b15f7123c5d2af,0x7ed2303056596fb09cfade2ca0f691c515da266565ba5afa4700c6c6ed38091f3cf4fdc67ee1426b849bb9be26c1e8c3b53530fc4510dad8b7badc81bad7276c5b,0x153212291c26fe063b78bc114fd2c18a365faa9b5b3fecbb87c2690125099ddd8baa5052aa2fda7f14120d3d6af0ac185902f97bae06a009588286cf5ce93b1cce3,0x0001
0x153212291c26fe063b78bbca97d35dda6b0b349fe3fc1d4dee21786fc85296e22d93ce855a2d3ed048498c6a1f378cea240f029df302cffb658efe9e12379629acb,0x5a4b83e21db14397282aab529b230058a165962eadf8e8f15703ca5b91501463fc8bf866d7f1a2ce785c4ff0c5797e20e3fb6952bd42e3421ed1c589b2853a0c30,0x1196a7bc6d754b0224fcace252f9056acebba295a7a0763a95fd0fa90cca4bbcc1d030cbee049d06e103bb28c8b870a1d5989d9c56870ff7fde969f3bfd0278fbf7,0x00d74e5bf4d166a2d75d57d49be58f9bf3900bda81bbb283a8f311d9972c7cd1ed547403b52c657af133297f852f938b6a7ba8ef52c2ca8eb79799b15f7123c5d2af,0x007ed2303056596fb09cfade2ca0f691c515da266565ba5afa4700c6c6ed38091f3cf4fdc67ee1426b849bb9be26c1e8c3b53530fc4510dad8b7badc81bad7276c5b,0x153212291c26fe063b78bc114fd2c18a365faa9b5b3fecbb87c2690125099ddd8baa5052aa2fda7f14120d3d6af0ac185902f97bae06a009588286cf5ce93b1cce3,0x0001
Original file line number Diff line number Diff line change
@@ -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;
}
}
}

0 comments on commit 2d1f792

Please sign in to comment.