Rename certificates.{cc,h} -> certificate.{cc,h}.
[libdcp.git] / src / signer.h
index 5ae7cf510907753bdf03f0932c1d154836760613..b8bd564371d9c95cd21e284a1e6be6d363d75b6e 100644 (file)
@@ -1,5 +1,5 @@
 /*
-    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