diff options
Diffstat (limited to 'common')
| -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}; |
