Bump libcxml again.
[libdcp.git] / test / encryption_test.cc
index eb32afaa8362b43a2ef91040e00dfecd0428c573..f08d48271e2a7c959a583c50b6039b45d3693726 100644 (file)
 
 */
 
-/* Load a certificate chain from build/test/data/*.pem and then build
+#include <boost/test/unit_test.hpp>
+#include "kdm.h"
+#include "KM_util.h"
+#include "metadata.h"
+#include "certificates.h"
+#include "dcp.h"
+#include "signer.h"
+#include "cpl.h"
+#include "mono_picture_asset.h"
+#include "sound_asset.h"
+#include "reel.h"
+#include "test.h"
+#include "signer_chain.h"
+
+using boost::shared_ptr;
+
+/* Load a certificate chain from build/test/data/ *.pem and then build
    an encrypted DCP and a KDM using it.
 */
 BOOST_AUTO_TEST_CASE (encryption)
 {
+       boost::filesystem::remove_all ("build/test/signer");
+       boost::filesystem::create_directory ("build/test/signer");
+       libdcp::make_signer_chain ("build/test/signer", "openssl");
+       
        Kumu::libdcp_test = true;
 
        libdcp::MXFMetadata mxf_metadata;
@@ -34,62 +54,86 @@ BOOST_AUTO_TEST_CASE (encryption)
        xml_metadata.creator = "OpenDCP 0.0.25";
        xml_metadata.issue_date = "2012-07-17T04:45:18+00:00";
        
-       boost::filesystem::remove_all ("build/test/bar");
-       boost::filesystem::create_directories ("build/test/bar");
+       boost::filesystem::remove_all ("build/test/DCP/bar");
+       boost::filesystem::create_directories ("build/test/DCP/bar");
        libdcp::DCP d ("build/test/DCP/bar");
 
+       /* Use test/ref/crypt so this test is repeatable */
        libdcp::CertificateChain chain;
-       chain.add (shared_ptr<libdcp::Certificate> (new libdcp::Certificate ("build/test/data/ca.self-signed.pem")));
-       chain.add (shared_ptr<libdcp::Certificate> (new libdcp::Certificate ("build/test/data/intermediate.signed.pem")));
-       chain.add (shared_ptr<libdcp::Certificate> (new libdcp::Certificate ("build/test/data/leaf.signed.pem")));
+       chain.add (shared_ptr<libdcp::Certificate> (new libdcp::Certificate (boost::filesystem::path ("test/ref/crypt/ca.self-signed.pem"))));
+       chain.add (shared_ptr<libdcp::Certificate> (new libdcp::Certificate (boost::filesystem::path ("test/ref/crypt/intermediate.signed.pem"))));
+       chain.add (shared_ptr<libdcp::Certificate> (new libdcp::Certificate (boost::filesystem::path ("test/ref/crypt/leaf.signed.pem"))));
 
-       shared_ptr<libdcp::Encryption> crypt (
-               new libdcp::Encryption (
+       shared_ptr<libdcp::Signer> signer (
+               new libdcp::Signer (
                        chain,
-                       "test/data/signer.key"
+                       "test/ref/crypt/leaf.key"
                        )
                );
 
-       shared_ptr<libdcp::CPL> cpl (new libdcp::CPL ("build/test/bar", "A Test DCP", libdcp::FEATURE, 24, 24));
+       shared_ptr<libdcp::CPL> cpl (new libdcp::CPL ("build/test/DCP/bar", "A Test DCP", libdcp::FEATURE, 24, 24));
+
+       libdcp::Key key;
        
-       shared_ptr<libdcp::MonoPictureAsset> mp (new libdcp::MonoPictureAsset (
-                                                        j2c,
-                                                        "build/test/bar",
-                                                        "video.mxf",
-                                                        &d.Progress,
-                                                        24,
-                                                        24,
-                                                        true,
-                                                        libdcp::Size (32, 32),
-                                                        mxf_metadata
-                                                        ));
-
-       shared_ptr<libdcp::SoundAsset> ms (new libdcp::SoundAsset (
-                                                  wav,
-                                                  "build/test/bar",
-                                                  "audio.mxf",
-                                                  &(d.Progress),
-                                                  24,
-                                                  24,
-                                                  2,
-                                                  true,
-                                                  mxf_metadata
-                                                  ));
+       shared_ptr<libdcp::MonoPictureAsset> mp (new libdcp::MonoPictureAsset ("build/test/DCP/bar", "video.mxf"));
+       mp->set_progress (&d.Progress);
+       mp->set_edit_rate (24);
+       mp->set_intrinsic_duration (24);
+       mp->set_duration (24);
+       mp->set_size (libdcp::Size (32, 32));
+       mp->set_metadata (mxf_metadata);
+       mp->set_key (key);
+       mp->create (j2c);
+
+       shared_ptr<libdcp::SoundAsset> ms (new libdcp::SoundAsset ("build/test/DCP/bar", "audio.mxf"));
+       ms->set_progress (&d.Progress);
+       ms->set_edit_rate (24);
+       ms->set_intrinsic_duration (24);
+       mp->set_duration (24);
+       ms->set_channels (2);
+       ms->set_metadata (mxf_metadata);
+       ms->set_key (key);
+       ms->create (wav);
        
        cpl->add_reel (shared_ptr<libdcp::Reel> (new libdcp::Reel (mp, ms, shared_ptr<libdcp::SubtitleAsset> ())));
        d.add_cpl (cpl);
 
-       d.write_xml (xml_metadata, crypt);
+       d.write_xml (false, xml_metadata, signer);
 
-       shared_ptr<xmlpp::Document> kdm = cpl->make_kdm (
-               crypt->certificates,
-               crypt->signer_key,
-               crypt->certificates.leaf(),
+       libdcp::KDM kdm (
+               cpl,
+               signer,
+               signer->certificates().leaf(),
                boost::posix_time::time_from_string ("2013-01-01 00:00:00"),
                boost::posix_time::time_from_string ("2013-01-08 00:00:00"),
-               mxf_metadata,
-               xml_metadata
+               "libdcp",
+               "2012-07-17T04:45:18+00:00"
                );
 
-       kdm->write_to_file_formatted ("build/test/bar.kdm.xml", "UTF-8");
+       kdm.as_xml ("build/test/bar.kdm.xml");
+       
+       int r = system (
+               "xmllint --path schema --nonet --noout --schema schema/SMPTE-430-1-2006-Amd-1-2009-KDM.xsd build/test/bar.kdm.xml "
+               "> build/test/xmllint.log 2>&1 < /dev/null"
+               );
+
+#ifdef DCPOMATIC_POSIX 
+       BOOST_CHECK_EQUAL (WEXITSTATUS (r), 0);
+#else
+       BOOST_CHECK_EQUAL (r, 0);
+#endif 
+               
+       r = system ("xmlsec1 verify "
+               "--pubkey-cert-pem test/ref/crypt/leaf.signed.pem "
+               "--trusted-pem test/ref/crypt/intermediate.signed.pem "
+               "--trusted-pem test/ref/crypt/ca.self-signed.pem "
+               "--id-attr:Id http://www.smpte-ra.org/schemas/430-3/2006/ETM:AuthenticatedPublic "
+               "--id-attr:Id http://www.smpte-ra.org/schemas/430-3/2006/ETM:AuthenticatedPrivate "
+                   "build/test/bar.kdm.xml > build/test/xmlsec1.log 2>&1 < /dev/null");
+       
+#ifdef DCPOMATIC_POSIX 
+       BOOST_CHECK_EQUAL (WEXITSTATUS (r), 0);
+#else
+       BOOST_CHECK_EQUAL (r, 0);
+#endif 
 }