Use a bool instead of an int for disable-forensic-picture and
authorCarl Hetherington <cth@carlh.net>
Wed, 14 Feb 2018 22:13:31 +0000 (22:13 +0000)
committerCarl Hetherington <cth@carlh.net>
Wed, 14 Feb 2018 22:16:07 +0000 (22:16 +0000)
a optional<int> instead of an int with a magic -1 for
disable-forensic-audio.

src/decrypted_kdm.cc
src/decrypted_kdm.h
src/encrypted_kdm.cc
src/encrypted_kdm.h
test/encryption_test.cc
test/kdm_test.cc
test/round_trip_test.cc

index 53e958c16f2acfb0f394a31c3b77b9012b2a2915..0fa95f9a714399acd27927586a64d782faa82326 100644 (file)
@@ -303,7 +303,12 @@ DecryptedKDM::add_key (DecryptedKDMKey key)
 
 EncryptedKDM
 DecryptedKDM::encrypt (
-       shared_ptr<const CertificateChain> signer, Certificate recipient, vector<Certificate> trusted_devices, Formulation formulation, int disable_forensic_marking_picture, int disable_forensic_marking_audio
+       shared_ptr<const CertificateChain> signer,
+       Certificate recipient,
+       vector<Certificate> trusted_devices,
+       Formulation formulation,
+       bool disable_forensic_marking_picture,
+       optional<int> disable_forensic_marking_audio
        ) const
 {
        DCP_ASSERT (!_keys.empty ());
index c264bfbcf305aac9dd79482bc9ef009c1f5e6078..7ae1d161feaf1efefb5820985b68bbe5646371b6 100644 (file)
@@ -124,6 +124,9 @@ public:
         *  @param trusted_devices Extra trusted devices which should be written to the KDM (recipient will be written
         *  as a trusted device automatically and does not need to be included in this list).
         *  @param formulation Formulation to use for the encrypted KDM.
+        *  @param disable_forensic_marking_picture true to disable forensic marking of picture.
+        *  @param disable_forensic_marking_audio if not set, don't disable forensic marking of audio.  If set to 0,
+        *  disable all forensic marking; if set above 0, disable forensic marking above that channel.
         *  @return Encrypted KDM.
         */
        EncryptedKDM encrypt (
@@ -131,8 +134,8 @@ public:
                Certificate recipient,
                std::vector<Certificate> trusted_devices,
                Formulation formulation,
-               int disable_forensic_marking_picture,
-               int disable_forensic_marking_audio
+               bool disable_forensic_marking_picture,
+               boost::optional<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 d7a2bcc6ca6899404fc76b0edc4cd3a476012c7c..7a7d98c1fb16858d2f26a9d52042217caafbaf62 100644 (file)
@@ -1,5 +1,5 @@
 /*
-    Copyright (C) 2013-2017 Carl Hetherington <cth@carlh.net>
+    Copyright (C) 2013-2018 Carl Hetherington <cth@carlh.net>
 
     This file is part of libdcp.
 
@@ -35,6 +35,7 @@
 #include "util.h"
 #include "certificate_chain.h"
 #include "exceptions.h"
+#include "compose.hpp"
 #include <libcxml/cxml.h>
 #include <libxml++/document.h>
 #include <libxml++/nodes/element.h>
@@ -384,14 +385,14 @@ public:
                , authorized_device_info (node->node_child ("AuthorizedDeviceInfo"))
                , key_id_list (node->node_child ("KeyIdList"))
        {
-               disable_forensic_marking_picture = 0;
-               disable_forensic_marking_audio = 0;
+               disable_forensic_marking_picture = false;
+               disable_forensic_marking_audio = optional<int>();
                if (node->optional_node_child("ForensicMarkFlagList")) {
                        BOOST_FOREACH (cxml::ConstNodePtr i, node->node_child("ForensicMarkFlagList")->node_children("ForensicMarkFlag")) {
                                if (i->content() == picture_disable) {
-                                       disable_forensic_marking_picture = -1;
+                                       disable_forensic_marking_picture = true;
                                } else if (starts_with(i->content(), audio_disable)) {
-                                       disable_forensic_marking_audio = -1;
+                                       disable_forensic_marking_audio = 0;
                                        string const above = audio_disable + "-above-channel-";
                                        if (starts_with(i->content(), above)) {
                                                string above_number = i->content().substr(above.length());
@@ -429,8 +430,8 @@ public:
                        }
                        if (disable_forensic_marking_audio) {
                                string mrkflg = audio_disable;
-                               if (disable_forensic_marking_audio != -1) {
-                                       mrkflg = str (boost::format (mrkflg + "-above-channel-%u") % disable_forensic_marking_audio);
+                               if (*disable_forensic_marking_audio > 0) {
+                                       mrkflg += String::compose ("-above-channel-%1", *disable_forensic_marking_audio);
                                }
                                forensic_mark_flag_list->add_child("ForensicMarkFlag")->add_child_text (mrkflg);
                        }
@@ -443,8 +444,8 @@ public:
        string content_title_text;
        LocalTime not_valid_before;
        LocalTime not_valid_after;
-       int disable_forensic_marking_picture;
-       int disable_forensic_marking_audio;
+       bool disable_forensic_marking_picture;
+       optional<int> disable_forensic_marking_audio;
        boost::optional<AuthorizedDeviceInfo> authorized_device_info;
        KeyIdList key_id_list;
 
@@ -585,8 +586,8 @@ EncryptedKDM::EncryptedKDM (
        LocalTime not_valid_before,
        LocalTime not_valid_after,
        Formulation formulation,
-       int disable_forensic_marking_picture,
-       int disable_forensic_marking_audio,
+       bool disable_forensic_marking_picture,
+       optional<int> disable_forensic_marking_audio,
        list<pair<string, string> > key_ids,
        list<string> keys
        )
index 24e8f0603362f6b7fc99f131cb2777f9cff0a641..3ac15864058390b9f9170afd7de0e7a7037d26f6 100644 (file)
@@ -110,8 +110,8 @@ private:
                LocalTime not_valid_before,
                LocalTime not_valid_after,
                Formulation formulation,
-               int disable_forensic_marking_picture,
-               int disable_forensic_marking_audio,
+               bool disable_forensic_marking_picture,
+               boost::optional<int> disable_forensic_marking_audio,
                std::list<std::pair<std::string, std::string> > key_ids,
                std::list<std::string> keys
                );
index 7b41e0968b71a99b0e36d73ce5704f7e749feb48..64b4ecd915aab1d6926655b5f0d5fb9d84c9a221 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, -1, -1).as_xml ("build/test/encryption_test.kdm.xml");
+       kdm.encrypt (signer, signer->leaf(), vector<dcp::Certificate>(), dcp::MODIFIED_TRANSITIONAL_1, true, 0).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 76a7457c54e5e58d610ae6877e8cda4e5738b7dc..53aabd87b9c5a094495fa7bbda98f115575b6ea5 100644 (file)
@@ -1,5 +1,5 @@
 /*
-    Copyright (C) 2013-2014 Carl Hetherington <cth@carlh.net>
+    Copyright (C) 2013-2018 Carl Hetherington <cth@carlh.net>
 
     This file is part of libdcp.
 
@@ -31,6 +31,7 @@ using std::list;
 using std::string;
 using std::vector;
 using boost::shared_ptr;
+using boost::optional;
 
 /** Check reading and decryption of a KDM */
 BOOST_AUTO_TEST_CASE (kdm_test)
@@ -132,7 +133,7 @@ BOOST_AUTO_TEST_CASE (kdm_key_type_scope)
 }
 
 static cxml::ConstNodePtr
-kdm_forensic_test (cxml::Document& doc, int picture, int audio)
+kdm_forensic_test (cxml::Document& doc, bool picture, optional<int> audio)
 {
        dcp::DecryptedKDM decrypted (
                dcp::EncryptedKDM (
@@ -163,7 +164,7 @@ kdm_forensic_test (cxml::Document& doc, int picture, int audio)
 BOOST_AUTO_TEST_CASE (kdm_forensic_test1)
 {
        cxml::Document doc;
-       cxml::ConstNodePtr forensic = kdm_forensic_test(doc, -1, -1);
+       cxml::ConstNodePtr forensic = kdm_forensic_test(doc, true, 0);
        BOOST_REQUIRE (forensic);
        list<cxml::NodePtr> flags = forensic->node_children("ForensicMarkFlag");
        BOOST_REQUIRE_EQUAL (flags.size(), 2);
@@ -175,7 +176,7 @@ BOOST_AUTO_TEST_CASE (kdm_forensic_test1)
 BOOST_AUTO_TEST_CASE (kdm_forensic_test2)
 {
        cxml::Document doc;
-       cxml::ConstNodePtr forensic = kdm_forensic_test(doc, -1, 0);
+       cxml::ConstNodePtr forensic = kdm_forensic_test(doc, true, optional<int>());
        BOOST_REQUIRE (forensic);
        list<cxml::NodePtr> flags = forensic->node_children("ForensicMarkFlag");
        BOOST_REQUIRE_EQUAL (flags.size(), 1);
@@ -186,7 +187,7 @@ BOOST_AUTO_TEST_CASE (kdm_forensic_test2)
 BOOST_AUTO_TEST_CASE (kdm_forensic_test3)
 {
        cxml::Document doc;
-       cxml::ConstNodePtr forensic = kdm_forensic_test(doc, 0, -1);
+       cxml::ConstNodePtr forensic = kdm_forensic_test(doc, false, 0);
        BOOST_REQUIRE (forensic);
        list<cxml::NodePtr> flags = forensic->node_children("ForensicMarkFlag");
        BOOST_REQUIRE_EQUAL (flags.size(), 1);
@@ -197,7 +198,7 @@ BOOST_AUTO_TEST_CASE (kdm_forensic_test3)
 BOOST_AUTO_TEST_CASE (kdm_forensic_test4)
 {
        cxml::Document doc;
-       cxml::ConstNodePtr forensic = kdm_forensic_test(doc, -1, 3);
+       cxml::ConstNodePtr forensic = kdm_forensic_test(doc, true, 3);
        BOOST_REQUIRE (forensic);
        list<cxml::NodePtr> flags = forensic->node_children("ForensicMarkFlag");
        BOOST_REQUIRE_EQUAL (flags.size(), 2);
@@ -209,6 +210,6 @@ BOOST_AUTO_TEST_CASE (kdm_forensic_test4)
 BOOST_AUTO_TEST_CASE (kdm_forensic_test5)
 {
        cxml::Document doc;
-       cxml::ConstNodePtr forensic = kdm_forensic_test(doc, 0, 0);
+       cxml::ConstNodePtr forensic = kdm_forensic_test(doc, false, optional<int>());
        BOOST_CHECK (!forensic);
 }
index 1fd89dbb9f684bcce6bf04dc429bb6d8d5d7ca65..505477a323ca009348aa8e9b151dc99faccd3335 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, -1, -1).as_xml (kdm_file);
+       kdm_A.encrypt(signer, signer->leaf(), vector<dcp::Certificate>(), dcp::MODIFIED_TRANSITIONAL_1, true, 0).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 ());