aboutsummaryrefslogtreecommitdiff
path: root/common
diff options
context:
space:
mode:
authorJ08nY2025-03-20 18:50:19 +0100
committerJ08nY2025-04-16 12:25:06 +0200
commit31404321f1216a042db069c745a125db43e1c1b2 (patch)
treec61f1a69a7459a307ec893076b8ed4a13bb6b49c /common
parent8ac23a01cdf0ae0074a30bfe9152163f184da789 (diff)
downloadECTester-31404321f1216a042db069c745a125db43e1c1b2.tar.gz
ECTester-31404321f1216a042db069c745a125db43e1c1b2.tar.zst
ECTester-31404321f1216a042db069c745a125db43e1c1b2.zip
Diffstat (limited to 'common')
-rw-r--r--common/src/main/java/cz/crcs/ectester/common/ec/EC_Params.java24
-rw-r--r--common/src/main/java/cz/crcs/ectester/common/util/ECUtil.java7
2 files changed, 31 insertions, 0 deletions
diff --git a/common/src/main/java/cz/crcs/ectester/common/ec/EC_Params.java b/common/src/main/java/cz/crcs/ectester/common/ec/EC_Params.java
index 8d15437..24e9d56 100644
--- a/common/src/main/java/cz/crcs/ectester/common/ec/EC_Params.java
+++ b/common/src/main/java/cz/crcs/ectester/common/ec/EC_Params.java
@@ -5,6 +5,7 @@ import cz.crcs.ectester.common.util.CardUtil;
import java.io.ByteArrayOutputStream;
import java.util.ArrayList;
+import java.util.Arrays;
import java.util.List;
/**
@@ -265,6 +266,29 @@ public class EC_Params extends EC_Data {
return p;
}
+ public static EC_Params merge(EC_Params p1, EC_Params p2) {
+ if ((p1.params & p2.params) != 0) {
+ throw new IllegalArgumentException("Cannot merge EC_Params with overlapping parameters.");
+ }
+ short params = (short) (p1.params | p2.params);
+ List<byte[]> dataList = new ArrayList<>();
+ short paramMask = EC_Consts.PARAMETER_FP;
+ while (paramMask <= EC_Consts.PARAMETER_S) {
+ byte[][] paramData;
+ if ((p1.params & paramMask) != 0) {
+ paramData = p1.getParam(paramMask);
+ } else if ((p2.params & paramMask) != 0) {
+ paramData = p2.getParam(paramMask);
+ } else {
+ throw new IllegalArgumentException("Cannot merge EC_Params with overlapping parameters.");
+ }
+ dataList.addAll(Arrays.asList(paramData));
+ paramMask = (short) (paramMask << 1);
+ }
+
+ return new EC_Params(params, dataList.toArray(new byte[dataList.size()][]));
+ }
+
@Override
public String[] expand() {
List<String> out = new ArrayList<>();
diff --git a/common/src/main/java/cz/crcs/ectester/common/util/ECUtil.java b/common/src/main/java/cz/crcs/ectester/common/util/ECUtil.java
index 6eb0b1a..677075b 100644
--- a/common/src/main/java/cz/crcs/ectester/common/util/ECUtil.java
+++ b/common/src/main/java/cz/crcs/ectester/common/util/ECUtil.java
@@ -71,6 +71,13 @@ public class ECUtil {
return toX962Compressed(point, spec.getCurve().getField().getFieldSize());
}
+ public static byte[] toX962Uncompressed(byte[][] point) {
+ if (point.length != 2) {
+ return null;
+ }
+ return ByteUtil.concatenate(new byte[]{(byte) (0x04)}, point[0], point[1]);
+ }
+
public static byte[] toX962Uncompressed(ECPoint point, int bits) {
if (point.equals(ECPoint.POINT_INFINITY)) {
return new byte[]{0};