From b2318479c8635af8e022ff4f844e85a1f6b9f4de Mon Sep 17 00:00:00 2001 From: Tor Lillqvist Date: Sat, 29 Oct 2016 09:50:28 +0300 Subject: Work in progress on supporting XAdES-compliant signatures for ODF xmlsecurity is such a mess. Too many different classes that actually have more or less identical life-time, with names that smell of delusions of grandeur. "Manager", "security framework controller" etc for stuff that actually exist only during the execution of a simple dialog. And then a "helper" class that actually in on a higher level than a "framework controller". But oh well. Change-Id: I86e461b1bc91a0d8f5b7fb9f13a5be201729df1e --- xmlsecurity/source/helper/xsecparser.cxx | 25 +++++++++++++++++++++---- 1 file changed, 21 insertions(+), 4 deletions(-) (limited to 'xmlsecurity/source/helper/xsecparser.cxx') diff --git a/xmlsecurity/source/helper/xsecparser.cxx b/xmlsecurity/source/helper/xsecparser.cxx index 9dd1dc79fc84..c16949838c8f 100644 --- a/xmlsecurity/source/helper/xsecparser.cxx +++ b/xmlsecurity/source/helper/xsecparser.cxx @@ -25,6 +25,7 @@ #include namespace cssu = com::sun::star::uno; +namespace cssxc = com::sun::star::xml::crypto; namespace cssxs = com::sun::star::xml::sax; XSecParser::XSecParser(XSecController* pXSecController, @@ -39,6 +40,7 @@ XSecParser::XSecParser(XSecController* pXSecController, , m_pXSecController(pXSecController) , m_xNextHandler(xNextHandler) , m_bReferenceUnresolved(false) + , m_nReferenceDigestID(cssxc::DigestID::SHA1) { } @@ -113,7 +115,7 @@ void SAL_CALL XSecParser::startElement( /* * remove the first character '#' from the attribute value */ - m_pXSecController->addReference( ouUri.copy(1) ); + m_pXSecController->addReference( ouUri.copy(1), m_nReferenceDigestID ); } else { @@ -124,6 +126,21 @@ void SAL_CALL XSecParser::startElement( m_bReferenceUnresolved = true; } } + else if (aName == "DigestMethod") + { + OUString ouAlgorithm = xAttribs->getValueByName("Algorithm"); + + SAL_WARN_IF( ouAlgorithm.isEmpty(), "xmlsecurity.helper", "no Algorithm in Reference" ); + if (!ouAlgorithm.isEmpty()) + { + SAL_WARN_IF( ouAlgorithm != ALGO_XMLDSIGSHA1 && ouAlgorithm != ALGO_XMLDSIGSHA256, + "xmlsecurity.helper", "Algorithm neither SHA1 or SHA256"); + if (ouAlgorithm == ALGO_XMLDSIGSHA1) + m_nReferenceDigestID = cssxc::DigestID::SHA1; + else if (ouAlgorithm == ALGO_XMLDSIGSHA256) + m_nReferenceDigestID = cssxc::DigestID::SHA256; + } + } else if (aName == "Transform") { if ( m_bReferenceUnresolved ) @@ -135,7 +152,7 @@ void SAL_CALL XSecParser::startElement( * a xml stream */ { - m_pXSecController->addStreamReference( m_currentReferenceURI, false); + m_pXSecController->addStreamReference( m_currentReferenceURI, false, m_nReferenceDigestID ); m_bReferenceUnresolved = false; } } @@ -219,11 +236,11 @@ void SAL_CALL XSecParser::endElement( const OUString& aName ) * it must be a octet stream */ { - m_pXSecController->addStreamReference( m_currentReferenceURI, true); + m_pXSecController->addStreamReference( m_currentReferenceURI, true, m_nReferenceDigestID ); m_bReferenceUnresolved = false; } - m_pXSecController->setDigestValue( m_ouDigestValue ); + m_pXSecController->setDigestValue( m_nReferenceDigestID, m_ouDigestValue ); } else if ( aName == "SignedInfo" ) { -- cgit