diff -r 675a964f4eb5 -r 35751d3474b7 cryptoservices/certificateandkeymgmt/tpkixcert_tef/src/pkixcertstepbase.cpp --- a/cryptoservices/certificateandkeymgmt/tpkixcert_tef/src/pkixcertstepbase.cpp Tue Jul 21 01:04:32 2009 +0100 +++ b/cryptoservices/certificateandkeymgmt/tpkixcert_tef/src/pkixcertstepbase.cpp Thu Sep 10 14:01:51 2009 +0300 @@ -1,257 +1,257 @@ -/* -* Copyright (c) 2008-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 "pkixcertstepbase.h" -#include "cleanuputils.h" -#include - -CPkixCertStepBase::~CPkixCertStepBase() - { - delete iConcatenatedChain; - iConcatenatedChain = NULL; - iFileServer.Close(); - iProcessedOids.Reset(); - iOids.Reset(); - iRootCerts.ResetAndDestroy(); - CActiveScheduler::Install(NULL); - delete iScheduler; - } - -TVerdict CPkixCertStepBase::doTestStepPreambleL() - { - //read in stuff from config - - GetBoolFromConfig(ConfigSection(), KPerformOom, iPerformOom); - - iFileServer.Connect(); - TPtrC configString; - - //temporary storage of the DER encoded certs so we can calculate the combined size for iConcatenatedChain - RPointerArray rawCerts; - CleanupResetAndDestroy >::PushL(rawCerts); - TInt chainSize = 0; - - GetStringFromConfig(ConfigSection(), KEndEntity, configString); - HBufC8* certBuf = ReadFileLC(configString); - rawCerts.AppendL(certBuf); - CleanupStack::Pop(certBuf); - chainSize += certBuf->Size(); - - - RArray certFileNames; - CleanupClosePushL(certFileNames); - - GetStringArrayFromConfigL(ConfigSection(), KIntermediateCert, certFileNames); - - TInt i; - for (i = 0; i < certFileNames.Count(); ++i) - { - certBuf = ReadFileLC(certFileNames[i]); - rawCerts.AppendL(certBuf); - CleanupStack::Pop(certBuf); - chainSize += certBuf->Size(); - } - - CleanupStack::PopAndDestroy(&certFileNames); - - iConcatenatedChain = HBufC8::NewL(chainSize); - TPtr8 modPtr = iConcatenatedChain->Des(); - for (i = 0; i < rawCerts.Count(); i++) - { - modPtr.Append(*rawCerts[i]); - } - - CleanupStack::PopAndDestroy(&rawCerts); - - /////////// - - //read in oid values. the usage of these is dependant on the test step - GetStringArrayFromConfigL(ConfigSection(), KOid, iOids); - //convert into argument format used by APIs - for (i=0; i < iOids.Count(); ++i) - { - iProcessedOids.AppendL(&(iOids[i])); - } - - - RArray certFileNames2; - CleanupClosePushL(certFileNames2); - - GetStringArrayFromConfigL(ConfigSection(), KRootCert, certFileNames2); - CX509Certificate* cert; - for (i = 0; i < certFileNames2.Count(); ++i) - { - certBuf = ReadFileLC(certFileNames2[i]); - cert = CX509Certificate::NewLC(*certBuf); - iRootCerts.AppendL(cert); - CleanupStack::Pop(cert); - CleanupStack::PopAndDestroy(certBuf); - } - CleanupStack::PopAndDestroy(&certFileNames2); - - TInt uid; - iUseUidOverload = GetIntFromConfig(ConfigSection(), KUid, uid); - iUid.iUid = uid; - - iScheduler=new(ELeave) CActiveScheduler(); - CActiveScheduler::Install(iScheduler); - - return EPass; - } - - -//N.B. iCertChain must be popped and destroyed at the end of any deriving class's PerformTestL() method -void CPkixCertStepBase::PerformTestL() - { - iPtr.Set(*iConcatenatedChain); - - //split on which of the NewLs to use - if (iUseUidOverload) - { - iCertChain = CPKIXCertChain::NewLC(iFileServer, iPtr, iUid); - } - else - { - iCertChain = CPKIXCertChain::NewLC(iFileServer, iPtr, iRootCerts); - } - } - - -HBufC8* CPkixCertStepBase::ReadFileLC(const TDesC& aFileName) - { - RFile file; - User::LeaveIfError(file.Open(iFileServer, aFileName, EFileRead)); - CleanupClosePushL(file); - TInt size; - file.Size(size); - CleanupStack::PopAndDestroy();//fileClose - - HBufC8* result = HBufC8::NewLC(size); - TPtr8 ptr(result->Des()); - ptr.SetLength(size); - - RFileReadStream stream; - User::LeaveIfError(stream.Open(iFileServer, aFileName, EFileStream)); - CleanupClosePushL(stream); - stream.ReadL(ptr, size); - CleanupStack::PopAndDestroy();//streamClose - return result; - } - - -void CPkixCertStepBase::GetStringArrayFromConfigL(const TDesC& aSectName, const TDesC& aKeyName, RArray& aArray) - { - HBufC* buf = HBufC::NewLC(aKeyName.Length() + KKeyFormat().Length()); - TPtr ptr(buf->Des()); - INFO_PRINTF2(_L("Parsing attribute: %S"), &aKeyName); - - TInt i = 0; - TBool cont = ETrue; - do - { - ++i; - ptr = aKeyName; - ptr.AppendFormat(KKeyFormat(), i); - TPtrC val; - - cont = GetStringFromConfig(aSectName, ptr, val); - if (cont) - { - User::LeaveIfError(aArray.Append(val)); - } - } while (cont); - - INFO_PRINTF2(_L("Element count: %d"), i-1); - CleanupStack::PopAndDestroy(buf); - } - - -void CPkixCertStepBase::GetIntArrayFromConfigL(const TDesC& aSectName, const TDesC& aKeyName, RArray& aArray) - { - HBufC* buf = HBufC::NewLC(aKeyName.Length() + KKeyFormat().Length()); - TPtr ptr(buf->Des()); - INFO_PRINTF2(_L("Parsing attribute: %S"), &aKeyName); - - TInt i = 0; - TBool cont = ETrue; - do - { - ++i; - ptr = aKeyName; - ptr.AppendFormat(KKeyFormat(), i); - TInt val; - - cont = GetIntFromConfig(aSectName, ptr, val); - if (cont) - { - User::LeaveIfError(aArray.Append(val)); - } - } while (cont); - - INFO_PRINTF2(_L("Element count: %d"), i-1); - CleanupStack::PopAndDestroy(buf); - } - -TVerdict CPkixCertStepBase::doTestStepL() - { - if (!iPerformOom) - { - TRAPD(err, PerformTestL()); - if (err == KErrNone) - { - SetTestStepResult(EPass); - } - else{ - SetTestStepResult(EFail); - } - } - else - { - PerformOomTestL(); - } - - return TestStepResult(); - } - - - -void CPkixCertStepBase::PerformOomTestL() - { - for (TInt oomCount = 0; ; oomCount++) - { - __UHEAP_RESET; - __UHEAP_SETFAIL(RHeap::EDeterministic, oomCount); - TInt countBefore = User::CountAllocCells(); - TRAPD(error, PerformTestL());// ----> This is the actual test that runs under OOM conditions. - TInt countAfter = User::CountAllocCells(); - - if (countBefore != countAfter) - { - INFO_PRINTF2(_L("OOM Failed at %d"), oomCount); - SetTestStepResult(EFail); - break; - } - INFO_PRINTF2(_L("Result: %d"), error); - if (error == KErrNone) - { - INFO_PRINTF1(_L("Test outcome : Passed")); - SetTestStepResult(EPass); - break; - } - } - } +/* +* Copyright (c) 2008-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 "pkixcertstepbase.h" +#include "cleanuputils.h" +#include + +CPkixCertStepBase::~CPkixCertStepBase() + { + delete iConcatenatedChain; + iConcatenatedChain = NULL; + iFileServer.Close(); + iProcessedOids.Reset(); + iOids.Reset(); + iRootCerts.ResetAndDestroy(); + CActiveScheduler::Install(NULL); + delete iScheduler; + } + +TVerdict CPkixCertStepBase::doTestStepPreambleL() + { + //read in stuff from config + + GetBoolFromConfig(ConfigSection(), KPerformOom, iPerformOom); + + iFileServer.Connect(); + TPtrC configString; + + //temporary storage of the DER encoded certs so we can calculate the combined size for iConcatenatedChain + RPointerArray rawCerts; + CleanupResetAndDestroy >::PushL(rawCerts); + TInt chainSize = 0; + + GetStringFromConfig(ConfigSection(), KEndEntity, configString); + HBufC8* certBuf = ReadFileLC(configString); + rawCerts.AppendL(certBuf); + CleanupStack::Pop(certBuf); + chainSize += certBuf->Size(); + + + RArray certFileNames; + CleanupClosePushL(certFileNames); + + GetStringArrayFromConfigL(ConfigSection(), KIntermediateCert, certFileNames); + + TInt i; + for (i = 0; i < certFileNames.Count(); ++i) + { + certBuf = ReadFileLC(certFileNames[i]); + rawCerts.AppendL(certBuf); + CleanupStack::Pop(certBuf); + chainSize += certBuf->Size(); + } + + CleanupStack::PopAndDestroy(&certFileNames); + + iConcatenatedChain = HBufC8::NewL(chainSize); + TPtr8 modPtr = iConcatenatedChain->Des(); + for (i = 0; i < rawCerts.Count(); i++) + { + modPtr.Append(*rawCerts[i]); + } + + CleanupStack::PopAndDestroy(&rawCerts); + + /////////// + + //read in oid values. the usage of these is dependant on the test step + GetStringArrayFromConfigL(ConfigSection(), KOid, iOids); + //convert into argument format used by APIs + for (i=0; i < iOids.Count(); ++i) + { + iProcessedOids.AppendL(&(iOids[i])); + } + + + RArray certFileNames2; + CleanupClosePushL(certFileNames2); + + GetStringArrayFromConfigL(ConfigSection(), KRootCert, certFileNames2); + CX509Certificate* cert; + for (i = 0; i < certFileNames2.Count(); ++i) + { + certBuf = ReadFileLC(certFileNames2[i]); + cert = CX509Certificate::NewLC(*certBuf); + iRootCerts.AppendL(cert); + CleanupStack::Pop(cert); + CleanupStack::PopAndDestroy(certBuf); + } + CleanupStack::PopAndDestroy(&certFileNames2); + + TInt uid; + iUseUidOverload = GetIntFromConfig(ConfigSection(), KUid, uid); + iUid.iUid = uid; + + iScheduler=new(ELeave) CActiveScheduler(); + CActiveScheduler::Install(iScheduler); + + return EPass; + } + + +//N.B. iCertChain must be popped and destroyed at the end of any deriving class's PerformTestL() method +void CPkixCertStepBase::PerformTestL() + { + iPtr.Set(*iConcatenatedChain); + + //split on which of the NewLs to use + if (iUseUidOverload) + { + iCertChain = CPKIXCertChain::NewLC(iFileServer, iPtr, iUid); + } + else + { + iCertChain = CPKIXCertChain::NewLC(iFileServer, iPtr, iRootCerts); + } + } + + +HBufC8* CPkixCertStepBase::ReadFileLC(const TDesC& aFileName) + { + RFile file; + User::LeaveIfError(file.Open(iFileServer, aFileName, EFileRead)); + CleanupClosePushL(file); + TInt size; + file.Size(size); + CleanupStack::PopAndDestroy();//fileClose + + HBufC8* result = HBufC8::NewLC(size); + TPtr8 ptr(result->Des()); + ptr.SetLength(size); + + RFileReadStream stream; + User::LeaveIfError(stream.Open(iFileServer, aFileName, EFileStream)); + CleanupClosePushL(stream); + stream.ReadL(ptr, size); + CleanupStack::PopAndDestroy();//streamClose + return result; + } + + +void CPkixCertStepBase::GetStringArrayFromConfigL(const TDesC& aSectName, const TDesC& aKeyName, RArray& aArray) + { + HBufC* buf = HBufC::NewLC(aKeyName.Length() + KKeyFormat().Length()); + TPtr ptr(buf->Des()); + INFO_PRINTF2(_L("Parsing attribute: %S"), &aKeyName); + + TInt i = 0; + TBool cont = ETrue; + do + { + ++i; + ptr = aKeyName; + ptr.AppendFormat(KKeyFormat(), i); + TPtrC val; + + cont = GetStringFromConfig(aSectName, ptr, val); + if (cont) + { + User::LeaveIfError(aArray.Append(val)); + } + } while (cont); + + INFO_PRINTF2(_L("Element count: %d"), i-1); + CleanupStack::PopAndDestroy(buf); + } + + +void CPkixCertStepBase::GetIntArrayFromConfigL(const TDesC& aSectName, const TDesC& aKeyName, RArray& aArray) + { + HBufC* buf = HBufC::NewLC(aKeyName.Length() + KKeyFormat().Length()); + TPtr ptr(buf->Des()); + INFO_PRINTF2(_L("Parsing attribute: %S"), &aKeyName); + + TInt i = 0; + TBool cont = ETrue; + do + { + ++i; + ptr = aKeyName; + ptr.AppendFormat(KKeyFormat(), i); + TInt val; + + cont = GetIntFromConfig(aSectName, ptr, val); + if (cont) + { + User::LeaveIfError(aArray.Append(val)); + } + } while (cont); + + INFO_PRINTF2(_L("Element count: %d"), i-1); + CleanupStack::PopAndDestroy(buf); + } + +TVerdict CPkixCertStepBase::doTestStepL() + { + if (!iPerformOom) + { + TRAPD(err, PerformTestL()); + if (err == KErrNone) + { + SetTestStepResult(EPass); + } + else{ + SetTestStepResult(EFail); + } + } + else + { + PerformOomTestL(); + } + + return TestStepResult(); + } + + + +void CPkixCertStepBase::PerformOomTestL() + { + for (TInt oomCount = 0; ; oomCount++) + { + __UHEAP_RESET; + __UHEAP_SETFAIL(RHeap::EDeterministic, oomCount); + TInt countBefore = User::CountAllocCells(); + TRAPD(error, PerformTestL());// ----> This is the actual test that runs under OOM conditions. + TInt countAfter = User::CountAllocCells(); + + if (countBefore != countAfter) + { + INFO_PRINTF2(_L("OOM Failed at %d"), oomCount); + SetTestStepResult(EFail); + break; + } + INFO_PRINTF2(_L("Result: %d"), error); + if (error == KErrNone) + { + INFO_PRINTF1(_L("Test outcome : Passed")); + SetTestStepResult(EPass); + break; + } + } + }