summaryrefslogtreecommitdiffstats
path: root/xmlsecurity/qa
diff options
context:
space:
mode:
authorMiklos Vajna <vmiklos@collabora.co.uk>2016-10-25 11:32:47 +0200
committerMiklos Vajna <vmiklos@collabora.co.uk>2016-10-25 11:32:47 +0200
commitb45fe99f16762c5d79ce67f6a04ee58fc7c14456 (patch)
tree1a825fbadef5c068afc3e1a13fdc2bc8f22fb98a /xmlsecurity/qa
parenttdf#84678 DOCX import: fix handling of textbox margins (diff)
downloadcore-b45fe99f16762c5d79ce67f6a04ee58fc7c14456.tar.gz
core-b45fe99f16762c5d79ce67f6a04ee58fc7c14456.zip
xmlsecurity: add PDF signature removal testcase
This one needs no access to private test keys, so no workaround is needed for older NSS. Change-Id: Ia233901658832cf55157511b4c5b5c2ccb243425
Diffstat (limited to 'xmlsecurity/qa')
-rw-r--r--xmlsecurity/qa/unit/pdfsigning/data/good.pdfbin0 -> 58796 bytes
-rw-r--r--xmlsecurity/qa/unit/pdfsigning/pdfsigning.cxx41
2 files changed, 41 insertions, 0 deletions
diff --git a/xmlsecurity/qa/unit/pdfsigning/data/good.pdf b/xmlsecurity/qa/unit/pdfsigning/data/good.pdf
new file mode 100644
index 000000000000..f28566442d8e
--- /dev/null
+++ b/xmlsecurity/qa/unit/pdfsigning/data/good.pdf
Binary files differ
diff --git a/xmlsecurity/qa/unit/pdfsigning/pdfsigning.cxx b/xmlsecurity/qa/unit/pdfsigning/pdfsigning.cxx
index db19b50c1385..6a3800fc8084 100644
--- a/xmlsecurity/qa/unit/pdfsigning/pdfsigning.cxx
+++ b/xmlsecurity/qa/unit/pdfsigning/pdfsigning.cxx
@@ -35,9 +35,12 @@ public:
/// Test adding a new signature to a previously unsigned file.
void testPDFAdd();
+ /// Test remove a signature from a previously signed file.
+ void testPDFRemove();
CPPUNIT_TEST_SUITE(PDFSigningTest);
CPPUNIT_TEST(testPDFAdd);
+ CPPUNIT_TEST(testPDFRemove);
CPPUNIT_TEST_SUITE_END();
};
@@ -110,6 +113,44 @@ void PDFSigningTest::testPDFAdd()
#endif
}
+void PDFSigningTest::testPDFRemove()
+{
+#ifndef _WIN32
+ // Make sure that good.pdf has 1 valid signature.
+ uno::Reference<xml::crypto::XSEInitializer> xSEInitializer = xml::crypto::SEInitializer::create(mxComponentContext);
+ uno::Reference<xml::crypto::XXMLSecurityContext> xSecurityContext = xSEInitializer->createSecurityContext(OUString());
+ xmlsecurity::pdfio::PDFDocument aDocument;
+ {
+ OUString aSourceDir = m_directories.getURLFromSrc(DATA_DIRECTORY);
+ OUString aInURL = aSourceDir + "good.pdf";
+ SvFileStream aStream(aInURL, StreamMode::READ);
+ CPPUNIT_ASSERT(aDocument.Read(aStream));
+ std::vector<xmlsecurity::pdfio::PDFObjectElement*> aSignatures = aDocument.GetSignatureWidgets();
+ CPPUNIT_ASSERT_EQUAL(static_cast<size_t>(1), aSignatures.size());
+ SignatureInformation aInfo(0);
+ CPPUNIT_ASSERT(xmlsecurity::pdfio::PDFDocument::ValidateSignature(aStream, aSignatures[0], aInfo));
+ }
+
+ // Remove the signature and write out the result as remove.pdf.
+ OUString aTargetDir = m_directories.getURLFromWorkdir("/CppunitTest/xmlsecurity_signing.test.user/");
+ OUString aOutURL = aTargetDir + "remove.pdf";
+ {
+ CPPUNIT_ASSERT(aDocument.RemoveSignature(0));
+ SvFileStream aOutStream(aOutURL, StreamMode::WRITE | StreamMode::TRUNC);
+ CPPUNIT_ASSERT(aDocument.Write(aOutStream));
+ }
+
+ // Read back the pdf and make sure that it no longer has signatures.
+ {
+ SvFileStream aStream(aOutURL, StreamMode::READ);
+ xmlsecurity::pdfio::PDFDocument aVerifyDocument;
+ CPPUNIT_ASSERT(aVerifyDocument.Read(aStream));
+ std::vector<xmlsecurity::pdfio::PDFObjectElement*> aSignatures = aVerifyDocument.GetSignatureWidgets();
+ // This failed when PDFDocument::RemoveSignature() silently returned success, without doing anything.
+ CPPUNIT_ASSERT(aSignatures.empty());
+ }
+#endif
+}
CPPUNIT_TEST_SUITE_REGISTRATION(PDFSigningTest);
CPPUNIT_PLUGIN_IMPLEMENT();