2016-02-15 11:38:23 +01:00
|
|
|
/* -*- Mode: C++; tab-width: 4; indent-tabs-mode: nil; c-basic-offset: 4 -*- */
|
|
|
|
/*
|
|
|
|
* This file is part of the LibreOffice project.
|
|
|
|
*
|
|
|
|
* This Source Code Form is subject to the terms of the Mozilla Public
|
|
|
|
* License, v. 2.0. If a copy of the MPL was not distributed with this
|
|
|
|
* file, You can obtain one at http://mozilla.org/MPL/2.0/.
|
|
|
|
*
|
|
|
|
* This file incorporates work covered by the following license notice:
|
|
|
|
*
|
|
|
|
* Licensed to the Apache Software Foundation (ASF) under one or more
|
|
|
|
* contributor license agreements. See the NOTICE file distributed
|
|
|
|
* with this work for additional information regarding copyright
|
|
|
|
* ownership. The ASF licenses this file to you under the Apache
|
|
|
|
* License, Version 2.0 (the "License"); you may not use this file
|
|
|
|
* except in compliance with the License. You may obtain a copy of
|
|
|
|
* the License at http://www.apache.org/licenses/LICENSE-2.0 .
|
|
|
|
*/
|
|
|
|
|
|
|
|
#ifndef INCLUDED_XMLSECURITY_INC_DOCUMENTSIGNATUREMANAGER_HXX
|
|
|
|
#define INCLUDED_XMLSECURITY_INC_DOCUMENTSIGNATUREMANAGER_HXX
|
|
|
|
|
|
|
|
#include "xmlsecuritydllapi.h"
|
2016-10-13 16:11:02 +02:00
|
|
|
|
|
|
|
#include <memory>
|
|
|
|
|
2016-05-27 10:56:17 +03:00
|
|
|
#include <sigstruct.hxx>
|
|
|
|
#include <xmlsignaturehelper.hxx>
|
2016-10-13 16:11:02 +02:00
|
|
|
#include <pdfsignaturehelper.hxx>
|
2016-02-15 11:38:23 +01:00
|
|
|
#include <com/sun/star/uno/XComponentContext.hpp>
|
|
|
|
#include <com/sun/star/embed/XStorage.hpp>
|
2016-05-27 10:56:17 +03:00
|
|
|
#include <documentsignaturehelper.hxx>
|
2016-02-15 11:38:23 +01:00
|
|
|
#include <com/sun/star/beans/PropertyValue.hpp>
|
|
|
|
|
|
|
|
/// Manages signatures (addition, removal), used by DigitalSignaturesDialog.
|
|
|
|
class XMLSECURITY_DLLPUBLIC DocumentSignatureManager
|
|
|
|
{
|
|
|
|
public:
|
|
|
|
css::uno::Reference<css::uno::XComponentContext> mxContext;
|
|
|
|
css::uno::Reference<css::embed::XStorage> mxStore;
|
|
|
|
XMLSignatureHelper maSignatureHelper;
|
2016-10-13 16:11:02 +02:00
|
|
|
std::unique_ptr<PDFSignatureHelper> mpPDFSignatureHelper;
|
2016-02-15 11:38:23 +01:00
|
|
|
SignatureInformations maCurrentSignatureInformations;
|
|
|
|
DocumentSignatureMode meSignatureMode;
|
|
|
|
css::uno::Sequence< css::uno::Sequence<css::beans::PropertyValue> > m_manifest;
|
|
|
|
css::uno::Reference<css::io::XStream> mxSignatureStream;
|
|
|
|
css::uno::Reference<css::io::XStream> mxTempSignatureStream;
|
|
|
|
/// Storage containing all OOXML signatures, unused for ODF.
|
|
|
|
css::uno::Reference<css::embed::XStorage> mxTempSignatureStorage;
|
|
|
|
|
|
|
|
DocumentSignatureManager(const css::uno::Reference<css::uno::XComponentContext>& xContext, DocumentSignatureMode eMode);
|
|
|
|
~DocumentSignatureManager();
|
|
|
|
/**
|
|
|
|
* Checks if a particular stream is a valid xml stream. Those are treated
|
|
|
|
* differently when they are signed (c14n transformation)
|
|
|
|
*/
|
|
|
|
bool isXML(const OUString& rURI);
|
|
|
|
SignatureStreamHelper ImplOpenSignatureStream(sal_Int32 eStreamMode, bool bTempStream);
|
|
|
|
/// Add a new signature, using xCert as a signing certificate, and rDescription as description.
|
|
|
|
bool add(const css::uno::Reference<css::security::XCertificate>& xCert, const OUString& rDescription, sal_Int32& nSecurityId);
|
2016-03-04 12:20:38 +01:00
|
|
|
/// Remove signature at nPosition.
|
|
|
|
void remove(sal_uInt16 nPosition);
|
2016-02-15 11:38:23 +01:00
|
|
|
/// Read signatures from either a temp stream or the real storage.
|
xmlsecurity OOXML export: only cache existing signatures, not our temp. one
When adding a signature, first we export it to a temp. storage, then
read it back, show the verification to the user, and then later we do or
do not write the temp. storage back to the original one.
This means the signature gets exported two times, and MSO only considers
the final result valid. So when caching signatures (to avoid a real
export based on our data model), don't cache the one we just added to
the temp. storage, but do a real export second time as well.
With this, MSO considers our appended signature (next to an existing
one) valid, too.
Change-Id: I4d615298463e037ea4e654ff5c3addcef8b0a094
2016-03-04 10:49:12 +01:00
|
|
|
void read(bool bUseTempStream, bool bCacheLastSignature = true);
|
2016-03-07 09:58:12 +01:00
|
|
|
/// Write signatures back to the persistent storage.
|
|
|
|
void write();
|
2016-10-13 16:11:02 +02:00
|
|
|
/// Lazy creation of PDF helper.
|
|
|
|
PDFSignatureHelper& getPDFSignatureHelper();
|
2016-02-15 11:38:23 +01:00
|
|
|
};
|
|
|
|
|
2016-05-27 10:56:17 +03:00
|
|
|
#endif // INCLUDED_XMLSECURITY_INC_DOCUMENTSIGNATUREMANAGER_HXX
|
2016-02-15 11:38:23 +01:00
|
|
|
|
|
|
|
/* vim:set shiftwidth=4 softtabstop=4 expandtab: */
|