diff -r 675a964f4eb5 -r 35751d3474b7 crypto/weakcryptospi/source/spi/cryptohashapi.cpp --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/crypto/weakcryptospi/source/spi/cryptohashapi.cpp Thu Sep 10 14:01:51 2009 +0300 @@ -0,0 +1,271 @@ +/* +* Copyright (c) 2006-2009 Nokia Corporation and/or its subsidiary(-ies). +* All rights reserved. +* This component and the accompanying materials are made available +* under the terms of the License "Eclipse Public License v1.0" +* which accompanies this distribution, and is available +* at the URL "http://www.eclipse.org/legal/epl-v10.html". +* +* Initial Contributors: +* Nokia Corporation - initial contribution. +* +* Contributors: +* +* Description: +* crypto hash API implementation +* crypto hash API implementation +* +*/ + + +/** + @file +*/ + +#include +#include "legacyselector.h" +#include + + +using namespace CryptoSpi; + +// +// Hash Factory Implementation +// +EXPORT_C void CHashFactory::CreateHashL(CHash*& aHash, + TUid aAlgorithmUid, + TUid aOperationMode, + const CKey* aKey, + const CCryptoParams* aAlgorithmParams) + { + MPluginSelector* selector=reinterpret_cast(Dll::Tls()); + if (selector) + { + selector->CreateHashL(aHash, aAlgorithmUid, aOperationMode, aKey, aAlgorithmParams); + } + else + { + CLegacySelector* legacySelector=CLegacySelector::NewLC(); + legacySelector->CreateHashL(aHash, aAlgorithmUid, aOperationMode, aKey, aAlgorithmParams); + CleanupStack::PopAndDestroy(legacySelector); //selector + } + } + +#ifdef SYMBIAN_SDP_IPSEC_VOIP_SUPPORT + +EXPORT_C void CHashFactory::CreateHashL(CHash*& aHash, + TUid aAlgorithmUid, + const CCryptoParams* aAlgorithmParams) + { + MPluginSelector* selector=reinterpret_cast(Dll::Tls()); + if (selector) + { + selector->CreateHashL(aHash, aAlgorithmUid, aAlgorithmParams); + } + else + { + CLegacySelector* legacySelector=CLegacySelector::NewLC(); + legacySelector->CreateHashL(aHash, aAlgorithmUid, aAlgorithmParams); + CleanupStack::PopAndDestroy(legacySelector); //selector + } + } +#endif + +// +// Hash implementation +// +CHash* CHash::NewL(MHash* aHash, TInt aHandle) + { + CHash* self=new(ELeave) CHash(aHash, aHandle); + return self; + } + +EXPORT_C CHash::~CHash() + { + } + +EXPORT_C TPtrC8 CHash::Hash(const TDesC8& aMessage) + { + return ((MHash*)iPlugin)->Hash(aMessage); + } + +EXPORT_C void CHash::Update(const TDesC8& aMessage) + { + ((MHash*)iPlugin)->Update(aMessage); + } + +EXPORT_C TPtrC8 CHash::Final(const TDesC8& aMessage) + { + MHash* hash=(MHash*)iPlugin; + TPtrC8 hashValue=hash->Final(aMessage); + hash->Reset(); + return hashValue; + } + +EXPORT_C CHash* CHash::ReplicateL() + { + MHash* plugin=((MHash*)iPlugin)->ReplicateL(); + CleanupClosePushL(*plugin); + RLibrary lib; + lib.SetHandle(iLibHandle); + RLibrary duplib=lib; + User::LeaveIfError(duplib.Duplicate(RThread(), EOwnerProcess)); + CleanupClosePushL(duplib); + CHash* self=new(ELeave) CHash(plugin, duplib.Handle()); + CleanupStack::Pop(2, plugin); //duplib, plugin + return self; + } + +EXPORT_C void CHash::SetKeyL(const CKey& aKey) + { + ((MHash*)iPlugin)->SetKeyL(aKey); + } + +EXPORT_C void CHash::SetOperationModeL(TUid aOperationMode) + { + ((MHash*)iPlugin)->SetOperationModeL(aOperationMode); + } + +EXPORT_C CHash* CHash::CopyL() + { + MHash* plugin=((MHash*)iPlugin)->CopyL(); + CleanupClosePushL(*plugin); + RLibrary lib; + lib.SetHandle(iLibHandle); + RLibrary duplib=lib; + User::LeaveIfError(duplib.Duplicate(RThread(), EOwnerProcess)); + CleanupClosePushL(duplib); + CHash* self=new(ELeave) CHash(plugin, duplib.Handle()); + CleanupStack::Pop(2, plugin); //duplib, plugin + return self; + } + +CHash::CHash(MHash* aHash, TInt aHandle) +: CCryptoBase(aHash, aHandle) + { + } + +// +// Asynchronous hash implementation +// (async not implemented, so no coverage) +// +// +#ifdef _BullseyeCoverage +#pragma suppress_warnings on +#pragma BullseyeCoverage off +#pragma suppress_warnings off +#endif + +EXPORT_C void CHashFactory::CreateAsyncHashL(CAsyncHash*& aHash, + TUid aAlgorithmUid, + TUid aOperationMode, + const CKey* aKey, + const CCryptoParams* aAlgorithmParams) + { + MPluginSelector* selector=reinterpret_cast(Dll::Tls()); + if (selector) + { + selector->CreateAsyncHashL(aHash, aAlgorithmUid, aOperationMode, aKey, aAlgorithmParams); + } + else + { + CLegacySelector* legacySelector=CLegacySelector::NewLC(); + legacySelector->CreateAsyncHashL(aHash, aAlgorithmUid, aOperationMode, aKey, aAlgorithmParams); + CleanupStack::PopAndDestroy(legacySelector); //selector + } + } + +#ifdef SYMBIAN_SDP_IPSEC_VOIP_SUPPORT +EXPORT_C void CHashFactory::CreateAsyncHashL(CAsyncHash*& aHash, + TUid aAlgorithmUid, + const CCryptoParams* aAlgorithmParams) + { + MPluginSelector* selector=reinterpret_cast(Dll::Tls()); + if (selector) + { + selector->CreateAsyncHashL(aHash, aAlgorithmUid, aAlgorithmParams); + } + else + { + CLegacySelector* legacySelector=CLegacySelector::NewLC(); + legacySelector->CreateAsyncHashL(aHash, aAlgorithmUid, aAlgorithmParams); + CleanupStack::PopAndDestroy(legacySelector); //selector + } + + } +#endif + +CAsyncHash* CAsyncHash::NewL(MAsyncHash* aHash, TInt aHandle) + { + CAsyncHash* self=new(ELeave) CAsyncHash(aHash, aHandle); + return self; + } + +EXPORT_C CAsyncHash::~CAsyncHash() + { + } + +EXPORT_C void CAsyncHash::Hash(const TDesC8& aMessage, TPtrC8& aHash, TRequestStatus& aStatus) + { + ((MAsyncHash*)iPlugin)->Hash(aMessage, aHash, aStatus); + } + +EXPORT_C void CAsyncHash::Update(const TDesC8& aMessage, TRequestStatus& aStatus) + { + ((MAsyncHash*)iPlugin)->Update(aMessage, aStatus); + } + +EXPORT_C void CAsyncHash::Final(const TDesC8& aMessage, TPtrC8& aFinal, TRequestStatus& aStatus) + { + ((MAsyncHash*)iPlugin)->Final(aMessage, aFinal, aStatus); + } + +EXPORT_C void CAsyncHash::Cancel() + { + ((MAsyncHash*)iPlugin)->Cancel(); + } + +EXPORT_C CAsyncHash* CAsyncHash::ReplicateL() + { + MAsyncHash* plugin=((MAsyncHash*)iPlugin)->ReplicateL(); + CleanupClosePushL(*plugin); + RLibrary lib; + lib.SetHandle(iLibHandle); + RLibrary duplib=lib; + User::LeaveIfError(duplib.Duplicate(RThread(), EOwnerProcess)); + CleanupClosePushL(duplib); + CAsyncHash* self=new(ELeave) CAsyncHash(plugin, duplib.Handle()); + CleanupStack::Pop(2, plugin); //duplib, plugin + return self; + } + +EXPORT_C CAsyncHash* CAsyncHash::CopyL() + { + MAsyncHash* plugin=((MAsyncHash*)iPlugin)->CopyL(); + CleanupClosePushL(*plugin); + RLibrary lib; + lib.SetHandle(iLibHandle); + RLibrary duplib=lib; + User::LeaveIfError(duplib.Duplicate(RThread(), EOwnerProcess)); + CleanupClosePushL(duplib); + CAsyncHash* self=new(ELeave) CAsyncHash(plugin, duplib.Handle()); + CleanupStack::Pop(2, plugin); //duplib, plugin + return self; + } + +EXPORT_C void CAsyncHash::SetKeyL(const CKey& aKey) + { + ((MAsyncHash*)iPlugin)->SetKeyL(aKey); + } + +EXPORT_C void CAsyncHash::SetOperationModeL(TUid aOperationMode) + { + ((MAsyncHash*)iPlugin)->SetOperationModeL(aOperationMode); + } + +CAsyncHash::CAsyncHash(MAsyncHash* aAsyncHash, TInt aHandle) +: CCryptoBase(aAsyncHash, aHandle) + { + } + +