helpcontent2                                                |    2 
 offapi/com/sun/star/security/XDocumentDigitalSignatures.idl |   10 ++-
 xmlsecurity/source/component/documentdigitalsignatures.cxx  |   38 ++++++++++++
 xmlsecurity/source/component/documentdigitalsignatures.hxx  |    5 +
 xmlsecurity/source/helper/documentsignaturemanager.cxx      |    9 +-
 5 files changed, 57 insertions(+), 7 deletions(-)

New commits:
commit 1ed7d2fef309a8a71b837d355099732c49cde887
Author:     Tomaž Vajngerl <tomaz.vajng...@collabora.co.uk>
AuthorDate: Mon Oct 15 10:07:32 2018 +0200
Commit:     Miklos Vajna <vmik...@collabora.co.uk>
CommitDate: Thu Nov 8 11:36:48 2018 +0100

    use "range for" to iterate through certificates
    
    Reviewed-on: https://gerrit.libreoffice.org/61779
    Tested-by: Jenkins
    Reviewed-by: Tomaž Vajngerl <qui...@gmail.com>
    (cherry picked from commit f9acea526b9aeb3cf450cd7ee43bd969385865db)
    
    Conflicts:
            xmlsecurity/source/helper/documentsignaturemanager.cxx
    
    Change-Id: Ife206ab29f2f8eaa2358f45e6bae2290d95fd4d6

diff --git a/xmlsecurity/source/helper/documentsignaturemanager.cxx 
b/xmlsecurity/source/helper/documentsignaturemanager.cxx
index fd88d0a52e7e..45787b190311 100644
--- a/xmlsecurity/source/helper/documentsignaturemanager.cxx
+++ b/xmlsecurity/source/helper/documentsignaturemanager.cxx
@@ -341,14 +341,13 @@ bool DocumentSignatureManager::add(const 
uno::Reference<security::XCertificate>&
     }
 
     uno::Sequence< uno::Reference< security::XCertificate > > aCertPath = 
xSecurityContext->getSecurityEnvironment()->buildCertificatePath(xCert);
-    const uno::Reference< security::XCertificate >* pCertPath = 
aCertPath.getConstArray();
-    sal_Int32 nCnt = aCertPath.getLength();
 
     OUStringBuffer aStrBuffer;
-    for (int i = 0; i < nCnt; i++)
+    for (uno::Reference<security::XCertificate> const& rxCertificate : 
aCertPath)
     {
-        sax::Converter::encodeBase64(aStrBuffer, pCertPath[i]->getEncoded());
-        
maSignatureHelper.AddEncapsulatedX509Certificate(aStrBuffer.makeStringAndClear());
+        sax::Converter::encodeBase64(aStrBuffer, rxCertificate->getEncoded());
+        OUString aString = aStrBuffer.makeStringAndClear();
+        maSignatureHelper.AddEncapsulatedX509Certificate(aString);
     }
 
 
commit cc145029e896b8e65443898f65807a8c5414e0d2
Author:     Tomaž Vajngerl <tomaz.vajng...@collabora.co.uk>
AuthorDate: Mon Oct 15 10:06:56 2018 +0200
Commit:     Miklos Vajna <vmik...@collabora.co.uk>
CommitDate: Thu Nov 8 11:02:23 2018 +0100

    Support to sign a document with a specified signature
    
    Reviewed-on: https://gerrit.libreoffice.org/61778
    Tested-by: Jenkins
    Reviewed-by: Tomaž Vajngerl <qui...@gmail.com>
    (cherry picked from commit 40810c43c48b25385b487c0b79c4c466dbf36be7)
    
    Conflicts:
            xmlsecurity/source/component/documentdigitalsignatures.cxx
    
    Change-Id: I92e392b315c9217b63db830dea1b2e91387b56c2

diff --git a/helpcontent2 b/helpcontent2
index 4fcc8606724b..0233c4ebfd07 160000
--- a/helpcontent2
+++ b/helpcontent2
@@ -1 +1 @@
-Subproject commit 4fcc8606724bcf6ec87b3ca741d4a00633e1b3c4
+Subproject commit 0233c4ebfd07878cd77454d1970fdf002c4e67b6
diff --git a/offapi/com/sun/star/security/XDocumentDigitalSignatures.idl 
b/offapi/com/sun/star/security/XDocumentDigitalSignatures.idl
index 519f77cb62dd..4d51192c557f 100644
--- a/offapi/com/sun/star/security/XDocumentDigitalSignatures.idl
+++ b/offapi/com/sun/star/security/XDocumentDigitalSignatures.idl
@@ -157,7 +157,15 @@ interface XDocumentDigitalSignatures : 
com::sun::star::uno::XInterface
      */
     com::sun::star::security::XCertificate chooseCertificateWithProps( [out] 
sequence<::com::sun::star::beans::PropertyValue> Properties);
 
