Skip to content
LibItsSecurity_Templates.ttcn 112 KiB
Newer Older
         * Clause 7.1.3 Generic security profile for other signed messages
         */
        template (present) HeaderInfo mw_headerInfo_gn(
                                                       template (present) Psid p_psid := c_its_aid_GN,
                                                       template (present) Time64 p_generationTime := ?
        ) modifies mw_ieee1609Dot2_headerInfo := {
            generationTime       := p_generationTime,
            expiryTime           := *,
            generationLocation   := *,
            encryptionKey        := *,
            inlineP2pcdRequest   := *,
            requestedCertificate := *
        } // End of template mw_headerInfo_gn
        
        template (omit) HeaderInfo m_headerInfo_inner_pki_request(
                                                                  in template (value) Psid p_psid := c_its_aid_SCR,
                                                                  in template (value) Time64 p_generationTime
                                                                  ) modifies m_headerInfo_gn := {};
        
        template (omit) HeaderInfo m_headerInfo_inner_pki_response(
                                                                   in template (value) Psid p_psid := c_its_aid_SCR,
                                                                   in template (value) Time64 p_generationTime
                                                                   ) modifies m_headerInfo_gn := {};
        
        template (present) HeaderInfo mw_headerInfo_inner_pki_request(
                                                                      template (present) Psid p_psid := c_its_aid_SCR,
                                                                      template (present) Time64 p_generationTime := ?
                                                                      ) modifies mw_headerInfo_gn := {};
    } // End of group headerFields
    
    group signatures {
        template (value) Signature m_signature_ecdsaNistP256(
                                                             in template (value) EcdsaP256Signature p_ecdsaNistP256Signature
        ) := {
            ecdsaNistP256Signature := p_ecdsaNistP256Signature
        } // End of template m_signature_ecdsaNistP256
        
        template (present) Signature mw_signature_ecdsaNistP256(
                                                                template (present) EcdsaP256Signature p_ecdsaNistP256Signature := ?
        ) := {
            ecdsaNistP256Signature := p_ecdsaNistP256Signature
        } // End of template mw_signature_ecdsaNistP256
        
        template (value) Signature m_signature_ecdsaBrainpoolP256r1(
                                                                    in template (value) EcdsaP256Signature p_ecdsaBrainpoolP256r1Signature
        ) := {
            ecdsaBrainpoolP256r1Signature := p_ecdsaBrainpoolP256r1Signature
        }  // End of template m_signature_ecdsaBrainpoolP256r1
        
        template (present) Signature mw_signature_ecdsaBrainpoolP256r1(
                                                                       template (present) EcdsaP256Signature p_ecdsaBrainpoolP256r1Signature := ?
        ) := {
            ecdsaBrainpoolP256r1Signature := p_ecdsaBrainpoolP256r1Signature
        }  // End of template m_signature_ecdsaBrainpoolP256r1
        
        template (value) Signature m_signature_ecdsaBrainpoolP384r1(
                                                                    in template (value) EcdsaP384Signature p_ecdsaBrainpoolP384r1Signature
        ) := {
            ecdsaBrainpoolP384r1Signature := p_ecdsaBrainpoolP384r1Signature
        } // End of template m_signature_ecdsaBrainpoolP384r1
        
        template (present) Signature mw_signature_ecdsaBrainpoolP384r1(
                                                                       template (present) EcdsaP384Signature p_ecdsaBrainpoolP384r1Signature := ?
        ) := {
            ecdsaBrainpoolP384r1Signature := p_ecdsaBrainpoolP384r1Signature
        } // End of template mw_signature_ecdsaBrainpoolP384r1
        
        template (value) EcdsaP256Signature m_ecdsaP256Signature(
                                                                 in template (value) EccP256CurvePoint p_rSig,
                                                                 in template (value) Oct32 p_sSig
        ) := {
            rSig := p_rSig,
            sSig := p_sSig
        } // End of template m_ecdsaP256Signature
        template (present) EcdsaP256Signature mw_ecdsaP256Signature(
                                                                    template (present) EccP256CurvePoint p_rSig := ?,
                                                                    template (present) Oct32 p_sSig := ?
        ) := {
            rSig := p_rSig,
            sSig := p_sSig
        } // End of template mw_ecdsaP256Signature
        template (value) EcdsaP384Signature m_ecdsaP384Signature(
                                                                 in template (value) EccP384CurvePoint p_rSig,
                                                                 in template (value) Oct48 p_sSig
        ) := {
            rSig := p_rSig,
            sSig := p_sSig
        } // End of template m_ecdsaP384Signature
        template (present) EcdsaP384Signature mw_ecdsaP384Signature(
                                                                    template (present) EccP384CurvePoint p_rSig := ?,
                                                                    template (present) Oct48 p_sSig := ?
        ) := {
            rSig := p_rSig,
            sSig := p_sSig
        } // End of template mw_ecdsaP384Signature
        
        template (value) EccP256CurvePoint m_eccP256CurvePoint_x_only(
                                                                      in template (value) Oct32 p_x_only
        ) := {
            x_only := p_x_only
        } // End of template m_eccP256CurvePoint_x_only
        
        template (present) EccP256CurvePoint mw_eccP256CurvePoint_x_only(
                                                                         template (present) Oct32 p_x_only := ?
        ) := {
            x_only := p_x_only
        } // End of template mw_eccP256CurvePoint_x_only
        
        template (value) EccP256CurvePoint m_eccP256CurvePoint_compressed_y_0(
                                                                              in template (value) Oct32 p_compressed_y_0
        ) := {
            compressed_y_0 := p_compressed_y_0
        } // End of template m_eccP256CurvePoint_compressed_y_0
        
        template (present) EccP256CurvePoint mw_eccP256CurvePoint_compressed_y_0(
                                                                                 template (present) Oct32 p_compressed_y_0 := ?
        ) := {
            compressed_y_0 := p_compressed_y_0
        } // End of template mw_eccP256CurvePoint_compressed_y_0
        
        template (value) EccP256CurvePoint m_eccP256CurvePoint_compressed_y_1(
                                                                              in template (value) Oct32 p_compressed_y_1
        ) := {
            compressed_y_1 := p_compressed_y_1
        } // End of template m_eccP256CurvePoint_compressed_y_1
        
        template (present) EccP256CurvePoint mw_eccP256CurvePoint_compressed_y_1(
                                                                                 template (present) Oct32 p_compressed_y_1 := ?
        ) := {
            compressed_y_1 := p_compressed_y_1
        } // End of template mw_eccP256CurvePoint_compressed_y_1
        
        template (value) EccP256CurvePoint m_eccP256CurvePoint_uncompressed(
                                                                            in template (value) Oct32 p_x,
                                                                            in template (value) Oct32 p_y
        ) := {
            uncompressedP256 := {
                x := p_x,
                y := p_y
            }
        } // End of template m_eccP256CurvePoint_uncompressed
        
        template (present) EccP256CurvePoint mw_eccP256CurvePoint_uncompressed(
                                                                               template (present) Oct32 p_x := ?,
                                                                               template (present) Oct32 p_y := ?
        ) := {
            uncompressedP256 := {
                x := p_x,
                y := p_y
            }
        } // End of template mw_eccP256CurvePoint_uncompressed
        
        template (value) EccP384CurvePoint m_eccP384CurvePoint_x_only(
                                                                      in template (value) Oct48 p_x_only
        ) := {
            x_only := p_x_only
        } // End of template m_eccP384CurvePoint_x_only
        
        template (present) EccP384CurvePoint mw_eccP384CurvePoint_x_only(
                                                                         template (present) Oct48 p_x_only := ?
        ) := {
            x_only := p_x_only
        } // End of template mw_eccP384CurvePoint_x_only
        
        template (value) EccP384CurvePoint m_eccP384CurvePoint_compressed_y_0(
                                                                              in template (value) Oct48 p_compressed_y_0
        ) := {
            compressed_y_0 := p_compressed_y_0
        } // End of template m_eccP384CurvePoint_compressed_y_0
        
        template (present) EccP384CurvePoint mw_eccP384CurvePoint_compressed_y_0(
                                                                                 template (present) Oct48 p_compressed_y_0 := ?
        ) := {
            compressed_y_0 := p_compressed_y_0
        } // End of template mw_eccP384CurvePoint_compressed_y_0
        
        template (value) EccP384CurvePoint m_eccP384CurvePoint_compressed_y_1(
                                                                              in template (value) Oct48 p_compressed_y_1
        ) := {
            compressed_y_1 := p_compressed_y_1
        } // End of template m_eccP384CurvePoint_compressed_y_1
        
        template (present) EccP384CurvePoint mw_eccP384CurvePoint_compressed_y_1(
                                                                                 template (present) Oct48 p_compressed_y_1 := ?
        ) := {
            compressed_y_1 := p_compressed_y_1
        } // End of template mw_eccP384CurvePoint_compressed_y_1
        
        template (value) EccP384CurvePoint m_eccP384CurvePoint_uncompressed(
                                                                            in template (value) Oct48 p_x,
                                                                            in template (value) Oct48 p_y
        ) := {
            uncompressedP384 := {
                x := p_x,
                y := p_y
            }
        } // End of template m_eccP384CurvePoint_uncompressed
        
        template (present) EccP384CurvePoint mw_eccP384CurvePoint_uncompressed(
                                                                               template (present) Oct48 p_x := ?,
                                                                               template (present) Oct48 p_y := ?
        ) := {
            uncompressedP384 := {
                x := p_x,
                y := p_y
            }
        } // End of template mw_eccP384CurvePoint_uncompressed
        
    } // End of group signatures
