summaryrefslogtreecommitdiff
path: root/test/decryption_test.cc
diff options
context:
space:
mode:
authorCarl Hetherington <cth@carlh.net>2013-07-07 00:39:15 +0100
committerCarl Hetherington <cth@carlh.net>2013-07-07 00:39:15 +0100
commit932b942a51bef4e2dd2de9f83aa5b68ad07f60f9 (patch)
tree40f81e0b4b2e04f46bab243e9c94ff24b8bcb2ef /test/decryption_test.cc
parent4313456938d34d93239194e914b82e7a5ae14c1c (diff)
Working decryption via KDM.
Diffstat (limited to 'test/decryption_test.cc')
-rw-r--r--test/decryption_test.cc61
1 files changed, 60 insertions, 1 deletions
diff --git a/test/decryption_test.cc b/test/decryption_test.cc
index 6870a286..507d2efd 100644
--- a/test/decryption_test.cc
+++ b/test/decryption_test.cc
@@ -17,7 +17,14 @@
*/
-BOOST_AUTO_TEST_CASE (is_encrypted_test)
+#include <tiffio.h>
+#include "kdm.h"
+#include "picture_frame.h"
+#include "argb_frame.h"
+
+using boost::dynamic_pointer_cast;
+
+BOOST_AUTO_TEST_CASE (decryption_test)
{
boost::filesystem::path plaintext_path = test_corpus;
plaintext_path /= "TONEPLATES-SMPTE-PLAINTEXT_TST_F_XX-XX_ITL-TD_51-XX_2K_WOE_20111001_WOE_OV";
@@ -30,4 +37,56 @@ BOOST_AUTO_TEST_CASE (is_encrypted_test)
libdcp::DCP encrypted (encrypted_path.string ());
encrypted.read ();
BOOST_CHECK_EQUAL (encrypted.encrypted (), true);
+
+ libdcp::KDM kdm (
+ "test/data/kdm_TONEPLATES-SMPTE-ENC_.smpte-430-2.ROOT.NOT_FOR_PRODUCTION_20130706_20230702_CAR_OV_t1_8971c838.xml",
+ "test/data/private.key"
+ );
+
+ encrypted.add_kdm (kdm);
+
+ shared_ptr<const libdcp::Reel> encrypted_reel = encrypted.cpls().front()->reels().front ();
+ shared_ptr<const libdcp::PictureAsset> encrypted_picture = encrypted_reel->main_picture ();
+ BOOST_CHECK (encrypted_picture);
+
+ shared_ptr<const libdcp::MonoPictureAsset> encrypted_mono_picture = dynamic_pointer_cast<const libdcp::MonoPictureAsset> (encrypted_picture);
+ shared_ptr<const libdcp::MonoPictureFrame> j2k_frame = encrypted_mono_picture->get_frame (0);
+
+ shared_ptr<const libdcp::ARGBFrame> argb_frame = j2k_frame->argb_frame ();
+
+
+
+ uint8_t* tiff_frame = new uint8_t[1998 * 3 * 1080];
+
+ uint8_t* t = tiff_frame;
+ uint8_t* r = argb_frame->data ();
+ for (int y = 0; y < 1080; ++y) {
+ for (int x = 0; x < 1998; ++x) {
+ /* Our data is first-byte blue, second-byte green, third-byte red, fourth-byte alpha,
+ so we need to twiddle here.
+ */
+
+ t[0] = r[2]; // red
+ t[1] = r[1]; // green
+ t[2] = r[0]; // blue
+ t += 3;
+ r += 4;
+ }
+ }
+
+ TIFF* output = TIFFOpen ("foo.tiff", "w");
+ BOOST_CHECK (output);
+
+ TIFFSetField (output, TIFFTAG_IMAGEWIDTH, 1998);
+ TIFFSetField (output, TIFFTAG_IMAGELENGTH, 1080);
+ TIFFSetField (output, TIFFTAG_COMPRESSION, COMPRESSION_NONE);
+ TIFFSetField (output, TIFFTAG_PLANARCONFIG, PLANARCONFIG_CONTIG);
+ TIFFSetField (output, TIFFTAG_PHOTOMETRIC, PHOTOMETRIC_RGB);
+ TIFFSetField (output, TIFFTAG_BITSPERSAMPLE, 8);
+ TIFFSetField (output, TIFFTAG_SAMPLESPERPIXEL, 3);
+
+ BOOST_CHECK (TIFFWriteEncodedStrip (output, 0, tiff_frame, 1998 * 1080 * 3));
+ TIFFClose (output);
+
+ delete[] tiff_frame;
}