security_db.hh 2.19 KB
Newer Older
garciay's avatar
garciay committed
#pragma once

#include <string>
#include <memory>
#include <vector>
garciay's avatar
garciay committed
#include <map>

#include "security_db_record.hh"

class OCTETSTRING;
garciay's avatar
garciay committed
class CHARSTRING;
garciay's avatar
garciay committed

/*!
 * \class security_db
 * \brief This class provides security record description for security database
 */
class security_db {
  // TODO Enforce with const security_db_record, and const std::string
  std::map<std::string, std::unique_ptr<security_db_record> > _certificates; //! List of the certificates indexed by the certficate identifier
  std::map<std::vector<unsigned char>, std::string> _hashed_id8s; //! List of the certificates indexed by the HashedId8
garciay's avatar
garciay committed
  std::map<std::vector<unsigned char>, std::string> _issuers; //! List of the certificates indexed by the IssuerIdentifier
garciay's avatar
garciay committed
  
public: /*! \publicsection */
  /*!
   * \brief Default ctor
   */
  security_db();
  /*!
   * \brief Ctor with full path to the certificates storage
   */
  security_db(const std::string& p_db_path);
  /*!
   * \brief Default private dtor
   */
  ~security_db();

  int get_certificate_id(const OCTETSTRING& p_hashed_id8, std::string& p_certifcate_id) const;
garciay's avatar
garciay committed
  int get_certificate_id_by_issuer(const OCTETSTRING& p_issuer, std::string& p_certifcate_id) const;
garciay's avatar
garciay committed
  int get_certificate(const std::string& p_certifcate_id, OCTETSTRING& p_certificate) const;
garciay's avatar
garciay committed
  int get_certificate(const std::string& p_certifcate_id, IEEE1609dot2::CertificateBase& p_certificate) const;
  int get_issuer(const std::string& p_certifcate_id, OCTETSTRING& p_hashed_id_issuer) const;
garciay's avatar
garciay committed
  int get_hashed_id(const std::string& p_certifcate_id, OCTETSTRING& p_hashed_id) const;
  int get_private_key(const std::string& p_certifcate_id, OCTETSTRING& p_private_key) const;
  int get_public_keys(const std::string& p_certifcate_id, OCTETSTRING& p_public_key_x, OCTETSTRING& p_public_key_y) const;
garciay's avatar
garciay committed

  int 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);
  
garciay's avatar
garciay committed
  void dump() const;
garciay's avatar
garciay committed
  int clear();
garciay's avatar
garciay committed

private:
  int load_from_files(const std::string& p_db_path);
}; // End of class security_db