Kaydet (Commit) 5524754e authored tarafından Miklos Vajna's avatar Miklos Vajna

xmlsecurity: initial XMLSignatureHelper::ReadAndVerifySignatureStorageStream()

Change-Id: Ida3f77a763c55a7ec8a52a3de4521d18a952e752
üst 64b49f20
...@@ -178,8 +178,10 @@ public: ...@@ -178,8 +178,10 @@ public:
static void CloseDocumentHandler( const ::com::sun::star::uno::Reference< com::sun::star::xml::sax::XDocumentHandler>& xDocumentHandler ); static void CloseDocumentHandler( const ::com::sun::star::uno::Reference< com::sun::star::xml::sax::XDocumentHandler>& xDocumentHandler );
static void ExportSignature( const com::sun::star::uno::Reference< com::sun::star::xml::sax::XDocumentHandler >& xDocumentHandler, const SignatureInformation& signatureInfo ); static void ExportSignature( const com::sun::star::uno::Reference< com::sun::star::xml::sax::XDocumentHandler >& xDocumentHandler, const SignatureInformation& signatureInfo );
/// Read and verify an OOXML signature. /// Read and verify OOXML signatures.
bool ReadAndVerifySignatureStorage(const css::uno::Reference<css::embed::XStorage>& xStorage); bool ReadAndVerifySignatureStorage(const css::uno::Reference<css::embed::XStorage>& xStorage);
/// Read and verify a single OOXML signature.
bool ReadAndVerifySignatureStorageStream(const css::uno::Reference<css::io::XInputStream>& xInputStream);
}; };
#endif // INCLUDED_XMLSECURITY_INC_XMLSECURITY_XMLSIGNATUREHELPER_HXX #endif // INCLUDED_XMLSECURITY_INC_XMLSECURITY_XMLSIGNATUREHELPER_HXX
......
...@@ -368,7 +368,9 @@ bool XMLSignatureHelper::ReadAndVerifySignatureStorage(const uno::Reference<embe ...@@ -368,7 +368,9 @@ bool XMLSignatureHelper::ReadAndVerifySignatureStorage(const uno::Reference<embe
std::vector<beans::StringPair>::iterator it = std::find_if(aRelation.begin(), aRelation.end(), [](const beans::StringPair& rPair) { return rPair.First == "Target"; }); std::vector<beans::StringPair>::iterator it = std::find_if(aRelation.begin(), aRelation.end(), [](const beans::StringPair& rPair) { return rPair.First == "Target"; });
if (it != aRelation.end()) if (it != aRelation.end())
{ {
// TODO now handle it->Second uno::Reference<io::XInputStream> xInputStream(xStorage->openStreamElement(it->Second, nOpenMode), uno::UNO_QUERY);
if (!ReadAndVerifySignatureStorageStream(xInputStream))
return false;
} }
} }
} }
...@@ -376,4 +378,45 @@ bool XMLSignatureHelper::ReadAndVerifySignatureStorage(const uno::Reference<embe ...@@ -376,4 +378,45 @@ bool XMLSignatureHelper::ReadAndVerifySignatureStorage(const uno::Reference<embe
return true; return true;
} }
bool XMLSignatureHelper::ReadAndVerifySignatureStorageStream(const css::uno::Reference<css::io::XInputStream>& xInputStream)
{
mbError = false;
// Create the input source.
xml::sax::InputSource aParserInput;
aParserInput.aInputStream = xInputStream;
// Create the sax parser.
uno::Reference<xml::sax::XParser> xParser = xml::sax::Parser::create(mxCtx);
// Create the signature reader.
uno::Reference<xml::sax::XDocumentHandler> xHandler = mpXSecController->createSignatureReader();
// Create the signature listener.
ImplXMLSignatureListener* pSignatureListener = new ImplXMLSignatureListener(
LINK(this, XMLSignatureHelper, SignatureCreationResultListener),
LINK(this, XMLSignatureHelper, SignatureVerifyResultListener),
LINK(this, XMLSignatureHelper, StartVerifySignatureElement));
uno::Reference<xml::sax::XDocumentHandler> xSignatureListener(pSignatureListener);
// Parser -> signature listener -> signature reader.
pSignatureListener->setNextHandler(xHandler);
xParser->setDocumentHandler(xSignatureListener);
// Parse the stream.
try
{
xParser->parseStream(aParserInput);
}
catch(const uno::Exception& rException)
{
SAL_WARN("xmlsecurity.helper", "XMLSignatureHelper::ReadAndVerifySignatureStorageStream: " << rException.Message);
}
pSignatureListener->setNextHandler(nullptr);
mpXSecController->releaseSignatureReader();
return !mbError;
}
/* vim:set shiftwidth=4 softtabstop=4 expandtab: */ /* vim:set shiftwidth=4 softtabstop=4 expandtab: */
Markdown is supported
0% or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment