Commit 086b9e9c authored by garciay's avatar garciay
Browse files

STF545: Execute first EA tests

parent a899b7f9
Loading
Loading
Loading
Loading
+1 −4
Original line number Diff line number Diff line
@@ -7,8 +7,7 @@
// You may modify this file. Add your attributes and prototypes of your
// member functions here.

#ifndef GeoNetworkingPort_HH
#define GeoNetworkingPort_HH
#pragma once

#include "LibItsGeoNetworking_TestSystem.hh"

@@ -49,5 +48,3 @@ namespace LibItsGeoNetworking__TestSystem {
  };

} /* end of namespace */

#endif
+97 −61
Original line number Diff line number Diff line
@@ -8,24 +8,30 @@
// add your member functions here.

#include "PkiPort.hh"
#include "pki_layer_factory.hh"
#include "loggers.hh"

namespace LibItsPki__TestSystem {

  PkiPort::PkiPort(const char *par_port_name)
	: PkiPort_BASE(par_port_name)
{
    : PkiPort_BASE(par_port_name), _cfg_params(), _layer_params(), _layer(nullptr), _time_key("PkiPort::outgoing_send") {
    // Nothing to do
    
  }

  PkiPort::~PkiPort()
  {
    loggers::get_instance().log(">>> PkiPort::~PkiPort");
    
    if (_layer != nullptr) {
      delete _layer;
    }
  }

void PkiPort::set_parameter(const char * /*parameter_name*/,
	const char * /*parameter_value*/)
  void PkiPort::set_parameter(const char* parameter_name, const char* parameter_value)
  {

    loggers::get_instance().log("PkiPort::set_parameter: %s=%s", parameter_name, parameter_value);
    _cfg_params.insert(std::pair<std::string, std::string>(std::string(parameter_name), std::string(parameter_value)));
  }

  /*void PkiPort::Handle_Fd_Event(int fd, boolean is_readable,
@@ -48,29 +54,59 @@ void PkiPort::Handle_Fd_Event_Readable(int /*fd*/)

  /*void PkiPort::Handle_Timeout(double time_since_last_call) {}*/

void PkiPort::user_map(const char * /*system_port*/)
  void PkiPort::user_map(const char* system_port)
  {
    loggers::get_instance().log(">>> PkiPort::user_map: %s", system_port);
    // Build layer stack
    params::iterator it = _cfg_params.find(std::string("params"));
    if (it != _cfg_params.end()) {
      loggers::get_instance().log("PkiPort::user_map: %s", it->second.c_str());
      // Setup parameters
      params::convert(_layer_params, it->second); // TODO This _layer_params seems to be useless
      // Create layer
      _layer = layer_stack_builder::get_instance()->create_layer_stack(it->second.c_str());
      if (static_cast<pki_layer *>(_layer) == nullptr) {
        loggers::get_instance().error("PkiPort::user_map: Invalid stack configuration: %s", it->second.c_str());
      }
      static_cast<pki_layer *>(_layer)->add_upper_port(this);
    
    } else {
      loggers::get_instance().error("PkiPort::user_map: No layers defined in configuration file");
    }
  }

void PkiPort::user_unmap(const char * /*system_port*/)
  void PkiPort::user_unmap(const char* system_port)
  {
    loggers::get_instance().log(">>> PkiPort::user_unmap: %s", system_port);

    // Reset layers
    if (_layer != nullptr) {
      delete _layer;
      _layer = nullptr;
    }
  }

  void PkiPort::user_start()
  {
    loggers::get_instance().log(">>> PkiPort::user_start");

  }

  void PkiPort::user_stop()
  {
    loggers::get_instance().log(">>> PkiPort::user_stop");

  }

  void PkiPort::outgoing_send(const EtsiTs102941TypesEnrolment::InnerEcRequest& send_par)
  {
    loggers::get_instance().log_msg(">>> PkiPort::outgoing_send: payload=", send_par);
    
    float duration;
    loggers::get_instance().set_start_time(_time_key);
    params params;
    static_cast<pki_layer *>(_layer)->sendMsg(send_par, params);
    loggers::get_instance().set_stop_time(_time_key, duration);
  }

