/** * @author ETSI / STF481 * @version $URL$ * $Id$ * @desc Module containing templates for Security Protocol * */ module LibItsSecurity_Templates { // LibCommon import from LibCommon_BasicTypesAndValues { type UInt8 } // 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.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 */ const UInt8 c_certificate_version := 2; } // End of group constants /** * @desc Dummy send/receive templates for security headers * @see Draft ETSI TS 103 097 V1.1.6 Clause 4 Basic format elements */ group dummyBasicFormatElements { /** * @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 dummyBasicFormatElementsSend { /** */ 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 := { algorithm := e_ecdsa_nistp256_with_sha256, field_size := f_int2UInt8(1 + lengthof(PX_ECDSA_X_COORDINATE)), type_ := e_x_coordinate_only, x := PX_ECDSA_X_COORDINATE, y := omit } // 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 field y } // End of template m_aesccm_dummy } // End of group algorithms /** */ group signatures { template (value) Signature m_signature_ecdsa := { algorithm := e_ecdsa_nistp256_with_sha256, signature_ := { ecdsa_signature := m_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 } // End of group signatures /** * @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 } // End of group dummyBasicFormatElementsRecv } // End of group dummyBasicFormatElements /** * @desc Dummy send/receive templates for security headers * @see Draft ETSI TS 103 097 V1.1.6 Clause 5 Specification of security header */ group dummyMessages { /** * @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 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 := { other_header := ''O } // End of template m_header_field_container_dummy 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 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 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 := { type_ := e_signed, data := ? } // End of template mw_signedPayload_dummy /** * @desc Generic received template for SecuredMessage */ template (present) Payload mw_unsecuredPayload_dummy := { type_ := e_unsecured, data := ? } // 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, signer_info := { m_signerInfo_ecdsa256( m_signerInfoContainer_digest( PX_ECDSA_DIGEST ) ) }, subject_info := m_subject_info_dummy, subject_attributes := { m_subject_attribute_dummy }, validity_restrictions := { m_validity_restriction_dummy }, signature_ := m_signature_ecdsa } // 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 securityProfiles { /** */ group securityProfilesCAMs { /** */ group securityProfilesCAMsSend { /** * @desc Generic send template for Security profile for CAMs */ 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_ecdsa256( in template (value) SignerInfoContainer p_signerInfo ) modifies m_header_field_signerInfo_dummy := { headerField := m_header_field_container_ecdsa256(p_signerInfo) } // End of template m_header_field_signerInfo_ecdsa256 template (value) HeaderFieldContainer m_header_field_container_ecdsa256( in template (value) SignerInfoContainer p_signerInfo ) := { signer := m_signerInfo_ecdsa256(p_signerInfo) } // End of template m_header_field_container_ecdsa256 template (value) SignerInfo m_signerInfo_ecdsa256( in template (value) SignerInfoContainer p_signerInfo ) := { type_ := e_certificate_digest_with_ecdsap256, signerInfo := p_signerInfo } // End of template m_signerInfo_ecdsa256 template (value) SignerInfoContainer m_signerInfoContainer_certificate( in template (value) Certificate p_certificate ) := { certificate := p_certificate } // End of template m_signerInfoContainer_certificate template (value) SignerInfoContainer m_signerInfoContainer_certificates( in template (value) CertificateChain p_certificates ) := { certificates := p_certificates } // End of template m_signerInfoContainer_certificates template (value) SignerInfoContainer m_signerInfoContainer_digest( in template (value) HashedId8 p_digest ) := { digest := p_digest } // End of template m_signerInfoContainer_digest } // 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; } } } // End of module LibItsSecurity_Templates