2010-10-12 15:57:08 +02:00
/* -*- Mode: C++; tab-width: 4; indent-tabs-mode: nil; c-basic-offset: 4 -*- */
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
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
// -----------------------------------------------------------------------
SAL_IMPLEMENT_MAIN ( )
{
uno : : Reference < lang : : XMultiServiceFactory > xMSF ;
try
{
uno : : Reference < uno : : XComponentContext > xCtx ( cppu : : defaultBootstrap_InitialComponentContext ( ) ) ;
if ( ! xCtx . is ( ) )
{
2011-03-01 17:55:09 +01:00
OSL_FAIL ( " Error creating initial component context! " ) ;
2004-07-12 12:15:31 +00:00
return - 1 ;
}
xMSF = uno : : Reference < lang : : XMultiServiceFactory > ( xCtx - > getServiceManager ( ) , uno : : UNO_QUERY ) ;
if ( ! xMSF . is ( ) )
{
2011-03-01 17:55:09 +01:00
OSL_FAIL ( " No service manager! " ) ;
2004-07-12 12:15:31 +00:00
return - 1 ;
}
// Init USB
uno : : Sequence < uno : : Any > aArgs ( 2 ) ;
2010-11-29 23:01:56 +01:00
aArgs [ 0 ] < < = rtl : : OUString ( RTL_CONSTASCII_USTRINGPARAM ( UCB_CONFIGURATION_KEY1_LOCAL ) ) ;
aArgs [ 1 ] < < = rtl : : OUString ( RTL_CONSTASCII_USTRINGPARAM ( UCB_CONFIGURATION_KEY2_OFFICE ) ) ;
2004-07-12 12:15:31 +00:00
sal_Bool bSuccess = : : ucb : : ContentBroker : : initialize ( xMSF , aArgs ) ;
if ( ! bSuccess )
{
2011-03-01 17:55:09 +01:00
OSL_FAIL ( " Error creating UCB! " ) ;
2004-07-12 12:15:31 +00:00
return - 1 ;
}
}
catch ( uno : : Exception const & )
{
2011-03-01 17:55:09 +01:00
OSL_FAIL ( " Exception during creation of initial component context! " ) ;
2004-07-12 12:15:31 +00:00
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
Size aOutputSize ( 400 , 400 ) ;
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) " ) ) ) ;
2011-01-14 14:16:44 +01:00
maCryptoCheckBox . Check ( sal_True ) ;
2004-07-12 12:15:31 +00:00
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 ;
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
}
2012-03-01 18:00:32 +01:00
IMPL_LINK_NOARG ( MyWin , CryptoCheckBoxHdl )
2004-07-12 12:15:31 +00:00
{
if ( maCryptoCheckBox . IsChecked ( ) )
{
maEditTokenName . Disable ( ) ;
maFixedTextTokenName . Disable ( ) ;
}
else
{
maEditTokenName . Enable ( ) ;
maFixedTextTokenName . Enable ( ) ;
}
return 1 ;
}
2012-03-01 18:00:32 +01:00
IMPL_LINK_NOARG ( MyWin , DigitalSignaturesWithServiceHdl )
2004-07-14 10:06:31 +00:00
{
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 ;
}
2012-03-01 18:00:32 +01:00
IMPL_LINK_NOARG ( MyWin , VerifyDigitalSignaturesHdl )
2004-07-14 10:06:31 +00:00
{
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 ;
}
2010-10-12 15:57:08 +02:00
/* vim:set shiftwidth=4 softtabstop=4 expandtab: */