Commit cc7c4a60 authored by garciay's avatar garciay
Browse files

STF525: CAM/DENM bugs reported & fixed, Bug fiexed in...

STF525: CAM/DENM bugs reported & fixed, Bug fiexed in fx_computePositionUsingDistance\nSTF545: Add acPort support for Pki
parent 8b48620c
Loading
Loading
Loading
Loading
+21 −8
Original line number Diff line number Diff line
@@ -6,6 +6,8 @@
#ifndef M_PI
#define M_PI	3.14159265358979323846
#endif
#define earthRadius 6378137.0L
#define rbis = ((double)(earthRadius * M_PI / 180))

namespace LibItsCommon__Functions 
{
@@ -101,14 +103,25 @@ namespace LibItsCommon__Functions
                                        INTEGER& p__latitude,
                                        INTEGER& p__longitude
                                        ) {
    double distance = ((double)p__distance) / 6371000.0;
    double angle = ((double)p__orientation) * (M_PI / 180.0);
    double angularD = static_cast<const float>(p__distance) / earthRadius;
    double radHeading = (double)static_cast<const int>(p__orientation) * M_PI / 180;

    double ref_lat = ((double)p__refLatitude) * (M_PI / 180.0);
    //    double ref_lon = ((double)p__refLongitude) * (M_PI / 180.0);
    // Convert to rad
    double lat1 = ((double)static_cast<const int>(p__refLatitude) / 10000000) * M_PI / 180;
    double long1 = ((double)static_cast<const int>(p__refLongitude) / 10000000) * M_PI / 180;

    p__latitude = asin(sin(ref_lat)*cos(distance) + cos(ref_lat)*sin(distance)*cos(angle)) * 180.0 / M_PI;
    p__longitude = ((double)p__refLongitude) + atan2(sin(angle)*sin(distance)*cos(ref_lat), cos(distance) - sin(ref_lat)*sin((double)p__latitude))*(180.0/M_PI);
    double lat2 = asin(sin(lat1) * cos(angularD) + cos(lat1) * sin(angularD) * cos(radHeading));
    double long2 = long1 + atan2(sin(radHeading) * sin(angularD) * cos(lat1), cos(angularD) - sin(lat1) * sin(lat2));

    // normalise to -180...+180
    long2 = fmod((long2 + 3 * M_PI), (2 * M_PI) - M_PI);
    
    // convert to 1/10 of microdegrees
    long rlat2 = round(lat2 * 10000000 / M_PI * 180);
    long rlong2 = round(long2 * 10000000 / M_PI * 180);
    
    p__latitude = rlat2;//asin(sin(ref_lat)*cos(distance) + cos(ref_lat)*sin(distance)*cos(angle)) * 180.0 / M_PI;
    p__longitude = rlong2;//((double)p__refLongitude) + atan2(sin(angle)*sin(distance)*cos(ref_lat), cos(distance) - sin(ref_lat)*sin((double)p__latitude))*(180.0/M_PI);
  }

  /*       * @desc    External function to compute radius of a given circular area
+2 −2
Original line number Diff line number Diff line
@@ -9,7 +9,7 @@
#include "IVIM_ports/AdapterControlPort_IVIM.partC"
#include "MapemSpatem_ports/AdapterControlPort_MapemSpatem.partC"
#include "SremSsem_ports/AdapterControlPort_SremSsem.partC"
#include "Pki_ports/AdapterControlPort_Pki.partC"
//#include "Pki_ports/AdapterControlPort_Pki.partC"
//#include "V2G_ports/AdapterControlPort_V2G.partC"

#else //_NO_SOFTLINKS_
@@ -20,7 +20,7 @@
#include "AdapterControlPort_MapemSpatem.partC"
#include "AdapterControlPort_SremSsem.partC"
#include "AdapterControlPort_GN.partC"
#include "AdapterControlPort_Pki.partC"
//#include "AdapterControlPort_Pki.partC"
/*
#include "AdapterControlPort_IVIM.partC"
#include "AdapterControlPort_MapemSpatem.partC"
+2 −2
Original line number Diff line number Diff line
@@ -9,10 +9,10 @@
#include "CAM_ports/AdapterControlPort_CAM.partH"
#include "DENM_ports/AdapterControlPort_DENM.partH"
#include "GN_ports/AdapterControlPort_GN.partH"
#include "Pki_ports/AdapterControlPort_Pki.partH"
#include "IVIM_ports/AdapterControlPort_IVIM.partH"
#include "MapemSpatem_ports/AdapterControlPort_MapemSpatem.partH"
#include "SremSsem_ports/AdapterControlPort_SremSsem.partH"
//#include "Pki_ports/AdapterControlPort_Pki.partH"
//#include "V2G_ports/AdapterControlPort_V2G.partH"

#else //_NO_SOFTLINKS_
@@ -23,7 +23,7 @@
#include "AdapterControlPort_MapemSpatem.partH"
#include "AdapterControlPort_SremSsem.partH"
#include "AdapterControlPort_GN.partH"
#include "AdapterControlPort_Pki.partH"
//#include "AdapterControlPort_Pki.partH"
/*
#include "AdapterControlPort_IVIM.partH"
#include "AdapterControlPort_MapemSpatem.partH"
+4 −4
Original line number Diff line number Diff line
@@ -3,7 +3,7 @@
#include "loggers.hh"
#include "registration.hh"

#include "http_layer.hh"
#include "pki_layer.hh"

//=============================================================================
namespace LibItsPki__TestSystem {
@@ -78,17 +78,17 @@ namespace LibItsPki__TestSystem {
    if (p != NULL) {
      loggers::get_instance().log("AdapterControlPort::outgoing_send: Got PKI layer %p", p);
      LibItsPki__TypesAndValues::AcPkiResponse response;
      response.result() = LibItsPki__TypesAndValues::AcPkiResponse(BOOLEAN(false));
      response.result() = BOOLEAN(false);
      if (send_par.ischosen(LibItsPki__TypesAndValues::AcPkiPrimitive::ALT_acSetSecurityData)) {
        loggers::get_instance().log("AdapterControlPort::outgoing_send: AcSetSecurityData");
        p->set_pki_keys(send_par.acSetSecurityData());
        response.result() = LibItsPki__TypesAndValues::AcPkiResponse(BOOLEAN(true));
        response.result() = BOOLEAN(true);
      }
      // Send response
      loggers::get_instance().log_msg("AdapterControlPort::outgoing_send: Send response: ", response);
      incoming_message(response);
    } else {
      loggers::get_instance().error("AdapterControlPort::outgoing_send: %s not registered", "pkiPort");
      loggers::get_instance().error("AdapterControlPort::outgoing_send: pkiPort not registered");
    }
  }

+12 −11
Original line number Diff line number Diff line
@@ -9,6 +9,8 @@

#include "converter.hh"

#include "security_services.hh"

#include "pki_layer.hh"

using namespace std; // Required for isnan()
@@ -57,13 +59,13 @@ void pki_layer::sendMsg(const EtsiTs102941TypesEnrolment::InnerEcRequest& p_inne
  _etsi_ts102941_types_enrolment_inner_request.encode(p_inner_ec_request, inner_ec_request);
  // Build the EtsiTs103097Data-Signed
  OCTETSTRING etsi_ts_102941_data;
  if (generate_inner_ec_request_signed_for_pop(inner_ec_request, etsi_ts_102941_data) == -1) {
  if (generate_inner_ec_request_signed_for_pop(inner_ec_request, etsi_ts_102941_data, p_param) == -1) {
    loggers::get_instance().warning("pki_layer::sendMsg: Failed to generate InnerExRequestSignedForPop");
    return;
  }
  // Secured the Pki message
  OCTETSTRING signed_and_encrypted_data;
  if (sign_and_encrypt_payload(daetsi_ts_102941_datata, signed_and_encrypted_data) == 0) {
  if (sign_and_encrypt_payload(etsi_ts_102941_data, signed_and_encrypted_data) == 0) {
    loggers::get_instance().warning("pki_layer::sendMsg: Failed to secure Pki message");
    return;
  }
@@ -103,13 +105,13 @@ void pki_layer::receive_data(OCTETSTRING& data, params& params)
  // to_all_upper_ports(pki_message, params);
}

int pki_layer::generate_inner_ec_request_signed_for_pop(const OCTETSTRING& p_inner_ec_request, OCTETSTRING& p_etsi_ts_102941_data) {
int pki_layer::generate_inner_ec_request_signed_for_pop(const OCTETSTRING& p_inner_ec_request, OCTETSTRING& p_etsi_ts_102941_data, params& p_params) {
  loggers::get_instance().log_msg(">>> pki_layer::generate_inner_ec_request_signed_for_pop: ", p_inner_ec_request);

  // Set unsecured data
  IEEE1609dot2::Ieee1609Dot2Content unsecured_data_content;
  unsecured_data_content.unsecuredData() = p_inner_ec_request;
  IEEE1609dot2::Ieee1609Dot2Data unsecured_data(ProtocolVersion, unsecured_data_content);
  IEEE1609dot2::Ieee1609Dot2Data unsecured_data(security_services::get_instance().get_protocol_version(), unsecured_data_content);
  // Set hash algorithm
  IEEE1609dot2BaseTypes::HashAlgorithm hashId(IEEE1609dot2BaseTypes::HashAlgorithm::sha256);
  if (p_params[params::hash].compare("SHA-384") == 0) {
@@ -127,6 +129,7 @@ int pki_layer::generate_inner_ec_request_signed_for_pop(const OCTETSTRING& p_inn
  header_info.p2pcdLearningRequest().set_to_omit();
  header_info.missingCrlIdentifier().set_to_omit();
  header_info.encryptionKey().set_to_omit();
  unsigned long long ms = base_time::get_instance().get_its_current_time();
  INTEGER i;
  i.set_long_long_val((unsigned int)ms);
  header_info.generationTime() = OPTIONAL<INTEGER>(i);
@@ -139,14 +142,12 @@ int pki_layer::generate_inner_ec_request_signed_for_pop(const OCTETSTRING& p_inn
  loggers::get_instance().log_msg("pki_layer::sign_payload: tbs_data = ", tbs_data);
  // Sign the ToBeSignedData data structure
  IEEE1609dot2BaseTypes::Signature signature;
  if (security_services::get_instance().sign_tbs_data(tbs_data, hashId, signature, p_params) != 0) {
  /* TODOD Sign with private key if (security_services::get_instance().sign_tbs_data(tbs_data, hashId, signature, p_params) != 0) {
    loggers::get_instance().warning("pki_layer::sign_payload: Failed to secure payload");
    return -1;
  }
  }*/
  IEEE1609dot2::SignerIdentifier signer;
  loggers::get_instance().log("pki_layer::sign_payload: ms = %d - _last_generation_time = %d - ms - _last_generation_time = %d", (unsigned int) ms, _last_generation_time, (unsigned int) (ms - _last_generation_time));

  signer.self() = nullptr;
  signer.self__() = ASN_NULL();
  IEEE1609dot2::SignedData signed_data(hashId, tbs_data, signer, signature);
  loggers::get_instance().log_msg("pki_layer::sign_payload: signed_data = ", signed_data);
  IEEE1609dot2::Ieee1609Dot2Content ieee_dot2_content;
@@ -155,7 +156,7 @@ int pki_layer::generate_inner_ec_request_signed_for_pop(const OCTETSTRING& p_inn
  loggers::get_instance().log_msg("pki_layer::sign_payload: ieee_1609dot2_data = ", ieee_1609dot2_data);
  // Set EtsiTs102941Data layer
  EtsiTs102941MessagesItss::EtsiTs102941Data etsi_ts_102941_data;
  etsi_ts_102941_data.content().enrolmentRequest = ieee_1609dot2_data;
  etsi_ts_102941_data.content().enrolmentRequest() = ieee_1609dot2_data;
  _codec.encode(ieee_1609dot2_data, p_etsi_ts_102941_data);
  if (!p_etsi_ts_102941_data.is_bound()) {
    loggers::get_instance().warning("pki_layer::sign_payload: Failed to encode Ieee1609Dot2Data");
Loading