Newer
Older
/**
* @author ETSI / STF481
* @version $URL$
* $Id$
* @desc Module containing templates for Security Protocol
*
*/
module LibItsSecurity_Templates {
// LibCommon
import from LibCommon_BasicTypesAndValues {
type
// // LibIts
// import from CAM_PDU_Descriptions language "ASN.1:1997" {
// type CAM
// }
// import from DENM_PDU_Descriptions language "ASN.1:1997" {
// type DENM
// }
//
// LibItsSecurity
import from LibItsSecurity_TypesAndValues all;
import from LibItsSecurity_Pixits all;
template (value) GnSecurityReq m_gnSecurityReq(
in template (value) SecuredMessage p_msgReq
) := {
msgReq := p_msgReq
} // End of template m_gnSecurityReq
template (present) GnSecurityInd mw_gnSecurityInd(
in template (present) SecuredMessage p_msgInd
) := {
msgInd := p_msgInd
} // End of template mw_gnSecurityIng
group constants {
/**
* @desc Protocol version
* @see Draft ETSI TS 103 097 V1.1.6 Clause 5.1 SecuredMessage
*/
const UInt8 c_protocol_version := 2;
/**
* @desc Security profile identifier for CAMs
* @see Draft ETSI TS 103 097 V1.1.6 Clause 7.1 Security profile for CAMs
*/
const UInt8 c_security_profileCAMs := 1;
/**
* @desc Security profile identifier for DENMs
* @see Draft ETSI TS 103 097 V1.1.6 Clause 7.2 Security profile for DENMs
*/
const UInt8 c_security_profileDENMs := 2;
/**
* @desc Security profile identifier for other messages
* @see Draft ETSI TS 103 097 V1.1.6 Clause 7.3 Generic security profile for other signed messages
*/
const UInt8 c_security_profileOthers := 3;
* @desc Certificate version
* @see Draft ETSI TS 103 097 V1.1.6 Clause 6.1 Certificate
* @desc Dummy send/receive templates for security headers
* @see Draft ETSI TS 103 097 V1.1.6 Clause 4 Basic format elements
* @desc Dummy send templates for security headers
* @see Draft ETSI TS 103 097 V1.1.6 Clause 4.2 Specification of basic format elements
group dummyAlgorithms {
/**
* @desc Generic send template for EccPoint description
* @see Draft ETSI TS 103 097 V1.1.6 Clause 4.2.5 EccPoint
* @see Draft ETSI TS 103 097 V1.1.6 Table 2: Derivation of field sizes depending on the used algorithm
*/
template (value) EccPoint m_eccPoint_dummy := {
field_size := f_int2UInt8(1 + lengthof(PX_ECDSA_X_COORDINATE)),
} // End of template m_eccPoint_dummy
/**
* @desc Generic send template for AES CCM description
* @see Draft ETSI TS 103 097 V1.1.6 Clause 4.2.5 EccPoint
* @see Draft ETSI TS 103 097 V1.1.6 Table 2: Derivation of field sizes depending on the used algorithm
*/
template (value) EccPoint m_aesccm_dummy := {
algorithm := e_ecies_nistp256,
field_size := f_int2UInt8(1 + lengthof(PX_AESCCM_X_COORDINATE)),
type_ := e_uncompressed,
x := PX_AESCCM_X_COORDINATE,
y := {
y := PX_AESCCM_Y_COORDINATE // WARNING siseof(y) == siseof(x)
} // End of template m_aesccm_dummy
/**
* @desc Generic send template for AES CCM encryption parameters
* @see Draft ETSI TS 103 097 V1.1.6 Clause 4.2.7 EncryptionParameters
template (value) EncryptionParameters m_encryptionParameters_dummy := {
symm_algorithm := e_aes_128_ccm,
public_key := {
nonce := PX_AESCCM_NONCE
}
} // End of template m_encryptionParameters_dummy
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
180
181
182
183
184
185
186
187
188
189
190
191
192
193
194
195
196
197
198
199
200
201
202
203
204
205
206
207
208
209
210
211
212
213
214
215
216
217
218
219
220
221
222
223
224
225
226
227
228
229
230
231
232
233
234
235
236
237
238
239
240
241
242
243
244
245
246
247
248
249
250
251
252
253
254
255
256
257
258
259
260
261
262
263
264
265
266
267
268
269
270
271
272
} // End of group dummyAlgorithms
/**
* @desc Dummy send template for PublicKey/EccPoint
* @see Draft ETSI TS 103 097 V1.1.6 Clause 4.2.4 PublicKey
*/
template (value) PublicKey m_publicKey_eccPoint_dummy := {
algorithm := e_ecdsa_nistp256_with_sha256,
public_key := {
eccPoint := m_eccPoint_dummy
} // End of field public_key
} // End of template PublicKey
/**
* @desc Dummy send template for PublicKey/AES CCM
* @see Draft ETSI TS 103 097 V1.1.6 Clause 4.2.4 PublicKey
*/
template (value) PublicKey m_publicKey_aesccm_dummy := {
algorithm := e_ecies_nistp256,
public_key := {
aesCcm := {
supported_symm_alg := e_aes_128_ccm,
eccPoint := m_aesccm_dummy
} // End of field aesCcm
} // End of field public_key
} // End of template m_publicKey_aesccm_dummy
} // End of group dummyBasicFormatElementsSend
/**
* @desc Dummy receive templates for security headers
* @see Draft ETSI TS 103 097 V1.1.6 Clause 4.2 Specification of basic format elements
*/
group dummyBasicFormatElementsRecv {
/**
* @desc Dummy receive template for PublicKey/EccPoint
* @see Draft ETSI TS 103 097 V1.1.6 Clause 4.2.4 PublicKey
*/
template (present) PublicKey mw_publicKey_eccPoint_dummy := {
algorithm := e_ecdsa_nistp256_with_sha256,
public_key := {
eccPoint := ?
} // End of field public_key
} // End of template PublicKey
/**
* @desc Dummy send template for PublicKey/AES CCM
* @see Draft ETSI TS 103 097 V1.1.6 Clause 4.2.4 PublicKey
*/
template (present) PublicKey mw_publicKey_aesccm_dummy := {
algorithm := e_ecies_nistp256,
public_key := {
aesCcm := ?
} // End of field public_key
} // End of template m_publicKey_aesccm_dummy
/**
* @desc Dummy receive template for Time64WithStandardDeviation
* @see Draft ETSI TS 103 097 V1.1.6 Clause 4.2.17 Time64WithStandardDeviation
*/
template (present) Time64WithStandardDeviation mw_time64WithStandardDeviation_dummy := {
time := ?,
log_std_dev := ?
} // End of template mw_time64WithStandardDeviation_dummy
/**
* @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.1.6 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.1.6 Clause 4.2.20 ThreeDLocation
*/
template (present) ThreeDLocation mdw_threeDLocation_dummy := {
latitude := ?,
longitude := ?,
elevation := ?
} // End of template mdw_threeDLocation_dummy
/**
* @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.1.6 Clause 4.2.21 GeographicRegion
*/
template (present) GeographicRegion mw_geographicRegion_rectangle_dummy(
in template (present) TwoDLocation p_northwest,
in template (present) TwoDLocation p_southeast
) := {
region_type := e_rectangle,
region := {
rectangular_region := {
{
northwest := p_northwest,
southeast := p_southeast
}
} // End of field rectangular_region
} // End of field region
} // End of template mw_geographicRegion_rectangle_dummy
} // End of group dummyBasicFormatElementsRecv
} // End of group dummyBasicFormatElements
/**
* @desc Send/receive templates for security headers
* @see Draft ETSI TS 103 097 V1.1.6 Clause 4 Basic format elements
*/
group basicFormatElements {
/**
* @desc Send templates for security headers
* @see Draft ETSI TS 103 097 V1.1.6 Clause 4.2 Specification of basic format elements
*/
group basicFormatElementsSend {
/**
*/
group algorithms {
* @desc Send/receive templates for Signature description
* @see Draft ETSI TS 103 097 V1.1.6 Clause 4.2.5 EccPoint
* @see Draft ETSI TS 103 097 V1.1.6 Table 2: Derivation of field sizes depending on the used algorithm
template (value) Signature m_signature(
in template (value) EcdsaSignature p_ecdsaSignature
):= {
} // End of field signature_
} // End of template m_signature_ecdsa
template (value) EcdsaSignature m_ecdsaSignature(
in template (value) EccPoint p_r
) := {
algorithm := e_ecdsa_nistp256_with_sha256,
field_size := f_int2UInt8(1 + lengthof(PX_ECDSA_S)),
300
301
302
303
304
305
306
307
308
309
310
311
312
313
314
315
316
317
318
319
320
321
322
323
324
325
326
327
328
329
330
331
332
333
334
335
336
337
338
339
340
341
342
} // End of group signatures
group signerInfos {
/**
* @desc Send template for self signed message
*/
template (value) SignerInfo m_SignerInfo_self := {
type_ := e_self,
signerInfo := omit
} // End of template m_SignerInfo_self
/**
* @desc Send template for self signed message
*/
template (value) SignerInfo m_SignerInfo_digest(
in template (value) HashedId8 p_digest
) := {
type_ := e_certificate_digest_with_ecdsap256,
signerInfo := {
digest := p_digest
} // End of field signerInfo
} // End of template m_SignerInfo_digest
template (value) SignerInfo m_signerInfo_certificate(
in template (value) Certificate p_certificate
) := {
type_ := e_certificate,
signerInfo := {
certificate := p_certificate
} // End of field signerInfo
} // End of template m_signerInfo_certificate
template (value) SignerInfo m_signerInfo_certificates(
in template (value) CertificateChain p_certificates
) := {
type_ := e_certificate_chain,
signerInfo := {
certificates := p_certificates
} // End of field signerInfo
} // End of template m_signerInfo_certificates
} // End of group signerInfos
344
345
346
347
348
349
350
351
352
353
354
355
356
357
358
359
360
361
362
363
364
365
366
367
368
369
370
371
372
373
374
375
376
377
378
379
380
381
382
383
384
385
386
387
388
/**
* @desc Send template for Time64WithStandardDeviation
* @param p_time TODO
* @param p_log_std_dev TODO
* @see Draft ETSI TS 103 097 V1.1.6 Clause 4.2.17 Time64WithStandardDeviation
*/
template (value) Time64WithStandardDeviation m_time64WithStandardDeviation(
in template (value) Time64 p_time,
in template (value) UInt8 p_log_std_dev
) := {
time := p_time,
log_std_dev := p_log_std_dev
} // End of template m_time64WithStandardDeviation
/**
* @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.1.6 Clause 4.2.19 TwoDLocation
*/
template (value) TwoDLocation m_twoDLocation(
in template (value) Int32 p_latitude,
in template (value) Int32 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.1.6 Clause 4.2.20 ThreeDLocation
*/
template (value) ThreeDLocation m_threeDLocation(
in template (value) Int32 p_latitude,
in template (value) Int32 p_longitude,
in template (value) Oct2 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.1.6 Clause 4.2.21 GeographicRegion
*/
template (value) GeographicRegion m_geographicRegion_circle(
in template (value) TwoDLocation p_center,
in template (value) UInt16 p_radius
region_type := e_circle,
region := {
circular_region := {
center := p_center,
radius := p_radius
} // End of field circular_region
} // End of field region
} // 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.1.6 Clause 4.2.21 GeographicRegion
*/
template (value) GeographicRegion m_geographicRegion_rectangle(
in template (value) TwoDLocation p_northwest,
in template (value) TwoDLocation p_southeast
region_type := e_rectangle,
region := {
rectangular_region := {
{
northwest := p_northwest,
southeast := p_southeast
}
} // End of field rectangular_region
} // End of field region
} // 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.1.6 Clause 4.2.21 GeographicRegion
*/
template (value) GeographicRegion m_geographicRegion_polygonial(
in template (value) PolygonalRegion p_polygonal_region
region_type := e_polygon,
region := {
polygonal_region := p_polygonal_region
} // End of field region
} // End of template m_geographicRegion_polygonial
/**
* @desc Send template for geographic identified region
* @param p_id_region Indentified region
* @see Draft ETSI TS 103 097 V1.1.6 Clause 4.2.21 GeographicRegion
*/
template (value) GeographicRegion m_geographicRegion_identifiedRegion(
in template (value) IdentifiedRegion p_id_region
) := {
region_type := e_id,
} // End of template m_geographicRegion_identifiedRegion
/**
* @desc Send template for not specified geographic region
* @param p_id_region Indentified region
* @see Draft ETSI TS 103 097 V1.1.6 Clause 4.2.21 GeographicRegion
*/
template (value) GeographicRegion m_geographicRegion_nonce := {
region_type := e_none,
region := omit
} // End of template m_geographicRegion_nonce
} // End of group basicFormatElementsSend
* @desc Receive templates for security headers
* @see Draft ETSI TS 103 097 V1.1.6 Clause 4.2 Specification of basic format elements
*/
group basicFormatElementsRecv {
/**
* @desc Receive template for Time64WithStandardDeviation
* @see Draft ETSI TS 103 097 V1.1.6 Clause 4.2.17 Time64WithStandardDeviation
*/
template (present) Time64WithStandardDeviation mw_time64WithStandardDeviation(
in template (present) Time64 p_time,
in template (present) UInt8 p_log_std_dev
) := {
time := p_time,
log_std_dev := p_log_std_dev
} // End of template mw_time64WithStandardDeviation
/**
* @desc Receive template for TwoDLocation
489
490
491
492
493
494
495
496
497
498
499
500
501
502
503
504
505
506
507
508
509
510
511
512
513
514
515
516
517
* @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.1.6 Clause 4.2.19 TwoDLocation
*/
template (present) TwoDLocation mw_twoDLocation(
in template (present) Int32 p_latitude,
in template (present) Int32 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.1.6 Clause 4.2.20 ThreeDLocation
*/
template (present) ThreeDLocation mw_threeDLocation(
in template (present) Int32 p_latitude,
in template (present) Int32 p_longitude,
in template (present) Oct2 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.1.6 Clause 4.2.21 GeographicRegion
*/
template (present) GeographicRegion mw_geographicRegion_circle(
in template (present) TwoDLocation p_center,
in template (present) UInt16 p_radius
region_type := e_circle,
region := {
circular_region := {
center := p_center,
radius := p_radius
} // End of field circular_region
} // End of field region
} // End of template mw_geographicRegion_circle
/**
* @desc Receive template polygonial geographic region
* @param p_polygonal_region Polygonial region description
* @see Draft ETSI TS 103 097 V1.1.6 Clause 4.2.21 GeographicRegion
*/
template (present) GeographicRegion mw_geographicRegion_polygonial(
in template (present) PolygonalRegion p_polygonal_region
region_type := e_polygon,
region := {
polygonal_region := p_polygonal_region
} // End of field region
} // End of template mw_geographicRegion_polygonial
/**
* @desc Receive template for geographic identified region
* @param p_id_region Indentified region
* @see Draft ETSI TS 103 097 V1.1.6 Clause 4.2.21 GeographicRegion
*/
template (present) GeographicRegion mww_geographicRegion_identifiedRegion(
in template (present) IdentifiedRegion p_id_region
) := {
region_type := e_id,
region := {
id_region := p_id_region
} // End of field region
} // End of template mw_geographicRegion_identifiedRegion
/**
* @desc Receive template for not specified geographic region
* @param p_id_region Indentified region
* @see Draft ETSI TS 103 097 V1.1.6 Clause 4.2.21 GeographicRegion
*/
template (present) GeographicRegion mw_geographicRegion_nonce := {
region_type := e_none,
} // End of template mw_geographicRegion_nonce
} // End of group basicFormatElementsRecv
* @desc Dummy send/receive templates for security headers
* @see Draft ETSI TS 103 097 V1.1.6 Clause 5 Specification of security header
* @desc Dummy send templates for security headers
* @see Draft ETSI TS 103 097 V1.1.6 Clause 5 Specification of security header
*/
group dummyMessagesSend {
/**
* @desc Generic send template for Security profile for CAMs
* @see Draft ETSI TS 103 097 V1.1.6 Clause 7.1 Security profile for CAMs
*/
template (value) SecuredMessage m_secureMessageCAMs_dummy := {
protocol_version := c_protocol_version,
security_profile := c_security_profileCAMs,
header_fields := {
m_header_field_signer_info(
m_SignerInfo_self
)
},
payload_fields := { },
trailer_fields := { }
} // End of template m_secureMessageCAMs_dummy
/**
* @desc Generic send template for Security profile for DENMs
* @see Draft ETSI TS 103 097 V1.1.6 Clause 7.2 Security profile for DENMs
*/
template (value) SecuredMessage m_secureMessageDENMs_dummy := {
protocol_version := c_protocol_version,
security_profile := c_security_profileDENMs,
header_fields := {
m_header_field_signer_info(
m_SignerInfo_self
)
},
payload_fields := { },
trailer_fields := { }
} // End of template m_secureMessageDENMs_dummy
/**
* @desc Generic send template for Security profile for other messages
* @see Draft ETSI TS 103 097 V1.1.6 Clause 7.3 Generic security profile for other signed messages
*/
template (value) SecuredMessage m_secureMessageOthers_dummy := {
protocol_version := c_protocol_version,
security_profile := c_security_profileOthers,
header_fields := {
m_header_field_signer_info(
m_SignerInfo_self
)
},
payload_fields := { },
trailer_fields := { }
} // End of template m_secureMessageCAMs_dummy
} // End of group dummyMessagesSend
/**
* @desc Dummy receive templates for security headers
* @see Draft ETSI TS 103 097 V1.1.6 Clause 5 Specification of security header
group dummyMessagesRecv {
/**
* @desc Generic received template for SecuredMessage
*/
template (present) SecuredMessage mw_securedMessage_dummy := {
protocol_version := c_protocol_version,
security_profile := ?,
header_fields := ?,
payload_fields := ?,
trailer_fields := ?
} // End of template mw_securedMessage_dummy
/**
* @desc Generic received template for SecuredMessage
*/
template (present) SecuredMessage mdw_securedMessageCAMs_dummy
modifies mw_securedMessage_dummy := {
security_profile := c_security_profileCAMs
} // End of template mdw_securedMessageCAMs_dummy
/**
* @desc Generic received template for SecuredMessage
*/
template (present) SecuredMessage mdw_securedMessageDENMs_dummy
modifies mw_securedMessage_dummy := {
security_profile := c_security_profileDENMs
} // End of template mdw_securedMessageDENMs_dummy
/**
* @desc Generic received template for SecuredMessage
*/
template (present) SecuredMessage mdw_securedMessageOthers_dummy
modifies mw_securedMessage_dummy := {
security_profile := c_security_profileOthers
} // End of template mdw_securedMessageOthers_dummy
/**
* @desc Generic received template for SecuredMessage
*/
template (present) Payload mw_signedPayload_dummy := {
} // End of group dummyMessagesRecv
group dummyPayloads {
* @desc Generic received template for unsecured payload
*/
template (present) Payload mw_unsecuredPayload_dummy := {
} // End of template mw_unsecuredPayload_dummy
/**
* @desc Generic received template for secured payload
*/
706
707
708
709
710
711
712
713
714
715
716
717
718
719
720
721
722
723
724
725
726
727
728
729
730
731
732
733
734
735
736
737
738
739
740
741
742
743
744
745
746
747
748
749
750
751
752
753
754
755
756
template (present) Payload mw_data_payload_dummmy := {
type_ := ?,
data := ?
} // End of template mw_data_payload_dummmy
} // End of group payloads
group dummyEciesEncryptedKey {
group dummyEciesEncryptedKeyRecv {
/**
* @desc Basic receive template for an ECIES-encrypted symmetric key as defined in IEEE Std 1363a 2004
* @see Draft ETSI TS 103 097 V1.1.6 Clause 5.9 EciesEncryptedKey
*/
template (present) EciesEncryptedKey mw_eciesEncryptedKey_dummy := {
symm_alg := ?,
symm_key_len := ?,
v := ?,
c := ?,
t := ?
} // End of template mw_eciesEncryptedKey_dummy
} // End of group dummyEciesEncryptedKeyRecv
} // End of group dummyEciesEncryptedKey
} // End of group dummyMessages
/**
* @desc Send/receive templates for security headers
* @see Draft ETSI TS 103 097 V1.1.6 Clause 5 Specification of security header
*/
group messages {
/**
* @desc Send templates for security headers
* @see Draft ETSI TS 103 097 V1.1.6 Clause 5 Specification of security header
*/
group messagesSend {
} // End of group messagesSend
/**
* @desc Receive templates for security headers
* @see Draft ETSI TS 103 097 V1.1.6 Clause 5 Specification of security header
*/
group messagesRecv {
} // End of group messagesRecv
/**
* @desc Send template for 'signed_external' Payload
* @see Draft ETSI TS 103 097 V1.1.6 Clause 5.2 Payload
*/
template (value) Payload m_payload_signed_external := {
type_ := e_signed_external,
data := omit
} // End of template m_payload_signed_external
template (value) Payload m_data_payload(
in template (value) PayloadType p_type,
in template (value) octetstring p_data
data := p_data
} // End of template m_data_payload
776
777
778
779
780
781
782
783
784
785
786
787
788
789
790
791
792
793
794
795
796
797
798
799
800
801
802
803
804
805
806
807
808
809
810
811
812
813
814
815
816
817
818
819
820
821
822
823
824
825
826
827
828
829
830
831
832
833
834
835
836
837
838
839
840
841
842
843
844
845
846
847
848
849
850
851
852
853
854
855
856
857
858
859
860
861
862
863
864
865
866
867
868
869
870
871
872
873
874
875
876
877
878
879
880
881
882
883
884
885
886
887
888
889
890
891
892
893
894
895
896
897
898
899
900
901
902
903
904
905
906
907
// group camPayloads {
//
// group camPayloadsSend {
//
// template (value) Payload m_payload_unsecured_cam(
// in template (value) CAM p_camPayload
// ) := {
// type_ := e_unsecured,
// data := {
// camPayload := p_camPayload
// } // End of field data
// } // End of template m_payload_unsecured_cam
//
// template (value) Payload md_payload_signed_cam(
// in template (value) CAM p_camPayload
// ) modifies m_payload_unsecured_cam := {
// type_ := e_signed
// } // End of template md_payload_signed_cam
//
// template (value) Payload md_payload_encrypted_cam(
// in template (value) CAM p_camPayload
// ) modifies m_payload_unsecured_cam := {
// type_ := e_encrypted
// } // End of template md_payload_encrypted_cam
//
// template (value) Payload md_payload_signed_encrypted_cam(
// in template (value) CAM p_camPayload
// ) modifies m_payload_unsecured_cam := {
// type_ := e_signed_and_encrypted
// } // End of template md_payload_signed_encrypted_cam
//
// template (present) Payload mw_payload_unsecured_cam(
// in template (present) CAM p_camPayload
// ) := {
// type_ := e_unsecured,
// data := {
// camPayload := p_camPayload
// } // End of field data
// } // End of template mw_payload_unsecured_cam
//
// } // End of group camPayloadsSend
//
// group camPayloadsRecv {
//
// template (present) Payload mdw_payload_signed_cam(
// in template (present) CAM p_camPayload
// ) modifies mw_payload_unsecured_cam := {
// type_ := e_signed
// } // End of template mdw_payload_signed_cam
//
// template (present) Payload mdw_payload_encrypted_cam(
// in template (present) CAM p_camPayload
// ) modifies mw_payload_unsecured_cam := {
// type_ := e_encrypted
// } // End of template mdw_payload_encrypted_cam
//
// template (present) Payload mdw_payload_signed_encrypted_cam(
// in template (present) CAM p_camPayload
// ) modifies mw_payload_unsecured_cam := {
// type_ := e_signed_and_encrypted
// } // End of template mdw_payload_signed_encrypted_cam
//
// } // End of group camPayloadsRecv
//
// } // End of group camPayloads
//
// group denmPayloads {
//
// group denmPayloadsSend {
//
// template (value) Payload m_payload_unsecured_denm(
// in template (value) DENM p_denmPayload
// ) := {
// type_ := e_unsecured,
// data := {
// denmPayload := p_denmPayload
// } // End of field data
// } // End of template m_payload_unsecured_denm
//
// template (value) Payload md_payload_signed_denm(
// in template (value) DENM p_denmPayload
// ) modifies m_payload_unsecured_denm := {
// type_ := e_signed
// } // End of template md_payload_signed_denm
//
// template (value) Payload md_payload_encrypted_denm(
// in template (value) DENM p_denmPayload
// ) modifies m_payload_unsecured_denm := {
// type_ := e_encrypted
// } // End of template md_payload_encrypted_denm
//
// template (value) Payload md_payload_signed_encrypted_denm(
// in template (value) DENM p_denmPayload
// ) modifies m_payload_unsecured_denm := {
// type_ := e_signed_and_encrypted
// } // End of template md_payload_signed_encrypted_denm
//
// } // End of group denmPayloadsSend
//
// group denmPayloadsRecv {
//
// template (present) Payload mw_payload_unsecured_denm(
// in template (present) DENM p_denmPayload
// ) := {
// type_ := e_unsecured,
// data := {
// denmPayload := p_denmPayload
// } // End of field data
// } // End of template mw_payload_unsecured_denm
//
// template (present) Payload mdw_payload_signed_denm(
// in template (present) DENM p_denmPayload
// ) modifies mw_payload_unsecured_denm := {
// type_ := e_signed
// } // End of template mdw_payload_signed_denm
//
// template (present) Payload mdw_payload_encrypted_denm(
// in template (present) DENM p_denmPayload
// ) modifies mw_payload_unsecured_denm := {
// type_ := e_encrypted
// } // End of template mdw_payload_encrypted_denm
//
// template (present) Payload mdw_payload_signed_encrypted_denm(
// in template (present) DENM p_denmPayload
// ) modifies mw_payload_unsecured_denm := {
// type_ := e_signed_and_encrypted
// } // End of template mdw_payload_signed_encrypted_denm
//
// } // End of group denmPayloadsRecv
//
// } // End of group denmPayloads
//
908
909
910
911
912
913
914
915
916
917
918
919
920
921
922
923
924
925
926
927
928
929
930
931
932
933
934
935
936
937
938
939
940
941
942
943
944
945
946
947
948
949
950
951
952
953
954
955
956
957
958
959
960
961
962
963
964
965
966
967
968
969
} // End of group payloads
group headerFields {
group headerFieldsSend {
/**
* @desc Send template for HeaderField with generation time information
* @see Draft ETSI TS 103 097 V1.1.6 Clause 5.4 HeaderField
*/
template (value) HeaderField m_header_field_generation_time(
in template (value) Time64 p_generation_time
) := {
type_ := e_generation_time,
headerField := {
generation_time := p_generation_time
}
} // End of template m_header_field_generation_time
/**
* @desc Send template for HeaderField with generation time and standard deviation information
* @see Draft ETSI TS 103 097 V1.1.6 Clause 5.4 HeaderField
*/
template (value) HeaderField m_header_field_generation_time_with_standard_deviation(
in template (value) Time64WithStandardDeviation p_generation_time_with_standard_deviation
) := {
type_ := e_generation_time_standard_deviation,
headerField := {
generation_time_with_standard_deviation := p_generation_time_with_standard_deviation
}
} // End of template m_header_field_generation_time_with_standard_deviation
/**
* @desc Send template for HeaderField with expiration time information
* @see Draft ETSI TS 103 097 V1.1.6 Clause 5.4 HeaderField
*/
template (value) HeaderField m_header_field_expiry_time(
in template (value) Time32 p_expiry_time
) := {
type_ := e_expiration,
headerField := {
expiry_time := p_expiry_time
}
} // End of template m_header_field_expiry_time
/**
* @desc Send template for HeaderField with generation location information
* @see Draft ETSI TS 103 097 V1.1.6 Clause 5.4 HeaderField
*/
template (value) HeaderField m_header_field_generation_location(
in template (value) ThreeDLocation p_generation_location
) := {
type_ := e_generation_location,
headerField := {
generation_location := p_generation_location
}
} // End of template m_header_field_generation_location
/**
* @desc Send template for HeaderField with generation location information
* @see Draft ETSI TS 103 097 V1.1.6 Clause 5.4 HeaderField
*/
template (value) HeaderField m_header_field_digest(
in template (value) HashedId3 p_digest
) := {
type_ := e_request_unrecognized_certificate,
headerField := {
digests := { p_digest }
}
} // End of template m_header_field_digest
/**
* @desc Send template for HeaderField with generation location information
* @see Draft ETSI TS 103 097 V1.1.6 Clause 5.4 HeaderField
*/
template (value) HeaderField m_header_field_multiple_digests(
in template (value) HashedId3s p_digests
) := {
type_ := e_request_unrecognized_certificate,
headerField := {
digests := p_digests
}
} // End of template m_header_field_multiple_digests
991
992
993
994
995
996
997
998
999
1000
1001
1002
1003
1004
1005
1006
1007
1008
1009
1010
1011
1012
1013
1014
1015
1016
1017
1018
1019
1020
1021
1022
1023
1024
1025
1026
/**
* @desc Send template for HeaderField with generation location information
* @see Draft ETSI TS 103 097 V1.1.6 Clause 5.4 HeaderField
*/
template (value) HeaderField m_header_field_message_type(
in template (value) UInt16 p_message_type
) := {
type_ := e_message_type,
headerField := {
message_type := p_message_type
}
} // End of template m_header_field_message_type
/**
* @desc GSend template for HeaderField with signer information
* @see Draft ETSI TS 103 097 V1.1.6 Clause 5.4 HeaderField
*/
template (value) HeaderField m_header_field_signer_info(
in template (value) SignerInfo p_signer
) := {
type_ := e_signer_info,
headerField := {
signer := p_signer
}
} // End of template m_header_field_signerInfo_signer_info
/**
* @desc Send template for HeaderField with signer information
* @see Draft ETSI TS 103 097 V1.1.6 Clause 5.4 HeaderField
*/
template (value) HeaderField m_header_field_recipient(
in template (value) RecipientInfo p_recipient
) := {
type_ := e_recipient_info,
headerField := {
recipients := { p_recipient }
}
} // End of template m_header_field_recipient
/**
* @desc Send template for HeaderField with signer information
* @see Draft ETSI TS 103 097 V1.1.6 Clause 5.4 HeaderField
*/
template (value) HeaderField m_header_field_multiple_recipients(
in template (value) RecipientInfos p_recipients
) := {
type_ := e_recipient_info,
headerField := {
recipients := p_recipients
}
} // End of template m_header_field_multiple_recipients
1044
1045
1046
1047
1048
1049
1050
1051
1052
1053
1054
1055
1056
1057
1058
1059
1060
1061
1062
1063
1064
1065
1066
1067
1068
1069
1070
1071
1072
1073
1074
1075
1076
1077
1078
1079
1080
1081
1082
1083
1084
1085
1086
1087
1088
1089
1090
1091
1092
1093
1094
1095
1096
1097
1098
1099
1100
1101
1102
1103
1104
1105
1106
1107
1108
1109
1110
1111
1112
1113
1114
1115
1116
/**
* @desc Send template for HeaderField with signer information
* @see Draft ETSI TS 103 097 V1.1.6 Clause 5.4 HeaderField
*/
template (value) HeaderField m_header_field_enc_params(
in template (value) EncryptionParameters p_enc_params
) := {
type_ := e_encryption_parameters,
headerField := {
enc_params := p_enc_params
}
} // End of template m_header_field_enc_params
} // End of group headerFieldsSend
group headerFieldsRecv {
/**
* @desc Receive template for HeaderField with generation time information
* @see Draft ETSI TS 103 097 V1.1.6 Clause 5.4 HeaderField
*/
template (present) HeaderField mw_header_field_generation_time(
in template (present) Time64 p_generation_time
) := {
type_ := e_generation_time,
headerField := {
generation_time := p_generation_time
}
} // End of template mw_header_field_generation_time
/**
* @desc Receive template for HeaderField with generation time and standard deviation information
* @see Draft ETSI TS 103 097 V1.1.6 Clause 5.4 HeaderField
*/
template (present) HeaderField mw_header_field_generation_time_with_standard_deviation(
in template (present) Time64WithStandardDeviation p_generation_time_with_standard_deviation
) := {
type_ := e_generation_time_standard_deviation,
headerField := {
generation_time_with_standard_deviation := p_generation_time_with_standard_deviation
}
} // End of template mw_header_field_generation_time_with_standard_deviation
/**
* @desc Receive template for HeaderField with expiration time information
* @see Draft ETSI TS 103 097 V1.1.6 Clause 5.4 HeaderField
*/
template (present) HeaderField mw_header_field_expiry_time(
in template (present) Time32 p_expiry_time
) := {
type_ := e_expiration,
headerField := {
expiry_time := p_expiry_time
}
} // End of template mw_header_field_expiry_time
/**
* @desc Receive template for HeaderField with generation location information
* @see Draft ETSI TS 103 097 V1.1.6 Clause 5.4 HeaderField
*/
template (present) HeaderField mw_header_field_generation_location(
in template (present) ThreeDLocation p_generation_location
) := {
type_ := e_generation_location,
headerField := {
generation_location := p_generation_location
}
} // End of template mw_header_field_generation_location
/**
* @desc Receive template for HeaderField with generation location information
* @see Draft ETSI TS 103 097 V1.1.6 Clause 5.4 HeaderField
*/
template (present) HeaderField mw_header_field_multiple_digests(
in template (present) HashedId3s p_digests
) := {
type_ := e_request_unrecognized_certificate,
headerField := {
digests := p_digests
}
} // End of template mw_header_field_multiple_digests
1125
1126
1127
1128
1129
1130
1131
1132
1133
1134
1135
1136
1137
1138
1139
1140
1141
1142
1143
1144
1145
1146
1147
1148
1149
1150
1151
1152
1153
1154
1155
/**
* @desc Receive template for HeaderField with generation location information
* @see Draft ETSI TS 103 097 V1.1.6 Clause 5.4 HeaderField
*/
template (present) HeaderField mw_header_field_message_type(
in template (present) UInt16 p_message_type
) := {
type_ := e_message_type,
headerField := {
message_type := p_message_type
}
} // End of template mw_header_field_message_type
/**
* @desc Receive template for HeaderField with signer information
* @see Draft ETSI TS 103 097 V1.1.6 Clause 5.4 HeaderField
*/
template (present) HeaderField mw_header_field_signer_info(
in template (present) SignerInfo p_signer
) := {
type_ := e_signer_info,
headerField := {
signer := p_signer
}
} // End of template mw_header_field_signerInfo_signer_info
/**
* @desc Receive template for HeaderField with signer information
* @see Draft ETSI TS 103 097 V1.1.6 Clause 5.4 HeaderField
*/
template (value) HeaderField mw_header_field_multiple_recipients(
in template (value) RecipientInfos p_recipients
) := {
type_ := e_recipient_info,
headerField := {
recipients := p_recipients
} // End of template mw_header_field_multiple_recipients
1164
1165
1166
1167
1168
1169
1170
1171
1172
1173
1174
1175
1176
1177
1178
1179
1180
1181
1182
1183
1184
1185
1186
1187
1188
1189
1190
1191
1192
1193
1194
/**
* @desc Receive template for HeaderField with signer information
* @see Draft ETSI TS 103 097 V1.1.6 Clause 5.4 HeaderField
*/
template (present) HeaderField mw_header_field_enc_params(
in template (present) EncryptionParameters p_enc_params
) := {
type_ := e_encryption_parameters,
headerField := {
enc_params := p_enc_params
}
} // End of template mw_header_field_enc_params
} // End of group headerFieldsRecv
} // End of group headerFields
group trailerFields {
template (value) TrailerField m_trailer_field_signature(
in template (value) Signature p_signature
) := {
type_ := e_signature,
trailerField := {
signature_ := p_signature
}
} // End of template m_trailer_field_dummy
} // End of group trailerFields
1195
1196
1197
1198
1199
1200
1201
1202
1203
1204
1205
1206
1207
1208
1209
1210
1211
1212
1213
1214
1215
1216
1217
1218
1219
1220
1221
1222
1223
1224
1225
1226
1227
1228
1229
1230
1231
1232
1233
1234
1235
1236
1237
1238
1239
1240
1241
1242
1243
1244
1245
1246
1247
1248
1249
group recipientInfo {
template (value) RecipientInfo m_recipientInfo_ecies_enc_key(
in template (value) HashedId8 p_cert_id,
in template (value) PublicKeyAlgorithm p_pk_encryption,
in template (value) EciesEncryptedKey p_enc_key
) := {
cert_id := p_cert_id,
pk_encryption := p_pk_encryption,
enc_key := {
enc_key := p_enc_key
} // End of field enc_key
} // End of template m_recipientInfo_ecies_enc_key
template (value) RecipientInfo m_recipientInfo_other_enc_key(
in template (value) HashedId8 p_cert_id,
in template (value) PublicKeyAlgorithm p_pk_encryption,
in template (value) octetstring p_enc_key_other
) := {
cert_id := p_cert_id,
pk_encryption := p_pk_encryption,
enc_key := {
enc_key_other := p_enc_key_other
} // End of field enc_key
} // End of template m_recipientInfo_other_enc_key
} // End of group recipientInfo
group eciesEncryptedKey {
group eciesEncryptedKeySend {
/**
* @desc Send template for an ECIES-encrypted symmetric key as defined in IEEE Std 1363a 2004
* @param p_encrypted_key The encrypted (AES) key
* @param p_authentication_tag The authentication tag vector
* @see Draft ETSI TS 103 097 V1.1.6 Clause 5.9 EciesEncryptedKey
*/
template (value) EciesEncryptedKey m_eciesEncryptedKey_aesccm(
in template (value) EccPoint p_ecc_key,
in template (value) octetstring p_encrypted_key,
in template (value) Oct20 p_authentication_tag
) := {
symm_alg := e_aes_128_ccm,
symm_key_len := f_int2UInt32(1 + lengthof(p_encrypted_key)),
v := p_ecc_key,
c := p_encrypted_key,
t := p_authentication_tag
} // End of template m_eciesEncryptedKey_aesccm
} // End of group eciesEncryptedKeySend
} // End of group eciesEncryptedKey
} // End of group messages
* @desc Dummy send/receive templates for certificates
* @see Draft ETSI TS 103 097 V1.1.6 Clause 6 Specification of certificate format
*/
group dummyCertifices {
/**
* @desc Dummy send templates for certificates
* @see Draft ETSI TS 103 097 V1.1.6 Clause 6 Specification of certificate format
*/
group dummyCertificesSend {
/**
* @desc Dummy send certificate template
* @see Draft ETSI TS 103 097 V1.1.6 Clause 6.1 Certificate
*/
template (value) Certificate m_certificate_dummy := {
version := c_certificate_version,
subject_info := m_subject_info_dummy,
subject_attributes := { m_subject_attribute_dummy },
validity_restrictions := { m_validity_restriction_dummy },
signature_ :=
m_signature(
m_ecdsaSignature(
m_eccPoint_dummy
)
} // End of template m_certificate_dummy
template (value) SubjectInfo m_subject_info_dummy := {
subject_type := e_root_ca,
subject_name := ''O
} // End of template SubjectInfo
template (value) SubjectAttribute m_subject_attribute_dummy := {
type_ := e_verification_key,
attribute := {
key := m_publicKey_eccPoint_dummy
}
} // End of template m_subject_attribute_dummy
template (value) ValidityRestriction m_validity_restriction_dummy := {
type_ := e_time_end,
validity := {
end_validity := 0
}
} // End of template m_validity_dummy
} // End of group dummyCertificesSend
/**
* @desc Dummy receive templates for certificates
* @see Draft ETSI TS 103 097 V1.1.6 Clause 6 Specification of certificate format
*/
group dummyCertificesRecv {
/**
* @desc Dummy receive certificate template
* @see Draft ETSI TS 103 097 V1.1.6 Clause 6.1 Certificate
*/
template (present) Certificate mw_certificate_dummy := {
version := c_certificate_version,
signer_info := ?,
subject_info := ?,
subject_attributes := ?,
validity_restrictions := ?,
signature_ := ?
} // End of template mw_certificate_dummy
} // End of group dummyCertificesRecv
} // End of group dummyCertifices
1329
1330
1331
1332
1333
1334
1335
1336
1337
1338
1339
1340
1341
1342
1343
1344
1345
1346
1347
1348
1349
1350
1351
1352
/**
* @desc Send/receive templates for certificates
* @see Draft ETSI TS 103 097 V1.1.6 Clause 6 Specification of certificate format
*/
group certifices {
/**
* @desc Send templates for certificates
* @see Draft ETSI TS 103 097 V1.1.6 Clause 6 Specification of certificate format
*/
group certificesSend {
} // End of group certificesSend
/**
* @desc Receive templates for certificates
* @see Draft ETSI TS 103 097 V1.1.6 Clause 6 Specification of certificate format
*/
group certificesRecv {
} // End of group certificesRecv
} // End of group dummyCertifices
/**
*/
group securityProfilesCAMs {
/**
*/
group securityProfilesCAMsSend {
/**
* @desc Generic send template for Security profile for CAMs with a single payload
*/
template (value) SecuredMessage md_secureMessageCAMs(
in template (value) HeaderFields p_header_fields,
in template (value) Payload p_payload_fields,
in template (value) TrailerFields p_trailer_fields
) modifies m_secureMessageCAMs_dummy := {
security_profile := c_security_profileCAMs,
header_fields := p_header_fields,
payload_fields := { p_payload_fields },
trailer_fields := p_trailer_fields
} // End of template md_secureMessageCAMs
/**
* @desc Generic send template for Security profile for CAMs with several payloads
*/
template (value) SecuredMessage md_secureMessageCAMs_multiple_payloads(
in template (value) HeaderFields p_header_fields,
in template (value) Payloads p_payload_fields,
in template (value) TrailerFields p_trailer_fields
) modifies m_secureMessageCAMs_dummy := {
security_profile := c_security_profileCAMs,
header_fields := p_header_fields,
payload_fields := p_payload_fields,
trailer_fields := p_trailer_fields
} // End of template md_secureMessageCAMs
} // End of group securityProfilesCAMsSend
1395
1396
1397
1398
1399
1400
1401
1402
1403
1404
1405
1406
1407
1408
1409
1410
1411
1412
1413
1414
1415
1416
group securityProfilesCAMsRecv {
/**
* @desc Generic received template for Security profile for CAMs
*/
template (present) SecuredMessage mdw_secureMessageCAMs_dummy
modifies mw_securedMessage_dummy := {
security_profile := c_security_profileCAMs
} // End of template mw_securedMessage_dummy
/**
* @desc Generic received template for Security profile for CAMs
*/
template (present) SecuredMessage mdw_secureMessageCAMs
modifies mdw_secureMessageCAMs_dummy := { // TODO To be continued
header_fields := ?,
payload_fields := ?,
trailer_fields := ?
} // End of template mw_securedMessage_dummy
} // End of group mdw_secureMessageCAMs_dummy
} // End of group securityProfilesCAMs
group denmSecurityProfiles {
} // End of group denmSecurityProfiles
group otherSecurityProfiles {
} // End of group otherSecurityProfiles
} // End of group securityProfiles
group utPrimitives {
} // End of group utPrimitives
/**
* @desc Function helpers for static_cast<> operation (to reduce warning in TTWB)
*/
group typeConverters {
/**
* @desc Convert integer into UInt8
*/
function f_int2UInt8(in integer p_value) return UInt8 {
return p_value;
}
/**
* @desc Convert integer into UInt32
*/
function f_int2UInt32(in integer p_value) return UInt32 {
return p_value;
}