Loading ccsrc/Ports/LibIts_ports/GN_ports/GeoNetworkingPort.hh +1 −4 Original line number Diff line number Diff line Loading @@ -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" Loading Loading @@ -49,5 +48,3 @@ namespace LibItsGeoNetworking__TestSystem { }; } /* end of namespace */ #endif ccsrc/Ports/LibIts_ports/Pki_ports/PkiPort.cc +97 −61 Original line number Diff line number Diff line Loading @@ -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, Loading @@ -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) Loading ccsrc/Ports/LibIts_ports/Pki_ports/PkiPort.hh +9 −4 Original line number Diff line number Diff line Loading @@ -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(); Loading Loading @@ -42,5 +49,3 @@ protected: }; } /* end of namespace */ #endif ccsrc/Protocols/Pki/pki_layer.cc +34 −39 Original line number Diff line number Diff line Loading @@ -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()); Loading @@ -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); } } Loading @@ -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; } Loading @@ -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; ccsrc/Protocols/Pki/pki_layer.hh +2 −2 Original line number Diff line number Diff line Loading @@ -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 Loading @@ -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 Loading
ccsrc/Ports/LibIts_ports/GN_ports/GeoNetworkingPort.hh +1 −4 Original line number Diff line number Diff line Loading @@ -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" Loading Loading @@ -49,5 +48,3 @@ namespace LibItsGeoNetworking__TestSystem { }; } /* end of namespace */ #endif
ccsrc/Ports/LibIts_ports/Pki_ports/PkiPort.cc +97 −61 Original line number Diff line number Diff line Loading @@ -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, Loading @@ -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) Loading
ccsrc/Ports/LibIts_ports/Pki_ports/PkiPort.hh +9 −4 Original line number Diff line number Diff line Loading @@ -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(); Loading Loading @@ -42,5 +49,3 @@ protected: }; } /* end of namespace */ #endif
ccsrc/Protocols/Pki/pki_layer.cc +34 −39 Original line number Diff line number Diff line Loading @@ -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()); Loading @@ -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); } } Loading @@ -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; } Loading @@ -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;
ccsrc/Protocols/Pki/pki_layer.hh +2 −2 Original line number Diff line number Diff line Loading @@ -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 Loading @@ -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