Commit 703ba28c authored by garciay's avatar garciay
Browse files

STF538: Certificate generation script

parent 66077329
Loading
Loading
Loading
Loading
+14 −0
Original line number Diff line number Diff line
@@ -366,6 +366,8 @@ namespace LibItsSecurity__Functions
  }

  BOOLEAN fx__store__certificate(const CHARSTRING& p__cert__id, const OCTETSTRING& p__cert, const OCTETSTRING& p__private__key, const OCTETSTRING& p__public__key__x, const OCTETSTRING& p__public__key__y, const OCTETSTRING& p__hashid8, const OCTETSTRING& p__issuer) {
    loggers::get_instance().log(">>> fx__store__certificate: '%s'", static_cast<const char*>(p__cert__id));

    if (security_services::get_instance().store_certificate(p__cert__id, p__cert, p__private__key, p__public__key__x, p__public__key__y, p__hashid8, p__issuer) == -1) {
      return FALSE;
    }
@@ -401,6 +403,18 @@ namespace LibItsSecurity__Functions
    return TRUE;
  }

  BOOLEAN fx__readCertificateFromDigest(
                                        const OCTETSTRING& p__digest,
                                        CHARSTRING& p__certificateId) {
    loggers::get_instance().log_msg(">>> fx__readCertificateFromDigest: ", p__digest);

    if (security_services::get_instance().read_certificate_from_digest(p__digest, p__certificateId) == -1) {
      return FALSE;
    }
    loggers::get_instance().log_msg("fx__readCertificateFromDigest: ", p__certificateId);
    
    return TRUE;
  }
  
  /**
   * @desc    Read the specified certificate digest
+2 −2
Original line number Diff line number Diff line
@@ -107,7 +107,7 @@ int certificates_loader::retrieve_certificates_list(std::set<std::experimental::
      }
    } // End of 'for' statement
  } // End of 'for' statement
  loggers::get_instance().log("certificates_loader::retrieve_certificates_list: # of files to cache:", p_files.size());
  loggers::get_instance().log("certificates_loader::retrieve_certificates_list: # of files to cache: %d", p_files.size());
  if (p_files.size() == 0) {
    loggers::get_instance().warning("certificates_loader::retrieve_certificates_list: No certificate found");
    return -1;
@@ -229,7 +229,7 @@ int certificates_loader::build_certificates_cache(std::set<std::experimental::fi
                                                                                                                                                             key,
                                                                                                                                                             certificate, // Certificate
                                                                                                                                                             decoded_certificate,
                                                                                                                                                             issuer, // Hashed ID fo the issuer, empty for CA
                                                                                                                                                             issuer, // Hashed ID fo the issuer
                                                                                                                                                             hashed_id, // Hashed ID
                                                                                                                                                             private_key, // Private key
                                                                                                                                                             public_key_x, // Public key X
+9 −1
Original line number Diff line number Diff line
@@ -158,7 +158,7 @@ int security_cache::store_certificate(const CHARSTRING& p_cert_id, const OCTETST
                                                 key,          // Certificate id
                                                 cert,         // Certificate
                                                 decoded_certificate,
                                                 issuer,       // Hashed ID fo the issuer, empty for CA
                                                 issuer,       // Hashed ID fo the issuer
                                                 hashed_id8,   // Hashed ID
                                                 private_key,  // Private key
                                                 public_key_x, // Public key X
@@ -175,8 +175,13 @@ int security_cache::store_certificate(const CHARSTRING& p_cert_id, const OCTETST
  if (h != _hashed_id8s.cend()) {
    _hashed_id8s.erase(h);
  }
  h = _issuers.find(issuer);
  if (h!= _issuers.cend()) {
    _issuers.erase(h);
  }
  _certificates.insert(std::pair<std::string, std::unique_ptr<security_db_record> >(key, std::unique_ptr<security_db_record>(p)));
  _hashed_id8s.insert(std::pair<std::vector<unsigned char>, std::string&>(hashed_id8, key));
  _issuers.insert(std::pair<std::vector<unsigned char>, std::string&>(issuer, key));
  dump();

  return 0;
@@ -198,4 +203,7 @@ void security_cache::dump() const {
  for (std::map<std::vector<unsigned char>, std::string>::const_iterator it = _hashed_id8s.cbegin(); it != _hashed_id8s.cend(); ++it) {
    loggers::get_instance().log("security_cache::dump: Hashedid8 idx = %s", it->second.c_str());
  } // End of 'for' statement
  for (std::map<std::vector<unsigned char>, std::string>::const_iterator it = _issuers.cbegin(); it != _issuers.cend(); ++it) {
    loggers::get_instance().log("security_cache::dump: Issuer idx = %s", it->second.c_str());
  } // End of 'for' statement
} // End of method dump
+9 −0
Original line number Diff line number Diff line
@@ -599,6 +599,15 @@ int security_services::read_certificate_digest(const CHARSTRING& p_certificate_i
  return _security_db.get()->get_hashed_id(std::string(static_cast<const char*>(p_certificate_id)), p_digest);
}

int security_services::read_certificate_from_digest(const OCTETSTRING& p_digest, CHARSTRING& p_certificate_id) const {
  std::string certificate_id;
  if (_security_db.get()->get_certificate_id_by_issuer(p_digest, certificate_id) != -1) {
    p_certificate_id = CHARSTRING(certificate_id.c_str());
    return 0;
  }
  return -1;
}

int security_services::read_private_key(const CHARSTRING& p_certificate_id, OCTETSTRING& p_private_key) const {
  return _security_db.get()->get_private_key(std::string(static_cast<const char*>(p_certificate_id)), p_private_key);
}
+1 −0
Original line number Diff line number Diff line
@@ -91,6 +91,7 @@ public: /*! \publicsection */
  
  int read_certificate(const CHARSTRING& p_certificate_id, OCTETSTRING& p_certificate) const;
  int read_certificate_digest(const CHARSTRING& p_certificate_id, OCTETSTRING& p_digest) const;
  int read_certificate_from_digest(const OCTETSTRING& p_digest, CHARSTRING& p_certificate_id) const;
  int read_private_key(const CHARSTRING& p_certificate_id, OCTETSTRING& p_private_key) const;
  
private: