crypto/weakcrypto/test/tpbe/texternpbeparams.cpp
branchRCL_3
changeset 62 a71299154b21
parent 61 641f389e9157
child 63 94225563cd41
--- a/crypto/weakcrypto/test/tpbe/texternpbeparams.cpp	Tue Aug 31 17:00:08 2010 +0300
+++ /dev/null	Thu Jan 01 00:00:00 1970 +0000
@@ -1,465 +0,0 @@
-/*
-* Copyright (c) 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 <s32mem.h>
-#include <s32file.h>
-#include "texternpbeparams.h"
-
-
-CTestAction* CExternPbeParams::NewL(
-	RFs& aFs, CConsoleBase& aConsole,
-	Output& aOut, const TTestActionSpec& aTestActionSpec)
-/**
-	Factory function allocates new instance of CExternPbeParams and extracts
-	the element body from the supplied test action spec.
-
-	@param	aFs				Used to parse XML script file.
-	@param	aConsole		Required by CTestAction.
-	@param	aOut			Required by CTestAction.
-	@param	aTestActionSpec	Action specification contains type, name, and
-							XML contents.
-	@return					New instance of CExternPbeParams, which is owned
-							by the caller.
- */
-	{
-	CExternPbeParams* self = new(ELeave) CExternPbeParams(aConsole, aOut, aFs);
-	CleanupStack::PushL(self);
-	self->ConstructL(aTestActionSpec);
-	CleanupStack::Pop(self);
-	return self;
-	}
-
-CExternPbeParams::CExternPbeParams(CConsoleBase& aConsole, Output& aOut, RFs& aFs)
-/**
-	This constructor exists to record the file server session and to initialize
-	the CTestAction superclass.
-	
-	@param	aConsole		Required by CTestAction.
-	@param	aOut			Required by CTestAction.
-	@param	aFs				Used to read from and write to files in PerformAction,
-							which stores and restores the externalized params.
- */
-:	CTestAction(aConsole, aOut),
-	iFs(aFs)
-	{
-	// empty.
-	}
-
-void CExternPbeParams::ConstructL(const TTestActionSpec& aTestActionSpec)
-/**
-	Second phase initialization initializes the superclass and
-	makes a copy of the test element.
-	
-	@param	aTestActionSpec	Action specification contains type, name, and
-							XML contents.	
- */
-	{
-	CTestAction::ConstructL(aTestActionSpec);
-	iBody = aTestActionSpec.iActionBody.AllocL();
-	
-	// iBody is deconstructed in DoPerformPrerequisite
-	}
-
-CExternPbeParams::~CExternPbeParams()
-/**
-	Free resources allocated in ConstructL.  Specifically,
-	deletes the copy of the element body text.
- */
-	{
-	delete iBody;
-	}
-
-// -------- implement CTestAction --------
-
-void CExternPbeParams::DoPerformPrerequisite(TRequestStatus& aStatus)
-/**
-	Override CTestAction by deconstructing element body allocated
-	in ConstructL.
-	
-	If this function fails then DoPerformPostrequisite must still
-	be called.
-	
-	@param	aStatus			This status is completed when the prerequisite
-							has finished.  (This implementation is actually
-							synchronous so the request will already be completed
-							when it returns.)
- */
-	{
-	TRAPD(r, DoPerformPrerequisiteL());
-	
-	iActionState = CTestAction::EAction;
-	TRequestStatus* ps = &aStatus;
-	User::RequestComplete(ps, r);
-	}
-
-void CExternPbeParams::DoPerformPrerequisiteL()
-/**
-	Helper function for DoPerformPrerequisite contains resource allocation
-	functions which can leave.
-	
-	Extracts cipher, salt, iv, iter count, and kdf values.
- */
-	{
-	_LIT8(KOrigFileName, "orig-filename");
-	iOrigFileName = ReadStringLC(*iBody, KOrigFileName);
-	CleanupStack::Pop(iOrigFileName);
-	
-	_LIT8(KExpCipherElemName, "expected-cipher");
-	iExpCipher = ReadDecStringL(*iBody, KExpCipherElemName);
-	_LIT8(KExpSaltElemName, "expected-salt");
-	iExpSalt = ReadHexStringL(*iBody, KExpSaltElemName);
-	_LIT8(KExpIvElemName, "expected-iv");
-	iExpIv = ReadHexStringL(*iBody, KExpIvElemName);	
-	_LIT8(KExpIterCountElemName, "expected-iter-count");
-	iExpIterCount = ReadDecStringL(*iBody, KExpIterCountElemName);
-	_LIT8(KExpKdfElemName, "expected-kdf");
-	iExpKdf = ReadDecStringL(*iBody, KExpKdfElemName);
-	}
-
-void CExternPbeParams::DoPerformPostrequisite(TRequestStatus& aStatus)
-/**
-	Implements CTestAction by cleaning up data allocated in DoPerformPrerequisiteL.
-	
-	@param	aStatus			This status is completed to indicate the
-							postrequisite has finished.  (This function
-							is synchronous so the status is completed before
-							this function returns.)
- */
-	{
-	delete iExpIv;
-	iExpIv = 0;
-	delete iExpSalt;
-	iExpSalt = 0;
-	delete iOrigFileName;
-	iOrigFileName = NULL;
-	
-	iFinished = ETrue;
-	TRequestStatus* ps = &aStatus;
-	User::RequestComplete(ps, KErrNone);
-	}
-
-void CExternPbeParams::PerformAction(TRequestStatus& aStatus)
-/**
-	Implements CTestAction by running the actual tests.  This
-	consists of:
-	
-	Reading an externalized CPBEncryptParms object and testing the
-	cipher, salt, iv, iteration count, and KDF are as expected.
-	
-	Externalizing the object to memory.
-	
-	Testing the two externalizations are binary identical.
-	
-	Creating an equivalent object from scratch and externalizing it.
-	
-	Testing the externalizations are binary identical.
-	
-	As well as testing the objects can be stored reliably, this
-	test also ensures that old (pre-PKCS#12) files can still be
-	read and, and that objects are stored in the old format if they
-	do not use any PKCS#12-specific features.  (I.e., they use the
-	default PKCS#5 KDF.)
-	
-	@param	aStatus			This request status is completed when
-							the action has finished, successfully
-							or otherwise.  This implementation is
-							synchronous, and so the status is actually
-							completed before this function returns.
- */
-	{
-	TFileName fn;
-	fn.Copy(*iOrigFileName);	// convert from narrow
-
-	// ensure reference file matches re-externalized form
-	
-	TRAPD(r,
-		TestDecodeMatchesScriptL(fn);
-		TestReExternMatchesL(fn);
-		TestScratchExternL(fn) );
-		
-	iResult = (r == KErrNone);
-	iActionState = CTestAction::EPostrequisite;
-	TRequestStatus* status = &aStatus;
-	User::RequestComplete(status, KErrNone);
-	}
-
-CPBEncryptParms* CExternPbeParams::InternalizeEncryptionParamsLC(const TDesC& aFileName)
-/**
-	Construct a CPBEncryptParms object from the externalized
-	form in the named file.
-	
-	@param	aFileName		File which contains externalized form.
-	@return					Internalized encryption parameters object
-							which is placed on the cleanup stack.
- */
-	{
-	RFileReadStream frs;
-	TInt r = frs.Open(iFs, aFileName, EFileStream | EFileRead);
-	User::LeaveIfError(r);
-	CleanupClosePushL(frs);	
-	CPBEncryptParms* pbep = CPBEncryptParms::NewL(frs);
-	CleanupStack::PopAndDestroy(&frs);
-	CleanupStack::PushL(pbep);
-	return pbep;
-	}
-
-void CExternPbeParams::TestDecodeMatchesScriptL(const TDesC& aFileName)
-/**
-	Test whether the encryption parameters which were externalized
-	to the supplied file match those specified in the script file.
-	
-	@param	aFileName		Name of file which contains externalized form.
-	@leave KErrGeneral		The internalized form doesn't match the parameters
-							in the script.
- */
-	{
-	CPBEncryptParms* pbep = InternalizeEncryptionParamsLC(aFileName);
-	
-	TBool match =
-			pbep->Cipher() == iExpCipher
-		&&	pbep->Salt() == *iExpSalt
-		&&	pbep->Iterations() == iExpIterCount;
-	
-	match = match && pbep->Kdf() == iExpKdf;
-
-	if (! match)
-		User::Leave(KErrGeneral);
-	
-	CleanupStack::PopAndDestroy(pbep);	
-	}
-
-void CExternPbeParams::CompareAgainstTestFileL(
-	const TDesC& aFileName, const CPBEncryptParms& aParams)
-/**
-	Externalize the supplied parameters object and ensure it matches the
-	test file.
-	
-	@param	aFileName		File which contains externalized parameters.
-	@param	aParams			Test object to externalize.
-	@leave KErrGeneral The externalized forms do not match.
- */
-	{
- 	// open a file stream on the externalized form
-	RFileReadStream frs;
-	TInt r = frs.Open(iFs, aFileName, EFileStream | EFileRead);
-	User::LeaveIfError(r);
-	CleanupClosePushL(frs);
-	
-	// externalize the object to memory
-	const TInt KMaxBufferLen = 128;
-	HBufC8* reExtBuf = HBufC8::NewLC(KMaxBufferLen);
-	TPtr8 reDes = reExtBuf->Des();
-	RDesWriteStream dws(reDes);
-	CleanupClosePushL(dws);
-	aParams.ExternalizeL(dws);
-	dws.CommitL();
-	
-	// ensure the externalized forms are equal
-	RDesReadStream drs(reDes);
-	TInt fLen = frs.Source()->SizeL();
-	TInt mLen = drs.Source()->SizeL();
-	if (fLen != mLen)
-		User::Leave(KErrGeneral);	
-
-	TBuf8<1> fByte;
-	TBuf8<1> mByte;
-	for (TInt i = 0; i < fLen; ++i)
-		{
-		frs.ReadL(fByte, 1);
-		drs.ReadL(mByte, 1);
-		if (fByte != mByte)
-			User::Leave(KErrGeneral);
-		}
-
-	CleanupStack::PopAndDestroy(3, &frs);	// frs, reExtBuf, dws	
-	}
-
-void CExternPbeParams::TestReExternMatchesL(const TDesC& aFileName)
-/**
-	Read the CPBEncryptParms object which is externalized in
-	the named file, re-externalize it, and check the two
-	representations are binary equivalent.
-	
-	@param	aFileName		Name of file which contains externalized form.
-	@leave	KErrGeneral		The externalized forms are different.
- */
-	{
- 	CPBEncryptParms* pbep = InternalizeEncryptionParamsLC(aFileName);
- 	
- 	CompareAgainstTestFileL(aFileName, *pbep);
- 	
-	CleanupStack::PopAndDestroy(pbep);
-	}
-
-void CExternPbeParams::TestScratchExternL(const TDesC& aFileName)
-/**
-	Construct a CPBEncryptParams object from the parameter values
-	in the script file.  Test it matches the test file.
-	
-	@param	aFileName		Test file which contains externalized parameters.
- */
-	{
-	CPBEncryptParms* pbep = CPBEncryptParms::NewLC(
-		static_cast<TPBECipher>(iExpCipher),
-		*iExpSalt,
-		*iExpIv,
-		iExpIterCount);
-	
-	pbep->SetKdf(static_cast<CPBEncryptParms::TKdf>(iExpKdf));
-
-	CompareAgainstTestFileL(aFileName, *pbep);
-
-	CleanupStack::PopAndDestroy(pbep);
-	}
-
-void CExternPbeParams::DoReportAction(void)
-/**
-	Implements CTestAction but is empty.
- */
-	{
-	// empty.
-	}
-
-void CExternPbeParams::DoCheckResult(TInt /*aError*/)
-/**
-	Implements CTestAction but is empty.
- */
-	{
-	// empty.
-	}
-
-
-// -------- support functions --------
-
-
-HBufC8* CExternPbeParams::ReadHexStringL(const TDesC8& aBody, const TDesC8& aTag)
-/**
-	Convert a string in the test script to an 8-bit buffer.  The string
-	is a sequence of hex digits, e.g. "abcdef01", which is converted to a
-	descriptor containing the matching bytes {0xab, 0xcd, 0xef, 0x01}.
-	
-	@param	aBody			Body of parent element.
-	@param	aTag			Bare tag name.  This function extracts the text
-							between "<aTag>" and "</aTag>".
-	@return					Newly-allocated buffer containing matching bytes.
-							This is owned by the caller.
- */
-	{
- 	HBufC8* scriptString = ReadStringLC(aBody, aTag);
-
-	TInt textLen = scriptString->Length();
-	if ((textLen % 2) != 0)
-		User::Leave(KErrCorrupt);
-	TInt byteCount = textLen / 2;
-	HBufC8* procString = HBufC8::NewMaxLC(byteCount);
-	TPtr8 procDes = procString->Des();
-	for (TInt i = 0; i < byteCount; ++i)
-		{
-		TUint8 byteVal;
-		TInt r = TLex8(scriptString->Mid(i * 2, 2)).Val(byteVal, EHex);
-		User::LeaveIfError(r);
-		procDes[i] = byteVal;
-		}
-	
-	CleanupStack::Pop(procString);
-	CleanupStack::PopAndDestroy(scriptString);
-	return procString;
-	}
-
-TInt CExternPbeParams::ReadDecStringL(const TDesC8& aBody, const TDesC8& aTag)
-/**
-	Finds a decimal text string in the script and returns the
-	integer value which it represents.
-	
-	@param	aBody			Body of parent element.
-	@param	aTag			Bare tag name.  This function extracts the text
-							between "<aTag>" and "</aTag>".
-	@return					Integer value encoded in the script file.
- */
- 	{
- 	HBufC8* scriptString = ReadStringLC(aBody, aTag);
- 	
- 	TInt value;
-	User::LeaveIfError(TLex8(*scriptString).Val(value));
-	CleanupStack::PopAndDestroy(scriptString);
-	return value;
-	}
-
-HBufC8* CExternPbeParams::ReadStringLC(const TDesC8& aBody, const TDesC8& aTag)
-/**
-	Extracts a string from the supplied script file.
-	
-	@param	aBody			Body of parent element.
-	@param	aTag			Bare tag name.  This function extracts the text
-							between "<aTag>" and "</aTag>".
-	@return					A copy of the string allocated on the heap.  The
-							string is placed on the cleanup stack.
- */
-	{
-	TBuf8<32> startTag;
-	startTag.Format(_L8("<%S>"), &aTag);
-	TBuf8<32> endTag;
-	endTag.Format(_L8("</%S>"), &aTag);
-	
-	TInt pos = 0;
-	TInt r;
-	const TPtrC8 contents = Input::ParseElement(
-		aBody, startTag, endTag, pos, r);
-	User::LeaveIfError(r);
-	
-	return contents.AllocLC();
-	}
-
-/**
-	This code was originally in PerformAction to create the initial
-	data files.
-	
-	// GENERATE PKCS5 TEST PARAMS FILE
-	RFileWriteStream fws;
-	r = fws.Replace(iFs, _L("c:\\tpbe\\pkcs5-orig.dat"), EFileStream | EFileWrite);
-	User::LeaveIfError(r);
-	CleanupClosePushL(fws);
-	
-	_LIT8(KSalt, "SALT4567");
-	_LIT8(KIv, "IV23456789abcdef");
-	const TInt KIterCount = 1234;
-	CPBEncryptParms* pbep = CPBEncryptParms::NewLC(
-		ECipherAES_CBC_256, KSalt, KIv, KIterCount);
-	pbep->ExternalizeL(fws);
-	fws.CommitL();
-	CleanupStack::PopAndDestroy(2, &fws);
-
-#ifdef SYMBIAN_PKCS12
-	// GENERATE PKCS12 TEST PARAMS FILE
-	RFileWriteStream fws;
-	r = fws.Replace(iFs, _L("c:\\tpbe\\pkcs12-first.dat"), EFileStream | EFileWrite);
-	User::LeaveIfError(r);
-	CleanupClosePushL(fws);
-	
-	_LIT8(KSalt, "SALT4567");
-	_LIT8(KIv, "IV23456789abcdef");
-	const TInt KIterCount = 1234;
-	CPBEncryptParms* pbep = CPBEncryptParms::NewLC(
-		ECipherAES_CBC_256, KSalt, KIv, KIterCount);
-	pbep->SetKdf(CPBEncryptParms::EKdfPkcs12);
-	pbep->ExternalizeL(fws);
-	fws.CommitL();
-	CleanupStack::PopAndDestroy(2, &fws);
-#endif	// #ifdef SYMBIAN_PKCS12
-
- */