Update contrib.
2 * Copyright (c) 1998-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.
19 #include "tactionincremental.h"
20 #include "symmetric.h"
23 CTestAction* CActionIncremental::NewL(RFs& aFs,
24 CConsoleBase& aConsole,
26 const TTestActionSpec& aTestActionSpec)
28 CTestAction* self = CActionIncremental::NewLC(aFs, aConsole,
29 aOut, aTestActionSpec);
34 CTestAction* CActionIncremental::NewLC(RFs& aFs,
35 CConsoleBase& aConsole,
37 const TTestActionSpec& aTestActionSpec)
39 CActionIncremental* self = new(ELeave) CActionIncremental(aFs, aConsole, aOut);
40 CleanupStack::PushL(self);
41 self->ConstructL(aTestActionSpec);
45 CActionIncremental::~CActionIncremental()
49 CActionIncremental::CActionIncremental(RFs& aFs,
50 CConsoleBase& aConsole,
52 : CCryptoTestAction(aFs, aConsole, aOut)
55 void CActionIncremental::DoPerformPostrequisiteL()
61 void CActionIncremental::DoPerformPrerequisiteL()
65 TPtrC8 incremental = Input::ParseElement(*iBody, KIncrementalStart, KIncrementalEnd, pos, err);
67 DoInputParseL(incremental);
69 CBlockTransformation* encryptor = NULL;
70 CBlockTransformation* decryptor = NULL;
79 //If the test is weak key test
80 if(iExpectedWeakResult == KErrWeakKey)
82 //we expect to leave with KErrWeakKey reason
83 if(CDES::IsWeakKey(iKey->Des()))
85 User::Leave(KErrWeakKey);
87 else //test is unsuccessful, leave with a different reason
89 User::Leave(KErrGeneral);
92 encryptor = CDESEncryptor::NewLC(iKey->Des());
93 decryptor = CDESDecryptor::NewL(iKey->Des());
94 CleanupStack::Pop(encryptor);
99 CBlockTransformation* desEncryptor = NULL;
100 CBlockTransformation* desDecryptor = NULL;
102 if(iExpectedWeakResult == KErrWeakKey)
104 if(CDES::IsWeakKey(iKey->Des()))
106 User::Leave(KErrWeakKey);
110 User::Leave(KErrGeneral);
113 desEncryptor = CDESEncryptor::NewLC(iKey->Des());
114 desDecryptor = CDESDecryptor::NewLC(iKey->Des());
116 encryptor = CModeCBCEncryptor::NewL(desEncryptor, iIV->Des());
117 CleanupStack::PushL(encryptor);
118 decryptor = CModeCBCDecryptor::NewL(desDecryptor, iIV->Des());
119 CleanupStack::Pop(3);
124 encryptor = C3DESEncryptor::NewLC(iKey->Des());
125 decryptor = C3DESDecryptor::NewL(iKey->Des());
126 CleanupStack::Pop(encryptor);
131 CBlockTransformation* the3DESencryptor = NULL;
132 CBlockTransformation* the3DESdecryptor = NULL;
134 the3DESencryptor = C3DESEncryptor::NewLC(iKey->Des());
135 the3DESdecryptor = C3DESDecryptor::NewLC(iKey->Des());
137 encryptor = CModeCBCEncryptor::NewL(the3DESencryptor, iIV->Des());
138 CleanupStack::PushL(encryptor);
139 decryptor = CModeCBCDecryptor::NewL(the3DESdecryptor, iIV->Des());
140 CleanupStack::Pop(3);
145 encryptor = CAESEncryptor::NewLC(iKey->Des());
146 decryptor = CAESDecryptor::NewL(iKey->Des());
147 CleanupStack::Pop(encryptor);
152 encryptor = CRC2Encryptor::NewLC(iKey->Des(), iEffectiveKeyLen);
153 decryptor = CRC2Decryptor::NewL(iKey->Des(), iEffectiveKeyLen);
154 CleanupStack::Pop(encryptor);
159 encryptor = CRC2Encryptor::NewLC(iKey->Des(), iEffectiveKeyLen);
160 decryptor = CRC2Decryptor::NewL(iKey->Des(), iEffectiveKeyLen);
161 CleanupStack::Pop(encryptor);
166 iEncryptor = CARC4::NewL(*iKey, 0);
167 iDecryptor = CARC4::NewL(*iKey, 0);
172 iEncryptor = CNullCipher::NewL();
173 iDecryptor = CNullCipher::NewL();
178 User::Leave(KErrNotSupported);
181 CleanupStack::PushL(encryptor);
182 CleanupStack::PushL(decryptor);
183 if(!iEncryptor && !iDecryptor)
185 CPaddingSSLv3* dPadding = CPaddingSSLv3::NewLC(decryptor->BlockSize());
186 CPaddingSSLv3* ePadding = CPaddingSSLv3::NewLC(encryptor->BlockSize());
187 iEncryptor = CBufferedEncryptor::NewL(encryptor, ePadding);
188 CleanupStack::Pop(ePadding);
189 iDecryptor = CBufferedDecryptor::NewL(decryptor, dPadding);
190 CleanupStack::Pop(dPadding);
193 CleanupStack::Pop(2, encryptor);
195 iEResult = HBufC8::NewMaxL(iEncryptor->MaxFinalOutputLength(iInput->Length()));
196 iDResult = HBufC8::NewMaxL(iDecryptor->MaxFinalOutputLength(iEResult->Size()));
199 void CActionIncremental::DoPerformActionL()
201 TRAPD(res, DoDoPerformActionL())
202 if(res == KErrNoMemory)
209 void CActionIncremental::DoDoPerformActionL()
213 TPtr8 eResultActual = iEResult->Des();
214 eResultActual.FillZ(eResultActual.MaxLength());
215 eResultActual.SetLength(0);
217 TPtr8 dResultActual = iDResult->Des();
218 dResultActual.FillZ(dResultActual.MaxLength());
219 dResultActual.SetLength(0);
221 TInt len = iInput->Length();
222 for(TInt i=1; i<len; i++)
226 {// encryption in blocks of size i
227 iEncryptor->Process(iInput->Mid(j,i), eResultActual);
230 iEncryptor->ProcessFinalL(iInput->Mid(j), eResultActual);
233 for(; (j+(len-i))<len; j+=(len-i))
234 {// Decryption in blocks of size (len - i)
235 iDecryptor->Process(eResultActual.Mid(j, len-i), dResultActual);
238 iDecryptor->ProcessFinalL(eResultActual.Mid(j), dResultActual);
240 if(dResultActual != *iInput)
245 eResultActual.FillZ(eResultActual.MaxLength());
246 dResultActual.FillZ(dResultActual.MaxLength());
247 eResultActual.SetLength(0);
248 dResultActual.SetLength(0);