diff -r 000000000000 -r af10295192d8 networksecurity/tlsprovider/Test/src/TlsProvTestStep.cpp --- /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 + + +#include +#include +#include + +_LIT(KDialogNonAttendedMode,"DialogNonAttendedMode"); +_LIT(KExpectedResult, "ExpectedResult"); + +// tls test +#include + +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; + + } + +