Make disabling forensic marking optional.
authorMart Jansink <mart@gofilex.nl>
Tue, 13 Feb 2018 12:34:23 +0000 (13:34 +0100)
committerCarl Hetherington <cth@carlh.net>
Wed, 14 Feb 2018 22:16:07 +0000 (22:16 +0000)
src/decrypted_kdm.cc
src/decrypted_kdm.h
src/encrypted_kdm.cc
src/encrypted_kdm.h
test/encryption_test.cc
test/round_trip_test.cc

index 1b226d9ba5df7d932bb80e64a966921486c403b9..53e958c16f2acfb0f394a31c3b77b9012b2a2915 100644 (file)
@@ -303,7 +303,7 @@ DecryptedKDM::add_key (DecryptedKDMKey key)
 
 EncryptedKDM
 DecryptedKDM::encrypt (
-       shared_ptr<const CertificateChain> signer, Certificate recipient, vector<Certificate> trusted_devices, Formulation formulation
+       shared_ptr<const CertificateChain> signer, Certificate recipient, vector<Certificate> trusted_devices, Formulation formulation, int disable_forensic_marking_picture, int disable_forensic_marking_audio
        ) const
 {
        DCP_ASSERT (!_keys.empty ());
@@ -369,6 +369,8 @@ DecryptedKDM::encrypt (
                _not_valid_before,
                _not_valid_after,
                formulation,
+               disable_forensic_marking_picture,
+               disable_forensic_marking_audio,
                key_ids,
                keys
                );
index 56529b5df563709c34c33cd70dac1417561d4ed4..c264bfbcf305aac9dd79482bc9ef009c1f5e6078 100644 (file)
@@ -130,7 +130,9 @@ public:
                boost::shared_ptr<const CertificateChain> signer,
                Certificate recipient,
                std::vector<Certificate> trusted_devices,
-               Formulation formulation
+               Formulation formulation,
+               int disable_forensic_marking_picture,
+               int disable_forensic_marking_audio
                ) const;
 
        void add_key (boost::optional<std::string> type, std::string key_id, Key key, std::string cpl_id, Standard standard);
index 7286f2d7c2090d0b8324678f243952e6c1893bd1..ebcb41ca241b065d890e821669d5e3b7ae2f770c 100644 (file)
@@ -41,6 +41,7 @@
 #include <libxml/parser.h>
 #include <boost/date_time/posix_time/posix_time.hpp>
 #include <boost/foreach.hpp>
+#include <boost/format.hpp>
 
 using std::list;
 using std::vector;
@@ -401,9 +402,19 @@ public:
                }
                key_id_list.as_xml (node->add_child ("KeyIdList"));
 
-               xmlpp::Element* forensic_mark_flag_list = node->add_child ("ForensicMarkFlagList");
-               forensic_mark_flag_list->add_child("ForensicMarkFlag")->add_child_text ("http://www.smpte-ra.org/430-1/2006/KDM#mrkflg-picture-disable");
-               forensic_mark_flag_list->add_child("ForensicMarkFlag")->add_child_text ("http://www.smpte-ra.org/430-1/2006/KDM#mrkflg-audio-disable");
+               if (disable_forensic_marking_picture || disable_forensic_marking_audio) {
+                       xmlpp::Element* forensic_mark_flag_list = node->add_child ("ForensicMarkFlagList");
+                       if (disable_forensic_marking_picture) {
+                               forensic_mark_flag_list->add_child("ForensicMarkFlag")->add_child_text ("http://www.smpte-ra.org/430-1/2006/KDM#mrkflg-picture-disable");
+                       }
+                       if (disable_forensic_marking_audio) {
+                               string mrkflg = "http://www.smpte-ra.org/430-1/2006/KDM#mrkflg-audio-disable";
+                               if (disable_forensic_marking_audio != -1) {
+                                       mrkflg = str (boost::format (mrkflg + "-above-channel-%u") % disable_forensic_marking_audio);
+                               }
+                               forensic_mark_flag_list->add_child("ForensicMarkFlag")->add_child_text (mrkflg);
+                       }
+               }
        }
 
        Recipient recipient;
@@ -412,6 +423,8 @@ public:
        string content_title_text;
        LocalTime not_valid_before;
        LocalTime not_valid_after;
+       int disable_forensic_marking_picture;
+       int disable_forensic_marking_audio;
        boost::optional<AuthorizedDeviceInfo> authorized_device_info;
        KeyIdList key_id_list;
 };
@@ -545,6 +558,8 @@ EncryptedKDM::EncryptedKDM (
        LocalTime not_valid_before,
        LocalTime not_valid_after,
        Formulation formulation,
+       int disable_forensic_marking_picture,
+       int disable_forensic_marking_audio,
        list<pair<string, string> > key_ids,
        list<string> keys
        )
@@ -577,6 +592,8 @@ EncryptedKDM::EncryptedKDM (
        kre.content_title_text = content_title_text;
        kre.not_valid_before = not_valid_before;
        kre.not_valid_after = not_valid_after;
+       kre.disable_forensic_marking_picture = disable_forensic_marking_picture;
+       kre.disable_forensic_marking_audio = disable_forensic_marking_audio;
 
        if (formulation != MODIFIED_TRANSITIONAL_TEST) {
                kre.authorized_device_info = data::AuthorizedDeviceInfo ();
index 69b9a267c782cd38f2742950651e36a6927c1c48..24e8f0603362f6b7fc99f131cb2777f9cff0a641 100644 (file)
@@ -110,6 +110,8 @@ private:
                LocalTime not_valid_before,
                LocalTime not_valid_after,
                Formulation formulation,
+               int disable_forensic_marking_picture,
+               int disable_forensic_marking_audio,
                std::list<std::pair<std::string, std::string> > key_ids,
                std::list<std::string> keys
                );
index f52987252a78a43b39f3315995eadd3291115123..7b41e0968b71a99b0e36d73ce5704f7e749feb48 100644 (file)
@@ -135,7 +135,7 @@ BOOST_AUTO_TEST_CASE (encryption_test)
                "2012-07-17T04:45:18+00:00"
                );
 
-       kdm.encrypt (signer, signer->leaf(), vector<dcp::Certificate>(), dcp::MODIFIED_TRANSITIONAL_1).as_xml ("build/test/encryption_test.kdm.xml");
+       kdm.encrypt (signer, signer->leaf(), vector<dcp::Certificate>(), dcp::MODIFIED_TRANSITIONAL_1, -1, -1).as_xml ("build/test/encryption_test.kdm.xml");
 
        int r = system (
                "xmllint --path schema --nonet --noout --schema schema/SMPTE-430-1-2006-Amd-1-2009-KDM.xsd build/test/encryption_test.kdm.xml "
index 396dba674819d538e32d23e6dc556c3682c5a89d..1fd89dbb9f684bcce6bf04dc429bb6d8d5d7ca65 100644 (file)
@@ -83,7 +83,7 @@ BOOST_AUTO_TEST_CASE (round_trip_test)
 
        boost::filesystem::path const kdm_file = work_dir / "kdm.xml";
 
-       kdm_A.encrypt(signer, signer->leaf(), vector<dcp::Certificate>(), dcp::MODIFIED_TRANSITIONAL_1).as_xml (kdm_file);
+       kdm_A.encrypt(signer, signer->leaf(), vector<dcp::Certificate>(), dcp::MODIFIED_TRANSITIONAL_1, -1, -1).as_xml (kdm_file);
 
        /* Reload the KDM, using our private key to decrypt it */
        dcp::DecryptedKDM kdm_B (dcp::EncryptedKDM (dcp::file_to_string (kdm_file)), signer->key().get ());