/*
- Copyright (C) 2013 Carl Hetherington <cth@carlh.net>
+ Copyright (C) 2013-2014 Carl Hetherington <cth@carlh.net>
This program is free software; you can redistribute it and/or modify
it under the terms of the GNU General Public License as published by
*/
+#ifndef LIBDCP_SIGNER_H
+#define LIBDCP_SIGNER_H
+
+/** @file src/signer.h
+ * @brief Signer class.
+ */
+
+#include "certificate.h"
+#include "certificate_chain.h"
+#include "types.h"
#include <boost/filesystem.hpp>
-#include "certificates.h"
-namespace libdcp {
+namespace xmlpp {
+ class Element;
+ class Node;
+}
+
+namespace dcp {
+/** @class Signer
+ * @brief A class which can sign XML files.
+ */
class Signer
{
public:
- Signer (CertificateChain c, boost::filesystem::path k)
+ Signer (boost::filesystem::path openssl);
+
+ Signer (
+ boost::filesystem::path openssl,
+ std::string organisation,
+ std::string organisational_unit,
+ std::string root_common_name,
+ std::string intermediate_common_name,
+ std::string leaf_common_name
+ );
+
+ /** @param c Certificate chain to sign with.
+ * @param k Key to sign with as a PEM-format string.
+ */
+ Signer (CertificateChain c, std::string k)
: _certificates (c)
, _key (k)
{}
- void sign (xmlpp::Element* parent, bool interop) const;
+ void sign (xmlpp::Element* parent, Standard standard) const;
void add_signature_value (xmlpp::Node* parent, std::string ns) const;
CertificateChain const & certificates () const {
return _certificates;
}
-
-private:
- void add_signer (xmlpp::Element* parent, std::string ns) const;
-
+ CertificateChain& certificates () {
+ return _certificates;
+ }
+
+ std::string key () const {
+ return _key;
+ }
+
+ void set_key (std::string k) {
+ _key = k;
+ }
+
+ bool valid () const;
+
+private:
+ void create (boost::filesystem::path directory);
+
+ /** Certificate chain to sign with */
CertificateChain _certificates;
- /** Filename of signer key */
- boost::filesystem::path _key;
+ /** Key to sign with as a PEM-format string */
+ std::string _key;
};
}
+
+#endif