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

Start reviewing ITS-S EC tests

parent eef4aca7
Loading
Loading
Loading
Loading
+15 −8
Original line number Diff line number Diff line
@@ -208,6 +208,7 @@ int http_codec::encode_request(const LibItsHttp__TypesAndValues::Request& p_requ
    p_encoding_buffer.put_cs("0");
    _ec.is_content_length_present = 0x00;
  }
  loggers::get_instance().log("http_codec::encode_request: Content-Length: %d - %x", _ec.length, _ec.is_content_length_present);
  p_encoding_buffer.put_cs("\r\n");

  // Add message body
@@ -255,7 +256,8 @@ int http_codec::encode_response (const LibItsHttp__TypesAndValues::Response& p_r
        if (v.size_of() > 0) {
          loggers::get_instance().log_msg("http_codec::encode_response: Processing value ", v[0]);
          if (std::string(static_cast<const char*>(header.header__name())).compare("Content-Type") == 0) { // Store it for HTTP body payload encoding
            int j = 1;
            loggers::get_instance().log("http_codec::encode_response: Storing Content-Type");
            int j = 0;
            while (j < v.size_of()) {
              content_type += v[j++];
            } // End of 'while' statement
@@ -265,7 +267,7 @@ int http_codec::encode_response (const LibItsHttp__TypesAndValues::Response& p_r
          while (j < v.size_of()) {
                p_encoding_buffer.put_cs(", ");
                loggers::get_instance().log_msg("http_codec::encode_response: Processing value ", v[j]);
                p_encoding_buffer.put_cs(v[j]);
                p_encoding_buffer.put_cs(v[j++]);
                j += 1;
          } // End of 'while' statement
        }
@@ -287,30 +289,35 @@ int http_codec::encode_response (const LibItsHttp__TypesAndValues::Response& p_r
      _ec.length = os.lengthof();
      _ec.is_content_length_present = 0x01;
    }
    loggers::get_instance().log("http_codec::encode_request: length=%d", _ec.length);
    loggers::get_instance().log("http_codec::encode_response: length=%d", _ec.length);
  } else {
    loggers::get_instance().log("http_codec::encode_request: HTTP body field not present");
    loggers::get_instance().log("http_codec::encode_response: HTTP body field not present");
    _ec.length = 0;
    _ec.is_content_length_present = 0x00;
  }

  // Encode Content-Length header
  p_encoding_buffer.put_cs("Content-Length: ");
  if (_ec.length != 0) {
    p_encoding_buffer.put_cs(int2str(_ec.length + 2/*Stand for the last CRLF*/));
    loggers::get_instance().log("http_codec::encode_request: Content-Length: %s", static_cast<const char*>(int2str(_ec.length + 2/*Stand for the last CRLF*/)));
    p_encoding_buffer.put_cs(static_cast<const char*>(int2str(_ec.length + 2/*Stand for the last CRLF*/)));
    _ec.is_content_length_present = 0x01;
  } else {
    p_encoding_buffer.put_cs("0");
    _ec.is_content_length_present = 0x00;
  }
  loggers::get_instance().log("http_codec::encode_response: Content-Length: %d - %x", _ec.length, _ec.is_content_length_present);
  loggers::get_instance().log("http_codec::encode_request: Content-Length: %d - %x", _ec.length, _ec.is_content_length_present);
  p_encoding_buffer.put_cs("\r\n");

  // Add message body
  p_encoding_buffer.put_cs("\r\n");
  if (_ec.length != 0) {
  if (_ec.is_content_length_present == 0x01) {
    loggers::get_instance().log_msg("http_codec::encode_request: Add body ", os);
    p_encoding_buffer.put_os(os);
    p_encoding_buffer.put_cs("\r\n");
  }
  
  loggers::get_instance().log_to_hexa("<<< http_codec::encode_response: ", p_encoding_buffer);
  return 0;
}

+3 −3
Original line number Diff line number Diff line
@@ -156,12 +156,12 @@ int security_services::process_ieee_1609_dot2_signed_data(const IEEE1609dot2::Si
      return -1;
    }
  } else {
    const OPTIONAL<INTEGER>& v = dynamic_cast<const OPTIONAL<INTEGER>& >(header_info.generationTime()); // in millisecond
    const OPTIONAL<INTEGER>& v = dynamic_cast<const OPTIONAL<INTEGER>& >(header_info.generationTime()); // in microsecond
    unsigned long long gt = ((INTEGER&)(*v.get_opt_value())).get_long_long_val();
    // Get current time timestamp
    unsigned long long us = base_time::get_instance().get_its_current_time_us(); // in millisecond
    unsigned long long us = base_time::get_instance().get_its_current_time_us(); // in microsecond
    loggers::get_instance().log("security_services::process_ieee_1609_dot2_signed_data: generation time check %ld / %ld, delta = %f", header_info.generationTime(), us, abs((double)gt - (double)us));
    if (abs((double)gt - (double)us) >= 5.0) { // TODO Use a params for generation_time_epsilon
    if (abs((double)gt - (double)us) >= 500000.0) { // TODO Use a params for generation_time_epsilon, 500ms differences
      loggers::get_instance().warning("security_services::process_ieee_1609_dot2_signed_data: Invalid generation time, discard it");
      if (p_verify) {
        return -1;
+2 −70
Original line number Diff line number Diff line
@@ -46,6 +46,8 @@ int uppertester_pki_codec::encode (const LibItsPki__TypesAndValues::UtPkiTrigger
    encoding_buffer.put_os(u.triggerEnrolmentRequest().privateKey()); // 32 bytes
    encoding_buffer.put_os(u.triggerEnrolmentRequest().compressedPublickey()); //33 bytes
    */
  } else if (u.ischosen(LibItsPki__TypesAndValues::UtPkiTrigger::ALT_triggerAuthorizationRequest)) {
    encoding_buffer.put_c(static_cast<const unsigned char>(uppertester_pki_codec::c_utPkiTriggerAuthorizationRequest));
  } else { // Error
    data = OCTETSTRING(0, nullptr);
    loggers::get_instance().warning("<<< uppertester_pki_codec::encode: Failed to encode UT message");
@@ -85,76 +87,6 @@ int uppertester_pki_codec::encode_ (const Base_Type& type, const TTCN_Typedescri
    
    loggers::get_instance().log("uppertester_pki_codec::encode_ (else): processing type %s/%s", type.get_descriptor()->name, field_descriptor.name);
    type.encode(field_descriptor, encoding_buffer, TTCN_EncDec::CT_RAW);
    /*if (
        (s.rfind(".shape") != string::npos) ||
        (s.rfind(".relevanceDistance") != string::npos) ||
        (s.rfind(".relevanceTrafficDirection") != string::npos)
        ) {
      encoding_buffer.put_c((unsigned char)static_cast<const Enum_Type&>(type).as_int());
    } else if (s.rfind(".payload") != string::npos) {
      const OCTETSTRING& os = static_cast<const OCTETSTRING&>(type);
      const unsigned char s[] = { (unsigned char)((os.lengthof() & 0x0000FF00) >> 8), (unsigned char)os.lengthof() };
      encoding_buffer.put_s(2, s);
      if (os.lengthof() != 0) {
        encoding_buffer.put_string(os);
      }
    } else if (s.rfind(".detectionTime") != string::npos) {
      unsigned long long llu = static_cast<const INTEGER&>(type).get_long_long_val();
      loggers::get_instance().log("uppertester_pki_codec::encode_ : detectionTime=%llu", llu);
      std::vector<unsigned char> v;
      for (int i = 0; i < 6; i++) {
        v.insert(v.begin(), static_cast<unsigned char>(llu));
        llu >>= 8;
      } // End of 'for' statement
      OCTETSTRING os(v.size(), v.data());
      loggers::get_instance().log_msg("uppertester_pki_codec::encode_: timeDetection=", os);
      encoding_buffer.put_string(os);
    } else if (
               (s.rfind(".validityDuration") != string::npos) ||
               (s.rfind(".repetitionDuration") != string::npos)
               ) {
      if (type.is_present()) {
        const OPTIONAL<INTEGER> &o = dynamic_cast<const OPTIONAL<INTEGER> &>(type);
        const INTEGER& i = static_cast<const INTEGER&>(*o.get_opt_value());
        loggers::get_instance().log_msg("uppertester_pki_codec::encode_: i=", i);
        encoding_buffer.put_string(int2oct(i, 3));
      }
    } else if (
               (s.rfind(".informationQuality") != string::npos) ||
               (s.rfind(".causeCode") != string::npos) ||
               (s.rfind(".subCauseCode") != string::npos)
               ) {
      const INTEGER& i = static_cast<const INTEGER&>(type);
      encoding_buffer.put_string(int2oct(i, 1));
    } else if (
               (s.rfind(".linkedCause") != string::npos) ||
               (s.rfind(".eventHistory") != string::npos)
               ) {
      // Skip them
    } else if (
               (s.rfind(".transmissionInterval") != string::npos) ||
               (s.rfind(".repetitionInterval") != string::npos)
               ) {
      if (type.is_present()) {
        const OPTIONAL<INTEGER> &o = dynamic_cast<const OPTIONAL<INTEGER> &>(type);
        const INTEGER& i = static_cast<const INTEGER&>(*o.get_opt_value());
        encoding_buffer.put_string(int2oct(i, 2));
      }
    } else if (s.rfind(".originatingStationID") != string::npos) {
      const INTEGER& i = static_cast<const INTEGER&>(type);
      encoding_buffer.put_string(int2oct(i, 4));
    } else if (s.rfind(".sequenceNumber") != string::npos) {
      const INTEGER& i = static_cast<const INTEGER&>(type);
      encoding_buffer.put_string(int2oct(i, 2));
    } else if (s.rfind(".AlacarteContainer") != string::npos) {
      const OPTIONAL<OCTETSTRING> &o = dynamic_cast<const OPTIONAL<OCTETSTRING> &>(type);
      const OCTETSTRING& os = static_cast<const OCTETSTRING&>(*o.get_opt_value());
      encoding_buffer.put_string(int2oct(os.lengthof(), 2));
      encoding_buffer.put_string(os);
    } else {
      loggers::get_instance().log("uppertester_pki_codec::encode_ (else): processing type %s/%s", type.get_descriptor()->name, field_descriptor.name);
      type.encode(field_descriptor, encoding_buffer, TTCN_EncDec::CT_RAW);
      }*/
  }
  
  loggers::get_instance().log_to_hexa("<<<uppertester_pki_codec::encode_: encoding_buffer=", encoding_buffer);
+1 −0
Original line number Diff line number Diff line
@@ -35,6 +35,7 @@ public:
  const unsigned char c_utPkiInitializeResult = 0x01;
  const unsigned char c_utPkiTriggerEnrolmentRequest = 0xBB;
  const unsigned char c_utPkiTriggerResult = 0xBC;
  const unsigned char c_utPkiTriggerAuthorizationRequest = 0xBD;

private:
  int encode_ (const Base_Type& type, const TTCN_Typedescriptor_t& field_descriptor, TTCN_Buffer& encoding_buffer);
+3 −3
Original line number Diff line number Diff line
@@ -28,9 +28,9 @@ LibItsPki_Pics.PICS_TS_AA_CERTIFICATE_ID := "CERT_GEMALTO_AA"
LibItsPki_Pixits.PX_AUTHORIZATION_REQUEST_WITH_POP         := false # Not private key available

LibItsPki_Pics.PICS_SECPKI_REENROLMENT := true
LibItsPki_Pixits.PX_EC_PRIVATE_KEY     := '7F14157FF7644A357B7845557AC4CC65A5CFD2570EF2D3A67F8CD5AECC9B9453'O
LibItsPki_Pixits.PX_EC_HASHED_ID8      := '6F39A071EF045942'O

LibItsPki_Pixits.PX_EC_PRIVATE_KEY     := '73AD688448117EFF50BCB044AA9CFD7932023B7A2C62887A1D3B99FED2B5237C'O
LibItsPki_Pixits.PX_EC_HASH            := 'C4FD3EF2B51CFD605D7D40FA9C1C279B8B8C4D7CB9D40D6044C55F615D750502'O
LibItsPki_Pixits.PX_EC_HASHED_ID8      := '44C55F615D750502'O

[LOGGING]
# In this section you can specify the name of the log file and the classes of events
Loading