summaryrefslogtreecommitdiff
path: root/src/tools
diff options
context:
space:
mode:
authorCarl Hetherington <cth@carlh.net>2018-01-06 23:27:45 +0000
committerCarl Hetherington <cth@carlh.net>2018-01-06 23:27:45 +0000
commitf2991b10f26dd8996cfcdcbc2128f7e9db36f634 (patch)
treeb2724af5e6617ab58f95f2d7b1ea66dada77bcce /src/tools
parentdb19d69c0c33fe64cf60ec85bf59c4c15ec37383 (diff)
Check that we can decrypt a DKDM when it is loaded (#1011).
Diffstat (limited to 'src/tools')
-rw-r--r--src/tools/dcpomatic_kdm.cc29
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 ();
}