diff options
author | Ashod Nakashian <ashod.nakashian@collabora.co.uk> | 2017-10-03 19:41:28 -0400 |
---|---|---|
committer | Ashod Nakashian <ashnakash@gmail.com> | 2017-10-05 14:47:29 +0200 |
commit | b6d6591fafb8ad2e59a27ff1ac6b234d879b4cf7 (patch) | |
tree | ac06305ef34d9a2d661a34cf22e78e4760e0b522 /xmlsecurity | |
parent | 09d70a097136719df3f8f08f5cbaa8dae4369279 (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')
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(); |