xmlsecurity/Library_xmlsecurity.mk | 1 xmlsecurity/source/helper/ooxmlsecparser.cxx | 86 +++++++++++++++++++++++ xmlsecurity/source/helper/ooxmlsecparser.hxx | 60 ++++++++++++++++ xmlsecurity/source/helper/xmlsignaturehelper.cxx | 3 xmlsecurity/source/helper/xsecctl.hxx | 3 xmlsecurity/source/helper/xsecverify.cxx | 9 +- 6 files changed, 158 insertions(+), 4 deletions(-)
New commits: commit a6d1b4b17a74bd2af03cd090b80c98bc9a275aa3 Author: Miklos Vajna <vmik...@collabora.co.uk> Date: Wed Jan 13 15:24:04 2016 +0100 xmlsecurity: import OOXML <Reference> Only non-stream ones as a start. Change-Id: Ifacf391e78463004c17106905019ec2ed3430efe diff --git a/xmlsecurity/source/helper/ooxmlsecparser.cxx b/xmlsecurity/source/helper/ooxmlsecparser.cxx index a070e8f..6f71a39 100644 --- a/xmlsecurity/source/helper/ooxmlsecparser.cxx +++ b/xmlsecurity/source/helper/ooxmlsecparser.cxx @@ -42,12 +42,25 @@ throw (xml::sax::SAXException, uno::RuntimeException, std::exception) if (!aId.isEmpty()) m_pXSecController->setId(aId); } + else if (rName == "Reference") + { + OUString aURI = xAttribs->getValueByName("URI"); + if (aURI.startsWith("#")) + m_pXSecController->addReference(aURI.copy(1)); + // TODO else + } } void SAL_CALL OOXMLSecParser::endElement(const OUString& rName) throw (xml::sax::SAXException, uno::RuntimeException, std::exception) { if (rName == "SignedInfo") m_pXSecController->setReferenceCount(); + else if (rName == "Reference") + { + // TODO import digest value + OUString aDigestValue; + m_pXSecController->setDigestValue(aDigestValue); + } } void SAL_CALL OOXMLSecParser::characters(const OUString& /*rChars*/) throw (xml::sax::SAXException, uno::RuntimeException, std::exception) commit 143f310f1c699de9ea3f146c2cc7c1cf21493f79 Author: Miklos Vajna <vmik...@collabora.co.uk> Date: Wed Jan 13 11:25:12 2016 +0100 xmlsecurity: import OOXML <SignedInfo> Change-Id: I5591b33b41fdfe2e84a6462d0d2db5304cb909cb diff --git a/xmlsecurity/source/helper/ooxmlsecparser.cxx b/xmlsecurity/source/helper/ooxmlsecparser.cxx index d08073e..a070e8f 100644 --- a/xmlsecurity/source/helper/ooxmlsecparser.cxx +++ b/xmlsecurity/source/helper/ooxmlsecparser.cxx @@ -44,8 +44,10 @@ throw (xml::sax::SAXException, uno::RuntimeException, std::exception) } } -void SAL_CALL OOXMLSecParser::endElement(const OUString& /*rName*/) throw (xml::sax::SAXException, uno::RuntimeException, std::exception) +void SAL_CALL OOXMLSecParser::endElement(const OUString& rName) throw (xml::sax::SAXException, uno::RuntimeException, std::exception) { + if (rName == "SignedInfo") + m_pXSecController->setReferenceCount(); } void SAL_CALL OOXMLSecParser::characters(const OUString& /*rChars*/) throw (xml::sax::SAXException, uno::RuntimeException, std::exception) commit aac43335e2acdba57e3bb5567decb157f2d0bda4 Author: Miklos Vajna <vmik...@collabora.co.uk> Date: Wed Jan 13 11:22:07 2016 +0100 xmlsecurity: import OOXML <Signature> Change-Id: I5925440347c04b2fff243261ba677c718d8fc312 diff --git a/xmlsecurity/source/helper/ooxmlsecparser.cxx b/xmlsecurity/source/helper/ooxmlsecparser.cxx index 671a680..d08073e 100644 --- a/xmlsecurity/source/helper/ooxmlsecparser.cxx +++ b/xmlsecurity/source/helper/ooxmlsecparser.cxx @@ -29,9 +29,19 @@ void SAL_CALL OOXMLSecParser::endDocument() throw (xml::sax::SAXException, uno:: { } -void SAL_CALL OOXMLSecParser::startElement(const OUString& /*rName*/, const uno::Reference<xml::sax::XAttributeList>& /*xAttribs*/) +void SAL_CALL OOXMLSecParser::startElement(const OUString& rName, const uno::Reference<xml::sax::XAttributeList>& xAttribs) throw (xml::sax::SAXException, uno::RuntimeException, std::exception) { + OUString aId = xAttribs->getValueByName("Id"); + if (!aId.isEmpty()) + m_pXSecController->collectToVerify(aId); + + if (rName == "Signature") + { + //m_pXSecController->addSignature(); + if (!aId.isEmpty()) + m_pXSecController->setId(aId); + } } void SAL_CALL OOXMLSecParser::endElement(const OUString& /*rName*/) throw (xml::sax::SAXException, uno::RuntimeException, std::exception) diff --git a/xmlsecurity/source/helper/xsecctl.hxx b/xmlsecurity/source/helper/xsecctl.hxx index 8e9d1f9..b48b8cd 100644 --- a/xmlsecurity/source/helper/xsecctl.hxx +++ b/xmlsecurity/source/helper/xsecctl.hxx @@ -166,6 +166,7 @@ class XSecController : public cppu::WeakImplHelper ******************************************************************************/ { friend class XSecParser; + friend class OOXMLSecParser; private: com::sun::star::uno::Reference< com::sun::star::uno::XComponentContext> mxCtx; commit 829e236d39707437475b7d7fd599a385ed3cf5e4 Author: Miklos Vajna <vmik...@collabora.co.uk> Date: Tue Jan 12 18:54:29 2016 +0100 xmlsecurity: initial OOXMLSecParser Change-Id: Idba2eb384756e72c8b60cb2e810110d6b95b66ad diff --git a/xmlsecurity/Library_xmlsecurity.mk b/xmlsecurity/Library_xmlsecurity.mk index 7ba5b46..ecbade5 100644 --- a/xmlsecurity/Library_xmlsecurity.mk +++ b/xmlsecurity/Library_xmlsecurity.mk @@ -54,6 +54,7 @@ $(eval $(call gb_Library_add_exception_objects,xmlsecurity,\ xmlsecurity/source/dialogs/macrosecurity \ xmlsecurity/source/dialogs/resourcemanager \ xmlsecurity/source/helper/documentsignaturehelper \ + xmlsecurity/source/helper/ooxmlsecparser \ xmlsecurity/source/helper/xmlsignaturehelper2 \ xmlsecurity/source/helper/xmlsignaturehelper \ xmlsecurity/source/helper/xsecctl \ diff --git a/xmlsecurity/source/helper/ooxmlsecparser.cxx b/xmlsecurity/source/helper/ooxmlsecparser.cxx new file mode 100644 index 0000000..671a680 --- /dev/null +++ b/xmlsecurity/source/helper/ooxmlsecparser.cxx @@ -0,0 +1,61 @@ +/* -*- Mode: C++; tab-width: 4; indent-tabs-mode: nil; c-basic-offset: 4 -*- */ +/* + * This file is part of the LibreOffice project. + * + * This Source Code Form is subject to the terms of the Mozilla Public + * License, v. 2.0. If a copy of the MPL was not distributed with this + * file, You can obtain one at http://mozilla.org/MPL/2.0/. + */ + + +#include "ooxmlsecparser.hxx" + +using namespace com::sun::star; + +OOXMLSecParser::OOXMLSecParser(XSecController* pXSecController) + : m_pXSecController(pXSecController) +{ +} + +OOXMLSecParser::~OOXMLSecParser() +{ +} + +void SAL_CALL OOXMLSecParser::startDocument() throw (xml::sax::SAXException, uno::RuntimeException, std::exception) +{ +} + +void SAL_CALL OOXMLSecParser::endDocument() throw (xml::sax::SAXException, uno::RuntimeException, std::exception) +{ +} + +void SAL_CALL OOXMLSecParser::startElement(const OUString& /*rName*/, const uno::Reference<xml::sax::XAttributeList>& /*xAttribs*/) +throw (xml::sax::SAXException, uno::RuntimeException, std::exception) +{ +} + +void SAL_CALL OOXMLSecParser::endElement(const OUString& /*rName*/) throw (xml::sax::SAXException, uno::RuntimeException, std::exception) +{ +} + +void SAL_CALL OOXMLSecParser::characters(const OUString& /*rChars*/) throw (xml::sax::SAXException, uno::RuntimeException, std::exception) +{ +} + +void SAL_CALL OOXMLSecParser::ignorableWhitespace(const OUString& /*rWhitespace*/) throw (xml::sax::SAXException, uno::RuntimeException, std::exception) +{ +} + +void SAL_CALL OOXMLSecParser::processingInstruction(const OUString& /*rTarget*/, const OUString& /*rData*/) throw (xml::sax::SAXException, uno::RuntimeException, std::exception) +{ +} + +void SAL_CALL OOXMLSecParser::setDocumentLocator(const uno::Reference<xml::sax::XLocator>& /*xLocator*/) throw (xml::sax::SAXException, uno::RuntimeException, std::exception) +{ +} + +void SAL_CALL OOXMLSecParser::initialize(const uno::Sequence<uno::Any>& /*rArguments*/) throw (uno::Exception, uno::RuntimeException, std::exception) +{ +} + +/* vim:set shiftwidth=4 softtabstop=4 expandtab: */ diff --git a/xmlsecurity/source/helper/ooxmlsecparser.hxx b/xmlsecurity/source/helper/ooxmlsecparser.hxx new file mode 100644 index 0000000..84ce2fc --- /dev/null +++ b/xmlsecurity/source/helper/ooxmlsecparser.hxx @@ -0,0 +1,60 @@ +/* -*- Mode: C++; tab-width: 4; indent-tabs-mode: nil; c-basic-offset: 4 -*- */ +/* + * This file is part of the LibreOffice project. + * + * This Source Code Form is subject to the terms of the Mozilla Public + * License, v. 2.0. If a copy of the MPL was not distributed with this + * file, You can obtain one at http://mozilla.org/MPL/2.0/. + */ + +#ifndef INCLUDED_XMLSECURITY_SOURCE_HELPER_OOXMLSECPARSER_HXX +#define INCLUDED_XMLSECURITY_SOURCE_HELPER_OOXMLSECPARSER_HXX + +#include <com/sun/star/xml/sax/XParser.hpp> +#include <com/sun/star/lang/XInitialization.hpp> +#include <com/sun/star/xml/sax/XDocumentHandler.hpp> +#include <com/sun/star/xml/sax/XAttributeList.hpp> + +#include <cppuhelper/implbase.hxx> + +#include "xsecctl.hxx" + +/// Parses an OOXML digital signature. +class OOXMLSecParser: public cppu::WeakImplHelper + < + css::xml::sax::XDocumentHandler, + css::lang::XInitialization + > +{ + XSecController* m_pXSecController; + +public: + OOXMLSecParser(XSecController* pXSecController); + virtual ~OOXMLSecParser(); + + // XDocumentHandler + virtual void SAL_CALL startDocument() throw (css::xml::sax::SAXException, css::uno::RuntimeException, std::exception) override; + + virtual void SAL_CALL endDocument() throw (css::xml::sax::SAXException, css::uno::RuntimeException, std::exception) override; + + virtual void SAL_CALL startElement(const OUString& aName, const css::uno::Reference<css::xml::sax::XAttributeList>& xAttribs) + throw (css::xml::sax::SAXException, css::uno::RuntimeException, std::exception) override; + + virtual void SAL_CALL endElement(const OUString& aName) throw (css::xml::sax::SAXException, css::uno::RuntimeException, std::exception) override; + + virtual void SAL_CALL characters(const OUString& aChars) throw (css::xml::sax::SAXException, css::uno::RuntimeException, std::exception) override; + + virtual void SAL_CALL ignorableWhitespace(const OUString& aWhitespaces) throw (css::xml::sax::SAXException, css::uno::RuntimeException, std::exception) override; + + virtual void SAL_CALL processingInstruction(const OUString& aTarget, const OUString& aData) throw (css::xml::sax::SAXException, css::uno::RuntimeException, std::exception) override; + + virtual void SAL_CALL setDocumentLocator(const css::uno::Reference<css::xml::sax::XLocator>& xLocator) + throw (css::xml::sax::SAXException, css::uno::RuntimeException, std::exception) override; + + // XInitialization + virtual void SAL_CALL initialize(const css::uno::Sequence<css::uno::Any>& rArguments) throw (css::uno::Exception, css::uno::RuntimeException, std::exception) override; +}; + +#endif + +/* vim:set shiftwidth=4 softtabstop=4 expandtab: */ diff --git a/xmlsecurity/source/helper/xmlsignaturehelper.cxx b/xmlsecurity/source/helper/xmlsignaturehelper.cxx index 95f26e3..e2f60f5 100644 --- a/xmlsecurity/source/helper/xmlsignaturehelper.cxx +++ b/xmlsecurity/source/helper/xmlsignaturehelper.cxx @@ -41,6 +41,7 @@ #include <com/sun/star/xml/crypto/SEInitializer.hpp> #include <com/sun/star/embed/ElementModes.hpp> #include <com/sun/star/embed/XStorage.hpp> +#include <com/sun/star/embed/StorageFormats.hpp> #include <tools/date.hxx> #include <tools/time.hxx> @@ -390,7 +391,7 @@ bool XMLSignatureHelper::ReadAndVerifySignatureStorageStream(const css::uno::Ref uno::Reference<xml::sax::XParser> xParser = xml::sax::Parser::create(mxCtx); // Create the signature reader. - uno::Reference<xml::sax::XDocumentHandler> xHandler = mpXSecController->createSignatureReader(); + uno::Reference<xml::sax::XDocumentHandler> xHandler = mpXSecController->createSignatureReader(embed::StorageFormats::OFOPXML); // Create the signature listener. ImplXMLSignatureListener* pSignatureListener = new ImplXMLSignatureListener( diff --git a/xmlsecurity/source/helper/xsecctl.hxx b/xmlsecurity/source/helper/xsecctl.hxx index 734ecdb..8e9d1f9 100644 --- a/xmlsecurity/source/helper/xsecctl.hxx +++ b/xmlsecurity/source/helper/xsecctl.hxx @@ -463,7 +463,7 @@ public: */ void collectToVerify( const OUString& referenceId ); void addSignature( sal_Int32 nSignatureId ); - com::sun::star::uno::Reference< com::sun::star::xml::sax::XDocumentHandler > createSignatureReader(); + com::sun::star::uno::Reference< com::sun::star::xml::sax::XDocumentHandler > createSignatureReader(sal_Int32 nType = 0); void releaseSignatureReader(); public: diff --git a/xmlsecurity/source/helper/xsecverify.cxx b/xmlsecurity/source/helper/xsecverify.cxx index ba89bad..856fdf7 100644 --- a/xmlsecurity/source/helper/xsecverify.cxx +++ b/xmlsecurity/source/helper/xsecverify.cxx @@ -20,6 +20,7 @@ #include "xsecctl.hxx" #include "xsecparser.hxx" +#include "ooxmlsecparser.hxx" #include <tools/debug.hxx> #include <com/sun/star/xml/crypto/sax/XKeyCollector.hpp> @@ -28,6 +29,7 @@ #include <com/sun/star/xml/crypto/sax/XReferenceCollector.hpp> #include <com/sun/star/xml/crypto/sax/XSignatureVerifyResultBroadcaster.hpp> #include <com/sun/star/xml/sax/SAXParseException.hpp> +#include <com/sun/star/embed/StorageFormats.hpp> #include <sal/log.hxx> #include <unotools/datetime.hxx> @@ -378,9 +380,12 @@ void XSecController::addSignature( sal_Int32 nSignatureId ) m_bVerifyCurrentSignature = true; } -cssu::Reference< cssxs::XDocumentHandler > XSecController::createSignatureReader() +cssu::Reference< cssxs::XDocumentHandler > XSecController::createSignatureReader(sal_Int32 nType) { - m_xSecParser = new XSecParser( this, nullptr ); + if (nType == embed::StorageFormats::OFOPXML) + m_xSecParser = new OOXMLSecParser(this); + else + m_xSecParser = new XSecParser( this, nullptr ); cssu::Reference< cssl::XInitialization > xInitialization(m_xSecParser, uno::UNO_QUERY); setSAXChainConnector(xInitialization, nullptr, nullptr); _______________________________________________ Libreoffice-commits mailing list libreoffice-comm...@lists.freedesktop.org http://lists.freedesktop.org/mailman/listinfo/libreoffice-commits