From db86ed51ba8de94306c949d7b209a7f5f6b75075 Mon Sep 17 00:00:00 2001 From: Carl Hetherington Date: Sun, 12 Feb 2017 20:57:10 +0000 Subject: [PATCH] Add new constructor. Remove believed unnecessary check for KDM assets being ReelAssets. Use add_key() more. --- src/decrypted_kdm.cc | 34 +++++++++++++++++++++++++++------- src/decrypted_kdm.h | 16 +++++++++++++++- 2 files changed, 42 insertions(+), 8 deletions(-) diff --git a/src/decrypted_kdm.cc b/src/decrypted_kdm.cc index a928c0a6..8355e1c8 100644 --- a/src/decrypted_kdm.cc +++ b/src/decrypted_kdm.cc @@ -1,5 +1,5 @@ /* - Copyright (C) 2013-2016 Carl Hetherington + Copyright (C) 2013-2017 Carl Hetherington This file is part of libdcp. @@ -56,6 +56,7 @@ using std::setw; using std::setfill; using std::hex; using std::pair; +using std::map; using boost::shared_ptr; using namespace dcp; @@ -165,7 +166,7 @@ DecryptedKDM::DecryptedKDM (EncryptedKDM const & kdm, string private_key) /* 93 is not-valid-after (a string) [25 bytes] */ p += 25; /* 118 is the key [ASDCP::KeyLen bytes] */ - _keys.push_back (DecryptedKDMKey ("", key_id, Key (p), cpl_id)); + add_key ("", key_id, Key (p), cpl_id); break; } case 138: @@ -186,7 +187,7 @@ DecryptedKDM::DecryptedKDM (EncryptedKDM const & kdm, string private_key) /* 97 is not-valid-after (a string) [25 bytes] */ p += 25; /* 112 is the key [ASDCP::KeyLen bytes] */ - _keys.push_back (DecryptedKDMKey (key_type, key_id, Key (p), cpl_id)); + add_key (key_type, key_id, Key (p), cpl_id); break; } default: @@ -221,7 +222,27 @@ DecryptedKDM::DecryptedKDM ( } DecryptedKDM::DecryptedKDM ( - boost::shared_ptr cpl, + string cpl_id, + map, Key> keys, + LocalTime not_valid_before, + LocalTime not_valid_after, + string annotation_text, + string content_title_text, + string issue_date + ) + : _not_valid_before (not_valid_before) + , _not_valid_after (not_valid_after) + , _annotation_text (annotation_text) + , _content_title_text (content_title_text) + , _issue_date (issue_date) +{ + for (map, Key>::const_iterator i = keys.begin(); i != keys.end(); ++i) { + add_key (i->first->key_type(), i->first->key_id().get(), i->second, cpl_id); + } +} + +DecryptedKDM::DecryptedKDM ( + shared_ptr cpl, Key key, LocalTime not_valid_before, LocalTime not_valid_after, @@ -239,9 +260,8 @@ DecryptedKDM::DecryptedKDM ( bool did_one = false; BOOST_FOREACH(shared_ptr i, cpl->reel_assets ()) { shared_ptr mxf = boost::dynamic_pointer_cast (i); - shared_ptr asset = boost::dynamic_pointer_cast (i); - if (asset && mxf && mxf->key_id ()) { - _keys.push_back (DecryptedKDMKey (mxf->key_type(), mxf->key_id().get(), key, cpl->id ())); + if (mxf && mxf->key_id ()) { + add_key (mxf->key_type(), mxf->key_id().get(), key, cpl->id ()); did_one = true; } } diff --git a/src/decrypted_kdm.h b/src/decrypted_kdm.h index 356b9883..752ced04 100644 --- a/src/decrypted_kdm.h +++ b/src/decrypted_kdm.h @@ -1,5 +1,5 @@ /* - Copyright (C) 2013-2016 Carl Hetherington + Copyright (C) 2013-2017 Carl Hetherington This file is part of libdcp. @@ -54,6 +54,7 @@ class DecryptedKDMKey; class EncryptedKDM; class CertificateChain; class CPL; +class ReelMXF; /** @class DecryptedKDM * @brief A decrypted KDM. @@ -86,6 +87,19 @@ public: std::string issue_date ); + /** Construct a DecryptedKDM containing a given set of keys. + * @param keys Keys to be included in the DecryptedKDM. + */ + DecryptedKDM ( + std::string cpl_id, + std::map, Key> keys, + LocalTime not_valid_before, + LocalTime not_valid_after, + std::string annotation_text, + std::string content_title_text, + std::string issue_date + ); + /** Create a DecryptedKDM by taking a CPL and setting up to encrypt each of its * assets with the same symmetric key. * -- 2.30.2