--- /dev/null Thu Jan 01 00:00:00 1970 +0000
+++ b/networksecurity/tlsprovider/Test/src/TlsProvTestStep.cpp Tue Jan 26 15:23:49 2010 +0200
@@ -0,0 +1,1298 @@
+// Copyright (c) 2003-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 TlsProvTestStep.cpp
+*/
+#include "TlsProvTestStep.h"
+#include <test/testexecutelog.h>
+
+
+#include <signed.h>
+#include <x509cert.h>
+#include <pkixcertchain.h>
+
+_LIT(KDialogNonAttendedMode,"DialogNonAttendedMode");
+_LIT(KExpectedResult, "ExpectedResult");
+
+// tls test
+#include <f32file.h>
+
+CTlsProvTestActive::CTlsProvTestActive( CTestExecuteLogger& aLogger ) :
+ CActive( EPriorityStandard ),
+ iLogger( aLogger )
+ {
+ CActiveScheduler::Add( this );
+ User::LeaveIfError(iFs.Connect());
+ }
+
+CTlsProvTestActive::~CTlsProvTestActive()
+ {
+ Cancel();
+ iFs.Close();
+ }
+
+
+void CTlsProvTestActive::RunL()
+ {
+ CActiveScheduler::Stop();
+ return;
+
+ }
+
+//
+/*************************************Test Step 1**********************************/
+//
+
+
+CTlsProvStep1::~CTlsProvStep1()
+/**
+ * Destructor
+ */
+ {
+ }
+
+CTlsProvStep1::CTlsProvStep1()
+/**
+ * Constructor
+ */
+ {
+ // Call base class method to set up the human readable name for logging
+ SetTestStepName(KTlsTestStep1);
+ }
+
+TVerdict CTlsProvStep1::doTestStepPreambleL()
+/**
+ * @return - TVerdict code
+ * Override of base class virtual
+ */
+ {
+ INFO_PRINTF1(_L("Test Step 1 Preamble"));
+ SetTestStepResult(EPass);
+ return TestStepResult();
+ }
+
+TVerdict CTlsProvStep1::doTestStepL()
+/**
+ * @return - TVerdict code
+ * Override of base class pure virtual
+ * Demonstrates reading configuration parameters fom an ini file section
+ */
+ {
+
+ INFO_PRINTF1(_L("Inside Test Step 1"));
+
+ SetTestStepResult(EPass);
+ User::After(5000000);
+ return TestStepResult();
+
+ }
+
+TVerdict CTlsProvStep1::doTestStepPostambleL()
+/**
+ * @return - TVerdict code
+ * Override of base class virtual
+ */
+ {
+ INFO_PRINTF1(_L("Test Step 1 Postamble"));
+ return TestStepResult();
+ }
+
+
+
+
+
+//
+/*************************************Test Step 2**********************************/
+//
+
+
+CTlsProvStep2::~CTlsProvStep2()
+/**
+ * Destructor
+ */
+ {
+ }
+
+CTlsProvStep2::CTlsProvStep2()
+/**
+ * Constructor
+ */
+ {
+ // Call base class method to set up the human readable name for logging
+ SetTestStepName(KTlsTestStep2);
+ }
+
+TVerdict CTlsProvStep2::doTestStepPreambleL()
+/**
+ * @return - TVerdict code
+ * Override of base class virtual
+ */
+ {
+ INFO_PRINTF1(_L("Test Step 1 Preamble"));
+ SetTestStepResult(EPass);
+ return TestStepResult();
+ }
+
+TVerdict CTlsProvStep2::doTestStepL()
+/**
+ * @return - TVerdict code
+ * Override of base class pure virtual
+ * Demonstrates reading configuration parameters fom an ini file section
+ */
+ {
+
+ INFO_PRINTF1(_L("Inside Test Step 2"));
+
+ SetTestStepResult(EPass);
+ User::After(5000000);
+ return TestStepResult();
+
+ }
+
+TVerdict CTlsProvStep2::doTestStepPostambleL()
+/**
+ * @return - TVerdict code
+ * Override of base class virtual
+ */
+ {
+ INFO_PRINTF1(_L("Test Step 1 Postamble"));
+ return TestStepResult();
+ }
+
+
+//
+/*************************************Test Steps**********************************/
+//
+
+
+CTlsProvStep::~CTlsProvStep()
+/**
+ * Destructor
+ */
+ {
+ }
+
+CTlsProvStep::CTlsProvStep(const TDesC& aStepName)
+/**
+ * Constructor
+ */
+ {
+ // Call base class method to set up the human readable name for logging
+ SetTestStepName( aStepName );
+ }
+
+TVerdict CTlsProvStep::doTestStepPreambleL()
+/**
+ * @return - TVerdict code
+ * Override of base class virtual
+ */
+ {
+ if( TestStepName() == KTlsTestStep1_0)
+ {
+ INFO_PRINTF1(_L("Test Step 1.0 Verify supported ciphers"));
+ }
+ else if( TestStepName() == KTlsTestStep2_0)
+ {
+ INFO_PRINTF1(_L("Test Step 2.0 Generation of random bytes"));
+ }
+ else if( TestStepName() == KTlsTestStep4_0)
+ {
+ INFO_PRINTF1(_L("Test Step 4.0 Retrieval of cached server certificate"));
+ }
+ else if( TestStepName() == KTlsTestStep4_1)
+ {
+ INFO_PRINTF1(_L("Test Step 4.1 Retrieval of valid cached session"));
+ }
+ else if(TestStepName() == KTlsTestStep4_2)
+ {
+ INFO_PRINTF1(_L("Test Step 4.2 Retrieval of valid cached session with additional conditions"));
+ }
+ else if(TestStepName() == KTlsTestStep4_3)
+ {
+ INFO_PRINTF1(_L("Test Step 4.3 Attempt to retrieve invalid session from cache"));
+ }
+ else if(TestStepName() == KTlsTestStep4_4)
+ {
+ INFO_PRINTF1(_L("Test Step 4.4 Attempt to retrieve session from cache with non matching crypto algorithms"));
+ }
+ else if(TestStepName() == KTlsTestStep4_5)
+ {
+ INFO_PRINTF1(_L("Test Step 4.5 Cache clearing"));
+ }
+ else if(TestStepName() == KTlsTestStep4_6)
+ {
+ INFO_PRINTF1(_L("Test Step 4.6 Periodical cache clearing"));
+ }
+ else if(TestStepName() == KTlsTestStep5_0)
+ {
+ INFO_PRINTF1(_L("Test Steps 5.0, Verify server authentication dialog"));
+ }
+ else if(TestStepName() == KTlsTestStep5_1)
+ {
+ INFO_PRINTF1(_L("Test Steps 5.1, Verify server authentication dialog"));
+ }
+ else if(TestStepName() == KTlsTestStep5_2)
+ {
+ INFO_PRINTF1(_L("Test Steps 5.2, 8.0, 8.2 client cert, computing and veryfying digital signatures: RSA"));
+ }
+ else if(TestStepName() == KTlsTestStep5_3)
+ {
+ INFO_PRINTF1(_L("Test Step 5.3 Veryfying signature, RSA, negative test"));
+ }
+ else if(TestStepName() == KTlsTestStep5_4)
+ {
+ INFO_PRINTF1(_L("Test Steps 5.4, 8.0, 8.2 client cert, computing and veryfying digital signatures: DSA"));
+ }
+ else if(TestStepName() == KTlsTestStep5_5)
+ {
+ INFO_PRINTF1(_L("Test Step 5.5 Veryfying signature, DSA, negative test"));
+ }
+ else if(TestStepName() == KTlsTestStep7_0)
+ {
+ INFO_PRINTF1(_L("Test Step 7.0 Verification of Server Finished Check, TLS case"));
+ }
+ else if(TestStepName() == KTlsTestStep7_1)
+ {
+ INFO_PRINTF1(_L("Test Step 7.1 Verification of Server Finished Check, SSL case"));
+ }
+ else if(TestStepName() == KTlsTestStep7_2)
+ {
+ INFO_PRINTF1(_L("Test Step 7.2 Verification of Client Finished Check, TLS case"));
+ }
+ else if(TestStepName() == KTlsTestStep7_3)
+ {
+ INFO_PRINTF1(_L("Test Step 7.3 Verification of Client Finished Check, SSL case"));
+ }
+ else if(TestStepName() == KTlsTestStep8_1)
+ {
+ INFO_PRINTF1(_L("Test Step 8.1 Retrieving client cert in non-RSA key exchange case"));
+ }
+ else if(TestStepName() == KTlsTestStep9_0)
+ {
+ INFO_PRINTF1(_L("Test Step 9.0 Testing of Cancel functions"));
+ }
+ else if(TestStepName() == KTlsTestStep10_0)
+ {
+ INFO_PRINTF1(_L("Test Step 10.0 Testing of Cancel function"));
+ }
+ else if(TestStepName() == KTlsTestStep10_1)
+ {
+ INFO_PRINTF1(_L("Test Step 10.1 Generating EAP String for TLS Protocol"));
+ }
+
+ SetTestStepResult(EFail);
+ return TestStepResult();
+ }
+
+TVerdict CTlsProvStep::doTestStepL()
+/**
+ * @return - TVerdict code
+ * Override of base class pure virtual
+ * Demonstrates reading configuration parameters fom an ini file section
+ */
+ {
+ CActiveScheduler* sched=NULL;
+ sched=new(ELeave) CActiveScheduler;
+ CActiveScheduler::Install(sched);
+ CTlsProvTestActive* activeObj = new CTlsProvTestActive( Logger() );
+
+ if(TestStepName() == KTlsTestStep1_0)
+ {
+ INFO_PRINTF1(_L("Obtain the list of Available cipher suites"));
+
+ verdict = activeObj->doTest1_0L( this );
+ INFO_PRINTF1( activeObj->iLogInfo );
+ }
+ else if(TestStepName() == KTlsTestStep1_1)
+ {
+ INFO_PRINTF1(_L("Obtain the list of Available cipher suites with a simulated token failure"));
+
+ verdict = activeObj->doTest1_1L( this );
+ INFO_PRINTF1( activeObj->iLogInfo );
+ }
+ else if ( TestStepName() == KTlsTestStep2_0)
+ {
+ INFO_PRINTF1(_L("Inside Test Step 2.0"));
+
+ verdict = activeObj->doTest2_0L( this );
+ INFO_PRINTF1( activeObj->iLogInfo );
+ }
+ else if ( TestStepName() == KTlsTestStep3_0)
+ {
+ INFO_PRINTF1(_L("Inside Test Step 3.0"));
+
+ verdict = activeObj->TestProvider_3_0L( this );
+ INFO_PRINTF1( activeObj->iLogInfo );
+ }
+ else if(TestStepName() == KTlsTestStep3_1)
+ {
+ INFO_PRINTF1(_L("Inside Test Step 3.1"));
+
+ verdict = activeObj->TestProvider_3_1L( this );
+ INFO_PRINTF1( activeObj->iLogInfo );
+ }
+ else if(TestStepName() == KTlsTestStep3_2)
+ {
+ INFO_PRINTF1(_L("Inside Test Step 3.2"));
+
+ verdict = activeObj->TestProvider_3_2L( this );
+ INFO_PRINTF1( activeObj->iLogInfo );
+ }
+ else if(TestStepName() == KTlsTestStep3_3)
+ {
+ INFO_PRINTF1(_L("Inside Test Step 3.3"));
+
+ verdict = activeObj->TestProvider_3_3L( this );
+ INFO_PRINTF1( activeObj->iLogInfo );
+ }
+ else if ( TestStepName() == KTlsTestStep4_0)
+ {
+ INFO_PRINTF1(_L("Inside Test Step 4.0"));
+
+ verdict = activeObj->doTest4_0L( this );
+ INFO_PRINTF1( activeObj->iLogInfo );
+ }
+ else if(TestStepName() == KTlsTestStep4_1)
+ {
+ INFO_PRINTF1(_L("Inside Test Step 4.1"));
+
+ verdict = activeObj->doTest4_1L( this );
+ INFO_PRINTF1( activeObj->iLogInfo );
+ }
+ else if(TestStepName() == KTlsTestStep4_2)
+ {
+ INFO_PRINTF1(_L("Inside Test Step 4.2"));
+
+ verdict = activeObj->doTest4_2L( this );
+ INFO_PRINTF1( activeObj->iLogInfo );
+ }
+ else if(TestStepName() == KTlsTestStep4_3)
+ {
+ INFO_PRINTF1(_L("Inside Test Step 4.3"));
+
+ verdict = activeObj->doTest4_3L( this );
+ INFO_PRINTF1( activeObj->iLogInfo );
+ }
+ else if(TestStepName() == KTlsTestStep4_4)
+ {
+ INFO_PRINTF1(_L("Inside Test Step 4.4"));
+
+ verdict = activeObj->doTest4_4L( this );
+ INFO_PRINTF1( activeObj->iLogInfo );
+ }
+ else if(TestStepName() == KTlsTestStep4_5)
+ {
+ INFO_PRINTF1(_L("Inside Test Step 4.5"));
+
+ verdict = activeObj->doTest4_5L( this );
+ INFO_PRINTF1( activeObj->iLogInfo );
+ }
+ else if(TestStepName() == KTlsTestStep4_6)
+ {
+ INFO_PRINTF1(_L("Inside Test Step 4.6"));
+
+ verdict = activeObj->doTest4_6L( this );
+ INFO_PRINTF1( activeObj->iLogInfo );
+ }
+ else if ( TestStepName() == KTlsTestStep5_0)
+ {
+ INFO_PRINTF1(_L("Verify a valid certificate"));
+ if (EFalse == GetBoolFromConfig(ConfigSection(),KDialogNonAttendedMode,activeObj->iDialogNonAttendedMode))
+ {
+ INFO_PRINTF1(_L("DialogNonAttendedMode tag is required to continue the test"));
+ }
+
+ if (EFalse == GetStringFromConfig(ConfigSection(),KExpectedResult,activeObj->iExpectedResult))
+ {
+ INFO_PRINTF1(_L("ExpectedResult tag is required to continue the test"));
+ }
+ verdict = activeObj->doTest5_0L( this );
+ INFO_PRINTF1( activeObj->iLogInfo );
+ }
+ else if(TestStepName() == KTlsTestStep5_1)
+ {
+ INFO_PRINTF1(_L("Verify a Invalid certificate"));
+
+ if (EFalse == GetBoolFromConfig(ConfigSection(),KDialogNonAttendedMode,activeObj->iDialogNonAttendedMode))
+ {
+ INFO_PRINTF1(_L("DialogNonAttendedMode tag is required to continue the test"));
+ }
+
+ if (EFalse == GetStringFromConfig(ConfigSection(),KExpectedResult,activeObj->iExpectedResult))
+ {
+ INFO_PRINTF1(_L("ExpectedResult tag is required to continue the test"));
+ }
+ verdict = activeObj->doTest5_1L( this );
+ INFO_PRINTF1( activeObj->iLogInfo );
+ }
+ else if ( TestStepName() == KTlsTestStep6_0)
+ {
+ INFO_PRINTF1(_L("Test Encryption, Decryption and Mac computation with export keys on TLS"));
+
+ verdict = activeObj->TestProvider_6_0L( this );
+ INFO_PRINTF1( activeObj->iLogInfo );
+ }
+ else if ( TestStepName() == KTlsTestStep6_1)
+ {
+ INFO_PRINTF1(_L("Test Encryption, Decryption and Mac computation with export keys on SSL"));
+
+ verdict = activeObj->TestProvider_6_1L( this );
+ INFO_PRINTF1( activeObj->iLogInfo );
+ }
+ else if ( TestStepName() == KTlsTestStep6_2)
+ {
+ INFO_PRINTF1(_L("Test Encryption, Decryption and Mac computation on TLS"));
+
+ verdict = activeObj->TestProvider_6_2L( this );
+ INFO_PRINTF1( activeObj->iLogInfo );
+ }
+ else if ( TestStepName() == KTlsTestStep6_3)
+ {
+ INFO_PRINTF1(_L("Test Encryption, Decryption and Mac computation on TLS"));
+
+ verdict = activeObj->TestProvider_6_3L( this );
+ INFO_PRINTF1( activeObj->iLogInfo );
+ }
+ else if ( TestStepName() == KTlsTestStep7_0)
+ {
+ INFO_PRINTF1(_L("Verify Server Finished Message, TLS case"));
+
+ verdict = activeObj->doTest7_0L( this );
+ INFO_PRINTF1( activeObj->iLogInfo );
+ }
+ else if ( TestStepName() == KTlsTestStep7_1)
+ {
+ INFO_PRINTF1(_L("Verify Server Finished Message, SSL case"));
+
+ verdict = activeObj->doTest7_1L( this );
+ INFO_PRINTF1( activeObj->iLogInfo );
+ }
+ else if ( TestStepName() == KTlsTestStep7_2)
+ {
+ INFO_PRINTF1(_L("Verify Client Finished Message, TLS case"));
+
+ verdict = activeObj->doTest7_2L( this );
+ INFO_PRINTF1( activeObj->iLogInfo );
+ }
+ else if ( TestStepName() == KTlsTestStep7_3)
+ {
+ INFO_PRINTF1(_L("Verify Client Finished Message, SSL case"));
+
+ verdict = activeObj->doTest7_3L( this );
+ INFO_PRINTF1( activeObj->iLogInfo );
+ }
+ else if(TestStepName() == KTlsTestStep5_2)
+ {
+ INFO_PRINTF1(_L("Inside combined Test Steps 5.2 & 8.0"));
+
+ verdict = activeObj->doTest5_2L( this );
+ INFO_PRINTF1( activeObj->iLogInfo );
+ }
+ else if(TestStepName() == KTlsTestStep5_3)
+ {
+ INFO_PRINTF1(_L("Inside Test Step 5.3"));
+
+ verdict = activeObj->doTest5_3L( this );
+ INFO_PRINTF1( activeObj->iLogInfo );
+ }
+ else if(TestStepName() == KTlsTestStep5_4)
+ {
+ INFO_PRINTF1(_L("Inside combined Test Steps 5.4 & 8.2"));
+
+ verdict = activeObj->doTest5_4L( this );
+ INFO_PRINTF1( activeObj->iLogInfo );
+ }
+ else if(TestStepName() == KTlsTestStep5_5)
+ {
+ INFO_PRINTF1(_L("Inside Test Step 5.5"));
+
+ verdict = activeObj->doTest5_5L( this );
+ INFO_PRINTF1( activeObj->iLogInfo );
+ }
+ else if(TestStepName() == KTlsTestStep8_1)
+ {
+ INFO_PRINTF1(_L("Inside Test Step 8.1"));
+
+ verdict = activeObj->doTest8_1L( this );
+ INFO_PRINTF1( activeObj->iLogInfo );
+ }
+ else if(TestStepName() == KTlsTestStep9_0)
+ {
+ INFO_PRINTF1(_L("Inside Test Step 9.0"));
+
+ verdict = activeObj->doTest9_0L( this );
+ INFO_PRINTF1( activeObj->iLogInfo );
+ }
+ else if(TestStepName() == KTlsTestStep10_0)
+ {
+ INFO_PRINTF1(_L("Inside Test Step 10.0"));
+
+ verdict = activeObj->doTest10_0L( this );
+ INFO_PRINTF1( activeObj->iLogInfo );
+ }
+ else if(TestStepName() == KTlsTestStep10_1)
+ {
+ INFO_PRINTF1(_L("Inside Test Step 10.1"));
+
+ verdict = activeObj->doTest10_1L( this );
+ INFO_PRINTF1( activeObj->iLogInfo );
+ }
+ delete activeObj;
+
+ SetTestStepResult( verdict );
+ return TestStepResult();
+
+
+ }
+
+
+TVerdict CTlsProvStep::doTestStepPostambleL()
+/**
+ * @return - TVerdict code
+ * Override of base class virtual
+ */
+ {
+ if(TestStepName() == KTlsTestStep2_0)
+ {
+ INFO_PRINTF1(_L("Test Step 2.0 Done"));
+ }
+ else if(TestStepName() == KTlsTestStep4_0)
+ {
+ INFO_PRINTF1(_L("Test Step 4.0 Done"));
+ }
+ else if(TestStepName() == KTlsTestStep4_1)
+ {
+ INFO_PRINTF1(_L("Test Step 4.1 Done"));
+ }
+ else if(TestStepName() == KTlsTestStep4_2)
+ {
+ INFO_PRINTF1(_L("Test Step 4.2 Done"));
+ }
+ else if(TestStepName() == KTlsTestStep4_3)
+ {
+ INFO_PRINTF1(_L("Test Step 4.3 Done"));
+ }
+ else if(TestStepName() == KTlsTestStep4_4)
+ {
+ INFO_PRINTF1(_L("Test Step 4.4 Done"));
+ }
+ else if(TestStepName() == KTlsTestStep4_5)
+ {
+ INFO_PRINTF1(_L("Test Step 4.5 Done"));
+ }
+ else if(TestStepName() == KTlsTestStep4_6)
+ {
+ INFO_PRINTF1(_L("Test Step 4.6 Done"));
+ }
+ else if(TestStepName() == KTlsTestStep5_2)
+ {
+ INFO_PRINTF1(_L("Test Steps 5.2 (& 8.0, 8.2) Done"));
+ }
+ else if(TestStepName() == KTlsTestStep5_3)
+ {
+ INFO_PRINTF1(_L("Test Step 5.3 Done"));
+ }
+ else if(TestStepName() == KTlsTestStep5_4)
+ {
+ INFO_PRINTF1(_L("Test Steps 5.4 (& 8.0, 8.2) Done"));
+ }
+ else if(TestStepName() == KTlsTestStep5_5)
+ {
+ INFO_PRINTF1(_L("Test Step 5.5 Done"));
+ }
+ else if(TestStepName() == KTlsTestStep7_0)
+ {
+ INFO_PRINTF1(_L("Test Step 7.0 Done"));
+ }
+ else if(TestStepName() == KTlsTestStep7_1)
+ {
+ INFO_PRINTF1(_L("Test Step 7.1 Done"));
+ }
+ else if(TestStepName() == KTlsTestStep7_2)
+ {
+ INFO_PRINTF1(_L("Test Step 7.2 Done"));
+ }
+ else if(TestStepName() == KTlsTestStep7_3)
+ {
+ INFO_PRINTF1(_L("Test Step 7.3 Done"));
+ }
+ else if(TestStepName() == KTlsTestStep8_1)
+ {
+ INFO_PRINTF1(_L("Test Step 8.1 Done"));
+ }
+ else if(TestStepName() == KTlsTestStep9_0)
+ {
+ INFO_PRINTF1(_L("Test Step 9.0 Done"));
+ }
+ else if(TestStepName() == KTlsTestStep10_0)
+ {
+ INFO_PRINTF1(_L("Test Step 10.0 Done"));
+ }
+ else if(TestStepName() == KTlsTestStep10_1)
+ {
+ INFO_PRINTF1(_L("Test Step 10.1 Done"));
+ }
+ return TestStepResult();
+ }
+
+
+//Reading test files
+
+TInt CTlsProvStep::ReadDataForCreateL(CTlsCryptoAttributes*& aTlsCryptoAttributes,
+ HBufC8*& aSrvCert)
+ {
+ RFs filesys;
+ if ( KErrNone != filesys.Connect() )
+ return -1;
+
+ TInt res = KErrNone;
+
+
+ RFile* file;
+ file = new (ELeave) RFile;
+
+
+
+ TBuf8<1000> bufForData;
+
+ //
+ // server random
+
+ res = file->Open(filesys,
+ iServerRnd,
+ EFileShareAny|EFileRead);
+ if( KErrNone != res )
+ {
+ filesys.Close();
+ return -1;
+ }
+ res = file->Read(bufForData);
+ if( KErrNone != res )
+ {
+ file->Close();
+ filesys.Close();
+ return -1;
+ }
+
+ aTlsCryptoAttributes->iMasterSecretInput.iServerRandom.Copy(bufForData.Ptr(), 32);
+ file->Close();
+
+
+ //
+ // client random
+
+ res = file->Open(filesys,
+ iClientRnd,
+ EFileShareAny|EFileRead);
+ if( KErrNone != res )
+ {
+ filesys.Close();
+ return -1;
+ }
+ res = file->Read(bufForData);
+ if( KErrNone != res )
+ {
+ file->Close();
+ filesys.Close();
+ return -1;
+ }
+
+ aTlsCryptoAttributes->iMasterSecretInput.iClientRandom.Copy(bufForData.Ptr(), 32);
+ file->Close();
+ bufForData.Zero();
+
+
+ //
+ // server key parameters
+
+ res = file->Open(filesys,
+ iKeyParam1,
+ EFileShareAny|EFileRead);
+ if(!res )
+ {
+ res = file->Read(bufForData);
+ if( KErrNone != res )
+ {
+ file->Close();
+ filesys.Close();
+ return -1;
+ }
+
+ aTlsCryptoAttributes->iPublicKeyParams->iValue1 = bufForData.AllocL();
+
+ file->Close();
+ bufForData.Zero();
+ }
+
+ res = file->Open(filesys,
+ iKeyParam2,
+ EFileShareAny|EFileRead);
+
+ if(!res )
+ {
+ res = file->Read(bufForData);
+ if( KErrNone != res )
+ {
+ file->Close();
+ filesys.Close();
+ return -1;
+ }
+ aTlsCryptoAttributes->iPublicKeyParams->iValue2 = bufForData.AllocL();
+
+ file->Close();
+ bufForData.Zero();
+ }
+
+ res = file->Open(filesys,
+ iKeyParam3,
+ EFileShareAny|EFileRead);
+ if(!res )
+ {
+ res = file->Read(bufForData);
+ if( KErrNone != res )
+ {
+ file->Close();
+ filesys.Close();
+ return -1;
+ }
+ aTlsCryptoAttributes->iPublicKeyParams->iValue3 = bufForData.AllocL();
+ bufForData.Zero();
+ file->Close();
+ }
+
+
+ //
+ // server cert
+
+ res = file->Open(filesys,
+ iServerCertChain,
+ EFileShareAny|EFileRead);
+ if( KErrNone != res )
+ {
+ filesys.Close();
+ return -1;
+ }
+ res = file->Read(bufForData);
+ if( KErrNone != res )
+ {
+ file->Close();
+ filesys.Close();
+ return -1;
+ }
+
+ aSrvCert = bufForData.AllocL();
+
+ file->Close();
+
+
+ filesys.Close();
+
+ return 0;
+ }
+
+
+TInt CTlsProvStep::ReadDataForClntFinishedL(HBufC8*& aClntFinInput,
+ HBufC8*& aClntFinishedMsg )
+ {
+ RFs filesys;
+ if ( KErrNone != filesys.Connect() )
+ return -1;
+
+ TInt res = KErrNone;
+
+
+ RFile* file;
+ file = new (ELeave) RFile;
+
+
+
+ TBuf8<2000> bufForData;
+
+
+ //
+ // input for client finished check
+
+ res = file->Open(filesys,
+ iHandshakeMsgsClient,
+ EFileShareAny|EFileRead);
+
+ if( KErrNone != res )
+ {
+ filesys.Close();
+ return -1;
+ }
+ res = file->Read(bufForData);
+ if( KErrNone != res )
+ {
+ file->Close();
+ filesys.Close();
+ return -1;
+ }
+
+ aClntFinInput = bufForData.AllocL();
+
+ //
+ // client finished message
+
+ res = file->Open(filesys,
+ iClntFinishedCheckOutput,
+ EFileShareAny|EFileRead);
+
+ if( KErrNone != res )
+ {
+ filesys.Close();
+ return -1;
+ }
+ res = file->Read(bufForData);
+ if( KErrNone != res )
+ {
+ file->Close();
+ filesys.Close();
+ return -1;
+ }
+
+ aClntFinishedMsg = bufForData.AllocL();
+
+ return 0;
+ }
+
+TInt CTlsProvStep::ReadDataForSrvFinishedL(HBufC8*& aVerifySrvFinInput,
+ HBufC8*& aSrvFinishedMsg )
+ {
+
+ RFs filesys;
+ if ( KErrNone != filesys.Connect() )
+ return -1;
+
+ TInt res = KErrNone;
+
+
+ RFile* file;
+ file = new (ELeave) RFile;
+
+
+ TBuf8<2000> bufForData;
+
+ //
+ // input for server finished check
+
+ res = file->Open(filesys,
+ iHandshakeMsgsServer,
+ EFileShareAny|EFileRead);
+
+ if( KErrNone != res )
+ {
+ filesys.Close();
+ return -1;
+ }
+ res = file->Read(bufForData);
+ if( KErrNone != res )
+ {
+ file->Close();
+ filesys.Close();
+ return -1;
+ }
+
+ aVerifySrvFinInput = bufForData.AllocL();
+
+ //
+ // server finshed message
+
+ res = file->Open(filesys,
+ iSrvFinishedCheckOutput,
+ EFileShareAny|EFileRead);
+
+ if( KErrNone != res )
+ {
+ filesys.Close();
+ return -1;
+ }
+ res = file->Read(bufForData);
+ if( KErrNone != res )
+ {
+ file->Close();
+ filesys.Close();
+ return -1;
+ }
+
+ aSrvFinishedMsg = bufForData.AllocL();
+
+ return 0;
+
+ }
+
+TInt CTlsProvStep::ReadClientKeyExchL(HBufC8*& aClientKeyExchMsg )
+ {
+
+ RFs filesys;
+ if ( KErrNone != filesys.Connect() )
+ return -1;
+
+ TInt res = KErrNone;
+
+
+ RFile* file;
+ file = new (ELeave) RFile;
+
+ TBuf8<2000> bufForData;
+
+
+ //
+ // input for server finished check
+
+ res = file->Open(filesys,
+ iClientKeyExch,
+ EFileShareAny|EFileRead);
+
+ if( KErrNone != res )
+ {
+ filesys.Close();
+ return -1;
+ }
+ res = file->Read(bufForData);
+ if( KErrNone != res )
+ {
+ file->Close();
+ filesys.Close();
+ return -1;
+ }
+
+ aClientKeyExchMsg = bufForData.AllocL();
+
+ return 0;
+ }
+
+TInt ReadTestDataL( CTlsCryptoAttributes*& aTlsCryptoAttributes, HBufC8*& aSrvCert,
+ CTlsProvStep*& aTestStepPtr )
+ {
+
+ RFs filesys;
+ if ( KErrNone != filesys.Connect() )
+ return -1;
+
+ TInt res = KErrNone;
+
+
+ RFile* file;
+ file = new (ELeave) RFile;
+
+
+
+ TBuf8<1000> bufForData;
+
+ //
+ // server random
+
+ res = file->Open(filesys,
+ aTestStepPtr->iServerRnd,
+ EFileShareAny|EFileRead);
+ if( KErrNone != res )
+ {
+ filesys.Close();
+ return -1;
+ }
+ res = file->Read(bufForData);
+ if( KErrNone != res )
+ {
+ file->Close();
+ filesys.Close();
+ return -1;
+ }
+
+ aTlsCryptoAttributes->iMasterSecretInput.iServerRandom.Copy(bufForData.Ptr(), 32);
+ file->Close();
+
+
+ //
+ // client random
+
+ res = file->Open(filesys,
+ aTestStepPtr->iClientRnd,
+ EFileShareAny|EFileRead);
+ if( KErrNone != res )
+ {
+ filesys.Close();
+ return -1;
+ }
+ res = file->Read(bufForData);
+ if( KErrNone != res )
+ {
+ file->Close();
+ filesys.Close();
+ return -1;
+ }
+
+ aTlsCryptoAttributes->iMasterSecretInput.iClientRandom.Copy(bufForData.Ptr(), 32);
+ file->Close();
+ bufForData.Zero();
+
+
+ //
+ // server key parameters
+ //aTlsCryptoAttributes->iPublicKeyParams = new CTLSPublicKeyParams;
+ res = file->Open(filesys,
+ aTestStepPtr->iKeyParam1,
+ EFileShareAny|EFileRead);
+ if(!res )
+ {
+ res = file->Read(bufForData);
+ if( KErrNone != res )
+ {
+ file->Close();
+ filesys.Close();
+ return -1;
+ }
+
+ aTlsCryptoAttributes->iPublicKeyParams->iValue1 = bufForData.AllocL();
+
+ file->Close();
+ bufForData.Zero();
+ }
+
+ res = file->Open(filesys,
+ aTestStepPtr->iKeyParam2,
+ EFileShareAny|EFileRead);
+
+ if(!res )
+ {
+ res = file->Read(bufForData);
+ if( KErrNone != res )
+ {
+ file->Close();
+ filesys.Close();
+ return -1;
+ }
+ aTlsCryptoAttributes->iPublicKeyParams->iValue2 = bufForData.AllocL();
+
+ file->Close();
+ bufForData.Zero();
+ }
+
+ res = file->Open(filesys,
+ aTestStepPtr->iKeyParam3,
+ EFileShareAny|EFileRead);
+ if(!res )
+ {
+ res = file->Read(bufForData);
+ if( KErrNone != res )
+ {
+ file->Close();
+ filesys.Close();
+ return -1;
+ }
+ aTlsCryptoAttributes->iPublicKeyParams->iValue3 = bufForData.AllocL();
+ bufForData.Zero();
+ file->Close();
+ }
+
+
+ //
+ // server cert
+
+ res = file->Open(filesys,
+ aTestStepPtr->iServerCertChain,
+ EFileShareAny|EFileRead);
+ if( KErrNone != res )
+ {
+ filesys.Close();
+ return -1;
+ }
+ res = file->Read(bufForData);
+ if( KErrNone != res )
+ {
+ file->Close();
+ filesys.Close();
+ return -1;
+ }
+
+ aSrvCert = bufForData.AllocL();
+
+ file->Close();
+
+ filesys.Close();
+ delete file;
+ return 0;
+ }
+
+
+
+TInt CTlsProvTestActive::StandardTestInitL(
+ CTlsProvStep* aStep,
+ CTlsCryptoAttributes* tlsCryptoAttributes,
+ HBufC8*& aEncServerCert)
+ {
+ aStep->GetStringFromConfig(aStep->ConfigSection(),_L("ServerRnd"),aStep->iServerRnd);
+ aStep->GetStringFromConfig(aStep->ConfigSection(),_L("ClientRnd"),aStep->iClientRnd);
+ aStep->GetStringFromConfig(aStep->ConfigSection(),_L("KeyParams1"),aStep->iKeyParam1);
+ aStep->GetStringFromConfig(aStep->ConfigSection(),_L("KeyParams2"),aStep->iKeyParam2);
+ aStep->GetStringFromConfig(aStep->ConfigSection(),_L("KeyParams3"),aStep->iKeyParam3);
+ aStep->GetStringFromConfig(aStep->ConfigSection(),_L("ServerCert"),aStep->iServerCertChain);
+ aStep->GetStringFromConfig(aStep->ConfigSection(),_L("HandshakeMsgsServer"),aStep->iHandshakeMsgsServer);
+ aStep->GetStringFromConfig(aStep->ConfigSection(),_L("SrvFinishedCheckOutput"),aStep->iSrvFinishedCheckOutput);
+ aStep->GetStringFromConfig(aStep->ConfigSection(),_L("Premaster"),aStep->iPremaster);
+ aStep->GetStringFromConfig(aStep->ConfigSection(),_L("IssuerName"),iIssuerName);
+ aStep->GetStringFromConfig(aStep->ConfigSection(),_L("KeyDerivation128"),iKeyDerivation128);
+ aStep->GetStringFromConfig(aStep->ConfigSection(),_L("KeyDerivation64"),iKeyDerivation64);
+
+ tlsCryptoAttributes->iClientAuthenticate = EFalse;
+ tlsCryptoAttributes->iDialogNonAttendedMode = ETrue;
+
+ tlsCryptoAttributes->iSessionNameAndID.iServerName.iAddress.Copy( KServer1 );
+ tlsCryptoAttributes->iSessionNameAndID.iServerName.iPort = 10;
+ tlsCryptoAttributes->iSessionNameAndID.iSessionId.Append( KSessionId1 );
+
+
+ tlsCryptoAttributes->iCompressionMethod = ENullCompression;
+ tlsCryptoAttributes->iCurrentCipherSuite.iHiByte = 0;
+ tlsCryptoAttributes->iCurrentCipherSuite.iLoByte = 3;
+
+
+ tlsCryptoAttributes->iNegotiatedProtocol.iMajor = 3;
+ tlsCryptoAttributes->iNegotiatedProtocol.iMinor = 1;
+
+ tlsCryptoAttributes->iProposedProtocol.iMajor = 3;
+ tlsCryptoAttributes->iProposedProtocol.iMinor = 1;
+
+
+ //tlsCryptoAttributes->iPublicKeyParams = new CTLSPublicKeyParams;
+ tlsCryptoAttributes->iPublicKeyParams->iKeyType = ERsa;
+
+
+ tlsCryptoAttributes->iClientAuthenticate = EFalse;
+ tlsCryptoAttributes->iDialogNonAttendedMode = ETrue;
+
+ TInt res = aStep->ReadDataForCreateL(tlsCryptoAttributes, aEncServerCert);
+
+ return res;
+
+ }
+
+
+TBool CTlsProvTestActive::CacheSessionL(CTlsProvStep* aStep, CTLSSession* aSessionObj)
+ {
+ HBufC8* verifySrvFinInput = NULL;
+ HBufC8* finshedMsg = NULL;
+
+ TInt res = aStep->ReadDataForSrvFinishedL(verifySrvFinInput, finshedMsg);
+ if( res < 0 )
+ {
+ iLogInfo.Copy( _L(" problems with test data files (for server finished check)") );
+ return EFalse;
+ }
+
+ CMessageDigest* md5Dig = NULL;
+ CMessageDigest* shaDig = NULL;
+
+ md5Dig = CMD5::NewL();
+ CleanupStack::PushL( md5Dig );
+ shaDig = CSHA1::NewL();
+ CleanupStack::PushL( shaDig );
+
+ md5Dig->Reset();
+ md5Dig->Update( verifySrvFinInput->Des() );
+
+ shaDig->Reset();
+ shaDig->Update( verifySrvFinInput->Des() );
+
+ iStatus = KRequestPending;
+ aSessionObj->VerifyServerFinishedMsgL(
+ md5Dig,
+ shaDig,
+ finshedMsg->Des(),
+ iStatus) ;
+
+ SetActive();
+ CActiveScheduler::Start();
+
+
+ CleanupStack::PopAndDestroy( 2, md5Dig );
+
+ if ( iStatus.Int() != KErrNone )
+ {
+ iLogInfo.Copy( _L(" CTLSSession::VerifyServerFinishedMsgL failed") );
+ return EFalse;
+ }
+
+ return ETrue;
+}
+
+
+
+
+
+void CTlsTestRandom::GenerateBytesL(TDes8& aDestination)
+ {
+ CSystemRandom* rand = NULL;
+ rand = CSystemRandom::NewLC();
+
+ rand->GenerateBytesL( aDestination );
+
+ CleanupStack::PopAndDestroy( rand );
+
+ RFs fs;
+ User::LeaveIfError( fs.Connect() );
+
+ TBuf8<512> bufForData;
+ RFile* file;
+ file=new (ELeave) RFile;
+
+ TInt res;
+ TDriveUnit sysDrive(fs.GetSystemDrive());
+ TDriveName sysDriveName (sysDrive.Name());
+ TFileName fileName (sysDriveName);
+ fileName.Append(_L("\\DHRandom.bin"));
+
+ res = file->Open(fs, fileName, EFileShareAny|EFileRead);
+
+ if( (KErrNone == res) && (48 != aDestination.MaxLength()) )
+ {
+ file->Read(bufForData);
+ aDestination.Copy( bufForData);
+
+ file->Close();
+ fs.Close();
+ delete file;
+ return;
+ }
+
+ if( 48 != aDestination.MaxLength() )
+ {
+ fs.Close();
+ delete file;
+ return;
+ }
+
+ fileName.Copy(sysDriveName);
+ fileName.Append(_L("\\Premaster.bin"));
+ res = file->Open(fs, fileName, EFileShareAny|EFileRead);
+ if ( KErrNone == res )
+ {
+
+ file->Read(bufForData);
+ aDestination.Copy( bufForData);
+ aDestination.SetLength( 48 );
+
+ file->Close();
+
+ }
+
+ fs.Close();
+ delete file;
+ return;
+
+ }
+
+