Commit e9535665 authored by Yann Garcia's avatar Yann Garcia
Browse files

Enhance TC_SECPKI_EA_BFK_AUTH_06_BV

parent 04228d0b
Loading
Loading
Loading
Loading
+1 −0
Original line number Diff line number Diff line
@@ -7572,6 +7572,7 @@ module ItsPkiItss_TestCases {
        } // End of function TC_SECPKI_ITSS_BFK_CERTDNL_01_BV_pki

      } // End of group f_TC_SECPKI_ITSS_BFK_CERTDNL_01_BV

    } // End of group itss_authorization_request_bfk

    // ETSI TS 103 525-2 V2.0.2 (2023-07) Clause 5.2.4  CTL handling
+87 −21
Original line number Diff line number Diff line
@@ -6058,8 +6058,8 @@ module ItsPki_TestCases {
          var HttpMessage v_response;
          // Test control
          if (not PICS_IUT_EA_ROLE) {
            log("*** " & testcasename() & ": PICS_IUT_EA_ROLE required for executing the TC ***");
          if (not PICS_IUT_EA_ROLE or not PICS_SEC_BFK_AUTH) {
            log("*** " & testcasename() & ": PICS_IUT_EA_ROLE and PICS_SEC_BFK_AUTH required for executing the TC ***");
            setverdict(inconc);
            stop;
          }
@@ -6189,8 +6189,8 @@ module ItsPki_TestCases {
          var HttpMessage v_response;
          // Test control
          if (not PICS_IUT_EA_ROLE) {
            log("*** " & testcasename() & ": PICS_IUT_EA_ROLE required for executing the TC ***");
          if (not PICS_IUT_EA_ROLE or not PICS_SEC_BFK_AUTH) {
            log("*** " & testcasename() & ": PICS_IUT_EA_ROLE and PICS_SEC_BFK_AUTH required for executing the TC ***");
            setverdict(inconc);
            stop;
          }
@@ -6544,8 +6544,8 @@ module ItsPki_TestCases {
          var RaAcaCertRequest v_butterflyCertificateRequest;
          // Test control
          if (not PICS_IUT_EA_ROLE) {
            log("*** " & testcasename() & ": PICS_IUT_EA_ROLE required for executing the TC ***");
          if (not PICS_IUT_EA_ROLE or not PICS_SEC_BFK_AUTH) {
            log("*** " & testcasename() & ": PICS_IUT_EA_ROLE and PICS_SEC_BFK_AUTH required for executing the TC ***");
            setverdict(inconc);
            stop;
          }
@@ -6687,8 +6687,8 @@ module ItsPki_TestCases {
          var RaAcaCertRequest v_butterflyCertificateRequest;
          // Test control
          if (not PICS_IUT_EA_ROLE) {
            log("*** " & testcasename() & ": PICS_IUT_EA_ROLE required for executing the TC ***");
          if (not PICS_IUT_EA_ROLE or not PICS_SEC_BFK_AUTH) {
            log("*** " & testcasename() & ": PICS_IUT_EA_ROLE and PICS_SEC_BFK_AUTH required for executing the TC ***");
            setverdict(inconc);
            stop;
          }
@@ -6825,8 +6825,8 @@ module ItsPki_TestCases {
          var RaAcaCertRequest v_butterflyCertificateRequest;
          // Test control
          if (not PICS_IUT_EA_ROLE) {
            log("*** " & testcasename() & ": PICS_IUT_EA_ROLE required for executing the TC ***");
          if (not PICS_IUT_EA_ROLE or not PICS_SEC_BFK_AUTH) {
            log("*** " & testcasename() & ": PICS_IUT_EA_ROLE and PICS_SEC_BFK_AUTH required for executing the TC ***");
            setverdict(inconc);
            stop;
          }
@@ -6968,12 +6968,12 @@ module ItsPki_TestCases {
          var Headers v_headers;
          var HttpMessage v_response;
          var EeRaCertRequest v_ee_ra_cert_request;
          var RaEeCertInfo p_ra_ee_cert_info;
          var RaEeCertInfo v_ra_ee_cert_info;
          var EtsiTs102941Data v_etsi_ts_102941_data;
          // Test control
          if (not PICS_IUT_EA_ROLE) {
            log("*** " & testcasename() & ": PICS_IUT_EA_ROLE required for executing the TC ***");
          if (not PICS_IUT_EA_ROLE or not PICS_SEC_BFK_AUTH) {
            log("*** " & testcasename() & ": PICS_IUT_EA_ROLE and PICS_SEC_BFK_AUTH required for executing the TC ***");
            setverdict(inconc);
            stop;
          }
@@ -6984,16 +6984,16 @@ module ItsPki_TestCases {
          // Test adapter configuration
          // Preamble
          f_trigger_butterfly_authorization_request(v_aes_sym_key_hashed_id8, v_ee_ra_cert_request, p_ra_ee_cert_info);
          f_trigger_butterfly_authorization_request(v_aes_sym_key_hashed_id8, v_ee_ra_cert_request, v_ra_ee_cert_info);
          // Wait for v_ee_ra_cert_request.nextDlTime
          var float v_timer := int2float(p_ra_ee_cert_info.nextDlTime - p_ra_ee_cert_info.generationTime + 2);
          var float v_timer := int2float(v_ra_ee_cert_info.nextDlTime - v_ra_ee_cert_info.generationTime + 2);
          log("*** " & testcasename() & ": INFO: Start wailting for " & float2str(v_timer) & " seconds ***");
          f_sleepIgnoreDef(v_timer);
          log("*** " & testcasename() & ": INFO: timer of " & float2str(v_timer) & " seconds expierd message ***");
          // FISME FSCOM In int2hex, 3 is arbitrary. Need to check the range of currentI to set the correct hex string length 
          f_http_build_butterfly_at_download_request_message(hex2str(oct2hex(p_ra_ee_cert_info.requestHash)) & "-" & hex2str(int2hex(p_ra_ee_cert_info.currentI, 3)) & ".zip", v_aes_sym_key, v_encrypted_sym_key, v_authentication_vector, v_nonce, v_salt, v_ieee1609dot2_signed_and_encrypted_data, v_request_hash);
          // FIXME FSCOM In int2hex, 3 is arbitrary. Need to check the range of currentI to set the correct hex string length 
          f_http_build_butterfly_at_download_request_message(hex2str(oct2hex(v_ra_ee_cert_info.requestHash)) & "-" & hex2str(int2hex(v_ra_ee_cert_info.currentI, 3)) & ".zip", v_aes_sym_key, v_encrypted_sym_key, v_authentication_vector, v_nonce, v_salt, v_ieee1609dot2_signed_and_encrypted_data, v_request_hash);
          v_aes_sym_key_hashed_id8 := f_hashedId8FromSha256(f_hashWithSha256('80'O & v_aes_sym_key)); // Used to match the response
          f_init_default_headers_list(-, "bfk_at_download_request", v_headers);
          f_selfOrClientSyncAndVerdictPreamble(c_prDone, e_success);
@@ -7024,9 +7024,75 @@ module ItsPki_TestCases {
              // TODO Check HTTP headers
              // Check item 0 is v_ra_ee_cert_info
              log("Item #0 to decode (EtsiTs102941Data): ", v_response.response.body.binary_body.bfk_zip_file.content.signed_messages[0].content.signedData.tbsData.payload.data.content.unsecuredData);
              var bitstring v_bt := oct2bit(v_response.response.body.binary_body.bfk_zip_file.content.signed_messages[0].content.signedData.tbsData.payload.data.content.unsecuredData);
              var EtsiTs102941Data v_etsi_ts102941_data;
              var integer v_result := decvalue(v_bt, v_etsi_ts102941_data);
              if (v_result == 0) {
                log("decvalue result: ", v_result);
                log("v_etsi_ts102941_data: ", v_etsi_ts102941_data);
                log("To compare with v_ra_ee_cert_info: ", v_ra_ee_cert_info);
                if (v_etsi_ts102941_data.content.butterflyAuthorizationResponse.requestHash == v_ra_ee_cert_info.requestHash) {
                  // TODO Check certificates
                  var boolean v_signature_check_failed := false;
                  var boolean v_decrypt_failed := false;
                  for (var integer v_i := 1; v_i < lengthof(v_response.response.body.binary_body.bfk_zip_file.content.signed_messages); v_i := v_i + 1) {
                    log(
                        "Matching: ", 
                        match(
                              v_response.response.body.binary_body.bfk_zip_file.content.signed_messages[v_i], 
                              mw_etsiTs103097Data_signed(
                                                        mw_signedData(
                                                                      -, 
                                                                      mw_toBeSignedData(
                                                                                        mw_signedDataPayload, 
                                                                                        mw_ieee1609Dot2_headerInfo(
                                                                                                                    c_its_aid_SCR
                        ))))));
                    if (not(match(v_response.response.body.binary_body.bfk_zip_file.content.signed_messages[v_i], mw_etsiTs103097Data_signed(mw_signedData(-, mw_toBeSignedData(mw_signedDataPayload, mw_ieee1609Dot2_headerInfo())))))) {
                      v_signature_check_failed := true;
                      break;
                    }
                    log("Unsecured data to decode (EtsiTs103097Data): ", v_response.response.body.binary_body.bfk_zip_file.content.signed_messages[v_i].content.signedData.tbsData.payload.data.content.unsecuredData)
                    v_bt := oct2bit(v_response.response.body.binary_body.bfk_zip_file.content.signed_messages[v_i].content.signedData.tbsData.payload.data.content.unsecuredData);
                    var EtsiTs103097Data v_unsecuredData;
                    v_result := decvalue(v_bt, v_unsecuredData);
                    log("decvalue result: ", v_result);
                    if (v_result != 0) {
                      v_decrypt_failed := true;
                      break;
                    }
                    log("v_unsecuredData: ", v_unsecuredData);
                    // var Ieee1609Dot2Data v_ieee1609dot2_data;
                    // var Oct16 v_aes_enc_key;
                    // if (f_decrypt(vc_aaPrivateEncKey, // AA private encryption key
                    //                v_unsecuredData, // data to be decrypted
                    //                vc_aaWholeHash, // salt
                    //                v_ieee1609dot2_data, // decrypted message
                    //                v_aes_enc_key) == false) {
                    //   v_decrypt_failed := true;
                    //   break;
                    // }
                  } // End of 'for' statement
                  if (not(v_signature_check_failed) or not(v_decrypt_failed)) {
                    log("*** " & testcasename() & ": PASS: Well formated ButterflyAuthorizationResponseMessage received ***");
                    f_selfOrClientSyncAndVerdictTestBody(c_tbDone, e_success);
                  } else if (v_signature_check_failed) {
                    log("*** " & testcasename() & ": FAIL: Checking signature failed ***");
                    f_selfOrClientSyncAndVerdictTestBody(c_tbDone, e_error);
                  } else if (v_decrypt_failed) {
                    log("*** " & testcasename() & ": FAIL: Checking decrypt messge failed ***");
                    f_selfOrClientSyncAndVerdictTestBody(c_tbDone, e_error);
                  }
                } else {
                  log("*** " & testcasename() & ": FAIL: Item 0 of the list does not match the ButterflyAtDownloadRequest ***");
                  f_selfOrClientSyncAndVerdictTestBody(c_tbDone, e_error);
                }
              } else {
                log("*** " & testcasename() & ": FAIL: Cannot decode Item 0 ***");
                f_selfOrClientSyncAndVerdictTestBody(c_tbDone, e_error);
              }
            }
            [] tc_ac.timeout {
              log("*** " & testcasename() & ": INCONC: Expected message not received ***");