Commit ca0a610f authored by Mubeena Ishaq's avatar Mubeena Ishaq
Browse files

RRefactor TC_SECPKI_ITSS_ENR_REP_01_BV

parent 215d537e
Loading
Loading
Loading
Loading
+65 −247
Original line number Diff line number Diff line
@@ -239,8 +239,8 @@ module ItsPki_TestCases {
        // Do not verify the signature now because ATRequest is required to verify the POP signature       ==> false
        if (f_verify_pki_request_message(vc_aaPrivateEncKey, vc_aaWholeHash/*salt*/, ''O, p_request.body.binary_body.ieee1609dot2_data, false, v_request_hash, v_bfk_hashed_id8, v_etsi_ts_102941_data, v_aes_enc_key) == false) { // Only decryption
          // Send error message, unable to decypt it
          v_response := m_http_response(m_http_response_ko_no_body(p_headers, 400, "Bad request")); // Initialize v_reponse with an error message
          // Send error message, unable to decrypt it
          v_response := m_http_response(m_http_response_ko_no_body(p_headers, 400, "Bad request")); // Initialize v_response with an error message
          // Set verdict
          p_result := -1;
        } else {
@@ -2051,6 +2051,16 @@ module ItsPki_TestCases {
          // Test Body
          f_sendUtTriggerEnrolmentRequestPrimitive();
          tc_ac.start; 
          alt {
            [] utPort.receive(UtPkiTriggerInd: { state := 1 }) {
              tc_ac.stop;
              log("*** " & testcasename() & ": INFO: IUT is in enrolment state ***");
            }
            [] tc_ac.timeout {
              log("*** " & testcasename() & ": DBG: IUT state update not recieved ***");
            }
          } // End of 'alt' statement
          tc_noac.start;
          alt {
            [] geoNetworkingPort.receive {
@@ -2081,15 +2091,14 @@ module ItsPki_TestCases {
          // Preamble
          f_init_default_headers_list(-, "inner_ec_response", v_headers);
          if (f_await_ec_request_send_response(v_inner_ec_response, v_initial_request) == true) {
              log("*** " & testcasename() & ": INFO: EnrolmentRequest Response Received ***");
              f_selfOrClientSyncAndVerdict(c_prDone, e_error);
          } else {
              log("*** " & testcasename() & ": INCONC: EnrolmentRequest Response failed ***");
          f_await_ec_request_send_no_response(v_initial_request);
            log("*** " & testcasename() & ": INFO: Reply with no response error message ***");
            f_selfOrClientSyncAndVerdictPreamble(c_prDone, e_success);
            }
  
          // Test Body
          var integer i;
          var boolean v_loop := true;
          for (i := 0; i < PX_ENR_MAX_N1; i := i + 1) {
            tc_ac.start;
            alt {
              [] a_await_ec_http_request_from_iut(
@@ -2130,10 +2139,17 @@ module ItsPki_TestCases {
                }
              }
              [] tc_ac.timeout {
              log("*** " & testcasename() & ": INCONC: Expected message not received ***");
              f_selfOrClientSyncAndVerdict(c_tbDone, e_timeout);
                log("*** " & testcasename() & ": INCONC: Response received on the IUT ***");
                 v_loop := false;
                f_selfOrClientSyncAndVerdict(c_tbDone, e_success);
                //break;
              }
            } // End of 'alt' statement
            if (v_loop == false){
              break;
            }
          } // End of 'loop' statement
          // Postamble
          f_cfHttpDown();
@@ -3750,7 +3766,7 @@ module ItsPki_TestCases {
            log("*** " & testcasename() & ": FAIL: Repeatition request are different ***");
            f_selfOrClientSyncAndVerdict(c_tbDone, e_error);
          } else {
            log("*** " & testcasename() & ": PASS: Repeatition request are same ***");
            log("*** " & testcasename() & ": PASS: Repeatition request are different ***");
            f_selfOrClientSyncAndVerdict(c_tbDone, e_success);
          }
          // Postamble
@@ -4160,204 +4176,6 @@ module ItsPki_TestCases {
      } // End of group f_TC_SECPKI_ITSS_AUTH_REP_04_BV
      /**
       * @desc Check that IUT stops sending the Authorization Request message if timeout has been reached
       * <pre>
       * Pics Selection: PICS_SECPKI_AUTHORIZATION_RETRY
       * Initial conditions: {
       *     the IUT being in the 'enrolled' state
       *     and the IUT has started sending the Authorization Request at the time T1
       *     }
       * Expected behaviour:
       *     ensure that {
       *         when {
       *             the IUT local time is reached the T1 + PIXIT_AUTH_TIMEOUT_TH2
       *         }
       *         then {
       *             the IUT stops sending an Authorization Request messages
       *         }
       *     }
       * </pre>
       * 
       * @see       ETSI TS 103 525-2 TP SECPKI_ITSS_AUTH_REP_05_BV
       * @reference ETSI TS 103 601, clause 5.1.2
       */
      testcase TC_SECPKI_ITSS_AUTH_REP_05_BV() runs on ItsMtc system ItsPkiItssSystem {
        // Local variables
        var ItsPkiItss v_itss;
        var ItsPkiHttp v_ea;
        // Test control
        if (not PICS_IUT_ITS_S_ROLE or not PICS_SECPKI_AUTHORIZATION) {
          log("*** " & testcasename() & ": PICS_IUT_ITS_S_ROLE and PICS_SECPKI_AUTHORIZATION required for executing the TC ***");
          setverdict(inconc);
          stop;
        }
        // Test component configuration
        f_cfMtcUp01(v_itss, v_ea);
        // Start component
        v_itss.start(f_TC_SECPKI_ITSS_AUTH_REP_05_BV_itss());
        v_ea.start(f_TC_SECPKI_ITSS_AUTH_REP_05_BV_pki());
        // Synchronization
        f_serverSync2ClientsAndStop({c_prDone, c_tbDone});
        // Cleanup
        f_cfMtcDown01(v_itss, v_ea);
      }
      group f_TC_SECPKI_ITSS_AUTH_REP_05_BV {
        function f_TC_SECPKI_ITSS_AUTH_REP_05_BV_itss() runs on ItsPkiItss system ItsPkiItssSystem {
          // Local variables
          var HashedId8               v_certificate_digest;
          var EtsiTs103097Certificate v_certificate;
          var InfoPortData            v_info_port_data;
          var boolean                 v_start_awaiting := false;
          // Test component configuration
          vc_hashedId8ToBeUsed := PX_IUT_DEFAULT_CERTIFICATE;
          f_cfUp_itss();
          // Test adapter configuration
          // Preamble
          // Initial state: No CAM shall be emitted
          geoNetworkingPort.clear;
          tc_noac.start;
          alt {
            [] geoNetworkingPort.receive {
              log("No CA message expected");
              f_selfOrClientSyncAndVerdict(c_prDone, e_error);
            }
            [] tc_noac.timeout {
              f_sendUtTriggerEnrolmentRequestPrimitive();
              log("*** " & testcasename() & "_itss: : INFO: No CA message received ***");
                f_selfOrClientSyncAndVerdict(c_prDone, e_success);
              }
            } // End of 'alt' statement
          // Test Body
          f_sendUtTriggerAuthorizationRequestPrimitive();
          tc_ac.start;
          alt {
            [v_start_awaiting == true] a_await_cam_with_current_cert(
                                                                     v_info_port_data.at_certificate
            ) {
              log("*** " & testcasename() & ": PASS: IUT started to send CA message using new AT certificate ***");
              f_selfOrClientSyncAndVerdict(c_tbDone, e_success);
            }
            [] geoNetworkingPort.receive { 
              log("*** " & testcasename() & ": FAIL: IUT started to send CA message using wrong AT certificate ***");
              f_selfOrClientSyncAndVerdict(c_tbDone, e_error);
            }
            [] infoPort.receive(InfoPortData:?) -> value v_info_port_data {
              log("*** " & testcasename() & ": INFO: Received new AT certificate ***");
              v_start_awaiting := true;
              repeat;
            }
            [] tc_ac.timeout {
              log("*** " & testcasename() & "_itss: : PASS: No CA message received ***");
              f_selfOrClientSyncAndVerdict(c_tbDone, e_timeout);
            }
          } // End of 'alt' statement 
          // Postamble
          f_cfDown_itss();
        } // End of function f_TC_SECPKI_ITSS_AUTH_REP_05_BV_itss
        function f_TC_SECPKI_ITSS_AUTH_REP_05_BV_pki() runs on ItsPkiHttp system ItsPkiItssSystem {
          // Local variable
          var Headers v_headers;
          var HttpMessage v_request;
          var InnerEcResponse v_inner_ec_response;
          // Test component configuration
          f_cfHttpUp(PICS_TS_EA_CERTIFICATE_ID, PICS_TS_AA_CERTIFICATE_ID);
          // Test adapter configuration
          // Preamble
          f_init_default_headers_list(-, "inner_at_response", v_headers);
          if (PX_TRIGGER_EC_BEFORE_AT) {
            f_await_ec_request_send_error_response(v_request);
            log("*** " & testcasename() & ": INFO: Reply with 400 Bad Request error message ***");
          } else {
          f_selfOrClientSyncAndVerdict(c_prDone, e_success);
          }
          
          // Do not expect any repetition
          if (PX_TRIGGER_EC_BEFORE_AT) {
            if (f_await_ec_request_send_response(v_inner_ec_response, v_request) == true) {
              log("*** " & testcasename() & ": INFO: Enrolment succeed ***");
              f_selfOrClientSyncAndVerdict(c_tbDone, e_success);
            } else {
              log("*** " & testcasename() & ": INCONC: Enrolment failed ***");
              f_selfOrClientSyncAndVerdict(c_tbDone, e_timeout);
            }
          }
          // Test Body
          tc_ac.start(PX_TAC * 1.1); // for different timer PIXIT_AUTH_TIMEOUT_TH2
          alt {
            [] a_await_at_http_request_from_iut(
                                                 mw_http_request(
                                                                 mw_http_request_post(
                                                                                      PICS_HTTP_POST_URI_AT,
                                                                                      -,
                                                                                      mw_http_message_body_binary(
                                                                                                                  mw_binary_body_ieee1609dot2_data(
                                                                                                                                                   mw_authorizationRequestMessage(
                                                                                                                                                                              mw_encryptedData(
                                                                                                                                                                                               { *, mw_recipientInfo_pskRecipInfo(vc_aaHashedId8), * },
                                                                                                                                                                                               mw_symmetricCiphertext_aes128ccm
                                                                                                                                                                                               )))))),
                                                 v_request
                                                 ) {
              var HttpMessage v_response;
              var integer v_result;
              var InnerAtRequest v_inner_at_request;
              var InnerAtResponse v_inner_at_response;
              tc_ac.stop;
              // Verify IUT response
              f_verify_http_at_request_from_iut_itss(v_request.request, v_headers, v_inner_ec_response.certificate, v_inner_at_request, v_inner_at_response, v_response, v_result);
              // Send response
              if (isvalue(v_response)) {
                httpPort.send(v_response);
              }
              // Set verdict
              if (v_result == 0) {
                var octetstring v_msg;
                var octetstring v_hashed_id8;
                log("*** " & testcasename() & ": PASS: InnerAtRequest received ***");
                v_msg := bit2oct(encvalue(v_inner_at_response.certificate));
                if (ischosen(v_inner_at_response.certificate.toBeSigned.verifyKeyIndicator.verificationKey.ecdsaBrainpoolP384r1)) {
                  v_hashed_id8 := f_hashedId8FromSha384(f_hashWithSha384(v_msg));
                } else {
                  v_hashed_id8 := f_hashedId8FromSha256(f_hashWithSha256(v_msg));
                }
                infoPort.send(InfoPortData : { hashed_id8 := v_hashed_id8, at_certificate := v_inner_at_response.certificate });
                f_selfOrClientSyncAndVerdict(c_tbDone, e_success);
              } else {
                log("*** " & testcasename() & ": FAIL: Failed to verify AA an AuthorizationRequestMessage ***");
                f_selfOrClientSyncAndVerdict(c_tbDone, e_error);
              }
            }
            [] tc_ac.timeout {
              log("*** " & testcasename() & ": PASS: Expected no AuthorizationRequestMessage ***");
              f_selfOrClientSyncAndVerdict(c_tbDone, e_timeout);
            }
          } // End of 'alt' statement
          // Postamble
          f_cfHttpDown();
        } // End of function f_TC_SECPKI_ITSS_AUTH_REP_05_BV_pki
      }
    } // End of group itss_authorization_request_repetition
    // ETSI TS 103 525-2 V2.0.2 (2023-07) Clause 5.2.3.4  Authorization using butterfly key expansion mechanism
+2 −0
Original line number Diff line number Diff line
@@ -41,6 +41,8 @@ module LibItsPki_Pixits {
  
  modulepar integer PX_AUTH_MAX_N1 := 10;

  modulepar integer PX_ENR_MAX_N1 := 10;

  modulepar integer PX_CTL_SEQUENCE_NUMBER := 2;
  
} // End of module LibItsPki_Pixits
+38 −0
Original line number Diff line number Diff line
@@ -5262,6 +5262,44 @@ module LibItsPki_Functions {
      return v_result;
    } // End of function f_await_ec_request_send_response

    function f_await_ec_request_send_no_response(
                                                    out HttpMessage p_request
                                                    ) runs on ItsPkiHttp {
      var Ieee1609Dot2Data v_ieee1609dot2_signed_and_encrypted_data;

      log(">>> f_await_ec_request_send_no_response");

      tc_ac.start;
      alt {
        [] a_await_ec_http_request_from_iut(
                                            mw_http_request(
                                                            mw_http_request_post(
                                                                                 PICS_HTTP_POST_URI_EC,
                                                                                 -,
                                                                                 mw_http_message_body_binary(
                                                                                                             mw_binary_body_ieee1609dot2_data(
                                                                                                                                              mw_enrolmentRequestMessage(
                                                                                                                                                                         mw_encryptedData(
                                                                                                                                                                                          -,
                                                                                                                                                                                          mw_symmetricCiphertext_aes128ccm
                                                                                                                                                                                          )))))),
                                            p_request
                                            ) {
          var template (value) HttpMessage v_response;
          var Headers v_headers;

          tc_ac.stop;

          f_init_default_headers_list(-, "inner_ec_response", v_headers);
          log("f_await_ec_request_send_no_response: Failed to verify PKI message ***");
        }
        [] tc_ac.timeout {
          log("f_await_ec_request_send_no_response: Expected message not received ***");
        }
      } // End of 'alt' statement

    } // End of function f_await_ec_request_send_no_response

    function f_await_ec_request_send_error_response(
                                                    out HttpMessage p_request
                                                    ) runs on ItsPkiHttp {