aboutsummaryrefslogtreecommitdiff
path: root/common/src/main/java
diff options
context:
space:
mode:
authorJán Jančár2025-07-15 15:58:21 +0200
committerGitHub2025-07-15 15:58:21 +0200
commit4c52961479eb3db5e24dbea567b0c28c1efcde31 (patch)
tree739f8b3a85167518f092fb24dec83c6476cc8c82 /common/src/main/java
parentba6657f54ed7865145c216ec13160ecf46e07633 (diff)
parent3d5a6e492d94651a4c0379f846dcfe5089aa1a8c (diff)
downloadECTester-4c52961479eb3db5e24dbea567b0c28c1efcde31.tar.gz
ECTester-4c52961479eb3db5e24dbea567b0c28c1efcde31.tar.zst
ECTester-4c52961479eb3db5e24dbea567b0c28c1efcde31.zip
Merge pull request #39 from crocs-muni/epare
Add epare artifact
Diffstat (limited to 'common/src/main/java')
-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};