--- /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 <tlsprovinterface.h>
+#include <tlstypedef.h>
+
+_LIT(KEpochDate, "19700000:");
+
+CGetRandomStep::CGetRandomStep()
+ {
+ SetTestStepName(KGetRandomStep);
+ }
+
+TVerdict CGetRandomStep::doTestStepPreambleL()
+ {
+ ConstructL();
+ return EPass;
+ }
+
+TVerdict CGetRandomStep::doTestStepL()
+ {
+ // Get three buffers of random...
+ TBuf8<KTLSServerClientRandomLen> random1;
+ TBuf8<KTLSServerClientRandomLen> random2;
+ TBuf8<KTLSServerClientRandomLen> 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;
+ }