diff options
Diffstat (limited to 'xmlsecurity/tools/demo')
-rw-r--r-- | xmlsecurity/tools/demo/makefile.mk | 151 | ||||
-rw-r--r-- | xmlsecurity/tools/demo/multisigdemo.cxx | 353 | ||||
-rw-r--r-- | xmlsecurity/tools/demo/signdemo.cxx | 223 | ||||
-rw-r--r-- | xmlsecurity/tools/demo/util.cxx | 215 | ||||
-rw-r--r-- | xmlsecurity/tools/demo/util.hxx | 87 | ||||
-rw-r--r-- | xmlsecurity/tools/demo/verifydemo.cxx | 180 |
6 files changed, 1209 insertions, 0 deletions
diff --git a/xmlsecurity/tools/demo/makefile.mk b/xmlsecurity/tools/demo/makefile.mk new file mode 100644 index 000000000000..83845157c9bc --- /dev/null +++ b/xmlsecurity/tools/demo/makefile.mk @@ -0,0 +1,151 @@ +#************************************************************************* +# +# $RCSfile: makefile.mk,v $ +# +# $Revision: 1.1.1.1 $ +# +# last change: $Author: mt $ $Date: 2004-07-12 13:15:30 $ +# +# The Contents of this file are made available subject to the terms of +# either of the following licenses +# +# - GNU Lesser General Public License Version 2.1 +# - Sun Industry Standards Source License Version 1.1 +# +# Sun Microsystems Inc., October, 2000 +# +# GNU Lesser General Public License Version 2.1 +# ============================================= +# Copyright 2000 by Sun Microsystems, Inc. +# 901 San Antonio Road, Palo Alto, CA 94303, USA +# +# This library is free software; you can redistribute it and/or +# modify it under the terms of the GNU Lesser General Public +# License version 2.1, as published by the Free Software Foundation. +# +# This library 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 for more details. +# +# You should have received a copy of the GNU Lesser General Public +# License along with this library; if not, write to the Free Software +# Foundation, Inc., 59 Temple Place, Suite 330, Boston, +# MA 02111-1307 USA +# +# +# Sun Industry Standards Source License Version 1.1 +# ================================================= +# The contents of this file are subject to the Sun Industry Standards +# Source License Version 1.1 (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.openoffice.org/license.html. +# +# Software provided under this License is provided on an "AS IS" basis, +# WITHOUT WARRANTY OF ANY KIND, EITHER EXPRESSED OR IMPLIED, INCLUDING, +# WITHOUT LIMITATION, WARRANTIES THAT THE SOFTWARE IS FREE OF DEFECTS, +# MERCHANTABLE, FIT FOR A PARTICULAR PURPOSE, OR NON-INFRINGING. +# See the License for the specific provisions governing your rights and +# obligations concerning the Software. +# +# The Initial Developer of the Original Code is: Sun Microsystems, Inc. +# +# Copyright: 2000 by Sun Microsystems, Inc. +# +# All Rights Reserved. +# +# Contributor(s): _______________________________________ +# +# +# +#************************************************************************* + +PRJ=..$/.. + +PRJNAME=xmlsecurity +TARGET=demo + +# --- Settings ----------------------------------------------------- + +.INCLUDE : svpre.mk +.INCLUDE : settings.mk +.INCLUDE : sv.mk +.INCLUDE : $(PRJ)$/util$/target.pmk + + +CDEFS += -DXMLSEC_CRYPTO_NSS -DXMLSEC_NO_XSLT + +ENABLE_EXCEPTIONS=TRUE +NO_BSYMBOLIC=TRUE +LIBTARGET=NO + +# --- Files -------------------------------------------------------- + +SHARE_LIBS = \ + $(CPPULIB) \ + $(CPPUHELPERLIB) \ + $(SALLIB) \ + $(UCBHELPERLIB) \ + $(UNOTOOLSLIB) \ + $(TOOLSLIB) \ + $(XMLOFFLIB) + + +.IF "$(GUI)"=="WNT" +SHARE_LIBS+= "ixml2.lib" "nss3.lib" "nspr4.lib" "xmlsec.lib" "xmlsec-nss.lib" "xsecctl.lib" "helper.lib" "xsec_xmlsec.lib" +.ELSE +SHARE_LIBS+= "-lxml2" "-lnss3" "-lnspr4" "-lxmlsec" "-lxmlsec-nss" "-lxsecctl" "-lhelper" "-lxsec_xmlsec" +.ENDIF + +SHARE_OBJS = \ + $(OBJ)$/util.obj + +# +# The 1st application +# +APP1TARGET= signdemo +APP1OBJS= \ + $(SHARE_OBJS) \ + $(OBJ)$/signdemo.obj + +.IF "$(OS)" == "LINUX" +APP1STDLIBS+= -lstdc++ +.ENDIF + +APP1STDLIBS+= \ + $(SHARE_LIBS) + +# +# The 2rd application +# +APP2TARGET= verifydemo +APP2OBJS= \ + $(SHARE_OBJS) \ + $(OBJ)$/verifydemo.obj + +.IF "$(OS)" == "LINUX" +APP2STDLIBS+= -lstdc++ +.ENDIF + +APP2STDLIBS+= \ + $(SHARE_LIBS) + +# +# The 3rd application +# +APP3TARGET= multisigdemo +APP3OBJS= \ + $(SHARE_OBJS) \ + $(OBJ)$/multisigdemo.obj + +.IF "$(OS)" == "LINUX" +APP3STDLIBS+= -lstdc++ +.ENDIF + +APP3STDLIBS+= \ + $(SHARE_LIBS) + +# --- Targets ------------------------------------------------------ + +.INCLUDE : target.mk + diff --git a/xmlsecurity/tools/demo/multisigdemo.cxx b/xmlsecurity/tools/demo/multisigdemo.cxx new file mode 100644 index 000000000000..0396282c7cc1 --- /dev/null +++ b/xmlsecurity/tools/demo/multisigdemo.cxx @@ -0,0 +1,353 @@ +/************************************************************************* + * + * $RCSfile: multisigdemo.cxx,v $ + * + * $Revision: 1.1.1.1 $ + * + * last change: $Author: mt $ $Date: 2004-07-12 13:15:30 $ + * + * The Contents of this file are made available subject to the terms of + * either of the following licenses + * + * - GNU Lesser General Public License Version 2.1 + * - Sun Industry Standards Source License Version 1.1 + * + * Sun Microsystems Inc., October, 2000 + * + * GNU Lesser General Public License Version 2.1 + * ============================================= + * Copyright 2000 by Sun Microsystems, Inc. + * 901 San Antonio Road, Palo Alto, CA 94303, USA + * + * This library is free software; you can redistribute it and/or + * modify it under the terms of the GNU Lesser General Public + * License version 2.1, as published by the Free Software Foundation. + * + * This library 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 for more details. + * + * You should have received a copy of the GNU Lesser General Public + * License along with this library; if not, write to the Free Software + * Foundation, Inc., 59 Temple Place, Suite 330, Boston, + * MA 02111-1307 USA + * + * + * Sun Industry Standards Source License Version 1.1 + * ================================================= + * The contents of this file are subject to the Sun Industry Standards + * Source License Version 1.1 (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.openoffice.org/license.html. + * + * Software provided under this License is provided on an "AS IS" basis, + * WITHOUT WARRANTY OF ANY KIND, EITHER EXPRESSED OR IMPLIED, INCLUDING, + * WITHOUT LIMITATION, WARRANTIES THAT THE SOFTWARE IS FREE OF DEFECTS, + * MERCHANTABLE, FIT FOR A PARTICULAR PURPOSE, OR NON-INFRINGING. + * See the License for the specific provisions governing your rights and + * obligations concerning the Software. + * + * The Initial Developer of the Original Code is: Sun Microsystems, Inc. + * + * Copyright: 2000 by Sun Microsystems, Inc. + * + * All Rights Reserved. + * + * Contributor(s): _______________________________________ + * + * + ************************************************************************/ + +#include <stdio.h> +#include "util.hxx" + +#include <rtl/ustring.hxx> +#include <cppuhelper/servicefactory.hxx> +#include <com/sun/star/lang/XComponent.hpp> +#include <com/sun/star/beans/PropertyValue.hpp> +#include <unotools/streamhelper.hxx> + +namespace cssu = com::sun::star::uno; +namespace cssl = com::sun::star::lang; +namespace cssxc = com::sun::star::xml::crypto; +namespace cssi = com::sun::star::io; + +long denyVerifyHandler( void *, void * ) +{ + return 0; +} + +long startVerifyHandler( void *, void * ) +{ + char answer; + fprintf( stdout, + "A signature is found, whether to verify it(y/n)?[y]:" ); + fscanf( stdin, "%c", &answer); + + return (answer == 'n')?0:1; +} + +int SAL_CALL main( int argc, char **argv ) +{ + if( argc != 7 ) + { + fprintf( stderr, "Usage: %s <rdb file> <signature file 1> <xml stream file> <binary stream file> <cryptoken> <signature file 2>\n" , argv[0] ) ; + return -1 ; + } + + /* + * creates a component factory from local rdb file. + */ + cssu::Reference< cssl::XMultiServiceFactory > xManager = NULL ; + cssu::Reference< cssu::XComponentContext > xContext = NULL ; + try + { + xManager = serviceManager( xContext , rtl::OUString::createFromAscii( "local" ), rtl::OUString::createFromAscii( argv[1] ) ) ; + OSL_ENSURE( xManager.is() , + "ServicesManager - " + "Cannot get service manager" ); + + fprintf( stdout , "xManager created.\n" ) ; + } + catch( cssu::Exception& e ) + { + fprintf( stderr , "Error Message: %s\n" , rtl::OUStringToOString( e.Message , RTL_TEXTENCODING_ASCII_US ).getStr() ) ; + return -1; + } + + rtl::OUString aXMLFileName = rtl::OUString::createFromAscii(argv[3]); + rtl::OUString aBINFileName = rtl::OUString::createFromAscii(argv[4]); + rtl::OUString aSIGFileName = rtl::OUString::createFromAscii(argv[2]); + rtl::OUString aSIGFileName2 = rtl::OUString::createFromAscii(argv[6]); + sal_Int32 nSecurityId; + SvFileStream* pStream; + ULONG nBytes; + SvLockBytesRef xLockBytes; + cssu::Reference< cssi::XOutputStream > xOutputStream; + cssu::Reference< cssi::XInputStream > xInputStream; + bool bDone; + SignatureInformations signatureInformations; + cssu::Reference< ::com::sun::star::xml::sax::XDocumentHandler> xDocumentHandler; + + XMLSignatureHelper aSignatureHelper( xManager ); + + bool bInit = aSignatureHelper.Init( rtl::OUString::createFromAscii(argv[5]) ); + if ( !bInit ) + { + fprintf( stderr, "Error initializing security context!\n" ); + return -1; + } + + fprintf( stdout, "------ Mission 1 : create the first signature file ...\n"); + + aSignatureHelper.StartMission(); + + /* + * select a private key certificate + */ + cssu::Reference< cssxc::XSecurityEnvironment > xSecurityEnvironment = aSignatureHelper.GetSecurityEnvironment(); + cssu::Sequence< cssu::Reference< ::com::sun::star::security::XCertificate > > xPersonalCerts + = xSecurityEnvironment->getPersonalCertificates() ; + + nSecurityId = aSignatureHelper.GetNewSecurityId(); + + /* + * use no.3 certificate to configure the X509 certificate + */ + aSignatureHelper.SetX509Certificate( + nSecurityId, + xPersonalCerts[2]->getIssuerName(), + bigIntegerToNumericString( xPersonalCerts[2]->getSerialNumber())); + + aSignatureHelper.AddForSigning( nSecurityId, aXMLFileName, aXMLFileName, sal_False ); + aSignatureHelper.AddForSigning( nSecurityId, aBINFileName, aBINFileName, sal_True ); + + /* + * creates another signature on the xml stream, use no.4 certificate + */ + nSecurityId = aSignatureHelper.GetNewSecurityId(); + + aSignatureHelper.SetX509Certificate( + nSecurityId, + xPersonalCerts[3]->getIssuerName(), + bigIntegerToNumericString( xPersonalCerts[3]->getSerialNumber())); + aSignatureHelper.AddForSigning( nSecurityId, aXMLFileName, aXMLFileName, sal_False ); + + /* + * creates the output stream + */ + pStream = new SvFileStream( aSIGFileName, STREAM_WRITE ); + xLockBytes = new SvLockBytes( pStream, TRUE ); + xOutputStream = new utl::OOutputStreamHelper( xLockBytes ); + + /* + * creates signature + */ + bDone = aSignatureHelper.CreateAndWriteSignatue( xOutputStream ); + if ( !bDone ) + { + fprintf( stderr, "Error creating Signature!\n" ); + } + else + { + fprintf( stdout, "Signature successfully created!\n" ); + } + + aSignatureHelper.EndMission(); + + + fprintf( stdout, "------ Mission 2 : transfer the second signature to a new signature file ...\n"); + + /* + * You can use an uninitialized SignatureHelper to perform this mission. + */ + + /* + * configures the start-verify handler + */ + aSignatureHelper.SetStartVerifySignatureHdl( Link( NULL, denyVerifyHandler ) ); + aSignatureHelper.StartMission(); + + pStream = new SvFileStream( aSIGFileName, STREAM_READ ); + pStream->Seek( STREAM_SEEK_TO_END ); + nBytes = pStream->Tell(); + pStream->Seek( STREAM_SEEK_TO_BEGIN ); + xLockBytes = new SvLockBytes( pStream, TRUE ); + xInputStream = new utl::OInputStreamHelper( xLockBytes, nBytes ); + + bDone = aSignatureHelper.ReadAndVerifySignatue( xInputStream ); + xInputStream->closeInput(); + + if ( !bDone ) + { + fprintf( stderr, "Error in reading Signature!\n" ); + } + else + { + fprintf( stdout, "Signature successfully transfered!\n" ); + } + + /* + * get all signature information + */ + signatureInformations = aSignatureHelper.GetSignatureInformations(); + + /* + * write the first signature into the second signature file. + */ + pStream = new SvFileStream( aSIGFileName2, STREAM_WRITE ); + xLockBytes = new SvLockBytes( pStream, TRUE ); + xOutputStream = new utl::OOutputStreamHelper( xLockBytes ); + + xDocumentHandler = aSignatureHelper.CreateDocumentHandlerWithHeader( xOutputStream); + + aSignatureHelper.ExportSignature( xDocumentHandler, signatureInformations[1]); + aSignatureHelper.CloseDocumentHandler( xDocumentHandler); + aSignatureHelper.EndMission(); + + fprintf( stdout, "------ Mission 3 : insert a new signature to the first signature file ...\n"); + + aSignatureHelper.StartMission(); + + nSecurityId = aSignatureHelper.GetNewSecurityId(); + + /* + * use no.5 certificate to the new signature + */ + aSignatureHelper.SetX509Certificate( + nSecurityId, + xPersonalCerts[4]->getIssuerName(), + bigIntegerToNumericString( xPersonalCerts[4]->getSerialNumber())); + + aSignatureHelper.AddForSigning( nSecurityId, aBINFileName, aBINFileName, sal_True ); + + pStream = new SvFileStream( aSIGFileName, STREAM_WRITE ); + xLockBytes = new SvLockBytes( pStream, TRUE ); + xOutputStream = new utl::OOutputStreamHelper( xLockBytes ); + + xDocumentHandler = aSignatureHelper.CreateDocumentHandlerWithHeader( xOutputStream); + + aSignatureHelper.ExportSignature( xDocumentHandler, signatureInformations[0]); + bDone = aSignatureHelper.CreateAndWriteSignatue( xDocumentHandler ); + aSignatureHelper.ExportSignature( xDocumentHandler, signatureInformations[1]); + aSignatureHelper.CloseDocumentHandler( xDocumentHandler); + + if ( !bDone ) + { + fprintf( stderr, "Error creating Signature!\n" ); + } + else + { + fprintf( stdout, "Signature successfully created!\n" ); + } + + aSignatureHelper.EndMission(); + + fprintf( stdout, "------ Mission 4 : verify the first signature file ...\n"); + + aSignatureHelper.SetStartVerifySignatureHdl( Link( NULL, startVerifyHandler ) ); + + aSignatureHelper.StartMission(); + + pStream = new SvFileStream( aSIGFileName, STREAM_READ ); + pStream->Seek( STREAM_SEEK_TO_END ); + nBytes = pStream->Tell(); + pStream->Seek( STREAM_SEEK_TO_BEGIN ); + xLockBytes = new SvLockBytes( pStream, TRUE ); + xInputStream = new utl::OInputStreamHelper( xLockBytes, nBytes ); + + bDone = aSignatureHelper.ReadAndVerifySignatue( xInputStream ); + xInputStream->closeInput(); + + if ( !bDone ) + { + fprintf( stderr, "Error in Signature!\n" ); + } + else + { + fprintf( stdout, "Signatures verified without any problems!\n" ); + } + + aSignatureHelper.EndMission(); + + fprintf( stdout, "------------- Signature details -------------\n" ); + fprintf( stdout, "%s", + rtl::OUStringToOString( + getSignatureInformations(aSignatureHelper.GetSignatureInformations(), aSignatureHelper.GetSecurityEnvironment()), + RTL_TEXTENCODING_UTF8).getStr()); + + fprintf( stdout, "------ Mission 5 : verify the second signature file ...\n"); + + aSignatureHelper.StartMission(); + + pStream = new SvFileStream( aSIGFileName2, STREAM_READ ); + pStream->Seek( STREAM_SEEK_TO_END ); + nBytes = pStream->Tell(); + pStream->Seek( STREAM_SEEK_TO_BEGIN ); + xLockBytes = new SvLockBytes( pStream, TRUE ); + xInputStream = new utl::OInputStreamHelper( xLockBytes, nBytes ); + + bDone = aSignatureHelper.ReadAndVerifySignatue( xInputStream ); + xInputStream->closeInput(); + + if ( !bDone ) + { + fprintf( stderr, "Error in Signature!\n" ); + } + else + { + fprintf( stdout, "Signatures verified without any problems!\n" ); + } + + aSignatureHelper.EndMission(); + + fprintf( stdout, "------------- Signature details -------------\n" ); + fprintf( stdout, "%s", + rtl::OUStringToOString( + getSignatureInformations(aSignatureHelper.GetSignatureInformations(), aSignatureHelper.GetSecurityEnvironment()), + RTL_TEXTENCODING_UTF8).getStr()); + + return 0; +} + diff --git a/xmlsecurity/tools/demo/signdemo.cxx b/xmlsecurity/tools/demo/signdemo.cxx new file mode 100644 index 000000000000..908a9b794cdb --- /dev/null +++ b/xmlsecurity/tools/demo/signdemo.cxx @@ -0,0 +1,223 @@ +/************************************************************************* + * + * $RCSfile: signdemo.cxx,v $ + * + * $Revision: 1.1.1.1 $ + * + * last change: $Author: mt $ $Date: 2004-07-12 13:15:30 $ + * + * The Contents of this file are made available subject to the terms of + * either of the following licenses + * + * - GNU Lesser General Public License Version 2.1 + * - Sun Industry Standards Source License Version 1.1 + * + * Sun Microsystems Inc., October, 2000 + * + * GNU Lesser General Public License Version 2.1 + * ============================================= + * Copyright 2000 by Sun Microsystems, Inc. + * 901 San Antonio Road, Palo Alto, CA 94303, USA + * + * This library is free software; you can redistribute it and/or + * modify it under the terms of the GNU Lesser General Public + * License version 2.1, as published by the Free Software Foundation. + * + * This library 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 for more details. + * + * You should have received a copy of the GNU Lesser General Public + * License along with this library; if not, write to the Free Software + * Foundation, Inc., 59 Temple Place, Suite 330, Boston, + * MA 02111-1307 USA + * + * + * Sun Industry Standards Source License Version 1.1 + * ================================================= + * The contents of this file are subject to the Sun Industry Standards + * Source License Version 1.1 (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.openoffice.org/license.html. + * + * Software provided under this License is provided on an "AS IS" basis, + * WITHOUT WARRANTY OF ANY KIND, EITHER EXPRESSED OR IMPLIED, INCLUDING, + * WITHOUT LIMITATION, WARRANTIES THAT THE SOFTWARE IS FREE OF DEFECTS, + * MERCHANTABLE, FIT FOR A PARTICULAR PURPOSE, OR NON-INFRINGING. + * See the License for the specific provisions governing your rights and + * obligations concerning the Software. + * + * The Initial Developer of the Original Code is: Sun Microsystems, Inc. + * + * Copyright: 2000 by Sun Microsystems, Inc. + * + * All Rights Reserved. + * + * Contributor(s): _______________________________________ + * + * + ************************************************************************/ + +#include <stdio.h> +#include "util.hxx" + +#include <rtl/ustring.hxx> +#include <cppuhelper/servicefactory.hxx> +#include <com/sun/star/lang/XComponent.hpp> +#include <com/sun/star/beans/PropertyValue.hpp> +#include <unotools/streamhelper.hxx> + +namespace cssu = com::sun::star::uno; +namespace cssl = com::sun::star::lang; +namespace cssxc = com::sun::star::xml::crypto; +namespace cssi = com::sun::star::io; + +int SAL_CALL main( int argc, char **argv ) +{ + if( argc != 6 ) + { + fprintf( stderr, "Usage: %s <rdb file> <signature file> <xml stream file> <binary stream file> <cryptoken>\n" , argv[0] ) ; + return -1 ; + } + + /* + * creates a component factory from local rdb file. + */ + cssu::Reference< cssl::XMultiServiceFactory > xManager = NULL ; + cssu::Reference< cssu::XComponentContext > xContext = NULL ; + try + { + xManager = serviceManager( xContext , rtl::OUString::createFromAscii( "local" ), rtl::OUString::createFromAscii( argv[1] ) ) ; + OSL_ENSURE( xManager.is() , + "ServicesManager - " + "Cannot get service manager" ); + + fprintf( stdout , "xManager created.\n" ) ; + } + catch( cssu::Exception& e ) + { + fprintf( stderr , "Error Message: %s\n" , rtl::OUStringToOString( e.Message , RTL_TEXTENCODING_ASCII_US ).getStr() ) ; + return -1; + } + + /* + * creates a signature helper + */ + XMLSignatureHelper aSignatureHelper( xManager ); + + /* + * creates a security context. + */ + bool bInit = aSignatureHelper.Init( rtl::OUString::createFromAscii(argv[5]) ); + if ( !bInit ) + { + fprintf( stderr, "Error initializing security context!\n" ); + return -1; + } + + aSignatureHelper.StartMission(); + + /* + * select a private key certificate + */ + cssu::Reference< cssxc::XSecurityEnvironment > xSecurityEnvironment = aSignatureHelper.GetSecurityEnvironment(); + cssu::Sequence< cssu::Reference< ::com::sun::star::security::XCertificate > > xPersonalCerts + = xSecurityEnvironment->getPersonalCertificates() ; + int length = xPersonalCerts.getLength(); + int i; + + fprintf( stdout, "\nSelect a private key certificate for the new signature\n" ) ; + fprintf( stdout, "================================================================================\n" ) ; + for( i = 0; i < length; i ++ ) + { + fprintf( stdout, "%d:issuer=[%s] subject=[%s]\n", + i+1, + rtl::OUStringToOString( xPersonalCerts[i]->getIssuerName(), RTL_TEXTENCODING_ASCII_US ).getStr(), + rtl::OUStringToOString( xPersonalCerts[i]->getSubjectName(), RTL_TEXTENCODING_ASCII_US ).getStr()); + } + + fprintf( stdout, "================================================================================\n" ) ; + bool bInvalid = false; + int sel = 0; + + do + { + if (bInvalid) + { + fprintf( stdout, "Invalid value! " ); + } + + fprintf( stdout, "Select <1-%d>:", length ) ; + fscanf( stdin, "%d", &sel ) ; + bInvalid = true; + }while(sel<1 || sel>length); + + sel--; + + /* + * creates a new signature id + */ + sal_Int32 nSecurityId = aSignatureHelper.GetNewSecurityId(); + + /* + * configures the X509 certificate + */ + aSignatureHelper.SetX509Certificate( + nSecurityId, + xPersonalCerts[sel]->getIssuerName(), + bigIntegerToNumericString( xPersonalCerts[sel]->getSerialNumber())); + + /* + * configures date/time + */ + aSignatureHelper.SetDateTime( + nSecurityId, + rtl::OUString::createFromAscii("2002-07-06"), + rtl::OUString::createFromAscii("15:25:20")); + + /* + * signs the xml stream + */ + rtl::OUString aXMLFileName = rtl::OUString::createFromAscii(argv[3]); + aSignatureHelper.AddForSigning( nSecurityId, aXMLFileName, aXMLFileName, sal_False ); + + /* + * signs the binary stream + */ + rtl::OUString aBINFileName = rtl::OUString::createFromAscii(argv[4]); + aSignatureHelper.AddForSigning( nSecurityId, aBINFileName, aBINFileName, sal_True ); + + /* + * creates the output stream + */ + rtl::OUString aSIGFileName = rtl::OUString::createFromAscii(argv[2]); + SvFileStream* pStream = new SvFileStream( aSIGFileName, STREAM_WRITE ); + SvLockBytesRef xLockBytes = new SvLockBytes( pStream, TRUE ); + cssu::Reference< cssi::XOutputStream > xOutputStream = new utl::OOutputStreamHelper( xLockBytes ); + + /* + * creates signature + */ + bool bDone = aSignatureHelper.CreateAndWriteSignatue( xOutputStream ); + + if ( !bDone ) + { + fprintf( stderr, "Error creating Signature!\n" ); + } + else + { + fprintf( stdout, "Signature successfully created!\n" ); + } + + aSignatureHelper.EndMission(); + + fprintf( stdout, "------------- Signature details -------------\n" ); + fprintf( stdout, "%s", + rtl::OUStringToOString( + getSignatureInformations(aSignatureHelper.GetSignatureInformations(), aSignatureHelper.GetSecurityEnvironment()), + RTL_TEXTENCODING_UTF8).getStr()); + + return 0; +} + diff --git a/xmlsecurity/tools/demo/util.cxx b/xmlsecurity/tools/demo/util.cxx new file mode 100644 index 000000000000..a73179805a5e --- /dev/null +++ b/xmlsecurity/tools/demo/util.cxx @@ -0,0 +1,215 @@ +/************************************************************************* + * + * $RCSfile: util.cxx,v $ + * + * $Revision: 1.1.1.1 $ + * + * last change: $Author: mt $ $Date: 2004-07-12 13:15:30 $ + * + * The Contents of this file are made available subject to the terms of + * either of the following licenses + * + * - GNU Lesser General Public License Version 2.1 + * - Sun Industry Standards Source License Version 1.1 + * + * Sun Microsystems Inc., October, 2000 + * + * GNU Lesser General Public License Version 2.1 + * ============================================= + * Copyright 2000 by Sun Microsystems, Inc. + * 901 San Antonio Road, Palo Alto, CA 94303, USA + * + * This library is free software; you can redistribute it and/or + * modify it under the terms of the GNU Lesser General Public + * License version 2.1, as published by the Free Software Foundation. + * + * This library 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 for more details. + * + * You should have received a copy of the GNU Lesser General Public + * License along with this library; if not, write to the Free Software + * Foundation, Inc., 59 Temple Place, Suite 330, Boston, + * MA 02111-1307 USA + * + * + * Sun Industry Standards Source License Version 1.1 + * ================================================= + * The contents of this file are subject to the Sun Industry Standards + * Source License Version 1.1 (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.openoffice.org/license.html. + * + * Software provided under this License is provided on an "AS IS" basis, + * WITHOUT WARRANTY OF ANY KIND, EITHER EXPRESSED OR IMPLIED, INCLUDING, + * WITHOUT LIMITATION, WARRANTIES THAT THE SOFTWARE IS FREE OF DEFECTS, + * MERCHANTABLE, FIT FOR A PARTICULAR PURPOSE, OR NON-INFRINGING. + * See the License for the specific provisions governing your rights and + * obligations concerning the Software. + * + * The Initial Developer of the Original Code is: Sun Microsystems, Inc. + * + * Copyright: 2000 by Sun Microsystems, Inc. + * + * All Rights Reserved. + * + * Contributor(s): _______________________________________ + * + * + ************************************************************************/ + +#include "util.hxx" + +#include <com/sun/star/registry/XImplementationRegistration.hpp> +#include <cppuhelper/bootstrap.hxx> + +namespace cssu = com::sun::star::uno; +namespace cssl = com::sun::star::lang; + +cssu::Reference< cssl::XMultiServiceFactory > serviceManager( + cssu::Reference< cssu::XComponentContext > &xContext, + rtl::OUString sUnoUrl, + rtl::OUString sRdbUrl ) + throw( cssu::RuntimeException , cssu::Exception ) +{ + cssu::Reference< cssl::XMultiComponentFactory > xLocalServiceManager = NULL ; + cssu::Reference< cssu::XComponentContext > xLocalComponentContext = NULL ; + + cssu::Reference< ::com::sun::star::registry::XSimpleRegistry > xSimpleRegistry + = ::cppu::createSimpleRegistry(); + OSL_ENSURE( xSimpleRegistry.is(), + "serviceManager - " + "Cannot create simple registry" ) ; + + xSimpleRegistry->open(sRdbUrl, sal_True, sal_False); + OSL_ENSURE( xSimpleRegistry->isValid() , + "serviceManager - " + "Cannot open xml security registry rdb" ) ; + + xLocalComponentContext = ::cppu::bootstrap_InitialComponentContext( xSimpleRegistry ) ; + OSL_ENSURE( xLocalComponentContext.is() , + "serviceManager - " + "Cannot create intial component context" ) ; + + xLocalServiceManager = xLocalComponentContext->getServiceManager() ; + OSL_ENSURE( xLocalServiceManager.is() , + "serviceManager - " + "Cannot create intial service manager" ) ; + + xContext = xLocalComponentContext ; + return cssu::Reference< cssl::XMultiServiceFactory >(xLocalServiceManager, cssu::UNO_QUERY) ; +} + +::rtl::OUString getSignatureInformation( + const SignatureInformation& infor, + cssu::Reference< ::com::sun::star::xml::crypto::XSecurityEnvironment >& xSecurityEnvironment ) +{ + char* status[5]={"INIT", "CREATION_SUCCEED", "CREATION_FAIL", "VERIFY_SUCCEED", "VERIFY_FAIL"}; + + rtl::OUString result; + + result += rtl::OUString::createFromAscii( "Security Id : " ) + +rtl::OUString::valueOf(infor.nSecurityId) + +rtl::OUString::createFromAscii( "\n" ); + result += rtl::OUString::createFromAscii( "Status : " ) + +rtl::OUString::createFromAscii( status[infor.nStatus] ) + +rtl::OUString::createFromAscii( "\n" ); + + const SignatureReferenceInformations& rInfors = infor.vSignatureReferenceInfors; + int i; + int size = rInfors.size(); + + result += rtl::OUString::createFromAscii( "--References :\n" ); + for (i=0; i<size; i++) + { + result += rtl::OUString::createFromAscii( "---URI : " ); + result += rInfors[i].ouURI; + result += rtl::OUString::createFromAscii( "\n" ); + result += rtl::OUString::createFromAscii( "---DigestValue : " ); + result += rInfors[i].ouDigestValue; + result += rtl::OUString::createFromAscii( "\n" ); + } + + if (infor.ouX509IssuerName.getLength()>0) + { + result += rtl::OUString::createFromAscii( "--X509IssuerName :\n" ); + result += infor.ouX509IssuerName; + result += rtl::OUString::createFromAscii( "\n" ); + } + + if (infor.ouX509SerialNumber.getLength()>0) + { + result += rtl::OUString::createFromAscii( "--X509SerialNumber :\n" ); + result += infor.ouX509SerialNumber; + result += rtl::OUString::createFromAscii( "\n" ); + } + + if (infor.ouX509Certificate.getLength()>0) + { + result += rtl::OUString::createFromAscii( "--X509Certificate :\n" ); + result += infor.ouX509Certificate; + result += rtl::OUString::createFromAscii( "\n" ); + } + + if (infor.ouSignatureValue.getLength()>0) + { + result += rtl::OUString::createFromAscii( "--SignatureValue :\n" ); + result += infor.ouSignatureValue; + result += rtl::OUString::createFromAscii( "\n" ); + } + + if (infor.ouDate.getLength()>0) + { + result += rtl::OUString::createFromAscii( "--Date :\n" ); + result += infor.ouDate; + result += rtl::OUString::createFromAscii( "\n" ); + } + + if (infor.ouTime.getLength()>0) + { + result += rtl::OUString::createFromAscii( "--Time :\n" ); + result += infor.ouTime; + result += rtl::OUString::createFromAscii( "\n" ); + } + + if (infor.ouX509IssuerName.getLength()>0 && infor.ouX509SerialNumber.getLength()>0 && xSecurityEnvironment.is()) + { + result += rtl::OUString::createFromAscii( "--Certificate Path :\n" ); + cssu::Reference< ::com::sun::star::security::XCertificate > xCert + = xSecurityEnvironment->getCertificate( infor.ouX509IssuerName, numericStringToBigInteger(infor.ouX509SerialNumber) ); + + cssu::Sequence < cssu::Reference< ::com::sun::star::security::XCertificate > > xCertPath + = xSecurityEnvironment->buildCertificatePath( xCert ) ; + + for( int i = 0; i < xCertPath.getLength(); i++ ) + { + result += xCertPath[i]->getSubjectName(); + result += rtl::OUString::createFromAscii( " << " ); + } + + result += rtl::OUString::createFromAscii( "\n" ); + } + + result += rtl::OUString::createFromAscii( "\n" ); + return result; +} + +::rtl::OUString getSignatureInformations( + const SignatureInformations& SignatureInformations, + cssu::Reference< ::com::sun::star::xml::crypto::XSecurityEnvironment >& xSecurityEnvironment ) +{ + rtl::OUString result; + int i; + int size = SignatureInformations.size(); + + for (i=0; i<size; i++) + { + const SignatureInformation& infor = SignatureInformations[i]; + result += getSignatureInformation( infor, xSecurityEnvironment ); + } + + result += rtl::OUString::createFromAscii( "\n" ); + + return result; +} diff --git a/xmlsecurity/tools/demo/util.hxx b/xmlsecurity/tools/demo/util.hxx new file mode 100644 index 000000000000..788448197ac9 --- /dev/null +++ b/xmlsecurity/tools/demo/util.hxx @@ -0,0 +1,87 @@ +/************************************************************************* + * + * $RCSfile: util.hxx,v $ + * + * $Revision: 1.1.1.1 $ + * + * last change: $Author: mt $ $Date: 2004-07-12 13:15:30 $ + * + * The Contents of this file are made available subject to the terms of + * either of the following licenses + * + * - GNU Lesser General Public License Version 2.1 + * - Sun Industry Standards Source License Version 1.1 + * + * Sun Microsystems Inc., October, 2000 + * + * GNU Lesser General Public License Version 2.1 + * ============================================= + * Copyright 2000 by Sun Microsystems, Inc. + * 901 San Antonio Road, Palo Alto, CA 94303, USA + * + * This library is free software; you can redistribute it and/or + * modify it under the terms of the GNU Lesser General Public + * License version 2.1, as published by the Free Software Foundation. + * + * This library 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 for more details. + * + * You should have received a copy of the GNU Lesser General Public + * License along with this library; if not, write to the Free Software + * Foundation, Inc., 59 Temple Place, Suite 330, Boston, + * MA 02111-1307 USA + * + * + * Sun Industry Standards Source License Version 1.1 + * ================================================= + * The contents of this file are subject to the Sun Industry Standards + * Source License Version 1.1 (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.openoffice.org/license.html. + * + * Software provided under this License is provided on an "AS IS" basis, + * WITHOUT WARRANTY OF ANY KIND, EITHER EXPRESSED OR IMPLIED, INCLUDING, + * WITHOUT LIMITATION, WARRANTIES THAT THE SOFTWARE IS FREE OF DEFECTS, + * MERCHANTABLE, FIT FOR A PARTICULAR PURPOSE, OR NON-INFRINGING. + * See the License for the specific provisions governing your rights and + * obligations concerning the Software. + * + * The Initial Developer of the Original Code is: Sun Microsystems, Inc. + * + * Copyright: 2000 by Sun Microsystems, Inc. + * + * All Rights Reserved. + * + * Contributor(s): _______________________________________ + * + * + ************************************************************************/ + +#include <stdio.h> + +#include <rtl/ustring.hxx> + +#include <cppuhelper/servicefactory.hxx> +#include <cppuhelper/implbase1.hxx> + +#include <xmlsecurity/xmlsignaturehelper.hxx> + +#include <drafts/com/sun/star/xml/crypto/XUriBinding.hpp> + +/* + * get service manager and context + */ +::com::sun::star::uno::Reference< + ::com::sun::star::lang::XMultiServiceFactory > + serviceManager( ::com::sun::star::uno::Reference< + ::com::sun::star::uno::XComponentContext > &xContext, + ::rtl::OUString sUnoUrl, + ::rtl::OUString sRdbUrl) + throw( ::com::sun::star::uno::RuntimeException , ::com::sun::star::uno::Exception ); + +::rtl::OUString getSignatureInformations( + const SignatureInformations& SignatureInformations, + ::com::sun::star::uno::Reference< ::drafts::com::sun::star::xml::crypto::XSecurityEnvironment >& xSecurityEnvironment ); +
\ No newline at end of file diff --git a/xmlsecurity/tools/demo/verifydemo.cxx b/xmlsecurity/tools/demo/verifydemo.cxx new file mode 100644 index 000000000000..0ba3e65c9d6d --- /dev/null +++ b/xmlsecurity/tools/demo/verifydemo.cxx @@ -0,0 +1,180 @@ +/************************************************************************* + * + * $RCSfile: verifydemo.cxx,v $ + * + * $Revision: 1.1.1.1 $ + * + * last change: $Author: mt $ $Date: 2004-07-12 13:15:30 $ + * + * The Contents of this file are made available subject to the terms of + * either of the following licenses + * + * - GNU Lesser General Public License Version 2.1 + * - Sun Industry Standards Source License Version 1.1 + * + * Sun Microsystems Inc., October, 2000 + * + * GNU Lesser General Public License Version 2.1 + * ============================================= + * Copyright 2000 by Sun Microsystems, Inc. + * 901 San Antonio Road, Palo Alto, CA 94303, USA + * + * This library is free software; you can redistribute it and/or + * modify it under the terms of the GNU Lesser General Public + * License version 2.1, as published by the Free Software Foundation. + * + * This library 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 for more details. + * + * You should have received a copy of the GNU Lesser General Public + * License along with this library; if not, write to the Free Software + * Foundation, Inc., 59 Temple Place, Suite 330, Boston, + * MA 02111-1307 USA + * + * + * Sun Industry Standards Source License Version 1.1 + * ================================================= + * The contents of this file are subject to the Sun Industry Standards + * Source License Version 1.1 (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.openoffice.org/license.html. + * + * Software provided under this License is provided on an "AS IS" basis, + * WITHOUT WARRANTY OF ANY KIND, EITHER EXPRESSED OR IMPLIED, INCLUDING, + * WITHOUT LIMITATION, WARRANTIES THAT THE SOFTWARE IS FREE OF DEFECTS, + * MERCHANTABLE, FIT FOR A PARTICULAR PURPOSE, OR NON-INFRINGING. + * See the License for the specific provisions governing your rights and + * obligations concerning the Software. + * + * The Initial Developer of the Original Code is: Sun Microsystems, Inc. + * + * Copyright: 2000 by Sun Microsystems, Inc. + * + * All Rights Reserved. + * + * Contributor(s): _______________________________________ + * + * + ************************************************************************/ + +#include <stdio.h> +#include "util.hxx" + +#include <rtl/ustring.hxx> +#include <cppuhelper/servicefactory.hxx> +#include <com/sun/star/lang/XComponent.hpp> +#include <com/sun/star/beans/PropertyValue.hpp> +#include <unotools/streamhelper.hxx> + +namespace cssu = com::sun::star::uno; +namespace cssl = com::sun::star::lang; +namespace cssxc = com::sun::star::xml::crypto; +namespace cssi = com::sun::star::io; + +long startVerifyHandler( void *, void * ) +{ + char answer; + fprintf( stdout, + "A signature is found, whether to verify it(y/n)?[y]:" ); + fscanf( stdin, "%c", &answer); + + return (answer == 'n')?0:1; +} + +int SAL_CALL main( int argc, char **argv ) +{ + if( argc != 4 ) + { + fprintf( stderr, "Usage: %s <rdb file> <signature file> <cryptoken>\n" , argv[0] ) ; + return -1 ; + } + + /* + * creates a component factory from local rdb file. + */ + cssu::Reference< cssl::XMultiServiceFactory > xManager = NULL ; + cssu::Reference< cssu::XComponentContext > xContext = NULL ; + try + { + xManager = serviceManager( xContext , rtl::OUString::createFromAscii( "local" ), rtl::OUString::createFromAscii( argv[1] ) ) ; + OSL_ENSURE( xManager.is() , + "ServicesManager - " + "Cannot get service manager" ); + + fprintf( stdout , "xManager created.\n" ) ; + } + catch( cssu::Exception& e ) + { + fprintf( stderr , "Error Message: %s\n" , rtl::OUStringToOString( e.Message , RTL_TEXTENCODING_ASCII_US ).getStr() ) ; + return -1; + } + + /* + * creates a signature helper + */ + XMLSignatureHelper aSignatureHelper( xManager ); + + /* + * creates a security context. + */ + bool bInit = aSignatureHelper.Init( rtl::OUString::createFromAscii(argv[3]) ); + if ( !bInit ) + { + fprintf( stderr, "Error initializing security context!" ); + return -1; + } + + /* + * configures the start-verify handler + */ + aSignatureHelper.SetStartVerifySignatureHdl( Link( NULL, startVerifyHandler ) ); + + aSignatureHelper.StartMission(); + + /* + * prepares the signature stream. + */ + rtl::OUString aSIGFileName = rtl::OUString::createFromAscii(argv[2]); + SvFileStream* pStream = new SvFileStream( aSIGFileName, STREAM_READ ); + pStream->Seek( STREAM_SEEK_TO_END ); + ULONG nBytes = pStream->Tell(); + pStream->Seek( STREAM_SEEK_TO_BEGIN ); + SvLockBytesRef xLockBytes = new SvLockBytes( pStream, TRUE ); + + /* + * creates the signature stream. + */ + cssu::Reference< cssi::XInputStream > xInputStream = new utl::OInputStreamHelper( xLockBytes, nBytes ); + + /* + * verifies the signature + */ + bool bDone = aSignatureHelper.ReadAndVerifySignatue( xInputStream ); + + /* + * closes the signature stream + */ + xInputStream->closeInput(); + + if ( !bDone ) + { + fprintf( stderr, "Error in Signature!\n" ); + } + else + { + fprintf( stdout, "Signatures verified without any problems!\n" ); + } + + aSignatureHelper.EndMission(); + + fprintf( stdout, "------------- Signature details -------------\n" ); + fprintf( stdout, "%s", + rtl::OUStringToOString( + getSignatureInformations(aSignatureHelper.GetSignatureInformations(), aSignatureHelper.GetSecurityEnvironment()), + RTL_TEXTENCODING_UTF8).getStr()); + + return 0; +} + |