-} ;
+    /** Signs the content of the document with the provided certificate.
+
+        @since LibreOffice 6.2
+     */
+    boolean signDocumentWithCertificate([in] 
::com::sun::star::security::XCertificate xCertificate,
+                                        [in] ::com::sun::star::embed::XStorage 
xStorage,
+                                        [in] ::com::sun::star::io::XStream 
xStream);
+
+};
 
 } ; } ; } ; } ;
 
diff --git a/xmlsecurity/source/component/documentdigitalsignatures.cxx 
b/xmlsecurity/source/component/documentdigitalsignatures.cxx
index dd7de2c3bafe..e49c11e0eef7 100644
--- a/xmlsecurity/source/component/documentdigitalsignatures.cxx
+++ b/xmlsecurity/source/component/documentdigitalsignatures.cxx
@@ -47,9 +47,11 @@
 #include <comphelper/sequence.hxx>
 #include <cppuhelper/supportsservice.hxx>
 #include <com/sun/star/lang/IllegalArgumentException.hpp>
+#include <com/sun/star/xml/crypto/XXMLSecurityContext.hpp>
 
 using namespace css;
 using namespace css::uno;
+using namespace css::xml::crypto;
 
 DocumentDigitalSignatures::DocumentDigitalSignatures( const Reference< 
XComponentContext >& rxCtx ):
     mxCtx(rxCtx),
@@ -578,4 +580,40 @@ Reference< XInterface > 
DocumentDigitalSignatures_CreateInstance(
     return static_cast<cppu::OWeakObject*>(new DocumentDigitalSignatures( rCtx 
));
 }
 
+sal_Bool DocumentDigitalSignatures::signDocumentWithCertificate(
+            css::uno::Reference<css::security::XCertificate> const & 
xCertificate,
+            css::uno::Reference<css::embed::XStorage> const & xStorage,
+            css::uno::Reference<css::io::XStream> const & xStream)
+{
+    DocumentSignatureManager aSignatureManager(mxCtx, 
DocumentSignatureMode::Content);
+
+    if (!aSignatureManager.init())
+        return false;
+
+    aSignatureManager.mxStore = xStorage;
+    aSignatureManager.maSignatureHelper.SetStorage(xStorage, m_sODFVersion);
+    aSignatureManager.mxSignatureStream = xStream;
+
+    Reference<XXMLSecurityContext> xSecurityContext;
+    Reference<XServiceInfo> xServiceInfo(xCertificate, UNO_QUERY);
+    xSecurityContext = aSignatureManager.getSecurityContext();
+
+    sal_Int32 nSecurityId;
+
+    bool bSuccess = aSignatureManager.add(xCertificate, xSecurityContext, "", 
nSecurityId, true);
+    if (!bSuccess)
+        return false;
+
+    aSignatureManager.read(/*bUseTempStream=*/true, 
/*bCacheLastSignature=*/false);
+    aSignatureManager.write(true);
+
+    if (xStorage.is() && !xStream.is())
+    {
+        uno::Reference<embed::XTransactedObject> xTransaction(xStorage, 
uno::UNO_QUERY);
+        xTransaction->commit();
+    }
+
+    return true;
+}
+
 /* vim:set shiftwidth=4 softtabstop=4 expandtab: */
diff --git a/xmlsecurity/source/component/documentdigitalsignatures.hxx 
b/xmlsecurity/source/component/documentdigitalsignatures.hxx
index 9ef24ab36e5e..a3064eb1e206 100644
--- a/xmlsecurity/source/component/documentdigitalsignatures.hxx
+++ b/xmlsecurity/source/component/documentdigitalsignatures.hxx
@@ -108,6 +108,11 @@ public:
     css::uno::Reference< css::security::XCertificate > SAL_CALL 
chooseSigningCertificate(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(css::uno::Sequence<::com::sun::star::beans::PropertyValue>&
 Properties) override;
+
+    sal_Bool SAL_CALL signDocumentWithCertificate(
+                            css::uno::Reference<css::security::XCertificate> 
const & xCertificate,
+                            css::uno::Reference<css::embed::XStorage> const & 
xStoragexStorage,
+                            css::uno::Reference<css::io::XStream> const & 
xStream) override;
 };
 
 /// @throws css::uno::Exception
_______________________________________________
Libreoffice-commits mailing list
libreoffice-comm...@lists.freedesktop.org
https://lists.freedesktop.org/mailman/listinfo/libreoffice-commits

Reply via email to