diff options
author | CGantert345 <57003061+CGantert345@users.noreply.github.com> | 2022-01-25 13:33:37 +0100 |
---|---|---|
committer | CGantert345 <57003061+CGantert345@users.noreply.github.com> | 2022-01-25 13:33:37 +0100 |
commit | 7af6c4ca50322258bbd23214920c4c9122482966 (patch) | |
tree | 83be3be35d497fbdc00bc5c10a7dc0bad2bd8aad /src/main/java/org/uic/barcode/dynamicFrame/api | |
parent | signature validation changed to work with teh dynamic header version 2. (diff) | |
download | UIC-barcode-7af6c4ca50322258bbd23214920c4c9122482966.tar UIC-barcode-7af6c4ca50322258bbd23214920c4c9122482966.tar.gz UIC-barcode-7af6c4ca50322258bbd23214920c4c9122482966.tar.bz2 UIC-barcode-7af6c4ca50322258bbd23214920c4c9122482966.tar.lz UIC-barcode-7af6c4ca50322258bbd23214920c4c9122482966.tar.xz UIC-barcode-7af6c4ca50322258bbd23214920c4c9122482966.tar.zst UIC-barcode-7af6c4ca50322258bbd23214920c4c9122482966.zip |
Diffstat (limited to '')
4 files changed, 46 insertions, 33 deletions
diff --git a/src/main/java/org/uic/barcode/dynamicFrame/api/IDynamicFrame.java b/src/main/java/org/uic/barcode/dynamicFrame/api/IDynamicFrame.java index 1e8a0ff..d901a6e 100644 --- a/src/main/java/org/uic/barcode/dynamicFrame/api/IDynamicFrame.java +++ b/src/main/java/org/uic/barcode/dynamicFrame/api/IDynamicFrame.java @@ -79,8 +79,9 @@ public interface IDynamicFrame{ *
* @param bytes the bytes
* @return the dynamic header
+ * @throws EncodingFormatException
*/
- public void decode(byte[] bytes);
+ public void decode(byte[] bytes) throws EncodingFormatException;
diff --git a/src/main/java/org/uic/barcode/dynamicFrame/api/SimpleData.java b/src/main/java/org/uic/barcode/dynamicFrame/api/SimpleData.java index cb762de..d6e1410 100644 --- a/src/main/java/org/uic/barcode/dynamicFrame/api/SimpleData.java +++ b/src/main/java/org/uic/barcode/dynamicFrame/api/SimpleData.java @@ -1,12 +1,5 @@ package org.uic.barcode.dynamicFrame.api;
-import org.uic.barcode.asn1.datatypes.CharacterRestriction;
-import org.uic.barcode.asn1.datatypes.HasExtensionMarker;
-import org.uic.barcode.asn1.datatypes.RestrictedString;
-import org.uic.barcode.asn1.datatypes.Sequence;
-import org.uic.barcode.asn1.datatypesimpl.OctetString;
-import org.uic.barcode.asn1.uper.UperEncoder;
-
/**
* The Class DataType.
*/
diff --git a/src/main/java/org/uic/barcode/dynamicFrame/api/SimpleDynamicFrame.java b/src/main/java/org/uic/barcode/dynamicFrame/api/SimpleDynamicFrame.java index ec52758..65b81d6 100644 --- a/src/main/java/org/uic/barcode/dynamicFrame/api/SimpleDynamicFrame.java +++ b/src/main/java/org/uic/barcode/dynamicFrame/api/SimpleDynamicFrame.java @@ -120,7 +120,7 @@ public class SimpleDynamicFrame implements IDynamicFrame { return DynamicFrameCoderV1.encode(this);
- } else if (Constants.DYNAMIC_BARCODE_FORMAT_VERSION_1.equals(format)) {
+ } else if (Constants.DYNAMIC_BARCODE_FORMAT_VERSION_2.equals(format)) {
return DynamicFrameCoderV2.encode(this);
@@ -135,13 +135,12 @@ public class SimpleDynamicFrame implements IDynamicFrame { return DynamicFrameCoderV1.encode(level1Data);
- } else if (Constants.DYNAMIC_BARCODE_FORMAT_VERSION_1.equals(format)) {
+ } else if (Constants.DYNAMIC_BARCODE_FORMAT_VERSION_2.equals(format)) {
return DynamicFrameCoderV2.encode(level1Data);
}
-
- return null;
+ throw new EncodingFormatException("Dynamic Header Version not supported: " + format);
}
private byte[] getEncoded(String path, byte[] data) throws EncodingFormatException {
@@ -150,29 +149,29 @@ public class SimpleDynamicFrame implements IDynamicFrame { return DynamicFrameCoderV1.getEncoded(path, data);
- } else if (Constants.DYNAMIC_BARCODE_FORMAT_VERSION_1.equals(format)) {
+ } else if (Constants.DYNAMIC_BARCODE_FORMAT_VERSION_2.equals(format)) {
return DynamicFrameCoderV2.getEncoded(path, data);
}
- return null;
+ throw new EncodingFormatException("Dynamic Header Version not supported: " + format);
}
- private byte[] encode(ILevel2Data level2SignedData2) throws EncodingFormatException {
+ private byte[] encode(ILevel2Data level2Data) throws EncodingFormatException {
if (Constants.DYNAMIC_BARCODE_FORMAT_VERSION_1.equals(format)) {
- return DynamicFrameCoderV1.encode(level2SignedData2);
+ return DynamicFrameCoderV1.encode(level2Data);
- } else if (Constants.DYNAMIC_BARCODE_FORMAT_VERSION_1.equals(format)) {
+ } else if (Constants.DYNAMIC_BARCODE_FORMAT_VERSION_2.equals(format)) {
- return DynamicFrameCoderV2.encode(level2SignedData2);
+ return DynamicFrameCoderV2.encode(level2Data);
}
- return null;
+ throw new EncodingFormatException("Dynamic Header Version not supported: " + format);
}
/**
@@ -182,22 +181,24 @@ public class SimpleDynamicFrame implements IDynamicFrame { *
* @param bytes the bytes
* @return the dynamic header
+ * @throws EncodingFormatException
*/
- public void decode(byte[] bytes) {
+ public void decode(byte[] bytes) throws EncodingFormatException {
String format = getFormat(bytes);
if (Constants.DYNAMIC_BARCODE_FORMAT_VERSION_1.equals(format)) {
DynamicFrameCoderV1.decode(this,bytes);
+ return;
} else if (Constants.DYNAMIC_BARCODE_FORMAT_VERSION_2.equals(format)) {
DynamicFrameCoderV2.decode(this,bytes);
-
+ return;
}
-
+ throw new EncodingFormatException("Dynamic Header Version not supported");
}
@@ -211,12 +212,35 @@ public class SimpleDynamicFrame implements IDynamicFrame { * @return true, if is static header
*/
private static String getFormat(byte[] data) {
- byte[] start = "U1".getBytes();
- if (start[0] != data[0] || start[1]!= start[1]) {
+
+ if (data == null || data.length < 4) return null;
+
+ byte[] startBits = new byte[4];
+ startBits[0] = data[0];
+ startBits[1] = data[1];
+ startBits[2] = data[2];
+ startBits[3] = data[3];
+
+ String start = AsnUtils.toBooleanString(startBits);
+
+ /*
+ * bitshift:
+ *
+ * version 1:
+ * optional Level2Data 1 bit
+ * length of format: 8 bit
+ *
+ * version 2:
+ * extensionIndicator 1 bit
+ * optional Level2Data 1 bit
+ * length of format: 8 bit
+ */
+
+ if (Constants.DYNAMIC_BARCODE_FORMAT_VERSION_1_BIN.equals(start.substring(9, 23))) {
return Constants.DYNAMIC_BARCODE_FORMAT_VERSION_1;
}
- start = "U2".getBytes();
- if (start[0] != data[0] || start[1]!= start[1]) {
+
+ if (Constants.DYNAMIC_BARCODE_FORMAT_VERSION_2_BIN.equals(start.substring(10, 24))) {
return Constants.DYNAMIC_BARCODE_FORMAT_VERSION_2;
}
return null;
@@ -392,13 +416,9 @@ public class SimpleDynamicFrame implements IDynamicFrame { try {
- //byte[] encodedData = encode(level2Data.getLevel1Data());
- //String s1 = AsnUtils.toBooleanString(encodedData);
- //TODO
- byte[] encodedData2 = getEncoded("Level1Data", data);
- //String s2 = AsnUtils.toBooleanString(encodedData2);
+ byte[] encodedData = getEncoded("Level1Data", data);
- sig.update(encodedData2);
+ sig.update(encodedData);
} catch (SignatureException e) {
return Constants.LEVEL1_VALIDATION_SIG_ALG_NOT_IMPLEMENTED;
diff --git a/src/main/java/org/uic/barcode/dynamicFrame/api/SimpleLevel1Data.java b/src/main/java/org/uic/barcode/dynamicFrame/api/SimpleLevel1Data.java index 241cf6d..e9b1d4e 100644 --- a/src/main/java/org/uic/barcode/dynamicFrame/api/SimpleLevel1Data.java +++ b/src/main/java/org/uic/barcode/dynamicFrame/api/SimpleLevel1Data.java @@ -3,7 +3,6 @@ package org.uic.barcode.dynamicFrame.api; import java.util.ArrayList;
import java.util.Collection;
import java.util.Date;
-import org.uic.barcode.asn1.uper.UperEncoder;
/**
* The Class SignedDataType.
|