2004-07-12 12:15:31 +00:00
/*************************************************************************
*
2008-04-10 23:52:25 +00:00
* DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER .
2004-07-12 12:15:31 +00:00
*
2010-02-12 15:01:35 +01:00
* Copyright 2000 , 2010 Oracle and / or its affiliates .
2004-07-12 12:15:31 +00:00
*
2008-04-10 23:52:25 +00:00
* OpenOffice . org - a multi - platform office productivity suite
2004-07-12 12:15:31 +00:00
*
2008-04-10 23:52:25 +00:00
* This file is part of OpenOffice . org .
2004-07-12 12:15:31 +00:00
*
2008-04-10 23:52:25 +00:00
* 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 .
2004-07-12 12:15:31 +00:00
*
2008-04-10 23:52:25 +00:00
* 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 ) .
2004-07-12 12:15:31 +00:00
*
2008-04-10 23:52:25 +00:00
* 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 .
2004-07-12 12:15:31 +00:00
*
* * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * */
2006-09-16 13:51:56 +00:00
// MARKER(update_precomp.py): autogen include statement, do not remove
# include "precompiled_xmlsecurity.hxx"
2004-07-12 12:15:31 +00:00
# include <sal/main.h>
# include <vcl/event.hxx>
# include <vcl/svapp.hxx>
# include <vcl/wrkwin.hxx>
# include <vcl/msgbox.hxx>
# include <vcl/fixed.hxx>
# include <vcl/edit.hxx>
# include <vcl/button.hxx>
# include <vcl/lstbox.hxx>
# include <svtools/filectrl.hxx>
# include <tools/urlobj.hxx>
# include <osl/file.hxx>
# include <svtools/docpasswdrequest.hxx>
# include <comphelper/processfactory.hxx>
# include <cppuhelper/servicefactory.hxx>
# include <cppuhelper/bootstrap.hxx>
# include <unotools/streamhelper.hxx>
# include <ucbhelper/contentbroker.hxx>
# include <ucbhelper/configurationkeys.hxx>
// Will be in comphelper if CWS MAV09 is integrated
2004-11-26 14:02:16 +00:00
# include <comphelper/storagehelper.hxx>
2004-07-12 12:15:31 +00:00
# include <com/sun/star/lang/XMultiServiceFactory.hpp>
# include <xmlsecurity/xmlsignaturehelper.hxx>
# include <xmlsecurity/digitalsignaturesdialog.hxx>
# include <xmlsecurity/certificatechooser.hxx>
2004-07-26 06:30:29 +00:00
# include <xmlsecurity/biginteger.hxx>
2004-07-12 12:15:31 +00:00
# include <com/sun/star/security/XDocumentDigitalSignatures.hpp>
using namespace : : com : : sun : : star ;
using namespace : : com : : sun : : star ;
void Main ( ) ;
# define TEXTFIELDWIDTH 80
# define TEXTFIELDSTARTX 10
# define EDITWIDTH 200
# define EDITHEIGHT 20
# define FIXEDLINEHEIGHT 15
# define BUTTONWIDTH 50
# define BUTTONHEIGHT 22
# define BUTTONSPACE 20
# define LISTBOXHEIGHT 120
2004-07-14 10:06:31 +00:00
// #define TEST_IMPLEMENTATION_DIRECTLY
2004-07-12 12:15:31 +00:00
// -----------------------------------------------------------------------
SAL_IMPLEMENT_MAIN ( )
{
uno : : Reference < lang : : XMultiServiceFactory > xMSF ;
try
{
uno : : Reference < uno : : XComponentContext > xCtx ( cppu : : defaultBootstrap_InitialComponentContext ( ) ) ;
if ( ! xCtx . is ( ) )
{
DBG_ERROR ( " Error creating initial component context! " ) ;
return - 1 ;
}
xMSF = uno : : Reference < lang : : XMultiServiceFactory > ( xCtx - > getServiceManager ( ) , uno : : UNO_QUERY ) ;
if ( ! xMSF . is ( ) )
{
DBG_ERROR ( " No service manager! " ) ;
return - 1 ;
}
// Init USB
uno : : Sequence < uno : : Any > aArgs ( 2 ) ;
aArgs [ 0 ] < < = rtl : : OUString : : createFromAscii ( UCB_CONFIGURATION_KEY1_LOCAL ) ;
aArgs [ 1 ] < < = rtl : : OUString : : createFromAscii ( UCB_CONFIGURATION_KEY2_OFFICE ) ;
sal_Bool bSuccess = : : ucb : : ContentBroker : : initialize ( xMSF , aArgs ) ;
if ( ! bSuccess )
{
DBG_ERROR ( " Error creating UCB! " ) ;
return - 1 ;
}
}
catch ( uno : : Exception const & )
{
DBG_ERROR ( " Exception during creation of initial component context! " ) ;
return - 1 ;
}
comphelper : : setProcessServiceFactory ( xMSF ) ;
InitVCL ( xMSF ) ;
: : Main ( ) ;
DeInitVCL ( ) ;
return 0 ;
}
// -----------------------------------------------------------------------
class MyWin : public WorkWindow
{
private :
FixedLine maTokenLine ;
CheckBox maCryptoCheckBox ;
FixedText maFixedTextTokenName ;
FileControl maEditTokenName ;
FixedLine maTest1Line ;
FixedText maFixedTextXMLFileName ;
FileControl maEditXMLFileName ;
FixedText maFixedTextBINFileName ;
FileControl maEditBINFileName ;
FixedText maFixedTextSIGFileName ;
FileControl maEditSIGFileName ;
PushButton maSignButton ;
PushButton maVerifyButton ;
FixedLine maTest2Line ;
FixedText maFixedTextDOCFileName ;
FileControl maEditDOCFileName ;
PushButton maDigitalSignaturesButton ;
2004-07-14 10:06:31 +00:00
PushButton maVerifyDigitalSignaturesButton ;
2004-07-12 12:15:31 +00:00
FixedLine maHintLine ;
FixedText maHintText ;
DECL_LINK ( CryptoCheckBoxHdl , CheckBox * ) ;
DECL_LINK ( SignButtonHdl , Button * ) ;
DECL_LINK ( VerifyButtonHdl , Button * ) ;
DECL_LINK ( DigitalSignaturesWithServiceHdl , Button * ) ;
2004-07-14 10:06:31 +00:00
DECL_LINK ( VerifyDigitalSignaturesHdl , Button * ) ;
2004-07-12 12:15:31 +00:00
DECL_LINK ( DigitalSignaturesWithTokenHdl , Button * ) ;
DECL_LINK ( StartVerifySignatureHdl , void * ) ;
public :
MyWin ( Window * pParent , WinBits nWinStyle ) ;
} ;
// -----------------------------------------------------------------------
void Main ( )
{
MyWin aMainWin ( NULL , WB_APP | WB_STDWORK | WB_3DLOOK ) ;
aMainWin . Show ( ) ;
Application : : Execute ( ) ;
}
// -----------------------------------------------------------------------
MyWin : : MyWin ( Window * pParent , WinBits nWinStyle ) :
WorkWindow ( pParent , nWinStyle ) ,
maTokenLine ( this ) ,
maTest1Line ( this ) ,
maTest2Line ( this ) ,
maHintLine ( this ) ,
maFixedTextXMLFileName ( this ) ,
maEditXMLFileName ( this , WB_BORDER ) ,
maFixedTextBINFileName ( this ) ,
maEditBINFileName ( this , WB_BORDER ) ,
maFixedTextSIGFileName ( this ) ,
maEditSIGFileName ( this , WB_BORDER ) ,
maFixedTextTokenName ( this ) ,
maEditTokenName ( this , WB_BORDER ) ,
maFixedTextDOCFileName ( this ) ,
maEditDOCFileName ( this , WB_BORDER ) ,
maSignButton ( this ) ,
maVerifyButton ( this ) ,
maDigitalSignaturesButton ( this ) ,
2004-07-14 10:06:31 +00:00
maVerifyDigitalSignaturesButton ( this ) ,
2004-07-12 12:15:31 +00:00
maHintText ( this , WB_WORDBREAK ) ,
maCryptoCheckBox ( this )
{
2004-07-14 10:06:31 +00:00
# ifdef TEST_IMPLEMENTATION_DIRECTLY
2004-07-12 12:15:31 +00:00
Size aOutputSize ( 400 , 600 ) ;
2004-07-14 10:06:31 +00:00
# else
Size aOutputSize ( 400 , 400 ) ;
# endif
2004-07-12 12:15:31 +00:00
SetOutputSizePixel ( aOutputSize ) ;
SetText ( String ( RTL_CONSTASCII_USTRINGPARAM ( " XML Signature Test " ) ) ) ;
long nY = 15 ;
maTokenLine . SetPosSizePixel ( TEXTFIELDSTARTX , nY , aOutputSize . Width ( ) - 2 * TEXTFIELDSTARTX , FIXEDLINEHEIGHT ) ;
maTokenLine . SetText ( String ( RTL_CONSTASCII_USTRINGPARAM ( " Crypto Settings " ) ) ) ;
maTokenLine . Show ( ) ;
nY + = EDITHEIGHT * 3 / 2 ;
maCryptoCheckBox . SetPosSizePixel ( TEXTFIELDSTARTX , nY , aOutputSize . Width ( ) - 2 * TEXTFIELDSTARTX , FIXEDLINEHEIGHT ) ;
2004-07-14 10:06:31 +00:00
maCryptoCheckBox . SetText ( String ( RTL_CONSTASCII_USTRINGPARAM ( " Use Default Token (NSS option only) " ) ) ) ;
2004-07-12 12:15:31 +00:00
maCryptoCheckBox . Check ( TRUE ) ;
maEditTokenName . Disable ( ) ;
maFixedTextTokenName . Disable ( ) ;
maCryptoCheckBox . SetClickHdl ( LINK ( this , MyWin , CryptoCheckBoxHdl ) ) ;
maCryptoCheckBox . Show ( ) ;
nY + = EDITHEIGHT ;
maFixedTextTokenName . SetPosSizePixel ( TEXTFIELDSTARTX , nY , TEXTFIELDWIDTH , EDITHEIGHT ) ;
maFixedTextTokenName . SetText ( String ( RTL_CONSTASCII_USTRINGPARAM ( " Crypto Token: " ) ) ) ;
maFixedTextTokenName . Show ( ) ;
maEditTokenName . SetPosSizePixel ( TEXTFIELDSTARTX + TEXTFIELDWIDTH , nY , EDITWIDTH , EDITHEIGHT ) ;
maEditTokenName . Show ( ) ;
nY + = EDITHEIGHT * 3 ;
2004-07-14 10:06:31 +00:00
# ifdef TEST_IMPLEMENTATION_DIRECTLY
2004-07-12 12:15:31 +00:00
maTest1Line . SetPosSizePixel ( TEXTFIELDSTARTX , nY , aOutputSize . Width ( ) - 2 * TEXTFIELDSTARTX , FIXEDLINEHEIGHT ) ;
2004-07-14 10:06:31 +00:00
maTest1Line . SetText ( String ( RTL_CONSTASCII_USTRINGPARAM ( " Test simple files " ) ) ) ;
2004-07-12 12:15:31 +00:00
maTest1Line . Show ( ) ;
nY + = EDITHEIGHT * 3 / 2 ;
maFixedTextXMLFileName . SetPosSizePixel ( TEXTFIELDSTARTX , nY , TEXTFIELDWIDTH , EDITHEIGHT ) ;
maFixedTextXMLFileName . SetText ( String ( RTL_CONSTASCII_USTRINGPARAM ( " XML File: " ) ) ) ;
maFixedTextXMLFileName . Show ( ) ;
maEditXMLFileName . SetPosSizePixel ( TEXTFIELDSTARTX + TEXTFIELDWIDTH , nY , EDITWIDTH , EDITHEIGHT ) ;
maEditXMLFileName . Show ( ) ;
nY + = EDITHEIGHT * 3 / 2 ;
maFixedTextBINFileName . SetPosSizePixel ( TEXTFIELDSTARTX , nY , TEXTFIELDWIDTH , EDITHEIGHT ) ;
maFixedTextBINFileName . SetText ( String ( RTL_CONSTASCII_USTRINGPARAM ( " Binary File: " ) ) ) ;
maFixedTextBINFileName . Show ( ) ;
maEditBINFileName . SetPosSizePixel ( TEXTFIELDSTARTX + TEXTFIELDWIDTH , nY , EDITWIDTH , EDITHEIGHT ) ;
maEditBINFileName . Show ( ) ;
nY + = EDITHEIGHT * 3 / 2 ;
maFixedTextSIGFileName . SetPosSizePixel ( TEXTFIELDSTARTX , nY , TEXTFIELDWIDTH , EDITHEIGHT ) ;
maFixedTextSIGFileName . SetText ( String ( RTL_CONSTASCII_USTRINGPARAM ( " Signature File: " ) ) ) ;
maFixedTextSIGFileName . Show ( ) ;
maEditSIGFileName . SetPosSizePixel ( TEXTFIELDSTARTX + TEXTFIELDWIDTH , nY , EDITWIDTH , EDITHEIGHT ) ;
maEditSIGFileName . Show ( ) ;
nY + = EDITHEIGHT * 2 ;
maSignButton . SetPosSizePixel ( TEXTFIELDSTARTX , nY , BUTTONWIDTH , BUTTONHEIGHT ) ;
maSignButton . SetText ( String ( RTL_CONSTASCII_USTRINGPARAM ( " Sign " ) ) ) ;
maSignButton . SetClickHdl ( LINK ( this , MyWin , SignButtonHdl ) ) ;
maSignButton . Show ( ) ;
maVerifyButton . SetPosSizePixel ( TEXTFIELDSTARTX + BUTTONWIDTH + BUTTONSPACE , nY , BUTTONWIDTH , BUTTONHEIGHT ) ;
maVerifyButton . SetText ( String ( RTL_CONSTASCII_USTRINGPARAM ( " Verify " ) ) ) ;
maVerifyButton . SetClickHdl ( LINK ( this , MyWin , VerifyButtonHdl ) ) ;
maVerifyButton . Show ( ) ;
nY + = EDITHEIGHT * 3 ;
2004-07-14 10:06:31 +00:00
# endif // TEST_IMPLEMENTATION_DIRECTLY
2004-07-12 12:15:31 +00:00
maTest2Line . SetPosSizePixel ( TEXTFIELDSTARTX , nY , aOutputSize . Width ( ) - 2 * TEXTFIELDSTARTX , FIXEDLINEHEIGHT ) ;
2004-07-14 10:06:31 +00:00
maTest2Line . SetText ( String ( RTL_CONSTASCII_USTRINGPARAM ( " Test Office Document " ) ) ) ;
2004-07-12 12:15:31 +00:00
maTest2Line . Show ( ) ;
nY + = EDITHEIGHT * 3 / 2 ;
2004-07-14 10:06:31 +00:00
2004-07-12 12:15:31 +00:00
maFixedTextDOCFileName . SetPosSizePixel ( TEXTFIELDSTARTX , nY , TEXTFIELDWIDTH , EDITHEIGHT ) ;
maFixedTextDOCFileName . SetText ( String ( RTL_CONSTASCII_USTRINGPARAM ( " Office File: " ) ) ) ;
maFixedTextDOCFileName . Show ( ) ;
maEditDOCFileName . SetPosSizePixel ( TEXTFIELDSTARTX + TEXTFIELDWIDTH , nY , EDITWIDTH , EDITHEIGHT ) ;
maEditDOCFileName . Show ( ) ;
nY + = EDITHEIGHT * 2 ;
maDigitalSignaturesButton . SetPosSizePixel ( TEXTFIELDSTARTX , nY , BUTTONWIDTH * 2 , BUTTONHEIGHT ) ;
maDigitalSignaturesButton . SetText ( String ( RTL_CONSTASCII_USTRINGPARAM ( " Digital Signatures... " ) ) ) ;
maDigitalSignaturesButton . SetClickHdl ( LINK ( this , MyWin , DigitalSignaturesWithServiceHdl ) ) ;
maDigitalSignaturesButton . Show ( ) ;
2004-07-14 10:06:31 +00:00
maVerifyDigitalSignaturesButton . SetPosSizePixel ( TEXTFIELDSTARTX + BUTTONWIDTH * 2 + BUTTONSPACE , nY , BUTTONWIDTH * 2 , BUTTONHEIGHT ) ;
maVerifyDigitalSignaturesButton . SetText ( String ( RTL_CONSTASCII_USTRINGPARAM ( " Verify Signatures " ) ) ) ;
maVerifyDigitalSignaturesButton . SetClickHdl ( LINK ( this , MyWin , VerifyDigitalSignaturesHdl ) ) ;
maVerifyDigitalSignaturesButton . Show ( ) ;
nY + = EDITHEIGHT * 2 ;
2004-07-12 12:15:31 +00:00
maHintLine . SetPosSizePixel ( TEXTFIELDSTARTX , nY , aOutputSize . Width ( ) - 2 * TEXTFIELDSTARTX , FIXEDLINEHEIGHT ) ;
maHintLine . Show ( ) ;
nY + = EDITHEIGHT * 2 ;
maHintText . SetPosSizePixel ( TEXTFIELDSTARTX , nY , aOutputSize . Width ( ) - 2 * TEXTFIELDSTARTX , aOutputSize . Height ( ) - nY ) ;
maHintText . SetText ( String ( RTL_CONSTASCII_USTRINGPARAM ( " Hint: Copy crypto files from xmlsecurity/tools/cryptoken/nss and sample files from xmlsecurity/tools/examples to <temp>/nss. \n This location will be used from the demo as the default location. " ) ) ) ;
maHintText . Show ( ) ;
// Help the user with some default values
: : rtl : : OUString aTempDirURL ;
: : osl : : File : : getTempDirURL ( aTempDirURL ) ;
INetURLObject aURLObj ( aTempDirURL ) ;
aURLObj . insertName ( String ( RTL_CONSTASCII_USTRINGPARAM ( " nss " ) ) , true ) ;
: : rtl : : OUString aNSSFolder = aURLObj . getFSysPath ( INetURLObject : : FSYS_DETECT ) ;
String aDefaultXMLFileName ( aNSSFolder ) ;
maEditXMLFileName . SetText ( aNSSFolder + String ( RTL_CONSTASCII_USTRINGPARAM ( " demo-sample.xml " ) ) ) ;
maEditBINFileName . SetText ( aNSSFolder + String ( RTL_CONSTASCII_USTRINGPARAM ( " demo-sample.gif " ) ) ) ;
maEditDOCFileName . SetText ( aNSSFolder + String ( RTL_CONSTASCII_USTRINGPARAM ( " demo-sample.sxw " ) ) ) ;
maEditSIGFileName . SetText ( aNSSFolder + String ( RTL_CONSTASCII_USTRINGPARAM ( " demo-result.xml " ) ) ) ;
maEditTokenName . SetText ( aNSSFolder ) ;
2004-07-14 10:06:31 +00:00
# ifdef WNT
maEditTokenName . SetText ( String ( ) ) ;
maEditTokenName . Disable ( ) ;
maCryptoCheckBox . Disable ( ) ;
# endif
2004-07-12 12:15:31 +00:00
}
IMPL_LINK ( MyWin , CryptoCheckBoxHdl , CheckBox * , EMPTYARG )
{
if ( maCryptoCheckBox . IsChecked ( ) )
{
maEditTokenName . Disable ( ) ;
maFixedTextTokenName . Disable ( ) ;
}
else
{
maEditTokenName . Enable ( ) ;
maFixedTextTokenName . Enable ( ) ;
}
return 1 ;
}
2004-07-14 10:06:31 +00:00
IMPL_LINK ( MyWin , DigitalSignaturesWithServiceHdl , Button * , EMPTYARG )
{
rtl : : OUString aDocFileName = maEditDOCFileName . GetText ( ) ;
uno : : Reference < embed : : XStorage > xStore = : : comphelper : : OStorageHelper : : GetStorageFromURL (
aDocFileName , embed : : ElementModes : : READWRITE , comphelper : : getProcessServiceFactory ( ) ) ;
uno : : Reference < security : : XDocumentDigitalSignatures > xD (
comphelper : : getProcessServiceFactory ( ) - > createInstance ( rtl : : OUString ( RTL_CONSTASCII_USTRINGPARAM ( " com.sun.star.security.DocumentDigitalSignatures " ) ) ) , uno : : UNO_QUERY ) ;
if ( xD . is ( ) )
2005-04-08 15:21:20 +00:00
xD - > signDocumentContent ( xStore , NULL ) ;
2004-07-14 10:06:31 +00:00
return 0 ;
}
IMPL_LINK ( MyWin , VerifyDigitalSignaturesHdl , Button * , EMPTYARG )
{
rtl : : OUString aDocFileName = maEditDOCFileName . GetText ( ) ;
uno : : Reference < embed : : XStorage > xStore = : : comphelper : : OStorageHelper : : GetStorageFromURL (
aDocFileName , embed : : ElementModes : : READWRITE , comphelper : : getProcessServiceFactory ( ) ) ;
uno : : Reference < security : : XDocumentDigitalSignatures > xD (
comphelper : : getProcessServiceFactory ( ) - > createInstance ( rtl : : OUString ( RTL_CONSTASCII_USTRINGPARAM ( " com.sun.star.security.DocumentDigitalSignatures " ) ) ) , uno : : UNO_QUERY ) ;
if ( xD . is ( ) )
{
2005-11-11 08:21:45 +00:00
uno : : Sequence < security : : DocumentSignatureInformation > aInfos = xD - > verifyDocumentContentSignatures ( xStore , NULL ) ;
2004-07-15 06:16:12 +00:00
int nInfos = aInfos . getLength ( ) ;
for ( int n = 0 ; n < nInfos ; n + + )
{
2005-11-11 08:21:45 +00:00
security : : DocumentSignatureInformation & rInf = aInfos [ n ] ;
2004-07-15 06:16:12 +00:00
String aText ( RTL_CONSTASCII_USTRINGPARAM ( " The document is signed by \n \n " ) ) ;
aText + = String ( rInf . Signer - > getSubjectName ( ) ) ;
aText + = String ( RTL_CONSTASCII_USTRINGPARAM ( " \n \n The signature is " ) ) ;
if ( ! rInf . SignatureIsValid )
aText + = String ( RTL_CONSTASCII_USTRINGPARAM ( " NOT " ) ) ;
aText + = String ( RTL_CONSTASCII_USTRINGPARAM ( " valid " ) ) ;
InfoBox ( this , aText ) . Execute ( ) ;
}
2004-07-14 10:06:31 +00:00
}
return 0 ;
}
# ifdef TEST_IMPLEMENTATION_DIRECTLY
IMPL_LINK ( MyWin , DigitalSignaturesWithTokenHdl , Button * , EMPTYARG )
{
String aDocFileName = maEditDOCFileName . GetText ( ) ;
String aTokenFileName = maEditTokenName . GetText ( ) ;
DigitalSignaturesDialog aSignaturesDialog ( this , comphelper : : getProcessServiceFactory ( ) , SignatureModeDocumentContent , false ) ;
bool bInit = aSignaturesDialog . Init ( aTokenFileName ) ;
if ( ! bInit )
{
ErrorBox ( this , WB_OK , String ( RTL_CONSTASCII_USTRINGPARAM ( " Error initializing security context! " ) ) ) . Execute ( ) ;
return 0 ;
}
uno : : Reference < embed : : XStorage > xStore = : : comphelper : : OStorageHelper : : GetStorageFromURL (
aDocFileName , embed : : ElementModes : : READWRITE , comphelper : : getProcessServiceFactory ( ) ) ;
aSignaturesDialog . SetStorage ( xStore ) ;
aSignaturesDialog . Execute ( ) ;
return 0 ;
}
2004-07-12 12:15:31 +00:00
IMPL_LINK ( MyWin , SignButtonHdl , Button * , EMPTYARG )
{
String aXMLFileName = maEditXMLFileName . GetText ( ) ;
String aBINFileName = maEditBINFileName . GetText ( ) ;
String aSIGFileName = maEditSIGFileName . GetText ( ) ;
String aTokenFileName ;
if ( ! maCryptoCheckBox . IsChecked ( ) )
aTokenFileName = maEditTokenName . GetText ( ) ;
XMLSignatureHelper aSignatureHelper ( comphelper : : getProcessServiceFactory ( ) ) ;
bool bInit = aSignatureHelper . Init ( aTokenFileName ) ;
if ( ! bInit )
{
ErrorBox ( this , WB_OK , String ( RTL_CONSTASCII_USTRINGPARAM ( " Error initializing security context! " ) ) ) . Execute ( ) ;
return 0 ;
}
uno : : Reference < : : com : : sun : : star : : security : : XCertificate > xCertToUse ;
CertificateChooser aChooser ( this , aSignatureHelper . GetSecurityEnvironment ( ) , SignatureInformations ( ) ) ;
if ( aChooser . Execute ( ) )
xCertToUse = aChooser . GetSelectedCertificate ( ) ;
if ( ! xCertToUse . is ( ) )
return 0 ;
aSignatureHelper . StartMission ( ) ;
sal_Int32 nSecurityId = aSignatureHelper . GetNewSecurityId ( ) ;
aSignatureHelper . SetX509Certificate ( nSecurityId , xCertToUse - > getIssuerName ( ) , bigIntegerToNumericString ( xCertToUse - > getSerialNumber ( ) ) ) ;
aSignatureHelper . AddForSigning ( nSecurityId , aXMLFileName , aXMLFileName , sal_False ) ;
aSignatureHelper . AddForSigning ( nSecurityId , aBINFileName , aBINFileName , sal_True ) ;
SvFileStream * pStream = new SvFileStream ( aSIGFileName , STREAM_WRITE ) ;
SvLockBytesRef xLockBytes = new SvLockBytes ( pStream , TRUE ) ;
uno : : Reference < io : : XOutputStream > xOutputStream = new utl : : OOutputStreamHelper ( xLockBytes ) ;
2004-07-14 10:06:31 +00:00
bool bDone = aSignatureHelper . CreateAndWriteSignature ( xOutputStream ) ;
2004-07-12 12:15:31 +00:00
aSignatureHelper . EndMission ( ) ;
if ( ! bDone )
{
ErrorBox ( this , WB_OK , String ( RTL_CONSTASCII_USTRINGPARAM ( " Error creating Signature! " ) ) ) . Execute ( ) ;
}
else
{
rtl : : OUString aInfo ( String ( RTL_CONSTASCII_USTRINGPARAM ( " Signature successfully created! \n \n " ) ) ) ;
// aInfo += getSignatureInformationmations( aSignatureHelper.getAllSignatureInformation(), aSignatureHelper.GetSecurityEnvironment() );
InfoBox ( this , aInfo ) . Execute ( ) ;
}
// Check for more detailed results...
return 0 ;
}
IMPL_LINK ( MyWin , VerifyButtonHdl , Button * , EMPTYARG )
{
String aXMLFileName = maEditXMLFileName . GetText ( ) ;
String aBINFileName = maEditBINFileName . GetText ( ) ;
String aSIGFileName = maEditSIGFileName . GetText ( ) ;
String aTokenFileName ;
if ( ! maCryptoCheckBox . IsChecked ( ) )
aTokenFileName = maEditTokenName . GetText ( ) ;
XMLSignatureHelper aSignatureHelper ( comphelper : : getProcessServiceFactory ( ) ) ;
bool bInit = aSignatureHelper . Init ( aTokenFileName ) ;
if ( ! bInit )
{
ErrorBox ( this , WB_OK , String ( RTL_CONSTASCII_USTRINGPARAM ( " Error initializing security context! " ) ) ) . Execute ( ) ;
return 0 ;
}
aSignatureHelper . SetStartVerifySignatureHdl ( LINK ( this , MyWin , StartVerifySignatureHdl ) ) ;
aSignatureHelper . StartMission ( ) ;
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 ) ;
uno : : Reference < io : : XInputStream > xInputStream = new utl : : OInputStreamHelper ( xLockBytes , nBytes ) ;
2004-07-14 10:06:31 +00:00
bool bDone = aSignatureHelper . ReadAndVerifySignature ( xInputStream ) ;
2004-07-12 12:15:31 +00:00
xInputStream - > closeInput ( ) ;
aSignatureHelper . EndMission ( ) ;
if ( ! bDone )
ErrorBox ( this , WB_OK , String ( RTL_CONSTASCII_USTRINGPARAM ( " Error in Signature! " ) ) ) . Execute ( ) ;
else
InfoBox ( this , String ( RTL_CONSTASCII_USTRINGPARAM ( " Signatures verified without any problems! " ) ) ) . Execute ( ) ;
return 0 ;
}
IMPL_LINK ( MyWin , StartVerifySignatureHdl , void * , EMPTYARG )
{
QueryBox aQueryBox ( this , WB_YES_NO | WB_DEF_YES , String ( RTL_CONSTASCII_USTRINGPARAM ( " Found Signature - Verify? " ) ) ) ;
return ( aQueryBox . Execute ( ) = = RET_YES ) ? 1 : 0 ;
}
2004-07-14 10:06:31 +00:00
# endif // #ifdef TEST_IMPLEMENTATION_DIRECTLY