test_LibItsGeoNetworking_TypesAndValues.ttcn 155 KB
Newer Older
                f_setGenerationLocation(
                    f_getTsLatitude(),
                    f_getTsLongitude()
                );
                
                // Build signed SecuredMessage
                v_gnPayload := bit2oct( // Create GN payload
                    encvalue(
                        m_geoNwLsRequestPacket(
                            m_dummyLongPosVectorIut,
                            12345,
                            m_dummyGnAddrIut
                        )
                    )
                );
                f_buildGnSecuredOtherMessage(
                    v_securedMessageBeacon,
                    m_payload_signed(v_gnPayload),
                    e_certificate_digest_with_sha256,
                    m_threeDLocation(
                        1234,
                        5678,
                        '002F'O
                    )
                );
                
                // Build secured Gn packet
                v_gnReq := m_geoNwReq_linkLayerBroadcast(
                    m_geoNwSecPdu(
                        m_geoNwLsRequestPacket(
                            m_dummyLongPosVectorIut,
                            12345,
                            m_dummyGnAddrIut
                        ), // End of template m_geoNwLsRequestPacket
                        v_securedMessageBeacon
                    ) // End of template m_geoNwSecPdu
                ); // End of template m_geoNwReq_linkLayerBroadcast
                
                // Encode it
                v_encMsg := bit2oct(encvalue(v_gnReq));
                if (not isbound(v_encMsg)) {
                    setverdict(fail, "Encoding failed!");
                setverdict(pass, "Encoding passed.");
                // Decode it
                test_decodePDU<GeoNetworkingReq>(
                    v_gnReq, 
                    v_encMsg
                log("Secured beacon: ", v_encMsg);
                if (decvalue(oct2bit(v_encMsg), v_gnReq) == 0) {
                    if (f_verifyGnSecuredMessageSignatureWithCertificate(v_gnReq.msgOut.gnPacket.securedMsg, vc_atCertificate) == true) {
                        setverdict(pass, "Signature check succeed.");
                    } else {
                        setverdict(fail, "Signature check failed.");
                    } 
                } else {
                    setverdict(fail, "Decoding failed.");
                }
             * @desc validate GeoNetworkingReq/LsReply
filatov's avatar
filatov committed
             * @verdict Pass on success, Fail otherwise
             */
            testcase tc_GeoNetReq_LsReplyPacket() runs on TCType system TCType {
                var GeoNetworkingReq v_gnReq;
                var octetstring v_buffer := '01002B0A0061800000000A0030390000BC21A4FEDECABEEF0001E240000012F8000002A3803726948431A4FDEA5EA5ED0000036B0000010900000315FFFFFFFFFFFF'O;
filatov's avatar
filatov committed
                
                if (PX_GN_UPPER_LAYER != e_any) {
                    log("PX_GN_UPPER_LAYER shall be set to e_any");
                    stop;
                }
                
                v_gnReq := m_geoNwReq_linkLayerBroadcast(
                    m_geoNwPdu(
                        m_geoNwLsReplyPacket(
                            m_dummyLongPosVectorIut,
                            f_longPosVector2ShortPosVector(m_dummyLongPosVectorNodeA),
                            12345
                )));
filatov's avatar
filatov committed
                test_PDU<GeoNetworkingReq>(
filatov's avatar
filatov committed
                    false, 
filatov's avatar
filatov committed
                test_decodePDU<GeoNetworkingReq>(
             * @desc validate secured GeoNetworkingReq/LsReply
filatov's avatar
filatov committed
             * @verdict Pass on success, Fail otherwise
             */
            testcase tc_GeoNetReq_SecuredLsReplyPacket() runs on TCType system TCType {
                var GeoNetworkingReq v_gnReq;
                var octetstring v_gnPayload, v_encMsg;
                var template (value) ToBeSignedSecuredMessage v_toBeSignedSecuredMessage;
                var template (value) SecuredMessage v_securedMessageBeacon;
filatov's avatar
filatov committed
                
                if (PX_GN_UPPER_LAYER != e_any) {
                    log("PX_GN_UPPER_LAYER shall be set to e_any");
                    stop;
                }
                
                // Load certificates & keys
                if (f_loadCertificates(PX_IUT_SEC_CONFIG_NAME) == false) {
                    setverdict(fail);
                    stop;
                }
                f_setGenerationLocation(
                    f_getTsLatitude(),
                    f_getTsLongitude()
                );
                
                // Build signed SecuredMessage
                v_gnPayload := bit2oct( // Create GN payload
                    encvalue(
                        m_geoNwLsReplyPacket(
                            m_dummyLongPosVectorIut,
                            f_longPosVector2ShortPosVector(m_dummyLongPosVectorNodeA),
                            12345
                        )
                    )
                );
                f_buildGnSecuredOtherMessage(
                    v_securedMessageBeacon,
                    m_payload_signed(v_gnPayload),
                    e_certificate_digest_with_sha256,
                    m_threeDLocation(
                        1234,
                        5678,
                        '002F'O
                    )
                );
                
                // Build secured Gn packet
                v_gnReq := m_geoNwReq_linkLayerBroadcast(
                    m_geoNwSecPdu(
                        m_geoNwLsReplyPacket(
                            m_dummyLongPosVectorIut,
                            f_longPosVector2ShortPosVector(m_dummyLongPosVectorNodeA),
                            12345
                        ), // End of template m_geoNwLsReplyPacket
                        v_securedMessageBeacon
                    ) // End of template m_geoNwSecPdu
                ); // End of template m_geoNwReq_linkLayerBroadcast
                
                // Encode it
                v_encMsg := bit2oct(encvalue(v_gnReq));
                if (not isbound(v_encMsg)) {
                    setverdict(fail, "Encoding failed!");
                    stop;
                }
                
                setverdict(pass, "Encoding passed.");
                // Decode it
filatov's avatar
filatov committed
                test_decodePDU<GeoNetworkingReq>(
                log("Secured beacon: ", v_encMsg);
                if (decvalue(oct2bit(v_encMsg), v_gnReq) == 0) {
                    if (f_verifyGnSecuredMessageSignatureWithCertificate(v_gnReq.msgOut.gnPacket.securedMsg, vc_atCertificate) == true) {
                        setverdict(pass, "Signature check succeed.");
                    } else {
                        setverdict(fail, "Signature check failed.");
                    } 
                } else {
                    setverdict(fail, "Decoding failed.");
                }
            }
            
             * @desc validate GeoNetworkingReq/NwShb
filatov's avatar
filatov committed
             * @verdict Pass on success, Fail otherwise
             */
            testcase tc_GeoNetReq_NwShbPacket() runs on TCType system TCType {
                var GeoNetworkingReq v_gnReq;
                var octetstring v_buffer := '01002B0A00508000000F0A00BC21A4FEDECABEEF0001E240000012F8000002A3803726940000000044454641554C545F5041594C4F4144FFFFFFFFFFFF'O;
filatov's avatar
filatov committed
                
                if (PX_GN_UPPER_LAYER != e_any) {
                    log("PX_GN_UPPER_LAYER shall be set to e_any");
                    stop;
                }
                
                v_gnReq := m_geoNwReq_linkLayerBroadcast(
                    m_geoNwPdu(
                        m_geoNwShbPacket(
                            m_dummyLongPosVectorIut
                )));
filatov's avatar
filatov committed
                test_PDU<GeoNetworkingReq>(
                    v_gnReq, 
                    false
                );
                v_gnReq.msgOut.gnPacket.packet.commonHeader.plLength := 15;
filatov's avatar
filatov committed
                test_decodePDU<GeoNetworkingReq>(
             * @desc validate GeoNetworkingReq/NwShb with a CAM payload
filatov's avatar
filatov committed
             * @verdict Pass on success, Fail otherwise
             */
            testcase tc_GeoNetReq_NwShbPacketWithBtpPayloadCam() runs on TCType system TCType {
                var GeoNetworkingReq v_gnReq;
                var octetstring v_buffer := '01002B0A10508000002E0A00BC21A4FEDECABEEF0001E240000012F8000002A380372694000000000000000001020001B20788B80059F48D95CDEFC8C5E0020020002461A83C000004805A100C4528399D4C387FFF80FFFFFFFFFFFF'O;
                if ((PX_GN_UPPER_LAYER != e_btpA) and (PX_GN_UPPER_LAYER != e_btpB)) {
                    log("PX_GN_UPPER_LAYER shall be set to e_btpA or e_btpB");
filatov's avatar
filatov committed
                    setverdict(inconc);
                    stop;
                }
                
                v_gnReq := m_geoNwReq_linkLayerBroadcast(
                    m_geoNwPdu(
                        m_geoNwShbPacket(
                            m_dummyLongPosVectorIut
                )));
                v_gnReq.msgOut.gnPacket.packet.payload := f_adaptPayload_m(
                    bit2oct(
                        encvalue(
                            m_camReq(
                                m_camMsg(
                                    f_getTsStationId(),
                                    35000
                                )
                            )
                        )
                    )
                );
                
filatov's avatar
filatov committed
                test_PDU<GeoNetworkingReq>(
                    v_gnReq, 
                    false
                );
                v_gnReq.msgOut.gnPacket.packet.commonHeader.plLength := 46;
filatov's avatar
filatov committed
                test_decodePDU<GeoNetworkingReq>(
             * @desc validate GeoNetworkingReq/NwShb with a DENM payload
filatov's avatar
filatov committed
             * @verdict Pass on success, Fail otherwise
             */
            testcase tc_GeoNetReq_NwShbPacketWithBtpPayloadDenm() runs on TCType system TCType {
                var template (value) SituationContainer v_situation := m_situation(CauseCodeType_vehicleBreakdown_, VehicleBreakdownSubCauseCode_unavailable_);
                var GeoNetworkingReq v_gnReq;
                var octetstring v_buffer := '01002B0A20508000003C0A00BC21A4FEDECABEEF0001E240000012F8000002A3803726940000000007D2000001010001B207C70000D90380000A0843ABBBE28210EAF534FA46CAE6F7E4630001001000186A000009600C05B00000DFFFF7FFFD8CE40400FFFFFFFFFFFF'O;
                if (PX_GN_UPPER_LAYER != e_btpB) {
                    log("PX_GN_UPPER_LAYER shall be set to e_btpB");
filatov's avatar
filatov committed
                    setverdict(inconc);
                    stop;
                }
                
                v_gnReq := m_geoNwReq_linkLayerBroadcast(
                    m_geoNwPdu(
                        m_geoNwShbPacket(
                            m_dummyLongPosVectorIut
                )));
                v_gnReq.msgOut.gnPacket.packet.payload := f_adaptPayload_m(
                    bit2oct(
                        encvalue(
                            m_denmReq(
                                m_denmPdu(
                                    m_denm(
                                        m_denmMgmtCon(
                                            m_tsActionId
                                        ),
                                        v_situation,
                                        m_denmLocation_zeroDelta
                                    )
                               )
                           )
                        )
                    )
                );
                
filatov's avatar
filatov committed
                test_PDU<GeoNetworkingReq>(
                v_gnReq.msgOut.gnPacket.packet.commonHeader.plLength := 60;
filatov's avatar
filatov committed
                test_decodePDU<GeoNetworkingReq>(
            
            /**
             * @desc validate secured GeoNetworkingReq/NwShb
             * @verdict Pass on success, Fail otherwise
             */
            testcase tc_GeoNetReq_SecuredNwShbPacket() runs on TCType system TCType {
                var GeoNetworkingReq v_gnReq;
                var octetstring v_gnPayload, v_encMsg;
                var template (value) ToBeSignedSecuredMessage v_toBeSignedSecuredMessage;
                var template (value) SecuredMessage v_securedMessageBeacon;
                
                if (PX_GN_UPPER_LAYER != e_any) {
                    log("PX_GN_UPPER_LAYER shall be set to e_any");
                
                // Load certificates & keys
                if (f_loadCertificates(PX_IUT_SEC_CONFIG_NAME) == false) {
                f_setGenerationLocation(
                    f_getTsLatitude(),
                    f_getTsLongitude()
                );
                
                // Build signed SecuredMessage
                v_gnPayload := bit2oct( // Create GN payload
                    encvalue(
                        m_geoNwShbPacket( 
                            m_dummyLongPosVectorIut
                        )
                    )
                );
                f_buildGnSecuredOtherMessage(
                    v_securedMessageBeacon,
                    m_payload_signed(v_gnPayload),
                    e_certificate_digest_with_sha256,
                    m_threeDLocation(
                        1234,
                        5678,
                        '002F'O
                    )
                );
                
                // Build secured Gn packet
                v_gnReq := m_geoNwReq_linkLayerBroadcast(
                    m_geoNwSecPdu(
                        m_geoNwShbPacket(
                            m_dummyLongPosVectorIut
                        ), // End of template m_geoNwLsReplyPacket
                        v_securedMessageBeacon
                    ) // End of template m_geoNwSecPdu
                ); // End of template m_geoNwReq_linkLayerBroadcast
                
                // Encode it
                v_encMsg := bit2oct(encvalue(v_gnReq));
                if (not isbound(v_encMsg)) {
                    setverdict(fail, "Encoding failed!");
                setverdict(pass, "Encoding passed.");
                // Decode it
                v_gnReq.msgOut.gnPacket.packet.commonHeader.plLength := 15;
                test_decodePDU<GeoNetworkingReq>(
                    v_gnReq, 
                    v_encMsg
                );
                if (decvalue(oct2bit(v_encMsg), v_gnReq) == 0) {
                    if (f_verifyGnSecuredMessageSignatureWithCertificate(v_gnReq.msgOut.gnPacket.securedMsg, vc_atCertificate) == true) {
                        setverdict(pass, "Signature check succeed.");
                    } else {
                        setverdict(fail, "Signature check failed.");
                    } 
filatov's avatar
filatov committed
                } else {
                    setverdict(fail, "Decoding failed.");
             * @desc validate secured with digest GeoNetworkingReq/NwShb with a CAM payload
filatov's avatar
filatov committed
             * @verdict Pass on success, Fail otherwise
             */
            testcase tc_GeoNetReq_SecuredDigestNwShbPacketWithBtpPayloadCam() runs on TCType system TCType {
                var GeoNetworkingReq v_gnReq;
                var GnNonSecuredPacket v_gnNonSecuredPacket;
                var octetstring v_gnPayload, v_encMsg;
                var template (value) ToBeSignedSecuredMessage v_toBeSignedSecuredMessage;
                var template (value) SecuredMessage v_securedMessageBeacon;
                
                if ((PX_GN_UPPER_LAYER != e_btpA) and (PX_GN_UPPER_LAYER != e_btpB)) {
                    log("PX_GN_UPPER_LAYER shall be set to e_btpA or e_btpB");
                    setverdict(inconc);
                    stop;
                }
                
                // Load certificates & keys
                if (f_loadCertificates(PX_IUT_SEC_CONFIG_NAME) == false) {
filatov's avatar
filatov committed
                    setverdict(fail);
                f_setGenerationLocation(
                    f_getTsLatitude(),
                    f_getTsLongitude()
                
                // Build signed SecuredMessage
                v_gnNonSecuredPacket := m_geoNwShbPacket(
                    m_dummyLongPosVectorIut
                );
                log("v_gnNonSecuredPacket= ", v_gnNonSecuredPacket);
                // Add CAM payload
                v_gnNonSecuredPacket.payload := f_adaptPayload_m(
                    bit2oct(
                        encvalue(
                            m_camReq(
                                m_camMsg(
                                    f_getTsStationId(),
                                    35000
                                )
                            )
                        )
                    )
                );
                log("v_gnNonSecuredPacket.payload= ", v_gnNonSecuredPacket.payload);
                // Encode it
                v_gnPayload := bit2oct( 
                    encvalue(
                        v_gnNonSecuredPacket
                    )
                );
                log("v_gnPayload= ", v_gnPayload);
                f_buildGnSecuredCam(
                    v_securedMessageBeacon,
                    m_payload_signed(v_gnPayload)
                );
                log("v_securedMessageBeacon= ", v_securedMessageBeacon);
                
                // Build secured Gn packet
                v_gnReq := m_geoNwReq_linkLayerBroadcast(
                    m_geoNwSecPdu(
                        v_gnNonSecuredPacket,
                        v_securedMessageBeacon
                    ) // End of template m_geoNwSecPdu
                ); // End of template m_geoNwReq_linkLayerBroadcast
                
                // Encode it
                v_encMsg := bit2oct(encvalue(v_gnReq));
                log("v_encMsg= ", v_encMsg);
                if (not isbound(v_encMsg)) {
                    setverdict(fail, "Encoding failed!");
                    stop;
                }
                setverdict(pass, "Encoding passed.");
                // Decode it
                v_gnReq.msgOut.gnPacket.packet.commonHeader.plLength := 45;
                test_decodePDU<GeoNetworkingReq>(
                    v_gnReq, 
                    v_encMsg
                log("v_gnReq: ", v_gnReq);
                
                if (decvalue(oct2bit(v_encMsg), v_gnReq) == 0) {
                    if (f_verifyGnSecuredMessageSignatureWithCertificate(v_gnReq.msgOut.gnPacket.securedMsg, vc_atCertificate) == true) {
                        setverdict(pass, "Signature check succeed.");
                    } else {
                        setverdict(fail, "Signature check failed.");
                    } 
                } else {
                    setverdict(fail, "Decoding failed.");
                }
            
            /**
             * @desc validate secured with digest GeoNetworkingReq/NwShb with a CAM payload and one additional header field
             * @verdict Pass on success, Fail otherwise
             */
            testcase tc_GeoNetReq_SecuredDigestNwShbPacketWithBtpPayloadCam_withMoreHeaders_1() runs on TCType system TCType {
                var GeoNetworkingReq v_gnReq;
                var GnNonSecuredPacket v_gnNonSecuredPacket;
                var octetstring v_gnPayload, v_encMsg;
                var template (value) ToBeSignedSecuredMessage v_toBeSignedSecuredMessage;
                var template (value) SecuredMessage v_securedMessageBeacon;
                
                if ((PX_GN_UPPER_LAYER != e_btpA) and (PX_GN_UPPER_LAYER != e_btpB)) {
                    log("PX_GN_UPPER_LAYER shall be set to e_btpA or e_btpB");
                    setverdict(inconc);
                    stop;
                }
                
                // Load certificates & keys
                if (f_loadCertificates(PX_IUT_SEC_CONFIG_NAME) == false) {
                    setverdict(fail);
                    stop;
                }
                f_setGenerationLocation(
                    f_getTsLatitude(),
                    f_getTsLongitude()
                );
                
                // Build signed SecuredMessage
                v_gnNonSecuredPacket := m_geoNwShbPacket(
                    m_dummyLongPosVectorIut
                );
                log("v_gnNonSecuredPacket= ", v_gnNonSecuredPacket);
                // Add CAM payload
                v_gnNonSecuredPacket.payload := f_adaptPayload_m(
                    bit2oct(
                        encvalue(
                            m_camReq(
                                m_camMsg(
                                    f_getTsStationId(),
                                    35000
                                )
                            )
                        )
                    )
                );
                log("v_gnNonSecuredPacket.payload= ", v_gnNonSecuredPacket.payload);
                // Encode it
                v_gnPayload := bit2oct( 
                    encvalue(
                        v_gnNonSecuredPacket
                    )
                );
                log("v_gnPayload= ", v_gnPayload);
                f_buildGnSecuredCam(
                    v_securedMessageBeacon,
                    m_payload_signed(v_gnPayload),
                    e_certificate_digest_with_sha256,
                    {
                        m_header_field_unrecognised_certificate(
                            f_HashedId3FromHashedId8(
                                vc_aaCertificate.signer_info.signerInfo.digest
                            )
                        )
                     }
                );
                log("v_securedMessageBeacon= ", v_securedMessageBeacon);
                
                // Build secured Gn packet
                v_gnReq := m_geoNwReq_linkLayerBroadcast(
                    m_geoNwSecPdu(
                        v_gnNonSecuredPacket,
                        v_securedMessageBeacon
                    ) // End of template m_geoNwSecPdu
                ); // End of template m_geoNwReq_linkLayerBroadcast
                
                // Encode it
                v_encMsg := bit2oct(encvalue(v_gnReq));
                log("v_encMsg= ", v_encMsg);
                if (not isbound(v_encMsg)) {
                    setverdict(fail, "Encoding failed!");
                    stop;
                }
                setverdict(pass, "Encoding passed.");
                // Decode it
                v_gnReq.msgOut.gnPacket.packet.commonHeader.plLength := 45;
                test_decodePDU<GeoNetworkingReq>(
                    v_gnReq, 
                    v_encMsg
                );
                log("v_gnReq: ", v_gnReq);
                
                if (decvalue(oct2bit(v_encMsg), v_gnReq) == 0) {
                    if (f_verifyGnSecuredMessageSignatureWithCertificate(v_gnReq.msgOut.gnPacket.securedMsg, vc_atCertificate) == true) {
                        setverdict(pass, "Signature check succeed.");
                    } else {
                        setverdict(fail, "Signature check failed.");
                    } 
                } else {
                    setverdict(fail, "Decoding failed.");
                }
            }
            
            /**
             * @desc validate secured with digest GeoNetworkingReq/NwShb with a CAM payload and two additional header field
             * @verdict Pass on success, Fail otherwise
             */
            testcase tc_GeoNetReq_SecuredDigestNwShbPacketWithBtpPayloadCam_withMoreHeaders_2() runs on TCType system TCType {
                var GeoNetworkingReq v_gnReq;
                var GnNonSecuredPacket v_gnNonSecuredPacket;
                var octetstring v_gnPayload, v_encMsg;
                var template (value) ToBeSignedSecuredMessage v_toBeSignedSecuredMessage;
                var template (value) SecuredMessage v_securedMessageBeacon;
                
                if ((PX_GN_UPPER_LAYER != e_btpA) and (PX_GN_UPPER_LAYER != e_btpB)) {
                    log("PX_GN_UPPER_LAYER shall be set to e_btpA or e_btpB");
                    setverdict(inconc);
                    stop;
                }
                
                // Load certificates & keys
                if (f_loadCertificates(PX_IUT_SEC_CONFIG_NAME) == false) {
                    setverdict(fail);
                    stop;
                }
                f_setGenerationLocation(
                    f_getTsLatitude(),
                    f_getTsLongitude()
                );
                
                // Build signed SecuredMessage
                v_gnNonSecuredPacket := m_geoNwShbPacket(
                    m_dummyLongPosVectorIut
                );
                log("v_gnNonSecuredPacket= ", v_gnNonSecuredPacket);
                // Add CAM payload
                v_gnNonSecuredPacket.payload := f_adaptPayload_m(
                    bit2oct(
                        encvalue(
                            m_camReq(
                                m_camMsg(
                                    f_getTsStationId(),
                                    35000
                                )
                            )
                        )
                    )
                );
                log("v_gnNonSecuredPacket.payload= ", v_gnNonSecuredPacket.payload);
                // Encode it
                v_gnPayload := bit2oct( 
                    encvalue(
                        v_gnNonSecuredPacket
                    )
                );
                log("v_gnPayload= ", v_gnPayload);
                f_buildGnSecuredCam(
                    v_securedMessageBeacon,
                    m_payload_signed(v_gnPayload),
                    e_certificate_digest_with_sha256,
                    {
                        m_header_field_generation_location(
                            vc_location
                        ),
                        m_header_field_unrecognised_certificate(
                            f_HashedId3FromHashedId8(
                                vc_aaCertificate.signer_info.signerInfo.digest
                            )
                        )
                     }
                );
                log("v_securedMessageBeacon= ", v_securedMessageBeacon);
                
                // Build secured Gn packet
                v_gnReq := m_geoNwReq_linkLayerBroadcast(
                    m_geoNwSecPdu(
                        v_gnNonSecuredPacket,
                        v_securedMessageBeacon
                    ) // End of template m_geoNwSecPdu
                ); // End of template m_geoNwReq_linkLayerBroadcast
                
                // Encode it
                v_encMsg := bit2oct(encvalue(v_gnReq));
                log("v_encMsg= ", v_encMsg);
                if (not isbound(v_encMsg)) {
                    setverdict(fail, "Encoding failed!");
                    stop;
                }
                setverdict(pass, "Encoding passed.");
                // Decode it
                v_gnReq.msgOut.gnPacket.packet.commonHeader.plLength := 45;
                test_decodePDU<GeoNetworkingReq>(
                    v_gnReq, 
                    v_encMsg
                );
                log("v_gnReq: ", v_gnReq);
                
                if (decvalue(oct2bit(v_encMsg), v_gnReq) == 0) {
                    if (f_verifyGnSecuredMessageSignatureWithCertificate(v_gnReq.msgOut.gnPacket.securedMsg, vc_atCertificate) == true) {
                        setverdict(pass, "Signature check succeed.");
                    } else {
                        setverdict(fail, "Signature check failed.");
                    } 
                } else {
                    setverdict(fail, "Decoding failed.");
                }
            }
            
            /**
             * @desc validate secured with digest GeoNetworkingReq/NwShb with a CAM payload and three additional header field
             * @verdict Pass on success, Fail otherwise
             */
            testcase tc_GeoNetReq_SecuredDigestNwShbPacketWithBtpPayloadCam_withMoreHeaders_3() runs on TCType system TCType {
                var GeoNetworkingReq v_gnReq;
                var GnNonSecuredPacket v_gnNonSecuredPacket;
                var octetstring v_gnPayload, v_encMsg;
                var template (value) ToBeSignedSecuredMessage v_toBeSignedSecuredMessage;
                var template (value) SecuredMessage v_securedMessageBeacon;
                
                if ((PX_GN_UPPER_LAYER != e_btpA) and (PX_GN_UPPER_LAYER != e_btpB)) {
                    log("PX_GN_UPPER_LAYER shall be set to e_btpA or e_btpB");
                    setverdict(inconc);
                    stop;
                }
                
                // Load certificates & keys
                if (f_loadCertificates(PX_IUT_SEC_CONFIG_NAME) == false) {
                    setverdict(fail);
                    stop;
                }
                f_setGenerationLocation(
                    f_getTsLatitude(),
                    f_getTsLongitude()
                );
                
                // Build signed SecuredMessage
                v_gnNonSecuredPacket := m_geoNwShbPacket(
                    m_dummyLongPosVectorIut
                );
                log("v_gnNonSecuredPacket= ", v_gnNonSecuredPacket);
                // Add CAM payload
                v_gnNonSecuredPacket.payload := f_adaptPayload_m(
                    bit2oct(
                        encvalue(
                            m_camReq(
                                m_camMsg(
                                    f_getTsStationId(),
                                    35000
                                )
                            )
                        )
                    )
                );
                log("v_gnNonSecuredPacket.payload= ", v_gnNonSecuredPacket.payload);
                // Encode it
                v_gnPayload := bit2oct( 
                    encvalue(
                        v_gnNonSecuredPacket
                    )
                );
                log("v_gnPayload= ", v_gnPayload);
                f_buildGnSecuredCam(
                    v_securedMessageBeacon,
                    m_payload_signed(v_gnPayload),
                    e_certificate_digest_with_sha256,
                    {
                        m_header_field_signer_info(
                            m_signerInfo_certificate(
                                vc_aaCertificate
                        )),
                        m_header_field_generation_location(
                            vc_location
                        ),
                        m_header_field_unrecognised_certificate(
                            f_HashedId3FromHashedId8(
                                vc_aaCertificate.signer_info.signerInfo.digest
                            )
                        )
                     }
                );
                log("v_securedMessageBeacon= ", v_securedMessageBeacon);
                
                // Build secured Gn packet
                v_gnReq := m_geoNwReq_linkLayerBroadcast(
                    m_geoNwSecPdu(
                        v_gnNonSecuredPacket,
                        v_securedMessageBeacon
                    ) // End of template m_geoNwSecPdu
                ); // End of template m_geoNwReq_linkLayerBroadcast
                
                // Encode it
                v_encMsg := bit2oct(encvalue(v_gnReq));
                log("v_encMsg= ", v_encMsg);
                if (not isbound(v_encMsg)) {
                    setverdict(fail, "Encoding failed!");
                    stop;
                }
                setverdict(pass, "Encoding passed.");
                // Decode it
                v_gnReq.msgOut.gnPacket.packet.commonHeader.plLength := 45;
                test_decodePDU<GeoNetworkingReq>(
                    v_gnReq, 
                    v_encMsg
                );
                log("v_gnReq: ", v_gnReq);
                
                if (decvalue(oct2bit(v_encMsg), v_gnReq) == 0) {
                    if (f_verifyGnSecuredMessageSignatureWithCertificate(v_gnReq.msgOut.gnPacket.securedMsg, vc_atCertificate) == true) {
                        setverdict(pass, "Signature check succeed.");
                    } else {
                        setverdict(fail, "Signature check failed.");
                    } 
                } else {
                    setverdict(fail, "Decoding failed.");
                }
            }
            
            /**
             * @desc validate secured with certificate GeoNetworkingReq/NwShb with a CAM payload
             * @verdict Pass on success, Fail otherwise
             */
            testcase tc_GeoNetReq_SecuredCertificateNwShbPacketWithBtpPayloadCam() runs on TCType system TCType {
                var GeoNetworkingReq v_gnReq;
                var GnNonSecuredPacket v_gnNonSecuredPacket;
                var octetstring v_gnPayload, v_encMsg;
                var template (value) ToBeSignedSecuredMessage v_toBeSignedSecuredMessage;
                var template (value) SecuredMessage v_securedMessageBeacon;
                
                if ((PX_GN_UPPER_LAYER != e_btpA) and (PX_GN_UPPER_LAYER != e_btpB)) {
                    log("PX_GN_UPPER_LAYER shall be set to e_btpA or e_btpB");
                    setverdict(inconc);
                    stop;
                }
                
                // Load certificates & keys
                if (f_loadCertificates(PX_IUT_SEC_CONFIG_NAME) == false) {
                    setverdict(fail);
                    stop;
                }
                f_setGenerationLocation(
                    f_getTsLatitude(),
                    f_getTsLongitude()
                );
                
                // Build signed SecuredMessage
                v_gnNonSecuredPacket := m_geoNwShbPacket(
                    m_dummyLongPosVectorIut
                );
                log("v_gnNonSecuredPacket= ", v_gnNonSecuredPacket);
                // Add CAM payload
                v_gnNonSecuredPacket.payload := f_adaptPayload_m(
                    bit2oct(
                        encvalue(
                            m_camReq(
                                m_camMsg(
                                    f_getTsStationId(),
                                    35000
                                )
                            )
                        )
                    )
                );
                log("v_gnNonSecuredPacket.payload= ", v_gnNonSecuredPacket.payload);
                // Encode it
                v_gnPayload := bit2oct( 
                    encvalue(
                        v_gnNonSecuredPacket
                    )
                );
                log("v_gnPayload= ", v_gnPayload);
                f_buildGnSecuredCam(
                    v_securedMessageBeacon,
                    m_payload_signed(v_gnPayload),
                    e_certificate
                );
                log("v_securedMessageBeacon= ", v_securedMessageBeacon);
                
                // Build secured Gn packet
                v_gnReq := m_geoNwReq_linkLayerBroadcast(
                    m_geoNwSecPdu(
                        v_gnNonSecuredPacket,
                        v_securedMessageBeacon
                    ) // End of template m_geoNwSecPdu
                ); // End of template m_geoNwReq_linkLayerBroadcast
                
                // Encode it
                v_encMsg := bit2oct(encvalue(v_gnReq));
                log("v_encMsg= ", v_encMsg);
                if (not isbound(v_encMsg)) {
                    setverdict(fail, "Encoding failed!");
                    stop;
                }
                setverdict(pass, "Encoding passed.");
                // Decode it
                v_gnReq.msgOut.gnPacket.packet.commonHeader.plLength := 45;
                test_decodePDU<GeoNetworkingReq>(
                    v_gnReq, 
                    v_encMsg
                );
                log("v_gnReq: ", v_gnReq);
                
                if (decvalue(oct2bit(v_encMsg), v_gnReq) == 0) {
                    if (f_verifyGnSecuredMessageSignatureWithCertificate(v_gnReq.msgOut.gnPacket.securedMsg, vc_atCertificate) == true) {
                        setverdict(pass, "Signature check succeed.");
                    } else {
                        setverdict(fail, "Signature check failed.");
                    } 
                } else {
                    setverdict(fail, "Decoding failed.");
                }
            }
            
            /**
             * @desc validate secured with certificate chain GeoNetworkingReq/NwShb with a CAM payload
             * @verdict Pass on success, Fail otherwise
             */
            testcase tc_GeoNetReq_SecuredCertCertificateNwShbPacketWithBtpPayloadCam() runs on TCType system TCType {
                var GeoNetworkingReq v_gnReq;
                var GnNonSecuredPacket v_gnNonSecuredPacket;
                var octetstring v_gnPayload, v_encMsg;
                var template (value) ToBeSignedSecuredMessage v_toBeSignedSecuredMessage;
                var template (value) SecuredMessage v_securedMessageBeacon;
                
                if ((PX_GN_UPPER_LAYER != e_btpA) and (PX_GN_UPPER_LAYER != e_btpB)) {
                    log("PX_GN_UPPER_LAYER shall be set to e_btpA or e_btpB");
                    setverdict(inconc);
                    stop;
                }
                
                // Load certificates & keys
                if (f_loadCertificates(PX_IUT_SEC_CONFIG_NAME) == false) {
                    setverdict(fail);
                    stop;
                }
                f_setGenerationLocation(
                    f_getTsLatitude(),
                    f_getTsLongitude()
                );
                
                // Build signed SecuredMessage
                v_gnNonSecuredPacket := m_geoNwShbPacket(
                    m_dummyLongPosVectorIut
                );
                log("v_gnNonSecuredPacket= ", v_gnNonSecuredPacket);
                // Add CAM payload
                v_gnNonSecuredPacket.payload := f_adaptPayload_m(
                    bit2oct(
                        encvalue(
                            m_camReq(
                                m_camMsg(
                                    f_getTsStationId(),
                                    35000
                                )
                            )
                        )
                    )
                );
                log("v_gnNonSecuredPacket.payload= ", v_gnNonSecuredPacket.payload);
                // Encode it
                v_gnPayload := bit2oct( 
                    encvalue(
                        v_gnNonSecuredPacket
                    )
                );
                log("v_gnPayload= ", v_gnPayload);
                f_buildGnSecuredCam(
                    v_securedMessageBeacon,
                    m_payload_signed(v_gnPayload),
                    e_certificate_chain
                );
                log("v_securedMessageBeacon= ", v_securedMessageBeacon);
                
                // Build secured Gn packet
                v_gnReq := m_geoNwReq_linkLayerBroadcast(
                    m_geoNwSecPdu(
                        v_gnNonSecuredPacket,
                        v_securedMessageBeacon
                    ) // End of template m_geoNwSecPdu
                ); // End of template m_geoNwReq_linkLayerBroadcast
                
                // Encode it
                v_encMsg := bit2oct(encvalue(v_gnReq));
                log("v_encMsg= ", v_encMsg);
                if (not isbound(v_encMsg)) {
                    setverdict(fail, "Encoding failed!");
                    stop;
                }
                setverdict(pass, "Encoding passed.");
                // Decode it
                v_gnReq.msgOut.gnPacket.packet.commonHeader.plLength := 45;
                test_decodePDU<GeoNetworkingReq>(
                    v_gnReq, 
                    v_encMsg
                );
                log("v_gnReq: ", v_gnReq);
                
                if (decvalue(oct2bit(v_encMsg), v_gnReq) == 0) {
                    if (f_verifyGnSecuredMessageSignatureWithCertificate(v_gnReq.msgOut.gnPacket.securedMsg, vc_atCertificate) == true) {
                        setverdict(pass, "Signature check succeed.");
                    } else {
                        setverdict(fail, "Signature check failed.");
                    } 
                } else {
                    setverdict(fail, "Decoding failed.");
                }
            }
            
            /**
             * @desc validate secured with digest GeoNetworkingReq/NwShb with a DENM payload
             * @verdict Pass on success, Fail otherwise
             */
            testcase tc_GeoNetReq_SecuredDigestNwShbPacketWithBtpPayloadDenm() runs on TCType system TCType {
                var template (value) SituationContainer v_situation := m_situation(CauseCodeType_vehicleBreakdown_, VehicleBreakdownSubCauseCode_unavailable_);
                var GeoNetworkingReq v_gnReq;
                var GnNonSecuredPacket v_gnNonSecuredPacket;
                var octetstring v_gnPayload, v_encMsg;
                var template (value) ToBeSignedSecuredMessage v_toBeSignedSecuredMessage;
                var template (value) SecuredMessage v_securedMessageBeacon;
                
                if (PX_GN_UPPER_LAYER != e_btpB) {
                    log("PX_GN_UPPER_LAYER shall be set to e_btpB");
                    setverdict(inconc);
                    stop;
                }
                
                // Load certificates & keys
                if (f_loadCertificates(PX_IUT_SEC_CONFIG_NAME) == false) {