os/security/cryptoplugins/cryptospiplugins/source/softwarecrypto/asymmetriccipherimpl.cpp
First public contribution.
2 * Copyright (c) 2006-2009 Nokia Corporation and/or its subsidiary(-ies).
4 * This component and the accompanying materials are made available
5 * under the terms of the License "Eclipse Public License v1.0"
6 * which accompanies this distribution, and is available
7 * at the URL "http://www.eclipse.org/legal/epl-v10.html".
9 * Initial Contributors:
10 * Nokia Corporation - initial contribution.
21 #include "asymmetriccipherimpl.h"
22 #include <cryptostrength.h>
23 #include <cryptospi/cryptospidef.h>
24 #include <cryptospi/plugincharacteristics.h>
25 #include "pluginconfig.h"
26 #include "common/inlines.h"
28 using namespace SoftwareCrypto;
30 CAsymmetricCipherImpl::CAsymmetricCipherImpl(
33 iCryptoMode(aCryptoMode),
34 iPaddingMode(aPaddingMode)
38 void CAsymmetricCipherImpl::ConstructL(const CKey& aKey)
40 DoSetCryptoModeL(iCryptoMode);
42 DoSetPaddingModeL(iPaddingMode);
45 CAsymmetricCipherImpl::~CAsymmetricCipherImpl()
51 void CAsymmetricCipherImpl::Close()
56 void CAsymmetricCipherImpl::Reset()
60 TAny* CAsymmetricCipherImpl::GetExtension(TUid /*aExtensionId*/)
65 void CAsymmetricCipherImpl::GetCharacteristicsL(const TAny*& aPluginCharacteristics)
67 TInt numCiphers = sizeof(KAsymmetricCipherCharacteristics)/sizeof(TAsymmetricCipherCharacteristics*);
68 TInt32 implUid = ImplementationUid().iUid;
69 for (TInt i = 0; i < numCiphers; ++i)
71 if (KAsymmetricCipherCharacteristics[i]->cmn.iImplementationUID == implUid)
73 aPluginCharacteristics = KAsymmetricCipherCharacteristics[i];
79 void CAsymmetricCipherImpl::SetKeyL(const CKey& aKey)
84 void CAsymmetricCipherImpl::DoSetKeyL(const CKey& aKey)
86 delete iKey; // delete any previous key
87 iKey = CKey::NewL(aKey);
90 void CAsymmetricCipherImpl::SetCryptoModeL(TUid aCryptoMode)
92 DoSetCryptoModeL(aCryptoMode);
96 void CAsymmetricCipherImpl::DoSetCryptoModeL(TUid aCryptoMode)
98 switch (aCryptoMode.iUid)
100 case KCryptoModeEncrypt:
101 case KCryptoModeDecrypt:
104 User::Leave(KErrNotSupported);
106 iCryptoMode = aCryptoMode;
109 void CAsymmetricCipherImpl::SetPaddingModeL(TUid aPaddingMode)
111 DoSetPaddingModeL(aPaddingMode);
115 void CAsymmetricCipherImpl::DoSetPaddingModeL(TUid aPaddingMode)
117 CPadding* padding(0);
120 switch (iCryptoMode.iUid)
122 case KCryptoModeEncrypt:
123 padlength = GetMaximumOutputLengthL();
125 case KCryptoModeDecrypt:
126 padlength = GetMaximumInputLengthL();
130 switch (aPaddingMode.iUid)
132 case KPaddingModeNone:
133 padding = CPaddingNone::NewL(padlength);
135 case KPaddingModePkcs1_v1_5_Encryption:
136 padding = CPaddingPKCS1Encryption::NewL(padlength);
139 User::Leave(KErrNotSupported);
144 iPaddingMode = aPaddingMode;
147 // Methods implemented in subclass. No coverage here.
148 #ifdef _BullseyeCoverage
149 #pragma suppress_warnings on
150 #pragma BullseyeCoverage off
151 #pragma suppress_warnings off
153 TInt CAsymmetricCipherImpl::GetMaximumOutputLengthL() const
155 // Override in subclass
156 User::Leave(KErrNotSupported);
160 TInt CAsymmetricCipherImpl::GetMaximumInputLengthL() const
162 // Override in subclass
163 User::Leave(KErrNotSupported);