Update contrib.
2 * Copyright (c) 2006-2010 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.
20 #include <cryptospi/keys.h>
21 #include "asymmetriccipherimpl.h"
22 #include <cryptostrength.h>
23 #include <cryptospi/cryptospidef.h>
24 #include <cryptospi/plugincharacteristics.h>
25 #include "pluginconfig.h"
26 #include "../../../source/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 TInt CAsymmetricCipherImpl::GetMaximumOutputLengthL() const
81 // Override in subclass
82 User::Leave(KErrNotSupported);
86 TInt CAsymmetricCipherImpl::GetMaximumInputLengthL() const
88 // Override in subclass
89 User::Leave(KErrNotSupported);
93 void CAsymmetricCipherImpl::SetKeyL(const CKey& aKey)
98 void CAsymmetricCipherImpl::DoSetKeyL(const CKey& aKey)
100 delete iKey; // delete any previous key
101 iKey = CKey::NewL(aKey);
104 void CAsymmetricCipherImpl::SetCryptoModeL(TUid aCryptoMode)
106 DoSetCryptoModeL(aCryptoMode);
110 void CAsymmetricCipherImpl::DoSetCryptoModeL(TUid aCryptoMode)
112 switch (aCryptoMode.iUid)
114 case KCryptoModeEncrypt:
115 case KCryptoModeDecrypt:
118 User::Leave(KErrNotSupported);
120 iCryptoMode = aCryptoMode;
123 void CAsymmetricCipherImpl::SetPaddingModeL(TUid aPaddingMode)
125 DoSetPaddingModeL(aPaddingMode);
129 void CAsymmetricCipherImpl::DoSetPaddingModeL(TUid aPaddingMode)
131 CPadding* padding(0);
134 switch (iCryptoMode.iUid)
136 case KCryptoModeEncrypt:
137 padlength = GetMaximumOutputLengthL();
139 case KCryptoModeDecrypt:
140 padlength = GetMaximumInputLengthL();
144 switch (aPaddingMode.iUid)
146 case KPaddingModeNone:
147 padding = CPaddingNone::NewL(padlength);
149 case KPaddingModePkcs1_v1_5_Encryption:
150 padding = CPaddingPKCS1Encryption::NewL(padlength);
153 User::Leave(KErrNotSupported);
158 iPaddingMode = aPaddingMode;