Kaydet (Commit) 40810c43 authored tarafından Tomaž Vajngerl's avatar Tomaž Vajngerl Kaydeden (comit) Tomaž Vajngerl

Support to sign a document with a specified signature

Change-Id: I92e392b315c9217b63db830dea1b2e91387b56c2
Reviewed-on: https://gerrit.libreoffice.org/61778
Tested-by: Jenkins
Reviewed-by: 's avatarTomaž Vajngerl <quikee@gmail.com>
üst 2fac8cf2
...@@ -191,7 +191,15 @@ interface XDocumentDigitalSignatures : com::sun::star::uno::XInterface ...@@ -191,7 +191,15 @@ interface XDocumentDigitalSignatures : com::sun::star::uno::XInterface
*/ */
com::sun::star::security::XCertificate chooseCertificateWithProps( [out] sequence<::com::sun::star::beans::PropertyValue> Properties); 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);
};
} ; } ; } ; } ; } ; } ; } ; } ;
......
...@@ -168,6 +168,11 @@ public: ...@@ -168,6 +168,11 @@ public:
SAL_CALL chooseEncryptionCertificate() override; SAL_CALL chooseEncryptionCertificate() override;
css::uno::Reference<css::security::XCertificate> SAL_CALL chooseCertificateWithProps( css::uno::Reference<css::security::XCertificate> SAL_CALL chooseCertificateWithProps(
css::uno::Sequence<::com::sun::star::beans::PropertyValue>& Properties) override; 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;
}; };
DocumentDigitalSignatures::DocumentDigitalSignatures( const Reference< XComponentContext >& rxCtx ): DocumentDigitalSignatures::DocumentDigitalSignatures( const Reference< XComponentContext >& rxCtx ):
...@@ -749,6 +754,42 @@ void DocumentDigitalSignatures::addLocationToTrustedSources( const OUString& Loc ...@@ -749,6 +754,42 @@ void DocumentDigitalSignatures::addLocationToTrustedSources( const OUString& Loc
aSecOpt.SetSecureURLs( aSecURLs ); aSecOpt.SetSecureURLs( aSecURLs );
} }
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;
}
extern "C" SAL_DLLPUBLIC_EXPORT uno::XInterface* extern "C" SAL_DLLPUBLIC_EXPORT uno::XInterface*
com_sun_star_security_DocumentDigitalSignatures_get_implementation( com_sun_star_security_DocumentDigitalSignatures_get_implementation(
uno::XComponentContext* pCtx, uno::Sequence<uno::Any> const& /*rSeq*/) uno::XComponentContext* pCtx, uno::Sequence<uno::Any> const& /*rSeq*/)
......
Markdown is supported
0% or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment