diff -r 000000000000 -r af10295192d8 networksecurity/tlsprovider/Test/tlstest2/getrandomstep.cpp --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/networksecurity/tlsprovider/Test/tlstest2/getrandomstep.cpp Tue Jan 26 15:23:49 2010 +0200 @@ -0,0 +1,143 @@ +// Copyright (c) 2006-2009 Nokia Corporation and/or its subsidiary(-ies). +// All rights reserved. +// This component and the accompanying materials are made available +// under the terms of "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: +// + +/** + @file getrandomstep.cpp + @internalTechnology +*/ +#include "getrandomstep.h" +#include +#include + +_LIT(KEpochDate, "19700000:"); + +CGetRandomStep::CGetRandomStep() + { + SetTestStepName(KGetRandomStep); + } + +TVerdict CGetRandomStep::doTestStepPreambleL() + { + ConstructL(); + return EPass; + } + +TVerdict CGetRandomStep::doTestStepL() + { + // Get three buffers of random... + TBuf8 random1; + TBuf8 random2; + TBuf8 random3; + + + INFO_PRINTF1(_L("Invoking TLS Provider - Generate Random")); + + Provider()->GenerateRandom(random1); + Provider()->GenerateRandom(random2); + Provider()->GenerateRandom(random3); + + // check all the buffers are of sane length + if (random1.Length() != KTLSServerClientRandomLen || + random2.Length() != KTLSServerClientRandomLen || + random3.Length() != KTLSServerClientRandomLen) + { + INFO_PRINTF1(_L("Failed! Not all random buffers are of the required length!")); + SetTestStepResult(EFail); + return TestStepResult(); + } + + // check the timestamps on the data are all roughly sane.... + + TTime now; + now.UniversalTime(); + TTime epoch(KEpochDate); + + TUint stamp1 = GetTimestamp(random1); + TUint stamp2 = GetTimestamp(random2); + TUint stamp3 = GetTimestamp(random3); + + if (stamp1 > stamp2 || stamp2 > stamp3) + { + INFO_PRINTF1(_L("Failed! Timestamps suggest an insane clock!")); + // uh oh, timestamps are going backwards... + SetTestStepResult(EFail); + return TestStepResult(); + } + + // check all the time stamps are within a sane interval from "now" + TTime time1 = epoch + TTimeIntervalSeconds(stamp1); + TTime time2 = epoch + TTimeIntervalSeconds(stamp2); + TTime time3 = epoch + TTimeIntervalSeconds(stamp3); + + // read the interval from the config file... + TInt interval(0); + if (!GetIntFromConfig(ConfigSection(), KMaxTimestampInterval, interval)) + { + User::Leave(KErrNotFound); + } + + TTimeIntervalSeconds interval1; + TInt err1 = now.SecondsFrom(time1, interval1); + TTimeIntervalSeconds interval2; + TInt err2 = now.SecondsFrom(time2, interval2); + TTimeIntervalSeconds interval3; + TInt err3 = now.SecondsFrom(time3, interval3); + + if (err1 != KErrNone || err2 != KErrNone || err3 != KErrNone) + { + INFO_PRINTF1(_L("Failed! Could not get time intervals from 'now'!")); + SetTestStepResult(EFail); + return TestStepResult(); + } + + if (interval1.Int() > interval || + interval2.Int() > interval || + interval3.Int() > interval) + { + // Looks like the timestamp algorithm is bad. + INFO_PRINTF1(_L("Failed! Clock appears to be running far too fast!")); + SetTestStepResult(EFail); + return TestStepResult(); + } + + // now, check the random portion of the data... + // just make sure it isn't all the same string... + + TPtrC8 ptr1 = random1.Mid(4); + TPtrC8 ptr2 = random2.Mid(4); + TPtrC8 ptr3 = random3.Mid(4); + + if (ptr1 == ptr2 || ptr2 == ptr3 || ptr3 == ptr1) + { + INFO_PRINTF1(_L("Failed! Random data isn't actually random!")); + SetTestStepResult(EFail); + return TestStepResult(); + } + + INFO_PRINTF1(_L("Test step passed.")); + SetTestStepResult(EPass); + return TestStepResult(); + } + +TUint CGetRandomStep::GetTimestamp(const TDesC8& aRandom) + { + TUint ret = aRandom[0]; + for (TInt i = 1; i < 4; ++i) + { + ret <<= 8; + ret += aRandom[i]; + } + return ret; + }