summaryrefslogblamecommitdiffstats
path: root/misc/dynamicContentFDCv1.0.asn
blob: 693980f92a0c397440103cd62a540bcf84a0857b (plain) (tree)


















































































































                                                                                                                           
-- ##########################################################################################
-- # 
-- # 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
   }