diff -r 675a964f4eb5 -r 35751d3474b7 crypto/weakcryptospi/source/spi/cryptosymmetriccipherapi.cpp --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/crypto/weakcryptospi/source/spi/cryptosymmetriccipherapi.cpp Thu Sep 10 14:01:51 2009 +0300 @@ -0,0 +1,222 @@ +/* +* 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 symmetric cipher API implementation +* crypto symmetric cipher API implementation +* +*/ + + +/** + @file +*/ + +#include "cryptosymmetriccipherapi.h" +#include "legacyselector.h" +#include "symmetriccipherplugin.h" + +using namespace CryptoSpi; + +// +// Implementation of Symmetric Cipher Base Class +// +CSymmetricCipherBase::CSymmetricCipherBase(MSymmetricCipherBase* aSymmetricCipher, TInt aHandle) +: CCryptoBase(aSymmetricCipher, aHandle) + { + } + +CSymmetricCipherBase::~CSymmetricCipherBase() + { + } + +EXPORT_C void CSymmetricCipherBase::SetKeyL(const CKey& aKey) + { + MSymmetricCipherBase* ptr=static_cast(iPlugin); + ptr->SetKeyL(aKey); + } + +EXPORT_C void CSymmetricCipherBase::SetOperationModeL(TUid aOperationMode) + { + MSymmetricCipherBase* ptr=static_cast(iPlugin); + ptr->SetOperationModeL(aOperationMode); + } + +EXPORT_C void CSymmetricCipherBase::SetCryptoModeL(TUid aCryptoMode) + { + MSymmetricCipherBase* ptr=static_cast(iPlugin); + ptr->SetCryptoModeL(aCryptoMode); + } + +EXPORT_C void CSymmetricCipherBase::SetPaddingModeL(TUid aPaddingMode) + { + MSymmetricCipherBase* ptr=static_cast(iPlugin); + ptr->SetPaddingModeL(aPaddingMode); + } + +EXPORT_C void CSymmetricCipherBase::SetIvL(const TDesC8& aIv) + { + MSymmetricCipherBase* ptr=static_cast(iPlugin); + ptr->SetIvL(aIv); + } + +EXPORT_C TInt CSymmetricCipherBase::BlockSize() + { + MSymmetricCipherBase* ptr=static_cast(iPlugin); + return ptr->BlockSize(); + } + +EXPORT_C TInt CSymmetricCipherBase::KeySize() + { + MSymmetricCipherBase* ptr=static_cast(iPlugin); + return ptr->KeySize(); + } + +EXPORT_C TInt CSymmetricCipherBase::MaxOutputLength(TInt aInputLength) + { + MSymmetricCipherBase* ptr=static_cast(iPlugin); + return ptr->MaxOutputLength(aInputLength); + } + +EXPORT_C TInt CSymmetricCipherBase::MaxFinalOutputLength(TInt aInputLength) + { + MSymmetricCipherBase* ptr=static_cast(iPlugin); + return ptr->MaxFinalOutputLength(aInputLength); + } + +// +// Implementation of Symmetric Cipher +// +CSymmetricCipher* CSymmetricCipher::NewL(MSymmetricCipher* aSymmetricCipher, TInt aHandle) + { + CSymmetricCipher* self=new(ELeave) CSymmetricCipher(aSymmetricCipher, aHandle); + return self; + } + +CSymmetricCipher::CSymmetricCipher(MSymmetricCipher* aSymmetricCipher, TInt aHandle) +: CSymmetricCipherBase(aSymmetricCipher, aHandle) + { + } + +EXPORT_C CSymmetricCipher::~CSymmetricCipher() + { + } + +EXPORT_C void CSymmetricCipher::ProcessL(const TDesC8& aInput, TDes8& aOutput) + { + MSymmetricCipher* ptr=static_cast(iPlugin); + ptr->ProcessL(aInput, aOutput); + } + + +EXPORT_C void CSymmetricCipher::ProcessFinalL(const TDesC8& aInput, TDes8& aOutput) + { + MSymmetricCipher* ptr=static_cast(iPlugin); + ptr->ProcessFinalL(aInput, aOutput); + } + + +// +// Implementation of Symmetric Cipher Factory +// +EXPORT_C void CSymmetricCipherFactory::CreateSymmetricCipherL(CSymmetricCipher*& aCipher, + TUid aAlgorithmUid, + const CKey& aKey, + TUid aCryptoMode, + TUid aOperationMode, + TUid aPaddingMode, + const CCryptoParams* aAlgorithmParams) + { + MPluginSelector* selector=reinterpret_cast(Dll::Tls()); + if (selector) + { + selector->CreateSymmetricCipherL(aCipher, aAlgorithmUid, aKey, aCryptoMode, aOperationMode, aPaddingMode, aAlgorithmParams); + } + else + { + CLegacySelector* legacySelector=CLegacySelector::NewLC(); + legacySelector->CreateSymmetricCipherL(aCipher, aAlgorithmUid, aKey, aCryptoMode, aOperationMode, aPaddingMode, aAlgorithmParams); + CleanupStack::PopAndDestroy(legacySelector); //selector + } + } + + +// +// Implementation of Asynchronous Symmetric Cipher +// (async methods not implemented, so no coverage) +// + +#ifdef _BullseyeCoverage +#pragma suppress_warnings on +#pragma BullseyeCoverage off +#pragma suppress_warnings off +#endif + +CAsyncSymmetricCipher* CAsyncSymmetricCipher::NewL(MAsyncSymmetricCipher* aAsyncSymmetricCipher, TInt aHandle) + { + CAsyncSymmetricCipher* self=new(ELeave) CAsyncSymmetricCipher(aAsyncSymmetricCipher, aHandle); + return self; + } + +CAsyncSymmetricCipher::CAsyncSymmetricCipher(MAsyncSymmetricCipher* aAsyncSymmetricCipher, TInt aHandle) +: CSymmetricCipherBase(aAsyncSymmetricCipher, aHandle) + { + } + +EXPORT_C CAsyncSymmetricCipher::~CAsyncSymmetricCipher() + { + + } + +EXPORT_C void CAsyncSymmetricCipher::ProcessL(const TDesC8& aInput, TDes8& aOutput, TRequestStatus& aRequestStatus) + { + MAsyncSymmetricCipher* ptr=static_cast(iPlugin); + ptr->ProcessL(aInput, aOutput, aRequestStatus); + } + +EXPORT_C void CAsyncSymmetricCipher::ProcessFinalL(const TDesC8& aInput, TDes8& aOutput, TRequestStatus& aRequestStatus) + { + MAsyncSymmetricCipher* ptr=static_cast(iPlugin); + ptr->ProcessFinalL(aInput, aOutput, aRequestStatus); + } + +EXPORT_C void CAsyncSymmetricCipher::Cancel() + { + MAsyncSymmetricCipher* ptr=static_cast(iPlugin); + ptr->Cancel(); + } + +// +// Implementation of Symmetric Cipher Factory +// +EXPORT_C void CSymmetricCipherFactory::CreateAsyncSymmetricCipherL(CAsyncSymmetricCipher*& aCipher, + TUid aAlgorithmUid, + const CKey& aKey, + TUid aCryptoMode, + TUid aOperationMode, + TUid aPaddingMode, + const CCryptoParams* aAlgorithmParams) + { + MPluginSelector* selector=reinterpret_cast(Dll::Tls()); + if (selector) + { + selector->CreateAsyncSymmetricCipherL(aCipher, aAlgorithmUid, aKey, aCryptoMode, aOperationMode, aPaddingMode, aAlgorithmParams); + } + else + { + CLegacySelector* legacySelector=CLegacySelector::NewLC(); + legacySelector->CreateAsyncSymmetricCipherL(aCipher, aAlgorithmUid, aKey, aCryptoMode, aOperationMode, aPaddingMode, aAlgorithmParams); + CleanupStack::PopAndDestroy(legacySelector); //selector + } + } +