summaryrefslogtreecommitdiff
path: root/xmlsecurity/source/helper/xmlsignaturehelper.cxx
diff options
context:
space:
mode:
Diffstat (limited to 'xmlsecurity/source/helper/xmlsignaturehelper.cxx')
-rw-r--r--xmlsecurity/source/helper/xmlsignaturehelper.cxx430
1 files changed, 0 insertions, 430 deletions
diff --git a/xmlsecurity/source/helper/xmlsignaturehelper.cxx b/xmlsecurity/source/helper/xmlsignaturehelper.cxx
deleted file mode 100644
index 10cb6feda..000000000
--- a/xmlsecurity/source/helper/xmlsignaturehelper.cxx
+++ /dev/null
@@ -1,430 +0,0 @@
-/* -*- Mode: C++; tab-width: 4; indent-tabs-mode: nil; c-basic-offset: 4 -*- */
-/*************************************************************************
- *
- * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
- *
- * Copyright 2000, 2010 Oracle and/or its affiliates.
- *
- * OpenOffice.org - a multi-platform office productivity suite
- *
- * This file is part of OpenOffice.org.
- *
- * OpenOffice.org is free software: you can redistribute it and/or modify
- * it under the terms of the GNU Lesser General Public License version 3
- * only, as published by the Free Software Foundation.
- *
- * OpenOffice.org is distributed in the hope that it will be useful,
- * but WITHOUT ANY WARRANTY; without even the implied warranty of
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
- * GNU Lesser General Public License version 3 for more details
- * (a copy is included in the LICENSE file that accompanied this code).
- *
- * You should have received a copy of the GNU Lesser General Public License
- * version 3 along with OpenOffice.org. If not, see
- * <http://www.openoffice.org/license.html>
- * for a copy of the LGPLv3 License.
- *
- ************************************************************************/
-
-// MARKER(update_precomp.py): autogen include statement, do not remove
-#include "precompiled_xmlsecurity.hxx"
-
-#include <xmlsecurity/xmlsignaturehelper.hxx>
-#include <xmlsecurity/documentsignaturehelper.hxx>
-#include <xsecctl.hxx>
-
-#include <xmlsignaturehelper2.hxx>
-
-#include <tools/stream.hxx>
-#include <tools/debug.hxx>
-
-#include <xmloff/attrlist.hxx>
-
-#include <com/sun/star/io/XOutputStream.hpp>
-#include <com/sun/star/io/XInputStream.hpp>
-#include <com/sun/star/io/XActiveDataSource.hpp>
-#include <com/sun/star/lang/XComponent.hpp>
-#include <com/sun/star/security/SerialNumberAdapter.hpp>
-#include <com/sun/star/beans/XPropertySet.hpp>
-
-#include <tools/date.hxx>
-#include <tools/time.hxx>
-
-/* SEInitializer component */
-#define SEINITIALIZER_COMPONENT "com.sun.star.xml.crypto.SEInitializer"
-
-#define TAG_DOCUMENTSIGNATURES "document-signatures"
-#define NS_DOCUMENTSIGNATURES "http://openoffice.org/2004/documentsignatures"
-#define NS_DOCUMENTSIGNATURES_ODF_1_2 "urn:oasis:names:tc:opendocument:xmlns:digitalsignature:1.0"
-
-using namespace ::com::sun::star;
-using namespace ::com::sun::star::uno;
-
-XMLSignatureHelper::XMLSignatureHelper( const uno::Reference< uno::XComponentContext >& rxCtx)
- : mxCtx(rxCtx), mbODFPre1_2(false)
-{
- mpXSecController = new XSecController(rxCtx);
- mxSecurityController = mpXSecController;
- mbError = false;
-}
-
-XMLSignatureHelper::~XMLSignatureHelper()
-{
-}
-
-bool XMLSignatureHelper::Init()
-{
- DBG_ASSERT( !mxSEInitializer.is(), "XMLSignatureHelper::Init - mxSEInitializer already set!" );
- DBG_ASSERT( !mxSecurityContext.is(), "XMLSignatureHelper::Init - mxSecurityContext already set!" );
-
- ImplCreateSEInitializer();
-
- if ( mxSEInitializer.is() )
- mxSecurityContext = mxSEInitializer->createSecurityContext( ::rtl::OUString() );
-
- return mxSecurityContext.is();
-}
-
-void XMLSignatureHelper::ImplCreateSEInitializer()
-{
- rtl::OUString sSEInitializer(RTL_CONSTASCII_USTRINGPARAM( SEINITIALIZER_COMPONENT ));
- uno::Reference< lang::XMultiComponentFactory > xMCF( mxCtx->getServiceManager() );
- mxSEInitializer = uno::Reference< com::sun::star::xml::crypto::XSEInitializer > (
- xMCF->createInstanceWithContext( sSEInitializer, mxCtx ), uno::UNO_QUERY );
-}
-
-void XMLSignatureHelper::SetUriBinding( com::sun::star::uno::Reference< com::sun::star::xml::crypto::XUriBinding >& rxUriBinding )
-{
- mxUriBinding = rxUriBinding;
-}
-
-com::sun::star::uno::Reference< com::sun::star::xml::crypto::XUriBinding > XMLSignatureHelper::GetUriBinding() const
-{
- return mxUriBinding;
-}
-
-void XMLSignatureHelper::SetStorage(
- const Reference < css::embed::XStorage >& rxStorage,
- ::rtl::OUString sODFVersion)
-{
- DBG_ASSERT( !mxUriBinding.is(), "SetStorage - UriBinding already set!" );
- mxUriBinding = new UriBindingHelper( rxStorage );
- DBG_ASSERT(rxStorage.is(), "SetStorage - empty storage!");
- mbODFPre1_2 = DocumentSignatureHelper::isODFPre_1_2(sODFVersion);
-}
-
-
-void XMLSignatureHelper::SetStartVerifySignatureHdl( const Link& rLink )
-{
- maStartVerifySignatureHdl = rLink;
-}
-
-
-void XMLSignatureHelper::StartMission()
-{
- if ( !mxUriBinding.is() )
- mxUriBinding = new UriBindingHelper();
-
- mpXSecController->startMission( mxUriBinding, mxSecurityContext );
-}
-
-void XMLSignatureHelper::EndMission()
-{
- mpXSecController->endMission();
-}
-
-sal_Int32 XMLSignatureHelper::GetNewSecurityId()
-{
- return mpXSecController->getNewSecurityId();
-}
-
-void XMLSignatureHelper::SetX509Certificate(
- sal_Int32 nSecurityId,
- const rtl::OUString& ouX509IssuerName,
- const rtl::OUString& ouX509SerialNumber,
- const rtl::OUString& ouX509Cert)
-{
- mpXSecController->setX509Certificate(
- nSecurityId,
- ouX509IssuerName,
- ouX509SerialNumber,
- ouX509Cert);
-}
-
-void XMLSignatureHelper::SetX509Certificate(
- sal_Int32 nSecurityId,
- sal_Int32 nSecurityEnvironmentIndex,
- const rtl::OUString& ouX509IssuerName,
- const rtl::OUString& ouX509SerialNumber,
- const rtl::OUString& ouX509Cert)
-{
- mpXSecController->setX509Certificate(
- nSecurityId,
- nSecurityEnvironmentIndex,
- ouX509IssuerName,
- ouX509SerialNumber,
- ouX509Cert);
-}
-
-void XMLSignatureHelper::SetDateTime( sal_Int32 nSecurityId, const Date& rDate, const Time& rTime )
-{
- ::com::sun::star::util::DateTime stDateTime;
- stDateTime.HundredthSeconds = (::sal_uInt16)rTime.Get100Sec();
- stDateTime.Seconds = (::sal_uInt16)rTime.GetSec();
- stDateTime.Minutes = (::sal_uInt16)rTime.GetMin();
- stDateTime.Hours = (::sal_uInt16)rTime.GetHour();
- stDateTime.Day = (::sal_uInt16)rDate.GetDay();
- stDateTime.Month = (::sal_uInt16)rDate.GetMonth();
- stDateTime.Year = (::sal_uInt16)rDate.GetYear();
- mpXSecController->setDate( nSecurityId, stDateTime );
-}
-
-void XMLSignatureHelper::AddForSigning( sal_Int32 nSecurityId, const rtl::OUString& uri, const rtl::OUString& objectURL, sal_Bool bBinary )
-{
- mpXSecController->signAStream( nSecurityId, uri, objectURL, bBinary );
-}
-
-
-uno::Reference<xml::sax::XDocumentHandler> XMLSignatureHelper::CreateDocumentHandlerWithHeader(
- const com::sun::star::uno::Reference< com::sun::star::io::XOutputStream >& xOutputStream )
-{
- /*
- * get SAX writer component
- */
- uno::Reference< lang::XMultiComponentFactory > xMCF( mxCtx->getServiceManager() );
- uno::Reference< io::XActiveDataSource > xSaxWriter(
- xMCF->createInstanceWithContext(rtl::OUString(RTL_CONSTASCII_USTRINGPARAM(
- "com.sun.star.xml.sax.Writer")), mxCtx ), uno::UNO_QUERY );
-
- DBG_ASSERT( xSaxWriter.is(), "can't instantiate XML writer" );
-
- /*
- * connect XML writer to output stream
- */
- xSaxWriter->setOutputStream( xOutputStream );
-
- /*
- * prepare document handler
- */
- uno::Reference<xml::sax::XDocumentHandler>
- xDocHandler( xSaxWriter,uno::UNO_QUERY);
-
- /*
- * write the xml context for signatures
- */
- rtl::OUString tag_AllSignatures(RTL_CONSTASCII_USTRINGPARAM(TAG_DOCUMENTSIGNATURES));
-
- SvXMLAttributeList *pAttributeList = new SvXMLAttributeList();
- rtl::OUString sNamespace;
- if (mbODFPre1_2)
- sNamespace = rtl::OUString(RTL_CONSTASCII_USTRINGPARAM(NS_DOCUMENTSIGNATURES));
- else
- sNamespace = rtl::OUString(RTL_CONSTASCII_USTRINGPARAM(NS_DOCUMENTSIGNATURES_ODF_1_2));
-
- pAttributeList->AddAttribute(
- rtl::OUString(RTL_CONSTASCII_USTRINGPARAM(ATTR_XMLNS)),
- sNamespace);
-
- xDocHandler->startDocument();
- xDocHandler->startElement(
- tag_AllSignatures,
- uno::Reference< com::sun::star::xml::sax::XAttributeList > (pAttributeList));
-
- return xDocHandler;
-}
-
-void XMLSignatureHelper::CloseDocumentHandler( const uno::Reference<xml::sax::XDocumentHandler>& xDocumentHandler )
-{
- rtl::OUString tag_AllSignatures(RTL_CONSTASCII_USTRINGPARAM(TAG_DOCUMENTSIGNATURES));
- xDocumentHandler->endElement( tag_AllSignatures );
- xDocumentHandler->endDocument();
-}
-
-void XMLSignatureHelper::ExportSignature(
- const uno::Reference< xml::sax::XDocumentHandler >& xDocumentHandler,
- const SignatureInformation& signatureInfo )
-{
- mpXSecController->exportSignature(xDocumentHandler, signatureInfo);
-}
-
-bool XMLSignatureHelper::CreateAndWriteSignature( const uno::Reference< xml::sax::XDocumentHandler >& xDocumentHandler )
-{
- mbError = false;
-
- /*
- * create a signature listener
- */
-
- /*
- * configure the signature creation listener
- */
-
- /*
- * write signatures
- */
- if ( !mpXSecController->WriteSignature( xDocumentHandler ) )
- {
- mbError = true;
- }
-
- /*
- * clear up the signature creation listener
- */
-
- return !mbError;
-}
-
-bool XMLSignatureHelper::CreateAndWriteSignature( const com::sun::star::uno::Reference< com::sun::star::io::XOutputStream >& xOutputStream )
-{
- uno::Reference<xml::sax::XDocumentHandler> xDocHandler
- = CreateDocumentHandlerWithHeader(xOutputStream);
-
- bool rc = CreateAndWriteSignature( xDocHandler );
-
- CloseDocumentHandler(xDocHandler);
-
- return rc;
-}
-
-bool XMLSignatureHelper::ReadAndVerifySignature( const com::sun::star::uno::Reference< com::sun::star::io::XInputStream >& xInputStream )
-{
- mbError = false;
-
- DBG_ASSERT(xInputStream.is(), "input stream missing");
-
- /*
- * prepare ParserInputSrouce
- */
- xml::sax::InputSource aParserInput;
- aParserInput.aInputStream = xInputStream;
-
- /*
- * get SAX parser component
- */
- uno::Reference< lang::XMultiComponentFactory > xMCF( mxCtx->getServiceManager() );
- uno::Reference< xml::sax::XParser > xParser(
- xMCF->createInstanceWithContext(
- rtl::OUString(RTL_CONSTASCII_USTRINGPARAM("com.sun.star.xml.sax.Parser") ), mxCtx ),
- uno::UNO_QUERY );
-
- DBG_ASSERT( xParser.is(), "Can't create parser" );
-
- /*
- * create a signature reader
- */
- uno::Reference< xml::sax::XDocumentHandler > xHandler
- = mpXSecController->createSignatureReader( );
-
- /*
- * create a signature listener
- */
- ImplXMLSignatureListener* pSignatureListener = new ImplXMLSignatureListener(
- LINK( this, XMLSignatureHelper, SignatureCreationResultListener ),
- LINK( this, XMLSignatureHelper, SignatureVerifyResultListener ),
- LINK( this, XMLSignatureHelper, StartVerifySignatureElement ) );
-
- /*
- * configure the signature verify listener
- */
-
- /*
- * setup the connection:
- * Parser -> SignatureListener -> SignatureReader
- */
- pSignatureListener->setNextHandler(xHandler);
- xParser->setDocumentHandler( pSignatureListener );
-
- /*
- * parser the stream
- */
- try
- {
- xParser->parseStream( aParserInput );
- }
- catch( xml::sax::SAXParseException& )
- {
- mbError = true;
- }
- catch( xml::sax::SAXException& )
- {
- mbError = true;
- }
- catch( com::sun::star::io::IOException& )
- {
- mbError = true;
- }
- catch( uno::Exception& )
- {
- mbError = true;
- }
-
- /*
- * clear up the connection
- */
- pSignatureListener->setNextHandler( NULL );
-
- /*
- * clear up the signature verify listener
- */
-
- /*
- * release the signature reader
- */
- mpXSecController->releaseSignatureReader( );
-
- return !mbError;
-}
-
-SignatureInformation XMLSignatureHelper::GetSignatureInformation( sal_Int32 nSecurityId ) const
-{
- return mpXSecController->getSignatureInformation( nSecurityId );
-}
-
-SignatureInformations XMLSignatureHelper::GetSignatureInformations() const
-{
- return mpXSecController->getSignatureInformations();
-}
-
-uno::Reference< ::com::sun::star::xml::crypto::XSecurityEnvironment > XMLSignatureHelper::GetSecurityEnvironment()
-{
- return (mxSecurityContext.is()?(mxSecurityContext->getSecurityEnvironment()): uno::Reference< ::com::sun::star::xml::crypto::XSecurityEnvironment >());
-}
-
-uno::Reference< ::com::sun::star::xml::crypto::XSecurityEnvironment > XMLSignatureHelper::GetSecurityEnvironmentByIndex(sal_Int32 nId)
-{
- return (mxSecurityContext.is()?(mxSecurityContext->getSecurityEnvironmentByIndex(nId)): uno::Reference< ::com::sun::star::xml::crypto::XSecurityEnvironment >());
-}
-
-sal_Int32 XMLSignatureHelper::GetSecurityEnvironmentNumber()
-{
- return (mxSecurityContext.is()?(mxSecurityContext->getSecurityEnvironmentNumber()): 0);
-}
-
-IMPL_LINK( XMLSignatureHelper, SignatureCreationResultListener, XMLSignatureCreationResult*, pResult )
-{
- maCreationResults.insert( maCreationResults.begin() + maCreationResults.size(), *pResult );
- if ( pResult->nSignatureCreationResult != com::sun::star::xml::crypto::SecurityOperationStatus_OPERATION_SUCCEEDED )
- mbError = true;
- return 0;
-}
-
-IMPL_LINK( XMLSignatureHelper, SignatureVerifyResultListener, XMLSignatureVerifyResult*, pResult )
-{
- maVerifyResults.insert( maVerifyResults.begin() + maVerifyResults.size(), *pResult );
- if ( pResult->nSignatureVerifyResult != com::sun::star::xml::crypto::SecurityOperationStatus_OPERATION_SUCCEEDED )
- mbError = true;
- return 0;
-}
-
-IMPL_LINK( XMLSignatureHelper, StartVerifySignatureElement, const uno::Reference< com::sun::star::xml::sax::XAttributeList >*, pAttrs )
-{
- if ( !maStartVerifySignatureHdl.IsSet() || maStartVerifySignatureHdl.Call( (void*)pAttrs ) )
- {
- sal_Int32 nSignatureId = mpXSecController->getNewSecurityId();
- mpXSecController->addSignature( nSignatureId );
- }
-
- return 0;
-}
-
-/* vim:set shiftwidth=4 softtabstop=4 expandtab: */