sl@0: /* sl@0: * Copyright (c) 2006-2009 Nokia Corporation and/or its subsidiary(-ies). sl@0: * All rights reserved. sl@0: * This component and the accompanying materials are made available sl@0: * under the terms of the License "Eclipse Public License v1.0" sl@0: * which accompanies this distribution, and is available sl@0: * at the URL "http://www.eclipse.org/legal/epl-v10.html". sl@0: * sl@0: * Initial Contributors: sl@0: * Nokia Corporation - initial contribution. sl@0: * sl@0: * Contributors: sl@0: * sl@0: * Description: sl@0: * sl@0: */ sl@0: sl@0: sl@0: #include sl@0: #include "keys.h" sl@0: #include "asymmetriccipherimpl.h" sl@0: #include sl@0: #include sl@0: #include sl@0: #include "pluginconfig.h" sl@0: #include "common/inlines.h" sl@0: sl@0: using namespace SoftwareCrypto; sl@0: sl@0: CAsymmetricCipherImpl::CAsymmetricCipherImpl( sl@0: TUid aCryptoMode, sl@0: TUid aPaddingMode) : sl@0: iCryptoMode(aCryptoMode), sl@0: iPaddingMode(aPaddingMode) sl@0: { sl@0: } sl@0: sl@0: void CAsymmetricCipherImpl::ConstructL(const CKey& aKey) sl@0: { sl@0: DoSetCryptoModeL(iCryptoMode); sl@0: DoSetKeyL(aKey); sl@0: DoSetPaddingModeL(iPaddingMode); sl@0: } sl@0: sl@0: CAsymmetricCipherImpl::~CAsymmetricCipherImpl() sl@0: { sl@0: delete iKey; sl@0: delete iPadding; sl@0: } sl@0: sl@0: void CAsymmetricCipherImpl::Close() sl@0: { sl@0: delete this; sl@0: } sl@0: sl@0: void CAsymmetricCipherImpl::Reset() sl@0: { sl@0: } sl@0: sl@0: TAny* CAsymmetricCipherImpl::GetExtension(TUid /*aExtensionId*/) sl@0: { sl@0: return 0; sl@0: } sl@0: sl@0: void CAsymmetricCipherImpl::GetCharacteristicsL(const TAny*& aPluginCharacteristics) sl@0: { sl@0: TInt numCiphers = sizeof(KAsymmetricCipherCharacteristics)/sizeof(TAsymmetricCipherCharacteristics*); sl@0: TInt32 implUid = ImplementationUid().iUid; sl@0: for (TInt i = 0; i < numCiphers; ++i) sl@0: { sl@0: if (KAsymmetricCipherCharacteristics[i]->cmn.iImplementationUID == implUid) sl@0: { sl@0: aPluginCharacteristics = KAsymmetricCipherCharacteristics[i]; sl@0: break; sl@0: } sl@0: } sl@0: } sl@0: sl@0: void CAsymmetricCipherImpl::SetKeyL(const CKey& aKey) sl@0: { sl@0: DoSetKeyL(aKey); sl@0: } sl@0: sl@0: void CAsymmetricCipherImpl::DoSetKeyL(const CKey& aKey) sl@0: { sl@0: delete iKey; // delete any previous key sl@0: iKey = CKey::NewL(aKey); sl@0: } sl@0: sl@0: void CAsymmetricCipherImpl::SetCryptoModeL(TUid aCryptoMode) sl@0: { sl@0: DoSetCryptoModeL(aCryptoMode); sl@0: Reset(); sl@0: } sl@0: sl@0: void CAsymmetricCipherImpl::DoSetCryptoModeL(TUid aCryptoMode) sl@0: { sl@0: switch (aCryptoMode.iUid) sl@0: { sl@0: case KCryptoModeEncrypt: sl@0: case KCryptoModeDecrypt: sl@0: break; sl@0: default: sl@0: User::Leave(KErrNotSupported); sl@0: } sl@0: iCryptoMode = aCryptoMode; sl@0: } sl@0: sl@0: void CAsymmetricCipherImpl::SetPaddingModeL(TUid aPaddingMode) sl@0: { sl@0: DoSetPaddingModeL(aPaddingMode); sl@0: Reset(); sl@0: } sl@0: sl@0: void CAsymmetricCipherImpl::DoSetPaddingModeL(TUid aPaddingMode) sl@0: { sl@0: CPadding* padding(0); sl@0: TInt padlength = 0; sl@0: sl@0: switch (iCryptoMode.iUid) sl@0: { sl@0: case KCryptoModeEncrypt: sl@0: padlength = GetMaximumOutputLengthL(); sl@0: break; sl@0: case KCryptoModeDecrypt: sl@0: padlength = GetMaximumInputLengthL(); sl@0: break; sl@0: } sl@0: sl@0: switch (aPaddingMode.iUid) sl@0: { sl@0: case KPaddingModeNone: sl@0: padding = CPaddingNone::NewL(padlength); sl@0: break; sl@0: case KPaddingModePkcs1_v1_5_Encryption: sl@0: padding = CPaddingPKCS1Encryption::NewL(padlength); sl@0: break; sl@0: default: sl@0: User::Leave(KErrNotSupported); sl@0: } sl@0: sl@0: delete iPadding; sl@0: iPadding = padding; sl@0: iPaddingMode = aPaddingMode; sl@0: } sl@0: sl@0: // Methods implemented in subclass. No coverage here. sl@0: #ifdef _BullseyeCoverage sl@0: #pragma suppress_warnings on sl@0: #pragma BullseyeCoverage off sl@0: #pragma suppress_warnings off sl@0: #endif sl@0: TInt CAsymmetricCipherImpl::GetMaximumOutputLengthL() const sl@0: { sl@0: // Override in subclass sl@0: User::Leave(KErrNotSupported); sl@0: return 0; sl@0: } sl@0: sl@0: TInt CAsymmetricCipherImpl::GetMaximumInputLengthL() const sl@0: { sl@0: // Override in subclass sl@0: User::Leave(KErrNotSupported); sl@0: return 0; sl@0: } sl@0: