#pragma once
/*

  MBEDTLS BASED CERTIFICATE
  =========================

  This class can be used to generate a self-signed x509
  certificate which enables you to perform secure
  communication. This certificate uses a 2048 bits RSA key.

 */

#include <mbedtls/config.h>
#include <mbedtls/ctr_drbg.h>
#include <mbedtls/entropy.h>
#include <mbedtls/error.h>
#include <mbedtls/md.h>
#include <mbedtls/sha256.h>
#include <mbedtls/x509_crt.h>
#include <mbedtls/x509_csr.h>
#include <string>

class Certificate{
public:
  Certificate();
  bool loadCert(const std::string & certFile);
  bool loadKey(const std::string & certFile);
  int init(const std::string &countryName, const std::string &organization, const std::string &commonName);
  ~Certificate();
  std::string getFingerprintSha256() const;

public:
  mbedtls_x509_crt cert;
  mbedtls_pk_context key;       /* key context, stores private and public key. */
};