#undef X509_NAME
#include <openssl/x509.h>
-#include <boost/noncopyable.hpp>
#include <boost/shared_ptr.hpp>
#include <boost/filesystem.hpp>
#include <string>
/** @class Certificate
* @brief A wrapper for an X509 certificate.
*
- * This class can take a Certificate from a file, a string or an OpenSSL X509 object.
+ * This class can take a Certificate from a string or an OpenSSL X509 object.
*/
class Certificate
{
: _certificate (0)
{}
- Certificate (boost::filesystem::path);
Certificate (std::string);
Certificate (X509 *);
Certificate (Certificate const &);
std::string subject () const;
std::string common_name () const;
+ X509* x509 () const {
+ return _certificate;
+ }
+
RSA* public_key () const;
std::string thumbprint () const;
public:
CertificateChain () {}
- void add (boost::shared_ptr<Certificate> c);
+ void add (boost::shared_ptr<const Certificate> c);
+ void remove (boost::shared_ptr<const Certificate> c);
+ void remove (int);
+
+ boost::shared_ptr<const Certificate> root () const;
+ boost::shared_ptr<const Certificate> leaf () const;
- boost::shared_ptr<Certificate> root () const;
- boost::shared_ptr<Certificate> leaf () const;
+ typedef std::list<boost::shared_ptr<const Certificate> > List;
+
+ List leaf_to_root () const;
+ List root_to_leaf () const;
- std::list<boost::shared_ptr<Certificate> > leaf_to_root () const;
+ bool valid () const;
+ bool attempt_reorder ();
private:
friend class ::certificates;
- std::list<boost::shared_ptr<Certificate> > _certificates;
+
+ List _certificates;
};
}