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:
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 );
/// Read and verify an OOXML signature.
/// Read and verify OOXML signatures.
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
......
......@@ -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"; });
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
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: */
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