From c45fc85b78f3d8701346a231f07b7ffa984ca4ed Mon Sep 17 00:00:00 2001 From: CGantert345 <57003061+CGantert345@users.noreply.github.com> Date: Fri, 23 Apr 2021 13:41:58 +0200 Subject: update --- src/main/java/org/uic/barcode/Encoder.java | 18 ++ .../dynamicContent/dfcb1/ExtensionData.java | 59 +++++ .../dfcb1/GeoCoordinateSystemType.java | 57 +++++ .../dynamicContent/dfcb1/GeoCoordinateType.java | 144 +++++++++++ .../barcode/dynamicContent/dfcb1/GeoUnitType.java | 65 +++++ .../dfcb1/HemisphereLatitudeType.java | 56 +++++ .../dfcb1/HemisphereLongitudeType.java | 55 +++++ .../dfcb1/UicDynamicContentData1.java | 268 +++++++++++++++++++++ .../org/uic/barcode/dynamicFrame/Constants.java | 2 +- .../org/uic/barcode/dynamicFrame/DynamicFrame.java | 19 ++ .../uic/barcode/dynamicFrame/Level1DataType.java | 4 +- .../org/uic/barcode/staticFrame/StaticFrame.java | 9 +- .../uic/barcode/utils/AlgorithmNameResolver.java | 2 +- 13 files changed, 753 insertions(+), 5 deletions(-) create mode 100644 src/main/java/org/uic/barcode/dynamicContent/dfcb1/ExtensionData.java create mode 100644 src/main/java/org/uic/barcode/dynamicContent/dfcb1/GeoCoordinateSystemType.java create mode 100644 src/main/java/org/uic/barcode/dynamicContent/dfcb1/GeoCoordinateType.java create mode 100644 src/main/java/org/uic/barcode/dynamicContent/dfcb1/GeoUnitType.java create mode 100644 src/main/java/org/uic/barcode/dynamicContent/dfcb1/HemisphereLatitudeType.java create mode 100644 src/main/java/org/uic/barcode/dynamicContent/dfcb1/HemisphereLongitudeType.java create mode 100644 src/main/java/org/uic/barcode/dynamicContent/dfcb1/UicDynamicContentData1.java (limited to 'src/main/java/org/uic/barcode') diff --git a/src/main/java/org/uic/barcode/Encoder.java b/src/main/java/org/uic/barcode/Encoder.java index aafe5cc..29ce63d 100644 --- a/src/main/java/org/uic/barcode/Encoder.java +++ b/src/main/java/org/uic/barcode/Encoder.java @@ -5,6 +5,7 @@ import java.security.PrivateKey; import java.security.PublicKey; import org.uic.barcode.asn1.datatypesimpl.OctetString; +import org.uic.barcode.dynamicContent.dfcb1.UicDynamicContentData1; import org.uic.barcode.dynamicFrame.Constants; import org.uic.barcode.dynamicFrame.DataType; import org.uic.barcode.dynamicFrame.DynamicFrame; @@ -165,6 +166,15 @@ public class Encoder { } } + public void setDynamicContentDataUIC1(UicDynamicContentData1 dcd) { + if (dynamicFrame != null) { + if (dynamicFrame.getLevel2SignedData() == null) { + dynamicFrame.setLevel2SignedData(new Level2DataType()); + } + dynamicFrame.getLevel2SignedData().setLevel2Data(dcd.getDataType()); + } + } + public DataType getLevel2Data() { if (dynamicFrame != null && dynamicFrame.getLevel2SignedData() != null) { return dynamicFrame.getLevel2SignedData().getLevel2Data(); @@ -172,6 +182,14 @@ public class Encoder { return null; } + public UicDynamicContentData1 getDynamicContentDataUIC1() { + if (dynamicFrame != null && dynamicFrame.getLevel2SignedData() != null) { + return dynamicFrame.getDynamicDataFDC1(); + } + return null; + } + + /** * Sign level 1 of a dynamic bar code or a static bar code. * diff --git a/src/main/java/org/uic/barcode/dynamicContent/dfcb1/ExtensionData.java b/src/main/java/org/uic/barcode/dynamicContent/dfcb1/ExtensionData.java new file mode 100644 index 0000000..c00da89 --- /dev/null +++ b/src/main/java/org/uic/barcode/dynamicContent/dfcb1/ExtensionData.java @@ -0,0 +1,59 @@ +/* + * This file was generated by openASN.1 - an open source ASN.1 toolkit for java + * + * openASN.1 is Copyright (C) 2007 Clayton Hoss, Marc Weyland + * + * openASN.1 is free software: you can redistribute it and/or modify + * it under the terms of the GNU Lesser General Public License as + * published by the Free Software Foundation, either version 3 of + * the License, or (at your option) any later version. + * + * openASN.1 is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + * GNU Lesser General Public License for more details. + * + * You should have received a copy of the GNU Lesser General Public License + * along with openASN.1. If not, see . + * + */ +package org.uic.barcode.dynamicContent.dfcb1; + +import org.uic.barcode.asn1.datatypes.CharacterRestriction; +import org.uic.barcode.asn1.datatypes.FieldOrder; +import org.uic.barcode.asn1.datatypes.RestrictedString; +import org.uic.barcode.asn1.datatypes.Sequence; +import org.uic.barcode.asn1.datatypesimpl.OctetString; + + +@Sequence +public class ExtensionData extends Object { + public ExtensionData() { + } + + @FieldOrder(order = 0) + @RestrictedString(CharacterRestriction.IA5String) + public String extensionId; + + @FieldOrder(order = 1) + public OctetString extensionData; + + public String getExtensionId() { + return this.extensionId; + } + + public byte[] getExtensionData() { + return extensionData.toByteArray(); + } + + public void setExtensionId(String extensionId) { + this.extensionId = extensionId; + } + + public void setExtensionData(byte[] extensionData) { + this.extensionData = new OctetString(extensionData); + } + + + +} diff --git a/src/main/java/org/uic/barcode/dynamicContent/dfcb1/GeoCoordinateSystemType.java b/src/main/java/org/uic/barcode/dynamicContent/dfcb1/GeoCoordinateSystemType.java new file mode 100644 index 0000000..e535c7f --- /dev/null +++ b/src/main/java/org/uic/barcode/dynamicContent/dfcb1/GeoCoordinateSystemType.java @@ -0,0 +1,57 @@ +/* + * This file was generated by openASN.1 - an open source ASN.1 toolkit for java + * + * openASN.1 is Copyright (C) 2007 Clayton Hoss, Marc Weyland + * + * openASN.1 is free software: you can redistribute it and/or modify + * it under the terms of the GNU Lesser General Public License as + * published by the Free Software Foundation, either version 3 of + * the License, or (at your option) any later version. + * + * openASN.1 is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + * GNU Lesser General Public License for more details. + * + * You should have received a copy of the GNU Lesser General Public License + * along with openASN.1. If not, see . + * + */ +package org.uic.barcode.dynamicContent.dfcb1; + + +// TODO: Auto-generated Javadoc +/** + * The Enum GeoCoordinateSystemType. + */ +public enum GeoCoordinateSystemType { + + /** The wgs 84. */ + wgs84("wgs84"), + + /** The grs 80. */ + grs80("grs80"); + + + /** The text. */ + public String text; + + /** + * Instantiates a new geo coordinate system type. + * + * @param text the text + */ + GeoCoordinateSystemType(String text) { + this.text = text; + } + + /** + * To string. + * + * @return the string + */ + public String toString(){ + return text; + } +} + diff --git a/src/main/java/org/uic/barcode/dynamicContent/dfcb1/GeoCoordinateType.java b/src/main/java/org/uic/barcode/dynamicContent/dfcb1/GeoCoordinateType.java new file mode 100644 index 0000000..e1a5e9b --- /dev/null +++ b/src/main/java/org/uic/barcode/dynamicContent/dfcb1/GeoCoordinateType.java @@ -0,0 +1,144 @@ +/* + * This file was generated by openASN.1 - an open source ASN.1 toolkit for java + * + * openASN.1 is Copyright (C) 2007 Clayton Hoss, Marc Weyland + * + * openASN.1 is free software: you can redistribute it and/or modify + * it under the terms of the GNU Lesser General Public License as + * published by the Free Software Foundation, either version 3 of + * the License, or (at your option) any later version. + * + * openASN.1 is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + * GNU Lesser General Public License for more details. + * + * You should have received a copy of the GNU Lesser General Public License + * along with openASN.1. If not, see . + * + */ +package org.uic.barcode.dynamicContent.dfcb1; + +import org.uic.barcode.asn1.datatypes.Asn1BigInteger; +import org.uic.barcode.asn1.datatypes.Asn1Default; +import org.uic.barcode.asn1.datatypes.Asn1Optional; +import org.uic.barcode.asn1.datatypes.FieldOrder; +import org.uic.barcode.asn1.datatypes.Sequence; + +@Sequence +public class GeoCoordinateType extends Object { + public GeoCoordinateType() { + } + + @FieldOrder(order = 0) + @Asn1Default(value="milliDegree") + @Asn1Optional public GeoUnitType geoUnit; + + @FieldOrder(order = 1) + @Asn1Default(value="wgs84") + @Asn1Optional public GeoCoordinateSystemType coordinateSystem; + + @FieldOrder(order = 2) + @Asn1Default(value="north") + @Asn1Optional public HemisphereLongitudeType hemisphereLongitude; + + @FieldOrder(order = 3) + @Asn1Default(value="east") + @Asn1Optional public HemisphereLatitudeType hemisphereLatitude; + + @FieldOrder(order = 4) + public Asn1BigInteger longitude; + + @FieldOrder(order = 5) + public Asn1BigInteger latitude; + + @FieldOrder(order = 6) + @Asn1Optional public GeoUnitType accuracy; + + public GeoUnitType getGeoUnit() { + + if (geoUnit == null){ + return GeoUnitType.milliDegree; + } + return this.geoUnit; + } + + public GeoCoordinateSystemType getCoordinateSystem() { + + if (coordinateSystem == null) { + return GeoCoordinateSystemType.wgs84; + } + + return this.coordinateSystem; + } + + public HemisphereLongitudeType getHemisphereLongitude() { + + if (hemisphereLongitude == null){ + return HemisphereLongitudeType.north; + } + + return this.hemisphereLongitude; + } + + public HemisphereLatitudeType getHemisphereLatitude() { + + if (hemisphereLatitude == null) { + return HemisphereLatitudeType.east; + } + + return this.hemisphereLatitude; + } + + public Long getLongitude() { + + return Asn1BigInteger.toLong(this.longitude); + } + + public Long getLatitude() { + + return Asn1BigInteger.toLong(this.latitude); + } + + public GeoUnitType getAccuracy() { + + return this.accuracy; + } + + public void setGeoUnit(GeoUnitType geoUnit) { + + this.geoUnit = geoUnit; + } + + public void setCoordinateSystem(GeoCoordinateSystemType coordinateSystem) { + + this.coordinateSystem = coordinateSystem; + } + + public void setHemisphereLongitude(HemisphereLongitudeType hemisphereLongitude) { + + this.hemisphereLongitude = hemisphereLongitude; + } + + public void setHemisphereLatitude(HemisphereLatitudeType hemisphereLatitude) { + + this.hemisphereLatitude = hemisphereLatitude; + } + + public void setLongitude(Long longitude) { + + this.longitude = Asn1BigInteger.toAsn1(longitude); + } + + public void setLatitude(Long latitude) { + + this.latitude = Asn1BigInteger.toAsn1(latitude); + } + + public void setAccuracy(GeoUnitType accuracy) { + + this.accuracy = accuracy; + } + + +} diff --git a/src/main/java/org/uic/barcode/dynamicContent/dfcb1/GeoUnitType.java b/src/main/java/org/uic/barcode/dynamicContent/dfcb1/GeoUnitType.java new file mode 100644 index 0000000..222f68d --- /dev/null +++ b/src/main/java/org/uic/barcode/dynamicContent/dfcb1/GeoUnitType.java @@ -0,0 +1,65 @@ +/* + * This file was generated by openASN.1 - an open source ASN.1 toolkit for java + * + * openASN.1 is Copyright (C) 2007 Clayton Hoss, Marc Weyland + * + * openASN.1 is free software: you can redistribute it and/or modify + * it under the terms of the GNU Lesser General Public License as + * published by the Free Software Foundation, either version 3 of + * the License, or (at your option) any later version. + * + * openASN.1 is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + * GNU Lesser General Public License for more details. + * + * You should have received a copy of the GNU Lesser General Public License + * along with openASN.1. If not, see . + * + */ +package org.uic.barcode.dynamicContent.dfcb1; + +// TODO: Auto-generated Javadoc +/** + * The Enum GeoUnitType. + */ +public enum GeoUnitType { + + /** The micro degree. */ + microDegree("microDegree"), + + /** The tenthmilli degree. */ + tenthmilliDegree("tenthmilliDegree"), + + /** The milli degree. */ + milliDegree("milliDegree"), + + /** The centi degree. */ + centiDegree("centiDegree"), + + /** The deci degree. */ + deciDegree("deciDegree"); + + + /** The text. */ + public String text; + + /** + * Instantiates a new geo unit type. + * + * @param text the text + */ + GeoUnitType(String text) { + this.text = text; + } + + /** + * To string. + * + * @return the string + */ + public String toString(){ + return text; + } +} + diff --git a/src/main/java/org/uic/barcode/dynamicContent/dfcb1/HemisphereLatitudeType.java b/src/main/java/org/uic/barcode/dynamicContent/dfcb1/HemisphereLatitudeType.java new file mode 100644 index 0000000..e76d120 --- /dev/null +++ b/src/main/java/org/uic/barcode/dynamicContent/dfcb1/HemisphereLatitudeType.java @@ -0,0 +1,56 @@ +/* + * This file was generated by openASN.1 - an open source ASN.1 toolkit for java + * + * openASN.1 is Copyright (C) 2007 Clayton Hoss, Marc Weyland + * + * openASN.1 is free software: you can redistribute it and/or modify + * it under the terms of the GNU Lesser General Public License as + * published by the Free Software Foundation, either version 3 of + * the License, or (at your option) any later version. + * + * openASN.1 is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + * GNU Lesser General Public License for more details. + * + * You should have received a copy of the GNU Lesser General Public License + * along with openASN.1. If not, see . + * + */ +package org.uic.barcode.dynamicContent.dfcb1; + +// TODO: Auto-generated Javadoc +/** + * The Enum HemisphereLatitudeType. + */ +public enum HemisphereLatitudeType { + + /** The east. */ + east("east"), + + /** The west. */ + west("west"); + + + /** The text. */ + public String text; + + /** + * Instantiates a new hemisphere latitude type. + * + * @param text the text + */ + HemisphereLatitudeType(String text) { + this.text = text; + } + + /** + * To string. + * + * @return the string + */ + public String toString(){ + return text; + } +} + diff --git a/src/main/java/org/uic/barcode/dynamicContent/dfcb1/HemisphereLongitudeType.java b/src/main/java/org/uic/barcode/dynamicContent/dfcb1/HemisphereLongitudeType.java new file mode 100644 index 0000000..3eeed52 --- /dev/null +++ b/src/main/java/org/uic/barcode/dynamicContent/dfcb1/HemisphereLongitudeType.java @@ -0,0 +1,55 @@ +/* + * This file was generated by openASN.1 - an open source ASN.1 toolkit for java + * + * openASN.1 is Copyright (C) 2007 Clayton Hoss, Marc Weyland + * + * openASN.1 is free software: you can redistribute it and/or modify + * it under the terms of the GNU Lesser General Public License as + * published by the Free Software Foundation, either version 3 of + * the License, or (at your option) any later version. + * + * openASN.1 is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + * GNU Lesser General Public License for more details. + * + * You should have received a copy of the GNU Lesser General Public License + * along with openASN.1. If not, see . + * + */ +package org.uic.barcode.dynamicContent.dfcb1; + +// TODO: Auto-generated Javadoc +/** + * The Enum HemisphereLongitudeType. + */ +public enum HemisphereLongitudeType { + + /** The north. */ + north("north"), + + /** The south. */ + south("south"); + + /** The text. */ + public String text; + + /** + * Instantiates a new hemisphere longitude type. + * + * @param text the text + */ + HemisphereLongitudeType(String text) { + this.text = text; + } + + /** + * To string. + * + * @return the string + */ + public String toString(){ + return text; + } +} + diff --git a/src/main/java/org/uic/barcode/dynamicContent/dfcb1/UicDynamicContentData1.java b/src/main/java/org/uic/barcode/dynamicContent/dfcb1/UicDynamicContentData1.java new file mode 100644 index 0000000..034057a --- /dev/null +++ b/src/main/java/org/uic/barcode/dynamicContent/dfcb1/UicDynamicContentData1.java @@ -0,0 +1,268 @@ +/* + * + */ +package org.uic.barcode.dynamicContent.dfcb1; + +import java.util.Calendar; +import java.util.Date; +import java.util.TimeZone; + +import org.uic.barcode.asn1.datatypes.Asn1Default; +import org.uic.barcode.asn1.datatypes.Asn1Optional; +import org.uic.barcode.asn1.datatypes.CharacterRestriction; +import org.uic.barcode.asn1.datatypes.FieldOrder; +import org.uic.barcode.asn1.datatypes.HasExtensionMarker; +import org.uic.barcode.asn1.datatypes.IntRange; +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; +import org.uic.barcode.dynamicFrame.DataType; + + +/** + * The Class UicDynamicContentData. + * + * The dynamic content for FDC1 + * + */ + + +@Sequence +@HasExtensionMarker +public class UicDynamicContentData1 { + + //-- Moment of generation of the dynamic content, expressed in UTC : + //-- * dynamicContentDay is the number of days from issuing date + //-- (UicRailTicketData.issuingDetail.issuingYear and issuingDay) + // -- The range 0..1070 allows a validity equal to that of the validFrom (700) plus + // -- validUntil (370) elements of the different transport documents of UicRailTicketData. + //-- * dynamicContentTime is the number of seconds of the day + //-- (from 0 = 0:00:00 to 86399 = 23:59:59) + //-- These two elements shall be either both present, either both absent + /** The day. */ + //dynamicContentDay INTEGER (0..1070) DEFAULT 0, + @FieldOrder(order = 0) + @Asn1Default(value="0") + @IntRange(minValue=0, maxValue=1070) + public Long day; + + /** The second of day. */ + // dynamicContentTime INTEGER (0..86399) OPTIONAL, + @FieldOrder(order = 1) + @IntRange(minValue=0, maxValue=86399) + public Long secondOfDay; + + //-- Coordinates of the place where the dynamic content has been generated + // -- (same GeoCoordinateType type as in UicRailTicketData) + /** The geo coordinate. */ + //dynamicContentGeoCoordinate GeoCoordinateType OPTIONAL, + @FieldOrder(order = 2) + @Asn1Optional public GeoCoordinateType geoCoordinate; + //-- Response from the mobile to any data received from the terminal. + //-- The data received from the terminal may be a random number, or any other information. + //-- The response may be the data itself, a hashing of this data, or any other response. + // -- This response may be completed with other information: IMEI, mobile phone number... + //-- The type used is ExtensionData, as it is fully adapted. + // -- extensionId shall be set to: + // -- * "=" if the data included in extensionData is exactly the one that was transmitted by the terminal, + // -- * any other value (chosen by the issuer) in other cases. + /** The challenge response. */ + //dynamicContentResponseToChallenge ExtensionData OPTIONAL, + @FieldOrder(order = 3) + @Asn1Optional public ExtensionData challengeResponse; + + /** The extension. */ + //-- proprietary data defined bilaterally + @FieldOrder(order = 4) + @Asn1Optional public ExtensionData extension; + //dynamicContentExtension ExtensionData OPTIONAL, + + // challenge string asked by the TCO + @FieldOrder(order = 5) + @RestrictedString(CharacterRestriction.IA5String) + @Asn1Optional public String challengeString; + + // hashed phone id + @FieldOrder(order = 6) + public OctetString phoneIdHash; + + // hashed e-passport-id + @FieldOrder(order = 7) + public OctetString passHash; + + //... + + /** + * Gets the day. + * + * @return the day + */ + public Long getDay() { + return day; + } + + /** + * Sets the day. + * + * @param day the new day + */ + public void setDay(Long day) { + this.day = day; + } + + /** + * Gets the time. + * + * @return the time + */ + public Long getTime() { + return secondOfDay; + } + + /** + * Sets the time. + * + * @param time the new time + */ + public void setTime(Long time) { + this.secondOfDay = time; + } + + /** + * Gets the geo coordinate. + * + * @return the geo coordinate + */ + public GeoCoordinateType getGeoCoordinate() { + return geoCoordinate; + } + + /** + * Sets the geo coordinate. + * + * @param geoCoordinate the new geo coordinate + */ + public void setGeoCoordinate(GeoCoordinateType geoCoordinate) { + this.geoCoordinate = geoCoordinate; + } + + /** + * Gets the challenge response. + * + * @return the challenge response + */ + public ExtensionData getChallengeResponse() { + return challengeResponse; + } + + /** + * Sets the challenge response. + * + * @param challengeResponse the new challenge response + */ + public void setChallengeResponse(ExtensionData challengeResponse) { + this.challengeResponse = challengeResponse; + } + + /** + * Gets the extension. + * + * @return the extension + */ + public ExtensionData getExtension() { + return extension; + } + + /** + * Sets the extension. + * + * @param extension the new extension + */ + public void setExtension(ExtensionData extension) { + this.extension = extension; + } + + /** + * Gets the time. + * + * @param issuingDate the issuing date in UTC + * @return the date and time of content creation in UTC + */ + public Date getTime(Date issuingDate) { + + Calendar cal = Calendar.getInstance(); + cal.setTime(issuingDate); + cal.setTimeZone(TimeZone.getTimeZone("UTC")); + cal.set(Calendar.SECOND,0); + cal.set(Calendar.HOUR,0); + cal.set(Calendar.MINUTE,0); + cal.add(Calendar.DATE, day.intValue()); + cal.add(Calendar.SECOND, secondOfDay.intValue()); + + return cal.getTime(); + } + + /** + * Sets the date time. + * + * @param dateUTC the current date and time in UTC + * @param issuingDateUTC the issuing date and time in UTC + */ + public void setDateTime(Date dateUTC, Date issuingDateUTC) { + + Calendar cal1 = Calendar.getInstance(); + cal1.setTime(issuingDateUTC); + + Calendar cal2 = Calendar.getInstance(); + cal2.setTime(dateUTC); + + int days1 = cal1.get(Calendar.DATE); + int days2 = cal2.get(Calendar.DATE); + + day = new Long (days2 - days1); + + secondOfDay = (long) cal2.get(Calendar.SECOND); + secondOfDay = secondOfDay + 60 * (long) cal2.get(Calendar.MINUTE); + secondOfDay = secondOfDay + 60 * 60 * (long) cal2.get(Calendar.HOUR_OF_DAY); + + } + + public static String getFormat() { + return "FDC1"; + } + + public DataType getDataType() { + DataType data = new DataType(); + data.setFormat(UicDynamicContentData1.getFormat()); + data.setByteData(UperEncoder.encode(this)); + return data; + } + + public String getChallengeString() { + return challengeString; + } + + public void setChallengeString(String challengeString) { + this.challengeString = challengeString; + } + + public OctetString getPhoneIdHash() { + return phoneIdHash; + } + + public void setPhoneIdHash(OctetString phoneIdHash) { + this.phoneIdHash = phoneIdHash; + } + + public OctetString getPassHash() { + return passHash; + } + + public void setPassHash(OctetString passHash) { + this.passHash = passHash; + } + + + +} diff --git a/src/main/java/org/uic/barcode/dynamicFrame/Constants.java b/src/main/java/org/uic/barcode/dynamicFrame/Constants.java index 98b62aa..774475a 100644 --- a/src/main/java/org/uic/barcode/dynamicFrame/Constants.java +++ b/src/main/java/org/uic/barcode/dynamicFrame/Constants.java @@ -12,7 +12,7 @@ public class Constants { public static String DSA_SHA1 = "1.2.840.10040.4.3"; public static String DSA_SHA224 = "2.16.840.1.101.3.4.3.1"; - public static String DSA_SHA248 = "2.16.840.1.101.3.4.3.2"; + public static String DSA_SHA256 = "2.16.840.1.101.3.4.3.2"; public static String DATA_TYPE_FCB_VERSION_1 = "FCB1"; public static String DATA_TYPE_FCB_VERSION_2 = "FCB2"; diff --git a/src/main/java/org/uic/barcode/dynamicFrame/DynamicFrame.java b/src/main/java/org/uic/barcode/dynamicFrame/DynamicFrame.java index 9605a0d..886cb79 100644 --- a/src/main/java/org/uic/barcode/dynamicFrame/DynamicFrame.java +++ b/src/main/java/org/uic/barcode/dynamicFrame/DynamicFrame.java @@ -18,6 +18,7 @@ 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; +import org.uic.barcode.dynamicContent.dfcb1.UicDynamicContentData1; import org.uic.barcode.utils.AlgorithmNameResolver; @@ -262,5 +263,23 @@ public class DynamicFrame extends Object{ } + public void addLevel2DynamicData(UicDynamicContentData1 dynamicData) { + this.getLevel2SignedData().setLevel2Data( dynamicData.getDataType()); + } + + public UicDynamicContentData1 getDynamicDataFDC1() { + + if (this.getLevel2SignedData() == null || + this.getLevel2SignedData().getLevel2Data() == null){ + return null; + } + + if ( UicDynamicContentData1.getFormat().equals(this.getLevel2SignedData().getLevel2Data().getFormat())) { + return UperEncoder.decode(this.getLevel2SignedData().getLevel2Data().getByteData(), UicDynamicContentData1.class); + } + return null; + + } + } diff --git a/src/main/java/org/uic/barcode/dynamicFrame/Level1DataType.java b/src/main/java/org/uic/barcode/dynamicFrame/Level1DataType.java index 1f4d476..aac0188 100644 --- a/src/main/java/org/uic/barcode/dynamicFrame/Level1DataType.java +++ b/src/main/java/org/uic/barcode/dynamicFrame/Level1DataType.java @@ -49,7 +49,7 @@ public class Level1DataType { * * e.g.: * -- DSA SHA224 2.16.840.1.101.3.4.3.1 - * -- DSA SHA248 2.16.840.1.101.3.4.3.2 + * -- DSA SHA256 2.16.840.1.101.3.4.3.2 * -- ECC 256 1.2.840.10045.3.1.7 * * @@ -69,7 +69,7 @@ public class Level1DataType { * * e.g.: * -- DSA SHA224 2.16.840.1.101.3.4.3.1 - * -- DSA SHA248 2.16.840.1.101.3.4.3.2 + * -- DSA SHA256 2.16.840.1.101.3.4.3.2 * -- ECC 256 1.2.840.10045.3.1.7 * * diff --git a/src/main/java/org/uic/barcode/staticFrame/StaticFrame.java b/src/main/java/org/uic/barcode/staticFrame/StaticFrame.java index 639af69..2759bf0 100644 --- a/src/main/java/org/uic/barcode/staticFrame/StaticFrame.java +++ b/src/main/java/org/uic/barcode/staticFrame/StaticFrame.java @@ -655,7 +655,7 @@ public class StaticFrame { * @throws NoSuchAlgorithmException the no such algorithm exception * @throws SignatureException the signature exception * @throws IllegalArgumentException the illegal argument exception - * @throws UnsupportedOperationException the unsupported operatign exception + * @throws UnsupportedOperationException the unsupported operating exception * @throws EncodingFormatException * @throws IOException */ @@ -669,6 +669,9 @@ public class StaticFrame { algo = service.getAlgorithm(); } } + if (algo == null) { + throw new NoSuchAlgorithmException("No service for algorithm found: " + signingAlg); + } Signature sig = Signature.getInstance(algo); sig.initVerify(key); sig.update(getDataForSignature()); @@ -697,8 +700,12 @@ public class StaticFrame { Service service = prov.getService("Signature",signingAlg); if (service != null) { algo = service.getAlgorithm(); + break; } } + if (algo == null) { + throw new NoSuchAlgorithmException("No service for algorthm found: " + signingAlg); + } Signature sig = Signature.getInstance(algo); sig.initSign(key); signedData = getDataForSignature(); diff --git a/src/main/java/org/uic/barcode/utils/AlgorithmNameResolver.java b/src/main/java/org/uic/barcode/utils/AlgorithmNameResolver.java index 300bf7d..e3918b0 100644 --- a/src/main/java/org/uic/barcode/utils/AlgorithmNameResolver.java +++ b/src/main/java/org/uic/barcode/utils/AlgorithmNameResolver.java @@ -50,7 +50,7 @@ public class AlgorithmNameResolver { Service pservice = prov.getService(ptype, poid); String palgo = pservice.getAlgorithm(); - if (ptype.equalsIgnoreCase(type) && poid.equals(oid)) { + if (poid != null && ptype.equalsIgnoreCase(type) && poid.equals(oid)) { return palgo; } } -- cgit v1.2.3 From 9c27db0284c86583c135282e637f5e4dcb220c89 Mon Sep 17 00:00:00 2001 From: CGantert345 <57003061+CGantert345@users.noreply.github.com> Date: Wed, 12 May 2021 14:00:22 +0200 Subject: - Bug fix StaticHeader date format - Dynamic content for the dynamic content of the dynamic frame --- src/main/java/org/uic/barcode/Encoder.java | 6 +- .../dynamicContent/dfcb1/ExtensionData.java | 59 ----- .../dfcb1/GeoCoordinateSystemType.java | 57 ----- .../dynamicContent/dfcb1/GeoCoordinateType.java | 144 ----------- .../barcode/dynamicContent/dfcb1/GeoUnitType.java | 65 ----- .../dfcb1/HemisphereLatitudeType.java | 56 ----- .../dfcb1/HemisphereLongitudeType.java | 55 ----- .../dfcb1/UicDynamicContentData1.java | 268 --------------------- .../barcode/dynamicContent/fdc1/ExtensionData.java | 59 +++++ .../fdc1/GeoCoordinateSystemType.java | 57 +++++ .../dynamicContent/fdc1/GeoCoordinateType.java | 144 +++++++++++ .../barcode/dynamicContent/fdc1/GeoUnitType.java | 65 +++++ .../fdc1/HemisphereLatitudeType.java | 56 +++++ .../fdc1/HemisphereLongitudeType.java | 55 +++++ .../dynamicContent/fdc1/SequenceOfExtension.java | 11 + .../uic/barcode/dynamicContent/fdc1/TimeStamp.java | 144 +++++++++++ .../fdc1/UicDynamicContentDataFDC1.java | 205 ++++++++++++++++ .../org/uic/barcode/dynamicFrame/DynamicFrame.java | 10 +- .../uic/barcode/staticFrame/UHEADDataRecord.java | 2 +- 19 files changed, 805 insertions(+), 713 deletions(-) delete mode 100644 src/main/java/org/uic/barcode/dynamicContent/dfcb1/ExtensionData.java delete mode 100644 src/main/java/org/uic/barcode/dynamicContent/dfcb1/GeoCoordinateSystemType.java delete mode 100644 src/main/java/org/uic/barcode/dynamicContent/dfcb1/GeoCoordinateType.java delete mode 100644 src/main/java/org/uic/barcode/dynamicContent/dfcb1/GeoUnitType.java delete mode 100644 src/main/java/org/uic/barcode/dynamicContent/dfcb1/HemisphereLatitudeType.java delete mode 100644 src/main/java/org/uic/barcode/dynamicContent/dfcb1/HemisphereLongitudeType.java delete mode 100644 src/main/java/org/uic/barcode/dynamicContent/dfcb1/UicDynamicContentData1.java create mode 100644 src/main/java/org/uic/barcode/dynamicContent/fdc1/ExtensionData.java create mode 100644 src/main/java/org/uic/barcode/dynamicContent/fdc1/GeoCoordinateSystemType.java create mode 100644 src/main/java/org/uic/barcode/dynamicContent/fdc1/GeoCoordinateType.java create mode 100644 src/main/java/org/uic/barcode/dynamicContent/fdc1/GeoUnitType.java create mode 100644 src/main/java/org/uic/barcode/dynamicContent/fdc1/HemisphereLatitudeType.java create mode 100644 src/main/java/org/uic/barcode/dynamicContent/fdc1/HemisphereLongitudeType.java create mode 100644 src/main/java/org/uic/barcode/dynamicContent/fdc1/SequenceOfExtension.java create mode 100644 src/main/java/org/uic/barcode/dynamicContent/fdc1/TimeStamp.java create mode 100644 src/main/java/org/uic/barcode/dynamicContent/fdc1/UicDynamicContentDataFDC1.java (limited to 'src/main/java/org/uic/barcode') diff --git a/src/main/java/org/uic/barcode/Encoder.java b/src/main/java/org/uic/barcode/Encoder.java index 29ce63d..d971214 100644 --- a/src/main/java/org/uic/barcode/Encoder.java +++ b/src/main/java/org/uic/barcode/Encoder.java @@ -5,7 +5,7 @@ import java.security.PrivateKey; import java.security.PublicKey; import org.uic.barcode.asn1.datatypesimpl.OctetString; -import org.uic.barcode.dynamicContent.dfcb1.UicDynamicContentData1; +import org.uic.barcode.dynamicContent.fdc1.UicDynamicContentDataFDC1; import org.uic.barcode.dynamicFrame.Constants; import org.uic.barcode.dynamicFrame.DataType; import org.uic.barcode.dynamicFrame.DynamicFrame; @@ -166,7 +166,7 @@ public class Encoder { } } - public void setDynamicContentDataUIC1(UicDynamicContentData1 dcd) { + public void setDynamicContentDataUIC1(UicDynamicContentDataFDC1 dcd) { if (dynamicFrame != null) { if (dynamicFrame.getLevel2SignedData() == null) { dynamicFrame.setLevel2SignedData(new Level2DataType()); @@ -182,7 +182,7 @@ public class Encoder { return null; } - public UicDynamicContentData1 getDynamicContentDataUIC1() { + public UicDynamicContentDataFDC1 getDynamicContentDataUIC1() { if (dynamicFrame != null && dynamicFrame.getLevel2SignedData() != null) { return dynamicFrame.getDynamicDataFDC1(); } diff --git a/src/main/java/org/uic/barcode/dynamicContent/dfcb1/ExtensionData.java b/src/main/java/org/uic/barcode/dynamicContent/dfcb1/ExtensionData.java deleted file mode 100644 index c00da89..0000000 --- a/src/main/java/org/uic/barcode/dynamicContent/dfcb1/ExtensionData.java +++ /dev/null @@ -1,59 +0,0 @@ -/* - * This file was generated by openASN.1 - an open source ASN.1 toolkit for java - * - * openASN.1 is Copyright (C) 2007 Clayton Hoss, Marc Weyland - * - * openASN.1 is free software: you can redistribute it and/or modify - * it under the terms of the GNU Lesser General Public License as - * published by the Free Software Foundation, either version 3 of - * the License, or (at your option) any later version. - * - * openASN.1 is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - * GNU Lesser General Public License for more details. - * - * You should have received a copy of the GNU Lesser General Public License - * along with openASN.1. If not, see . - * - */ -package org.uic.barcode.dynamicContent.dfcb1; - -import org.uic.barcode.asn1.datatypes.CharacterRestriction; -import org.uic.barcode.asn1.datatypes.FieldOrder; -import org.uic.barcode.asn1.datatypes.RestrictedString; -import org.uic.barcode.asn1.datatypes.Sequence; -import org.uic.barcode.asn1.datatypesimpl.OctetString; - - -@Sequence -public class ExtensionData extends Object { - public ExtensionData() { - } - - @FieldOrder(order = 0) - @RestrictedString(CharacterRestriction.IA5String) - public String extensionId; - - @FieldOrder(order = 1) - public OctetString extensionData; - - public String getExtensionId() { - return this.extensionId; - } - - public byte[] getExtensionData() { - return extensionData.toByteArray(); - } - - public void setExtensionId(String extensionId) { - this.extensionId = extensionId; - } - - public void setExtensionData(byte[] extensionData) { - this.extensionData = new OctetString(extensionData); - } - - - -} diff --git a/src/main/java/org/uic/barcode/dynamicContent/dfcb1/GeoCoordinateSystemType.java b/src/main/java/org/uic/barcode/dynamicContent/dfcb1/GeoCoordinateSystemType.java deleted file mode 100644 index e535c7f..0000000 --- a/src/main/java/org/uic/barcode/dynamicContent/dfcb1/GeoCoordinateSystemType.java +++ /dev/null @@ -1,57 +0,0 @@ -/* - * This file was generated by openASN.1 - an open source ASN.1 toolkit for java - * - * openASN.1 is Copyright (C) 2007 Clayton Hoss, Marc Weyland - * - * openASN.1 is free software: you can redistribute it and/or modify - * it under the terms of the GNU Lesser General Public License as - * published by the Free Software Foundation, either version 3 of - * the License, or (at your option) any later version. - * - * openASN.1 is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - * GNU Lesser General Public License for more details. - * - * You should have received a copy of the GNU Lesser General Public License - * along with openASN.1. If not, see . - * - */ -package org.uic.barcode.dynamicContent.dfcb1; - - -// TODO: Auto-generated Javadoc -/** - * The Enum GeoCoordinateSystemType. - */ -public enum GeoCoordinateSystemType { - - /** The wgs 84. */ - wgs84("wgs84"), - - /** The grs 80. */ - grs80("grs80"); - - - /** The text. */ - public String text; - - /** - * Instantiates a new geo coordinate system type. - * - * @param text the text - */ - GeoCoordinateSystemType(String text) { - this.text = text; - } - - /** - * To string. - * - * @return the string - */ - public String toString(){ - return text; - } -} - diff --git a/src/main/java/org/uic/barcode/dynamicContent/dfcb1/GeoCoordinateType.java b/src/main/java/org/uic/barcode/dynamicContent/dfcb1/GeoCoordinateType.java deleted file mode 100644 index e1a5e9b..0000000 --- a/src/main/java/org/uic/barcode/dynamicContent/dfcb1/GeoCoordinateType.java +++ /dev/null @@ -1,144 +0,0 @@ -/* - * This file was generated by openASN.1 - an open source ASN.1 toolkit for java - * - * openASN.1 is Copyright (C) 2007 Clayton Hoss, Marc Weyland - * - * openASN.1 is free software: you can redistribute it and/or modify - * it under the terms of the GNU Lesser General Public License as - * published by the Free Software Foundation, either version 3 of - * the License, or (at your option) any later version. - * - * openASN.1 is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - * GNU Lesser General Public License for more details. - * - * You should have received a copy of the GNU Lesser General Public License - * along with openASN.1. If not, see . - * - */ -package org.uic.barcode.dynamicContent.dfcb1; - -import org.uic.barcode.asn1.datatypes.Asn1BigInteger; -import org.uic.barcode.asn1.datatypes.Asn1Default; -import org.uic.barcode.asn1.datatypes.Asn1Optional; -import org.uic.barcode.asn1.datatypes.FieldOrder; -import org.uic.barcode.asn1.datatypes.Sequence; - -@Sequence -public class GeoCoordinateType extends Object { - public GeoCoordinateType() { - } - - @FieldOrder(order = 0) - @Asn1Default(value="milliDegree") - @Asn1Optional public GeoUnitType geoUnit; - - @FieldOrder(order = 1) - @Asn1Default(value="wgs84") - @Asn1Optional public GeoCoordinateSystemType coordinateSystem; - - @FieldOrder(order = 2) - @Asn1Default(value="north") - @Asn1Optional public HemisphereLongitudeType hemisphereLongitude; - - @FieldOrder(order = 3) - @Asn1Default(value="east") - @Asn1Optional public HemisphereLatitudeType hemisphereLatitude; - - @FieldOrder(order = 4) - public Asn1BigInteger longitude; - - @FieldOrder(order = 5) - public Asn1BigInteger latitude; - - @FieldOrder(order = 6) - @Asn1Optional public GeoUnitType accuracy; - - public GeoUnitType getGeoUnit() { - - if (geoUnit == null){ - return GeoUnitType.milliDegree; - } - return this.geoUnit; - } - - public GeoCoordinateSystemType getCoordinateSystem() { - - if (coordinateSystem == null) { - return GeoCoordinateSystemType.wgs84; - } - - return this.coordinateSystem; - } - - public HemisphereLongitudeType getHemisphereLongitude() { - - if (hemisphereLongitude == null){ - return HemisphereLongitudeType.north; - } - - return this.hemisphereLongitude; - } - - public HemisphereLatitudeType getHemisphereLatitude() { - - if (hemisphereLatitude == null) { - return HemisphereLatitudeType.east; - } - - return this.hemisphereLatitude; - } - - public Long getLongitude() { - - return Asn1BigInteger.toLong(this.longitude); - } - - public Long getLatitude() { - - return Asn1BigInteger.toLong(this.latitude); - } - - public GeoUnitType getAccuracy() { - - return this.accuracy; - } - - public void setGeoUnit(GeoUnitType geoUnit) { - - this.geoUnit = geoUnit; - } - - public void setCoordinateSystem(GeoCoordinateSystemType coordinateSystem) { - - this.coordinateSystem = coordinateSystem; - } - - public void setHemisphereLongitude(HemisphereLongitudeType hemisphereLongitude) { - - this.hemisphereLongitude = hemisphereLongitude; - } - - public void setHemisphereLatitude(HemisphereLatitudeType hemisphereLatitude) { - - this.hemisphereLatitude = hemisphereLatitude; - } - - public void setLongitude(Long longitude) { - - this.longitude = Asn1BigInteger.toAsn1(longitude); - } - - public void setLatitude(Long latitude) { - - this.latitude = Asn1BigInteger.toAsn1(latitude); - } - - public void setAccuracy(GeoUnitType accuracy) { - - this.accuracy = accuracy; - } - - -} diff --git a/src/main/java/org/uic/barcode/dynamicContent/dfcb1/GeoUnitType.java b/src/main/java/org/uic/barcode/dynamicContent/dfcb1/GeoUnitType.java deleted file mode 100644 index 222f68d..0000000 --- a/src/main/java/org/uic/barcode/dynamicContent/dfcb1/GeoUnitType.java +++ /dev/null @@ -1,65 +0,0 @@ -/* - * This file was generated by openASN.1 - an open source ASN.1 toolkit for java - * - * openASN.1 is Copyright (C) 2007 Clayton Hoss, Marc Weyland - * - * openASN.1 is free software: you can redistribute it and/or modify - * it under the terms of the GNU Lesser General Public License as - * published by the Free Software Foundation, either version 3 of - * the License, or (at your option) any later version. - * - * openASN.1 is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - * GNU Lesser General Public License for more details. - * - * You should have received a copy of the GNU Lesser General Public License - * along with openASN.1. If not, see . - * - */ -package org.uic.barcode.dynamicContent.dfcb1; - -// TODO: Auto-generated Javadoc -/** - * The Enum GeoUnitType. - */ -public enum GeoUnitType { - - /** The micro degree. */ - microDegree("microDegree"), - - /** The tenthmilli degree. */ - tenthmilliDegree("tenthmilliDegree"), - - /** The milli degree. */ - milliDegree("milliDegree"), - - /** The centi degree. */ - centiDegree("centiDegree"), - - /** The deci degree. */ - deciDegree("deciDegree"); - - - /** The text. */ - public String text; - - /** - * Instantiates a new geo unit type. - * - * @param text the text - */ - GeoUnitType(String text) { - this.text = text; - } - - /** - * To string. - * - * @return the string - */ - public String toString(){ - return text; - } -} - diff --git a/src/main/java/org/uic/barcode/dynamicContent/dfcb1/HemisphereLatitudeType.java b/src/main/java/org/uic/barcode/dynamicContent/dfcb1/HemisphereLatitudeType.java deleted file mode 100644 index e76d120..0000000 --- a/src/main/java/org/uic/barcode/dynamicContent/dfcb1/HemisphereLatitudeType.java +++ /dev/null @@ -1,56 +0,0 @@ -/* - * This file was generated by openASN.1 - an open source ASN.1 toolkit for java - * - * openASN.1 is Copyright (C) 2007 Clayton Hoss, Marc Weyland - * - * openASN.1 is free software: you can redistribute it and/or modify - * it under the terms of the GNU Lesser General Public License as - * published by the Free Software Foundation, either version 3 of - * the License, or (at your option) any later version. - * - * openASN.1 is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - * GNU Lesser General Public License for more details. - * - * You should have received a copy of the GNU Lesser General Public License - * along with openASN.1. If not, see . - * - */ -package org.uic.barcode.dynamicContent.dfcb1; - -// TODO: Auto-generated Javadoc -/** - * The Enum HemisphereLatitudeType. - */ -public enum HemisphereLatitudeType { - - /** The east. */ - east("east"), - - /** The west. */ - west("west"); - - - /** The text. */ - public String text; - - /** - * Instantiates a new hemisphere latitude type. - * - * @param text the text - */ - HemisphereLatitudeType(String text) { - this.text = text; - } - - /** - * To string. - * - * @return the string - */ - public String toString(){ - return text; - } -} - diff --git a/src/main/java/org/uic/barcode/dynamicContent/dfcb1/HemisphereLongitudeType.java b/src/main/java/org/uic/barcode/dynamicContent/dfcb1/HemisphereLongitudeType.java deleted file mode 100644 index 3eeed52..0000000 --- a/src/main/java/org/uic/barcode/dynamicContent/dfcb1/HemisphereLongitudeType.java +++ /dev/null @@ -1,55 +0,0 @@ -/* - * This file was generated by openASN.1 - an open source ASN.1 toolkit for java - * - * openASN.1 is Copyright (C) 2007 Clayton Hoss, Marc Weyland - * - * openASN.1 is free software: you can redistribute it and/or modify - * it under the terms of the GNU Lesser General Public License as - * published by the Free Software Foundation, either version 3 of - * the License, or (at your option) any later version. - * - * openASN.1 is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - * GNU Lesser General Public License for more details. - * - * You should have received a copy of the GNU Lesser General Public License - * along with openASN.1. If not, see . - * - */ -package org.uic.barcode.dynamicContent.dfcb1; - -// TODO: Auto-generated Javadoc -/** - * The Enum HemisphereLongitudeType. - */ -public enum HemisphereLongitudeType { - - /** The north. */ - north("north"), - - /** The south. */ - south("south"); - - /** The text. */ - public String text; - - /** - * Instantiates a new hemisphere longitude type. - * - * @param text the text - */ - HemisphereLongitudeType(String text) { - this.text = text; - } - - /** - * To string. - * - * @return the string - */ - public String toString(){ - return text; - } -} - diff --git a/src/main/java/org/uic/barcode/dynamicContent/dfcb1/UicDynamicContentData1.java b/src/main/java/org/uic/barcode/dynamicContent/dfcb1/UicDynamicContentData1.java deleted file mode 100644 index 034057a..0000000 --- a/src/main/java/org/uic/barcode/dynamicContent/dfcb1/UicDynamicContentData1.java +++ /dev/null @@ -1,268 +0,0 @@ -/* - * - */ -package org.uic.barcode.dynamicContent.dfcb1; - -import java.util.Calendar; -import java.util.Date; -import java.util.TimeZone; - -import org.uic.barcode.asn1.datatypes.Asn1Default; -import org.uic.barcode.asn1.datatypes.Asn1Optional; -import org.uic.barcode.asn1.datatypes.CharacterRestriction; -import org.uic.barcode.asn1.datatypes.FieldOrder; -import org.uic.barcode.asn1.datatypes.HasExtensionMarker; -import org.uic.barcode.asn1.datatypes.IntRange; -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; -import org.uic.barcode.dynamicFrame.DataType; - - -/** - * The Class UicDynamicContentData. - * - * The dynamic content for FDC1 - * - */ - - -@Sequence -@HasExtensionMarker -public class UicDynamicContentData1 { - - //-- Moment of generation of the dynamic content, expressed in UTC : - //-- * dynamicContentDay is the number of days from issuing date - //-- (UicRailTicketData.issuingDetail.issuingYear and issuingDay) - // -- The range 0..1070 allows a validity equal to that of the validFrom (700) plus - // -- validUntil (370) elements of the different transport documents of UicRailTicketData. - //-- * dynamicContentTime is the number of seconds of the day - //-- (from 0 = 0:00:00 to 86399 = 23:59:59) - //-- These two elements shall be either both present, either both absent - /** The day. */ - //dynamicContentDay INTEGER (0..1070) DEFAULT 0, - @FieldOrder(order = 0) - @Asn1Default(value="0") - @IntRange(minValue=0, maxValue=1070) - public Long day; - - /** The second of day. */ - // dynamicContentTime INTEGER (0..86399) OPTIONAL, - @FieldOrder(order = 1) - @IntRange(minValue=0, maxValue=86399) - public Long secondOfDay; - - //-- Coordinates of the place where the dynamic content has been generated - // -- (same GeoCoordinateType type as in UicRailTicketData) - /** The geo coordinate. */ - //dynamicContentGeoCoordinate GeoCoordinateType OPTIONAL, - @FieldOrder(order = 2) - @Asn1Optional public GeoCoordinateType geoCoordinate; - //-- Response from the mobile to any data received from the terminal. - //-- The data received from the terminal may be a random number, or any other information. - //-- The response may be the data itself, a hashing of this data, or any other response. - // -- This response may be completed with other information: IMEI, mobile phone number... - //-- The type used is ExtensionData, as it is fully adapted. - // -- extensionId shall be set to: - // -- * "=" if the data included in extensionData is exactly the one that was transmitted by the terminal, - // -- * any other value (chosen by the issuer) in other cases. - /** The challenge response. */ - //dynamicContentResponseToChallenge ExtensionData OPTIONAL, - @FieldOrder(order = 3) - @Asn1Optional public ExtensionData challengeResponse; - - /** The extension. */ - //-- proprietary data defined bilaterally - @FieldOrder(order = 4) - @Asn1Optional public ExtensionData extension; - //dynamicContentExtension ExtensionData OPTIONAL, - - // challenge string asked by the TCO - @FieldOrder(order = 5) - @RestrictedString(CharacterRestriction.IA5String) - @Asn1Optional public String challengeString; - - // hashed phone id - @FieldOrder(order = 6) - public OctetString phoneIdHash; - - // hashed e-passport-id - @FieldOrder(order = 7) - public OctetString passHash; - - //... - - /** - * Gets the day. - * - * @return the day - */ - public Long getDay() { - return day; - } - - /** - * Sets the day. - * - * @param day the new day - */ - public void setDay(Long day) { - this.day = day; - } - - /** - * Gets the time. - * - * @return the time - */ - public Long getTime() { - return secondOfDay; - } - - /** - * Sets the time. - * - * @param time the new time - */ - public void setTime(Long time) { - this.secondOfDay = time; - } - - /** - * Gets the geo coordinate. - * - * @return the geo coordinate - */ - public GeoCoordinateType getGeoCoordinate() { - return geoCoordinate; - } - - /** - * Sets the geo coordinate. - * - * @param geoCoordinate the new geo coordinate - */ - public void setGeoCoordinate(GeoCoordinateType geoCoordinate) { - this.geoCoordinate = geoCoordinate; - } - - /** - * Gets the challenge response. - * - * @return the challenge response - */ - public ExtensionData getChallengeResponse() { - return challengeResponse; - } - - /** - * Sets the challenge response. - * - * @param challengeResponse the new challenge response - */ - public void setChallengeResponse(ExtensionData challengeResponse) { - this.challengeResponse = challengeResponse; - } - - /** - * Gets the extension. - * - * @return the extension - */ - public ExtensionData getExtension() { - return extension; - } - - /** - * Sets the extension. - * - * @param extension the new extension - */ - public void setExtension(ExtensionData extension) { - this.extension = extension; - } - - /** - * Gets the time. - * - * @param issuingDate the issuing date in UTC - * @return the date and time of content creation in UTC - */ - public Date getTime(Date issuingDate) { - - Calendar cal = Calendar.getInstance(); - cal.setTime(issuingDate); - cal.setTimeZone(TimeZone.getTimeZone("UTC")); - cal.set(Calendar.SECOND,0); - cal.set(Calendar.HOUR,0); - cal.set(Calendar.MINUTE,0); - cal.add(Calendar.DATE, day.intValue()); - cal.add(Calendar.SECOND, secondOfDay.intValue()); - - return cal.getTime(); - } - - /** - * Sets the date time. - * - * @param dateUTC the current date and time in UTC - * @param issuingDateUTC the issuing date and time in UTC - */ - public void setDateTime(Date dateUTC, Date issuingDateUTC) { - - Calendar cal1 = Calendar.getInstance(); - cal1.setTime(issuingDateUTC); - - Calendar cal2 = Calendar.getInstance(); - cal2.setTime(dateUTC); - - int days1 = cal1.get(Calendar.DATE); - int days2 = cal2.get(Calendar.DATE); - - day = new Long (days2 - days1); - - secondOfDay = (long) cal2.get(Calendar.SECOND); - secondOfDay = secondOfDay + 60 * (long) cal2.get(Calendar.MINUTE); - secondOfDay = secondOfDay + 60 * 60 * (long) cal2.get(Calendar.HOUR_OF_DAY); - - } - - public static String getFormat() { - return "FDC1"; - } - - public DataType getDataType() { - DataType data = new DataType(); - data.setFormat(UicDynamicContentData1.getFormat()); - data.setByteData(UperEncoder.encode(this)); - return data; - } - - public String getChallengeString() { - return challengeString; - } - - public void setChallengeString(String challengeString) { - this.challengeString = challengeString; - } - - public OctetString getPhoneIdHash() { - return phoneIdHash; - } - - public void setPhoneIdHash(OctetString phoneIdHash) { - this.phoneIdHash = phoneIdHash; - } - - public OctetString getPassHash() { - return passHash; - } - - public void setPassHash(OctetString passHash) { - this.passHash = passHash; - } - - - -} diff --git a/src/main/java/org/uic/barcode/dynamicContent/fdc1/ExtensionData.java b/src/main/java/org/uic/barcode/dynamicContent/fdc1/ExtensionData.java new file mode 100644 index 0000000..52b76d1 --- /dev/null +++ b/src/main/java/org/uic/barcode/dynamicContent/fdc1/ExtensionData.java @@ -0,0 +1,59 @@ +/* + * This file was generated by openASN.1 - an open source ASN.1 toolkit for java + * + * openASN.1 is Copyright (C) 2007 Clayton Hoss, Marc Weyland + * + * openASN.1 is free software: you can redistribute it and/or modify + * it under the terms of the GNU Lesser General Public License as + * published by the Free Software Foundation, either version 3 of + * the License, or (at your option) any later version. + * + * openASN.1 is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + * GNU Lesser General Public License for more details. + * + * You should have received a copy of the GNU Lesser General Public License + * along with openASN.1. If not, see . + * + */ +package org.uic.barcode.dynamicContent.fdc1; + +import org.uic.barcode.asn1.datatypes.CharacterRestriction; +import org.uic.barcode.asn1.datatypes.FieldOrder; +import org.uic.barcode.asn1.datatypes.RestrictedString; +import org.uic.barcode.asn1.datatypes.Sequence; +import org.uic.barcode.asn1.datatypesimpl.OctetString; + + +@Sequence +public class ExtensionData extends Object { + public ExtensionData() { + } + + @FieldOrder(order = 0) + @RestrictedString(CharacterRestriction.IA5String) + public String extensionId; + + @FieldOrder(order = 1) + public OctetString extensionData; + + public String getExtensionId() { + return this.extensionId; + } + + public byte[] getExtensionData() { + return extensionData.toByteArray(); + } + + public void setExtensionId(String extensionId) { + this.extensionId = extensionId; + } + + public void setExtensionData(byte[] extensionData) { + this.extensionData = new OctetString(extensionData); + } + + + +} diff --git a/src/main/java/org/uic/barcode/dynamicContent/fdc1/GeoCoordinateSystemType.java b/src/main/java/org/uic/barcode/dynamicContent/fdc1/GeoCoordinateSystemType.java new file mode 100644 index 0000000..b25ad1a --- /dev/null +++ b/src/main/java/org/uic/barcode/dynamicContent/fdc1/GeoCoordinateSystemType.java @@ -0,0 +1,57 @@ +/* + * This file was generated by openASN.1 - an open source ASN.1 toolkit for java + * + * openASN.1 is Copyright (C) 2007 Clayton Hoss, Marc Weyland + * + * openASN.1 is free software: you can redistribute it and/or modify + * it under the terms of the GNU Lesser General Public License as + * published by the Free Software Foundation, either version 3 of + * the License, or (at your option) any later version. + * + * openASN.1 is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + * GNU Lesser General Public License for more details. + * + * You should have received a copy of the GNU Lesser General Public License + * along with openASN.1. If not, see . + * + */ +package org.uic.barcode.dynamicContent.fdc1; + + +// TODO: Auto-generated Javadoc +/** + * The Enum GeoCoordinateSystemType. + */ +public enum GeoCoordinateSystemType { + + /** The wgs 84. */ + wgs84("wgs84"), + + /** The grs 80. */ + grs80("grs80"); + + + /** The text. */ + public String text; + + /** + * Instantiates a new geo coordinate system type. + * + * @param text the text + */ + GeoCoordinateSystemType(String text) { + this.text = text; + } + + /** + * To string. + * + * @return the string + */ + public String toString(){ + return text; + } +} + diff --git a/src/main/java/org/uic/barcode/dynamicContent/fdc1/GeoCoordinateType.java b/src/main/java/org/uic/barcode/dynamicContent/fdc1/GeoCoordinateType.java new file mode 100644 index 0000000..1f1cfc5 --- /dev/null +++ b/src/main/java/org/uic/barcode/dynamicContent/fdc1/GeoCoordinateType.java @@ -0,0 +1,144 @@ +/* + * This file was generated by openASN.1 - an open source ASN.1 toolkit for java + * + * openASN.1 is Copyright (C) 2007 Clayton Hoss, Marc Weyland + * + * openASN.1 is free software: you can redistribute it and/or modify + * it under the terms of the GNU Lesser General Public License as + * published by the Free Software Foundation, either version 3 of + * the License, or (at your option) any later version. + * + * openASN.1 is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + * GNU Lesser General Public License for more details. + * + * You should have received a copy of the GNU Lesser General Public License + * along with openASN.1. If not, see . + * + */ +package org.uic.barcode.dynamicContent.fdc1; + +import org.uic.barcode.asn1.datatypes.Asn1BigInteger; +import org.uic.barcode.asn1.datatypes.Asn1Default; +import org.uic.barcode.asn1.datatypes.Asn1Optional; +import org.uic.barcode.asn1.datatypes.FieldOrder; +import org.uic.barcode.asn1.datatypes.Sequence; + +@Sequence +public class GeoCoordinateType extends Object { + public GeoCoordinateType() { + } + + @FieldOrder(order = 0) + @Asn1Default(value="milliDegree") + @Asn1Optional public GeoUnitType geoUnit; + + @FieldOrder(order = 1) + @Asn1Default(value="wgs84") + @Asn1Optional public GeoCoordinateSystemType coordinateSystem; + + @FieldOrder(order = 2) + @Asn1Default(value="north") + @Asn1Optional public HemisphereLongitudeType hemisphereLongitude; + + @FieldOrder(order = 3) + @Asn1Default(value="east") + @Asn1Optional public HemisphereLatitudeType hemisphereLatitude; + + @FieldOrder(order = 4) + public Asn1BigInteger longitude; + + @FieldOrder(order = 5) + public Asn1BigInteger latitude; + + @FieldOrder(order = 6) + @Asn1Optional public GeoUnitType accuracy; + + public GeoUnitType getGeoUnit() { + + if (geoUnit == null){ + return GeoUnitType.milliDegree; + } + return this.geoUnit; + } + + public GeoCoordinateSystemType getCoordinateSystem() { + + if (coordinateSystem == null) { + return GeoCoordinateSystemType.wgs84; + } + + return this.coordinateSystem; + } + + public HemisphereLongitudeType getHemisphereLongitude() { + + if (hemisphereLongitude == null){ + return HemisphereLongitudeType.north; + } + + return this.hemisphereLongitude; + } + + public HemisphereLatitudeType getHemisphereLatitude() { + + if (hemisphereLatitude == null) { + return HemisphereLatitudeType.east; + } + + return this.hemisphereLatitude; + } + + public Long getLongitude() { + + return Asn1BigInteger.toLong(this.longitude); + } + + public Long getLatitude() { + + return Asn1BigInteger.toLong(this.latitude); + } + + public GeoUnitType getAccuracy() { + + return this.accuracy; + } + + public void setGeoUnit(GeoUnitType geoUnit) { + + this.geoUnit = geoUnit; + } + + public void setCoordinateSystem(GeoCoordinateSystemType coordinateSystem) { + + this.coordinateSystem = coordinateSystem; + } + + public void setHemisphereLongitude(HemisphereLongitudeType hemisphereLongitude) { + + this.hemisphereLongitude = hemisphereLongitude; + } + + public void setHemisphereLatitude(HemisphereLatitudeType hemisphereLatitude) { + + this.hemisphereLatitude = hemisphereLatitude; + } + + public void setLongitude(Long longitude) { + + this.longitude = Asn1BigInteger.toAsn1(longitude); + } + + public void setLatitude(Long latitude) { + + this.latitude = Asn1BigInteger.toAsn1(latitude); + } + + public void setAccuracy(GeoUnitType accuracy) { + + this.accuracy = accuracy; + } + + +} diff --git a/src/main/java/org/uic/barcode/dynamicContent/fdc1/GeoUnitType.java b/src/main/java/org/uic/barcode/dynamicContent/fdc1/GeoUnitType.java new file mode 100644 index 0000000..4eaa8c9 --- /dev/null +++ b/src/main/java/org/uic/barcode/dynamicContent/fdc1/GeoUnitType.java @@ -0,0 +1,65 @@ +/* + * This file was generated by openASN.1 - an open source ASN.1 toolkit for java + * + * openASN.1 is Copyright (C) 2007 Clayton Hoss, Marc Weyland + * + * openASN.1 is free software: you can redistribute it and/or modify + * it under the terms of the GNU Lesser General Public License as + * published by the Free Software Foundation, either version 3 of + * the License, or (at your option) any later version. + * + * openASN.1 is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + * GNU Lesser General Public License for more details. + * + * You should have received a copy of the GNU Lesser General Public License + * along with openASN.1. If not, see . + * + */ +package org.uic.barcode.dynamicContent.fdc1; + +// TODO: Auto-generated Javadoc +/** + * The Enum GeoUnitType. + */ +public enum GeoUnitType { + + /** The micro degree. */ + microDegree("microDegree"), + + /** The tenthmilli degree. */ + tenthmilliDegree("tenthmilliDegree"), + + /** The milli degree. */ + milliDegree("milliDegree"), + + /** The centi degree. */ + centiDegree("centiDegree"), + + /** The deci degree. */ + deciDegree("deciDegree"); + + + /** The text. */ + public String text; + + /** + * Instantiates a new geo unit type. + * + * @param text the text + */ + GeoUnitType(String text) { + this.text = text; + } + + /** + * To string. + * + * @return the string + */ + public String toString(){ + return text; + } +} + diff --git a/src/main/java/org/uic/barcode/dynamicContent/fdc1/HemisphereLatitudeType.java b/src/main/java/org/uic/barcode/dynamicContent/fdc1/HemisphereLatitudeType.java new file mode 100644 index 0000000..5157b0e --- /dev/null +++ b/src/main/java/org/uic/barcode/dynamicContent/fdc1/HemisphereLatitudeType.java @@ -0,0 +1,56 @@ +/* + * This file was generated by openASN.1 - an open source ASN.1 toolkit for java + * + * openASN.1 is Copyright (C) 2007 Clayton Hoss, Marc Weyland + * + * openASN.1 is free software: you can redistribute it and/or modify + * it under the terms of the GNU Lesser General Public License as + * published by the Free Software Foundation, either version 3 of + * the License, or (at your option) any later version. + * + * openASN.1 is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + * GNU Lesser General Public License for more details. + * + * You should have received a copy of the GNU Lesser General Public License + * along with openASN.1. If not, see . + * + */ +package org.uic.barcode.dynamicContent.fdc1; + +// TODO: Auto-generated Javadoc +/** + * The Enum HemisphereLatitudeType. + */ +public enum HemisphereLatitudeType { + + /** The east. */ + east("east"), + + /** The west. */ + west("west"); + + + /** The text. */ + public String text; + + /** + * Instantiates a new hemisphere latitude type. + * + * @param text the text + */ + HemisphereLatitudeType(String text) { + this.text = text; + } + + /** + * To string. + * + * @return the string + */ + public String toString(){ + return text; + } +} + diff --git a/src/main/java/org/uic/barcode/dynamicContent/fdc1/HemisphereLongitudeType.java b/src/main/java/org/uic/barcode/dynamicContent/fdc1/HemisphereLongitudeType.java new file mode 100644 index 0000000..c0e33e6 --- /dev/null +++ b/src/main/java/org/uic/barcode/dynamicContent/fdc1/HemisphereLongitudeType.java @@ -0,0 +1,55 @@ +/* + * This file was generated by openASN.1 - an open source ASN.1 toolkit for java + * + * openASN.1 is Copyright (C) 2007 Clayton Hoss, Marc Weyland + * + * openASN.1 is free software: you can redistribute it and/or modify + * it under the terms of the GNU Lesser General Public License as + * published by the Free Software Foundation, either version 3 of + * the License, or (at your option) any later version. + * + * openASN.1 is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + * GNU Lesser General Public License for more details. + * + * You should have received a copy of the GNU Lesser General Public License + * along with openASN.1. If not, see . + * + */ +package org.uic.barcode.dynamicContent.fdc1; + +// TODO: Auto-generated Javadoc +/** + * The Enum HemisphereLongitudeType. + */ +public enum HemisphereLongitudeType { + + /** The north. */ + north("north"), + + /** The south. */ + south("south"); + + /** The text. */ + public String text; + + /** + * Instantiates a new hemisphere longitude type. + * + * @param text the text + */ + HemisphereLongitudeType(String text) { + this.text = text; + } + + /** + * To string. + * + * @return the string + */ + public String toString(){ + return text; + } +} + diff --git a/src/main/java/org/uic/barcode/dynamicContent/fdc1/SequenceOfExtension.java b/src/main/java/org/uic/barcode/dynamicContent/fdc1/SequenceOfExtension.java new file mode 100644 index 0000000..38833df --- /dev/null +++ b/src/main/java/org/uic/barcode/dynamicContent/fdc1/SequenceOfExtension.java @@ -0,0 +1,11 @@ +package org.uic.barcode.dynamicContent.fdc1; + +import java.util.Collection; + +import org.uic.barcode.asn1.datatypes.Asn1SequenceOf; +import org.uic.barcode.ticket.api.asn.omv2.TravelerType; + +public class SequenceOfExtension extends Asn1SequenceOf { + public SequenceOfExtension() { super(); } + public SequenceOfExtension(Collection coll) { super(coll); } +} diff --git a/src/main/java/org/uic/barcode/dynamicContent/fdc1/TimeStamp.java b/src/main/java/org/uic/barcode/dynamicContent/fdc1/TimeStamp.java new file mode 100644 index 0000000..32cce65 --- /dev/null +++ b/src/main/java/org/uic/barcode/dynamicContent/fdc1/TimeStamp.java @@ -0,0 +1,144 @@ +package org.uic.barcode.dynamicContent.fdc1; + +import java.time.Instant; +import java.time.temporal.ChronoField; +import java.util.Calendar; +import java.util.Date; +import java.util.TimeZone; + +import org.uic.barcode.asn1.datatypes.FieldOrder; +import org.uic.barcode.asn1.datatypes.IntRange; +import org.uic.barcode.asn1.datatypes.Sequence; + +// TODO: Auto-generated Javadoc +/** + * The Class TimeStamp. + */ +@Sequence +public class TimeStamp { + + + /* + -- Moment of generation of the dynamic content, expressed in UTC : + -- * dynamicContentDay is the number of days from issuing date + -- (UicRailTicketData.issuingDetail.issuingYear and issuingDay) + -- The range 0..1070 allows a validity equal to that of the validFrom (700) plus + -- validUntil (370) elements of the different transport documents of UicRailTicketData. + -- * dynamicContentTime is the number of seconds of the day + -- (from 0 = 0:00:00 to 86399 = 23:59:59) + -- These two elements shall be either both present, either both absent + dynamicContentDay INTEGER (0..366), + * + */ + @FieldOrder(order = 0) + @IntRange(minValue=1, maxValue=366) + public Long day; + + /** The second of day. */ + // dynamicContentTime INTEGER (0..86399) OPTIONAL, + @FieldOrder(order = 1) + @IntRange(minValue=0, maxValue=86399) + public Long secondOfDay; + + + + /** + * Instantiates a new time stamp and sets the time-stamp to now. + */ + public TimeStamp() { + Instant now = Instant.now(); + day = new Long(now.get(ChronoField.DAY_OF_YEAR)); + secondOfDay = new Long(now.get(ChronoField.SECOND_OF_DAY)); + } + + /** + * Sets the the time-stamp to now. + */ + public void setNow() { + Instant now = Instant.now(); + day = new Long(now.get(ChronoField.DAY_OF_YEAR)); + secondOfDay = new Long(now.get(ChronoField.SECOND_OF_DAY)); + } + + /** + * Gets the day. + * + * @return the day + */ + public Long getDay() { + return day; + } + + /** + * Sets the day. + * + * @param day the new day + */ + public void setDay(Long day) { + this.day = day; + } + + /** + * Gets the time. + * + * @return the time + */ + public Long getTime() { + return secondOfDay; + } + + /** + * Sets the time. + * + * @param time the new time + */ + public void setTime(Long time) { + this.secondOfDay = time; + } + + /** + * Gets the time. + * + * @return the date and time of content creation in UTC + */ + public Date getTimeAsDate() { + + Calendar cal = Calendar.getInstance(); + int dayOfYear = cal.get(Calendar.DAY_OF_YEAR); + + if (dayOfYear - day.intValue() > 250) { + cal.add(Calendar.YEAR, 1); + } + if (day.intValue() - dayOfYear > 250) { + cal.add(Calendar.YEAR, -1); + } + + cal.setTimeZone(TimeZone.getTimeZone("UTC")); + cal.set(Calendar.SECOND,0); + cal.set(Calendar.HOUR,0); + cal.set(Calendar.MINUTE,0); + cal.set(Calendar.DAY_OF_YEAR, day.intValue()); + cal.add(Calendar.SECOND, secondOfDay.intValue()); + + return cal.getTime(); + } + + /** + * Sets the date time. + * + * @param dateUTC the current date and time in UTC + */ + public void setDateTime(Date dateUTC) { + + Calendar cal = Calendar.getInstance(); + cal.setTime(dateUTC); + + day = Long.valueOf(cal.get(Calendar.DAY_OF_YEAR)); + + secondOfDay = (long) cal.get(Calendar.SECOND); + secondOfDay = secondOfDay + 60 * (long) cal.get(Calendar.MINUTE); + secondOfDay = secondOfDay + 60 * 60 * (long) cal.get(Calendar.HOUR_OF_DAY); + + } + +} diff --git a/src/main/java/org/uic/barcode/dynamicContent/fdc1/UicDynamicContentDataFDC1.java b/src/main/java/org/uic/barcode/dynamicContent/fdc1/UicDynamicContentDataFDC1.java new file mode 100644 index 0000000..ce6d1b3 --- /dev/null +++ b/src/main/java/org/uic/barcode/dynamicContent/fdc1/UicDynamicContentDataFDC1.java @@ -0,0 +1,205 @@ +/* + * + */ +package org.uic.barcode.dynamicContent.fdc1; + +import java.io.UnsupportedEncodingException; +import org.uic.barcode.asn1.datatypes.Asn1Optional; +import org.uic.barcode.asn1.datatypes.CharacterRestriction; +import org.uic.barcode.asn1.datatypes.FieldOrder; +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.uper.UperEncoder; +import org.uic.barcode.dynamicContent.DynamicContent; +import org.uic.barcode.dynamicFrame.DataType; + + +/** + * The Class UicDynamicContentData. + * + * The dynamic content for FDC1 + * + */ + + + + +@Sequence +@HasExtensionMarker +public class UicDynamicContentDataFDC1 { + + + + /* + -- The possible values are defined by the security provider + -- (the security provider being UicBarcodeHeader.level2SignedData.level1Data.securityProviderNum/IA5) + dynamicContentMobileAppId IA5String OPTIONAL, + */ + //timestamp when the bar code was created + @FieldOrder(order = 0) + @RestrictedString(CharacterRestriction.IA5String) + @Asn1Optional public String appId; + + //timestamp when the bar code was created + @FieldOrder(order = 1) + @Asn1Optional public TimeStamp timeStamp; + + + //-- Coordinates of the place where the dynamic content has been generated + // -- (same GeoCoordinateType type as in UicRailTicketData) + /** The geo coordinate. */ + //dynamicContentGeoCoordinate GeoCoordinateType OPTIONAL, + @FieldOrder(order = 2) + @Asn1Optional public GeoCoordinateType geoCoordinate; + //-- Response from the mobile to any data received from the terminal. + //-- The data received from the terminal may be a random number, or any other information. + //-- The response may be the data itself, a hashing of this data, or any other response. + // -- This response may be completed with other information: IMEI, mobile phone number... + //-- The type used is ExtensionData, as it is fully adapted. + // -- extensionId shall be set to: + // -- * "=" if the data included in extensionData is exactly the one that was transmitted by the terminal, + // -- * any other value (chosen by the issuer) in other cases. + /** The challenge response. */ + + @FieldOrder(order = 3) + @Asn1Optional public SequenceOfExtension extensions; + + + + //... + + + + /** + * Gets the geo coordinate. + * + * @return the geo coordinate + */ + public GeoCoordinateType getGeoCoordinate() { + return geoCoordinate; + } + + /** + * Sets the geo coordinate. + * + * @param geoCoordinate the new geo coordinate + */ + public void setGeoCoordinate(GeoCoordinateType geoCoordinate) { + this.geoCoordinate = geoCoordinate; + } + + public static String getFormat() { + return "FDC1"; + } + + public DataType getDataType() { + DataType data = new DataType(); + data.setFormat(getFormat()); + data.setByteData(UperEncoder.encode(this)); + return data; + } + + public String getChallengeString() { + if (this.extensions != null) { + for (ExtensionData ed : extensions) { + if (ed.getExtensionId().equals("=")) { + byte[] c = ed.getExtensionData(); + try { + return new String(c,"UTF-8"); + } catch (UnsupportedEncodingException e) { + return null; + } + } + } + } + return null; + } + + public void setChallengeString(String challengeString) { + if (extensions == null) { + extensions = new SequenceOfExtension(); + }; + ExtensionData ed = new ExtensionData(); + ed.setExtensionId("="); + try { + ed.setExtensionData(challengeString.getBytes("UTF-8")); + } catch (UnsupportedEncodingException e) { + return; + } + extensions.add(ed); + } + + public byte[] getPhoneIdHash() { + if (this.extensions != null) { + for (ExtensionData ed : extensions) { + if (ed.getExtensionId().equals("phone")) { + return ed.getExtensionData(); + } + } + } + return null; + } + + public void setPhoneIdHash(byte[] phoneIdHash) { + if (extensions == null) { + extensions = new SequenceOfExtension(); + }; + ExtensionData ed = new ExtensionData(); + ed.setExtensionId("phone"); + ed.setExtensionData(phoneIdHash); + extensions.add(ed); + } + + public byte[] getPassIdHash() { + if (this.extensions != null) { + for (ExtensionData ed : extensions) { + if (ed.getExtensionId().equals("pass")) { + return ed.getExtensionData(); + } + } + } + return null; + } + + public void setPassIdHash(byte[] phoneIdHash) { + if (extensions == null) { + extensions = new SequenceOfExtension(); + }; + ExtensionData ed = new ExtensionData(); + ed.setExtensionId("pass"); + ed.setExtensionData(phoneIdHash); + extensions.add(ed); + } + + public TimeStamp getTimeStamp() { + return timeStamp; + } + + public void setTimeStamp(TimeStamp timeStamp) { + this.timeStamp = timeStamp; + } + + public SequenceOfExtension getExtensions() { + return extensions; + } + + public void setExtensions(SequenceOfExtension extensions) { + this.extensions = extensions; + } + + public byte[] encode() { + return UperEncoder.encode(this); + } + + public String getAppId() { + return appId; + } + + public void setAppId(String appId) { + this.appId = appId; + } + + + +} diff --git a/src/main/java/org/uic/barcode/dynamicFrame/DynamicFrame.java b/src/main/java/org/uic/barcode/dynamicFrame/DynamicFrame.java index 886cb79..375e2c6 100644 --- a/src/main/java/org/uic/barcode/dynamicFrame/DynamicFrame.java +++ b/src/main/java/org/uic/barcode/dynamicFrame/DynamicFrame.java @@ -18,7 +18,7 @@ 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; -import org.uic.barcode.dynamicContent.dfcb1.UicDynamicContentData1; +import org.uic.barcode.dynamicContent.fdc1.UicDynamicContentDataFDC1; import org.uic.barcode.utils.AlgorithmNameResolver; @@ -263,19 +263,19 @@ public class DynamicFrame extends Object{ } - public void addLevel2DynamicData(UicDynamicContentData1 dynamicData) { + public void addLevel2DynamicData(UicDynamicContentDataFDC1 dynamicData) { this.getLevel2SignedData().setLevel2Data( dynamicData.getDataType()); } - public UicDynamicContentData1 getDynamicDataFDC1() { + public UicDynamicContentDataFDC1 getDynamicDataFDC1() { if (this.getLevel2SignedData() == null || this.getLevel2SignedData().getLevel2Data() == null){ return null; } - if ( UicDynamicContentData1.getFormat().equals(this.getLevel2SignedData().getLevel2Data().getFormat())) { - return UperEncoder.decode(this.getLevel2SignedData().getLevel2Data().getByteData(), UicDynamicContentData1.class); + if ( UicDynamicContentDataFDC1.getFormat().equals(this.getLevel2SignedData().getLevel2Data().getFormat())) { + return UperEncoder.decode(this.getLevel2SignedData().getLevel2Data().getByteData(), UicDynamicContentDataFDC1.class); } return null; diff --git a/src/main/java/org/uic/barcode/staticFrame/UHEADDataRecord.java b/src/main/java/org/uic/barcode/staticFrame/UHEADDataRecord.java index 855c9d5..492656a 100644 --- a/src/main/java/org/uic/barcode/staticFrame/UHEADDataRecord.java +++ b/src/main/java/org/uic/barcode/staticFrame/UHEADDataRecord.java @@ -180,7 +180,7 @@ public class UHEADDataRecord extends DataRecord{ } // date format "DDMMYYYYHHMM" - SimpleDateFormat formatter = new SimpleDateFormat("ddMMyyyyhhmm"); + SimpleDateFormat formatter = new SimpleDateFormat("ddMMyyyyHHmm"); try { issuingDate = formatter.parse(issuingDateString); } catch (ParseException e) { -- cgit v1.2.3