Use an enum class for Marker.
[libdcp.git] / src / decrypted_kdm.cc
index 756028d15e18d6f563e3aa989a0fd3a4d5470d4e..dd6def32d5d8d50152bcbc27dd8257fe930a6157 100644 (file)
@@ -57,7 +57,7 @@ using std::setfill;
 using std::hex;
 using std::pair;
 using std::map;
-using boost::shared_ptr;
+using std::shared_ptr;
 using boost::optional;
 using namespace dcp;
 
@@ -271,10 +271,9 @@ DecryptedKDM::DecryptedKDM (
 {
        /* Create DecryptedKDMKey objects for each encryptable asset */
        bool did_one = false;
-       BOOST_FOREACH(shared_ptr<const ReelAsset> i, cpl->reel_assets ()) {
-               shared_ptr<const ReelMXF> mxf = boost::dynamic_pointer_cast<const ReelMXF> (i);
-               if (mxf && mxf->key_id ()) {
-                       add_key (mxf->key_type(), mxf->key_id().get(), key, cpl->id(), SMPTE);
+       BOOST_FOREACH(shared_ptr<const ReelMXF> i, cpl->reel_mxfs()) {
+               if (i->key_id()) {
+                       add_key (i->key_type(), i->key_id().get(), key, cpl->id(), SMPTE);
                        did_one = true;
                }
        }
@@ -313,8 +312,16 @@ DecryptedKDM::encrypt (
 {
        DCP_ASSERT (!_keys.empty ());
 
-       list<pair<string, string> > key_ids;
-       list<string> keys;
+       BOOST_FOREACH (dcp::Certificate i, signer->leaf_to_root()) {
+               if (day_greater_than_or_equal(dcp::LocalTime(i.not_before()), _not_valid_before)) {
+                       throw BadKDMDateError (true);
+               } else if (day_less_than_or_equal(dcp::LocalTime(i.not_after()), _not_valid_after)) {
+                       throw BadKDMDateError (false);
+               }
+       }
+
+       vector<pair<string, string>> key_ids;
+       vector<string> keys;
        BOOST_FOREACH (DecryptedKDMKey const & i, _keys) {
                /* We're making SMPTE keys so we must have a type for each one */
                DCP_ASSERT (i.type());