diff options
author | Samuel Mehrbrodt <Samuel.Mehrbrodt@cib.de> | 2018-09-14 10:30:36 +0200 |
---|---|---|
committer | Samuel Mehrbrodt <Samuel.Mehrbrodt@cib.de> | 2018-09-17 10:05:37 +0200 |
commit | 9b4c6892630a98c1218aca72827f718184a4b5f0 (patch) | |
tree | 5ab551bb7d931de723de93e89afbfab799fd6d7b /xmlsecurity | |
parent | 2419fa71d8b2223a50f596d5db7721f6213d4f87 (diff) |
tdf#118569 Signature Line: When signing ooxml, only show X.509 certificates
Also fixes a bug where signing was aborted after saving as docx.
Change-Id: Ic42b7de2400be0bc55da03b017a545ceaedef9f9
Reviewed-on: https://gerrit.libreoffice.org/60480
Tested-by: Jenkins
Reviewed-by: Samuel Mehrbrodt <Samuel.Mehrbrodt@cib.de>
Diffstat (limited to 'xmlsecurity')
-rw-r--r-- | xmlsecurity/source/component/documentdigitalsignatures.cxx | 28 |
1 files changed, 25 insertions, 3 deletions
diff --git a/xmlsecurity/source/component/documentdigitalsignatures.cxx b/xmlsecurity/source/component/documentdigitalsignatures.cxx index e97733fe2208..23689c1e4fa3 100644 --- a/xmlsecurity/source/component/documentdigitalsignatures.cxx +++ b/xmlsecurity/source/component/documentdigitalsignatures.cxx @@ -41,6 +41,7 @@ #include <vcl/weld.hxx> #include <unotools/securityoptions.hxx> #include <com/sun/star/security/CertificateValidity.hpp> +#include <com/sun/star/security/CertificateKind.hpp> #include <comphelper/base64.hxx> #include <comphelper/documentconstants.hxx> #include <comphelper/propertyvalue.hxx> @@ -54,6 +55,7 @@ using namespace css; using namespace css::uno; using namespace css::lang; +using namespace css::security; using namespace css::xml::crypto; class DocumentDigitalSignatures @@ -86,7 +88,8 @@ private: DocumentSignatureMode eMode); css::uno::Sequence<css::uno::Reference<css::security::XCertificate>> - chooseCertificatesImpl(std::map<OUString, OUString>& rProperties, const UserAction eAction); + chooseCertificatesImpl(std::map<OUString, OUString>& rProperties, const UserAction eAction, + const CertificateKind certificateKind=CertificateKind_NONE); public: explicit DocumentDigitalSignatures( @@ -158,6 +161,9 @@ public: SAL_CALL chooseSigningCertificate(OUString& rDescription) override; css::uno::Reference<css::security::XCertificate> SAL_CALL selectSigningCertificate(OUString& rDescription) override; + css::uno::Reference<css::security::XCertificate> + SAL_CALL selectSigningCertificateWithType(const CertificateKind certificateKind, + OUString& rDescription) override; css::uno::Sequence<css::uno::Reference<css::security::XCertificate>> SAL_CALL chooseEncryptionCertificate() override; css::uno::Reference<css::security::XCertificate> SAL_CALL chooseCertificateWithProps( @@ -614,14 +620,19 @@ sal_Bool DocumentDigitalSignatures::isAuthorTrusted( return bFound; } -uno::Sequence< Reference< css::security::XCertificate > > DocumentDigitalSignatures::chooseCertificatesImpl(std::map<OUString, OUString>& rProperties, const UserAction eAction) +uno::Sequence<Reference<css::security::XCertificate>> +DocumentDigitalSignatures::chooseCertificatesImpl(std::map<OUString, OUString>& rProperties, + const UserAction eAction, + const CertificateKind certificateKind) { std::vector< Reference< css::xml::crypto::XXMLSecurityContext > > xSecContexts; DocumentSignatureManager aSignatureManager(mxCtx, {}); if (aSignatureManager.init()) { xSecContexts.push_back(aSignatureManager.getSecurityContext()); - xSecContexts.push_back(aSignatureManager.getGpgSecurityContext()); + // Don't include OpenPGP if only X.509 certs are requested + if (certificateKind == CertificateKind_NONE || certificateKind == CertificateKind_OPENPGP) + xSecContexts.push_back(aSignatureManager.getGpgSecurityContext()); } ScopedVclPtrInstance< CertificateChooser > aChooser(nullptr, mxCtx, xSecContexts, eAction); @@ -660,6 +671,17 @@ Reference< css::security::XCertificate > DocumentDigitalSignatures::selectSignin return xCert; } +Reference<css::security::XCertificate> +DocumentDigitalSignatures::selectSigningCertificateWithType(const CertificateKind certificateKind, + OUString& rDescription) +{ + std::map<OUString, OUString> aProperties; + Reference<css::security::XCertificate> xCert + = chooseCertificatesImpl(aProperties, UserAction::SelectSign, certificateKind)[0]; + rDescription = aProperties["Description"]; + return xCert; +} + css::uno::Sequence< Reference< css::security::XCertificate > > DocumentDigitalSignatures::chooseEncryptionCertificate() { std::map<OUString, OUString> aProperties; |