  void PkiPort::outgoing_send(const EtsiTs102941TypesEnrolment::InnerEcResponse& send_par)
+9 −4
Original line number Diff line number Diff line
@@ -7,14 +7,21 @@
// You may modify this file. Add your attributes and prototypes of your
// member functions here.

#ifndef PkiPort_HH
#define PkiPort_HH
#pragma once

#include "LibItsPki_TestSystem.hh"

#include "layer.hh"
#include "params.hh"

namespace LibItsPki__TestSystem {

class PkiPort : public PkiPort_BASE {
  params _cfg_params;
  params _layer_params;
  layer* _layer;
  std::string _time_key;
    
public:
	PkiPort(const char *par_port_name = NULL);
	~PkiPort();
@@ -42,5 +49,3 @@ protected:
};

} /* end of namespace */

#endif
+34 −39
Original line number Diff line number Diff line
@@ -5,10 +5,12 @@

#include "converter.hh"

#include "security_services.hh"

using namespace std; // Required for isnan()
#include "LibItsPki_TestSystem.hh"

pki_layer::pki_layer(const std::string & p_type, const std::string & param) : t_layer<LibItsPki__TestSystem::HttpPort>(p_type), _params(), _etsi_ts102941_types_enrolment_inner_request(), _etsi_ts102941_types_enrolment_inner_request(), _codec()
pki_layer::pki_layer(const std::string & p_type, const std::string & param) : t_layer<LibItsPki__TestSystem::PkiPort>(p_type), _params(), _etsi_ts102941_types_enrolment_inner_request(), _etsi_ts102941_types_enrolment_inner_response(), _codec()
{
  loggers::get_instance().log(">>> pki_layer::pki_layer: %s, %s", to_string().c_str(), param.c_str());

@@ -23,31 +25,32 @@ pki_layer::pki_layer(const std::string & p_type, const std::string & param) : t_
  if (it == _params.cend()) {
    _params[params::certificate] = "CERT_IUT_A_EA";
  }
  _params[params::its_aid] = "0";
  _params[params::its_aid] = "2468";
  _params[params::payload_type] = "";
  _params[params::signature] = "NISTP-256";
  _params[params::encrypted_mode] = "1";
}

void pki_layer::sendMsg(const EtsiTs102941TypesEnrolment::InnerEcRequest& p_inner_ec_request, params& p_param) {
  loggers::get_instance().log_msg(">>> pki_layer::sendMsg: ", p_pki_message);
  loggers::get_instance().log_msg(">>> pki_layer::sendMsg: ", p_inner_ec_request);

  OCTETSTRING data;
  _etsi_ts102941_types_enrolment_inner_request.encode(p_pki_message, data);
  _etsi_ts102941_types_enrolment_inner_request.encode(p_inner_ec_request, data);
  // Add security
  OCTETSTRING secured_data;
  if (secured_payload(data, secured_data) == 0) {
  if (sign_and_encrypt_payload(data, secured_data) == 0) {
    send_data(data, _params);
  }
}

void pki_layer::sendMsg(const EtsiTs102941TypesEnrolment::InnerEcResponse& p_inner_ec_request, params& p_param) {
  loggers::get_instance().log_msg(">>> pki_layer::sendMsg: ", p_pki_message);
void pki_layer::sendMsg(const EtsiTs102941TypesEnrolment::InnerEcResponse& p_inner_ec_response, params& p_param) {
  loggers::get_instance().log_msg(">>> pki_layer::sendMsg: ", p_inner_ec_response);

  OCTETSTRING data;
  _etsi_ts102941_types_enrolment_inner_response.encode(p_pki_message, data);
  _etsi_ts102941_types_enrolment_inner_response.encode(p_inner_ec_response, data);
  // Add security
  OCTETSTRING secured_data;
  if (secured_payload(data, secured_data) == 0) {
  if (sign_and_encrypt_payload(data, secured_data) == 0) {
    send_data(data, _params);
  }
}
@@ -62,32 +65,29 @@ void pki_layer::receive_data(OCTETSTRING& data, params& params)
{
  loggers::get_instance().log_msg(">>> pki_layer::receive_data: ", data);

  // Decode HTTP message
  LibItsPki__TypesAndValues::HttpMessage pki_message;
  if (_codec.decode(data, pki_message) == -1) {
    loggers::get_instance().warning("pki_layer::receive_data: Failed to decode data");
    return;
  }
  // // Decode HTTP message
  // LibItsPki__TypesAndValues::HttpMessage pki_message;
  // if (_codec.decode(data, pki_message) == -1) {
  //   loggers::get_instance().warning("pki_layer::receive_data: Failed to decode data");
  //   return;
  // }
  
  // Pass it to the ports
  to_all_upper_ports(pki_message, params);
  // // Pass it to the ports
  // to_all_upper_ports(pki_message, params);
}

int pki_layer::sign_and_encrypt_payload(const OCTETSTRING& p_data, OCTETSTRING& p_secured_data) {
  loggers::get_instance().log_msg(">>> pki_layer::sign_and_encrypt_payload: ", p_data);

  if (p_binary_body.ischosen(LibItsHttp__BinaryMessageBodyTypes::BinaryBody::ALT_innerEcRequest)) {
    params p; // TODO To be refined

  // 1. Signed the data
  OCTETSTRING signed_data;
    if (security_services::get_instance().sign_payload(p_data, signed_data, p) == -1) {
  if (security_services::get_instance().sign_payload(p_data, signed_data, _params) == -1) {
    loggers::get_instance().warning("http_etsi_ieee1609dot2_codec::encode: Failed to sign data");
    return -1;
  }
  loggers::get_instance().log_msg("pki_layer::sign_and_encrypt_payload: signed_data=", signed_data);
    // 3. Encrypt the signed packet
    if (security_services::get_instance().encrypt_gn_payload(signed_data, p_secured_data, p) == -1) {
  // 2. Encrypt the signed packet
  if (security_services::get_instance().encrypt_gn_payload(signed_data, p_secured_data, _params) == -1) {
    loggers::get_instance().warning("http_etsi_ieee1609dot2_codec::encode: Failed to encrypt data");
    return -1;
  }
@@ -95,11 +95,6 @@ int pki_layer::sign_and_encrypt_payload(const OCTETSTRING& p_data, OCTETSTRING&
  
  return 0;
}
  loggers::get_instance().warning("http_etsi_ieee1609dot2_codec::encode: No _codec found");

  return -1;
}


pki_layer_factory pki_layer_factory::_f;
+2 −2
Original line number Diff line number Diff line
@@ -31,7 +31,7 @@ class OCTETSTRING; //! Forward declaration of TITAN class
class pki_layer : public t_layer<LibItsPki__TestSystem::PkiPort> {
  params _params;
  etsi_ts102941_types_enrolment_inner_request _etsi_ts102941_types_enrolment_inner_request;
  etsi_ts102941_types_enrolment_inner_response _etsi_ts102941_types_enrolment_inner_request;
  etsi_ts102941_types_enrolment_inner_response _etsi_ts102941_types_enrolment_inner_response;
  etsi_ts103097_data_codec _codec;

public: //! \publicsection
@@ -41,7 +41,7 @@ public: //! \publicsection
   * \param[in] p_type \todo
   * \param[in] p_param \todo
   */
  pki_layer() : t_layer(), _params(), _etsi_ts102941_types_enrolment_inner_request(), _etsi_ts102941_types_enrolment_inner_request(), _codec() { };
  pki_layer() : t_layer(), _params(), _etsi_ts102941_types_enrolment_inner_request(), _etsi_ts102941_types_enrolment_inner_response(), _codec() { };
  /*!
   * \brief Specialised constructor
   *        Create a new instance of the pki_layer class
Loading