garciay's avatar
garciay committed
     * @desc Dummy send/receive templates for certificates
     * @see Draft ETSI TS 103 097 V1.3.1 Clause 6   Specification of certificate format
    group certificates {
         * @desc Send certificate template of type explicit (signature is included)
         * @member p_signer_info            Signer information
         * @member p_subject_info           The subject information
         * @member p_subject_attributes     List of subject attribute
         * @member p_validity_restrictions  List of validity restriction
         * @member p_signature              The signature
         * @see Draft ETSI TS 103 097 V1.3.1 Clause 6.1    Certificate
        template (omit) EtsiTs103097Certificate m_etsiTs103097Certificate(
                                                                          in template (value) IssuerIdentifier p_issuer,
                                                                          in template (value) ToBeSignedCertificate p_toBeSigned,
                                                                          in template (omit) Signature p_signature_ := omit
        ) := { 
            version     := c_certificate_version,
            type_       := explicit,
            issuer      := p_issuer,
            toBeSigned  := p_toBeSigned,
            signature_  := p_signature_
        } // End of template m_etsiTs103097Certificate
         * @desc Send certificate template of type explicit (signature is included)
         * @member p_signer_info            Signer information
         * @member p_subject_info           The subject information
         * @member p_subject_attributes     List of subject attribute
         * @member p_validity_restrictions  List of validity restriction
         * @member p_signature              The signature
         * @see Draft ETSI TS 103 097 V1.3.1 Clause 6.1    Certificate
        template (present) EtsiTs103097Certificate mw_etsiTs103097Certificate(
                                                                              template (present) IssuerIdentifier p_issuer := ?,
                                                                              template (present) ToBeSignedCertificate p_toBeSigned := ?,
                                                                              template (present) Signature p_signature_ := ?
        ) := { 
            version     := c_certificate_version,
            type_       := explicit,
            issuer      := p_issuer,
            toBeSigned  := p_toBeSigned,
            signature_  := p_signature_
        } // End of template mw_etsiTs103097Certificate
    } // End of group certificates
    group issuerIdentifier {
        
        template (value) IssuerIdentifier m_issuerIdentifier_self(
                                                                  in template (value) HashAlgorithm p_self := sha256
        ) := {
            self_  := p_self
        } // End of template m_issuerIdentifier_self
        
        template (present) IssuerIdentifier mw_issuerIdentifier_self(
                                                                     template (present) HashAlgorithm p_self := ?
        ) := {
            self_  := p_self
        } // End of template mw_issuerIdentifier_self
        
        template (value) IssuerIdentifier m_issuerIdentifier_sha256AndDigest( // FIXME Add opque field for unknown issuer?
                                                                             in template (value) HashedId8 p_sha256AndDigest
        ) := {
            sha256AndDigest  := p_sha256AndDigest
        } // End of template m_issuerIdentifier_sha256AndDigest
        
        template (present) IssuerIdentifier mw_issuerIdentifier_sha256AndDigest( // FIXME Add opque field for unknown issuer?
                                                                                template (present) HashedId8 p_sha256AndDigest := ?
        ) := {
            sha256AndDigest  := p_sha256AndDigest
        } // End of template mw_issuerIdentifier_sha256AndDigest
        
        template (value) IssuerIdentifier m_issuerIdentifier_sha384AndDigest(
                                                                             in template (value) HashedId8 p_sha384AndDigest
        ) := {
            sha384AndDigest  := p_sha384AndDigest
        } // End of template m_issuerIdentifier_sha384AndDigest
        
        template (present) IssuerIdentifier mw_issuerIdentifier_sha384AndDigest(
                                                                                template (present) HashedId8 p_sha384AndDigest := ?
        ) := {
            sha384AndDigest  := p_sha384AndDigest
        } // End of template mw_issuerIdentifier_sha384AndDigest
        
    } // End of group issuerIdentifier 
    
    group toBeSignedCertificate {
        
garciay's avatar
garciay committed
        /**
         * @desc Send template for ToBeSignedCertificate with CA restrictions
         * @see ETSI TS 103 097 V1.3.1 Clause 7.2.3 Root CA certificate
         */
        template (omit) ToBeSignedCertificate m_toBeSignedCertificate_ca(
                                                                         in template (value) CertificateId p_id,
                                                                         in template (value) SequenceOfPsidSsp p_appPermissions,
                                                                         in template (value) SequenceOfPsidGroupPermissions p_certIssuePermissions,
                                                                         in template (value) VerificationKeyIndicator p_verifyKeyIndicator,
                                                                         in template (omit) ValidityPeriod p_validityPeriod := omit,
                                                                         in template (omit) GeographicRegion p_region := omit,
                                                                         in template (omit) SubjectAssurance p_assuranceLevel := omit,
                                                                         in template (omit) PublicEncryptionKey p_encryptionKey := omit
        ) := { 
            id                     := p_id,
garciay's avatar
garciay committed
            cracaId                := '000000'O, // ETSI TS 103 097 V1.3.1 Clause 6 Bullet 2
            crlSeries              := 0, // ETSI TS 103 097 V1.3.1 Clause 6 Bullet 3
            validityPeriod         := p_validityPeriod,
            region                 := p_region,
            assuranceLevel         := p_assuranceLevel,
            appPermissions         := p_appPermissions,
garciay's avatar
garciay committed
            certIssuePermissions   := p_certIssuePermissions, // ETSI TS 103 097 V1.3.1 Clause 7.2.3 Root CA certificates Bullet 4
            certRequestPermissions := omit, 
            canRequestRollover     := omit,
            encryptionKey          := p_encryptionKey,
            verifyKeyIndicator     := p_verifyKeyIndicator
garciay's avatar
garciay committed
        } // End of template m_toBeSignedCertificate_ca
        
        /**
         * @desc Receive template for ToBeSignedCertificate with CA restrictions
         * @see ETSI TS 103 097 V1.3.1 Clause 7.2.3 Root CA certificate
         */
        template ToBeSignedCertificate mw_toBeSignedCertificate_ca(
                                                                   template (present) CertificateId p_id := ?,
                                                                   template (present) SequenceOfPsidSsp p_appPermissions := ?,
                                                                   template (present) SequenceOfPsidGroupPermissions p_certIssuePermissions := ?,
                                                                   template (present) SequenceOfPsidGroupPermissions p_certRequestPermissions := ?,
garciay's avatar
garciay committed
                                                                   template (present) VerificationKeyIndicator p_verifyKeyIndicator := ?,
                                                                   template (present) ValidityPeriod p_validityPeriod := ?,
garciay's avatar
garciay committed
                                                                   template GeographicRegion p_region := *,
                                                                   template SubjectAssurance p_assuranceLevel := *,
                                                                   template PublicEncryptionKey p_encryptionKey := *
        ) := { 
            id                     := p_id,
garciay's avatar
garciay committed
            cracaId                := '000000'O,
            crlSeries              := 0,
            validityPeriod         := p_validityPeriod,
            region                 := p_region,
            assuranceLevel         := p_assuranceLevel,
            appPermissions         := omit,
            certIssuePermissions   := p_certIssuePermissions,
            certRequestPermissions := p_certRequestPermissions, 
            canRequestRollover     := omit,
            encryptionKey          := p_encryptionKey,
            verifyKeyIndicator     := p_verifyKeyIndicator
        } // End of template mw_toBeSignedCertificate
        
garciay's avatar
garciay committed
        /**
         * @desc Send template for ToBeSignedCertificate with Enrolment credential restrictions
         * @see ETSI TS 103 097 V1.3.1 Clause 7.2.2 Enrolment credential
         */
        template (omit) ToBeSignedCertificate m_toBeSignedCertificate_ea(
                                                                         in template (value) CertificateId p_id,
                                                                         in template (value) SequenceOfPsidSsp p_appPermissions,
                                                                         in template (value) VerificationKeyIndicator p_verifyKeyIndicator,
                                                                         in template (value) ValidityPeriod p_validityPeriod,
garciay's avatar
garciay committed
                                                                         in template (omit) GeographicRegion p_region := omit,
                                                                         in template (omit) SubjectAssurance p_assuranceLevel := omit,
                                                                         in template (omit) PublicEncryptionKey p_encryptionKey := omit
        ) := { 
            id                     := p_id,
            cracaId                := '000000'O, // ETSI TS 103 097 V1.3.1 Clause 6 Bullet 2
            crlSeries              := 0, // ETSI TS 103 097 V1.3.1 Clause 6 Bullet 3
            validityPeriod         := p_validityPeriod,
            region                 := p_region,
            assuranceLevel         := p_assuranceLevel,
            appPermissions         := p_appPermissions,
            certIssuePermissions   := omit,
            certRequestPermissions := omit, 
            canRequestRollover     := omit,
            encryptionKey          := p_encryptionKey,
            verifyKeyIndicator     := p_verifyKeyIndicator
        } // End of template m_toBeSignedCertificate_ea
        
        /**
         * @desc Send template for ToBeSignedCertificate with Enrolment credential restrictions
         * @see ETSI TS 103 097 V1.3.1 Clause 7.2.2 Enrolment credential
         */
        template ToBeSignedCertificate mw_toBeSignedCertificate_ea(
                                                                   template (present) CertificateId p_id := ?,
                                                                   template (present) SequenceOfPsidSsp p_appPermissions := ?,
                                                                   template (present) VerificationKeyIndicator p_verifyKeyIndicator := ?,
                                                                   template (present) ValidityPeriod p_validityPeriod := ?,
garciay's avatar
garciay committed
                                                                   template GeographicRegion p_region := *,
                                                                   template SubjectAssurance p_assuranceLevel := *,
                                                                   template PublicEncryptionKey p_encryptionKey := *
        ) := { 
            id                     := p_id,
            cracaId                := '000000'O, // ETSI TS 103 097 V1.3.1 Clause 6 Bullet 2
            crlSeries              := 0, // ETSI TS 103 097 V1.3.1 Clause 6 Bullet 3
            validityPeriod         := p_validityPeriod,
            region                 := p_region,
            assuranceLevel         := p_assuranceLevel,
            appPermissions         := p_appPermissions,
            certIssuePermissions   := omit,
            certRequestPermissions := omit, 
            canRequestRollover     := omit,
garciay's avatar
garciay committed
            encryptionKey          := p_encryptionKey,
            verifyKeyIndicator     := p_verifyKeyIndicator
        } // End of template mw_toBeSignedCertificate_ea
        
        template (omit) ToBeSignedCertificate m_toBeSignedCertificate_ec(
                                                                         in template (value) CertificateId p_id,
                                                                         in template (value) SequenceOfPsidSsp p_appPermissions,
                                                                         in template (value) VerificationKeyIndicator p_verifyKeyIndicator,
                                                                         in template (value) ValidityPeriod p_validityPeriod,
                                                                         in template (omit) GeographicRegion p_region := omit,
                                                                         in template (omit) SubjectAssurance p_assuranceLevel := omit,
                                                                         in template (omit) PublicEncryptionKey p_encryptionKey := omit
        ) := {
            id                     := p_id,
            cracaId                := '000000'O, // ETSI TS 103 097 V1.3.1 Clause 6 Bullet 2
            crlSeries              := 0, // ETSI TS 103 097 V1.3.1 Clause 6 Bullet 3
            validityPeriod         := p_validityPeriod,
            region                 := p_region,
            assuranceLevel         := p_assuranceLevel,
            appPermissions         := p_appPermissions,
            certIssuePermissions   := omit,
            certRequestPermissions := omit, 
            canRequestRollover     := omit,
            encryptionKey          := p_encryptionKey,
            verifyKeyIndicator     := p_verifyKeyIndicator
        } // End of template m_toBeSignedCertificate_ec
        
Yann Garcia's avatar
Yann Garcia committed
        /**
         * @desc Send template for ToBeSignedCertificate with Enrolment credential restrictions
         * @see ETSI TS 103 097 V1.3.1 Clause 7.2.2 Enrolment credential
         */
        template ToBeSignedCertificate mw_toBeSignedCertificate_ec(
                                                                   template (present) CertificateId p_id := ?,
                                                                   template (present) SequenceOfPsidSsp p_appPermissions := ?,
                                                                   template (present) VerificationKeyIndicator p_verifyKeyIndicator := ?,
                                                                   template (present) ValidityPeriod p_validityPeriod := ?,
                                                                   template GeographicRegion p_region := *,
                                                                   template SubjectAssurance p_assuranceLevel := *,
                                                                   template PublicEncryptionKey p_encryptionKey := *
Yann Garcia's avatar
Yann Garcia committed
        ) := { 
            id                     := p_id,
            cracaId                := '000000'O, // ETSI TS 103 097 V1.3.1 Clause 6 Bullet 2
            crlSeries              := 0, // ETSI TS 103 097 V1.3.1 Clause 6 Bullet 3
            validityPeriod         := p_validityPeriod,
            region                 := p_region,
            assuranceLevel         := p_assuranceLevel,
            appPermissions         := p_appPermissions,
            certIssuePermissions   := omit,
            certRequestPermissions := omit, 
            canRequestRollover     := omit,
            encryptionKey          := p_encryptionKey,
Yann Garcia's avatar
Yann Garcia committed
            verifyKeyIndicator     := p_verifyKeyIndicator
        } // End of template mw_toBeSignedCertificate_ec
        
        /**
         * @desc Send template for ToBeSignedCertificate with Authorization authority restrictions
         * @see ETSI TS 103 097 V1.3.1 Clause 7.2.4 Subordinate certification authority certificates
         */
        template (omit) ToBeSignedCertificate m_toBeSignedCertificate_aa(
                                                                         in template (value) CertificateId p_id,
                                                                         in template (value) SequenceOfPsidSsp p_appPermissions,
                                                                         in template (value) VerificationKeyIndicator p_verifyKeyIndicator,
                                                                         in template (value) ValidityPeriod p_validityPeriod,
                                                                         in template (omit) GeographicRegion p_region := omit,
                                                                         in template (omit) SubjectAssurance p_assuranceLevel := omit,
                                                                         in template (omit) PublicEncryptionKey p_encryptionKey := omit
        ) := { 
            id                     := p_id,
            cracaId                := '000000'O, // ETSI TS 103 097 V1.3.1 Clause 6 Bullet 2
            crlSeries              := 0, // ETSI TS 103 097 V1.3.1 Clause 6 Bullet 3
            validityPeriod         := p_validityPeriod,
            region                 := p_region,
            assuranceLevel         := p_assuranceLevel,
            appPermissions         := p_appPermissions,
            certIssuePermissions   := omit,
            certRequestPermissions := omit, 
            canRequestRollover     := omit,
            encryptionKey          := p_encryptionKey,
            verifyKeyIndicator     := p_verifyKeyIndicator
        } // End of template m_toBeSignedCertificate_aa
        
        /**
         * @desc Send template for ToBeSignedCertificate with Authorization authority restrictions
         * @see ETSI TS 103 097 V1.3.1 Clause 7.2.4 Subordinate certification authority certificates
         */
        template ToBeSignedCertificate mw_toBeSignedCertificate_aa(
                                                                   template (present) CertificateId p_id := ?,
                                                                   template (present) SequenceOfPsidSsp p_appPermissions := ?,
                                                                   template (present) VerificationKeyIndicator p_verifyKeyIndicator := ?,
                                                                   template (present) ValidityPeriod p_validityPeriod := ?,
                                                                   template GeographicRegion p_region := *,
                                                                   template SubjectAssurance p_assuranceLevel := *,
                                                                   template PublicEncryptionKey p_encryptionKey := *
        ) := { 
            id                     := p_id,
            cracaId                := '000000'O, // ETSI TS 103 097 V1.3.1 Clause 6 Bullet 2
            crlSeries              := 0, // ETSI TS 103 097 V1.3.1 Clause 6 Bullet 3
            validityPeriod         := p_validityPeriod,
            region                 := p_region,
            assuranceLevel         := p_assuranceLevel,
            appPermissions         := p_appPermissions,
            certIssuePermissions   := omit,
            certRequestPermissions := omit, 
            canRequestRollover     := omit,
            encryptionKey          := p_encryptionKey,
            verifyKeyIndicator     := p_verifyKeyIndicator
        } // End of template mw_toBeSignedCertificate_aa
        
        template (present) CertificateId mw_certificateId_name(
                                                               template (present) charstring p_name := ?
        ) := {
            name := p_name
        } // End of template mw_certificateId_name
        
        template CertificateId mw_certificateId_none := {
            none_ := NULL
        } // End of template mw_certificateId_none
        
garciay's avatar
garciay committed
        /**
         * @desc Send template for ToBeSignedCertificate with AT restrictions
         * @see ETSI TS 103 097 V1.3.1 Clause 7.2.1 Authorization tickets
         */
        template (omit) ToBeSignedCertificate m_toBeSignedCertificate_at(
                                                                         in template (value) SequenceOfPsidSsp p_appPermissions,
                                                                         in template (value) VerificationKeyIndicator p_verifyKeyIndicator,
                                                                         in template (omit) ValidityPeriod p_validityPeriod := omit,
                                                                         in template (omit) GeographicRegion p_region := omit,
                                                                         in template (omit) SubjectAssurance p_assuranceLevel := omit,
                                                                         in template (omit) PublicEncryptionKey p_encryptionKey := omit
        ) := { 
            id                     := { none_ := NULL },
            cracaId                := '000000'O, // ETSI TS 103 097 V1.3.1 Clause 6 Bullet 2
            crlSeries              := 0, // ETSI TS 103 097 V1.3.1 Clause 6 Bullet 3
            validityPeriod         := p_validityPeriod,
            region                 := p_region,
            assuranceLevel         := p_assuranceLevel,
            appPermissions         := p_appPermissions,
            certIssuePermissions   := omit,
garciay's avatar
garciay committed
            certRequestPermissions := omit, 
garciay's avatar
garciay committed
            canRequestRollover     := omit,
            encryptionKey          := p_encryptionKey,
            verifyKeyIndicator     := p_verifyKeyIndicator
        } // End of template m_toBeSignedCertificate_at
        
garciay's avatar
garciay committed
        /**
         * @desc Send template for ToBeSignedCertificate with AT restrictions
         * @see ETSI TS 103 097 V1.3.1 Clause 7.2.1 Authorization tickets
         */
        template ToBeSignedCertificate mw_toBeSignedCertificate_at(
                                                                   template (present) SequenceOfPsidSsp p_appPermissions := ?,
                                                                   template (present) VerificationKeyIndicator p_verifyKeyIndicator := ?,
                                                                   template (present) ValidityPeriod p_validityPeriod := ?,
garciay's avatar
garciay committed
                                                                   template GeographicRegion p_region := *,
                                                                   template SubjectAssurance p_assuranceLevel := *,
                                                                   template PublicEncryptionKey p_encryptionKey := *
        ) := { 
            id                     := { none_ := NULL },
            cracaId                := '000000'O, // ETSI TS 103 097 V1.3.1 Clause 6 Bullet 2
            crlSeries              := 0, // ETSI TS 103 097 V1.3.1 Clause 6 Bullet 3
            validityPeriod         := p_validityPeriod,
            region                 := p_region,
            assuranceLevel         := p_assuranceLevel,
            appPermissions         := p_appPermissions,
            certIssuePermissions   := omit,
            certRequestPermissions := omit, 
            canRequestRollover     := omit,
garciay's avatar
garciay committed
            encryptionKey          := p_encryptionKey,
            verifyKeyIndicator     := p_verifyKeyIndicator
        } // End of template mw_toBeSignedCertificate_at
        
    } // End of group toBeSignedCertificate
    group verificationKeys {
        
        template (value) VerificationKeyIndicator m_verificationKeyIndicator_verificationKey(
                                                                                             in template (value) PublicVerificationKey p_verificationKey
        ) := {
            verificationKey := p_verificationKey
        } // End of template m_verificationKeyIndicator_verificationKey
        
        template (present) VerificationKeyIndicator mw_verificationKeyIndicator_verificationKey(
                                                                                                template (present) PublicVerificationKey p_verificationKey := ?
        ) := {
            verificationKey := p_verificationKey
        } // End of template mw_verificationKeyIndicator_verificationKey
        
        template (value) VerificationKeyIndicator m_verificationKeyIndicator_reconstructionValue(
                                                                                                 in template (value) EccP256CurvePoint p_reconstructionValue
        ) := {
            reconstructionValue := p_reconstructionValue
        } // End of template m_verificationKeyIndicator_reconstructionValue
        
        template (present) VerificationKeyIndicator mw_verificationKeyIndicator_reconstructionValue(
                                                                                                    template (present) EccP256CurvePoint p_reconstructionValue := ?
        ) := {
            reconstructionValue := p_reconstructionValue
        } // End of template mw_verificationKeyIndicator_reconstructionValue
        
        template (value) PublicVerificationKey m_publicVerificationKey_ecdsaNistP256(
                                                                                     in template (value) EccP256CurvePoint p_ecdsaNistP256
        ) := { 
            ecdsaNistP256 := p_ecdsaNistP256
        } // End of template m_publicVerificationKey_ecdsaNistP256
        
        template (present) PublicVerificationKey mw_publicVerificationKey_ecdsaNistP256(
                                                                                        template (present) EccP256CurvePoint p_ecdsaNistP256 := ?
        ) := { 
            ecdsaNistP256 := p_ecdsaNistP256
        } // End of template mw_publicVerificationKey_ecdsaNistP256
        
        template (value) PublicVerificationKey m_publicVerificationKey_ecdsaBrainpoolP256r1(
                                                                                            in template (value) EccP256CurvePoint p_ecdsaBrainpoolP256r1
garciay's avatar
garciay committed
        ) := { 
            ecdsaBrainpoolP256r1 := p_ecdsaBrainpoolP256r1
        } // End of template m_publicVerificationKey_ecdsaBrainpoolP256r1
        template (present) PublicVerificationKey mw_publicVerificationKey_ecdsaBrainpoolP256r1(
                                                                                               template (present) EccP256CurvePoint p_ecdsaBrainpoolP256r1 := ?
garciay's avatar
garciay committed
        ) := { 
            ecdsaBrainpoolP256r1 := p_ecdsaBrainpoolP256r1
        } // End of template mw_publicVerificationKey_ecdsaBrainpoolP256r1
        template (value) PublicVerificationKey m_publicVerificationKey_ecdsaBrainpoolP384r1(
                                                                                            in template (value) EccP384CurvePoint p_ecdsaBrainpoolP384r1
garciay's avatar
garciay committed
        ) := { 
            ecdsaBrainpoolP384r1 := p_ecdsaBrainpoolP384r1
        } // End of template m_publicVerificationKey_ecdsaBrainpoolP384r1
        template (present) PublicVerificationKey mw_publicVerificationKey_ecdsaBrainpoolP384r1(
                                                                                               template (present) EccP384CurvePoint p_ecdsaBrainpoolP384r1 := ?
garciay's avatar
garciay committed
        ) := { 
            ecdsaBrainpoolP384r1 := p_ecdsaBrainpoolP384r1
        } // End of template mw_publicVerificationKey_ecdsaBrainpoolP384r1
    } // End of group verificationKeys
    
    group encryptionKey {
        
        template (value) PublicEncryptionKey m_encryptionKey(
                                                             in template (value) SymmAlgorithm p_supportedSymmAlg := aes128Ccm,
                                                             in template (value) BasePublicEncryptionKey p_publicKey
        ) := { 
            supportedSymmAlg := p_supportedSymmAlg,
            publicKey        := p_publicKey
        } // End of template m_encryptionKey
        
        template (present) PublicEncryptionKey mw_encryptionKey(
                                                                template (present) SymmAlgorithm p_supportedSymmAlg := aes128Ccm,
                                                                template (present) BasePublicEncryptionKey p_publicKey := ?
        ) := { 
            supportedSymmAlg := p_supportedSymmAlg,
            publicKey        := p_publicKey
        } // End of template mw_encryptionKey
        
        template (value) BasePublicEncryptionKey m_publicEncryptionKey_ecdsaNistP256(
                                                                                     in template (value) EccP256CurvePoint p_eciesNistP256
        ) := { 
            eciesNistP256 := p_eciesNistP256
        } // End of template m_publicEncryptionKey_ecdsaNistP256
        
        template (present) BasePublicEncryptionKey mw_publicEncryptionKey_ecdsaNistP256(
                                                                                        template (present) EccP256CurvePoint p_eciesNistP256 := ?
        ) := { 
            eciesNistP256 := p_eciesNistP256
        } // End of template mw_publicEncryptionKey_ecdsaNistP256
        
        template (value) BasePublicEncryptionKey m_publicEncryptionKey_eciesBrainpoolP256r1(
                                                                                            in template (value) EccP256CurvePoint p_eciesBrainpoolP256r1
        ) := { 
            eciesBrainpoolP256r1 := p_eciesBrainpoolP256r1
        } // End of template m_publicEncryptionKey_eciesBrainpoolP256r1
        
        template (present) BasePublicEncryptionKey mw_publicEncryptionKey_eciesBrainpoolP256r1(
                                                                                               template (present) EccP256CurvePoint p_eciesBrainpoolP256r1 := ?
        ) := { 
            eciesBrainpoolP256r1 := p_eciesBrainpoolP256r1
        } // End of template mw_publicEncryptionKey_eciesBrainpoolP256r1
        
    } // End of group encryptionKey
    
    group appPermissions {
        
        template (omit) PsidSsp m_appPermissions(
                                                 in template (value) Psid p_psid,
                                                 in template (omit) ServiceSpecificPermissions p_ssp := omit
        ) := {
            psid   := p_psid,
            ssp    := p_ssp
        } // End of template m_appPermissions
        
        template (present) PsidSsp mw_appPermissions(
                                                     template (present) Psid p_psid := ?,
                                                     template ServiceSpecificPermissions p_ssp := *
        ) := {
            psid   := p_psid,
            ssp    := p_ssp
        } // End of template mw_appPermissions
        
        template (value) PsidSspRange m_psidSspRange(
                                                     in Psid p_psid,
                                                     in template (value) SspRange p_sspRange := m_SspRange_all
        ) := {
            psid        := p_psid,
            sspRange    := p_sspRange
        } // End of template m_psidSspRange
        
        template (value) SspRange m_SspRange_all := {
            all_ := NULL
        } // End of template m_SspRange_all
        
        template (value) SspRange m_SspRange_opaque(
                                                    in template (value) SequenceOfOctetString p_opaque
        ) := {
            opaque := p_opaque
        } // End of template m_SspRange_opaque
        
        template (value) SspRange m_SspRange_bitmapSspRange(
                                                            in template (value) BitmapSspRange p_bitmapSspRange
        ) := {
            bitmapSspRange := p_bitmapSspRange
        } // End of template m_SspRange_bitmapSspRange
        
        template (value) PsidGroupPermissions m_psidGroupPermissions(
                                                                     in template (value) SubjectPermissions p_subjectPermissions,
                                                                     in integer p_minChainLength := 1,
                                                                     in integer p_chainLengthRange := 0, 
                                                                     in EndEntityType p_eeType := oct2bit('00'O)
        ) := {
            subjectPermissions := p_subjectPermissions,
            minChainLength     := p_minChainLength,
            chainLengthRange   := p_chainLengthRange, 
            eeType             := p_eeType
        } // End of template m_psidGroupPermissions
        
        template (present) PsidGroupPermissions mw_psidGroupPermissions(
                                                                        template (present) SubjectPermissions p_subjectPermissions := ?,
                                                                        integer p_minChainLength := 1,
                                                                        integer p_chainLengthRange := 0, 
                                                                        template (present) EndEntityType p_eeType := ?
        ) := {
            subjectPermissions := p_subjectPermissions,
            minChainLength     := p_minChainLength,
            chainLengthRange   := p_chainLengthRange, 
            eeType             := p_eeType
        } // End of template mw_psidGroupPermissions
        
        template (value) SubjectPermissions m_subjectPermissions_explicit(
                                                                          in template (value) SequenceOfPsidSspRange p_certIssuePermissions
        ) := {
            explicit := p_certIssuePermissions
        } // End of template m_subjectPermissions_explicit
        
        template (present) SubjectPermissions mw_subjectPermissions_explicit(
                                                                             template (present) SequenceOfPsidSspRange p_certIssuePermissions := ?
        ) := {
            explicit := p_certIssuePermissions
        } // End of template mw_subjectPermissions_explicit
        
        template (value) SubjectPermissions m_subjectPermissions_all := {
            all_ := NULL
        } // End of template m_subjectPermissions_all
        
    } // End of group appPermissions
    
    
    group validityRestriction {
        
        template (value) ValidityPeriod m_validityPeriod(
                                                         in template (value) Time32 p_start_,
                                                         in template (value) Duration p_duration       
        ) := {
            start_   := p_start_,
            duration := p_duration
        } // End of template m_validityPeriod
        
        template (present) ValidityPeriod mw_validityPeriod(
                                                            template (present) Time32 p_start_ := ?,
                                                            template (present) Duration p_duration := ?      
        ) := {
            start_   := p_start_,
            duration := p_duration
        } // End of template mw_validityPeriod
         * @desc Send template for Duration (in seconds)
         * @param p_duration    The duration value
         * @see Draft ETSI TS 103 097 V1.3.1 Clause 4.2.18  Duration
        template (value) Duration m_duration_in_seconds(
                                                        in template (value) Int16 p_duration
        ) := {
            seconds := p_duration
        } // End of template m_duration_in_seconds
        /**
         * @desc Send template for Duration (in hours)
         * @param p_duration    The duration value
         * @see Draft ETSI TS 103 097 V1.3.1 Clause 4.2.18  Duration
         */
        template (value) Duration m_duration_in_hours(
                                                      in template (value) Int16 p_duration
                                                      ) := {
         hours := p_duration
      } // End of template m_duration_in_hours
        
         * @desc Receive template for Duration (in seconds)
         * @param p_duration    The duration value
         * @see Draft ETSI TS 103 097 V1.3.1 Clause 4.2.18  Duration
        template (present) Duration mw_duration_in_seconds(
                                                           template (present) Int16 p_duration := ?
        ) := {
            seconds := p_duration
        } // End of template mw_duration_in_seconds
        
        template (value) Duration m_duration_years(
                                                   in template (value) Uint16 p_years
        ) := {
            years := p_years
        } // End of template m_duration_years
        
        template (present) Duration mw_duration_years(
                                                      template (present) Uint16 p_years := ?
        ) := {
            years := p_years
        } // End of template mw_duration_years
        
    } // End of group validityRestriction
    
