X-Git-Url: https://git.carlh.net/gitweb/?a=blobdiff_plain;f=src%2Flib%2Futil.cc;h=e0efbc6f5254da21a9dc8d5801c1e8d2acf1746a;hb=7552a04c443c9c641ac580585f6d88900bf84d04;hp=c1ef4245f16b18713dd008bbb9d212ab858b1674;hpb=4edc14c8b1410e24f68b510cc14409b96c0338a3;p=dcpomatic.git diff --git a/src/lib/util.cc b/src/lib/util.cc index c1ef4245f..e0efbc6f5 100644 --- a/src/lib/util.cc +++ b/src/lib/util.cc @@ -45,6 +45,7 @@ #include "image.h" #include "text_decoder.h" #include "job_manager.h" +#include #include #include #include @@ -361,7 +362,7 @@ dcpomatic_setup () /* Add our library directory to the libltdl search path so that xmlsec can find xmlsec1-openssl. */ - boost::filesystem::path lib = app_contents (); + boost::filesystem::path lib = directory_containing_executable().parent_path(); lib /= "Frameworks"; setenv ("LTDL_LIBRARY_PATH", lib.c_str (), 1); #endif @@ -1201,3 +1202,29 @@ scale_for_display (dcp::Size s, dcp::Size display_container, dcp::Size film_cont return s; } + +dcp::DecryptedKDM +decrypt_kdm_with_helpful_error (dcp::EncryptedKDM kdm) +{ + try { + return dcp::DecryptedKDM (kdm, Config::instance()->decryption_chain()->key().get()); + } catch (dcp::KDMDecryptionError& e) { + /* Try to flesh out the error a bit */ + string const kdm_subject_name = kdm.recipient_x509_subject_name(); + bool on_chain = false; + shared_ptr dc = Config::instance()->decryption_chain(); + BOOST_FOREACH (dcp::Certificate i, dc->root_to_leaf()) { + if (i.subject() == kdm_subject_name) { + on_chain = true; + } + } + if (!on_chain) { + throw KDMError (_("This KDM was not made for DCP-o-matic's decryption certificate."), e.what()); + } else if (on_chain && kdm_subject_name != dc->leaf().subject()) { + throw KDMError (_("This KDM was made for DCP-o-matic but not for its leaf certificate."), e.what()); + } else { + throw; + } + } +} +