diff options
author | Samuel Mehrbrodt <Samuel.Mehrbrodt@cib.de> | 2018-11-09 16:42:16 +0100 |
---|---|---|
committer | Samuel Mehrbrodt <Samuel.Mehrbrodt@cib.de> | 2018-11-12 14:52:09 +0100 |
commit | 9c5d3e5c59a9d0ffcb5fd99f5d4c98b0f6b5560e (patch) | |
tree | 21e1f2cd8b791414812a484f7df8691ac4e2e594 /xmlsecurity | |
parent | 3d885f20269dd4b7485fbe09c70014646e799366 (diff) |
tdf#118581 Correctly display issuer name in signature line
Move the xmlsec helper methods to comphelper so that we can use them in cui
Change-Id: If9b10cfff5f5abd6b16e48f043af7959edbb1142
Reviewed-on: https://gerrit.libreoffice.org/63198
Tested-by: Jenkins
Reviewed-by: Samuel Mehrbrodt <Samuel.Mehrbrodt@cib.de>
Diffstat (limited to 'xmlsecurity')
-rw-r--r-- | xmlsecurity/Library_xmlsecurity.mk | 1 | ||||
-rw-r--r-- | xmlsecurity/inc/resourcemanager.hxx | 32 | ||||
-rw-r--r-- | xmlsecurity/source/component/documentdigitalsignatures.cxx | 1 | ||||
-rw-r--r-- | xmlsecurity/source/dialogs/certificatechooser.cxx | 12 | ||||
-rw-r--r-- | xmlsecurity/source/dialogs/certificateviewer.cxx | 29 | ||||
-rw-r--r-- | xmlsecurity/source/dialogs/digitalsignaturesdialog.cxx | 9 | ||||
-rw-r--r-- | xmlsecurity/source/dialogs/macrosecurity.cxx | 10 | ||||
-rw-r--r-- | xmlsecurity/source/dialogs/resourcemanager.cxx | 358 |
8 files changed, 37 insertions, 415 deletions
diff --git a/xmlsecurity/Library_xmlsecurity.mk b/xmlsecurity/Library_xmlsecurity.mk index a6f4e09d0c45..9a65dd2152a9 100644 --- a/xmlsecurity/Library_xmlsecurity.mk +++ b/xmlsecurity/Library_xmlsecurity.mk @@ -51,7 +51,6 @@ $(eval $(call gb_Library_add_exception_objects,xmlsecurity,\ xmlsecurity/source/dialogs/certificateviewer \ xmlsecurity/source/dialogs/digitalsignaturesdialog \ xmlsecurity/source/dialogs/macrosecurity \ - xmlsecurity/source/dialogs/resourcemanager \ xmlsecurity/source/framework/buffernode \ xmlsecurity/source/framework/elementcollector \ xmlsecurity/source/framework/elementmark \ diff --git a/xmlsecurity/inc/resourcemanager.hxx b/xmlsecurity/inc/resourcemanager.hxx index d621c4bc7328..3640db40a63f 100644 --- a/xmlsecurity/inc/resourcemanager.hxx +++ b/xmlsecurity/inc/resourcemanager.hxx @@ -21,38 +21,8 @@ #define INCLUDED_XMLSECURITY_SOURCE_DIALOGS_RESOURCEMANAGER_HXX #include <unotools/resmgr.hxx> -#include <tools/datetime.hxx> -#include <com/sun/star/security/CertificateKind.hpp> -#include <com/sun/star/util/DateTime.hpp> -#include <com/sun/star/uno/Sequence.hxx> -#include <vector> - -class FixedImage; -class Control; -class LocaleDataWrapper; - -namespace XmlSec -{ - const LocaleDataWrapper& GetLocaleData(); - DateTime GetDateTime( const css::util::DateTime& _rDT ); - OUString GetDateTimeString( const css::util::DateTime& _rDT ); - OUString GetDateString( const css::util::DateTime& _rDT ); - OUString GetCertificateKind( const css::security::CertificateKind& rKind ); - - std::vector< std::pair< OUString, OUString> > - parseDN(const OUString& rRawString); - std::pair< OUString, OUString> GetDNForCertDetailsView( - const OUString & rRawString); - OUString GetContentPart( const OUString& _rRawString ); - - OUString GetHexString( const css::uno::Sequence< sal_Int8 >& _rSeq, const char* _pSep, sal_uInt16 _nLineBreak = 0xFFFF ); -} - -inline OUString XsResId(const char* pId) -{ - return Translate::get(pId, Translate::Create("xsc")); -} +inline OUString XsResId(const char* pId) { return Translate::get(pId, Translate::Create("xsc")); } #endif diff --git a/xmlsecurity/source/component/documentdigitalsignatures.cxx b/xmlsecurity/source/component/documentdigitalsignatures.cxx index 19f46e45e23d..c67d893b0624 100644 --- a/xmlsecurity/source/component/documentdigitalsignatures.cxx +++ b/xmlsecurity/source/component/documentdigitalsignatures.cxx @@ -46,6 +46,7 @@ #include <comphelper/documentconstants.hxx> #include <comphelper/propertyvalue.hxx> #include <comphelper/sequence.hxx> +#include <comphelper/xmlsechelper.hxx> #include <cppuhelper/supportsservice.hxx> #include <sal/log.hxx> #include <com/sun/star/lang/IllegalArgumentException.hpp> diff --git a/xmlsecurity/source/dialogs/certificatechooser.cxx b/xmlsecurity/source/dialogs/certificatechooser.cxx index 4c891abae5f3..fc230658e491 100644 --- a/xmlsecurity/source/dialogs/certificatechooser.cxx +++ b/xmlsecurity/source/dialogs/certificatechooser.cxx @@ -23,14 +23,16 @@ #include <biginteger.hxx> #include <com/sun/star/xml/crypto/XSecurityEnvironment.hpp> #include <comphelper/sequence.hxx> +#include <comphelper/xmlsechelper.hxx> #include <com/sun/star/security/NoPasswordException.hpp> #include <com/sun/star/security/CertificateCharacters.hpp> -#include <resourcemanager.hxx> #include <vcl/treelistentry.hxx> +#include <unotools/datetime.hxx> #include <unotools/useroptions.hxx> +using namespace comphelper; using namespace css; CertificateChooser::CertificateChooser(vcl::Window* _pParent, @@ -229,11 +231,11 @@ void CertificateChooser::ImplInitialize() userData->xSecurityEnvironment = secEnvironment; mvUserData.push_back(userData); - OUString sIssuer = XmlSec::GetContentPart( xCerts[ nC ]->getIssuerName() ); - SvTreeListEntry* pEntry = m_pCertLB->InsertEntry( XmlSec::GetContentPart( xCerts[ nC ]->getSubjectName() ) + OUString sIssuer = xmlsec::GetContentPart( xCerts[ nC ]->getIssuerName() ); + SvTreeListEntry* pEntry = m_pCertLB->InsertEntry( xmlsec::GetContentPart( xCerts[ nC ]->getSubjectName() ) + "\t" + sIssuer - + "\t" + XmlSec::GetCertificateKind( xCerts[ nC ]->getCertificateKind() ) - + "\t" + XmlSec::GetDateString( xCerts[ nC ]->getNotValidAfter() ) + + "\t" + xmlsec::GetCertificateKind( xCerts[ nC ]->getCertificateKind() ) + + "\t" + utl::GetDateString( xCerts[ nC ]->getNotValidAfter() ) + "\t" + UsageInClearText( xCerts[ nC ]->getCertificateUsage() ) ); pEntry->SetUserData( userData.get() ); diff --git a/xmlsecurity/source/dialogs/certificateviewer.cxx b/xmlsecurity/source/dialogs/certificateviewer.cxx index 3f262bf46580..ceefb55c03bc 100644 --- a/xmlsecurity/source/dialogs/certificateviewer.cxx +++ b/xmlsecurity/source/dialogs/certificateviewer.cxx @@ -31,11 +31,14 @@ #include <strings.hrc> #include <resourcemanager.hxx> +#include <comphelper/xmlsechelper.hxx> #include <svtools/controldims.hxx> +#include <tools/datetime.hxx> #include <bitmaps.hlst> #include <vcl/settings.hxx> +using namespace comphelper; using namespace ::com::sun::star; using namespace ::com::sun::star::uno; @@ -128,12 +131,12 @@ CertificateViewerGeneralTP::CertificateViewerGeneralTP( vcl::Window* _pParent, C // insert data css::uno::Reference< css::security::XCertificate > xCert = mpDlg->mxCert; - OUString sSubjectName(XmlSec::GetContentPart(xCert->getSubjectName())); + OUString sSubjectName(xmlsec::GetContentPart(xCert->getSubjectName())); if (!sSubjectName.isEmpty()) m_pIssuedToFT->SetText(sSubjectName); else m_pIssuedToLabelFT->Hide(); - OUString sIssuerName(XmlSec::GetContentPart(xCert->getIssuerName())); + OUString sIssuerName(xmlsec::GetContentPart(xCert->getIssuerName())); if (!sIssuerName.isEmpty()) m_pIssuedByFT->SetText(sIssuerName); else @@ -263,12 +266,12 @@ CertificateViewerDetailsTP::CertificateViewerDetailsTP( vcl::Window* _pParent, C aLBEntry = "V" + OUString::number( xCert->getVersion() + 1 ); InsertElement( XsResId( STR_VERSION ), aLBEntry, aLBEntry ); Sequence< sal_Int8 > aSeq = xCert->getSerialNumber(); - aLBEntry = XmlSec::GetHexString( aSeq, pHexSep ); - aDetails = XmlSec::GetHexString( aSeq, pHexSep, nLineBreak ); + aLBEntry = xmlsec::GetHexString( aSeq, pHexSep ); + aDetails = xmlsec::GetHexString( aSeq, pHexSep, nLineBreak ); InsertElement( XsResId( STR_SERIALNUM ), aLBEntry, aDetails, true ); std::pair< OUString, OUString> pairIssuer = - XmlSec::GetDNForCertDetailsView(xCert->getIssuerName()); + xmlsec::GetDNForCertDetailsView(xCert->getIssuerName()); aLBEntry = pairIssuer.first; aDetails = pairIssuer.second; InsertElement( XsResId( STR_ISSUER ), aLBEntry, aDetails ); @@ -286,7 +289,7 @@ CertificateViewerDetailsTP::CertificateViewerDetailsTP( vcl::Window* _pParent, C InsertElement( XsResId( STR_VALIDTO ), aLBEntry, aLBEntry ); std::pair< OUString, OUString > pairSubject = - XmlSec::GetDNForCertDetailsView(xCert->getSubjectName()); + xmlsec::GetDNForCertDetailsView(xCert->getSubjectName()); aLBEntry = pairSubject.first; aDetails = pairSubject.second; InsertElement( XsResId( STR_SUBJECT ), aLBEntry, aDetails ); @@ -294,8 +297,8 @@ CertificateViewerDetailsTP::CertificateViewerDetailsTP( vcl::Window* _pParent, C aLBEntry = aDetails = xCert->getSubjectPublicKeyAlgorithm(); InsertElement( XsResId( STR_SUBJECT_PUBKEY_ALGO ), aLBEntry, aDetails ); aSeq = xCert->getSubjectPublicKeyValue(); - aLBEntry = XmlSec::GetHexString( aSeq, pHexSep ); - aDetails = XmlSec::GetHexString( aSeq, pHexSep, nLineBreak ); + aLBEntry = xmlsec::GetHexString( aSeq, pHexSep ); + aDetails = xmlsec::GetHexString( aSeq, pHexSep, nLineBreak ); InsertElement( XsResId( STR_SUBJECT_PUBKEY_VAL ), aLBEntry, aDetails, true ); aLBEntry = aDetails = xCert->getSignatureAlgorithm(); @@ -309,13 +312,13 @@ CertificateViewerDetailsTP::CertificateViewerDetailsTP( vcl::Window* _pParent, C } aSeq = xCert->getSHA1Thumbprint(); - aLBEntry = XmlSec::GetHexString( aSeq, pHexSep ); - aDetails = XmlSec::GetHexString( aSeq, pHexSep, nLineBreak ); + aLBEntry = xmlsec::GetHexString( aSeq, pHexSep ); + aDetails = xmlsec::GetHexString( aSeq, pHexSep, nLineBreak ); InsertElement( XsResId( STR_THUMBPRINT_SHA1 ), aLBEntry, aDetails, true ); aSeq = xCert->getMD5Thumbprint(); - aLBEntry = XmlSec::GetHexString( aSeq, pHexSep ); - aDetails = XmlSec::GetHexString( aSeq, pHexSep, nLineBreak ); + aLBEntry = xmlsec::GetHexString( aSeq, pHexSep ); + aDetails = xmlsec::GetHexString( aSeq, pHexSep, nLineBreak ); InsertElement( XsResId( STR_THUMBPRINT_MD5 ), aLBEntry, aDetails, true ); m_pElementsLB->SetSelectHdl( LINK( this, CertificateViewerDetailsTP, ElementSelectHdl ) ); @@ -426,7 +429,7 @@ void CertificateViewerCertPathTP::ActivatePage() for (i = nCnt-1; i >= 0; i--) { const Reference< security::XCertificate > rCert = pCertPath[ i ]; - OUString sName = XmlSec::GetContentPart( rCert->getSubjectName() ); + OUString sName = xmlsec::GetContentPart( rCert->getSubjectName() ); //Verify the certificate sal_Int32 certStatus = mpDlg->mxSecurityEnvironment->verifyCertificate(rCert, Sequence<Reference<css::security::XCertificate> >()); diff --git a/xmlsecurity/source/dialogs/digitalsignaturesdialog.cxx b/xmlsecurity/source/dialogs/digitalsignaturesdialog.cxx index 926b74371faa..d7ea836e2e71 100644 --- a/xmlsecurity/source/dialogs/digitalsignaturesdialog.cxx +++ b/xmlsecurity/source/dialogs/digitalsignaturesdialog.cxx @@ -48,14 +48,17 @@ #include <tools/date.hxx> #include <tools/time.hxx> +#include <unotools/datetime.hxx> #include <vcl/treelistentry.hxx> #include <strings.hrc> #include <resourcemanager.hxx> +#include <comphelper/xmlsechelper.hxx> #include <vcl/weld.hxx> #include <unotools/configitem.hxx> +using namespace comphelper; using namespace css::security; using namespace css::uno; using namespace css; @@ -587,8 +590,8 @@ void DigitalSignaturesDialog::ImplFillSignaturesBox() bCertValid = false; } - aSubject = XmlSec::GetContentPart( xCert->getSubjectName() ); - aIssuer = XmlSec::GetContentPart( xCert->getIssuerName() ); + aSubject = xmlsec::GetContentPart( xCert->getSubjectName() ); + aIssuer = xmlsec::GetContentPart( xCert->getIssuerName() ); } else if (!rInfo.ouGpgCertificate.isEmpty()) { @@ -596,7 +599,7 @@ void DigitalSignaturesDialog::ImplFillSignaturesBox() aIssuer = rInfo.ouGpgOwner; } - aDateTimeStr = XmlSec::GetDateTimeString( rInfo.stDateTime ); + aDateTimeStr = utl::GetDateTimeString( rInfo.stDateTime ); aDescription = rInfo.ouDescription; // Decide type string. diff --git a/xmlsecurity/source/dialogs/macrosecurity.cxx b/xmlsecurity/source/dialogs/macrosecurity.cxx index 1188ad4a015e..e38456f4782b 100644 --- a/xmlsecurity/source/dialogs/macrosecurity.cxx +++ b/xmlsecurity/source/dialogs/macrosecurity.cxx @@ -33,16 +33,18 @@ #include <comphelper/sequence.hxx> #include <sfx2/filedlghelper.hxx> #include <comphelper/processfactory.hxx> +#include <comphelper/xmlsechelper.hxx> #include <com/sun/star/uno/Exception.hpp> #include <com/sun/star/lang/XMultiServiceFactory.hpp> #include <com/sun/star/ui/dialogs/FolderPicker.hpp> #include <com/sun/star/ui/dialogs/ExecutableDialogResults.hpp> #include <tools/urlobj.hxx> +#include <unotools/datetime.hxx> #include <vcl/treelistentry.hxx> #include <strings.hrc> -#include <resourcemanager.hxx> +using namespace comphelper; using namespace ::com::sun::star; @@ -328,9 +330,9 @@ void MacroSecurityTrustedSourcesTP::FillCertLB() // create from RawData xCert = mpDlg->mxSecurityEnvironment->createCertificateFromAscii( rEntry[ 2 ] ); - SvTreeListEntry* pLBEntry = m_pTrustCertLB->InsertEntry( XmlSec::GetContentPart( xCert->getSubjectName() ) ); - m_pTrustCertLB->SetEntryText( XmlSec::GetContentPart( xCert->getIssuerName() ), pLBEntry, 1 ); - m_pTrustCertLB->SetEntryText( XmlSec::GetDateTimeString( xCert->getNotValidAfter() ), pLBEntry, 2 ); + SvTreeListEntry* pLBEntry = m_pTrustCertLB->InsertEntry( xmlsec::GetContentPart( xCert->getSubjectName() ) ); + m_pTrustCertLB->SetEntryText( xmlsec::GetContentPart( xCert->getIssuerName() ), pLBEntry, 1 ); + m_pTrustCertLB->SetEntryText( utl::GetDateTimeString( xCert->getNotValidAfter() ), pLBEntry, 2 ); pLBEntry->SetUserData( reinterpret_cast<void*>(nEntry) ); // misuse user data as index } } diff --git a/xmlsecurity/source/dialogs/resourcemanager.cxx b/xmlsecurity/source/dialogs/resourcemanager.cxx deleted file mode 100644 index 16ca346bcbc3..000000000000 --- a/xmlsecurity/source/dialogs/resourcemanager.cxx +++ /dev/null @@ -1,358 +0,0 @@ -/* -*- 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/. - * - * This file incorporates work covered by the following license notice: - * - * Licensed to the Apache Software Foundation (ASF) under one or more - * contributor license agreements. See the NOTICE file distributed - * with this work for additional information regarding copyright - * ownership. The ASF licenses this file to you under the Apache - * License, Version 2.0 (the "License"); you may not use this file - * except in compliance with the License. You may obtain a copy of - * the License at http://www.apache.org/licenses/LICENSE-2.0 . - */ - - -#include <resourcemanager.hxx> - -#include <vcl/svapp.hxx> -#include <vcl/fixed.hxx> -#include <svl/solar.hrc> -#include <unotools/syslocale.hxx> -#include <rtl/ustring.h> -#include <rtl/ustrbuf.h> -#include <vector> - -using namespace std; - -namespace XmlSec -{ - const LocaleDataWrapper& GetLocaleData() - { - static SvtSysLocale ourSysLocale; - - return ourSysLocale.GetLocaleData(); - } - - DateTime GetDateTime( const css::util::DateTime& _rDT ) - { - return DateTime(_rDT); - } - - OUString GetDateTimeString( const css::util::DateTime& _rDT ) - { - // String with date and time information (#i20172#) - DateTime aDT( GetDateTime( _rDT ) ); - const LocaleDataWrapper& rLoDa = GetLocaleData(); - - return rLoDa.getDate( aDT ) + " " + rLoDa.getTime( aDT ); - } - - OUString GetDateString( const css::util::DateTime& _rDT ) - { - return GetLocaleData().getDate( GetDateTime( _rDT ) ); - } - - OUString GetCertificateKind( const css::security::CertificateKind &rKind ) - { - switch (rKind) - { - case css::security::CertificateKind_X509: - return OUString("X.509"); - case css::security::CertificateKind_OPENPGP: - return OUString("OpenPGP"); - default: - return OUString(); - } - } - - /* - Creates two strings based on the distinguished name which are displayed in the - certificate details view. The first string contains only the values of the attribute - and values pairs, which are separated by commas. All escape characters ('"') are - removed. - The second string is for the details view at the bottom. It shows the attribute/value - pairs on different lines. All escape characters ('"') are removed. - */ - pair< OUString, OUString> GetDNForCertDetailsView( const OUString & rRawString) - { - vector< pair< OUString, OUString > > vecAttrValueOfDN = parseDN(rRawString); - OUStringBuffer s1, s2; - for (auto i = vecAttrValueOfDN.cbegin(); i < vecAttrValueOfDN.cend(); ++i) - { - if (i != vecAttrValueOfDN.cbegin()) - { - s1.append(','); - s2.append('\n'); - } - s1.append(i->second); - s2.append(i->first).append(" = ").append(i->second); - } - return make_pair(s1.makeStringAndClear(), s2.makeStringAndClear()); - } - -/* - Whenever the attribute value contains special characters, such as '"' or ',' (without '') - then the value will be enclosed in double quotes by the respective Windows or NSS function - which we use to retrieve, for example, the subject name. If double quotes appear in the value then - they are escaped with a double quote. This function removes the escape characters. -*/ -#ifdef _WIN32 -vector< pair< OUString, OUString> > parseDN(const OUString& rRawString) -{ - vector< pair<OUString, OUString> > retVal; - bool bInEscape = false; - bool bInValue = false; - bool bInType = true; - sal_Int32 nTypeNameStart = 0; - OUString sType; - OUStringBuffer sbufValue; - sal_Int32 length = rRawString.getLength(); - - for (sal_Int32 i = 0; i < length; i++) - { - sal_Unicode c = rRawString[i]; - - if (c == '=') - { - if (! bInValue) - { - sType = rRawString.copy(nTypeNameStart, i - nTypeNameStart); - sType = sType.trim(); - bInType = false; - } - else - { - sbufValue.append(c); - } - } - else if (c == '"') - { - if (!bInEscape) - { - //If this is the quote is the first of the couple which enclose the - //whole value, because the value contains special characters - //then we just drop it. That is, this character must be followed by - //a character which is not '"'. - if ( i + 1 < length && rRawString[i+1] == '"') - bInEscape = true; - else - bInValue = !bInValue; //value is enclosed in " " - } - else - { - //This quote is escaped by a preceding quote and therefore is - //part of the value - sbufValue.append(c); - bInEscape = false; - } - } - else if (c == ',' || c == '+') - { - //The comma separate the attribute value pairs. - //If the comma is not part of a value (the value would then be enclosed in '"'), - //then we have reached the end of the value - if (!bInValue) - { - OSL_ASSERT(!sType.isEmpty()); - retVal.push_back(make_pair(sType, sbufValue.makeStringAndClear())); - sType.clear(); - //The next char is the start of the new type - nTypeNameStart = i + 1; - bInType = true; - } - else - { - //The whole string is enclosed because it contains special characters. - //The enclosing '"' are not part of certificate but will be added by - //the function (Windows or NSS) which retrieves DN - sbufValue.append(c); - } - } - else - { - if (!bInType) - sbufValue.append(c); - } - } - if (sbufValue.getLength()) - { - OSL_ASSERT(!sType.isEmpty()); - retVal.push_back(make_pair(sType, sbufValue.makeStringAndClear())); - } - return retVal; - } -#else -vector< pair< OUString, OUString> > parseDN(const OUString& rRawString) - { - vector< pair<OUString, OUString> > retVal; - //bInEscape == true means that the preceding character is an escape character - bool bInEscape = false; - bool bInValue = false; - bool bInType = true; - sal_Int32 nTypeNameStart = 0; - OUString sType; - OUStringBuffer sbufValue; - sal_Int32 length = rRawString.getLength(); - - for (sal_Int32 i = 0; i < length; i++) - { - sal_Unicode c = rRawString[i]; - - if (c == '=') - { - if (! bInValue) - { - sType = rRawString.copy(nTypeNameStart, i - nTypeNameStart); - sType = sType.trim(); - bInType = false; - } - else - { - sbufValue.append(c); - } - } - else if (c == '\\') - { - if (!bInEscape) - { - bInEscape = true; - } - else - { // bInEscape is true - sbufValue.append(c); - bInEscape = false; - } - } - else if (c == '"') - { - //an unescaped '"' is either at the beginning or end of the value - if (!bInEscape) - { - if ( !bInValue) - bInValue = true; - else if (bInValue) - bInValue = false; - } - else - { - //This quote is escaped by a preceding quote and therefore is - //part of the value - sbufValue.append(c); - bInEscape = false; - } - } - else if (c == ',' || c == '+') - { - //The comma separate the attribute value pairs. - //If the comma is not part of a value (the value would then be enclosed in '"'), - //then we have reached the end of the value - if (!bInValue) - { - OSL_ASSERT(!sType.isEmpty()); - retVal.emplace_back(sType, sbufValue.makeStringAndClear()); - sType.clear(); - //The next char is the start of the new type - nTypeNameStart = i + 1; - bInType = true; - } - else - { - //The whole string is enclosed because it contains special characters. - //The enclosing '"' are not part of certificate but will be added by - //the function (Windows or NSS) which retrieves DN - sbufValue.append(c); - } - } - else - { - if (!bInType) - { - sbufValue.append(c); - bInEscape = false; - } - } - } - if (!sbufValue.isEmpty()) - { - OSL_ASSERT(!sType.isEmpty()); - retVal.emplace_back(sType, sbufValue.makeStringAndClear()); - } - return retVal; - } - -#endif - - OUString GetContentPart( const OUString& _rRawString ) - { - char const * aIDs[] = { "CN", "OU", "O", "E", nullptr }; - bool shouldBeParsed = false; - int i = 0; - while ( aIDs[i] ) - { - if (_rRawString.startsWith(OUString::createFromAscii(aIDs[i++]))) - { - shouldBeParsed = true; - break; - } - } - - if (!shouldBeParsed) - return _rRawString; - - OUString retVal; - i = 0; - vector< pair< OUString, OUString > > vecAttrValueOfDN = parseDN(_rRawString); - while ( aIDs[i] ) - { - OUString sPartId = OUString::createFromAscii( aIDs[i++] ); - auto idn = std::find_if(vecAttrValueOfDN.cbegin(), vecAttrValueOfDN.cend(), - [&sPartId](const pair< OUString, OUString >& dn) { return dn.first == sPartId; }); - if (idn != vecAttrValueOfDN.cend()) - retVal = idn->second; - if (!retVal.isEmpty()) - break; - } - return retVal; - } - - OUString GetHexString( const css::uno::Sequence< sal_Int8 >& _rSeq, const char* _pSep, sal_uInt16 _nLineBreak ) - { - const sal_Int8* pSerNumSeq = _rSeq.getConstArray(); - int nCnt = _rSeq.getLength(); - OUStringBuffer aStr; - const char pHexDigs[ 17 ] = "0123456789ABCDEF"; - char pBuffer[ 3 ] = " "; - sal_uInt8 nNum; - sal_uInt16 nBreakStart = _nLineBreak? _nLineBreak : 1; - sal_uInt16 nBreak = nBreakStart; - for( int i = 0 ; i < nCnt ; ++i ) - { - nNum = sal_uInt8( pSerNumSeq[ i ] ); - - // exchange the buffer[0] and buffer[1], which make it consistent with Mozilla and Windows - pBuffer[ 1 ] = pHexDigs[ nNum & 0x0F ]; - nNum >>= 4; - pBuffer[ 0 ] = pHexDigs[ nNum ]; - aStr.appendAscii( pBuffer ); - - --nBreak; - if( nBreak ) - aStr.appendAscii( _pSep ); - else - { - nBreak = nBreakStart; - aStr.append( '\n' ); - } - } - - return aStr.makeStringAndClear(); - } -} - -/* vim:set shiftwidth=4 softtabstop=4 expandtab: */ |