diff options
| author | J08nY | 2025-03-20 18:50:19 +0100 |
|---|---|---|
| committer | J08nY | 2025-04-16 12:25:06 +0200 |
| commit | 31404321f1216a042db069c745a125db43e1c1b2 (patch) | |
| tree | c61f1a69a7459a307ec893076b8ed4a13bb6b49c /common/src | |
| parent | 8ac23a01cdf0ae0074a30bfe9152163f184da789 (diff) | |
| download | ECTester-31404321f1216a042db069c745a125db43e1c1b2.tar.gz ECTester-31404321f1216a042db069c745a125db43e1c1b2.tar.zst ECTester-31404321f1216a042db069c745a125db43e1c1b2.zip | |
Diffstat (limited to 'common/src')
| -rw-r--r-- | common/src/main/java/cz/crcs/ectester/common/ec/EC_Params.java | 24 | ||||
| -rw-r--r-- | common/src/main/java/cz/crcs/ectester/common/util/ECUtil.java | 7 |
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}; |
