diff options
| author | Carl Hetherington <cth@carlh.net> | 2018-01-06 23:27:45 +0000 |
|---|---|---|
| committer | Carl Hetherington <cth@carlh.net> | 2018-01-06 23:27:45 +0000 |
| commit | f2991b10f26dd8996cfcdcbc2128f7e9db36f634 (patch) | |
| tree | b2724af5e6617ab58f95f2d7b1ea66dada77bcce /src | |
| parent | db19d69c0c33fe64cf60ec85bf59c4c15ec37383 (diff) | |
Check that we can decrypt a DKDM when it is loaded (#1011).
Diffstat (limited to 'src')
| -rw-r--r-- | src/tools/dcpomatic_kdm.cc | 29 |
1 files changed, 19 insertions, 10 deletions
diff --git a/src/tools/dcpomatic_kdm.cc b/src/tools/dcpomatic_kdm.cc index 26e7f8479..9995d80a9 100644 --- a/src/tools/dcpomatic_kdm.cc +++ b/src/tools/dcpomatic_kdm.cc @@ -406,9 +406,20 @@ private: if (d->ShowModal() == wxID_OK) { shared_ptr<DKDMBase> new_dkdm; try { - new_dkdm.reset ( - new DKDM (dcp::EncryptedKDM (dcp::file_to_string (wx_to_std (d->GetPath ()), MAX_KDM_SIZE))) - ); + dcp::EncryptedKDM ekdm(dcp::file_to_string (wx_to_std (d->GetPath ()), MAX_KDM_SIZE)); + + /* Decrypt the DKDM to make sure that we can */ + shared_ptr<const dcp::CertificateChain> chain = Config::instance()->decryption_chain(); + DCPOMATIC_ASSERT (chain->key()); + dcp::DecryptedKDM dkdm(ekdm, chain->key().get()); + + new_dkdm.reset(new DKDM(ekdm)); + shared_ptr<DKDMGroup> group = dynamic_pointer_cast<DKDMGroup> (selected_dkdm ()); + if (!group) { + group = Config::instance()->dkdms (); + } + add_dkdm_model (new_dkdm, group); + add_dkdm_view (new_dkdm); } catch (dcp::KDMFormatError& e) { error_dialog ( this, @@ -418,14 +429,12 @@ private: ) ); return; + } catch (dcp::KDMDecryptionError) { + error_dialog ( + this, + _("Could not decrypt the DKDM. Perhaps it was not created with the correct certificate.") + ); } - - shared_ptr<DKDMGroup> group = dynamic_pointer_cast<DKDMGroup> (selected_dkdm ()); - if (!group) { - group = Config::instance()->dkdms (); - } - add_dkdm_model (new_dkdm, group); - add_dkdm_view (new_dkdm); } d->Destroy (); } |
