Commit 1b604d88 authored by garciay's avatar garciay
Browse files

STF545: Add codecs for PKI

parent 52a430d7
Loading
Loading
Loading
Loading
+64 −0
Original line number Diff line number Diff line
#include "LibItsPki_EncdecDeclarations.hh"

#include "etsi_ts102941_types_enrolment_inner_request.hh"
#include "etsi_ts102941_types_enrolment_inner_response.hh"

#include "loggers.hh"

namespace LibItsPki__EncdecDeclarations {

  BITSTRING fx_enc_InnerEcRequest(const EtsiTs102941TypesEnrolment::InnerEcRequest& p_inner_request) {
    loggers::get_instance().log_msg(">>> fx_enc_InnerEcRequest: ", p_inner_request);

    etsi_ts102941_types_enrolment_inner_request codec;
    OCTETSTRING os;
    if (codec.encode(p_inner_request, os) == -1) {
      loggers::get_instance().warning("fx_enc_InnerEcRequest: -1 result code was returned");
      return int2bit(0, 1);
    }
    
    return oct2bit(os);
  }

  INTEGER fx_dec_InnerEcRequest(BITSTRING& b, EtsiTs102941TypesEnrolment::InnerEcRequest& p_inner_request) {
    loggers::get_instance().log_msg(">>> fx_dec_InnerEcRequest: ", b);

    etsi_ts102941_types_enrolment_inner_request codec;
    OCTETSTRING is = bit2oct(b);
    if (codec.decode(is, p_inner_request) == -1) {
      loggers::get_instance().warning("fx_dec_InnerEcRequest: -1 result code was returned");
      return -1;
    }
    
    loggers::get_instance().log_msg("<<< fx_dec_InnerEcRequest: ", p_inner_request);
    return 0;
  }
  
  BITSTRING fx_enc_InnerEcResponse(const EtsiTs102941TypesEnrolment::InnerEcResponse& p_inner_response) {
    loggers::get_instance().log_msg(">>> fx_enc_InnerEcResponse: ", p_inner_response);

    etsi_ts102941_types_enrolment_inner_response codec;
    OCTETSTRING os;
    if (codec.encode(p_inner_response, os) == -1) {
      loggers::get_instance().warning("fx_enc_InnerEcResponse: -1 result code was returned");
      return int2bit(0, 1);
    }

    return oct2bit(os);
  }

