#define LIBDCP_KDM_H
#include <boost/filesystem.hpp>
+#include <boost/scoped_ptr.hpp>
+#include <boost/date_time/posix_time/posix_time.hpp>
#include "key.h"
+#include "metadata.h"
namespace libdcp {
+namespace xml {
+ class DCinemaSecurityMessage;
+};
+
+class Signer;
+class Certificate;
+class CPL;
+
/** A single key for encrypting or decrypting an MXF. One or more of these
* are delivered in a KDM.
*/
-class KDMKey : public boost::noncopyable
+class KDMKey
{
public:
KDMKey (uint8_t const *, int);
+ KDMKey (
+ boost::shared_ptr<const Signer> signer,
+ std::string cpl_id, std::string key_id, boost::posix_time::ptime from, boost::posix_time::ptime until, Key key
+ );
+
+ KDMKey (KDMKey const &);
+
+ KDMKey& operator= (KDMKey const &);
+
+ std::string cpl_id () const {
+ return _cpl_id;
+ }
+
+ std::string key_id () const {
+ return _key_id;
+ }
+
+ std::string not_valid_before () const {
+ return _not_valid_before;
+ }
+
+ std::string not_valid_after () const {
+ return _not_valid_after;
+ }
+
Key key () const {
return _key;
}
+
+ std::string encrypted_base64 (boost::shared_ptr<const Certificate>) const;
private:
void get (uint8_t *, uint8_t const **, int) const;
std::string get (uint8_t const **, int) const;
std::string get_uuid (uint8_t const **) const;
void put (uint8_t **, uint8_t const *, int) const;
+ void put (uint8_t **, std::string) const;
void put_uuid (uint8_t **, std::string) const;
uint8_t _signer_thumbprint[20];
std::string _cpl_id;
- std::string _not_valid_before;
- std::string _not_valid_after;
std::string _key_type;
std::string _key_id;
+ std::string _not_valid_before;
+ std::string _not_valid_after;
Key _key;
};
public:
KDM (boost::filesystem::path, boost::filesystem::path);
+ KDM (
+ boost::shared_ptr<const CPL> cpl, boost::shared_ptr<const Signer>, boost::shared_ptr<const Certificate> recipient_cert,
+ boost::posix_time::ptime not_valid_before, boost::posix_time::ptime not_valid_after,
+ std::string annotation_text, std::string issue_date
+ );
+
std::list<KDMKey> keys () const {
return _keys;
}
+ void as_xml (boost::filesystem::path) const;
+ std::string as_xml () const;
+
private:
+ /** Unencrypted MXF content keys */
std::list<KDMKey> _keys;
+
+ boost::shared_ptr<xml::DCinemaSecurityMessage> xml_kdm;
};