*/
-/* 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;
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
}