Loading ccsrc/Externals/LibItsCommon_externals.cc +21 −8 Original line number Diff line number Diff line Loading @@ -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 { Loading Loading @@ -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 Loading ccsrc/Ports/LibIts_ports/AdapterControlPort.cc +2 −2 Original line number Diff line number Diff line Loading @@ -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_ Loading @@ -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" Loading ccsrc/Ports/LibIts_ports/AdapterControlPort.hh +2 −2 Original line number Diff line number Diff line Loading @@ -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_ Loading @@ -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" Loading ccsrc/Ports/LibIts_ports/Pki_ports/AdapterControlPort_Pki.partC +4 −4 Original line number Diff line number Diff line Loading @@ -3,7 +3,7 @@ #include "loggers.hh" #include "registration.hh" #include "http_layer.hh" #include "pki_layer.hh" //============================================================================= namespace LibItsPki__TestSystem { Loading Loading @@ -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"); } } Loading ccsrc/Protocols/Pki/pki_layer.cc +12 −11 Original line number Diff line number Diff line Loading @@ -9,6 +9,8 @@ #include "converter.hh" #include "security_services.hh" #include "pki_layer.hh" using namespace std; // Required for isnan() Loading Loading @@ -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; } Loading Loading @@ -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) { Loading @@ -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); Loading @@ -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; Loading @@ -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 Loading
ccsrc/Externals/LibItsCommon_externals.cc +21 −8 Original line number Diff line number Diff line Loading @@ -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 { Loading Loading @@ -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 Loading
ccsrc/Ports/LibIts_ports/AdapterControlPort.cc +2 −2 Original line number Diff line number Diff line Loading @@ -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_ Loading @@ -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" Loading
ccsrc/Ports/LibIts_ports/AdapterControlPort.hh +2 −2 Original line number Diff line number Diff line Loading @@ -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_ Loading @@ -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" Loading
ccsrc/Ports/LibIts_ports/Pki_ports/AdapterControlPort_Pki.partC +4 −4 Original line number Diff line number Diff line Loading @@ -3,7 +3,7 @@ #include "loggers.hh" #include "registration.hh" #include "http_layer.hh" #include "pki_layer.hh" //============================================================================= namespace LibItsPki__TestSystem { Loading Loading @@ -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"); } } Loading
ccsrc/Protocols/Pki/pki_layer.cc +12 −11 Original line number Diff line number Diff line Loading @@ -9,6 +9,8 @@ #include "converter.hh" #include "security_services.hh" #include "pki_layer.hh" using namespace std; // Required for isnan() Loading Loading @@ -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; } Loading Loading @@ -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) { Loading @@ -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); Loading @@ -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; Loading @@ -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