/** * @author ETSI / STF481 / STF507 / STF517 / STF538 * @version $URL$ * $Id$ * @desc Module containing templates for Security Protocol * @copyright ETSI Copyright Notification * No part may be reproduced except as authorized by written permission. * The copyright and the foregoing restriction extend to reproduction in all media. * All rights reserved. * */ module LibItsSecurity_Templates { // LibCommon import from LibCommon_BasicTypesAndValues all; import from LibCommon_DataStrings all; // LibItsCommon import from LibItsCommon_TypesAndValues all; // LibItsGeoNetworking import from LibItsGeoNetworking_TypesAndValues all; // LibIts import from IEEE1609dot2BaseTypes language "ASN.1:1997" all; import from IEEE1609dot2 language "ASN.1:1997" all; import from EtsiTs103097Module language "ASN.1:1997" all; // LibItsSecurity import from LibItsSecurity_TypesAndValues all; import from LibItsSecurity_Pixits all; /** * @desc Constants declaration */ group constants { /** * @desc Protocol version * @see Draft ETSI TS 103 097 V1.3.1 Clause 5.1 Ieee1609Dot2Data */ const UInt8 c_protocol_version := 3; /** * @desc Certificate version * @see Draft ETSI TS 103 097 V1.3.1 Clause 6.1 Certificate */ const UInt8 c_certificate_version := 3; /** * @desc Its AID for Other * @see Draft ETSI TS 103 097 V1.3.1 Clause 7.3 Security profile for DENMs */ //FIXME RGY definition type is changed to modulepar, as Titan doesn't support dynamic constants // const IntX c_its_aid_Other := PX_OTHER_ITS_AID; template Psid c_its_aid_Other := PX_OTHER_ITS_AID; /** * @desc Minimal value of Longitude */ const SecLongitude c_minLongitude := -1799999999; // TODO Use constant from IEEE1609dot2BaseTypes /** * @desc Maximal value of Longitude */ const SecLongitude c_maxLongitude := 1800000000; // TODO Use constant from IEEE1609dot2BaseTypes /** * @desc Minimal value of Latitude */ const SecLatitude c_minLatitude := -900000000; // TODO Use constant from IEEE1609dot2BaseTypes /** * @desc Maximal value of Latitude */ const SecLatitude c_maxLatitude := 900000000; // TODO Use constant from IEEE1609dot2BaseTypes /** * @desc List of ISO-3166 country codes */ const SequenceOfUint16 c_iso3166Codes := { 4, 8, 10, 12, 16, 20, 24, 28, 31, 32, 36, 40, 44, 48, 50, 51, 52, 56, 60, 64, 68, 70, 72, 74, 76, 84, 86, 90, 92, 96, 100, 104, 108, 112, 116, 120, 124, 132, 136, 140, 144, 148, 152, 156, 158, 162, 166, 170, 174, 175, 178, 180, 184, 188, 191, 192, 196, 203, 204, 208, 212, 214, 218, 222, 226, 231, 232, 233, 234, 238, 239, 242, 246, 248, 250, 254, 258, 260, 262, 266, 268, 270, 275, 276, 288, 292, 296, 300, 304, 308, 312, 316, 320, 324, 328, 332, 334, 336, 340, 344, 348, 352, 356, 360, 364, 368, 372, 376, 380, 384, 388, 392, 398, 400, 404, 408, 410, 414, 417, 418, 422, 426, 428, 430, 434, 438, 440, 442, 446, 450, 454, 458, 462, 466, 470, 474, 478, 480, 484, 492, 496, 498, 499, 500, 504, 508, 512, 516, 520, 524, 528, 531, 533, 534, 535, 540, 548, 554, 558, 562, 566, 570, 574, 578, 580, 581, 583, 584, 585, 586, 591, 598, 600, 604, 608, 612, 616, 620, 624, 626, 630, 634, 638, 642, 643, 646, 652, 654, 659, 660, 662, 663, 666, 670, 674, 678, 682, 686, 688, 690, 694, 702, 703, 704, 705, 706, 710, 716, 724, 728, 729, 732, 740, 744, 748, 752, 756, 760, 762, 764, 768, 772, 776, 780, 784, 788, 792, 795, 796, 798, 800, 804, 807, 810, 818, 826, 831, 832, 833, 834, 840, 850, 854, 858, 860, 862, 876, 882, 887, 894 }; /** * @desc List of United Nations Statistics Division country codes */ const SequenceOfUint16 c_unStatsAdditionalCodes := { 1, 2, 5, 9, 11, 13, 14, 15, 17, 18, 19, 21, 29, 30, 34, 35, 39, 53, 54, 57, 61, 142, 143, 145, 150, 151, 154, 155, 199, 419, 432, 680, 722, 830 }; } // End of group constants /** * @desc Dummy send/receive templates for security headers * @see Draft ETSI TS 103 097 V1.3.1 Clause 4 Basic format elements */ group dummyBasicFormatElements { /** * @desc Dummy receive templates for security headers * @see Draft ETSI TS 103 097 V1.3.1 Clause 4.2 Specification of basic format elements */ group dummyBasicFormatElementsRecv { /** * @desc Dummy receive template for TwoDLocation * @param p_latitude Latitude range from 900 000 000 to +900 000 000 * @param p_longitude Longitude range from 1 800 000 000 to +1 800 000 000 * @see Draft ETSI TS 103 097 V1.3.1 Clause 4.2.19 TwoDLocation */ template (present) TwoDLocation mw_twoDLocation_dummy := { latitude := ?, longitude := ? } // End of template mw_twoDLocation_dummy /** * @desc Dummy send template for ThreeDLocation * @param p_latitude Latitude range from 900 000 000 to +900 000 000 * @param p_longitude Longitude range from 1 800 000 000 to +1 800 000 000 * @param p_elevation Elevation relative to the WGS-84 ellipsoid in decimetres * @see Draft ETSI TS 103 097 V1.3.1 Clause 4.2.20 ThreeDLocation */ template (present) ThreeDLocation mw_threeDLocation_dummy := { latitude := ?, longitude := ?, elevation := ? } // End of template mw_threeDLocation_dummy } // End of group dummyBasicFormatElementsRecv } // End of group dummyBasicFormatElements /** * @desc Send/receive templates for security headers * @see Draft ETSI TS 103 097 V1.3.1 Clause 4 Basic format elements */ group basicFormatElements { /** * @desc Send templates for security headers * @see Draft ETSI TS 103 097 V1.3.1 Clause 4.2 Specification of basic format elements */ group basicFormatElementsSend { /** * @desc Send templates for security algorithm descriptions */ group algorithms { /** * @desc Send template for EccP256CurvePoint description based on x_coordinate_only type * @see Draft ETSI TS 103 097 V1.3.1 Clause 4.2.5 EccP256CurvePoint * @see Draft ETSI TS 103 097 V1.3.1 Table 2: Derivation of field sizes depending on the used algorithm */ template (value) EccP256CurvePoint m_eccPointecdsa_nistp256_with_sha256_x_coordinate_only( in template (value) octetstring p_x ) := { x_only := p_x } // End of template m_eccPointecdsa_nistp256_with_sha256_x_coordinate_only /** * @desc Send template for EccP256CurvePoint description based on y_coordinate_only type * @see Draft ETSI TS 103 097 V1.3.1 Clause 4.2.5 EccP256CurvePoint * @see Draft ETSI TS 103 097 V1.3.1 Table 2: Derivation of field sizes depending on the used algorithm */ template (value) EccP256CurvePoint m_eccPointecdsa_nistp256_with_sha256_y_coordinate_only( in template (value) octetstring p_y ) := { compressed_y_0 := p_y } // End of template m_eccPointecdsa_nistp256_with_sha256_y_coordinate_only /** * @desc Send template for EccP256CurvePoint description based on uncompressed type * @see Draft ETSI TS 103 097 V1.3.1 Clause 4.2.5 EccP256CurvePoint * @see Draft ETSI TS 103 097 V1.3.1 Table 2: Derivation of field sizes depending on the used algorithm */ template (value) EccP256CurvePoint m_eccPointecdsa_nistp256_with_sha256_uncompressed( in template (value) octetstring p_x, in template (value) octetstring p_y ) := { uncompressedP256 := { x := p_x, y := p_y } } // End of template m_eccPointecdsa_nistp256_with_sha256_uncompressed } // End of group algorithms /** * @desc Send templates for Signature description * @see Draft ETSI TS 103 097 V1.3.1 Clause 4.2.9 Signature * @see Draft ETSI TS 103 097 V1.3.1 Table 2: Derivation of field sizes depending on the used algorithm */ group signatures { /** * @desc Send template for signatures based on ECDSA algorithm * @member p_ecdsaSignature The ECDSA based signature * @see Draft ETSI TS 103 097 V1.3.1 Clause 4.2.9 Signature */ template (value) Signature m_signature( in template (value) EcdsaP256Signature p_ecdsaSignature ):= { ecdsaNistP256Signature := p_ecdsaSignature } // End of template m_signature_ecdsa /** * @desc Send template for ECDSA based signature * @member p_r The coordinate of the elliptic curve point resulting from multiplying the generator element by the ephemeral private key * @member p_s The signature * @see Draft ETSI TS 103 097 V1.3.1 Clause 4.2.10 EcdsaP256Signature */ template (value) EcdsaP256Signature m_ecdsaSignature( in template (value) EccP256CurvePoint p_rSig, in template (value) octetstring p_sSig ) := { rSig := p_rSig, sSig := p_sSig } // End of template m_ecdsaSignature } // End of group signatures group signerInfos { /** * @desc Send template for self signed message */ template (value) SignerIdentifier m_signerIdentifier_self := { self_ := NULL } // End of template m_signerIdentifier_self /** * @desc Send template for certificate signed message */ template (value) SignerIdentifier m_signerIdentifier_certificate( in template (value) Certificate p_certificate // TODO Use SingleEtsiTs103097Certificate ) := { certificate := { p_certificate } // Only one } // End of template m_signerIdentifier_certificate /** * @desc Send template for digest signed message */ template (value) SignerIdentifier m_signerIdentifier_digest( in template (value) HashedId8 p_digest := '0000000000000000'O ) := { digest := p_digest } // End of template m_signerIdentifier_digest /** * @desc Send template for certificate signed message */ template (value) SignerIdentifier m_signerIdentifier_certificates( in template (value) SequenceOfCertificate p_certificates := {} ) := { certificate := p_certificates } // End of template m_signerIdentifier_certificates } // End of group signerInfos /** * @desc Send template for TwoDLocation * @param p_latitude Latitude range from 900 000 000 to +900 000 000 * @param p_longitude Longitude range from 1 800 000 000 to +1 800 000 000 * @see Draft ETSI TS 103 097 V1.3.1 Clause 4.2.19 TwoDLocation */ template (value) TwoDLocation m_twoDLocation( in template (value) SecLatitude p_latitude, in template (value) SecLongitude p_longitude ) := { latitude := p_latitude, longitude := p_longitude } // End of template m_twoDLocation /** * @desc Send template for ThreeDLocation * @param p_latitude Latitude range from 900 000 000 to +900 000 000 * @param p_longitude Longitude range from 1 800 000 000 to +1 800 000 000 * @param p_elevation Elevation relative to the WGS-84 ellipsoid in decimetres * @see Draft ETSI TS 103 097 V1.3.1 Clause 4.2.20 ThreeDLocation */ template (value) ThreeDLocation m_threeDLocation( in template (value) SecLatitude p_latitude, in template (value) SecLongitude p_longitude, in template (value) SecElevation p_elevation ) := { latitude := p_latitude, longitude := p_longitude, elevation := p_elevation } // End of template m_threeDLocation /** * @desc Send template circular geographic region * @param p_center Circle center * @param p_radius Circle radius * @see Draft ETSI TS 103 097 V1.3.1 Clause 4.2.21 GeographicRegion */ template (value) GeographicRegion m_geographicRegion_circle( in template (value) TwoDLocation p_center, in template (value) UInt16 p_radius ) := { circularRegion := { center := p_center, radius := p_radius } } // End of template m_geographicRegion_circle /** * @desc Send template rectangular geographic region * @param p_northwest Upper left corner * @param p_southeast Lower rigth corner * @see Draft ETSI TS 103 097 V1.3.1 Clause 4.2.21 GeographicRegion */ template (value) GeographicRegion m_geographicRegion_rectangle( in template (value) TwoDLocation p_northwest, in template (value) TwoDLocation p_southeast ) := { rectangularRegion := { { northWest := p_northwest, southEast := p_southeast } } } // End of template m_geographicRegion_rectangle /** * @desc Send template polygonial geographic region * @param p_polygonal_region Polygonial region description * @see Draft ETSI TS 103 097 V1.3.1 Clause 4.2.21 GeographicRegion */ template (value) GeographicRegion m_geographicRegion_polygonial( in template (value) PolygonalRegion p_polygonal_region ) := { polygonalRegion := p_polygonal_region } // End of template m_geographicRegion_polygonial /** * @desc Send template for geographic identified region * @param p_identifiedRegion Indentified region * @see Draft ETSI TS 103 097 V1.3.1 Clause 4.2.21 GeographicRegion */ template (value) GeographicRegion m_geographicRegion_identifiedRegion( in template (value) SequenceOfIdentifiedRegion p_identifiedRegions ) := { identifiedRegion := p_identifiedRegions } // End of template m_geographicRegion_identifiedRegion template (value) IdentifiedRegion m_identifiedRegion_country_only( in template (value) CountryOnly p_countryOnly ) := { countryOnly := p_countryOnly } // End of template m_identifiedRegion_country_only template (value) IdentifiedRegion m_identifiedRegion_country_and_region( in template (value) CountryOnly p_countryOnly, in template (value) SequenceOfUint8 p_regions ) := { countryAndRegions := { countryOnly := p_countryOnly, regions := p_regions } } // End of template m_identifiedRegion_country_and_region } // End of group basicFormatElementsSend /** * @desc Receive templates for security headers * @see Draft ETSI TS 103 097 V1.3.1 Clause 4.2 Specification of basic format elements */ group basicFormatElementsRecv { group signerIdentifiers { /** * @desc Recv template for message signed with digest */ template (present) SignerIdentifier mw_signerIdentifier_digest( in template (present) HashedId8 p_digest := ? ) := { digest := p_digest } // End of template mw_signerIdentifier_digest template (present) SignerIdentifier mw_signerIdentifier_certificate( in template (present) EtsiTs103097Certificate p_certificate := ? ) := { certificate := { p_certificate } } // End of template m_signerIdentifier_certificate template (present) SignerIdentifier mw_signerIdentifier_certificates( in template (present) SequenceOfCertificate p_certificates := ? ) := { certificate := p_certificates } // End of template mw_signerIdentifier_certificates } // End of group signerIdentifiers /** * @desc Receive templates for Signature description * @see Draft ETSI TS 103 097 V1.3.1 Clause 4.2.9 Signature * @see Draft ETSI TS 103 097 V1.3.1 Table 2: Derivation of field sizes depending on the used algorithm */ group signatures { /** * @desc Receive template for signatures based on ECDSA algorithm * @member p_ecdsaSignature The ECDSA based signature * @see Draft ETSI TS 103 097 V1.3.1 Clause 4.2.9 Signature */ template (present) Signature mw_signature( in template (present) EcdsaP256Signature p_ecdsaSignature := ? ):= { ecdsaNistP256Signature := p_ecdsaSignature } // End of template mw_signature /** * @desc Receive template for ECDSA based signature * @member p_r The coordinate of the elliptic curve point resulting from multiplying the generator element by the ephemeral private key * @member p_s The signature * @see Draft ETSI TS 103 097 V1.3.1 Clause 4.2.10 EcdsaP256Signature */ template (present) EcdsaP256Signature mw_ecdsaSignature( in template (present) EccP256CurvePoint p_rSig := ?, in template (present) octetstring p_sSig := ? ) := { rSig := p_rSig, sSig := p_sSig } // End of template mw_ecdsaSignature } // End of group signatures /** * @desc Receive template for TwoDLocation * @param p_latitude Latitude range from 900 000 000 to +900 000 000 * @param p_longitude Longitude range from 1 800 000 000 to +1 800 000 000 * @see Draft ETSI TS 103 097 V1.3.1 Clause 4.2.19 TwoDLocation */ template (present) TwoDLocation mw_twoDLocation( in template (present) SecLatitude p_latitude, in template (present) SecLongitude p_longitude ) := { latitude := p_latitude, longitude := p_longitude } // End of template mw_twoDLocation /** * @desc Receive template for ThreeDLocation * @param p_latitude Latitude range from 900 000 000 to +900 000 000 * @param p_longitude Longitude range from 1 800 000 000 to +1 800 000 000 * @param p_elevation Elevation relative to the WGS-84 ellipsoid in decimetres * @see Draft ETSI TS 103 097 V1.3.1 Clause 4.2.20 ThreeDLocation */ template (present) ThreeDLocation mw_threeDLocation( in template (present) SecLatitude p_latitude, in template (present) SecLongitude p_longitude, in template (present) SecElevation p_elevation ) := { latitude := p_latitude, longitude := p_longitude, elevation := p_elevation } // End of template mw_threeDLocation /** * @desc Receive template circular geographic region * @param p_center Circle center * @param p_radius Circle radius * @see Draft ETSI TS 103 097 V1.3.1 Clause 4.2.21 GeographicRegion */ template (present) GeographicRegion mw_geographicRegion_circle( in template (present) TwoDLocation p_center := ?, in template (present) UInt16 p_radius := ? ) := { circularRegion := { center := p_center, radius := p_radius } } // End of template mw_geographicRegion_circle /** * @desc Basic receive template rectangular geographic region * @param p_northwest Upper left corner * @param p_southeast Lower rigth corner * @see Draft ETSI TS 103 097 V1.3.1 Clause 4.2.21 GeographicRegion */ template (present) GeographicRegion mw_geographicRegion_rectangular( in template (present) TwoDLocation p_northwest := ?, in template (present) TwoDLocation p_southeast := ? ) := { rectangularRegion := { { northWest := p_northwest, southEast := p_southeast } } } // End of template mw_geographicRegion_rectangular /** * @desc Receive template polygonial geographic region * @param p_polygonal_region Polygonial region description * @see Draft ETSI TS 103 097 V1.3.1 Clause 4.2.21 GeographicRegion */ template (present) GeographicRegion mw_geographicRegion_polygonal( in template (present) PolygonalRegion p_polygonal_region := ? ) := { polygonalRegion := p_polygonal_region } // End of template mw_geographicRegion_polygonial /** * @desc Receive template for geographic identified region * @param p_identifiedRegion Indentified region * @see Draft ETSI TS 103 097 V1.3.1 Clause 4.2.21 GeographicRegion */ template (present) GeographicRegion mw_geographicRegion_identified( in template (present) SequenceOfIdentifiedRegion p_identifiedRegion := ? ) := { identifiedRegion := p_identifiedRegion } // End of template mw_geographicRegion_identifiedRegion template (present) IdentifiedRegion mw_identifiedRegion_country_only := { countryOnly := ?// FIXME ((all from c_iso3166Codes), (all from c_unStatsAdditionalCodes)) } template (present) IdentifiedRegion mw_identifiedRegion_country_and_region := { countryAndRegions := { countryOnly := ?, // FIXME ((all from c_iso3166Codes), (all from c_unStatsAdditionalCodes)), regions := ? } } } // End of group basicFormatElementsRecv } // End of group dummyBasicFormatElements /** * @desc Send templates for security headers * @see Draft ETSI TS 103 097 V1.3.1 Clause 5.1 EtsiTs103097Data */ group etsiTs103097Data { /** * @desc Generic send template for EtsiTs103097Data message */ template (value) EtsiTs103097Data m_etsiTs103097Data( in template (value) Ieee1609Dot2Content p_content ) := { protocolVersion := c_protocol_version, content := p_content } // End of template m_etsiTs103097Data template (value) EtsiTs103097Data m_etsiTs103097Data_unsecured( in template (value) Opaque p_unsecuredData ) := { protocolVersion := c_protocol_version, content := { unsecuredData := p_unsecuredData } } // End of template m_secured_data_unsecured template (value) EtsiTs103097Data m_etsiTs103097Data_signed( in template (value) SignedData p_signedData ) := { protocolVersion := c_protocol_version, content := { signedData := p_signedData } } // End of template m_secured_data_signed template (present) EtsiTs103097Data mw_etsiTs103097Data_signed( template (present) SignedData p_signedData := ? ) := { protocolVersion := c_protocol_version, content := { signedData := p_signedData } } // End of template mw_secured_data_signed /** * @desc Generic send template for EtsiTs103097Data message */ template (present) EtsiTs103097Data mw_etsiTs103097Data( template (present) Ieee1609Dot2Content p_content := ? ) := { protocolVersion := c_protocol_version, content := p_content } // End of template mw_etsiTs103097Data /** * @desc Generic send template for EtsiTs103097Data message */ template (value) EtsiTs103097Data m_etsiTs103097Data_wrong_protocol( in template (value) UInt8 p_protocol_version, in template (value) Ieee1609Dot2Content p_content ) := { protocolVersion := c_protocol_version, content := p_content } // End of template m_etsiTs103097Data_wrong_protocol } // End of group etsiTs103097Data /** * @desc Send templates for ToBeSignedData header * @see Draft ETSI TS 103 097 V1.3.1 Clause 5.2 SignedData */ group signedData { template (value) SignedData m_signedData( in template (value) HashAlgorithm p_hashId, in template (value) ToBeSignedData p_tbsData, in template (value) SignerIdentifier p_signer, in template (value) Signature p_signature_ ) := { hashId := p_hashId, tbsData := p_tbsData, signer := p_signer, signature_ := p_signature_ } // End of template m_signedData template (present) SignedData mw_signedData( template (present) HashAlgorithm p_hashId := ?, template (present) ToBeSignedData p_tbsData := ?, template (present) SignerIdentifier p_signer := ?, template (present) Signature p_signature_ := ? ) := { hashId := p_hashId, tbsData := p_tbsData, signer := p_signer, signature_ := p_signature_ } // End of template mw_signedData template (value) ToBeSignedData m_toBeSignedData( in template (value) SignedDataPayload p_payload, in template (value) HeaderInfo p_headerInfo ) := { payload := p_payload, headerInfo := p_headerInfo } // End of template m_toBeSignedData template (present) ToBeSignedData mw_toBeSignedData( template (present) SignedDataPayload p_payload := ?, template (present) HeaderInfo p_headerInfo := ? ) := { payload := p_payload, headerInfo := p_headerInfo } // End of template mw_toBeSignedData template (value) SignedDataPayload m_signedDataPayload( in template (value) Ieee1609Dot2Data p_data ) := { data := p_data, extDataHash := omit } // End of template m_signedDataPayload template (present) SignedDataPayload mw_signedDataPayload( template (present) Ieee1609Dot2Data p_data := ? ) := { data := p_data, extDataHash := * } // End of template mw_signedDataPayload template (value) SignedDataPayload m_signedDataPayload_ext( in template (value) Ieee1609Dot2Data p_data, in template (value) Oct32 p_extDataHash ) := { data := p_data, extDataHash := { sha256HashedData := p_extDataHash } } // End of template m_signedDataPayload_ext } // End of group signedData /** * @desc Send/Receive templates for Payload * @see Draft ETSI TS 103 097 V1.3.1 Clause 5.2 Payload */ group ieee1609Dot2Data { /** * @desc Send template for Ieee1609Dot2Data * @see Draft ETSI TS 103 097 V1.3.1 Clause 5.2 Payload */ template (value) Ieee1609Dot2Data m_ieee1609Dot2Data( in template (value) Ieee1609Dot2Content p_content ) := { content := p_content } // End of template m_ieee1609Dot2Data /** * @desc Receive template for Ieee1609Dot2Data * @see Draft ETSI TS 103 097 V1.3.1 Clause 5.2 Payload */ template (present) Ieee1609Dot2Data mw_ieee1609Dot2Data( template (present) Ieee1609Dot2Content p_content := ? ) := { content := p_content } // End of template mw_ieee1609Dot2Data /** * @desc Send template for 'unsecured' Payload * @see Draft ETSI TS 103 097 V1.3.1 Clause 5.2 Payload */ template (value) Ieee1609Dot2Content m_ieee1609Dot2Data_unsecured( in template (value) Opaque p_unsecuredData ) := { unsecuredData := p_unsecuredData } // End of template m_ieee1609Dot2Data_unsecured /** * @desc Receive template for 'unsecured' Payload * @see Draft ETSI TS 103 097 V1.3.1 Clause 5.2 Payload */ template (present) Ieee1609Dot2Content mw_ieee1609Dot2Data_unsecured( template (present) Opaque p_unsecuredData := ? ) := { unsecuredData := p_unsecuredData } // End of template mw_ieee1609Dot2Data_unsecured /** * @desc Send template for 'signed' Payload * @see Draft ETSI TS 103 097 V1.3.1 Clause 5.2 Payload */ template (value) Ieee1609Dot2Content m_ieee1609Dot2Data_signed( in template (value) SignedData p_signedData ) := { signedData := p_signedData } // End of template m_ieee1609Dot2Data_signed /** * @desc Send template for 'signed' Payload * @see Draft ETSI TS 103 097 V1.3.1 Clause 5.2 Payload */ template (present) Ieee1609Dot2Content mw_ieee1609Dot2Data_signed( template (present) SignedData p_signedData := ? ) := { signedData := p_signedData } // End of template mw_ieee1609Dot2Data_signed } // End of group ieee1609Dot2Data /** * @desc Send/Receive templates for HeaderInfo * @see Draft ETSI TS 103 097 V1.3.1 Clause 5.4 HeaderInfo */ group headerFields { /** * @desc Basic send HeaderInfo template with ETSI ITS restrction */ template (omit) HeaderInfo m_ieee1609Dot2_headerInfo( in template (value) Psid p_psid ) := { psid := p_psid, generationTime := omit, expiryTime := omit, generationLocation := omit, p2pcdLearningRequest := omit, missingCrlIdentifier := omit, encryptionKey := omit, inlineP2pcdRequest := omit, requestedCertificate := omit } // End of template m_ieee1609Dot2_headerInfo /** * @desc Basic receive HeaderInfo template with ETSI ITS restrction */ template (present) HeaderInfo mw_ieee1609Dot2_headerInfo( template (present) Psid p_psid := ? ) := { psid := p_psid, generationTime := *, expiryTime := *, generationLocation := *, p2pcdLearningRequest := omit, missingCrlIdentifier := omit, encryptionKey := omit, inlineP2pcdRequest := omit, requestedCertificate := omit } // End of template mw_ieee1609Dot2_headerInfo /** * @desc CAM specific send HeaderInfo template with ETSI ITS restrction * * @see Clause 7.1.1 Security profile for CAMs */ template (omit) HeaderInfo m_headerInfo_cam( in template (value) Psid p_psid := c_its_aid_CAM, in template (value) Time64 p_generationTime, in template (omit) Time64 p_expiryTime := omit, in template (omit) SequenceOfHashedId3 p_inlineP2pcdRequest := omit ) modifies m_ieee1609Dot2_headerInfo := { generationTime := p_generationTime, expiryTime := p_expiryTime, generationLocation := omit, inlineP2pcdRequest := p_inlineP2pcdRequest } // End of template m_headerInfo_cam /** * @desc CAM specific receive HeaderInfo template with ETSI ITS restrction * * Clause 7.1.1 Security profile for CAMs */ template (present) HeaderInfo mw_headerInfo_cam( template (present) Psid p_psid := c_its_aid_CAM, template (present) Time64 p_generationTime := ?, template Time64 p_expiryTime := omit, template SequenceOfHashedId3 p_inlineP2pcdRequest := omit, template Certificate p_requestedCertificate := omit ) modifies mw_ieee1609Dot2_headerInfo := { psid := c_its_aid_CAM, generationTime := p_generationTime, expiryTime := p_expiryTime, generationLocation := omit, inlineP2pcdRequest := p_inlineP2pcdRequest, requestedCertificate := p_requestedCertificate } // End of template mw_headerInfo_cam /** * * Clause 7.1.2 Security profile for DENMs */ template (omit) HeaderInfo m_headerInfo_denm( in template (value) Psid p_psid := c_its_aid_DENM, in template (value) Time64 p_generationTime, in template (value) ThreeDLocation p_generationLocation, in template (omit) Time64 p_expiryTime := omit ) modifies mw_ieee1609Dot2_headerInfo := { generationTime := p_generationTime, expiryTime := p_expiryTime, generationLocation := p_generationLocation } // End of template m_headerInfo_denm /** * * Clause 7.1.2 Security profile for DENMs */ template (present) HeaderInfo mw_headerInfo_denm( template (present) Psid p_psid := c_its_aid_DENM, template (present) Time64 p_generationTime := ?, template (present) ThreeDLocation p_generationLocation := ?, template Time64 p_expiryTime := omit ) modifies mw_ieee1609Dot2_headerInfo := { generationTime := p_generationTime, expiryTime := p_expiryTime, generationLocation := p_generationLocation } // End of template mw_headerInfo_denm /** * * Clause 7.1.3 Generic security profile for other signed messages */ template (omit) HeaderInfo m_headerInfo_gn( in template (value) Psid p_psid := c_its_aid_GN, in template (value) Time64 p_generationTime, in template (value) Time64 p_expiryTime, in template (omit) ThreeDLocation p_generationLocation := omit ) modifies m_ieee1609Dot2_headerInfo := { generationTime := p_generationTime, expiryTime := p_expiryTime, generationLocation := p_generationLocation } // End of template m_headerInfo_gn /** * * Clause 7.1.3 Generic security profile for other signed messages */ template (present) HeaderInfo mw_headerInfo_gn( template (present) Psid p_psid := c_its_aid_GN, template (present) Time64 p_generationTime := ?, template (present) Time64 p_expiryTime := ?, template ThreeDLocation p_generationLocation := omit ) modifies m_ieee1609Dot2_headerInfo := { generationTime := p_generationTime, expiryTime := p_expiryTime, generationLocation := p_generationLocation } // End of template mw_headerInfo_gn } // End of group headerFields group signatures { template (value) Signature m_signature_ecdsaNistP256( in template (value) EcdsaP256Signature p_ecdsaNistP256Signature ) := { ecdsaNistP256Signature := p_ecdsaNistP256Signature } // End of template m_signature_ecdsaNistP256 template (present) Signature mw_signature_ecdsaNistP256( template (present) EcdsaP256Signature p_ecdsaNistP256Signature := ? ) := { ecdsaNistP256Signature := p_ecdsaNistP256Signature } // End of template mw_signature_ecdsaNistP256 template (value) Signature m_signature_ecdsaBrainpoolP256r1( in template (value) EcdsaP256Signature p_ecdsaBrainpoolP256r1Signature ) := { ecdsaBrainpoolP256r1Signature := p_ecdsaBrainpoolP256r1Signature } // End of template m_signature_ecdsaBrainpoolP256r1 template (present) Signature mw_signature_ecdsaBrainpoolP256r1( template (present) EcdsaP256Signature p_ecdsaBrainpoolP256r1Signature := ? ) := { ecdsaBrainpoolP256r1Signature := p_ecdsaBrainpoolP256r1Signature } // End of template m_signature_ecdsaBrainpoolP256r1 template (value) Signature m_signature_ecdsaBrainpoolP384r1( in template (value) EcdsaP384Signature p_ecdsaBrainpoolP384r1Signature ) := { ecdsaBrainpoolP384r1Signature := p_ecdsaBrainpoolP384r1Signature } // End of template m_signature_ecdsaBrainpoolP384r1 template (present) Signature mw_signature_ecdsaBrainpoolP384r1( template (present) EcdsaP384Signature p_ecdsaBrainpoolP384r1Signature := ? ) := { ecdsaBrainpoolP384r1Signature := p_ecdsaBrainpoolP384r1Signature } // End of template mw_signature_ecdsaBrainpoolP384r1 template (value) EcdsaP256Signature m_ecdsaP256Signature( in template (value) EccP256CurvePoint p_rSig, in template (value) Oct32 p_sSig ) := { rSig := p_rSig, sSig := p_sSig } // End of template m_ecdsaP256Signature template (present) EcdsaP256Signature mw_ecdsaP256Signature( template (present) EccP256CurvePoint p_rSig := ?, template (present) Oct32 p_sSig := ? ) := { rSig := p_rSig, sSig := p_sSig } // End of template mw_ecdsaP256Signature template (value) EcdsaP384Signature m_ecdsaP384Signature( in template (value) EccP384CurvePoint p_rSig, in template (value) Oct48 p_sSig ) := { rSig := p_rSig, sSig := p_sSig } // End of template m_ecdsaP384Signature template (present) EcdsaP384Signature mw_ecdsaP384Signature( template (present) EccP384CurvePoint p_rSig := ?, template (present) Oct48 p_sSig := ? ) := { rSig := p_rSig, sSig := p_sSig } // End of template mw_ecdsaP384Signature template (value) EccP256CurvePoint m_eccP256CurvePoint_x_only( in template (value) Oct32 p_x_only ) := { x_only := p_x_only } // End of template m_eccP256CurvePoint_x_only template (present) EccP256CurvePoint mw_eccP256CurvePoint_x_only( template (present) Oct32 p_x_only := ? ) := { x_only := p_x_only } // End of template mw_eccP256CurvePoint_x_only template (value) EccP256CurvePoint m_eccP256CurvePoint_compressed_y_0( in template (value) Oct32 p_compressed_y_0 ) := { compressed_y_0 := p_compressed_y_0 } // End of template m_eccP256CurvePoint_compressed_y_0 template (present) EccP256CurvePoint mw_eccP256CurvePoint_compressed_y_0( template (present) Oct32 p_compressed_y_0 := ? ) := { compressed_y_0 := p_compressed_y_0 } // End of template mw_eccP256CurvePoint_compressed_y_0 template (value) EccP256CurvePoint m_eccP256CurvePoint_compressed_y_1( in template (value) Oct32 p_compressed_y_1 ) := { compressed_y_1 := p_compressed_y_1 } // End of template m_eccP256CurvePoint_compressed_y_1 template (present) EccP256CurvePoint mw_eccP256CurvePoint_compressed_y_1( template (present) Oct32 p_compressed_y_1 := ? ) := { compressed_y_1 := p_compressed_y_1 } // End of template mw_eccP256CurvePoint_compressed_y_1 template (value) EccP256CurvePoint m_eccP256CurvePoint_uncompressed( in template (value) Oct32 p_x, in template (value) Oct32 p_y ) := { uncompressedP256 := { x := p_x, y := p_y } } // End of template m_eccP256CurvePoint_uncompressed template (present) EccP256CurvePoint mw_eccP256CurvePoint_uncompressed( template (present) Oct32 p_x := ?, template (present) Oct32 p_y := ? ) := { uncompressedP256 := { x := p_x, y := p_y } } // End of template mw_eccP256CurvePoint_uncompressed template (value) EccP384CurvePoint m_eccP384CurvePoint_x_only( in template (value) Oct48 p_x_only ) := { x_only := p_x_only } // End of template m_eccP384CurvePoint_x_only template (present) EccP384CurvePoint mw_eccP384CurvePoint_x_only( template (present) Oct48 p_x_only := ? ) := { x_only := p_x_only } // End of template mw_eccP384CurvePoint_x_only template (value) EccP384CurvePoint m_eccP384CurvePoint_compressed_y_0( in template (value) Oct48 p_compressed_y_0 ) := { compressed_y_0 := p_compressed_y_0 } // End of template m_eccP384CurvePoint_compressed_y_0 template (present) EccP384CurvePoint mw_eccP384CurvePoint_compressed_y_0( template (present) Oct48 p_compressed_y_0 := ? ) := { compressed_y_0 := p_compressed_y_0 } // End of template mw_eccP384CurvePoint_compressed_y_0 template (value) EccP384CurvePoint m_eccP384CurvePoint_compressed_y_1( in template (value) Oct48 p_compressed_y_1 ) := { compressed_y_1 := p_compressed_y_1 } // End of template m_eccP384CurvePoint_compressed_y_1 template (present) EccP384CurvePoint mw_eccP384CurvePoint_compressed_y_1( template (present) Oct48 p_compressed_y_1 := ? ) := { compressed_y_1 := p_compressed_y_1 } // End of template mw_eccP384CurvePoint_compressed_y_1 template (value) EccP384CurvePoint m_eccP384CurvePoint_uncompressed( in template (value) Oct48 p_x, in template (value) Oct48 p_y ) := { uncompressedP384 := { x := p_x, y := p_y } } // End of template m_eccP384CurvePoint_uncompressed template (present) EccP384CurvePoint mw_eccP384CurvePoint_uncompressed( template (present) Oct48 p_x := ?, template (present) Oct48 p_y := ? ) := { uncompressedP384 := { x := p_x, y := p_y } } // End of template mw_eccP384CurvePoint_uncompressed } // End of group signatures /** * @desc Dummy send/receive templates for certificates * @see Draft ETSI TS 103 097 V1.3.1 Clause 6 Specification of certificate format */ group certificates { /** * @desc Send certificate template * @member p_signer_info Signer information * @member p_subject_info The subject information * @member p_subject_attributes List of subject attribute * @member p_validity_restrictions List of validity restriction * @member p_signature The signature * @see Draft ETSI TS 103 097 V1.3.1 Clause 6.1 Certificate */ template (omit) EtsiTs103097Certificate m_etsiTs103097Certificate( in template (value) IssuerIdentifier p_issuer, in template (value) ToBeSignedCertificate p_toBeSigned, in template (omit) Signature p_signature_ := omit ) := { version := c_certificate_version, type_ := explicit, issuer := p_issuer, toBeSigned := p_toBeSigned, signature_ := p_signature_ } // End of template m_etsiTs103097Certificate /** * @desc Send certificate template * @member p_signer_info Signer information * @member p_subject_info The subject information * @member p_subject_attributes List of subject attribute * @member p_validity_restrictions List of validity restriction * @member p_signature The signature * @see Draft ETSI TS 103 097 V1.3.1 Clause 6.1 Certificate */ template (present) EtsiTs103097Certificate mw_etsiTs103097Certificate( template (present) IssuerIdentifier p_issuer := ?, template (present) ToBeSignedCertificate p_toBeSigned := ?, template (present) Signature p_signature_ := ? ) := { version := c_certificate_version, type_ := explicit, issuer := p_issuer, toBeSigned := p_toBeSigned, signature_ := p_signature_ } // End of template mw_etsiTs103097Certificate } // End of group certificates group issuerIdentifier { template (value) IssuerIdentifier m_issuerIdentifier_self( in template (value) HashAlgorithm p_self ) := { self_ := p_self } // End of template m_issuerIdentifier_self template (present) IssuerIdentifier mw_issuerIdentifier_self( template (present) HashAlgorithm p_self := ? ) := { self_ := p_self } // End of template mw_issuerIdentifier_self template (value) IssuerIdentifier m_issuerIdentifier_sha256AndDigest( // FIXME Add opque field for unknown issuer? in template (value) HashedId8 p_sha256AndDigest ) := { sha256AndDigest := p_sha256AndDigest } // End of template m_issuerIdentifier_sha256AndDigest template (present) IssuerIdentifier mw_issuerIdentifier_sha256AndDigest( // FIXME Add opque field for unknown issuer? template (present) HashedId8 p_sha256AndDigest := ? ) := { sha256AndDigest := p_sha256AndDigest } // End of template mw_issuerIdentifier_sha256AndDigest template (value) IssuerIdentifier m_issuerIdentifier_sha384AndDigest( in template (value) HashedId8 p_sha384AndDigest ) := { sha384AndDigest := p_sha384AndDigest } // End of template m_issuerIdentifier_sha384AndDigest template (present) IssuerIdentifier mw_issuerIdentifier_sha384AndDigest( template (present) HashedId8 p_sha384AndDigest := ? ) := { sha384AndDigest := p_sha384AndDigest } // End of template mw_issuerIdentifier_sha384AndDigest } // End of group issuerIdentifier group toBeSignedCertificate { /** * @desc Send template for ToBeSignedCertificate with CA restrictions * @see ETSI TS 103 097 V1.3.1 Clause 7.2.3 Root CA certificate */ template (omit) ToBeSignedCertificate m_toBeSignedCertificate_ca( in template (value) CertificateId p_id, in template (value) SequenceOfPsidSsp p_appPermissions, in template (value) SequenceOfPsidGroupPermissions p_certIssuePermissions, in template (value) VerificationKeyIndicator p_verifyKeyIndicator, in template (omit) ValidityPeriod p_validityPeriod := omit, in template (omit) GeographicRegion p_region := omit, in template (omit) SubjectAssurance p_assuranceLevel := omit, in template (omit) PublicEncryptionKey p_encryptionKey := omit ) := { id := p_id, cracaId := '000000'O, // ETSI TS 103 097 V1.3.1 Clause 6 Bullet 2 crlSeries := 0, // ETSI TS 103 097 V1.3.1 Clause 6 Bullet 3 validityPeriod := p_validityPeriod, region := p_region, assuranceLevel := p_assuranceLevel, appPermissions := p_appPermissions, certIssuePermissions := p_certIssuePermissions, // ETSI TS 103 097 V1.3.1 Clause 7.2.3 Root CA certificates Bullet 4 certRequestPermissions := omit, canRequestRollover := omit, encryptionKey := p_encryptionKey, verifyKeyIndicator := p_verifyKeyIndicator } // End of template m_toBeSignedCertificate_ca /** * @desc Receive template for ToBeSignedCertificate with CA restrictions * @see ETSI TS 103 097 V1.3.1 Clause 7.2.3 Root CA certificate */ template ToBeSignedCertificate mw_toBeSignedCertificate_ca( template (present) CertificateId p_id := ?, template (present) SequenceOfPsidSsp p_appPermissions := ?, template (present) SequenceOfPsidGroupPermissions p_certIssuePermissions := ?, template (present) SequenceOfPsidGroupPermissions p_certRequestPermissions := ?, template (present) VerificationKeyIndicator p_verifyKeyIndicator := ?, template ValidityPeriod p_validityPeriod := *, template GeographicRegion p_region := *, template SubjectAssurance p_assuranceLevel := *, template PublicEncryptionKey p_encryptionKey := * ) := { id := p_id, cracaId := '000000'O, crlSeries := 0, validityPeriod := p_validityPeriod, region := p_region, assuranceLevel := p_assuranceLevel, appPermissions := *, certIssuePermissions := p_certIssuePermissions, certRequestPermissions := p_certRequestPermissions, canRequestRollover := *, encryptionKey := p_encryptionKey, verifyKeyIndicator := p_verifyKeyIndicator } // End of template mw_toBeSignedCertificate /** * @desc Send template for ToBeSignedCertificate with Enrolment credential restrictions * @see ETSI TS 103 097 V1.3.1 Clause 7.2.2 Enrolment credential */ template (omit) ToBeSignedCertificate m_toBeSignedCertificate_ea( in template (value) CertificateId p_id, in template (value) SequenceOfPsidSsp p_appPermissions, in template (value) VerificationKeyIndicator p_verifyKeyIndicator, in template (omit) ValidityPeriod p_validityPeriod := omit, in template (omit) GeographicRegion p_region := omit, in template (omit) SubjectAssurance p_assuranceLevel := omit, in template (omit) PublicEncryptionKey p_encryptionKey := omit ) := { id := p_id, cracaId := '000000'O, // ETSI TS 103 097 V1.3.1 Clause 6 Bullet 2 crlSeries := 0, // ETSI TS 103 097 V1.3.1 Clause 6 Bullet 3 validityPeriod := p_validityPeriod, region := p_region, assuranceLevel := p_assuranceLevel, appPermissions := p_appPermissions, certIssuePermissions := omit, certRequestPermissions := omit, canRequestRollover := omit, encryptionKey := p_encryptionKey, verifyKeyIndicator := p_verifyKeyIndicator } // End of template m_toBeSignedCertificate_ea /** * @desc Send template for ToBeSignedCertificate with Enrolment credential restrictions * @see ETSI TS 103 097 V1.3.1 Clause 7.2.2 Enrolment credential */ template ToBeSignedCertificate mw_toBeSignedCertificate_ea( template (present) CertificateId p_id := ?, template (present) SequenceOfPsidSsp p_appPermissions := ?, template (present) VerificationKeyIndicator p_verifyKeyIndicator := ?, template ValidityPeriod p_validityPeriod := *, template GeographicRegion p_region := *, template SubjectAssurance p_assuranceLevel := *, template PublicEncryptionKey p_encryptionKey := * ) := { id := p_id, cracaId := '000000'O, // ETSI TS 103 097 V1.3.1 Clause 6 Bullet 2 crlSeries := 0, // ETSI TS 103 097 V1.3.1 Clause 6 Bullet 3 validityPeriod := p_validityPeriod, region := p_region, assuranceLevel := p_assuranceLevel, appPermissions := p_appPermissions, certIssuePermissions := *, certRequestPermissions := *, canRequestRollover := *, encryptionKey := p_encryptionKey, verifyKeyIndicator := p_verifyKeyIndicator } // End of template mw_toBeSignedCertificate_ea /** * @desc Send template for ToBeSignedCertificate with Authorization authority restrictions * @see ETSI TS 103 097 V1.3.1 Clause 7.2.4 Subordinate certification authority certificates */ template (omit) ToBeSignedCertificate m_toBeSignedCertificate_aa( in template (value) CertificateId p_id, in template (value) SequenceOfPsidSsp p_appPermissions, in template (value) VerificationKeyIndicator p_verifyKeyIndicator, in template (omit) ValidityPeriod p_validityPeriod := omit, in template (omit) GeographicRegion p_region := omit, in template (omit) SubjectAssurance p_assuranceLevel := omit, in template (omit) PublicEncryptionKey p_encryptionKey := omit ) := { id := p_id, cracaId := '000000'O, // ETSI TS 103 097 V1.3.1 Clause 6 Bullet 2 crlSeries := 0, // ETSI TS 103 097 V1.3.1 Clause 6 Bullet 3 validityPeriod := p_validityPeriod, region := p_region, assuranceLevel := p_assuranceLevel, appPermissions := p_appPermissions, certIssuePermissions := omit, certRequestPermissions := omit, canRequestRollover := omit, encryptionKey := p_encryptionKey, verifyKeyIndicator := p_verifyKeyIndicator } // End of template m_toBeSignedCertificate_aa /** * @desc Send template for ToBeSignedCertificate with Authorization authority restrictions * @see ETSI TS 103 097 V1.3.1 Clause 7.2.4 Subordinate certification authority certificates */ template ToBeSignedCertificate mw_toBeSignedCertificate_aa( template (present) CertificateId p_id := ?, template (present) SequenceOfPsidSsp p_appPermissions := ?, template (present) VerificationKeyIndicator p_verifyKeyIndicator := ?, template ValidityPeriod p_validityPeriod := *, template GeographicRegion p_region := *, template SubjectAssurance p_assuranceLevel := *, template PublicEncryptionKey p_encryptionKey := * ) := { id := p_id, cracaId := '000000'O, // ETSI TS 103 097 V1.3.1 Clause 6 Bullet 2 crlSeries := 0, // ETSI TS 103 097 V1.3.1 Clause 6 Bullet 3 validityPeriod := p_validityPeriod, region := p_region, assuranceLevel := p_assuranceLevel, appPermissions := p_appPermissions, certIssuePermissions := *, certRequestPermissions := *, canRequestRollover := *, encryptionKey := p_encryptionKey, verifyKeyIndicator := p_verifyKeyIndicator } // End of template mw_toBeSignedCertificate_aa /** * @desc Send template for ToBeSignedCertificate with AT restrictions * @see ETSI TS 103 097 V1.3.1 Clause 7.2.1 Authorization tickets */ template (omit) ToBeSignedCertificate m_toBeSignedCertificate_at( in template (value) SequenceOfPsidSsp p_appPermissions, in template (value) VerificationKeyIndicator p_verifyKeyIndicator, in template (omit) ValidityPeriod p_validityPeriod := omit, in template (omit) GeographicRegion p_region := omit, in template (omit) SubjectAssurance p_assuranceLevel := omit, in template (omit) PublicEncryptionKey p_encryptionKey := omit ) := { id := { none_ := NULL }, cracaId := '000000'O, // ETSI TS 103 097 V1.3.1 Clause 6 Bullet 2 crlSeries := 0, // ETSI TS 103 097 V1.3.1 Clause 6 Bullet 3 validityPeriod := p_validityPeriod, region := p_region, assuranceLevel := p_assuranceLevel, appPermissions := p_appPermissions, certIssuePermissions := omit, certRequestPermissions := omit, canRequestRollover := omit, encryptionKey := p_encryptionKey, verifyKeyIndicator := p_verifyKeyIndicator } // End of template m_toBeSignedCertificate_at /** * @desc Send template for ToBeSignedCertificate with AT restrictions * @see ETSI TS 103 097 V1.3.1 Clause 7.2.1 Authorization tickets */ template ToBeSignedCertificate mw_toBeSignedCertificate_at( template (present) SequenceOfPsidSsp p_appPermissions := ?, template (present) VerificationKeyIndicator p_verifyKeyIndicator := ?, template ValidityPeriod p_validityPeriod := ?, template GeographicRegion p_region := *, template SubjectAssurance p_assuranceLevel := *, template PublicEncryptionKey p_encryptionKey := * ) := { id := { none_ := NULL }, cracaId := '000000'O, // ETSI TS 103 097 V1.3.1 Clause 6 Bullet 2 crlSeries := 0, // ETSI TS 103 097 V1.3.1 Clause 6 Bullet 3 validityPeriod := p_validityPeriod, region := p_region, assuranceLevel := p_assuranceLevel, appPermissions := p_appPermissions, certIssuePermissions := *, certRequestPermissions := *, canRequestRollover := *, encryptionKey := p_encryptionKey, verifyKeyIndicator := p_verifyKeyIndicator } // End of template mw_toBeSignedCertificate_at } // End of group toBeSignedCertificate group keys { template (value) VerificationKeyIndicator m_verificationKeyIndicator_verificationKey( in template (value) PublicVerificationKey p_verificationKey ) := { verificationKey := p_verificationKey } // End of template m_verificationKeyIndicator_verificationKey template (present) VerificationKeyIndicator mw_verificationKeyIndicator_verificationKey( template (present) PublicVerificationKey p_verificationKey := ? ) := { verificationKey := p_verificationKey } // End of template mw_verificationKeyIndicator_verificationKey template (value) VerificationKeyIndicator m_verificationKeyIndicator_reconstructionValue( in template (value) EccP256CurvePoint p_reconstructionValue ) := { reconstructionValue := p_reconstructionValue } // End of template m_verificationKeyIndicator_reconstructionValue template (present) VerificationKeyIndicator mw_verificationKeyIndicator_reconstructionValue( template (present) EccP256CurvePoint p_reconstructionValue := ? ) := { reconstructionValue := p_reconstructionValue } // End of template mw_verificationKeyIndicator_reconstructionValue template (value) PublicVerificationKey m_publicVerificationKey_ecdsaNistP256( in template (value) EccP256CurvePoint p_ecdsaNistP256 ) := { ecdsaNistP256 := p_ecdsaNistP256 } // End of template m_publicVerificationKey_ecdsaNistP256 template (present) PublicVerificationKey mw_publicVerificationKey_ecdsaNistP256( template (present) EccP256CurvePoint p_ecdsaNistP256 := ? ) := { ecdsaNistP256 := p_ecdsaNistP256 } // End of template mw_publicVerificationKey_ecdsaNistP256 template (value) PublicVerificationKey m_publicVerificationKey_ecdsaBrainpoolP256( in template (value) EccP256CurvePoint p_ecdsaBrainpoolP256r1 ) := { ecdsaBrainpoolP256r1 := p_ecdsaBrainpoolP256r1 } // End of template m_publicVerificationKey_ecdsaBrainpoolP256 template (present) PublicVerificationKey mw_publicVerificationKey_ecdsaBrainpoolP256( template (present) EccP256CurvePoint p_ecdsaBrainpoolP256r1 := ? ) := { ecdsaBrainpoolP256r1 := p_ecdsaBrainpoolP256r1 } // End of template mw_publicVerificationKey_ecdsaBrainpoolP256 template (value) PublicVerificationKey m_publicVerificationKey_ecdsaBrainpoolP384( in template (value) EccP384CurvePoint p_ecdsaBrainpoolP384r1 ) := { ecdsaBrainpoolP384r1 := p_ecdsaBrainpoolP384r1 } // End of template m_publicVerificationKey_ecdsaBrainpoolP384 template (present) PublicVerificationKey mw_publicVerificationKey_ecdsaBrainpoolP384( template (present) EccP384CurvePoint p_ecdsaBrainpoolP384r1 := ? ) := { ecdsaBrainpoolP384r1 := p_ecdsaBrainpoolP384r1 } // End of template mw_publicVerificationKey_ecdsaBrainpoolP384 } // End of group keys group appPermissions { template (omit) PsidSsp m_appPermissions( in template (value) Psid p_psid, in template (omit) ServiceSpecificPermissions p_ssp := omit ) := { psid := p_psid, ssp := p_ssp } // End of template m_appPermissions template (present) PsidSsp mw_appPermissions( template (present) Psid p_psid := ?, template ServiceSpecificPermissions p_ssp := * ) := { psid := p_psid, ssp := p_ssp } // End of template mw_appPermissions template (value) PsidSspRange m_psidSspRange( in Psid p_psid, in template (value) SspRange p_sspRange := m_SspRange_all ) := { psid := p_psid, sspRange := p_sspRange } // End of template m_psidSspRange template (value) SspRange m_SspRange_all := { all_ := NULL } // End of template m_SspRange_all template (value) SspRange m_SspRange_opaque( in template (value) SequenceOfOctetString p_opaque ) := { opaque := p_opaque } // End of template m_SspRange_opaque template (value) SspRange m_SspRange_bitmapSspRange( in template (value) BitmapSspRange p_bitmapSspRange ) := { bitmapSspRange := p_bitmapSspRange } // End of template m_SspRange_bitmapSspRange template (value) PsidGroupPermissions m_psidGroupPermissions( in template (value) SubjectPermissions p_subjectPermissions, in integer p_minChainLength := 1, in integer p_chainLengthRange := 0, in EndEntityType p_eeType := oct2bit('00'O) ) := { subjectPermissions := p_subjectPermissions, minChainLength := p_minChainLength, chainLengthRange := p_chainLengthRange, eeType := p_eeType } // End of template m_psidGroupPermissions template (value) SubjectPermissions m_subjectPermissions_explicit( in template (value) SequenceOfPsidSspRange p_certIssuePermissions ) := { explicit := p_certIssuePermissions } // End of template m_subjectPermissions_explicit template (value) SubjectPermissions m_subjectPermissions_all := { all_ := NULL } // End of template m_subjectPermissions_all } // End of group appPermissions group validityRestriction { template (value) ValidityPeriod m_validityPeriod( in template (value) Time32 p_start_, in template (value) Duration p_duration ) := { start_ := p_start_, duration := p_duration } // End of template m_validityPeriod template (present) ValidityPeriod mw_validityPeriod( template (present) Time32 p_start_ := ?, template (present) Duration p_duration := ? ) := { start_ := p_start_, duration := p_duration } // End of template mw_validityPeriod /** * @desc Send template for Duration (in seconds) * @param p_duration The duration value * @see Draft ETSI TS 103 097 V1.3.1 Clause 4.2.18 Duration */ template (value) Duration m_duration_in_seconds( in template (value) Int16 p_duration ) := { seconds := p_duration } // End of template m_duration_in_seconds /** * @desc Receive template for Duration (in seconds) * @param p_duration The duration value * @see Draft ETSI TS 103 097 V1.3.1 Clause 4.2.18 Duration */ template (present) Duration mw_duration_in_seconds( template (present) Int16 p_duration := ? ) := { seconds := p_duration } // End of template mw_duration_in_seconds template (value) Duration m_duration_years( in template (value) Uint16 p_years ) := { years := p_years } // End of template m_duration_years template (present) Duration mw_duration_years( template (present) Uint16 p_years := ? ) := { years := p_years } // End of template mw_duration_years } // End of group validityRestriction group ssp { group sspCam { group sspCamSend { template (value) SspCAM m_sspCAMContainer_sign_all := { cenDsrcTollingZone := '1'B, publicTransport := '1'B, specialTransport := '1'B, dangerousGoods := '1'B, roadwork := '1'B, rescue := '1'B, emergency := '1'B, safetyCar := '1'B, closedLanes := '1'B, requestForRightOfWay := '1'B, requestForFreeCrossingAtATrafficLight := '1'B, noPassing := '1'B, noPassingForTrucks := '1'B, speedLimit := '1'B, reserved := '000000000000000000'B } // End of template m_sspCAMContainer_sign_all template (value) SspCAM m_sspCAMContainer_vehicle modifies m_sspCAMContainer_sign_all := { cenDsrcTollingZone := '0'B, closedLanes := '0'B, noPassing := '0'B, noPassingForTrucks := '0'B, speedLimit := '0'B } // End of template m_sspCAMContainer_vehicle template (value) ServiceSpecificPermissions m_sspCAM( in template (value) BitmapSsp p_bitmapSsp ) := { bitmapSsp := p_bitmapSsp } // End of template m_sspCAM } // End of group sspCamSend group sspCamRecv { template (present) SspCAM mw_sspCAMContainer_dummy := { cenDsrcTollingZone := ?, publicTransport := ?, specialTransport := ?, dangerousGoods := ?, roadwork := ?, rescue := ?, emergency := ?, safetyCar := ?, closedLanes := ?, requestForRightOfWay := ?, requestForFreeCrossingAtATrafficLight := ?, noPassing := ?, noPassingForTrucks := ?, speedLimit := ?, reserved := '000000000000000000'B } // End of template mw_sspCAMContainer_dummy template (present) ServiceSpecificPermissions mw_sspCAM_dummy := { bitmapSsp := ? } // End of template mw_sspCAM_dummy } // End of group sspCamRecv } // End of group sspCam group sspDenm { group sspDenmSend { template (value) SspDENM m_sspDENMContainer_sign_all := { trafficCondition := '1'B, accident := '1'B, roadworks := '1'B, adverseWeatherCondition_Adhesion := '1'B, hazardousLocation_SurfaceCondition := '1'B, hazardousLocation_ObstacleOnTheRoad := '1'B, hazardousLocation_AnimalOnTheRoad := '1'B, humanPresenceOnTheRoad := '1'B, wrongWayDriving := '1'B, rescueAndRecoveryWorkInProgress := '1'B, adverseWeatherCondition_ExtremeWeatherCondition := '1'B, adverseWeatherCondition_Visibility := '1'B, adverseWeatherCondition_Precipitation := '1'B, slowVehicle := '1'B, dangerousEndOfQueue := '1'B, vehicleBreakdown := '1'B, postCrash := '1'B, humanProblem := '1'B, stationaryVehicle := '1'B, emergencyVehicleApproaching := '1'B, hazardousLocation_DangerousCurve := '1'B, collisionRisk := '1'B, signalViolation := '1'B, dangerousSituation := '1'B, reserved := '00000000'B } // End of template m_sspDENMContainer_sign_all template (value) SspDENM m_sspDENMContainer_vehicle modifies m_sspDENMContainer_sign_all:= { trafficCondition := '0'B, accident := '0'B, roadworks := '0'B, adverseWeatherCondition_Adhesion := '0'B, hazardousLocation_SurfaceCondition := '0'B, hazardousLocation_ObstacleOnTheRoad := '0'B, hazardousLocation_AnimalOnTheRoad := '0'B, slowVehicle := '0'B, dangerousEndOfQueue := '0'B, vehicleBreakdown := '0'B, stationaryVehicle := '0'B } // End of template m_sspDENMContainer_sign_all template (value) SspDENM m_sspDENMContainer_roadSideUnit modifies m_sspDENMContainer_sign_all:= { trafficCondition := '0'B, accident := '0'B, roadworks := '0'B, adverseWeatherCondition_Adhesion := '0'B, hazardousLocation_SurfaceCondition := '0'B, hazardousLocation_ObstacleOnTheRoad := '0'B, hazardousLocation_AnimalOnTheRoad := '0'B, humanPresenceOnTheRoad := '0'B, wrongWayDriving := '0'B, rescueAndRecoveryWorkInProgress := '0'B, adverseWeatherCondition_ExtremeWeatherCondition := '0'B, adverseWeatherCondition_Visibility := '0'B, adverseWeatherCondition_Precipitation := '0'B, postCrash := '0'B, humanProblem := '0'B, stationaryVehicle := '0'B, hazardousLocation_DangerousCurve := '0'B, collisionRisk := '0'B, dangerousSituation := '0'B } // End of template m_sspDENMContainer_roadSideUnit template (value) ServiceSpecificPermissions m_sspDENM( in template (value) BitmapSsp p_bitmapSsp ) := { bitmapSsp := p_bitmapSsp } // End of template m_sspDENM } // End of group sspDenmSend group sspDenmRecv { template (present) SspDENM mw_sspDENMContainer_dummy := { trafficCondition := ?, accident := ?, roadworks := ?, adverseWeatherCondition_Adhesion := ?, hazardousLocation_SurfaceCondition := ?, hazardousLocation_ObstacleOnTheRoad := ?, hazardousLocation_AnimalOnTheRoad := ?, humanPresenceOnTheRoad := ?, wrongWayDriving := ?, rescueAndRecoveryWorkInProgress := ?, adverseWeatherCondition_ExtremeWeatherCondition := ?, adverseWeatherCondition_Visibility := ?, adverseWeatherCondition_Precipitation := ?, slowVehicle := ?, dangerousEndOfQueue := ?, vehicleBreakdown := ?, postCrash := ?, humanProblem := ?, stationaryVehicle := ?, emergencyVehicleApproaching := ?, hazardousLocation_DangerousCurve := ?, collisionRisk := ?, signalViolation := ?, dangerousSituation := ?, reserved := '00000000'B } // End of template mw_sspDENMContainer_dummy template (present) SspDENM mw_sspDENMContainer_vehicle modifies mw_sspDENMContainer_dummy := { trafficCondition := '0'B, accident := '0'B, roadworks := '0'B, adverseWeatherCondition_Adhesion := '0'B, hazardousLocation_SurfaceCondition := '0'B, hazardousLocation_ObstacleOnTheRoad := '0'B, hazardousLocation_AnimalOnTheRoad := '0'B, slowVehicle := '0'B, dangerousEndOfQueue := '0'B, vehicleBreakdown := '0'B, stationaryVehicle := '0'B } // End of template mw_sspDENMContainer_vehicle template (present) SspDENM mw_sspDENMContainer_roadSideUnit modifies mw_sspDENMContainer_dummy := { trafficCondition := '0'B, accident := '0'B, roadworks := '0'B, adverseWeatherCondition_Adhesion := '0'B, hazardousLocation_SurfaceCondition := '0'B, hazardousLocation_ObstacleOnTheRoad := '0'B, hazardousLocation_AnimalOnTheRoad := '0'B, humanPresenceOnTheRoad := '0'B, wrongWayDriving := '0'B, rescueAndRecoveryWorkInProgress := '0'B, adverseWeatherCondition_ExtremeWeatherCondition := '0'B, adverseWeatherCondition_Visibility := '0'B, adverseWeatherCondition_Precipitation := '0'B, postCrash := '0'B, humanProblem := '0'B, stationaryVehicle := '0'B, hazardousLocation_DangerousCurve := '0'B, collisionRisk := '0'B, dangerousSituation := '0'B } // End of template m_sspDENMContainer_roadSideUnit } // End of group sspDenmRecv } // End of group sspDenm } // End of group ssp group utPrimitives { template UtGnInitialize m_secGnInitialize( in Oct8 p_hashedId8 ) := { hashedId8 := p_hashedId8 } // End of template m_secGnInitialize } // End of group utPrimitives } // End of module LibItsSecurity_Templates