Newer
Older
/**
* @author ETSI / STF481
* @version $URL$
* $Id$
* @desc Module containing templates for Security Protocol
*
*/
module LibItsSecurity_Templates {
// LibCommon
import from LibCommon_BasicTypesAndValues {
type
UInt8,
Int32
}
import from LibCommon_DataStrings {
type
Oct2
// 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 algorithms {
/**
* @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
* @desc Generic 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 := {
algorithm := e_ecdsa_nistp256_with_sha256,
field_size := f_int2UInt8(1 + lengthof(PX_ECDSA_S)),
r := m_eccPoint_dummy,
s := PX_ECDSA_S
} // End of template m_ecdsaSignature
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
} // 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
* @desc Dummy send template for PublicKey/EccPoint
*/
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
*/
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
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
/**
* @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
} // 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
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
343
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
/**
* @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 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 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 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(
in template (present) Int32 p_latitude,
in template (present) Int32 p_longitude
) := {
latitude := p_latitude,
longitude := p_longitude
} // End of template mw_twoDLocation
/**
* @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 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 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_signerInfo_dummy },
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_signerInfo_dummy },
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_signerInfo_dummy },
payload_fields := { },
trailer_fields := { }
} // End of template m_secureMessageCAMs_dummy
group headerFields {
template (value) HeaderField m_header_field_signerInfo_dummy := {
type_ := e_signer_info,
headerField := m_header_field_container_dummy
} // End of template m_header_field_signerInfo_dummy
template (value) HeaderFieldContainer m_header_field_container_dummy := {
signer := m_SignerInfo_self
} // End of template m_header_field_container_dummy
group payloads {
template (value) Payload m_payload_signed_dummy := {
type_ := e_signed,
data := m_data_payload_dummy
} // End of template m_payload_dummy
template (value) Payload m_payload_unsecured_dummy := {
type_ := e_unsecured,
data := m_data_payload_dummy
} // End of template m_payload_dummy
template (value) PayloadContainer m_data_payload_dummy := {
rawPayload := ''O
} // End of template m_data_payload_dummy
} // End of group payloads
group trailerFields {
template (value) TrailerField m_trailer_field_dummy := {
type_ := e_signature,
trailerField := m_trailer_field_container_dummy
} // End of template m_trailer_field_dummy
template (value) TrailerFieldContainer m_trailer_field_container_dummy := {
security_field := ''O
} // End of template m_trailer_field_container_dummy
} // End of group trailerFields
} // 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) Payload mw_signedPayload_dummy := {
} // End of template mw_signedPayload_dummy
/**
* @desc Generic received template for SecuredMessage
*/
template (present) Payload mw_unsecuredPayload_dummy := {
} // End of template mw_unsecuredPayload_dummy
} // End of group dummyMessagesRecv
} // End of group dummyMessages
* @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
) // End of field signature_
} // 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
/**
*/
/**
*/
group securityProfilesCAMs {
/**
*/
group securityProfilesCAMsSend {
/**
*/
template (value) SecuredMessage md_secureMessageCAMs(
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
template (value) HeaderField m_header_field_signerInfo_ecdsa(
in template (value) SignerInfo p_signerInfo
) modifies m_header_field_signerInfo_dummy := {
headerField := {
signer := p_signerInfo
}
} // End of template m_header_field_signerInfo_ecdsa
} // End of group securityProfilesCAMsSend
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
security_profile := ?,
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 {
function f_int2UInt8(in integer p_value) return UInt8 {
return p_value;
}
}