LibItsSecurity_Templates.ttcn3 116 KB
Newer Older
                
                /**
                 * @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_unrecognised_certificate(
                                                                   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_unrecognised_certificates(
                                                                                      in template (value) HashedId3s p_digests
                ) := {
                    type_       := e_request_unrecognized_certificate,
                    headerField := {
                        digests := p_digests
                    }
                } // End of template m_header_field_multiple_digests
                
                /**
                 * @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 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_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
                
                /**
                 * @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
        
            /**
             * @desc Receive templates for HeaderField
             * @see Draft ETSI TS 103 097 V1.1.6 Clause 5.4 HeaderField
             */
            group headerFieldsRecv {
                
berge's avatar
berge committed
                /**
                 * @desc Receive template for HeaderField with generation time information
                 * @param p_headerType  Type id of the Header field
                 */
                template (present) HeaderField mw_header_field(
                                                               in HeaderFieldType p_headerType
                ) := {
berge's avatar
berge committed
                    type_       := p_headerType,
                    headerField := ?
                } // End of template mw_header_field_generation_time
                
                /**
                 * @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
                 * @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
                    headerField := {
                } // End of template mw_header_field_signerInfo_signer_info
                
                /**
                 * @desc Receive template for HeaderField with signer information
                 *       containing certificate
                 * @see Draft ETSI TS 103 097 V1.1.6 Clause 5.4    HeaderField
                 */
filatov's avatar
filatov committed
                template (present) HeaderField mw_header_field_signer_info_certificate (
                                                                                        in template (present) Certificate p_cert := ?
filatov's avatar
filatov committed
                ) := {
                    type_       := e_signer_info,
                    headerField := {
                        signer := mw_signerInfo_certificate(p_cert)
                } // End of template mw_header_field_signer_info_certificate
                /**
                 * @desc Receive template for HeaderField with signer information
                 *       containing certificate digest
                 * @see Draft ETSI TS 103 097 V1.1.6 Clause 5.4    HeaderField
                 */
filatov's avatar
filatov committed
                template (present) HeaderField mw_header_field_signer_info_digest (
                                                                                   in template (present) HashedId8 p_digest := ?
filatov's avatar
filatov committed
                ) := {
                    type_       := e_signer_info,
                    headerField := {
                        signer := mw_signerInfo_digest(p_digest)
                    }
                } // End of template mw_header_field_signer_info_digest
filatov's avatar
filatov committed
                /**
                 * @desc Receive template for HeaderField with signer information
                 *       containing certificate chain
                 * @see Draft ETSI TS 103 097 V1.1.6 Clause 5.4    HeaderField
                 */
                template (present) HeaderField mw_header_field_signer_info_certificate_chain (
                                                                                              in template (present) CertificateChain p_certs := ?
filatov's avatar
filatov committed
                ) := {
                    type_       := e_signer_info,
                    headerField := {
                        signer := mw_signerInfo_certificates(p_certs)
filatov's avatar
filatov committed
                    }
                } // End of template mw_header_field_signer_info_certificate_chain
                /**
                 * @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
                
                /**
                 * @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
                
                /**
                 * @desc Receive template for HeaderField with message type
                 * @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 request for unrecognized certificate
                 * @see Draft ETSI TS 103 097 V1.1.6 Clause 5.4    HeaderField
                 */
                template (present) HeaderField mw_header_field_request_unrecognized_certificate(
                                                                                                in template (present) HashedId3s p_digests := ?
                
                ) := {
                    type_       := e_request_unrecognized_certificate,
                    headerField := {
                        digests := p_digests
                    }
                } // End of template mw_header_field_signer_info_digest
            } // End of group headerFieldsRecv
        
        } // End of group headerFields
        
        /**
         * @desc Send/Receive templates for TrailerField
         * @see Draft ETSI TS 103 097 V1.1.6 Clause 5.6 TrailerField
         */
        group trailerFields {
            
            /**
             * @desc Send template containing signature information used by the security layer after processing the payload
             * @param p_signature   The signature information
             */
            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
            
            /**
             * @desc Receive template containing signature information used by the security layer after processing the payload
             * @param p_signature   The signature information
             */
            template (present) TrailerField mw_trailer_field_signature(
                                                                       in template (present) Signature p_signature
            ) := {
                type_           := e_signature,
                trailerField    := {
                    signature_ := ?
                }
            } // End of template mw_trailer_field_dummy
            
        } // End of group trailerFields
        
        /**
         * @desc Send/Receive templates for RecipientInfo
         * @see Draft ETSI TS 103 097 V1.1.6 Clause 5.8 RecipientInfo
         */
            /**
             * @desc Send template containing information for a message's recipient
             * @param p_cert_id         The recipient's certificate identifier
             * @param p_pk_encryption   The encryption type
             * @param p_enc_key         The encrypted key contained in an EciesEncryptedKey structure 
             */
            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
            
            /**
             * @desc Receive template containing information for a message's recipient
             * @param p_cert_id         The recipient's certificate identifier
             * @param p_pk_encryption   The encryption type
             * @param p_enc_key         The encrypted key contained in an EciesEncryptedKey structure 
             */
            template (present) RecipientInfo mw_recipientInfo_ecies_enc_key(
                                                                            in template (present) HashedId8 p_cert_id,
                                                                            in template (present) PublicKeyAlgorithm p_pk_encryption,
                                                                            in template (present) 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 mw_recipientInfo_ecies_enc_key
            
        } // End of group recipientInfo
        
        /**
         * @desc Send/Receive templates for EciesEncryptedKey
         * @see Draft ETSI TS 103 097 V1.1.6 Clause 5.9 EciesEncryptedKey
         */
        group eciesEncryptedKey {
            
                /**
                 * @desc Send template for an ECIES-encrypted symmetric key as defined in IEEE Std 1363a 2004 
garciay's avatar
garciay committed
                 * @param p_ecc_key             The sender's EEC ephemeral key
                 * @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
                ) := {
                    v               := p_ecc_key,
                    c               := p_encrypted_key,
                    t               := p_authentication_tag
                } // End of template m_eciesEncryptedKey_aesccm
                
            /**
             * @desc Receive template for an ECIES-encrypted symmetric key as defined in IEEE Std 1363a 2004 
garciay's avatar
garciay committed
             * @param p_ecc_key             The sender's EEC ephemeral key
             * @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 (present) EciesEncryptedKey mw_eciesEncryptedKey_aesccm(
                                                                             in template (present) EccPoint p_ecc_key, 
                                                                             in template (present) octetstring p_encrypted_key, 
                                                                             in template (present) Oct20 p_authentication_tag
            ) := {
                v               := p_ecc_key,
                c               := p_encrypted_key,
                t               := p_authentication_tag
            } // End of template mw_eciesEncryptedKey_aesccm
            
        } // End of group eciesEncryptedKey
        
    } // End of group messages
garciay's avatar
garciay committed
     * @desc Dummy send/receive templates for certificates
     * @see Draft ETSI TS 103 097 V1.1.6 Clause 6   Specification of certificate format
     */
    group dummyCertifices {
        
        /**
garciay's avatar
garciay committed
         * @desc Dummy send templates for certificates
         * @see Draft ETSI TS 103 097 V1.1.6 Clause 6   Specification of certificate format
         */
        group dummyCertificesSend {
            
        } // End of group dummyCertificesSend
        
        /**
garciay's avatar
garciay committed
         * @desc Dummy receive templates for certificates
         * @see Draft ETSI TS 103 097 V1.1.6 Clause 6   Specification of certificate format
         */
        group dummyCertificesRecv {
            
garciay's avatar
garciay committed
            /**
             * @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_infos            := ?,
                subject_info            := ?,
                subject_attributes      := ?,
                validity_restrictions   := ?,
                signature_              := ?
            } // End of template mw_certificate_dummy
garciay's avatar
garciay committed
            
        } // End of group dummyCertificesRecv
        
    } // End of group dummyCertifices
    
    /**
     * @desc Send/receive templates for certificates
     * @see Draft ETSI TS 103 097 V1.1.6 Clause 6   Specification of certificate format
     */
    group certificates {
        
        /**
         * @desc Send templates for certificates
         * @see Draft ETSI TS 103 097 V1.1.6 Clause 6   Specification of certificate format
         */
        group certificatesSend {
            
            /**
             * @desc Send certificate template
             * @member p_signer_info            List of 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.1.6 Clause 6.1    Certificate
             */
            template (value) Certificate m_certificate(
                                                       in template (value) SignerInfos p_signer_infos,
                                                       in template (value) SubjectInfo p_subject_info,
                                                       in template (value) SubjectAttributes p_subject_attributes,
                                                       in template (value) ValidityRestrictions p_validity_restrictions,
                                                       in template (value) Signature p_signature
            ) := {
                version                 := c_certificate_version,
                signer_infos             := p_signer_infos,
                subject_info            := p_subject_info,
                subject_attributes      := p_subject_attributes,
                validity_restrictions   := p_validity_restrictions,
                signature_              := p_signature
            } // End of template m_certificate
            /**
             * @desc Send templates for certificates
             * @see Draft ETSI TS 103 097 V1.1.6 Clause 6.2 SubjectInfo
             */
            group subjectInfo {
                
                template (value) SubjectInfo m_subject_info_root_ca(
                                                                    in template (value) Oct0to31 p_subject_name
                ) := {
                    subject_type := e_root_ca,
                    subject_name := p_subject_name
                } // End of template m_subject_info_root_ca
                
                template (value) SubjectInfo m_subject_info_authorization_authority(
                                                                                    in template (value) Oct0to31 p_subject_name
                ) := {
                    subject_type := e_authorization_authority,
                    subject_name := p_subject_name
                } // End of template m_subject_info_authorization_authority
                
                template (value) SubjectInfo m_subject_info_authorization_ticket := {
                    subject_type := e_authorization_ticket,
                    subject_name := ''O
                } // End of template m_subject_info_authorization_ticket
                
                template (value) SubjectInfo m_subject_info_revocation(
                                                                       in template (value) Oct0to31 p_subject_name
                ) := {
                    subject_type := e_crl_signer,
                    subject_name := p_subject_name
                } // End of template m_subject_info_revocation
                
            } // End of group subjectInfo
            
            group subjectAttribute {
                
                template (value) SubjectAttribute m_subject_attribute_verification_key(
                                                                                       in template (value) PublicKey p_key
                ) := {
                    type_       := e_verification_key,
                    attribute   := {
                        key := p_key
                    }
                } // End of template m_subject_attribute_verification_key
                
                template (value) SubjectAttribute m_subject_attribute_encryption_key(
                                                                                     in template (value) PublicKey p_key
                ) := {
                    type_       := e_encryption_key,
                    attribute   := {
                        key := p_key
                    }
                } // End of template m_subject_attribute_encryption_key
                
                template (value) SubjectAttribute m_subject_attribute_reconstruction_value(
                                                                                     in template (value) EccPoint p_rv
                ) := {
                    type_       := e_reconstruction_value,
                    attribute   := {
                        rv := p_rv
                    }
                } // End of template m_subject_attribute_reconstruction_value
                
                template (value) SubjectAttribute m_subject_attribute_assurance_level(
                                                                                      in template (value) SubjectAssurance p_assurance_level
                ) := {
                    type_       := e_assurance_level,
                    attribute   := {
                        assurance_level := p_assurance_level
                    }
                } // End of template m_subject_attribute_assurance_level
                
                template (value) SubjectAttribute m_subject_attribute_its_aid_list(
                                                                                           in template (value) IntXs p_its_aid_list
                ) := {
                    type_       := e_its_aid_list,
                    attribute   := {
                        its_aid_list := p_its_aid_list
                    }
                } // End of template m_subject_attribute_its_aid_list
                
                template (value) SubjectAttribute m_subject_attribute_its_aid_ssp_list(
                                                                                       in template (value) ItsAidSsps p_its_aid_ssp_list
                ) := {
                    type_       := e_its_aid_ssp_list,
                    attribute   := {
                        its_aid_ssp_list := p_its_aid_ssp_list
                    }
                } // End of template m_subject_attribute_its_aid_ssp_list
                
            } // End of group subjectAttribute
            
            group subjectAssurance {
                
                template (value) SubjectAssurance m_subjectAssurance(
                                                                     in template (value) Bit3 p_levels,
                                                                     in template (value) Bit2 p_confidence
                ) := {
                    levels      := p_levels,
                    reserved    := '000'B,
                    confidence  := p_confidence
                } // End of template m_subjectAssurance
                
            } // End of group subjectAssurance
            
            group validityRestriction {
                
                template (value) ValidityRestriction m_validity_restriction_time_end(
                                                                                     in template (value) Time32 p_end_validity
                 ) := {
                    type_       := e_time_end,
                    validity    :=  {
                        end_validity := p_end_validity
                    } // End of field validity
                } // End of template m_validity_restriction_time_end
                
                template (value) ValidityRestriction m_validity_restriction_time_start_and_end(
                                                                                               in template (value) Time32 p_start_validity,
                                                                                               in template (value) Time32 p_end_validity
                ) := {
                    type_       := e_time_start_and_end,
                    validity    :=  {
                        time_start_and_end := {
                            start_validity  := p_start_validity,
                            end_validity    := p_end_validity
                        } // End of field time_start_and_end
                    } // End of field validity
                } // End of template m_validity_restriction_time_start_and_end
                
                template (value) ValidityRestriction m_validity_restriction_time_start_and_duration(
                                                                                                    in template (value) Time32 p_start_validity,
                                                                                                    in template (value) Duration p_duration
                ) := {
                    type_       := e_time_start_and_duration,
                    validity    :=  {
                        time_start_and_duration := {
                            start_validity  := p_start_validity,
                            duration        := p_duration
                        } // End of field time_start_and_duration
                    } // End of field validity
                } // End of template m_validity_restriction_time_start_and_duration
                
                template (value) ValidityRestriction m_validity_restriction_region(
                                                                                   in template (value) GeographicRegion p_region
                ) := {
                    type_       := e_region,
                    validity    :=  {
                        region := p_region
                    } // End of field validity
                } // End of template m_validity_restriction_region
                
            } // End of group validityRestriction
            
        } // End of group certificatesSend
        
        /**
         * @desc Receive templates for certificates
         * @see Draft ETSI TS 103 097 V1.1.6 Clause 6   Specification of certificate format
         */
        group certificatesRecv {
            template (present) Certificate mw_certificate(
filatov's avatar
filatov committed
                                                          in template (present) SignerInfo p_signer_info :=?,
                                                          in template (present) SubjectInfo p_subject_info :=?,
                                                          in template (present) SubjectAttributes p_subject_attributes :=?,
                                                          in template (present) ValidityRestrictions p_validity_restrictions :=?,
                                                          in template (present) Signature p_signature :=?
            ) := {
                version                 := c_certificate_version,
                signer_infos            := { p_signer_info },
                subject_info            := p_subject_info,
                subject_attributes      := p_subject_attributes,
                validity_restrictions   := p_validity_restrictions,
                signature_              := p_signature
            } // End of template m_certificate
filatov's avatar
filatov committed

            template (present) Certificate mw_aa_certificate(
                                                          in template (present) SignerInfo p_signer_info :=?,
                                                          in template (present) SubjectAttributes p_subject_attributes :=?,
                                                          in template (present) ValidityRestrictions p_validity_restrictions :=?,
                                                          in template (present) Signature p_signature :=?
            ) := {
                version                 := c_certificate_version,
                signer_infos            := { p_signer_info },
                subject_info            := {
                    subject_type := e_authorization_authority,
                    subject_name := ?
                },
                subject_attributes      := p_subject_attributes,
                validity_restrictions   := p_validity_restrictions,
                signature_              := p_signature
            } // End of template m_aa_certificate
            
            template (present) Certificate mw_at_certificate(
                                                          in template (present) SignerInfo p_signer_info :=?,
                                                          in template (present) SubjectAttributes p_subject_attributes :=?,
                                                          in template (present) ValidityRestrictions p_validity_restrictions :=?,
                                                          in template (present) Signature p_signature :=?
            ) := {
                version                 := c_certificate_version,
                signer_infos            := { p_signer_info },
                subject_info            := {
                    subject_type := e_authorization_ticket,
                    subject_name := ?
                },
                subject_attributes      := p_subject_attributes,
                validity_restrictions   := p_validity_restrictions,
                signature_              := p_signature
            } // End of template m_at_certificate
            group subjectInfo {
                
                template (present) SubjectInfo mw_subject_info_root_ca(
                                                                       in template (present) Oct0to31 p_subject_name
                ) := {
                    subject_type := e_root_ca,
                    subject_name := p_subject_name
                } // End of template mw_subject_info_root_ca
                
                template (present) SubjectInfo mw_subject_info_revocation(
                                                                          in template (present) Oct0to31 p_subject_name
                ) := {
                    subject_type := e_crl_signer,
                    subject_name := p_subject_name
                } // End of template mw_subject_info_revocation
                
            } // End of group subjectInfo
            
            group subjectAttribute {
                
                template (present) SubjectAttribute mw_subject_attribute_verification_key(
                                                                                          in template (present) PublicKey p_key := ?
                ) := {
                    type_       := e_verification_key,
                    attribute   := {
                        key := p_key
                    }
                } // End of template mw_subject_attribute_verification_key
                
                template (present) SubjectAttribute mw_subject_attribute_encryption_key(
                                                                                        in template (present) EccPoint p_rv := ?
                    type_       := e_encryption_key,
                    attribute   := {
                        rv := p_rv
                    }
                } // End of template mw_subject_attribute_encryption_key
                
                template (present) SubjectAttribute mw_subject_attribute_assurance_level(
                                                                                         in template (present) SubjectAssurance p_assurance_level := ?
                ) := {
                    type_       := e_assurance_level,
                    attribute   := {
                        assurance_level := p_assurance_level
                    }
                } // End of template mw_subject_attribute_assurance_level
                
                template (present) SubjectAttribute mw_subject_attribute_reconstruction_value(
                                                                                              in template (present) IntXs p_its_aid_list := ?
                ) := {
                    type_       := e_reconstruction_value,
                    attribute   := {
                        its_aid_list := p_its_aid_list
                    }
                } // End of template mw_subject_attribute_reconstruction_value
                
                template (present) SubjectAttribute mw_subject_attribute_its_aid_list(
                                                                                      in template (present) IntXs p_its_aid_list := ?
                ) := {
                    type_       := e_its_aid_list,
                    attribute   := {
                        its_aid_list := p_its_aid_list
                    }
                } // End of template mw_subject_attribute_its_aid_list
                
                template (present) SubjectAttribute mw_subject_attribute_its_aid_ssp_list(
                                                                                              in template (present) ItsAidSsps p_its_aid_ssp_list := ?
                ) := {
                    type_       := e_its_aid_ssp_list,
                    attribute   := {
                        its_aid_ssp_list := p_its_aid_ssp_list
                    }
                } // End of template mw_subject_attribute_its_aid_ssp_list
                
            } // End of group subjectAttribute
            
            group subjectAssurance {
                
                template (present) SubjectAssurance mw_subjectAssurance(
                                                                        in template (present) Bit3 p_levels,
                                                                        in template (present) Bit2 p_confidence
                ) := {
                    levels      := p_levels,
                    reserved    := '000'B,
                    confidence  := p_confidence
                } // End of template mw_subjectAssurance
                
            } // End of group subjectAssurance
            
            group validityRestriction {
                
                template (present) ValidityRestriction mw_validity_restriction_time_end(
                                                                                        in template (present) Time32 p_end_validity := ?
                 ) := {
                    type_       := e_time_end,
                    validity    :=  {
                        end_validity := p_end_validity
                    } // End of field validity
                } // End of template mw_validity_restriction_time_end
                
                template (present) ValidityRestriction mw_validity_restriction_time_start_and_end(
                                                                                                  in template (present) Time32 p_start_validity := ?,
                                                                                                  in template (present) Time32 p_end_validity := ?
                ) := {
                    type_       := e_time_start_and_end,
                    validity    :=  {
                        time_start_and_end := {
                            start_validity  := p_start_validity,
                            end_validity    := p_end_validity
                        } // End of field time_start_and_end
                    } // End of field validity
                } // End of template mw_validity_restriction_time_start_and_end
                
                template (present) ValidityRestriction mw_validity_restriction_time_start_and_duration(
                                                                                                       in template (present) Time32 p_start_validity := ?,
                                                                                                       in template (present) Duration p_duration := ?
                ) := {
                    type_       := e_time_start_and_duration,
                    validity    :=  {
                        time_start_and_duration := {
                            start_validity  := p_start_validity,
                            duration        := p_duration
                        } // End of field time_start_and_duration
                    } // End of field validity
                } // End of template mw_validity_restriction_time_start_and_duration
                template (present) ValidityRestriction mw_validity_restriction_region(
                                                                                      in template (present) GeographicRegion p_region := ?
                ) := {
                    type_       := e_region,
                    validity    :=  {
                        region := p_region
                    } // End of field validity
                } // End of template mw_validity_restriction_region
                
            } // End of group validityRestriction
            
        } // End of group certificatesRecv
        
        group ssp {
            
            group sspTest {
                
                template (present) ServiceSpecificPermissions m_sspTest := {
                    version         := '00'O,
                    sspContainer    := omit
                } // End of template mw_sspTest
                
                template (present) ServiceSpecificPermissions mw_sspTest := {
                    version         := '00'O,
                    sspContainer    := *
                } // End of template mw_sspTest
                
            } // End of group sspTest 
            
            group sspDenm {
                    
                group sspDenmSend {
                    
                    /**
                     * @desc 
                     */
                    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
                    } // End of template m_sspDENMContainer_sign_all
                    
                    /**
                     * @desc 
                     */
                    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
                    
                    /**
                     * @desc 
                     */
                    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
                    
                    /**
                     * @desc 
                     */
                    template (value) ServiceSpecificPermissions m_sspDENM_sign_all := {
                        version         := '01'O,
                        sspContainer    := {
                            sspDENM := m_sspDENMContainer_sign_all
                        } // End of field sspContainer
                    } // End of template m_sspDENM_sign_all
                    
                    /**
                     * @desc 
                     */
                    template (value) ServiceSpecificPermissions m_sspDENM_vehicle 
                    modifies m_sspDENM_sign_all := {
                        sspContainer    := {
                            sspDENM := m_sspDENMContainer_vehicle
                        } // End of field sspContainer
                    } // End of template m_sspDENM_vehicle
                    
                    /**
                     * @desc 
                     */
                    template (value) ServiceSpecificPermissions m_sspDENM_roadSideUnit 
                    modifies m_sspDENM_sign_all := {
                        sspContainer    := {
                            sspDENM := m_sspDENMContainer_vehicle
                        } // End of field sspContainer
                    } // End of template m_sspDENM_roadSideUnit
                    
                } // End of group sspDenmSend
                
                group sspDenmRecv {
                    
                    /**
                     * @desc 
                     */
                    template (present) SspDENM mw_sspDENMContainer_dummy := {
                        trafficCondition                                := ?,
                        accident                                        := ?,
                        roadworks                                       := ?,
                        adverseWeatherCondition_Adhesion                := ?,
                        hazardousLocation_SurfaceCondition              := ?,
                        hazardousLocation_ObstacleOnTheRoad             := ?,
                        hazardousLocation_AnimalOnTheRoad               := ?,
                        humanPresenceOnTheRoad                          := ?,
                        wrongWayDriving                                 := ?,
                        rescueAndRecoveryWorkInProgress                 := ?,
                        adverseWeatherCondition_ExtremeWeatherCondition := ?,