/*
* 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 "tpkcs7stepbase.h"
#include <testexecutelog.h>

CTPKCS7StepBase::~CTPKCS7StepBase()
	{
	delete iRawData;
	iFs.Close ();
	}

CTPKCS7StepBase::CTPKCS7StepBase()
	{
	}

HBufC8* CTPKCS7StepBase::readFileL (TPtrC tag)
	{
	TPtrC fileName;
	if (GetStringFromConfig(ConfigSection(), tag, fileName) == EFalse)
		{
		return NULL;
		}

	RFile file;
	if (file.Open(iFs, fileName, EFileRead) != KErrNone)
		{
		INFO_PRINTF2(_L("Cannot open file %S for reading"), &fileName);
		return NULL;
		}
	CleanupClosePushL(file);

	TInt fileSize = 0;
	User::LeaveIfError(file.Size(fileSize));

	HBufC8* result = HBufC8::NewL(fileSize);
	result->Des().SetLength(fileSize);
	
	TPtr8 rawDataPtr(result->Des());
	rawDataPtr.SetLength(fileSize);
	file.Read (rawDataPtr);

	CleanupStack::PopAndDestroy (&file);

	INFO_PRINTF3(_L("Read %d octets from %S"), result->Size(), &fileName);

	return result;
	}

TVerdict CTPKCS7StepBase::doTestStepPreambleL()
	{
	User::LeaveIfError (iFs.Connect());

	SetTestStepResult(EPass);

	iRawData = readFileL (_L("File"));
	if (iRawData == NULL)
		{
		INFO_PRINTF1(_L("Failed to read 'File' section of script"));
		SetTestStepResult(ETestSuiteError);
		}

	HBufC8* certificate = readFileL (_L("RootCertificate"));
	if (certificate == NULL)
		{
		INFO_PRINTF1(_L("No 'RootCertificate' available"));
		}
	else
		{
		CleanupStack::PushL (certificate);
		iRootCertificate = CX509Certificate::NewL(*certificate);
		CleanupStack::PopAndDestroy (certificate);
		}

     //for encrypted_data
     
     //get Salt value for comparison
     iSaltValue = readFileL (_L("Salt"));
     if(iSaltValue == NULL)
     	{
     	INFO_PRINTF1(_L("No 'Salt' available"));
     	}
      //get content data 
     iContentData = readFileL (_L("ContentData"));
     if(iContentData == NULL)
     	{
     	INFO_PRINTF1(_L("No 'ContentData' available"));
		}
      
     //for digest_Info
     //Digest
     iDigest = readFileL (_L("DigestValue")); 
     if(iDigest == NULL)
     	{
     	INFO_PRINTF1(_L("No 'DigestValue' available"));
     	} 	
     
     //EncodeParams
     iEncodedParams = readFileL (_L("EncodedParams"));  		
     if(iEncodedParams == NULL)
     	{
     	INFO_PRINTF1(_L("No 'EncodedParams' available"));
		}
   
	return TestStepResult();
	}
