Update contrib.
2 * Copyright (c) 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.
18 #include "tactionincrementallegacy.h"
19 #include "symmetric.h"
21 #include "securityerr.h"
23 CTestAction* CActionIncrementalLegacy::NewL(RFs& aFs,
24 CConsoleBase& aConsole,
26 const TTestActionSpec& aTestActionSpec)
28 CTestAction* self = CActionIncrementalLegacy::NewLC(aFs, aConsole,
29 aOut, aTestActionSpec);
34 CTestAction* CActionIncrementalLegacy::NewLC(RFs& aFs,
35 CConsoleBase& aConsole,
37 const TTestActionSpec& aTestActionSpec)
39 CActionIncrementalLegacy* self = new(ELeave) CActionIncrementalLegacy(aFs, aConsole, aOut);
40 CleanupStack::PushL(self);
41 self->ConstructL(aTestActionSpec);
45 CActionIncrementalLegacy::~CActionIncrementalLegacy()
49 CActionIncrementalLegacy::CActionIncrementalLegacy(RFs& aFs,
50 CConsoleBase& aConsole,
52 : CCryptoTestAction(aFs, aConsole, aOut)
55 void CActionIncrementalLegacy::DoPerformPostrequisiteL()
70 void CActionIncrementalLegacy::DoPerformPrerequisiteL()
74 TPtrC8 incremental = Input::ParseElement(*iBody, KIncrementalStart, KIncrementalEnd, pos, err);
76 DoInputParseL(incremental);
78 CBlockTransformation* encryptor = NULL;
79 CBlockTransformation* decryptor = NULL;
88 //If the test is weak key test
89 if(iExpectedWeakResult == KErrWeakKey)
91 //we expect to leave with KErrWeakKey reason
92 if(CDES::IsWeakKey(iKey->Des()))
94 User::Leave(KErrWeakKey);
96 else //test is unsuccessful, leave with a different reason
98 User::Leave(KErrGeneral);
101 encryptor = CDESEncryptor::NewL(iKey->Des());
102 CleanupStack::PushL(encryptor);
103 decryptor = CDESDecryptor::NewL(iKey->Des());
104 CleanupStack::Pop(encryptor);
109 CBlockTransformation* desEncryptor = NULL;
110 CBlockTransformation* desDecryptor = NULL;
112 if(iExpectedWeakResult == KErrWeakKey)
114 if(CDES::IsWeakKey(iKey->Des()))
116 User::Leave(KErrWeakKey);
120 User::Leave(KErrGeneral);
124 desEncryptor = CDESEncryptor::NewL(iKey->Des());
125 CleanupStack::PushL(desEncryptor);
126 desDecryptor = CDESDecryptor::NewL(iKey->Des());
127 CleanupStack::PushL(desDecryptor);
129 encryptor = CModeCBCEncryptor::NewL(desEncryptor, iIV->Des());
130 CleanupStack::PushL(encryptor);
131 decryptor = CModeCBCDecryptor::NewLC(desDecryptor, iIV->Des());
132 CleanupStack::Pop(4);
137 encryptor = C3DESEncryptor::NewL(iKey->Des());
138 CleanupStack::PushL(encryptor);
139 decryptor = C3DESDecryptor::NewL(iKey->Des());
140 CleanupStack::Pop(encryptor);
145 CBlockTransformation* the3DESencryptor = NULL;
146 CBlockTransformation* the3DESdecryptor = NULL;
148 the3DESencryptor = C3DESEncryptor::NewLC(iKey->Des());
149 the3DESdecryptor = C3DESDecryptor::NewLC(iKey->Des());
151 encryptor = CModeCBCEncryptor::NewL(the3DESencryptor, iIV->Des());
152 CleanupStack::PushL(encryptor);
153 decryptor = CModeCBCDecryptor::NewLC(the3DESdecryptor, iIV->Des());
154 CleanupStack::Pop(4);
159 encryptor = CAESEncryptor::NewL(iKey->Des());
160 CleanupStack::PushL(encryptor);
161 decryptor = CAESDecryptor::NewL(iKey->Des());
162 CleanupStack::Pop(encryptor);
167 encryptor = CRC2Encryptor::NewL(iKey->Des(), iEffectiveKeyLen);
168 CleanupStack::PushL(encryptor);
169 decryptor = CRC2Decryptor::NewL(iKey->Des(), iEffectiveKeyLen);
170 CleanupStack::Pop(encryptor);
175 encryptor = CRC2Encryptor::NewLC(iKey->Des(), iEffectiveKeyLen);
176 decryptor = CRC2Decryptor::NewL(iKey->Des(), iEffectiveKeyLen);
177 CleanupStack::Pop(encryptor);
182 iEncryptor = CARC4::NewL(*iKey, 0);
183 iDecryptor = CARC4::NewLC(*iKey, 0);
184 CleanupStack::Pop(iDecryptor);
189 iEncryptor = CNullCipher::NewL();
190 iDecryptor = CNullCipher::NewLC();
191 CleanupStack::Pop(iDecryptor);
196 User::Leave(KErrNotSupported);
199 CleanupStack::PushL(encryptor);
200 CleanupStack::PushL(decryptor);
201 if(!iEncryptor && !iDecryptor)
203 CPaddingSSLv3* dPadding = CPaddingSSLv3::NewLC(decryptor->BlockSize());
204 CPaddingSSLv3* ePadding = CPaddingSSLv3::NewLC(encryptor->BlockSize());
206 iEncryptor = CBufferedEncryptor::NewLC(encryptor, ePadding);
207 CleanupStack::Pop(2, ePadding);
208 iDecryptor = CBufferedDecryptor::NewLC(decryptor, dPadding);
209 CleanupStack::Pop(2, dPadding);
211 TInt desEBlockSize = encryptor->BlockSize();
212 TInt desDBlockSize = decryptor->BlockSize();
213 TInt bufEBlockSize = iEncryptor->BlockSize();
214 TInt bufDBlockSize = iDecryptor->BlockSize();
215 ASSERT((desEBlockSize/desDBlockSize) == (bufEBlockSize/bufDBlockSize));
217 TInt desEKeySize = encryptor->KeySize();
218 TInt desDKeySize = decryptor->KeySize();
219 ASSERT(desEKeySize == desDKeySize);
225 TInt encryptorKeySize = iEncryptor->KeySize();
226 TInt decryptorKeySize = iDecryptor->KeySize();
227 ASSERT(encryptorKeySize == decryptorKeySize);
229 CleanupStack::Pop(2, encryptor);
231 iEResult = HBufC8::NewMaxL(iEncryptor->MaxFinalOutputLength(iInput->Length()));
232 iDResult = HBufC8::NewMaxL(iDecryptor->MaxFinalOutputLength(iEResult->Size()));
235 void CActionIncrementalLegacy::DoPerformActionL()
237 TRAPD(res, DoDoPerformActionL())
238 if(res == KErrNoMemory)
245 void CActionIncrementalLegacy::DoDoPerformActionL()
249 TPtr8 eResultActual = iEResult->Des();
250 eResultActual.FillZ(eResultActual.MaxLength());
251 eResultActual.SetLength(0);
253 TPtr8 dResultActual = iDResult->Des();
254 dResultActual.FillZ(dResultActual.MaxLength());
255 dResultActual.SetLength(0);
257 TInt len = iInput->Length();
258 for(TInt i=1; i<len; i++)
262 {// encryption in blocks of size i
263 iEncryptor->Process(iInput->Mid(j,i), eResultActual);
266 iEncryptor->ProcessFinalL(iInput->Mid(j), eResultActual);
269 for(; (j+(len-i))<len; j+=(len-i))
270 {// Decryption in blocks of size (len - i)
271 iDecryptor->Process(eResultActual.Mid(j, len-i), dResultActual);
274 iDecryptor->ProcessFinalL(eResultActual.Mid(j), dResultActual);
276 if(dResultActual != *iInput)
281 eResultActual.FillZ(eResultActual.MaxLength());
282 dResultActual.FillZ(dResultActual.MaxLength());
283 eResultActual.SetLength(0);
284 dResultActual.SetLength(0);