diff options
author | Tor Lillqvist <tml@collabora.com> | 2016-10-29 09:50:28 +0300 |
---|---|---|
committer | Tor Lillqvist <tml@collabora.com> | 2016-11-08 14:31:46 +0200 |
commit | b2318479c8635af8e022ff4f844e85a1f6b9f4de (patch) | |
tree | 35e4e7a67f8d79895e5ab321ff60c57005dba308 /xmlsecurity/source/helper/xsecparser.cxx | |
parent | typo fix: ressource -> resource (diff) | |
download | core-b2318479c8635af8e022ff4f844e85a1f6b9f4de.tar.gz core-b2318479c8635af8e022ff4f844e85a1f6b9f4de.zip |
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
Diffstat (limited to 'xmlsecurity/source/helper/xsecparser.cxx')
-rw-r--r-- | xmlsecurity/source/helper/xsecparser.cxx | 25 |
1 files changed, 21 insertions, 4 deletions
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 <string.h> 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" ) { |