summaryrefslogtreecommitdiff
path: root/xmlsecurity
diff options
context:
space:
mode:
authorAshod Nakashian <ashod.nakashian@collabora.co.uk>2017-10-03 19:41:28 -0400
committerAshod Nakashian <ashnakash@gmail.com>2017-10-05 14:47:29 +0200
commitb6d6591fafb8ad2e59a27ff1ac6b234d879b4cf7 (patch)
treeac06305ef34d9a2d661a34cf22e78e4760e0b522 /xmlsecurity
parent09d70a097136719df3f8f08f5cbaa8dae4369279 (diff)
TSCP: include certificate usage in paragraph signatures
Change-Id: I6f4b891a016c67051efd9033329065d7e3c8a06b Reviewed-on: https://gerrit.libreoffice.org/43022 Tested-by: Jenkins <ci@libreoffice.org> Reviewed-by: Ashod Nakashian <ashnakash@gmail.com>
Diffstat (limited to 'xmlsecurity')
-rw-r--r--xmlsecurity/inc/certificatechooser.hxx3
-rw-r--r--xmlsecurity/source/component/documentdigitalsignatures.cxx34
-rw-r--r--xmlsecurity/source/component/documentdigitalsignatures.hxx4
-rw-r--r--xmlsecurity/source/dialogs/certificatechooser.cxx6
4 files changed, 41 insertions, 6 deletions
diff --git a/xmlsecurity/inc/certificatechooser.hxx b/xmlsecurity/inc/certificatechooser.hxx
index 7237e16e75a3..3834dfb111a1 100644
--- a/xmlsecurity/inc/certificatechooser.hxx
+++ b/xmlsecurity/inc/certificatechooser.hxx
@@ -97,6 +97,9 @@ public:
/// Gets the description string provided when selecting the certificate.
OUString GetDescription();
+ /// Returns the usage string of the selected certificate, if any.
+ OUString GetUsageText();
+
OUString UsageInClearText(int bits);
};
diff --git a/xmlsecurity/source/component/documentdigitalsignatures.cxx b/xmlsecurity/source/component/documentdigitalsignatures.cxx
index fb4a7fb1b717..1aa7d4b4f702 100644
--- a/xmlsecurity/source/component/documentdigitalsignatures.cxx
+++ b/xmlsecurity/source/component/documentdigitalsignatures.cxx
@@ -43,6 +43,8 @@
#include <unotools/securityoptions.hxx>
#include <com/sun/star/security/CertificateValidity.hpp>
#include <comphelper/documentconstants.hxx>
+#include <comphelper/propertyvalue.hxx>
+#include <comphelper/sequence.hxx>
#include <cppuhelper/supportsservice.hxx>
#include <com/sun/star/lang/IllegalArgumentException.hpp>
@@ -445,7 +447,7 @@ sal_Bool DocumentDigitalSignatures::isAuthorTrusted(
return bFound;
}
-Reference< css::security::XCertificate > DocumentDigitalSignatures::chooseCertificateImpl(OUString& rDescription, UserAction eAction)
+Reference< css::security::XCertificate > DocumentDigitalSignatures::chooseCertificateImpl(std::map<OUString, OUString>& rProperties, const UserAction eAction)
{
std::vector< Reference< css::xml::crypto::XXMLSecurityContext > > xSecContexts;
@@ -461,7 +463,8 @@ Reference< css::security::XCertificate > DocumentDigitalSignatures::chooseCertif
return Reference< css::security::XCertificate >(nullptr);
Reference< css::security::XCertificate > xCert = aChooser->GetSelectedCertificate();
- rDescription = aChooser->GetDescription();
+ rProperties["Description"] = aChooser->GetDescription();
+ rProperties["Usage"] = aChooser->GetUsageText();
if ( !xCert.is() )
return Reference< css::security::XCertificate >(nullptr);
@@ -471,17 +474,38 @@ Reference< css::security::XCertificate > DocumentDigitalSignatures::chooseCertif
Reference< css::security::XCertificate > DocumentDigitalSignatures::chooseCertificate(OUString& rDescription)
{
- return chooseCertificateImpl( rDescription, UserAction::Sign );
+ return chooseSigningCertificate( rDescription );
}
Reference< css::security::XCertificate > DocumentDigitalSignatures::chooseSigningCertificate(OUString& rDescription)
{
- return chooseCertificateImpl( rDescription, UserAction::Sign );
+ std::map<OUString, OUString> aProperties;
+ Reference< css::security::XCertificate > xCert = chooseCertificateImpl( aProperties, UserAction::Sign );
+ rDescription = aProperties["Description"];
+ return xCert;
}
Reference< css::security::XCertificate > DocumentDigitalSignatures::chooseEncryptionCertificate(OUString& rDescription)
{
- return chooseCertificateImpl( rDescription, UserAction::Encrypt );
+ std::map<OUString, OUString> aProperties;
+ Reference< css::security::XCertificate > xCert = chooseCertificateImpl( aProperties, UserAction::Encrypt );
+ rDescription = aProperties["Description"];
+ return xCert;
+}
+
+css::uno::Reference< css::security::XCertificate > DocumentDigitalSignatures::chooseCertificateWithProps(Sequence<::com::sun::star::beans::PropertyValue>& rProperties)
+{
+ std::map<OUString, OUString> aProperties;
+ auto xCert = chooseCertificateImpl( aProperties, UserAction::Sign );
+
+ std::vector<css::beans::PropertyValue> vec;
+ for (const auto& pair : aProperties)
+ {
+ vec.emplace_back(comphelper::makePropertyValue(pair.first, pair.second));
+ }
+
+ rProperties = comphelper::containerToSequence(vec);
+ return xCert;
}
sal_Bool DocumentDigitalSignatures::isLocationTrusted( const OUString& Location )
diff --git a/xmlsecurity/source/component/documentdigitalsignatures.hxx b/xmlsecurity/source/component/documentdigitalsignatures.hxx
index 36e8a6446587..2dbc55685929 100644
--- a/xmlsecurity/source/component/documentdigitalsignatures.hxx
+++ b/xmlsecurity/source/component/documentdigitalsignatures.hxx
@@ -27,6 +27,7 @@
#include <com/sun/star/security/XDocumentDigitalSignatures.hpp>
#include <com/sun/star/io/XStream.hpp>
#include <com/sun/star/io/XInputStream.hpp>
+#include <com/sun/star/uno/Sequence.hxx>
#include <certificatechooser.hxx>
#include <documentsignaturehelper.hxx>
@@ -62,7 +63,7 @@ private:
/// @throws css::uno::RuntimeException
css::uno::Sequence< css::security::DocumentSignatureInformation > ImplVerifySignatures( const css::uno::Reference< css::embed::XStorage >& rxStorage, const ::com::sun::star::uno::Reference< css::io::XInputStream >& xSignStream, DocumentSignatureMode eMode );
- css::uno::Reference< css::security::XCertificate > chooseCertificateImpl(OUString& rDescription, UserAction eAction);
+ css::uno::Reference< css::security::XCertificate > chooseCertificateImpl(std::map<OUString, OUString>& rProperties, const UserAction eAction);
public:
explicit DocumentDigitalSignatures( const css::uno::Reference< css::uno::XComponentContext>& rxCtx );
@@ -106,6 +107,7 @@ public:
css::uno::Reference< css::security::XCertificate > SAL_CALL chooseCertificate(OUString& rDescription) override;
css::uno::Reference< css::security::XCertificate > SAL_CALL chooseSigningCertificate(OUString& rDescription) override;
css::uno::Reference< css::security::XCertificate > SAL_CALL chooseEncryptionCertificate(OUString& rDescription) override;
+ css::uno::Reference< css::security::XCertificate > SAL_CALL chooseCertificateWithProps(css::uno::Sequence<::com::sun::star::beans::PropertyValue>& Properties) override;
};
/// @throws css::uno::Exception
diff --git a/xmlsecurity/source/dialogs/certificatechooser.cxx b/xmlsecurity/source/dialogs/certificatechooser.cxx
index bf74d1b04292..4358b454776b 100644
--- a/xmlsecurity/source/dialogs/certificatechooser.cxx
+++ b/xmlsecurity/source/dialogs/certificatechooser.cxx
@@ -255,6 +255,12 @@ OUString CertificateChooser::GetDescription()
return m_pDescriptionED->GetText();
}
+OUString CertificateChooser::GetUsageText()
+{
+ uno::Reference<css::security::XCertificate> xCert = GetSelectedCertificate();
+ return xCert.is() ? UsageInClearText(xCert->getCertificateUsage()) : OUString();
+}
+
IMPL_LINK_NOARG(CertificateChooser, CertificateHighlightHdl, SvTreeListBox*, void)
{
bool bEnable = GetSelectedCertificate().is();