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

Bug fixed in etsi_ts103097_data_codec.cc

parent 17e64c15
Loading
Loading
Loading
Loading
+9 −0
Original line number Diff line number Diff line
@@ -30,10 +30,19 @@ int etsi_ts103097_data_codec::decode(const OCTETSTRING &p_data, Ieee1609Dot2::Ie
   * FIXME FSCOM Bug in TITAN TTCN-3 and ASN.1 Compiler for the TTCN-3 Test Executor, version 9.0.0
   */
  if (p_ieee1609Dot2Data.content().ischosen(Ieee1609Dot2::Ieee1609Dot2Content::ALT_signedData)) {
    loggers::get_instance().log_msg("etsi_ts103097_data_codec::decode: signer: ", p_ieee1609Dot2Data.content().signedData().signer());
    if (p_ieee1609Dot2Data.content().signedData().signer().ischosen(Ieee1609Dot2::SignerIdentifier::ALT_certificate)) {
      p_ieee1609Dot2Data.content().signedData().signer().certificate()[0].toBeSigned().appExtensions().set_to_omit();
      p_ieee1609Dot2Data.content().signedData().signer().certificate()[0].toBeSigned().certIssueExtensions().set_to_omit();
      p_ieee1609Dot2Data.content().signedData().signer().certificate()[0].toBeSigned().certRequestExtension().set_to_omit();
      loggers::get_instance().log_msg("etsi_ts103097_data_codec::decode: ", p_ieee1609Dot2Data.content().signedData().signer().certificate()[0].toBeSigned());
    }
    if (p_ieee1609Dot2Data.content().signedData().tbsData().headerInfo().requestedCertificate().is_present()) {
      Ieee1609Dot2::CertificateBase* requested_cert = static_cast<Ieee1609Dot2::CertificateBase*>(p_ieee1609Dot2Data.content().signedData().tbsData().headerInfo().requestedCertificate().get_opt_value());
      requested_cert->toBeSigned().appExtensions().set_to_omit();
      requested_cert->toBeSigned().certIssueExtensions().set_to_omit();
      requested_cert->toBeSigned().certRequestExtension().set_to_omit();
      loggers::get_instance().log_msg("etsi_ts103097_data_codec::decode: requested_cert: ", *requested_cert);
    }
  }
  /**
+9 −7
Original line number Diff line number Diff line
@@ -26,7 +26,7 @@ security_services_its *security_services_its::instance = nullptr;

security_services_its::security_services_its()
  : _setup_done{false}, _ec_keys_enc(nullptr), _bkf_expension_keys(nullptr), _security_cache(new security_cache), _security_db(nullptr), _last_generation_time(0),
    _unknown_certificate(0, nullptr), _requested_certificate(), _latitude(0), _longitude(0), _elevation(0), _geospacial() {
    _unknown_certificate(0, nullptr), _inline_p2p_requested_certificate(), _latitude(0), _longitude(0), _elevation(0), _geospacial() {
  loggers::get_instance().log(">>> security_services_its::security_services_its");

  //_geospacial.load_countries_map("$HOME/dev/TS.ITS/ne-countries-50m.json"); // FIXME Use parameter
@@ -215,19 +215,21 @@ int security_services_its::process_ieee_1609_dot2_signed_data(const Ieee1609Dot2
    loggers::get_instance().log_msg("security_services_its::process_ieee_1609_dot2_signed_data: inlineP2pcdRequest: ", header_info.inlineP2pcdRequest());
    const Ieee1609Dot2BaseTypes::SequenceOfHashedId3 &s =
      static_cast<const Ieee1609Dot2BaseTypes::SequenceOfHashedId3 &>(*header_info.inlineP2pcdRequest().get_opt_value());
    _requested_certificate.clear();
    _inline_p2p_requested_certificate.clear();
    for (int i = 0; i < s.lengthof(); i++) {
      loggers::get_instance().log_msg("security_services_its::process_ieee_1609_dot2_signed_data: Add requested certificate= ", s[i]);
      _requested_certificate.push_back(s[i]);
      _inline_p2p_requested_certificate.push_back(s[i]);
    } // End of 'for' statement
  }

  // Check requested certificate
  if (header_info.requestedCertificate().is_present()) {
    Ieee1609Dot2::CertificateBase requested_cert = header_info.requestedCertificate();
    loggers::get_instance().warning("security_services_its::process_ieee_1609_dot2_signed_data: ", requested_cert);
    loggers::get_instance().warning("security_services_its::process_ieee_1609_dot2_signed_data: requestedCertificate not supported yet");
    loggers::get_instance().log_msg("security_services_its::process_ieee_1609_dot2_signed_data: requested_cert: ", requested_cert);
    _requested_certificate.clear();
    _requested_certificate.push_back(requested_cert);
    // TODO Not supported by C-ITS Protocol
    loggers::get_instance().warning("security_services_its::process_ieee_1609_dot2_signed_data: requestedCertificate not supported yet");
  }

  // Check and extract unsecured payload
@@ -601,9 +603,9 @@ int security_services_its::sign_payload(const OCTETSTRING &p_unsecured_gn_payloa
    header_info.inlineP2pcdRequest().set_to_omit();
  }
  // Check if a certificate shall be provided
  if (_requested_certificate.size() != 0) {
  if (_inline_p2p_requested_certificate.size() != 0) {
    Ieee1609Dot2::CertificateBase           c;
    const Ieee1609Dot2BaseTypes::HashedId3 &hashed_id3 = _requested_certificate[0];
    const Ieee1609Dot2BaseTypes::HashedId3 &hashed_id3 = _inline_p2p_requested_certificate[0];
    _security_db->get_certificate(hashed_id3, c);
    header_info.requestedCertificate() = OPTIONAL<Ieee1609Dot2::CertificateBase>(c);
  } else {
+4 −1
Original line number Diff line number Diff line
@@ -30,6 +30,7 @@ namespace Ieee1609Dot2 {
  class SignerIdentifier;    //! TITAN forward declaration
  class VerificationKeyIndicator;
                             //! TITAN forward declaration
  class CertificateBase;     //! TITAN forward declaration
} // namespace Ieee1609Dot2

/*!
@@ -55,7 +56,9 @@ class security_services_its {
  std::unique_ptr<security_db>    _security_db;
  unsigned long long              _last_generation_time;
  OCTETSTRING                     _unknown_certificate;
  std::vector<OCTETSTRING>        _requested_certificate;
  std::vector<OCTETSTRING>        _inline_p2p_requested_certificate;
  std::vector<Ieee1609Dot2::CertificateBase>
                                  _requested_certificate;
  int                             _latitude;
  int                             _longitude;
  int                             _elevation;
+1 −1
Original line number Diff line number Diff line
#to be added globally
sources += uppertester_geonetworking_codec.cc uppertester_geonetworking_layer.cc
sources += uppertester_geonetworking_codec.cc uppertester_geonetworking_layer.cc uppertester_debug_layer.cc

ifeq (AtsCAM, $(ATS))
sources += uppertester_cam_codec.cc uppertester_cam_layer.cc
+1 −1
Original line number Diff line number Diff line
AtsCAM_Codha.cf_
 No newline at end of file
AtsCAM_Simulator.cfg_
 No newline at end of file
Loading