  INTEGER fx_dec_InnerEcResponse(BITSTRING& b, EtsiTs102941TypesEnrolment::InnerEcResponse& p_inner_response) {
    loggers::get_instance().log_msg(">>> fx_dec_InnerEcResponse: ", b);

    etsi_ts102941_types_enrolment_inner_response codec;
    OCTETSTRING is = bit2oct(b);
    if (codec.decode(is, p_inner_response) == -1) {
      loggers::get_instance().warning("fx_dec_InnerEcResponse: -1 result code was returned");
      return -1;
    }

    loggers::get_instance().log_msg("<<< fx_dec_InnerEcResponse: ", p_inner_response);
    return 0;
  }

} // End of namespace LibItsPki__EncdecDeclarations
+4 −0
Original line number Diff line number Diff line
@@ -65,6 +65,10 @@ namespace LibItsSecurity__Functions
                                                  const OCTETSTRING& p__certificateIssuer,
                                                  const OCTETSTRING& p__privateKey
                                                  ) {
    loggers::get_instance().log_msg(">>> fx__signWithEcdsaNistp256WithSha256: data=", p__toBeSignedSecuredMessage); 
    loggers::get_instance().log_msg(">>> fx__signWithEcdsaNistp256WithSha256: issuer=", p__certificateIssuer); 
    loggers::get_instance().log_msg(">>> fx__signWithEcdsaNistp256WithSha256: private key=", p__privateKey); 
    
    // Sanity checks
    if (p__certificateIssuer.lengthof() != 32) {
      loggers::get_instance().log("fx__signWithEcdsaNistp256WithSha256: Wrong parameters");
+9 −34
Original line number Diff line number Diff line
@@ -21,8 +21,8 @@
#include "security_db_record.hh"

namespace IEEE1609dot2BaseTypes {
  class EccP256CurvePoint;
  class EccP384CurvePoint;
  class EccP256CurvePoint; //! Declare TITAN class
  class EccP384CurvePoint; //! Declare TITAN class
}

/*!
@@ -31,44 +31,19 @@ namespace IEEE1609dot2BaseTypes {
 * \remark Singleton pattern
 */
class certificates_loader {
  
  std::string _certificateExt;
  
  std::string _privateKeyExt;

  std::string _privateEncKeyExt;

  std::string _certificateExt;     //! COER encoding certificate extension. Default: .oer
  std::string _privateKeyExt;      //! Private signing key extension. Default: .vkey
  std::string _privateEncKeyExt;   //! Private cyphering key extension. Default: .ekey
  std::string _publicKeysExt;

  std::string _publicCompKeysExt;

  std::string _publicEncKeysExt;

  std::string _hashedidDigestExt;

  std::string _issuerDigestExt;

  std::string _publicEncCompKeysExt;

  /*!
   * \brief The full folder path to load certificates
   */
  std::experimental::filesystem::path _full_path;

  /*!
   * \brief Set to true when certificates are successfully loaded from file system
   */
  bool _is_cache_initialized;
  
  /*!
   * \brief Directory filter (for local development purposes only
   */
  std::set<std::string> _directory_filter;

  /*!
   * \brief Unique static object reference of this class
   */
  static certificates_loader* instance;
  std::experimental::filesystem::path _full_path; //! The full folder path to load certificates
  bool _is_cache_initialized;                     //! Set to true when certificates are successfully loaded from file system
  std::set<std::string> _directory_filter;        //! Directory filter (for local development purposes only)
  static certificates_loader* instance;           //! Unique static object reference of this class

  /*!
   * \brief Default private ctor
+30 −0
Original line number Diff line number Diff line
#include "etsi_ts102941_types_enrolment_inner_request.hh"

#include "loggers.hh"

int etsi_ts102941_types_enrolment_inner_request::encode (const EtsiTs102941TypesEnrolment::InnerEcRequest& p_inner_request, OCTETSTRING& p_data)
{
  loggers::get_instance().log(">>> etsi_ts102941_types_enrolment_inner_request::encode: %s", p_inner_request.get_descriptor()->name);

  BITSTRING b;
  TTCN_EncDec::clear_error();
  TTCN_Buffer buffer;
  p_inner_request.encode(*p_inner_request.get_descriptor(), buffer, TTCN_EncDec::CT_OER);
  p_data = OCTETSTRING(buffer.get_len(), buffer.get_data());
  loggers::get_instance().log_msg("etsi_ts102941_types_enrolment_inner_request::encode: ", data);

  return 0;
}

int etsi_ts102941_types_enrolment_inner_request::decode (const OCTETSTRING& p_data, EtsiTs102941TypesEnrolment::InnerEcRequest& p_inner_request, params* p_params)
{
  loggers::get_instance().log_msg(">>> etsi_ts102941_types_enrolment_inner_request::decode: ", p_data);

  TTCN_EncDec::clear_error();
  TTCN_Buffer decoding_buffer(data);
  _params = params;
  p_inner_request.decode(*p_inner_request.get_descriptor(), decoding_buffer, TTCN_EncDec::CT_OER);

  loggers::get_instance().log_msg("<<< etsi_ts102941_types_enrolment_inner_request::decode: ", (const Base_Type&)p_inner_request);
  return 0;
}
+17 −0
Original line number Diff line number Diff line
#pragma once

#include "codec.hh"
#include "params.hh"

#include "EtsiTs102941TypesEnrolment.hh"

class etsi_ts102941_types_enrolment_inner_request : public codec<EtsiTs102941TypesEnrolment::InnerEcRequest, EtsiTs102941TypesEnrolment::InnerEcRequest>
{
public:
  explicit etsi_ts102941_types_enrolment_inner_request() : codec<EtsiTs102941TypesEnrolment::InnerEcRequest, EtsiTs102941TypesEnrolment::InnerEcRequest>() { };
  virtual ~etsi_ts102941_types_enrolment_inner_request() { };

  virtual int encode (const EtsiTs102941TypesEnrolment::InnerEcRequest& p_inner_request, OCTETSTRING& p_data);
  virtual int decode (const OCTETSTRING& p_data, EtsiTs102941TypesEnrolment::InnerEcRequest& p_inner_request, params* p_params = NULL);
}; // End of class etsi_ts102941_types_enrolment_inner_request
Loading