summaryrefslogtreecommitdiff
path: root/xmlsecurity
diff options
context:
space:
mode:
authorSamuel Mehrbrodt <Samuel.Mehrbrodt@cib.de>2018-11-09 16:42:16 +0100
committerSamuel Mehrbrodt <Samuel.Mehrbrodt@cib.de>2018-11-12 14:52:09 +0100
commit9c5d3e5c59a9d0ffcb5fd99f5d4c98b0f6b5560e (patch)
tree21e1f2cd8b791414812a484f7df8691ac4e2e594 /xmlsecurity
parent3d885f20269dd4b7485fbe09c70014646e799366 (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.mk1
-rw-r--r--xmlsecurity/inc/resourcemanager.hxx32
-rw-r--r--xmlsecurity/source/component/documentdigitalsignatures.cxx1
-rw-r--r--xmlsecurity/source/dialogs/certificatechooser.cxx12
-rw-r--r--xmlsecurity/source/dialogs/certificateviewer.cxx29
-rw-r--r--xmlsecurity/source/dialogs/digitalsignaturesdialog.cxx9
-rw-r--r--xmlsecurity/source/dialogs/macrosecurity.cxx10
-rw-r--r--xmlsecurity/source/dialogs/resourcemanager.cxx358
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: */