garciay's avatar
garciay committed
    group ssp {
        
        group sspCam {
                
            group sspCamSend {
                
                template (value) SspCAM m_sspCAMContainer_sign_all := {
                    cenDsrcTollingZone                      := '1'B,
                    publicTransport                         := '1'B,
                    specialTransport                        := '1'B,
                    dangerousGoods                          := '1'B,
                    roadwork                                := '1'B,
                    rescue                                  := '1'B,
                    emergency                               := '1'B,
                    safetyCar                               := '1'B,
                    closedLanes                             := '1'B,
                    requestForRightOfWay                    := '1'B,
                    requestForFreeCrossingAtATrafficLight   := '1'B,
                    noPassing                               := '1'B,
                    noPassingForTrucks                      := '1'B,
                    speedLimit                              := '1'B,
garciay's avatar
garciay committed
                    reserved                                := '000000000000000000'B
                } // End of template m_sspCAMContainer_sign_all
                
                template (value) SspCAM m_sspCAMContainer_vehicle 
                modifies m_sspCAMContainer_sign_all := {
                    cenDsrcTollingZone                      := '0'B,
                    closedLanes                             := '0'B,
                    noPassing                               := '0'B,
                    noPassingForTrucks                      := '0'B,
                    speedLimit                              := '0'B
                } // End of template m_sspCAMContainer_vehicle
                
garciay's avatar
garciay committed
                template (value) ServiceSpecificPermissions m_sspCAM(
                                                                     in template (value) BitmapSsp p_bitmapSsp
                ) := {
                    bitmapSsp := p_bitmapSsp
                } // End of template m_sspCAM
                
            } // End of group sspCamSend
            
            group sspCamRecv {
                
                template (present) SspCAM mw_sspCAMContainer_dummy := {
                    cenDsrcTollingZone                      := ?,
                    publicTransport                         := ?,
                    specialTransport                        := ?,
                    dangerousGoods                          := ?,
                    roadwork                                := ?,
                    rescue                                  := ?,
                    emergency                               := ?,
                    safetyCar                               := ?,
                    closedLanes                             := ?,
                    requestForRightOfWay                    := ?,
                    requestForFreeCrossingAtATrafficLight   := ?,
                    noPassing                               := ?,
                    noPassingForTrucks                      := ?,
                    speedLimit                              := ?,
garciay's avatar
garciay committed
                    reserved                                := '000000000000000000'B
                } // End of template mw_sspCAMContainer_dummy
                template (present) ServiceSpecificPermissions mw_sspCAM_dummy := {
garciay's avatar
garciay committed
                    bitmapSsp := ?
                } // End of template mw_sspCAM_dummy
            } // End of group sspCamRecv
            
        } // End of group sspCam
        
        group sspDenm {
                
            group sspDenmSend {
                
                template (value) SspDENM m_sspDENMContainer_sign_all := {
                    trafficCondition                                := '1'B,
                    accident                                        := '1'B,
                    roadworks                                       := '1'B,
                    adverseWeatherCondition_Adhesion                := '1'B,
                    hazardousLocation_SurfaceCondition              := '1'B,
                    hazardousLocation_ObstacleOnTheRoad             := '1'B,
                    hazardousLocation_AnimalOnTheRoad               := '1'B,
                    humanPresenceOnTheRoad                          := '1'B,
                    wrongWayDriving                                 := '1'B,
                    rescueAndRecoveryWorkInProgress                 := '1'B,
                    adverseWeatherCondition_ExtremeWeatherCondition := '1'B,
                    adverseWeatherCondition_Visibility              := '1'B,
                    adverseWeatherCondition_Precipitation           := '1'B,
                    slowVehicle                                     := '1'B,
                    dangerousEndOfQueue                             := '1'B,
                    vehicleBreakdown                                := '1'B,
                    postCrash                                       := '1'B,
                    humanProblem                                    := '1'B,
                    stationaryVehicle                               := '1'B,
                    emergencyVehicleApproaching                     := '1'B,
                    hazardousLocation_DangerousCurve                := '1'B,
                    collisionRisk                                   := '1'B,
                    signalViolation                                 := '1'B,
garciay's avatar
garciay committed
                    dangerousSituation                              := '1'B,
                    reserved                                        := '00000000'B
                } // End of template m_sspDENMContainer_sign_all
                
                template (value) SspDENM m_sspDENMContainer_vehicle 
                modifies m_sspDENMContainer_sign_all:= {
                    trafficCondition                                := '0'B,
                    accident                                        := '0'B,
                    roadworks                                       := '0'B,
                    adverseWeatherCondition_Adhesion                := '0'B,
                    hazardousLocation_SurfaceCondition              := '0'B,
                    hazardousLocation_ObstacleOnTheRoad             := '0'B,
                    hazardousLocation_AnimalOnTheRoad               := '0'B,
                    slowVehicle                                     := '0'B,
                    dangerousEndOfQueue                             := '0'B,
                    vehicleBreakdown                                := '0'B,
                    stationaryVehicle                               := '0'B
                } // End of template m_sspDENMContainer_sign_all
                
                template (value) SspDENM m_sspDENMContainer_roadSideUnit 
                modifies m_sspDENMContainer_sign_all:= {
                    trafficCondition                                := '0'B,
                    accident                                        := '0'B,
                    roadworks                                       := '0'B,
                    adverseWeatherCondition_Adhesion                := '0'B,
                    hazardousLocation_SurfaceCondition              := '0'B,
                    hazardousLocation_ObstacleOnTheRoad             := '0'B,
                    hazardousLocation_AnimalOnTheRoad               := '0'B,
                    humanPresenceOnTheRoad                          := '0'B,
                    wrongWayDriving                                 := '0'B,
                    rescueAndRecoveryWorkInProgress                 := '0'B,
                    adverseWeatherCondition_ExtremeWeatherCondition := '0'B,
                    adverseWeatherCondition_Visibility              := '0'B,
                    adverseWeatherCondition_Precipitation           := '0'B,
                    postCrash                                       := '0'B,
                    humanProblem                                    := '0'B,
                    stationaryVehicle                               := '0'B,
                    hazardousLocation_DangerousCurve                := '0'B,
                    collisionRisk                                   := '0'B,
                    dangerousSituation                              := '0'B
                } // End of template m_sspDENMContainer_roadSideUnit
                
garciay's avatar
garciay committed
                template (value) ServiceSpecificPermissions m_sspDENM(
                                                                      in template (value) BitmapSsp p_bitmapSsp
                ) := {
                    bitmapSsp := p_bitmapSsp
                } // End of template m_sspDENM
                
            } // End of group sspDenmSend
            
            group sspDenmRecv {
                
                template (present) SspDENM mw_sspDENMContainer_dummy := {
                    trafficCondition                                := ?,
                    accident                                        := ?,
                    roadworks                                       := ?,
                    adverseWeatherCondition_Adhesion                := ?,
                    hazardousLocation_SurfaceCondition              := ?,
                    hazardousLocation_ObstacleOnTheRoad             := ?,