-- ##########################################################################################
-- #
-- # FCB Dynamic Content - Version 1.0 - Draft #3 (2021-05-12)
-- #
-- # This file is available on the UIC FCB User Group GitHub:
-- # <GitHub-link-to-be-added-here>
-- # Please check this link to see if a more recent version of this file is available.
-- #
-- # The type UicDynamicContentData defined below is at least intended to generate a data
-- # that, once valued and encoded as PER unaligned [UPER],
-- # is to be stored in UicBarcodeHeader.level2SignedData.level2Data.data,
-- # and identified as "FDC1" in UicBarcodeHeader.level2SignedData.level2Data.dataFormat.
-- #
-- ##########################################################################################
UicDynamicContentData ::= SEQUENCE {
-- Identification of the mobile application that generated the barcode
-- and filled in the data of its dynamic part.
--
-- The possible values are defined by the security provider
-- (the security provider being UicBarcodeHeader.level2SignedData.level1Data.securityProviderNum/IA5)
dynamicContentMobileAppId IA5String OPTIONAL,
-- Moment of generation of the dynamic content, expressed in UTC
dynamicContentTimeStamp TimeStampData OPTIONAL,
-- Coordinates of the place where the dynamic content has been generated
-- (same GeoCoordinateType type as in UicRailTicketData)
dynamicContentGeoCoordinate GeoCoordinateType OPTIONAL,
-- 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 received data itself, possibly completed with other information
-- (e.g. IMEI, mobile phone number, user identifier assigned by the phone-app...),
-- the whole being returned as is, or hashed, or modified in some way.
--
-- The type used is a SEQUENCE OF ExtensionData
-- (the same ExtensionData type as in UicRailTicketData, as it is fully adapted),
-- in which extensionId identifies the content of extensionData.
--
-- Two types of value are possible for extensionId:
-- * predefined standardized values
-- (e.g. "=" if extensionData is exactly the data received from the terminal)
-- The list of predefined values is available on the UIC FCB User Group GitHub.
-- * "_" followed by any other value, defined by the security provider, in other cases.
-- (the security provider being UicBarcodeHeader.level2SignedData.level1Data.securityProviderNum/IA5)
dynamicContentResponseToChallenge SEQUENCE OF ExtensionData OPTIONAL,
-- Proprietary data defined bilaterally
-- (same ExtensionData type as in UicRailTicketData).
-- extensionId identifies the content of extensionData,
-- it shall be set to "_" + RICS + addon chosen by the issuer identified by its RICS code
dynamicContentExtension ExtensionData OPTIONAL,
...
}
-- ##########################################################################################
-- # Generic type for timestamp, with a precision to the second.
-- #
-- # Day is the number of the day in the year (1 = January 1st, 2 = January 2nd...)
-- #
-- # Time is the number of seconds of the day (from 0 = 0:00:00 to 86399 = 23:59:59)
-- ##########################################################################################
TimeStampData ::= SEQUENCE {
day INTEGER (1..366),
time INTEGER (0..86399)
}
-- ##########################################################################################
-- # Generic type for geo coordinates.
-- ##########################################################################################
GeoCoordinateType ::= SEQUENCE {
geoUnit GeoUnitType DEFAULT milliDegree,
coordinateSystem GeoCoordinateSystemType DEFAULT wgs84,
hemisphereLongitude HemisphereLongitudeType DEFAULT north, -- separate hemisphere flag reduces the data size
hemisphereLatitude HemisphereLatitudeType DEFAULT east, -- separate hemisphere flag reduces the data size
longitude INTEGER,
latitude INTEGER,
accuracy GeoUnitType OPTIONAL
}
GeoCoordinateSystemType ::= ENUMERATED {
wgs84 (0), -- WGS 84 standard system
grs80 (1) -- (outdated) GRS 80 coordinate system
}
GeoUnitType ::= ENUMERATED {
microDegree (0), -- approx. 11 cm on earth surface
tenthmilliDegree (1), -- 1 / 10000 degree is approx. 11 meter on earth surface
milliDegree (2), -- approx 110 meter on earth surface
centiDegree (3),
deciDegree (4)
}
HemisphereLongitudeType ::= ENUMERATED {
north (0),
south (1)
}
HemisphereLatitudeType ::= ENUMERATED {
east (0),
west (1)
}
-- ###########################################################################################
-- # Generic extension element.
-- #
-- # extensionId identifies the content of extensionData.
-- ###########################################################################################
ExtensionData ::= SEQUENCE {
extensionId IA5String,
extensionData OCTET STRING
}