diff options
| author | Carl Hetherington <cth@carlh.net> | 2023-11-20 00:25:27 +0100 |
|---|---|---|
| committer | Carl Hetherington <cth@carlh.net> | 2023-11-20 21:37:37 +0100 |
| commit | 7b439c9baf719b135922e6c6b53472915fed3573 (patch) | |
| tree | 96493aefa814e5d2bcd73d1bab057d8e6f62d643 /src | |
| parent | 9b5cff118fe03649c0c404b35f2900ff36008637 (diff) | |
Verify encrypted DCPs (more) correctly (#2659).
Diffstat (limited to 'src')
| -rw-r--r-- | src/lib/verify_dcp_job.cc | 21 | ||||
| -rw-r--r-- | src/lib/verify_dcp_job.h | 3 | ||||
| -rw-r--r-- | src/tools/dcpomatic_player.cc | 5 |
3 files changed, 25 insertions, 4 deletions
diff --git a/src/lib/verify_dcp_job.cc b/src/lib/verify_dcp_job.cc index e054fae3a..5e50ec51d 100644 --- a/src/lib/verify_dcp_job.cc +++ b/src/lib/verify_dcp_job.cc @@ -19,6 +19,7 @@ */ +#include "config.h" #include "cross.h" #include "verify_dcp_job.h" #include "content.h" @@ -35,9 +36,10 @@ using namespace boost::placeholders; #endif -VerifyDCPJob::VerifyDCPJob (vector<boost::filesystem::path> directories) +VerifyDCPJob::VerifyDCPJob(vector<boost::filesystem::path> directories, vector<boost::filesystem::path> kdms) : Job (shared_ptr<Film>()) , _directories (directories) + , _kdms(kdms) { } @@ -76,7 +78,22 @@ VerifyDCPJob::update_stage (string s, optional<boost::filesystem::path> path) void VerifyDCPJob::run () { - _notes = dcp::verify(_directories, bind(&VerifyDCPJob::update_stage, this, _1, _2), bind(&VerifyDCPJob::set_progress, this, _1, false), {}, libdcp_resources_path() / "xsd"); + vector<dcp::DecryptedKDM> decrypted_kdms; + auto key = Config::instance()->decryption_chain()->key(); + if (key) { + for (auto kdm: _kdms) { + decrypted_kdms.push_back(dcp::DecryptedKDM{dcp::EncryptedKDM(dcp::file_to_string(kdm)), *key}); + } + } + + _notes = dcp::verify( + _directories, + decrypted_kdms, + bind(&VerifyDCPJob::update_stage, this, _1, _2), + bind(&VerifyDCPJob::set_progress, this, _1, false), + {}, + libdcp_resources_path() / "xsd" + ); bool failed = false; for (auto i: _notes) { diff --git a/src/lib/verify_dcp_job.h b/src/lib/verify_dcp_job.h index b00f0128b..61a347507 100644 --- a/src/lib/verify_dcp_job.h +++ b/src/lib/verify_dcp_job.h @@ -29,7 +29,7 @@ class Content; class VerifyDCPJob : public Job { public: - explicit VerifyDCPJob (std::vector<boost::filesystem::path> directories); + VerifyDCPJob(std::vector<boost::filesystem::path> directories, std::vector<boost::filesystem::path> kdms); ~VerifyDCPJob (); std::string name () const override; @@ -44,5 +44,6 @@ private: void update_stage (std::string s, boost::optional<boost::filesystem::path> path); std::vector<boost::filesystem::path> _directories; + std::vector<boost::filesystem::path> _kdms; std::vector<dcp::VerificationNote> _notes; }; diff --git a/src/tools/dcpomatic_player.cc b/src/tools/dcpomatic_player.cc index d1668975c..212169d84 100644 --- a/src/tools/dcpomatic_player.cc +++ b/src/tools/dcpomatic_player.cc @@ -713,6 +713,7 @@ private: _viewer.set_coalesce_player_changes(true); for (auto path: dialog.paths()) { dcp->add_kdm(dcp::EncryptedKDM(dcp::file_to_string(path))); + _kdms.push_back(path); } examine_content(); } @@ -913,7 +914,7 @@ private: auto dcp = std::dynamic_pointer_cast<DCPContent>(_film->content().front()); DCPOMATIC_ASSERT (dcp); - auto job = make_shared<VerifyDCPJob>(dcp->directories()); + auto job = make_shared<VerifyDCPJob>(dcp->directories(), _kdms); VerifyDCPProgressDialog progress(this, _("DCP-o-matic Player")); bool const completed = progress.run(job); progress.Close(); @@ -1125,6 +1126,8 @@ private: wxMenuItem* _view_dual_screen = nullptr; wxSizer* _main_sizer = nullptr; PlayerStressTester _stress; + /** KDMs that have been loaded, so that we can pass them to the verifier */ + std::vector<boost::filesystem::path> _kdms; }; static const wxCmdLineEntryDesc command_line_description[] = { |
