Update contrib.
2 * Copyright (c) 2004-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.
20 #include "tpaddingSSLv3.h"
21 #include <securityerr.h>
23 CTestPadSSLv3::CTestPadSSLv3()
25 SetTestStepName(KPadSSLv3);
28 CTestPadSSLv3::~CTestPadSSLv3()
32 TVerdict CTestPadSSLv3::doTestStepL()
34 SetTestStepResult(EPass);
37 INFO_PRINTF1(_L("Test of padding with type SSLv3"));
42 if (!GetStringFromConfig(ConfigSection(), _L("TestCaseName"), iTestCaseName))
44 INFO_PRINTF1(_L("Could not find TestCaseName in tpadSSLv3.ini"));
48 if (!GetIntFromConfig(ConfigSection(), _L("BlockSize"), blockSize))
50 INFO_PRINTF1(_L("Could not find blocksize in tpadSSLv3.ini"));
54 if(iTestCaseName.Compare(_L("CipherAES_CBC"))==0 || iTestCaseName.Compare(_L("CipherDES_CBC"))==0 || iTestCaseName.Compare(_L("CipherRC2_CBC"))==0)
56 TestSSLv3Padding(blockSize);
60 if (!GetIntFromConfig(ConfigSection(), _L("TextSize"), textSize))
62 INFO_PRINTF1(_L("Could not find TextSize in tpadSSLv3.ini"));
65 if (!GetStringFromConfig(ConfigSection(), _L("ExpectedResult"), iExpectedResult))
67 INFO_PRINTF1(_L("Could not find TextSize in tpadSSLv3.ini"));
70 TestSSLv3CorruptPadding(blockSize, textSize);
73 return TestStepResult();
76 void CTestPadSSLv3::TestSSLv3Padding(TInt aBlockSize)
78 CPaddingSSLv3 *padding = CPaddingSSLv3::NewLC(aBlockSize);
80 for (TInt i = 0 ; i <= aBlockSize; i++)
82 HBufC8 *padInData = HBufC8::NewLC(i);
83 HBufC8 *padOutData = HBufC8::NewLC(i+(aBlockSize-i%aBlockSize));
84 TPtr8 in(padInData->Des());
85 TPtr8 out(padOutData->Des());
88 for (j = 0; j < i; j++)
93 TRAPD(err, padding->DoPadL(in, out));
94 INFO_PRINTF3(_L("The error returned for input size %d is %d"), i, err);
95 TEST(err == KErrNone);
97 TInt totalLength = out.Length();
98 TInt paddingLength = aBlockSize - in.Length()%aBlockSize;
99 // Test that the total length is a multiple of blockSize
100 TEST((totalLength % aBlockSize) == 0);
102 // Test that the padding bytes are equal in value to the paddingLength,
103 // ie, if padding length is 5 the 5 last octets in the out array should be 0x05
104 // This is according to RFC2246 (TLS1.0). The padding content in SSL3.0 is arbitrary.
105 for (TInt i = paddingLength; i > 0 ; i--)
107 TEST(out[out.Length()-i] == paddingLength - 1);
110 // Test that the data has not been corrupted
111 TEST(in == out.Left(out.Length() - paddingLength));
113 CleanupStack::PopAndDestroy(2, padInData); // padInData, padOutData
115 CleanupStack::PopAndDestroy(padding);
118 void CTestPadSSLv3::TestSSLv3CorruptPadding(TInt aBlockSize, TInt aTextSize)
120 CPaddingSSLv3 *padding = CPaddingSSLv3::NewLC(aBlockSize);
122 HBufC8 *padInData = HBufC8::NewLC(aTextSize);
123 TInt paddingBytes = 0;
124 //If BlockSize is 0, Divide by 0 is undefined
127 paddingBytes = (aBlockSize - aTextSize % aBlockSize);
129 HBufC8 *padOutData = HBufC8::NewLC(aTextSize + paddingBytes);
130 TPtr8 in(padInData->Des());
131 TPtr8 out(padOutData->Des());
134 for (j = 0; j < aTextSize; j++)
139 TRAPD(err, padding->DoPadL(in, out));
141 if(iExpectedResult.Compare(_L("CorruptBlockSize")) ==0)
143 TEST(err == KErrArgument);
145 else if(iExpectedResult.Compare(_L("Valid")) ==0)
147 TEST(err == KErrNone);
149 else if(iExpectedResult.Compare(_L("InvalidPadding")) == 0)
151 TEST(err == KErrInvalidPadding);
154 TInt totalLength = out.Length();
155 TInt paddingLength = 0;
156 //If BlockSize is 0, Divide by 0 is undefined
159 paddingLength = aBlockSize - in.Length()%aBlockSize;
161 //If BlockSize is 0, Divide by 0 is undefined
164 // Test that the total length is a multiple of blockSize
165 TEST((totalLength % aBlockSize) == 0);
168 // Test that the padding bytes are equal in value to the paddingLength,
169 // ie, if padding length is 5 the 5 last octets in the out array should be 0x05
170 // This is according to RFC2246 (TLS1.0). The padding content in SSL3.0 is arbitrary.
171 for (TInt i = paddingLength; i > 0 ; i--)
173 TEST(out[out.Length()-i] == paddingLength - 1);
178 // Test that the data has not been corrupted
179 TEST(in == out.Left(out.Length() - paddingLength));
182 CleanupStack::PopAndDestroy(2, padInData); // padInData, padOutData
183 CleanupStack::PopAndDestroy(padding);
186 CTestUnpadSSLv3::CTestUnpadSSLv3()
188 SetTestStepName(KUnpadSSLv3);
191 CTestUnpadSSLv3::~CTestUnpadSSLv3()
195 TVerdict CTestUnpadSSLv3::doTestStepL()
197 SetTestStepResult(EPass);
200 INFO_PRINTF1(_L("Test of unpadding with type SSLv3"));
204 if (!GetIntFromConfig(ConfigSection(), _L("BlockSize"), blockSize))
206 INFO_PRINTF1(_L("Could not find blocksize in tpadSSLv3.ini"));
210 if (!GetStringFromConfig(ConfigSection(), _L("TestCaseName"), iTestCaseName))
212 INFO_PRINTF1(_L("Could not find TestCaseName in tpadSSLv3.ini"));
216 if(iTestCaseName.Compare(_L("CipherAES_CBC"))==0 || iTestCaseName.Compare(_L("CipherDES_CBC"))==0 || iTestCaseName.Compare(_L("CipherRC2_CBC"))==0)
218 TestSSLv3Unpadding(blockSize);
222 if (!GetIntFromConfig(ConfigSection(), _L("TextSize"), textSize))
224 INFO_PRINTF1(_L("Could not find TextSize in tpadSSLv3.ini"));
228 if (!GetStringFromConfig(ConfigSection(), _L("ExpectedResult"), iExpectedResult))
230 INFO_PRINTF1(_L("Could not find TextSize in tpadSSLv3.ini"));
233 TestSSLv3CorruptUnpadding(blockSize, textSize);
237 return TestStepResult();
240 void CTestUnpadSSLv3::TestSSLv3Unpadding(TInt aBlockSize)
242 CPaddingSSLv3 *padding = CPaddingSSLv3::NewLC(aBlockSize);
244 for (TInt i = 0 ; i <= aBlockSize; i++)
246 HBufC8 *padInData = HBufC8::NewLC(i+(aBlockSize - i%aBlockSize));
247 HBufC8 *padOutData = HBufC8::NewLC(i);
248 HBufC8 *padCompareData = HBufC8::NewLC(i);
249 TPtr8 in(padInData->Des());
250 TPtr8 out(padOutData->Des());
251 TPtr8 comp(padCompareData->Des());
254 // build up a padded string here
255 for (j = 0; j < i; j++)
262 TInt paddingBytes = aBlockSize - i%aBlockSize;
263 in.SetLength(in.Length() + paddingBytes);
265 // pad with arbitary data, to test unpadding of SSL 3.0 padded data
266 in[in.Length()-1] = (TUint8) (paddingBytes - 1);
267 for (j = 2; j <= paddingBytes; j++)
269 in[in.Length()-j] = (TUint8) ('a' + j%25);
271 TRAPD(err, padding->UnPadL(in, out));
272 INFO_PRINTF3(_L("The error returned for input size %d is %d"), i, err);
273 TEST(err == KErrNone);
275 // test if the unpadding was correct.
278 CleanupStack::PopAndDestroy(3, padInData); // padInData, padOutData, padCompareData
280 CleanupStack::PopAndDestroy(padding);
283 void CTestUnpadSSLv3::TestSSLv3CorruptUnpadding(TInt aBlockSize, TInt aTextSize)
285 CPaddingSSLv3 *padding = CPaddingSSLv3::NewLC(aBlockSize);
287 TInt paddingBytes = 0;
288 //If BlockSize is 0, Divide by 0 is undefined
291 paddingBytes = aBlockSize - aTextSize%aBlockSize;
293 HBufC8 *padInData = HBufC8::NewLC(aTextSize+ paddingBytes);
294 HBufC8 *padOutData = HBufC8::NewLC(aTextSize);
295 HBufC8 *padCompareData = HBufC8::NewLC(aTextSize);
296 TPtr8 in(padInData->Des());
297 TPtr8 out(padOutData->Des());
298 TPtr8 comp(padCompareData->Des());
301 if(in.Length() < aTextSize)
303 for (j = 0; j < in.Length(); j++)
311 // build up a padded string here
312 for (j = 0; j < aTextSize; j++)
320 in.SetLength(in.Length() + paddingBytes);
324 // pad with arbitary data, to test unpadding of SSL 3.0 padded data
325 in[in.Length()-1] = (TUint8) (paddingBytes - 1);
326 for (j = 2; j <= paddingBytes; j++)
328 in[in.Length()-j] = (TUint8) ('a' + j%25);
331 TRAPD(err, padding->UnPadL(in, out));
333 if(iExpectedResult.Compare(_L("CorruptBlockSize")) ==0)
335 TEST(err == KErrArgument);
337 else if(iExpectedResult.Compare(_L("Valid")) ==0)
339 TEST(err == KErrNone);
341 else if(iExpectedResult.Compare(_L("InvalidPadding")) == 0)
343 TEST(err == KErrInvalidPadding);
345 // test if the unpadding was correct.
347 CleanupStack::PopAndDestroy(3, padInData); // padInData, padOutData, padCompareData
348 CleanupStack::PopAndDestroy(padding);