Kaydet (Commit) 66164edf authored tarafından Mikhail Voytenko's avatar Mikhail Voytenko

mav60: #164341# introduce nss initialization for the case when mscrypto is used

üst ecea2657
......@@ -49,11 +49,11 @@ CFLAGS+=-DSYSTEM_LIBXML $(LIBXML_CFLAGS)
.ENDIF
.IF "$(CRYPTO_ENGINE)" == "mscrypto"
CDEFS += -DXMLSEC_CRYPTO_MSCRYPTO -DXMLSEC_NO_XSLT
.ELSE
CDEFS += -DXMLSEC_NO_XSLT
CDEFS += -DXMLSEC_CRYPTO_MSCRYPTO
.ENDIF
CDEFS += -DXMLSEC_NO_XSLT
# --- Files --------------------------------------------------------
SLOFILES = \
$(SLO)$/biginteger.obj \
......
......@@ -218,7 +218,7 @@ uno::Sequence< ::sal_Int8 > SAL_CALL OCipherContext::finalizeCipherContextAndDis
rtl_random_getBytes( aRandomPool, m_aLastBlock.getArray() + nOldLastBlockLen, nPaddingSize - 1 );
rtl_random_destroyPool ( aRandomPool );
}
m_aLastBlock[m_aLastBlock.getLength() - 1] = nPaddingSize;
m_aLastBlock[m_aLastBlock.getLength() - 1] = static_cast< sal_Int8 >( nPaddingSize );
}
// finally should the last block be smaller than two standard blocks
......
......@@ -102,7 +102,11 @@ $(MOZ_INC)$/profile \
#.ENDIF
.ENDIF
CDEFS += -DXMLSEC_CRYPTO_NSS -DXMLSEC_NO_XSLT
.IF "$(CRYPTO_ENGINE)" == "nss"
CDEFS += -DXMLSEC_CRYPTO_NSS
.ENDIF
CDEFS += -DXMLSEC_NO_XSLT
# --- Files --------------------------------------------------------
......@@ -118,16 +122,21 @@ SOLARINC += -I$(NSS_INC)
.ENDIF
SLOFILES = \
$(SLO)$/nssinitializer.obj \
$(SLO)$/digestcontext.obj \
$(SLO)$/ciphercontext.obj \
$(SLO)$/xsec_nss.obj
.IF "$(CRYPTO_ENGINE)" == "nss"
SLOFILES += \
$(SLO)$/securityenvironment_nssimpl.obj \
$(SLO)$/seinitializer_nssimpl.obj \
$(SLO)$/xmlencryption_nssimpl.obj \
$(SLO)$/xmlsecuritycontext_nssimpl.obj \
$(SLO)$/xmlsignature_nssimpl.obj \
$(SLO)$/x509certificate_nssimpl.obj \
$(SLO)$/seinitializer_nssimpl.obj \
$(SLO)$/digestcontext.obj \
$(SLO)$/ciphercontext.obj \
$(SLO)$/xsec_nss.obj \
$(SLO)$/secerror.obj
$(SLO)$/secerror.obj
.ENDIF
# --- Targets ------------------------------------------------------
......
This diff is collapsed.
/*************************************************************************
*
* 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.
*
************************************************************************/
#ifndef _NSSINITIALIZER_HXX
#define _NSSINITIALIZER_HXX
#include <com/sun/star/xml/crypto/XDigestContextSupplier.hpp>
#include <com/sun/star/xml/crypto/XCipherContextSupplier.hpp>
#include <com/sun/star/lang/XServiceInfo.hpp>
#include <com/sun/star/lang/XMultiServiceFactory.hpp>
#include <cppuhelper/implbase3.hxx>
#define NSS_SERVICE_NAME "com.sun.star.xml.crypto.NSSInitializer"
class ONSSInitializer : public cppu::WeakImplHelper3
<
::com::sun::star::xml::crypto::XDigestContextSupplier,
::com::sun::star::xml::crypto::XCipherContextSupplier,
::com::sun::star::lang::XServiceInfo
>
{
private:
::com::sun::star::uno::Reference< ::com::sun::star::lang::XMultiServiceFactory > mxMSF;
public:
ONSSInitializer( const ::com::sun::star::uno::Reference< ::com::sun::star::lang::XMultiServiceFactory > &rxMSF );
virtual ~ONSSInitializer();
bool initNSS( const ::com::sun::star::uno::Reference< ::com::sun::star::lang::XMultiServiceFactory > &xMSF );
/* XDigestContextSupplier */
virtual ::com::sun::star::uno::Reference< ::com::sun::star::xml::crypto::XDigestContext > SAL_CALL getDigestContext( ::sal_Int32 nDigestID, const ::com::sun::star::uno::Sequence< ::com::sun::star::beans::NamedValue >& aParams ) throw (::com::sun::star::lang::IllegalArgumentException, ::com::sun::star::uno::RuntimeException);
/* XCipherContextSupplier */
virtual ::com::sun::star::uno::Reference< ::com::sun::star::xml::crypto::XCipherContext > SAL_CALL getCipherContext( ::sal_Int32 nCipherID, const ::com::sun::star::uno::Sequence< ::sal_Int8 >& aKey, const ::com::sun::star::uno::Sequence< ::sal_Int8 >& aInitializationVector, ::sal_Bool bEncryption, const ::com::sun::star::uno::Sequence< ::com::sun::star::beans::NamedValue >& aParams ) throw (::com::sun::star::lang::IllegalArgumentException, ::com::sun::star::uno::RuntimeException);
/* XServiceInfo */
virtual rtl::OUString SAL_CALL getImplementationName()
throw (::com::sun::star::uno::RuntimeException);
virtual sal_Bool SAL_CALL supportsService( const rtl::OUString& ServiceName )
throw (::com::sun::star::uno::RuntimeException);
virtual ::com::sun::star::uno::Sequence< rtl::OUString > SAL_CALL getSupportedServiceNames()
throw (::com::sun::star::uno::RuntimeException);
};
rtl::OUString ONSSInitializer_getImplementationName()
throw ( ::com::sun::star::uno::RuntimeException );
sal_Bool SAL_CALL ONSSInitializer_supportsService( const rtl::OUString& ServiceName )
throw ( ::com::sun::star::uno::RuntimeException );
com::sun::star::uno::Sequence< rtl::OUString > SAL_CALL ONSSInitializer_getSupportedServiceNames()
throw ( ::com::sun::star::uno::RuntimeException );
com::sun::star::uno::Reference< ::com::sun::star::uno::XInterface >
SAL_CALL ONSSInitializer_createInstance( const ::com::sun::star::uno::Reference< ::com::sun::star::lang::XMultiServiceFactory > & rSMgr )
throw ( ::com::sun::star::uno::Exception );
#endif
......@@ -87,7 +87,29 @@ extern X509Certificate_NssImpl* NssPrivKeyToXCert( SECKEYPrivateKey* ) ;
struct UsageDescription
{
SECCertificateUsage usage;
char const * const description;
char const* description;
UsageDescription()
: usage( certificateUsageCheckAllUsages )
, description( NULL )
{}
UsageDescription( SECCertificateUsage i_usage, char const* i_description )
: usage( i_usage )
, description( i_description )
{}
UsageDescription( const UsageDescription& aDescription )
: usage( aDescription.usage )
, description( aDescription.description )
{}
UsageDescription& operator =( const UsageDescription& aDescription )
{
usage = aDescription.usage;
description = aDescription.description;
return *this;
}
};
......@@ -906,14 +928,12 @@ verifyCertificate( const Reference< csss::XCertificate >& aCert,
// certificateUsageAnyCA
// certificateUsageProtectedObjectSigner
UsageDescription arUsages[] =
{
{certificateUsageSSLClient, "certificateUsageSSLClient" },
{certificateUsageSSLServer, "certificateUsageSSLServer" },
{certificateUsageSSLCA, "certificateUsageSSLCA" },
{certificateUsageEmailSigner, "certificateUsageEmailSigner"}, //only usable for end certs
{certificateUsageEmailRecipient, "certificateUsageEmailRecipient"}
};
UsageDescription arUsages[5];
arUsages[0] = UsageDescription( certificateUsageSSLClient, "certificateUsageSSLClient" );
arUsages[1] = UsageDescription( certificateUsageSSLServer, "certificateUsageSSLServer" );
arUsages[2] = UsageDescription( certificateUsageSSLCA, "certificateUsageSSLCA" );
arUsages[3] = UsageDescription( certificateUsageEmailSigner, "certificateUsageEmailSigner" );
arUsages[4] = UsageDescription( certificateUsageEmailRecipient, "certificateUsageEmailRecipient" );
int numUsages = sizeof(arUsages) / sizeof(UsageDescription);
for (int i = 0; i < numUsages; i++)
......
......@@ -30,40 +30,21 @@
#include <com/sun/star/xml/crypto/XXMLSecurityContext.hpp>
#include <com/sun/star/xml/crypto/XSEInitializer.hpp>
#include <com/sun/star/xml/crypto/XDigestContextSupplier.hpp>
#include <com/sun/star/xml/crypto/XCipherContextSupplier.hpp>
#include <com/sun/star/lang/XUnoTunnel.hpp>
#include <com/sun/star/lang/XServiceInfo.hpp>
#include <com/sun/star/lang/XMultiServiceFactory.hpp>
#include <cppuhelper/implbase4.hxx>
#include <cppuhelper/implbase1.hxx>
#include <libxml/tree.h>
class SEInitializer_NssImpl : public cppu::WeakImplHelper4
#include "nssinitializer.hxx"
class SEInitializer_NssImpl : public cppu::ImplInheritanceHelper1
<
::com::sun::star::xml::crypto::XSEInitializer,
::com::sun::star::xml::crypto::XDigestContextSupplier,
::com::sun::star::xml::crypto::XCipherContextSupplier,
::com::sun::star::lang::XServiceInfo
ONSSInitializer,
::com::sun::star::xml::crypto::XSEInitializer
>
/****** SEInitializer_NssImpl.hxx/CLASS SEInitializer_NssImpl ***********
*
* NAME
* SEInitializer_NssImpl -- Class to initialize a Security Context
* instance
*
* FUNCTION
* Use this class to initialize a XmlSec based Security Context
* instance. After this instance is used up, use this class to free this
* instance.
******************************************************************************/
{
private:
::com::sun::star::uno::Reference< ::com::sun::star::lang::XMultiServiceFactory > mxMSF;
public:
SEInitializer_NssImpl(const ::com::sun::star::uno::Reference< ::com::sun::star::lang::XMultiServiceFactory > &rxMSF);
SEInitializer_NssImpl( const ::com::sun::star::uno::Reference< ::com::sun::star::lang::XMultiServiceFactory > &rxMSF );
virtual ~SEInitializer_NssImpl();
/* XSEInitializer */
......@@ -72,12 +53,6 @@ public:
SAL_CALL createSecurityContext( const ::rtl::OUString& )
throw (::com::sun::star::uno::RuntimeException);
/* XDigestContextSupplier */
virtual ::com::sun::star::uno::Reference< ::com::sun::star::xml::crypto::XDigestContext > SAL_CALL getDigestContext( ::sal_Int32 nDigestID, const ::com::sun::star::uno::Sequence< ::com::sun::star::beans::NamedValue >& aParams ) throw (::com::sun::star::lang::IllegalArgumentException, ::com::sun::star::uno::RuntimeException);
/* XCipherContextSupplier */
virtual ::com::sun::star::uno::Reference< ::com::sun::star::xml::crypto::XCipherContext > SAL_CALL getCipherContext( ::sal_Int32 nCipherID, const ::com::sun::star::uno::Sequence< ::sal_Int8 >& aKey, const ::com::sun::star::uno::Sequence< ::sal_Int8 >& aInitializationVector, ::sal_Bool bEncryption, const ::com::sun::star::uno::Sequence< ::com::sun::star::beans::NamedValue >& aParams ) throw (::com::sun::star::lang::IllegalArgumentException, ::com::sun::star::uno::RuntimeException);
/* XServiceInfo */
virtual rtl::OUString SAL_CALL getImplementationName( )
throw (::com::sun::star::uno::RuntimeException);
......
......@@ -125,13 +125,13 @@ sal_Int16 SAL_CALL X509Certificate_NssImpl :: getVersion() throw ( ::com::sun::s
//Convert the time to readable local time
PR_ExplodeTime( notBefore, PR_LocalTimeParameters, &explTime ) ;
dateTime.HundredthSeconds = explTime.tm_usec / 1000 ;
dateTime.Seconds = explTime.tm_sec ;
dateTime.Minutes = explTime.tm_min ;
dateTime.Hours = explTime.tm_hour ;
dateTime.Day = explTime.tm_mday ;
dateTime.Month = explTime.tm_month+1 ;
dateTime.Year = explTime.tm_year ;
dateTime.HundredthSeconds = static_cast< sal_Int16 >( explTime.tm_usec / 1000 );
dateTime.Seconds = static_cast< sal_Int16 >( explTime.tm_sec );
dateTime.Minutes = static_cast< sal_Int16 >( explTime.tm_min );
dateTime.Hours = static_cast< sal_Int16 >( explTime.tm_hour );
dateTime.Day = static_cast< sal_Int16 >( explTime.tm_mday );
dateTime.Month = static_cast< sal_Int16 >( explTime.tm_month+1 );
dateTime.Year = static_cast< sal_Int16 >( explTime.tm_year );
return dateTime ;
} else {
......@@ -154,13 +154,13 @@ sal_Int16 SAL_CALL X509Certificate_NssImpl :: getVersion() throw ( ::com::sun::s
//Convert the time to readable local time
PR_ExplodeTime( notAfter, PR_LocalTimeParameters, &explTime ) ;
dateTime.HundredthSeconds = explTime.tm_usec / 1000 ;
dateTime.Seconds = explTime.tm_sec ;
dateTime.Minutes = explTime.tm_min ;
dateTime.Hours = explTime.tm_hour ;
dateTime.Day = explTime.tm_mday ;
dateTime.Month = explTime.tm_month+1 ;
dateTime.Year = explTime.tm_year ;
dateTime.HundredthSeconds = static_cast< sal_Int16 >( explTime.tm_usec / 1000 );
dateTime.Seconds = static_cast< sal_Int16 >( explTime.tm_sec );
dateTime.Minutes = static_cast< sal_Int16 >( explTime.tm_min );
dateTime.Hours = static_cast< sal_Int16 >( explTime.tm_hour );
dateTime.Day = static_cast< sal_Int16 >( explTime.tm_mday );
dateTime.Month = static_cast< sal_Int16 >( explTime.tm_month+1 );
dateTime.Year = static_cast< sal_Int16 >( explTime.tm_year );
return dateTime ;
} else {
......
......@@ -56,21 +56,41 @@ void* SAL_CALL nss_component_getFactory( const sal_Char* pImplName , void* pServ
void* pRet = 0;
Reference< XSingleServiceFactory > xFactory ;
if( pImplName != NULL && pServiceManager != NULL ) {
if( XMLSignature_NssImpl::impl_getImplementationName().equals( OUString::createFromAscii( pImplName ) ) ) {
if( pImplName != NULL && pServiceManager != NULL )
{
#ifdef XMLSEC_CRYPTO_NSS
if( SEInitializer_NssImpl_getImplementationName().equals( OUString::createFromAscii( pImplName ) ) )
{
xFactory = Reference< XSingleServiceFactory >( createSingleFactory(
reinterpret_cast< XMultiServiceFactory * >( pServiceManager ),
OUString::createFromAscii( pImplName ),
SEInitializer_NssImpl_createInstance, SEInitializer_NssImpl_getSupportedServiceNames() ) );
}
else if( XMLSignature_NssImpl::impl_getImplementationName().equals( OUString::createFromAscii( pImplName ) ) )
{
xFactory = XMLSignature_NssImpl::impl_createFactory( reinterpret_cast< XMultiServiceFactory* >( pServiceManager ) ) ;
} else if( XMLSecurityContext_NssImpl::impl_getImplementationName().equals( OUString::createFromAscii( pImplName ) ) ) {
}
else if( XMLSecurityContext_NssImpl::impl_getImplementationName().equals( OUString::createFromAscii( pImplName ) ) )
{
xFactory = XMLSecurityContext_NssImpl::impl_createFactory( reinterpret_cast< XMultiServiceFactory* >( pServiceManager ) ) ;
} else if( SecurityEnvironment_NssImpl::impl_getImplementationName().equals( OUString::createFromAscii( pImplName ) ) ) {
}
else if( SecurityEnvironment_NssImpl::impl_getImplementationName().equals( OUString::createFromAscii( pImplName ) ) )
{
xFactory = SecurityEnvironment_NssImpl::impl_createFactory( reinterpret_cast< XMultiServiceFactory* >( pServiceManager ) ) ;
} else if( XMLEncryption_NssImpl::impl_getImplementationName().equals( OUString::createFromAscii( pImplName ) ) ) {
}
else if( XMLEncryption_NssImpl::impl_getImplementationName().equals( OUString::createFromAscii( pImplName ) ) )
{
xFactory = XMLEncryption_NssImpl::impl_createFactory( reinterpret_cast< XMultiServiceFactory* >( pServiceManager ) ) ;
} else if( SEInitializer_NssImpl_getImplementationName().equals( OUString::createFromAscii( pImplName ) ) ) {
}
#else
if( ONSSInitializer_getImplementationName().equals( OUString::createFromAscii( pImplName ) ) )
{
xFactory = Reference< XSingleServiceFactory >( createSingleFactory(
reinterpret_cast< XMultiServiceFactory * >( pServiceManager ),
OUString::createFromAscii( pImplName ),
SEInitializer_NssImpl_createInstance, SEInitializer_NssImpl_getSupportedServiceNames() ) );
ONSSInitializer_createInstance, ONSSInitializer_getSupportedServiceNames() ) );
}
#endif
}
if( xFactory.is() ) {
......
......@@ -83,10 +83,10 @@ SHL2LIBS= \
.IF "$(CRYPTO_ENGINE)" == "mscrypto"
SHL2LIBS += \
$(SLB)$/xs_mscrypt.lib
.ELSE
.ENDIF
SHL2LIBS += \
$(SLB)$/xs_nss.lib
.ENDIF
.ENDIF
......@@ -117,19 +117,22 @@ SHL2STDLIBS += $(NSS_LIB)
.IF "$(CRYPTO_ENGINE)" == "mscrypto"
SHL2STDLIBS+= $(MSCRYPTOLIBS)
# SHL2STDLIBS+= $(XMLSECLIB) $(LIBXML2LIB) $(NSS3LIB) $(NSPR4LIB) $(PLC4LIB)
SHL2STDLIBS+= $(NSS3LIB) $(NSPR4LIB)
.ELSE
SHL2STDLIBS+= $(NSSCRYPTOLIBS)
.ENDIF
SHL2IMPLIB = $(SHL2TARGET)
SHL2DEF = $(MISC)$/$(SHL2TARGET).def
DEF2NAME = $(SHL2TARGET)
.IF "$(CRYPTO_ENGINE)" == "mscrypto"
DEF2EXPORTFILE = exports_xsmscrypt.dxp
.ELSE
DEF2EXPORTFILE = exports_xsnss.dxp
.ENDIF
DEF2EXPORTFILE = exports_xsnss.dxp
SRSFILELIST= \
$(SRS)$/component.srs \
$(SRS)$/dialogs.srs
......
......@@ -31,7 +31,7 @@
<implementation name="com.sun.star.security.SerialNumberAdapter">
<service name="com.sun.star.security.SerialNumberAdapter"/>
</implementation>
<implementation name="com.sun.star.xml.security.bridge.xmlsec.SEInitializer_NssImpl">
<implementation name="com.sun.star.xml.security.bridge.xmlsec.NSSInitializer_NssImpl">
<service name="com.sun.star.xml.crypto.NSSInitializer"/>
</implementation>
<implementation name="com.sun.star.xml.security.bridge.xmlsec.SEInitializer_MSCryptImpl">
......
Markdown is supported
0% or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment