cryptoservices/certificateandkeymgmt/tpkcs7/tpkcs7step.cpp
changeset 8 35751d3474b7
parent 0 2c201484c85f
--- a/cryptoservices/certificateandkeymgmt/tpkcs7/tpkcs7step.cpp	Tue Jul 21 01:04:32 2009 +0100
+++ b/cryptoservices/certificateandkeymgmt/tpkcs7/tpkcs7step.cpp	Thu Sep 10 14:01:51 2009 +0300
@@ -1,969 +1,970 @@
-/*
-* Copyright (c) 2002-2009 Nokia Corporation and/or its subsidiary(-ies).
-* All rights reserved.
-* This component and the accompanying materials are made available
-* under the terms of the License "Eclipse Public License v1.0"
-* which accompanies this distribution, and is available
-* at the URL "http://www.eclipse.org/legal/epl-v10.html".
-*
-* Initial Contributors:
-* Nokia Corporation - initial contribution.
-*
-* Contributors:
-*
-* Description: 
-*
-*/
-
-
-#include "tpkcs7step.h"
-#include <testexecutelog.h>
-#include <pkcs7signedobject.h>
-#include <pkcs7contentinfo_v2.h>
-#include <pkcs7digestinfo.h>
-#include <pkcs7encrypteddataobject.h>
-#include <pkixcertchain.h>
-#include <pbe.h>
-#include <pbedata.h>
-#include <asn1dec.h>
-
-#include "validate.h"
-
-CTPKCS7CorruptTest::CTPKCS7CorruptTest()
-	{
-	SetTestStepName(KTPKCS7CorruptTest);
-	}
-
-CTPKCS7ValidTest::CTPKCS7ValidTest()
-	{
-	SetTestStepName(KTPKCS7ValidTest);
-	}
-
-CTPKCS7ContentTest::CTPKCS7ContentTest()
-	{
-	SetTestStepName(KTPKCS7ContentTest);
-	}
-
-CTPKCS7CertificateTest::CTPKCS7CertificateTest()
-	{
-	SetTestStepName(KTPKCS7CertificateTest);
-	}
-
-CTPKCS7SignerTest::CTPKCS7SignerTest()
-	{
-	SetTestStepName(KTPKCS7SignerTest);
-	}
-CTPKCS7EncryptedDataTest::CTPKCS7EncryptedDataTest()
-	{
-	SetTestStepName(KTPKCS7EncryptedDataTest);
-	}
-
-CTPKCS7DigestInfoTest::CTPKCS7DigestInfoTest()
-	{
-	SetTestStepName(KTPKCS7DigestInfoTest);
-	}
-	
-CTPKCS7EncryptedDataCorruptTest::CTPKCS7EncryptedDataCorruptTest()
-	{
-	SetTestStepName(KTPKCS7EncryptedDataCorruptTest);
-	}
-	
-CTPKCS7DigestInfoCorruptTest::CTPKCS7DigestInfoCorruptTest()
-	{
-	SetTestStepName(KTPKCS7DigestInfoCorruptTest);
-	}
-
-CTPKCS7OOMTest::CTPKCS7OOMTest()
-	{
-	SetTestStepName(KTPKCS7OOMTest);
-	}
-
-TVerdict CTPKCS7OOMTest::doTestStepL()
-	{
-	TVerdict verdict = EFail;
- 	TInt countAfter = 0;
-	TInt countBefore = 0;
- 	for (TInt oomCount = 0; ; oomCount++)
- 		{
- 		__UHEAP_RESET;
- 		__UHEAP_SETFAIL(RHeap::EDeterministic, oomCount);
- 		countBefore = User::CountAllocCells();
- 		TRAPD(error, doTestOOML());
- 		countAfter = User::CountAllocCells();
- 		__UHEAP_RESET;
- 		if (error != KErrNoMemory)
- 			{
- 			verdict = EPass;
- 			INFO_PRINTF2(_L("OOM Status %d"),error);
-			INFO_PRINTF1(_L("Test outcome : Passed"));
- 			break;
- 			}
- 		else
- 			{
- 			if (countBefore != countAfter)
- 				{
- 				INFO_PRINTF2(_L("OOM Status %d"),error);
- 				INFO_PRINTF2(_L("OOM Failed at %d"), oomCount);
- 				verdict = EFail;
- 				break;
- 				}
- 			}
- 		INFO_PRINTF2(_L("OOM Failed Point status %d"), error);
-		}
-	INFO_PRINTF3(_L("Heap alloc count ok: %d final vs %d initial"), countAfter,countBefore);
- 	SetTestStepResult(verdict);
- 	return verdict;
-	}
-
-void CTPKCS7OOMTest::doTestOOML()
-	{
-	TInt OOMTest;
-	GetIntFromConfig(ConfigSection(),_L("OOMTestNo"),OOMTest);
-	__UHEAP_MARK;
-			
-	if (OOMTest == 1)
-		{
-		CPKCS7ContentInfo* theTest = NULL;
-		theTest = CPKCS7ContentInfo::NewL(iRawData->Des());
-		delete theTest;
-		}
-	// Digest Info
-	else if (OOMTest == 2)
-		{
-		CPKCS7DigestInfo* theTest0 = NULL;
-		theTest0 = CPKCS7DigestInfo::NewL(iRawData->Des());
-		delete theTest0;
-		}
-	// Encrypted Data
-	else if (OOMTest == 3)
-		{
-		CPKCS7ContentInfo* theTest1 = NULL;
-		theTest1 = CPKCS7ContentInfo::NewL(iRawData->Des());
-			
-		CleanupStack::PushL(theTest1);
-		CPKCS7EncryptedDataObject* theTest2 = NULL;
-		theTest2 = CPKCS7EncryptedDataObject::NewL(*theTest1);
-				
-		CleanupStack::PopAndDestroy(theTest1);
-		delete theTest2;
-		}
-	
-	__UHEAP_MARKEND;
-}
-
-//	Step 1	Corrupt
-TVerdict CTPKCS7CorruptTest::doTestStepL()
-	{
-	if (TestStepResult() != EPass)
-		{
-		return TestStepResult();
-		}
-
-	TInt reason;
-	if (GetIntFromConfig(ConfigSection(),_L("Reason"),reason) == EFalse)
-		{
-		reason = KErrNone;
-		}
-	
-	TInt err;
-	
-    //Use CPKCS7ContentInfo class in order to obtain the ContentType and ContentData.
-    //Depending on the ContentType the corresponding Object of that ContentType is created.
-	CPKCS7ContentInfo * contentInfo = NULL;
-	TRAP (err, contentInfo = CPKCS7ContentInfo::NewL(iRawData->Des()));
-
-	//Checks if the file is empty, Corrupt
-	if (err == reason)
-		{
-		delete contentInfo;
-		SetTestStepResult(EPass);
-		INFO_PRINTF3(_L("Expected result %d, got %d"), reason, err);
-		return TestStepResult();
-		}
-	
-	if( err == KErrNone)
-		{
-		//ContentType is SignedData
-		if( contentInfo->ContentType() == KPkcs7SignedData)
-			{
-			CPKCS7SignedObject * p7 = NULL;
-			TRAP (err, p7 = CPKCS7SignedObject::NewL(*contentInfo));
-			delete p7;
-			}
-		}
-	delete contentInfo;
-
-	if (err != reason)
-		{
-		SetTestStepResult(EFail);
-		INFO_PRINTF3(_L("Expected result %d, got %d"), reason, err);
-		}
-	//Not corrupt , repeat files
-	return TestStepResult();
-	}
-	
-	
-TVerdict CTPKCS7ValidTest::doTestStepL()
-	{
-	if (TestStepResult() != EPass)
-		{
-		return TestStepResult();
-		}
-
-	__UHEAP_MARK;
-	TBool expectedValid;
-	if (GetBoolFromConfig(ConfigSection(),_L("IsValid"), expectedValid) == EFalse)
-		{
-		expectedValid = ETrue;
-		}
-	
-	TInt err;
-
-	CPKCS7ContentInfo * contentInfo = NULL;
-	TRAP (err, contentInfo = CPKCS7ContentInfo::NewL(iRawData->Des()));
-	
-	if(err == KErrNone)
-		{
-		CPKCS7SignedObject * p7 = NULL;
-		if( contentInfo->ContentType() == KPkcs7SignedData)
-			{
-			TRAP (err, p7 = CPKCS7SignedObject::NewL(*contentInfo));
-			//expired, and the case where certificate chain root is not on the device	
-			if (!expectedValid)
-				{
-				if (err != KErrNone)
-					{
-					SetTestStepResult(EPass);
-					INFO_PRINTF2(_L("Got %d building PKCS7 object"), err);
-					return TestStepResult();
-					}
-				}
-
-			if (err != KErrNone)
-				{
-				SetTestStepResult(EFail);
-				INFO_PRINTF2(_L("Got %d building PKCS7 object"), err);
-				}
-			else
-				{
-				CleanupStack::PushL (p7);
-		
-				const RPointerArray<CPKCS7SignerInfo>& signers = p7->SignerInfo();
-				TBool isValid = EFalse;
-				HBufC8* certificateEncoding = NULL;
-				if(!p7->ValidateSignerL(*signers[0], certificateEncoding))
-					{
-					INFO_PRINTF1(_L("Couldn't validate signer"));
-					}
-				else
-					{
-					CActiveScheduler* sched = NULL;
-					if (CActiveScheduler::Current() == NULL)
-						{
-						INFO_PRINTF1(_L("Installing scheduler"));
-						sched = new (ELeave) CActiveScheduler();
-						CleanupStack::PushL (sched);
-						__UHEAP_MARK;
-						CActiveScheduler::Install (sched);
-						}
-					RPointerArray<CX509Certificate> roots (&iRootCertificate, 1);
-					CPKIXCertChain * chain = CPKIXCertChain::NewLC(iFs, *certificateEncoding, roots);
-					TTime tm;
-					_LIT(KDateCorrect1,"20040801:"); 
-					TBuf <24> theDate(KDateCorrect1); 
-					TInt err=tm.Set(theDate); 
-					if(err)
-						{
-						tm.HomeTime();
-						}
-					CPKIXValidationResult* result = CPKIXValidationResult::NewLC();
-					CTPKCS7Validator* validator = new (ELeave) CTPKCS7Validator (chain, result, &tm);
-					CleanupStack::PushL (validator);
-					validator->doValidate ();
-					sched->Start ();
-					if (result->Error().iReason == EValidatedOK)
-						{
-						isValid = ETrue;
-						INFO_PRINTF1(_L("Validation success"));
-						}
-					else
-						{
-						INFO_PRINTF2(_L("Validation failed: %d"), result->Error().iReason);
-						}
-            				
-					CleanupStack::PopAndDestroy(validator);
-					CleanupStack::PopAndDestroy(result);
-					CleanupStack::PopAndDestroy(chain);
-					if (sched)
-						{
-						CActiveScheduler::Install (NULL);
-						CleanupStack::PopAndDestroy (sched);
-						}
-					}
-				if (certificateEncoding)
-					{
-					CleanupStack::PopAndDestroy(certificateEncoding);
-					}
-				CleanupStack::PopAndDestroy (p7);
-				if (isValid != expectedValid)
-					{
-					SetTestStepResult(EFail);
-					if (expectedValid)
-						{
-						INFO_PRINTF1(_L("Expected valid, got invalid"));
-						}
-					else
-						{
-						INFO_PRINTF1(_L("Expected invalid, got valid"));
-						}
-					}
-				}
-
-			}
-		}
-	else
-		{
-		SetTestStepResult(EFail);
-		}
-
-	
-	__UHEAP_MARKEND;
-	return TestStepResult();
-	}
-	
-	
-//	Step 3	Content
-TVerdict CTPKCS7ContentTest::doTestStepL()
-	{
-	if (TestStepResult() != EPass)
-		{
-		return TestStepResult();
-		}
-
-	TBool checkType;
-	TBool checkLength;
-	TBool checkContent;
-	TInt expectedType;
-	TInt expectedLength;
-	TPtrC expectedString;
-	HBufC8 * expectedContent = NULL;
-
-	checkType    = GetIntFromConfig   (ConfigSection(),_L("ContentType"),   expectedType);
-	checkLength  = GetIntFromConfig   (ConfigSection(),_L("ContentLength"), expectedLength);
-	checkContent = GetStringFromConfig(ConfigSection(),_L("ContentString"), expectedString);
-
-	if (checkContent)
-		{
-		if (expectedString.Length() & 1)
-			{
-			SetTestStepResult(ETestSuiteError);
-			INFO_PRINTF1(_L("ContentString is not a multiple of 2 long"));
-			checkContent = EFalse;
-			}
-		else
-			{
-			// workaround to parse the expectedstring 
-			expectedContent = HBufC8::NewLC (expectedString.Length()/2);
-			TPtr8 des = expectedContent->Des ();
-			for (TInt i = 0; i < expectedString.Length()/2; i++)
-				{
-				TInt top = expectedString[2*i];
-				TInt low = expectedString[2*i+1];
-				if (top >= 0x61) top -= (0x61-10);
-				else top -= 0x30;
-				if (low >= 0x61) low -= (0x61-10);
-				else low -= 0x30;
-				des.Append (top*16+low);
-				}
-			}
-		}
-	TInt err;
-
-    CPKCS7ContentInfo * contentInfo = NULL;
-	TRAP (err, contentInfo = CPKCS7ContentInfo::NewL(iRawData->Des()));
-    if(err == KErrNone)
-		{
-		CPKCS7SignedObject * p7 = NULL;
-		if( contentInfo->ContentType() == 2)
-			{
-			TRAPD (err, p7 = CPKCS7SignedObject::NewL(*contentInfo));
-
-			if (err != KErrNone)
-				{
-				SetTestStepResult(EFail);
-				INFO_PRINTF2(_L("Got %d building PKCS7 object"), err);
-				}
-			else
-				{
-				CleanupStack::PushL (p7);
-				const CPKCS7ContentInfo& p7info = p7->ContentInfo ();
-				if (checkType)
-					{
-					if (p7info.ContentType() != expectedType)
-						{
-						SetTestStepResult(EFail);
-						INFO_PRINTF3(_L("Expected ContentType %d, got %d"), expectedType, p7info.ContentType());
-						}
-					}
-				const TDesC8& content = p7info.ContentData();
-		
-				if (checkLength)
-					{
-					if (content.Length() != expectedLength)
-						{
-						SetTestStepResult(EFail);
-						INFO_PRINTF3(_L("Expected ContentLength %d, got %d"), expectedLength, content.Length());
-						}
-					}
-				if (checkContent)
-					{
-					if (content.Length() != expectedContent->Length())
-						{
-						SetTestStepResult(EFail);
-						INFO_PRINTF3(_L("Expected ContentString length %d does not correspond to PKCS7 data length %d"),
-						expectedContent->Length(), content.Length());
-						}
-					else
-						{
-						if (expectedContent->Compare(content) != 0)
-							{
-							SetTestStepResult(EFail);
-							INFO_PRINTF1(_L("Expected ContentString does not match PKCS7 content"));
-							}
-						}
-					}
-				CleanupStack::PopAndDestroy (p7);
-				}
-
-			}
-		}
-	else
-		{
-		SetTestStepResult(EFail);
-		}
-
-		if (expectedContent)
-			{
-			CleanupStack::PopAndDestroy (expectedContent);
-			}
-
-		if (!checkType && !checkLength && !checkContent && (TestStepResult()==EPass))
-			{
-			SetTestStepResult(EInconclusive);
-			INFO_PRINTF1(_L("No test performed in this step"));
-			}
-
-	return TestStepResult();
-	}
-
-//	Step 4	Certificate
-TVerdict CTPKCS7CertificateTest::doTestStepL()
-	{
-	if (TestStepResult() != EPass)
-		{
-		return TestStepResult();
-		}
-
-	TBool checkCount;
-	TInt expectedCount;
-
-	checkCount = GetIntFromConfig (ConfigSection(),_L("CertificateCount"), expectedCount);
-	
-	TInt err;
-	
-
-	CPKCS7ContentInfo * contentInfo = NULL;
-	TRAP (err, contentInfo = CPKCS7ContentInfo::NewL(iRawData->Des()));
-    
-	if(err == KErrNone)
-		{
-		CPKCS7SignedObject * p7 = NULL;
-		if( contentInfo->ContentType() == 2)
-			{
-			TRAP (err, p7 = CPKCS7SignedObject::NewL(*contentInfo));
-			
-			if (err != KErrNone)
-				{
-				SetTestStepResult(EFail);
-				INFO_PRINTF2(_L("Got %d building PKCS7 object"), err);
-				}
-			else
-				{
-				CleanupStack::PushL (p7);
-				const RPointerArray<CPKCS7ExtendedCertificateOrCertificate>& certificates = p7->Certificates();
-				if (checkCount)
-					{
-					if (certificates.Count() != expectedCount)
-						{
-						SetTestStepResult(EFail);
-						INFO_PRINTF3(_L("Expected %d certificates, got %d"), expectedCount, certificates.Count());
-						}
-					}
-				CleanupStack::PopAndDestroy (p7);
-				}
-
-			}
-		}
-	else
-		{
-		SetTestStepResult(EFail);
-		}
-		
-	if (!checkCount && (TestStepResult()==EPass))
-		{
-		SetTestStepResult(EInconclusive);
-		INFO_PRINTF1(_L("No test performed in this step"));
-		}
-
-	return TestStepResult();
-	}
-
-//	Step 5	Signer
-TVerdict CTPKCS7SignerTest::doTestStepL()
-	{
-	if (TestStepResult() != EPass)
-		{
-		return TestStepResult();
-		}
-
-	TBool checkCount;
-	TInt expectedCount;
-
-	checkCount = GetIntFromConfig (ConfigSection(),_L("SignerCount"), expectedCount);
-
-	TInt err;
-
-	CPKCS7ContentInfo * contentInfo = NULL;
-	TRAP (err, contentInfo = CPKCS7ContentInfo::NewL(iRawData->Des()));
-    if(err == KErrNone)
-		{
-		CPKCS7SignedObject * p7 = NULL;
-		if( contentInfo->ContentType() == 2)
-			{
-			TRAPD (err, p7 = CPKCS7SignedObject::NewL(*contentInfo));
-
-			if (err != KErrNone)
-				{
-				SetTestStepResult(EFail);
-				INFO_PRINTF2(_L("Got %d building PKCS7 object"), err);
-				}
-			else
-				{
-				CleanupStack::PushL (p7);
-				const RPointerArray<CPKCS7SignerInfo>& signers = p7->SignerInfo();
-				if (checkCount)
-					{
-					if (signers.Count() != expectedCount)
-						{
-						SetTestStepResult(EFail);
-						INFO_PRINTF3(_L("Expected %d signers, got %d"), expectedCount, signers.Count());
-						}
-					}
-				CleanupStack::PopAndDestroy (p7);
-				}
-
-			}
-		}
-
-	
-	if (!checkCount && (TestStepResult()==EPass))
-		{
-		SetTestStepResult(EInconclusive);
-		INFO_PRINTF1(_L("No test performed in this step"));
-		}
-
-	return TestStepResult();
-	}
-
-	
-	
-//Encrypted Data
-TVerdict CTPKCS7EncryptedDataTest::doTestStepL()
-	{
-
-	if (TestStepResult() != EPass)
-		{
-		return TestStepResult();
-		}
-		
-	TInt reason;
-	// Read from INI file.
-	GetIntFromConfig(ConfigSection(),_L("Reason"),reason);
-
-	//Is Valid	
-  	TBool expectedValid;
-  	TBool checkValid;
-      
-  	checkValid = GetBoolFromConfig(ConfigSection(),_L("IsValid"), expectedValid);
- 	
-	 __UHEAP_MARK;
-    CPKCS7ContentInfo *contentInfo = NULL;
-	TRAPD (err, contentInfo = CPKCS7ContentInfo::NewL(iRawData->Des()));
-	CleanupStack::PushL(contentInfo);
-    if(err == KErrNone)
-		{
-	     
-		CPKCS7EncryptedDataObject* p7 = NULL;
-		TInt type = contentInfo->ContentType();
-		if( contentInfo->ContentType() == CPKCS7ContentInfo::EContentTypeEncryptedData)
-			{
-			TRAPD (err, p7 = CPKCS7EncryptedDataObject::NewL(*contentInfo));
-		    CleanupStack::PushL(p7);
-		    __UHEAP_MARK;
-
-			if (checkValid)
-  				{
-  				if(!expectedValid && err == reason)
-  		 			{ 
-					CleanupStack::PopAndDestroy(2,contentInfo);//p7, contentInfo
-  		 			return TestStepResult();
-  		 			}
-  				if(!expectedValid && contentInfo->ContentType() == 1)	
-           			{
-           			CleanupStack::PopAndDestroy(2,contentInfo);//p7, contentInfo
-           		 	return TestStepResult();
-           			}
-  				}
-
-			if (err != KErrNone)
-				{
-				SetTestStepResult(EFail);
-				ERR_PRINTF2(_L("Got %d building PKCS7 object"), err);
-				}
-    	
-			//CONTENT TYPE
-			CPKCS7EncryptedDataObject::TContentType contentType = p7->ContentType();
-			if(contentType != CPKCS7EncryptedDataObject::EPkcs7Data)
-    			{
-     			SetTestStepResult(EFail);
-     			ERR_PRINTF1(_L("ContentType does not match"));
-     			CleanupStack::PopAndDestroy(3,contentInfo);//expectedContentType, p7, contentInfo
-     			return TestStepResult();	
-     			}
-			 else
-     			{
-     			INFO_PRINTF1(_L("ContentType matches"));	
-     			}
-	  
-			//ENCRYPTEDCONTENT DATA
-			const TDesC8& contentData = p7->EncryptedContentInfoData();
-			if(contentData.Compare(*iContentData) != 0)
-				{
-	   			SetTestStepResult(EFail);
-	   			ERR_PRINTF1(_L("EncryptedContentData does not match"));
-	   			CleanupStack::PopAndDestroy(2,contentInfo);	//p7, contentInfo
-	   			return TestStepResult();
-	  			}
-			else
-	  			{
-	  			INFO_PRINTF1(_L("EncryptedContentData matches")); 	
-	  			}
-		    
-	  
-			//SALT
-			const CPBEncryptParms& encryptParams = p7->EncryptParams();
-			if((encryptParams.Salt()).Compare(*iSaltValue) != 0)
-				{
-	   			SetTestStepResult(EFail);
-	   			ERR_PRINTF1(_L("Salt Value does not match"));	
-	   			CleanupStack::PopAndDestroy(2, contentInfo);//p7,contentInfo
-	   			return TestStepResult();
-	  			}
-			else
-				{
-				INFO_PRINTF1(_L("Salt Value matches"));	
-				}  	
-	        
-	
-			//ITERATION COUNT
-			TBool checkIteration;
-			TInt expectedIterationCount;
-	
-			checkIteration = GetIntFromConfig(ConfigSection(),_L("Iteration"), expectedIterationCount);
-			if(checkIteration)
-				{
-	   			if(encryptParams.Iterations() != expectedIterationCount)
-	   				{
-	   				SetTestStepResult(EFail);
-	   				ERR_PRINTF1(_L("Iterations does not match"));
-	   				CleanupStack::PopAndDestroy(2, contentInfo);//p7, contentInfo
-	   				return TestStepResult();	
-	   				}
-	   			else
-	   				{
-	   				INFO_PRINTF1(_L("Iteration matches")); 
-	   				}
-	  			}		
-	
-			//CIPHER
-			TBool checkCipher;
-			TPtrC expectedCipher;
-			TPBECipher cipherValue = (TPBECipher) -1;//assign to impossible value
-	
-			checkCipher = GetStringFromConfig(ConfigSection(),_L("Algorithm"),  expectedCipher);
-		
-			if(checkCipher)
-				{
-				if(expectedCipher.Compare(_L("pbeWithSHA1And40BitRC2_CBC")) == 0)
-	   	 			{
-	   	  			cipherValue = ECipherRC2_CBC_40_5;
-	     			}
-				else if(expectedCipher.Compare(_L("pbeWithSHA1And128BitRC4")) == 0)
-	   	 			{
-	   	  			cipherValue = ECipherARC4_128;
-	     			}
-	            else if(expectedCipher.Compare(_L("pbeWithSHA1AndDES-CBC")) == 0)
-	   	 			{
-	   	  			cipherValue = ECipherDES_CBC;
-	     			}
-	     		else if(expectedCipher.Compare(_L("pbeWithSHAAnd3_KeyTripleDES_CBC")) == 0)
-	   	 			{
-	   	  			cipherValue = ECipher3DES_CBC;
-	     			}
-	     		else if(expectedCipher.Compare(_L("pbeWithSHAAnd2-KeyTripleDES-CBC"))==0)
-	     			{
-	     			cipherValue = ECipher2Key3DES_CBC;	
-	     			}
-	     		else if(expectedCipher.Compare(_L("pbeWithSHA1And40BitRC4")) == 0)
-	   	 			{
-	   	  			cipherValue = ECipherARC4_40;
-	     			}
-	     		else if(expectedCipher.Compare(_L("pbewithSHAAnd128BitRC2CBC")) == 0)
-	   	 			{
-	   	  			cipherValue = ECipherRC2_CBC_128_16;
-	     			}
-	     		else if(expectedCipher.Compare(_L("pbeWithSHA1AndRC2_CBC")) == 0)
-	     			{
-	     			cipherValue = ECipherRC2_CBC_40;
-	     			}
-	     					
-	   			if(encryptParams.Cipher() != cipherValue)
-	     			{
-	     			SetTestStepResult(EFail);
-	     			ERR_PRINTF1(_L("Cipher does not match"));
-	     			CleanupStack::PopAndDestroy(3, contentInfo);//expectedCipher,p7,contentInfo
-	     			return TestStepResult();	
-	     			} 
-				else 
-	    			{
-	   				INFO_PRINTF1(_L("Cipher matches")); 
-	    			}
-				}
-					
-			if(contentData.Length() != 0)
-				{
-				//Decryption
-				TBool checkPassword;
-				TPtrC password;
-				
-				checkPassword = GetStringFromConfig(ConfigSection(),_L("Password"), password);
-					
-				if(checkPassword)
-					{
-			    	HBufC8* plainText = p7->DecryptDataL(password);
-			    	delete plainText;
-			    	SetTestStepResult(EPass);
-	  				} 
-				}
-	  		CleanupStack::PopAndDestroy(p7);
-            }
-        //If ContentType is not Encrypted Data
-        else
-        	{
-        		
-        	if(checkValid)
-          		{
-          		if(!expectedValid && err == reason)
- 		 			{
-  		 			CleanupStack::PopAndDestroy(contentInfo);
-  		 			return TestStepResult();
-  		 			}
-          		else
-          			{
-          			SetTestStepResult(EFail);	
-          			}
-          		}
-
-       		}
-		}
-	else if(err != reason)
-		{
-		SetTestStepResult(EFail);
-		}
-	CleanupStack::PopAndDestroy(contentInfo);
-	__UHEAP_MARKEND;
-	
-	return TestStepResult();
-	}
-	
-	
-//Digest Info
-TVerdict CTPKCS7DigestInfoTest::doTestStepL()
-	{
-	if (TestStepResult() != EPass)
-		{
-		return TestStepResult();
-		}
-	__UHEAP_MARK;
-	
-	TInt reason;
-	// Read from INI file.
-	GetIntFromConfig(ConfigSection(),_L("Reason"),reason);
-			
-	CPKCS7DigestInfo* p7 = NULL;
-	TRAPD (err, p7 = CPKCS7DigestInfo::NewL(iRawData->Des()));
-	CleanupStack::PushL(p7);
-	
-	if (err != KErrNone)
-		{
-		if(err == reason)
-			{
-			CleanupStack::PopAndDestroy(p7);
-			SetTestStepResult(EPass);
-			return TestStepResult();
-			}
-		else
-			{
-			SetTestStepResult(EFail);
-			ERR_PRINTF2(_L("Got %d building PKCS7 object"), err);
-			}
-		}
-	
-	//DIGEST	
-    const TDesC8& digest = p7->Digest();
-    if(digest.Compare(*iDigest) != 0)		
-    	{
-       	SetTestStepResult(EFail);
-	   	ERR_PRINTF1(_L("Digest does not match"));
-      	}
-    else
-		{
-		INFO_PRINTF1(_L("Digest matches"));		
-		}
-     
-    //ALGORITHM ID
-    TBool checkAlgorithm;
-    TPtrC expectedAlgorithm;
-    TAlgorithmId algorithmId = (TAlgorithmId) -1;
-   	
-	checkAlgorithm = GetStringFromConfig(ConfigSection(),_L("AlgorithmId"), expectedAlgorithm);
-
-	if(checkAlgorithm)
-		{
-	   	if(expectedAlgorithm.Compare(_L("SHA1")) == 0)
-	   	 	{
-	   	  	algorithmId = ESHA1;
-	     	}
-      	else if(expectedAlgorithm.Compare(_L("MD5")) == 0)
-	   	 	{
-	   	  	algorithmId = EMD5;
-	     	}
-      
-    	if(algorithmId != p7->Algorithm())  
-        	{
-       		SetTestStepResult(EFail);
-	   		ERR_PRINTF1(_L("Algorithm Id does not match"));	
-      		}
-      	else
-      		{
-      		INFO_PRINTF1(_L("Algorithm Id matches"));	
-      		}	
-    	}
-    
-    //ENCODED PARAMS
-    const TDesC8& encodedParams= p7->EncodedParams();
-    
-    if(encodedParams.Length() != 0)
-    	{
-    	if(encodedParams.Compare(*iEncodedParams))  
-    		{
-       		SetTestStepResult(EFail);
-	   		ERR_PRINTF1(_L("EncodedParams does not match"));		
-      		}
-    	else
-    		{
-    		INFO_PRINTF1(_L("EncodedParams match"));	
-    		}  	
-    	}
-    else if(!iEncodedParams)
-        {
-        INFO_PRINTF1(_L("EncodedParams not present"));	
-        }
-    
-    
-    CleanupStack::PopAndDestroy(p7);
-    __UHEAP_MARKEND;	
-	return TestStepResult();
-	}
-	
-	
-//EncryptedDataCorrupt
-//Step8
-TVerdict CTPKCS7EncryptedDataCorruptTest::doTestStepL()
-	{
-	if (TestStepResult() != EPass)
-		{
-		return TestStepResult();
-		}
-    __UHEAP_MARK;	
-	TInt reason;
-	GetIntFromConfig(ConfigSection(),_L("Reason"),reason);
-		
-	CPKCS7ContentInfo *contentInfo = NULL;
-	TRAPD (err, contentInfo = CPKCS7ContentInfo::NewL(iRawData->Des()));
-	CleanupStack::PushL(contentInfo);
-	
-	if(err != KErrNone)
-		{
-		if (err != reason)
-			{
-			SetTestStepResult(EFail);
-			INFO_PRINTF3(_L("Expected result %d, got %d"), reason, err);
-			}
-		}
-	
-		
-	if (err == reason)
-		{
-		CleanupStack::PopAndDestroy(contentInfo);
-		return TestStepResult();
-		}
-
-    CPKCS7EncryptedDataObject* p7 = NULL;
-	TRAPD (err1, p7 = CPKCS7EncryptedDataObject::NewL(*contentInfo));
-	CleanupStack::PushL(p7);
-	
-	if (err1 != reason)
-		{
-		SetTestStepResult(EFail);
-		INFO_PRINTF3(_L("Expected result %d, got %d"), reason, err);
-		}
-	CleanupStack::PopAndDestroy(2,contentInfo);//p7, contentInfo
-	__UHEAP_MARKEND;
-	return TestStepResult();
-	}
-
-//DigestInfoCorrupt
-//Step 9
-TVerdict CTPKCS7DigestInfoCorruptTest::doTestStepL()
-	{
-	if (TestStepResult() != EPass)
-		{
-		return TestStepResult();
-		}
-    __UHEAP_MARK;
-	TInt reason;
-	GetIntFromConfig(ConfigSection(),_L("Reason"),reason);
-	
-	CPKCS7DigestInfo* p7 = NULL;
-	TRAPD (err, p7 = CPKCS7DigestInfo::NewL(iRawData->Des()));
-	delete p7;
-	
-	if (err != reason)
-		{
-		SetTestStepResult(EFail);
-		INFO_PRINTF3(_L("Expected result %d, got %d"), reason, err);
-		}
-	__UHEAP_MARKEND;
-	return TestStepResult();
-	}
+/*
+* Copyright (c) 2002-2009 Nokia Corporation and/or its subsidiary(-ies).
+* All rights reserved.
+* This component and the accompanying materials are made available
+* under the terms of the License "Eclipse Public License v1.0"
+* which accompanies this distribution, and is available
+* at the URL "http://www.eclipse.org/legal/epl-v10.html".
+*
+* Initial Contributors:
+* Nokia Corporation - initial contribution.
+*
+* Contributors:
+*
+* Description: 
+*
+*/
+
+
+#include "tpkcs7step.h"
+#include <test/testexecutelog.h>
+#include "pkcs7signedobject.h"
+#include <pkcs7contentinfo_v2.h>
+#include <pkcs7digestinfo.h>
+#include <pkcs7encrypteddataobject.h>
+#include <pkixcertchain.h>
+#include <pbe.h>
+#include <pbedata.h>
+#include <asn1dec.h>
+
+#include "validate.h"
+
+CTPKCS7CorruptTest::CTPKCS7CorruptTest()
+	{
+	SetTestStepName(KTPKCS7CorruptTest);
+	}
+
+CTPKCS7ValidTest::CTPKCS7ValidTest()
+	{
+	SetTestStepName(KTPKCS7ValidTest);
+	}
+
+CTPKCS7ContentTest::CTPKCS7ContentTest()
+	{
+	SetTestStepName(KTPKCS7ContentTest);
+	}
+
+CTPKCS7CertificateTest::CTPKCS7CertificateTest()
+	{
+	SetTestStepName(KTPKCS7CertificateTest);
+	}
+
+CTPKCS7SignerTest::CTPKCS7SignerTest()
+	{
+	SetTestStepName(KTPKCS7SignerTest);
+	}
+CTPKCS7EncryptedDataTest::CTPKCS7EncryptedDataTest()
+	{
+	SetTestStepName(KTPKCS7EncryptedDataTest);
+	}
+
+CTPKCS7DigestInfoTest::CTPKCS7DigestInfoTest()
+	{
+	SetTestStepName(KTPKCS7DigestInfoTest);
+	}
+	
+CTPKCS7EncryptedDataCorruptTest::CTPKCS7EncryptedDataCorruptTest()
+	{
+	SetTestStepName(KTPKCS7EncryptedDataCorruptTest);
+	}
+	
+CTPKCS7DigestInfoCorruptTest::CTPKCS7DigestInfoCorruptTest()
+	{
+	SetTestStepName(KTPKCS7DigestInfoCorruptTest);
+	}
+
+CTPKCS7OOMTest::CTPKCS7OOMTest()
+	{
+	SetTestStepName(KTPKCS7OOMTest);
+	}
+
+TVerdict CTPKCS7OOMTest::doTestStepL()
+	{
+	TVerdict verdict = EFail;
+ 	TInt countAfter = 0;
+	TInt countBefore = 0;
+ 	for (TInt oomCount = 0; ; oomCount++)
+ 		{
+ 		__UHEAP_RESET;
+ 		__UHEAP_SETFAIL(RHeap::EDeterministic, oomCount);
+ 		countBefore = User::CountAllocCells();
+ 		TRAPD(error, doTestOOML());
+ 		countAfter = User::CountAllocCells();
+ 		__UHEAP_RESET;
+ 		if (error != KErrNoMemory)
+ 			{
+ 			verdict = EPass;
+ 			INFO_PRINTF2(_L("OOM Status %d"),error);
+			INFO_PRINTF1(_L("Test outcome : Passed"));
+ 			break;
+ 			}
+ 		else
+ 			{
+ 			if (countBefore != countAfter)
+ 				{
+ 				INFO_PRINTF2(_L("OOM Status %d"),error);
+ 				INFO_PRINTF2(_L("OOM Failed at %d"), oomCount);
+ 				verdict = EFail;
+ 				break;
+ 				}
+ 			}
+ 		INFO_PRINTF2(_L("OOM Failed Point status %d"), error);
+		}
+	INFO_PRINTF3(_L("Heap alloc count ok: %d final vs %d initial"), countAfter,countBefore);
+ 	SetTestStepResult(verdict);
+ 	return verdict;
+	}
+
+void CTPKCS7OOMTest::doTestOOML()
+	{
+	TInt OOMTest;
+	GetIntFromConfig(ConfigSection(),_L("OOMTestNo"),OOMTest);
+	__UHEAP_MARK;
+			
+	if (OOMTest == 1)
+		{
+		CPKCS7ContentInfo* theTest = NULL;
+		theTest = CPKCS7ContentInfo::NewL(iRawData->Des());
+		delete theTest;
+		}
+	// Digest Info
+	else if (OOMTest == 2)
+		{
+		CPKCS7DigestInfo* theTest0 = NULL;
+		theTest0 = CPKCS7DigestInfo::NewL(iRawData->Des());
+		delete theTest0;
+		}
+	// Encrypted Data
+	else if (OOMTest == 3)
+		{
+		CPKCS7ContentInfo* theTest1 = NULL;
+		theTest1 = CPKCS7ContentInfo::NewL(iRawData->Des());
+			
+		CleanupStack::PushL(theTest1);
+		CPKCS7EncryptedDataObject* theTest2 = NULL;
+		theTest2 = CPKCS7EncryptedDataObject::NewL(*theTest1);
+				
+		CleanupStack::PopAndDestroy(theTest1);
+		delete theTest2;
+		}
+	
+	__UHEAP_MARKEND;
+}
+
+//	Step 1	Corrupt
+TVerdict CTPKCS7CorruptTest::doTestStepL()
+	{
+	if (TestStepResult() != EPass)
+		{
+		return TestStepResult();
+		}
+
+	TInt reason;
+	if (GetIntFromConfig(ConfigSection(),_L("Reason"),reason) == EFalse)
+		{
+		reason = KErrNone;
+		}
+	
+	TInt err;
+	
+    //Use CPKCS7ContentInfo class in order to obtain the ContentType and ContentData.
+    //Depending on the ContentType the corresponding Object of that ContentType is created.
+	CPKCS7ContentInfo * contentInfo = NULL;
+	TRAP (err, contentInfo = CPKCS7ContentInfo::NewL(iRawData->Des()));
+
+	//Checks if the file is empty, Corrupt
+	if (err == reason)
+		{
+		delete contentInfo;
+		SetTestStepResult(EPass);
+		INFO_PRINTF3(_L("Expected result %d, got %d"), reason, err);
+		return TestStepResult();
+		}
+	
+	if( err == KErrNone)
+		{
+		//ContentType is SignedData
+		if( contentInfo->ContentType() == KPkcs7SignedData)
+			{
+			CPKCS7SignedObject * p7 = NULL;
+			TRAP (err, p7 = CPKCS7SignedObject::NewL(*contentInfo));
+			delete p7;
+			}
+		}
+	delete contentInfo;
+
+	if (err != reason)
+		{
+		SetTestStepResult(EFail);
+		INFO_PRINTF3(_L("Expected result %d, got %d"), reason, err);
+		}
+	//Not corrupt , repeat files
+	return TestStepResult();
+	}
+	
+	
+TVerdict CTPKCS7ValidTest::doTestStepL()
+	{
+	if (TestStepResult() != EPass)
+		{
+		return TestStepResult();
+		}
+
+	__UHEAP_MARK;
+	TBool expectedValid;
+	if (GetBoolFromConfig(ConfigSection(),_L("IsValid"), expectedValid) == EFalse)
+		{
+		expectedValid = ETrue;
+		}
+	
+	TInt err;
+
+	CPKCS7ContentInfo * contentInfo = NULL;
+	TRAP (err, contentInfo = CPKCS7ContentInfo::NewL(iRawData->Des()));
+	
+	if(err == KErrNone)
+		{
+		CPKCS7SignedObject * p7 = NULL;
+		if( contentInfo->ContentType() == KPkcs7SignedData)
+			{
+			TRAP (err, p7 = CPKCS7SignedObject::NewL(*contentInfo));
+			//expired, and the case where certificate chain root is not on the device	
+			if (!expectedValid)
+				{
+				if (err != KErrNone)
+					{
+					SetTestStepResult(EPass);
+					INFO_PRINTF2(_L("Got %d building PKCS7 object"), err);
+					return TestStepResult();
+					}
+				}
+
+			if (err != KErrNone)
+				{
+				SetTestStepResult(EFail);
+				INFO_PRINTF2(_L("Got %d building PKCS7 object"), err);
+				}
+			else
+				{
+				CleanupStack::PushL (p7);
+		
+				const RPointerArray<CPKCS7SignerInfo>& signers = p7->SignerInfo();
+				TBool isValid = EFalse;
+				HBufC8* certificateEncoding = NULL;
+				if(!p7->ValidateSignerL(*signers[0], certificateEncoding))
+					{
+					INFO_PRINTF1(_L("Couldn't validate signer"));
+					}
+				else
+					{
+					CActiveScheduler* sched = NULL;
+					if (CActiveScheduler::Current() == NULL)
+						{
+						INFO_PRINTF1(_L("Installing scheduler"));
+						sched = new (ELeave) CActiveScheduler();
+						CleanupStack::PushL (sched);
+						__UHEAP_MARK;
+						CActiveScheduler::Install (sched);
+						}
+					RPointerArray<CX509Certificate> roots (&iRootCertificate, 1);
+					CPKIXCertChain * chain = CPKIXCertChain::NewLC(iFs, *certificateEncoding, roots);
+					TTime tm;
+					_LIT(KDateCorrect1,"20040801:"); 
+					TBuf <24> theDate(KDateCorrect1); 
+					TInt err=tm.Set(theDate); 
+					if(err)
+						{
+						tm.HomeTime();
+						}
+					CPKIXValidationResult* result = CPKIXValidationResult::NewLC();
+					CTPKCS7Validator* validator = new (ELeave) CTPKCS7Validator (chain, result, &tm);
+					CleanupStack::PushL (validator);
+					validator->doValidate ();
+					sched->Start ();
+					if (result->Error().iReason == EValidatedOK)
+						{
+						isValid = ETrue;
+						INFO_PRINTF1(_L("Validation success"));
+						}
+					else
+						{
+						INFO_PRINTF2(_L("Validation failed: %d"), result->Error().iReason);
+						}
+            				
+					CleanupStack::PopAndDestroy(validator);
+					CleanupStack::PopAndDestroy(result);
+					CleanupStack::PopAndDestroy(chain);
+					if (sched)
+						{
+						CActiveScheduler::Install (NULL);
+						CleanupStack::PopAndDestroy (sched);
+						}
+					}
+				if (certificateEncoding)
+					{
+					CleanupStack::PopAndDestroy(certificateEncoding);
+					}
+				CleanupStack::PopAndDestroy (p7);
+				if (isValid != expectedValid)
+					{
+					SetTestStepResult(EFail);
+					if (expectedValid)
+						{
+						INFO_PRINTF1(_L("Expected valid, got invalid"));
+						}
+					else
+						{
+						INFO_PRINTF1(_L("Expected invalid, got valid"));
+						}
+					}
+				}
+
+			}
+		}
+	else
+		{
+		SetTestStepResult(EFail);
+		}
+
+	
+	__UHEAP_MARKEND;
+	return TestStepResult();
+	}
+	
+	
+//	Step 3	Content
+TVerdict CTPKCS7ContentTest::doTestStepL()
+	{
+	if (TestStepResult() != EPass)
+		{
+		return TestStepResult();
+		}
+
+	TBool checkType;
+	TBool checkLength;
+	TBool checkContent;
+	TInt expectedType;
+	TInt expectedLength;
+	TPtrC expectedString;
+	HBufC8 * expectedContent = NULL;
+
+	checkType    = GetIntFromConfig   (ConfigSection(),_L("ContentType"),   expectedType);
+	checkLength  = GetIntFromConfig   (ConfigSection(),_L("ContentLength"), expectedLength);
+	checkContent = GetStringFromConfig(ConfigSection(),_L("ContentString"), expectedString);
+
+	if (checkContent)
+		{
+		if (expectedString.Length() & 1)
+			{
+			SetTestStepResult(ETestSuiteError);
+			INFO_PRINTF1(_L("ContentString is not a multiple of 2 long"));
+			checkContent = EFalse;
+			}
+		else
+			{
+			// workaround to parse the expectedstring 
+			expectedContent = HBufC8::NewLC (expectedString.Length()/2);
+			TPtr8 des = expectedContent->Des ();
+			for (TInt i = 0; i < expectedString.Length()/2; i++)
+				{
+				TInt top = expectedString[2*i];
+				TInt low = expectedString[2*i+1];
+				if (top >= 0x61) top -= (0x61-10);
+				else top -= 0x30;
+				if (low >= 0x61) low -= (0x61-10);
+				else low -= 0x30;
+				des.Append (top*16+low);
+				}
+			}
+		}
+	TInt err;
+
+    CPKCS7ContentInfo * contentInfo = NULL;
+	TRAP (err, contentInfo = CPKCS7ContentInfo::NewL(iRawData->Des()));
+    if(err == KErrNone)
+		{
+		CPKCS7SignedObject * p7 = NULL;
+		if( contentInfo->ContentType() == 2)
+			{
+			TRAPD (err, p7 = CPKCS7SignedObject::NewL(*contentInfo));
+
+			if (err != KErrNone)
+				{
+				SetTestStepResult(EFail);
+				INFO_PRINTF2(_L("Got %d building PKCS7 object"), err);
+				}
+			else
+				{
+				CleanupStack::PushL (p7);
+				const CPKCS7ContentInfo& p7info = p7->ContentInfo ();
+				if (checkType)
+					{
+					if (p7info.ContentType() != expectedType)
+						{
+						SetTestStepResult(EFail);
+						INFO_PRINTF3(_L("Expected ContentType %d, got %d"), expectedType, p7info.ContentType());
+						}
+					}
+				const TDesC8& content = p7info.ContentData();
+		
+				if (checkLength)
+					{
+					if (content.Length() != expectedLength)
+						{
+						SetTestStepResult(EFail);
+						INFO_PRINTF3(_L("Expected ContentLength %d, got %d"), expectedLength, content.Length());
+						}
+					}
+				if (checkContent)
+					{
+					if (content.Length() != expectedContent->Length())
+						{
+						SetTestStepResult(EFail);
+						INFO_PRINTF3(_L("Expected ContentString length %d does not correspond to PKCS7 data length %d"),
+						expectedContent->Length(), content.Length());
+						}
+					else
+						{
+						if (expectedContent->Compare(content) != 0)
+							{
+							SetTestStepResult(EFail);
+							INFO_PRINTF1(_L("Expected ContentString does not match PKCS7 content"));
+							}
+						}
+					}
+				CleanupStack::PopAndDestroy (p7);
+				}
+
+			}
+		}
+	else
+		{
+		SetTestStepResult(EFail);
+		}
+
+		if (expectedContent)
+			{
+			CleanupStack::PopAndDestroy (expectedContent);
+			}
+
+		if (!checkType && !checkLength && !checkContent && (TestStepResult()==EPass))
+			{
+			SetTestStepResult(EInconclusive);
+			INFO_PRINTF1(_L("No test performed in this step"));
+			}
+
+	return TestStepResult();
+	}
+
+//	Step 4	Certificate
+TVerdict CTPKCS7CertificateTest::doTestStepL()
+	{
+	if (TestStepResult() != EPass)
+		{
+		return TestStepResult();
+		}
+
+	TBool checkCount;
+	TInt expectedCount;
+
+	checkCount = GetIntFromConfig (ConfigSection(),_L("CertificateCount"), expectedCount);
+	
+	TInt err;
+	
+
+	CPKCS7ContentInfo * contentInfo = NULL;
+	TRAP (err, contentInfo = CPKCS7ContentInfo::NewL(iRawData->Des()));
+    
+	if(err == KErrNone)
+		{
+		CPKCS7SignedObject * p7 = NULL;
+		if( contentInfo->ContentType() == 2)
+			{
+			TRAP (err, p7 = CPKCS7SignedObject::NewL(*contentInfo));
+			
+			if (err != KErrNone)
+				{
+				SetTestStepResult(EFail);
+				INFO_PRINTF2(_L("Got %d building PKCS7 object"), err);
+				}
+			else
+				{
+				CleanupStack::PushL (p7);
+				const RPointerArray<CPKCS7ExtendedCertificateOrCertificate>& certificates = p7->Certificates();
+				if (checkCount)
+					{
+					if (certificates.Count() != expectedCount)
+						{
+						SetTestStepResult(EFail);
+						INFO_PRINTF3(_L("Expected %d certificates, got %d"), expectedCount, certificates.Count());
+						}
+					}
+				CleanupStack::PopAndDestroy (p7);
+				}
+
+			}
+		}
+	else
+		{
+		SetTestStepResult(EFail);
+		}
+		
+	if (!checkCount && (TestStepResult()==EPass))
+		{
+		SetTestStepResult(EInconclusive);
+		INFO_PRINTF1(_L("No test performed in this step"));
+		}
+
+	return TestStepResult();
+	}
+
+//	Step 5	Signer
+TVerdict CTPKCS7SignerTest::doTestStepL()
+	{
+	if (TestStepResult() != EPass)
+		{
+		return TestStepResult();
+		}
+
+	TBool checkCount;
+	TInt expectedCount;
+
+	checkCount = GetIntFromConfig (ConfigSection(),_L("SignerCount"), expectedCount);
+
+	TInt err;
+
+	CPKCS7ContentInfo * contentInfo = NULL;
+	TRAP (err, contentInfo = CPKCS7ContentInfo::NewL(iRawData->Des()));
+    if(err == KErrNone)
+		{
+		CPKCS7SignedObject * p7 = NULL;
+		if( contentInfo->ContentType() == 2)
+			{
+			TRAPD (err, p7 = CPKCS7SignedObject::NewL(*contentInfo));
+
+			if (err != KErrNone)
+				{
+				SetTestStepResult(EFail);
+				INFO_PRINTF2(_L("Got %d building PKCS7 object"), err);
+				}
+			else
+				{
+				CleanupStack::PushL (p7);
+				const RPointerArray<CPKCS7SignerInfo>& signers = p7->SignerInfo();
+				if (checkCount)
+					{
+					if (signers.Count() != expectedCount)
+						{
+						SetTestStepResult(EFail);
+						INFO_PRINTF3(_L("Expected %d signers, got %d"), expectedCount, signers.Count());
+						}
+					}
+				CleanupStack::PopAndDestroy (p7);
+				}
+
+			}
+		}
+
+	
+	if (!checkCount && (TestStepResult()==EPass))
+		{
+		SetTestStepResult(EInconclusive);
+		INFO_PRINTF1(_L("No test performed in this step"));
+		}
+
+	return TestStepResult();
+	}
+
+	
+	
+//Encrypted Data
+TVerdict CTPKCS7EncryptedDataTest::doTestStepL()
+	{
+
+	if (TestStepResult() != EPass)
+		{
+		return TestStepResult();
+		}
+		
+	TInt reason;
+	// Read from INI file.
+	GetIntFromConfig(ConfigSection(),_L("Reason"),reason);
+
+	//Is Valid	
+  	TBool expectedValid;
+  	TBool checkValid;
+      
+  	checkValid = GetBoolFromConfig(ConfigSection(),_L("IsValid"), expectedValid);
+ 	
+	 __UHEAP_MARK;
+    CPKCS7ContentInfo *contentInfo = NULL;
+	TRAPD (err, contentInfo = CPKCS7ContentInfo::NewL(iRawData->Des()));
+	CleanupStack::PushL(contentInfo);
+    if(err == KErrNone)
+		{
+	     
+		CPKCS7EncryptedDataObject* p7 = NULL;
+		TInt type = contentInfo->ContentType();
+		if( contentInfo->ContentType() == CPKCS7ContentInfo::EContentTypeEncryptedData)
+			{
+			TRAPD (err, p7 = CPKCS7EncryptedDataObject::NewL(*contentInfo));
+		    CleanupStack::PushL(p7);
+		    __UHEAP_MARK;
+
+			if (checkValid)
+  				{
+  				if(!expectedValid && err == reason)
+  		 			{ 
+					CleanupStack::PopAndDestroy(2,contentInfo);//p7, contentInfo
+  		 			return TestStepResult();
+  		 			}
+  				if(!expectedValid && contentInfo->ContentType() == 1)	
+           			{
+           			CleanupStack::PopAndDestroy(2,contentInfo);//p7, contentInfo
+           		 	return TestStepResult();
+           			}
+  				}
+
+			if (err != KErrNone)
+				{
+				SetTestStepResult(EFail);
+				ERR_PRINTF2(_L("Got %d building PKCS7 object"), err);
+				}
+    	
+			//CONTENT TYPE
+			CPKCS7EncryptedDataObject::TContentType contentType = p7->ContentType();
+			if(contentType != CPKCS7EncryptedDataObject::EPkcs7Data)
+    			{
+     			SetTestStepResult(EFail);
+     			ERR_PRINTF1(_L("ContentType does not match"));
+     			CleanupStack::PopAndDestroy(3,contentInfo);//expectedContentType, p7, contentInfo
+     			return TestStepResult();	
+     			}
+			 else
+     			{
+     			INFO_PRINTF1(_L("ContentType matches"));	
+     			}
+	  
+			//ENCRYPTEDCONTENT DATA
+			const TDesC8& contentData = p7->EncryptedContentInfoData();
+			if(contentData.Compare(*iContentData) != 0)
+				{
+	   			SetTestStepResult(EFail);
+	   			ERR_PRINTF1(_L("EncryptedContentData does not match"));
+	   			CleanupStack::PopAndDestroy(2,contentInfo);	//p7, contentInfo
+	   			return TestStepResult();
+	  			}
+			else
+	  			{
+	  			INFO_PRINTF1(_L("EncryptedContentData matches")); 	
+	  			}
+		    
+	  
+			//SALT
+			const CPBEncryptParms& encryptParams = p7->EncryptParams();
+			if((encryptParams.Salt()).Compare(*iSaltValue) != 0)
+				{
+	   			SetTestStepResult(EFail);
+	   			ERR_PRINTF1(_L("Salt Value does not match"));	
+	   			CleanupStack::PopAndDestroy(2, contentInfo);//p7,contentInfo
+	   			return TestStepResult();
+	  			}
+			else
+				{
+				INFO_PRINTF1(_L("Salt Value matches"));	
+				}  	
+	        
+	
+			//ITERATION COUNT
+			TBool checkIteration;
+			TInt expectedIterationCount;
+	
+			checkIteration = GetIntFromConfig(ConfigSection(),_L("Iteration"), expectedIterationCount);
+			if(checkIteration)
+				{
+	   			if(encryptParams.Iterations() != expectedIterationCount)
+	   				{
+	   				SetTestStepResult(EFail);
+	   				ERR_PRINTF1(_L("Iterations does not match"));
+	   				CleanupStack::PopAndDestroy(2, contentInfo);//p7, contentInfo
+	   				return TestStepResult();	
+	   				}
+	   			else
+	   				{
+	   				INFO_PRINTF1(_L("Iteration matches")); 
+	   				}
+	  			}		
+	
+			//CIPHER
+			TBool checkCipher;
+			TPtrC expectedCipher;
+			TPBECipher cipherValue = (TPBECipher) -1;//assign to impossible value
+	
+			checkCipher = GetStringFromConfig(ConfigSection(),_L("Algorithm"),  expectedCipher);
+		
+			if(checkCipher)
+				{
+				if(expectedCipher.Compare(_L("pbeWithSHA1And40BitRC2_CBC")) == 0)
+	   	 			{
+	   	  			cipherValue = ECipherRC2_CBC_40_5;
+	     			}
+				else if(expectedCipher.Compare(_L("pbeWithSHA1And128BitRC4")) == 0)
+	   	 			{
+	   	  			cipherValue = ECipherARC4_128;
+	     			}
+	            else if(expectedCipher.Compare(_L("pbeWithSHA1AndDES-CBC")) == 0)
+	   	 			{
+	   	  			cipherValue = ECipherDES_CBC;
+	     			}
+	     		else if(expectedCipher.Compare(_L("pbeWithSHAAnd3_KeyTripleDES_CBC")) == 0)
+	   	 			{
+	   	  			cipherValue = ECipher3DES_CBC;
+	     			}
+	     		else if(expectedCipher.Compare(_L("pbeWithSHAAnd2-KeyTripleDES-CBC"))==0)
+	     			{
+	     			cipherValue = ECipher2Key3DES_CBC;	
+	     			}
+	     		else if(expectedCipher.Compare(_L("pbeWithSHA1And40BitRC4")) == 0)
+	   	 			{
+	   	  			cipherValue = ECipherARC4_40;
+	     			}
+	     		else if(expectedCipher.Compare(_L("pbewithSHAAnd128BitRC2CBC")) == 0)
+	   	 			{
+	   	  			cipherValue = ECipherRC2_CBC_128_16;
+	     			}
+	     		else if(expectedCipher.Compare(_L("pbeWithSHA1AndRC2_CBC")) == 0)
+	     			{
+	     			cipherValue = ECipherRC2_CBC_40;
+	     			}
+	     					
+	   			if(encryptParams.Cipher() != cipherValue)
+	     			{
+	     			SetTestStepResult(EFail);
+	     			ERR_PRINTF1(_L("Cipher does not match"));
+	     			CleanupStack::PopAndDestroy(3, contentInfo);//expectedCipher,p7,contentInfo
+	     			return TestStepResult();	
+	     			} 
+				else 
+	    			{
+	   				INFO_PRINTF1(_L("Cipher matches")); 
+	    			}
+				}
+					
+			if(contentData.Length() != 0)
+				{
+				//Decryption
+				TBool checkPassword;
+				TPtrC password;
+				
+				checkPassword = GetStringFromConfig(ConfigSection(),_L("Password"), password);
+					
+				if(checkPassword)
+					{
+			    	HBufC8* plainText = p7->DecryptDataL(password);
+			    	delete plainText;
+			    	SetTestStepResult(EPass);
+	  				} 
+				}
+	  		CleanupStack::PopAndDestroy(p7);
+            }
+        //If ContentType is not Encrypted Data
+        else
+        	{
+        		
+        	if(checkValid)
+          		{
+          		if(!expectedValid && err == reason)
+ 		 			{
+  		 			CleanupStack::PopAndDestroy(contentInfo);
+  		 			return TestStepResult();
+  		 			}
+          		else
+          			{
+          			SetTestStepResult(EFail);	
+          			}
+          		}
+
+       		}
+		}
+	else if(err != reason)
+		{
+		SetTestStepResult(EFail);
+		}
+	CleanupStack::PopAndDestroy(contentInfo);
+	__UHEAP_MARKEND;
+	
+	return TestStepResult();
+	}
+	
+	
+//Digest Info
+TVerdict CTPKCS7DigestInfoTest::doTestStepL()
+	{
+	if (TestStepResult() != EPass)
+		{
+		return TestStepResult();
+		}
+	__UHEAP_MARK;
+	
+	TInt reason;
+	// Read from INI file.
+	GetIntFromConfig(ConfigSection(),_L("Reason"),reason);
+			
+	CPKCS7DigestInfo* p7 = NULL;
+	TRAPD (err, p7 = CPKCS7DigestInfo::NewL(iRawData->Des()));
+	CleanupStack::PushL(p7);
+	
+	if (err != KErrNone)
+		{
+		if(err == reason)
+			{
+			CleanupStack::PopAndDestroy(p7);
+			SetTestStepResult(EPass);
+			return TestStepResult();
+			}
+		else
+			{
+			SetTestStepResult(EFail);
+			ERR_PRINTF2(_L("Got %d building PKCS7 object"), err);
+			}
+		}
+	
+	//DIGEST	
+    const TDesC8& digest = p7->Digest();
+    if(digest.Compare(*iDigest) != 0)		
+    	{
+       	SetTestStepResult(EFail);
+	   	ERR_PRINTF1(_L("Digest does not match"));
+      	}
+    else
+		{
+		INFO_PRINTF1(_L("Digest matches"));		
+		}
+     
+    //ALGORITHM ID
+    TBool checkAlgorithm;
+    TPtrC expectedAlgorithm;
+    TAlgorithmId algorithmId = (TAlgorithmId) -1;
+   	
+	checkAlgorithm = GetStringFromConfig(ConfigSection(),_L("AlgorithmId"), expectedAlgorithm);
+
+	if(checkAlgorithm)
+		{
+	   	if(expectedAlgorithm.Compare(_L("SHA1")) == 0)
+	   	 	{
+	   	  	algorithmId = ESHA1;
+	     	}
+      	else if(expectedAlgorithm.Compare(_L("MD5")) == 0)
+	   	 	{
+	   	  	algorithmId = EMD5;
+	     	}
+      
+    	if(algorithmId != p7->Algorithm())  
+        	{
+       		SetTestStepResult(EFail);
+	   		ERR_PRINTF1(_L("Algorithm Id does not match"));	
+      		}
+      	else
+      		{
+      		INFO_PRINTF1(_L("Algorithm Id matches"));	
+      		}	
+    	}
+    
+    //ENCODED PARAMS
+    const TDesC8& encodedParams= p7->EncodedParams();
+    
+    if(encodedParams.Length() != 0)
+    	{
+    	if(encodedParams.Compare(*iEncodedParams))  
+    		{
+       		SetTestStepResult(EFail);
+	   		ERR_PRINTF1(_L("EncodedParams does not match"));		
+      		}
+    	else
+    		{
+    		INFO_PRINTF1(_L("EncodedParams match"));	
+    		}  	
+    	}
+    else if(!iEncodedParams)
+        {
+        INFO_PRINTF1(_L("EncodedParams not present"));	
+        }
+    
+    
+    CleanupStack::PopAndDestroy(p7);
+    __UHEAP_MARKEND;	
+	return TestStepResult();
+	}
+	
+	
+//EncryptedDataCorrupt
+//Step8
+TVerdict CTPKCS7EncryptedDataCorruptTest::doTestStepL()
+	{
+	if (TestStepResult() != EPass)
+		{
+		return TestStepResult();
+		}
+    __UHEAP_MARK;	
+	TInt reason;
+	GetIntFromConfig(ConfigSection(),_L("Reason"),reason);
+		
+	CPKCS7ContentInfo *contentInfo = NULL;
+	TRAPD (err, contentInfo = CPKCS7ContentInfo::NewL(iRawData->Des()));
+	CleanupStack::PushL(contentInfo);
+	
+	if(err != KErrNone)
+		{
+		if (err != reason)
+			{
+			SetTestStepResult(EFail);
+			INFO_PRINTF3(_L("Expected result %d, got %d"), reason, err);
+			}
+		}
+	
+		
+	if (err == reason)
+		{
+		CleanupStack::PopAndDestroy(contentInfo);
+		return TestStepResult();
+		}
+
+    CPKCS7EncryptedDataObject* p7 = NULL;
+	TRAPD (err1, p7 = CPKCS7EncryptedDataObject::NewL(*contentInfo));
+	CleanupStack::PushL(p7);
+	
+	if (err1 != reason)
+		{
+		SetTestStepResult(EFail);
+		INFO_PRINTF3(_L("Expected result %d, got %d"), reason, err);
+		}
+	CleanupStack::PopAndDestroy(2,contentInfo);//p7, contentInfo
+	__UHEAP_MARKEND;
+	return TestStepResult();
+	}
+
+//DigestInfoCorrupt
+//Step 9
+TVerdict CTPKCS7DigestInfoCorruptTest::doTestStepL()
+	{
+	if (TestStepResult() != EPass)
+		{
+		return TestStepResult();
+		}
+    __UHEAP_MARK;
+	TInt reason;
+	GetIntFromConfig(ConfigSection(),_L("Reason"),reason);
+	
+	CPKCS7DigestInfo* p7 = NULL;
+	TRAPD (err, p7 = CPKCS7DigestInfo::NewL(iRawData->Des()));
+	delete p7;
+	
+	if (err != reason)
+		{
+		SetTestStepResult(EFail);
+		INFO_PRINTF3(_L("Expected result %d, got %d"), reason, err);
+		}
+	__UHEAP_MARKEND;
+	return TestStepResult();
+	}
+