diff -r 000000000000 -r af10295192d8 networksecurity/tlsprovider/Test/src/TlsProvTestSteps4.cpp --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/networksecurity/tlsprovider/Test/src/TlsProvTestSteps4.cpp Tue Jan 26 15:23:49 2010 +0200 @@ -0,0 +1,1511 @@ +// 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: +// + +#include "TlsProvTestStep.h" +#include +#include + + + +#define KTLSCachingTimeout 200 + +TVerdict CTlsProvTestActive::doTest4_0L( CTlsProvStep* aStep ) + { + + CTlsTestRandom rnd; + + SetThreadRandomL( &rnd ); + + CTLSProvider* tlsProvider = CTLSProvider::ConnectL(); + + RArray userCipherSuiteList; + iStatus = KRequestPending; + tlsProvider->CipherSuitesL( userCipherSuiteList ,iStatus); + + SetActive(); + CActiveScheduler::Start(); + + CTLSSession* sessionObj = NULL; + + CTlsCryptoAttributes* tlsCryptoAttributes = tlsProvider->Attributes(); + + HBufC8* encServerCert = NULL; + + TInt res = StandardTestInitL(aStep, tlsCryptoAttributes, encServerCert); + if( res < 0 ) + { + iLogInfo.Copy( _L(" 4.0: problems with test data files") ); + return EFail; + } + + + CX509Certificate* serverCert = NULL; + iStatus = KRequestPending; + tlsProvider->VerifyServerCertificate( encServerCert->Des(), serverCert, iStatus); + SetActive(); + CActiveScheduler::Start(); + + serverCert = CX509Certificate::NewL(encServerCert->Des()); //- remove when VerifyServerCertificate ready + + + + HBufC8* clientKeyExch = NULL; + + iStatus = KRequestPending; + tlsProvider->CreateL( sessionObj, + iStatus); + SetActive(); + CActiveScheduler::Start(); + + + // check that ClientKeyExch is not NULL + if ( (iStatus.Int() != KErrNone ) || (NULL == sessionObj) ) + { + iLogInfo.Copy( _L(" 4.0: CTLSProvider::Create failed") ); + return EInconclusive; + } + + iStatus = KRequestPending; + sessionObj->ClientKeyExchange(clientKeyExch, iStatus); + SetActive(); + CActiveScheduler::Start(); + + // check that ClientKeyExch is not NULL + if ( (NULL == clientKeyExch) || ( 0 == clientKeyExch->Length()) ) + { + iLogInfo.Copy( _L(" 4.0: CTLSSession::ClientKeyExchange failed") ); + return EInconclusive; + } + + if( EFalse == CacheSessionL( aStep, sessionObj) ) + return EInconclusive; + + iStatus = KRequestPending; + CX509Certificate* cert; + sessionObj->ServerCertificate( cert, iStatus ); + + SetActive(); + CActiveScheduler::Start(); + + + + if ( KErrNone != iStatus.Int() ) + { + iLogInfo.Copy( _L(" 4.0: CTLSSession::ServerCertificte - returned with error") ); + return EFail; + } + + //compare retrieved cert with original one: + if ( cert->IsEqualL( *serverCert ) == EFalse ) + { + iLogInfo.Copy( _L(" 4.0: retrieved certificate doesn't match") ); + return EFail; + } + + iLogInfo.Copy( _L(" 4.0: OK") ); + + delete tlsProvider; + delete sessionObj; + + return EPass; + + } + + + +TVerdict CTlsProvTestActive::doTest4_1L( CTlsProvStep* aStep ) + { + + CTlsTestRandom rnd; + + SetThreadRandomL( &rnd ); + + RArray userCipherSuiteList; + CTLSProvider* tlsProvider = CTLSProvider::ConnectL(); + + iStatus = KRequestPending; + tlsProvider->CipherSuitesL( userCipherSuiteList ,iStatus); + SetActive(); + CActiveScheduler::Start(); + + + CTLSSession* sessionObj; + + CTlsCryptoAttributes* tlsCryptoAttributes = tlsProvider->Attributes(); + + HBufC8* encServerCert = NULL; + + TInt res = StandardTestInitL(aStep, tlsCryptoAttributes, encServerCert); + + if( res < 0 ) + { + iLogInfo.Copy( _L(" 4.1: problems with test data files") ); + return EFail; + } + tlsCryptoAttributes->iSessionNameAndID.iServerName.iAddress.Copy( KServer2 ); + tlsCryptoAttributes->iNegotiatedProtocol.iMajor = 3; + tlsCryptoAttributes->iNegotiatedProtocol.iMinor = 0; + + tlsCryptoAttributes->iProposedProtocol.iMajor = 3; + tlsCryptoAttributes->iProposedProtocol.iMinor = 0; + + + CX509Certificate* serverCert = NULL; + iStatus = KRequestPending; + tlsProvider->VerifyServerCertificate( encServerCert->Des(), serverCert, iStatus); + SetActive(); + CActiveScheduler::Start(); + + + tlsCryptoAttributes->iClientAuthenticate = EFalse; + tlsCryptoAttributes->iDialogNonAttendedMode = ETrue; + + + HBufC8* clientKeyExch = NULL; + + iStatus = KRequestPending; + tlsProvider->CreateL( sessionObj, + iStatus); + SetActive(); + CActiveScheduler::Start(); + + // check that ClientKeyExch is not NULL + if ( (iStatus.Int() != KErrNone ) || (NULL == sessionObj) ) + { + iLogInfo.Copy( _L(" 4.1: CTLSProvider::Create failed") ); + return EInconclusive; + } + + + iStatus = KRequestPending; + sessionObj->ClientKeyExchange(clientKeyExch, iStatus); + SetActive(); + CActiveScheduler::Start(); + + // check that ClientKeyExch is not NULL + if ( (NULL == clientKeyExch) || ( 0 == clientKeyExch->Length()) ) + { + iLogInfo.Copy( _L(" 4.1: CTLSSession::ClientKeyExchange failed") ); + return EInconclusive; + } + + if( EFalse == CacheSessionL( aStep, sessionObj) ) + return EInconclusive; + + TTLSSessionId sessionId; + + iStatus = KRequestPending; + tlsProvider->GetSessionL( + tlsCryptoAttributes->iSessionNameAndID.iServerName, + sessionId, + iStatus ); + + + SetActive(); + CActiveScheduler::Start(); + + + + if ( KErrNone != iStatus.Int() ) + { + iLogInfo.Copy( _L(" 4.1: CTLSProvider::GetSession - returned with error") ); + return EFail; + } + + if ( 0 != sessionId.Compare( + tlsCryptoAttributes->iSessionNameAndID.iSessionId ) ) + { + iLogInfo.Copy( _L(" 4.1: CTLSProvider::GetSession - BAD session id") ); + return EFail; + } + + + iLogInfo.Copy( _L(" 4.1: OK") ); + + + return EPass; + + } + + + +TVerdict CTlsProvTestActive::doTest4_2L( CTlsProvStep* aStep ) + { + + CTlsTestRandom rnd; + + SetThreadRandomL( &rnd ); + + RArray userCipherSuiteList; + CTLSProvider* tlsProvider = CTLSProvider::ConnectL(); + CTLSProvider* tlsProvider2 = CTLSProvider::ConnectL(); + + iStatus = KRequestPending; + tlsProvider->CipherSuitesL( userCipherSuiteList ,iStatus); + SetActive(); + CActiveScheduler::Start(); + + + CTLSSession* sessionObj; + CTLSSession* sessionObj2; + + CTlsCryptoAttributes* tlsCryptoAttributes = tlsProvider->Attributes(); + + HBufC8* encServerCert = NULL; + + TInt res = StandardTestInitL(aStep, tlsCryptoAttributes, encServerCert); + if( res < 0 ) + { + iLogInfo.Copy( _L(" 4.2: problems with test data files (1)") ); + return EFail; + } + + CX509Certificate* serverCert = NULL; + iStatus = KRequestPending; + tlsProvider->VerifyServerCertificate( encServerCert->Des(), serverCert, iStatus); + SetActive(); + CActiveScheduler::Start(); + + + HBufC8* clientKeyExch = NULL; + + iStatus = KRequestPending; + tlsProvider->CreateL( sessionObj, + iStatus); + SetActive(); + CActiveScheduler::Start(); + + // check that ClientKeyExch is not NULL + if ( (iStatus.Int() != KErrNone ) || (NULL == sessionObj) ) + { + iLogInfo.Copy( _L(" 4.2: CTLSProvider::Create failed") ); + return EInconclusive; + } + + iStatus = KRequestPending; + sessionObj->ClientKeyExchange(clientKeyExch, iStatus); + SetActive(); + CActiveScheduler::Start(); + + // check that ClientKeyExch is not NULL + if ( (NULL == clientKeyExch) || ( 0 == clientKeyExch->Length()) ) + { + iLogInfo.Copy( _L(" 4.2: CTLSSession::ClientKeyExchange failed") ); + return EInconclusive; + } + + if( EFalse == CacheSessionL( aStep, sessionObj) ) + return EInconclusive; + + + // + // entry 2 + + delete clientKeyExch; + clientKeyExch = NULL; + + aStep->GetStringFromConfig(aStep->ConfigSection(),_L("SSLServerRnd"),aStep->iServerRnd); + aStep->GetStringFromConfig(aStep->ConfigSection(),_L("SSLClientRnd"),aStep->iClientRnd); + aStep->GetStringFromConfig(aStep->ConfigSection(),_L("SSLKeyParams1"),aStep->iKeyParam1); + aStep->GetStringFromConfig(aStep->ConfigSection(),_L("SSLKeyParams2"),aStep->iKeyParam2); + aStep->GetStringFromConfig(aStep->ConfigSection(),_L("SSLKeyParams3"),aStep->iKeyParam3); + aStep->GetStringFromConfig(aStep->ConfigSection(),_L("SSLServerCert"),aStep->iServerCertChain); + aStep->GetStringFromConfig(aStep->ConfigSection(),_L("SSLHandshakeMsgsServer"),aStep->iHandshakeMsgsServer); + aStep->GetStringFromConfig(aStep->ConfigSection(),_L("SSLSrvFinishedCheckOutput"),aStep->iSrvFinishedCheckOutput); + aStep->GetStringFromConfig(aStep->ConfigSection(),_L("SSLPremaster"),aStep->iPremaster); + + RFs fs; + if ( KErrNone != fs.Connect() ) + { + iLogInfo.Copy( _L(" 4.2: problems with file system (2)") ); + return EFail; + } + + CFileMan* fMan = CFileMan::NewL( fs ); + + TDriveUnit sysDrive (RFs::GetSystemDrive()); + TBuf<128> fileName (sysDrive.Name()); + fileName.Append(_L("\\Premaster.bin")); + + fMan->Delete(fileName); + fMan->Copy( aStep->iPremaster, fileName, CFileMan::EOverWrite ); + fs.Close(); + + + RArray userCipherSuiteList2; + iStatus = KRequestPending; + tlsProvider2->CipherSuitesL( userCipherSuiteList2 ,iStatus); + SetActive(); + CActiveScheduler::Start(); + + CTlsCryptoAttributes* tlsCryptoAttributes2 = tlsProvider2->Attributes(); + + tlsCryptoAttributes2->iSessionNameAndID.iServerName.iAddress.Copy( KServer1 ); + tlsCryptoAttributes2->iSessionNameAndID.iServerName.iPort = 10; + tlsCryptoAttributes2->iSessionNameAndID.iSessionId.Copy( KSessionId2 ); + + + tlsCryptoAttributes2->iCompressionMethod = ENullCompression; + tlsCryptoAttributes2->iCurrentCipherSuite.iHiByte = 0; + tlsCryptoAttributes2->iCurrentCipherSuite.iLoByte = 3; + + + tlsCryptoAttributes2->iNegotiatedProtocol.iMajor = 3; + tlsCryptoAttributes2->iNegotiatedProtocol.iMinor = 0; + + tlsCryptoAttributes2->iProposedProtocol.iMajor = 3; + tlsCryptoAttributes2->iProposedProtocol.iMinor = 0; + + + tlsCryptoAttributes2->iPublicKeyParams->iKeyType = ERsa; + + tlsCryptoAttributes2->iClientAuthenticate = EFalse; + tlsCryptoAttributes2->iDialogNonAttendedMode = ETrue; + + + delete encServerCert; + encServerCert = NULL; + + res = aStep->ReadDataForCreateL(tlsCryptoAttributes2, encServerCert); + if( res < 0 ) + { + iLogInfo.Copy( _L(" 4.2: problems with test data files (2)") ); + return EFail; + } + + + delete serverCert; + serverCert = NULL; + iStatus = KRequestPending; + tlsProvider2->VerifyServerCertificate( encServerCert->Des(), serverCert, iStatus); + SetActive(); + CActiveScheduler::Start(); + + + iStatus = KRequestPending; + tlsProvider2->CreateL( sessionObj2, + iStatus); + SetActive(); + CActiveScheduler::Start(); + + // check that ClientKeyExch is not NULL + if ( (iStatus.Int() != KErrNone ) || (NULL == sessionObj2) ) + { + iLogInfo.Copy( _L(" 4.2: CTLSProvider::Create failed") ); + return EInconclusive; + } + + iStatus = KRequestPending; + sessionObj2->ClientKeyExchange(clientKeyExch, iStatus); + SetActive(); + CActiveScheduler::Start(); + + // check that ClientKeyExch is not NULL + if ( (NULL == clientKeyExch) || ( 0 == clientKeyExch->Length()) ) + { + iLogInfo.Copy( _L(" 4.2: CTLSSession::ClientKeyExchange failed (4)") ); + return EInconclusive; + } + + delete clientKeyExch; + clientKeyExch = NULL; + + if( EFalse == CacheSessionL( aStep, sessionObj2) ) + return EInconclusive; + + + // entry 2 inserted + // + + // + + + TTLSSessionId sessionId; + + CTLSProvider* tlsProvider3 = CTLSProvider::ConnectL(); + + RArray userCipherSuiteList3; + iStatus = KRequestPending; + tlsProvider3->CipherSuitesL( userCipherSuiteList3 ,iStatus); + SetActive(); + CActiveScheduler::Start(); + + CTlsCryptoAttributes* tlsCryptoAttributes3 = tlsProvider3->Attributes(); + + tlsCryptoAttributes3->iCurrentCipherSuite.iHiByte = 0; + tlsCryptoAttributes3->iCurrentCipherSuite.iLoByte = 3; + + + tlsCryptoAttributes3->iNegotiatedProtocol.iMajor = 3; + tlsCryptoAttributes3->iNegotiatedProtocol.iMinor = 0; + + tlsCryptoAttributes3->iProposedProtocol.iMajor = 3; + tlsCryptoAttributes3->iProposedProtocol.iMinor = 0; + TTLSSessionNameAndID sessionNameAndID; + sessionNameAndID.iServerName.iAddress.Copy( KServer1 ); + sessionNameAndID.iServerName.iPort = 10; + + + iStatus = KRequestPending; + tlsProvider3->GetSessionL( + sessionNameAndID.iServerName, + sessionId, + iStatus ); + + SetActive(); + CActiveScheduler::Start(); + + + if ( KErrNone != iStatus.Int() ) + { + iLogInfo.Copy( _L(" 4.2: CTLSProvider::GetSession - returned with error") ); + return EFail; + } + + + if ( 0 != sessionId.Compare( tlsCryptoAttributes2->iSessionNameAndID.iSessionId ) ) + { + iLogInfo.Copy( _L(" 4.2: CTLSProvider::GetSession - BAD session id") ); + return EFail; + } + + + return EPass; + + } + +TVerdict CTlsProvTestActive::doTest4_3L( CTlsProvStep* aStep ) + { + + CTlsTestRandom rnd; + + SetThreadRandomL( &rnd ); + + 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); + + RArray userCipherSuiteList; + CTLSProvider* tlsProvider = CTLSProvider::ConnectL(); + + iStatus = KRequestPending; + tlsProvider->CipherSuitesL( userCipherSuiteList ,iStatus); + SetActive(); + CActiveScheduler::Start(); + + TTLSSessionNameAndID sessionNameAndID; + sessionNameAndID.iServerName.iAddress.Copy( KServer3 ); + sessionNameAndID.iServerName.iPort = 20; + + TTLSSessionId sessionId; + + iStatus = KRequestPending; + tlsProvider->GetSessionL( + sessionNameAndID.iServerName, + sessionId, + iStatus ); + + SetActive(); + CActiveScheduler::Start(); + + if ( 0 != sessionId.Length() ) + { + iLogInfo.Copy( _L(" 4.3: CTLSProvider::GetSession - wrong error code returned") ); + return EFail; + } + + // now lets insert some entries and try again + + CTlsCryptoAttributes* tlsCryptoAttributes = tlsProvider->Attributes(); + + tlsCryptoAttributes->iSessionNameAndID.iServerName.iPort = 10; + + tlsCryptoAttributes->iDialogNonAttendedMode = ETrue; + tlsCryptoAttributes->iCompressionMethod = ENullCompression; + tlsCryptoAttributes->iCurrentCipherSuite.iHiByte = 0; + tlsCryptoAttributes->iCurrentCipherSuite.iLoByte = 5; + + + tlsCryptoAttributes->iNegotiatedProtocol.iMajor = 3; + tlsCryptoAttributes->iNegotiatedProtocol.iMinor = 1; + + tlsCryptoAttributes->iProposedProtocol.iMajor = 3; + tlsCryptoAttributes->iProposedProtocol.iMinor = 1; + + + tlsCryptoAttributes->iPublicKeyParams = NULL; + + + HBufC8* encServerCert = NULL; + + + TInt res = aStep->ReadDataForCreateL(tlsCryptoAttributes, encServerCert); + if( res < 0 ) + { + iLogInfo.Copy( _L(" 4.3: problems with test data files") ); + return EFail; + } + + CX509Certificate* serverCert = NULL; + iStatus = KRequestPending; + tlsProvider->VerifyServerCertificate( encServerCert->Des(), serverCert, iStatus); + SetActive(); + CActiveScheduler::Start(); + + tlsCryptoAttributes->iClientAuthenticate = EFalse; + tlsCryptoAttributes->iDialogNonAttendedMode = ETrue; + + + tlsCryptoAttributes->iSessionNameAndID.iServerName.iAddress.Copy( KServer1 ); + tlsCryptoAttributes->iSessionNameAndID.iSessionId.Append( KSessionId1 ); + + CTLSSession* sessionObj = NULL; + HBufC8* clientKeyExch = NULL; + + iStatus = KRequestPending; + tlsProvider->CreateL( sessionObj, + iStatus); + SetActive(); + CActiveScheduler::Start(); + + delete serverCert; + serverCert = NULL; + + // check that ClientKeyExch is not NULL + if ( (iStatus.Int() != KErrNone ) || (NULL == sessionObj) ) + { + iLogInfo.Copy( _L(" 4.3: CTLSProvider::Create failed") ); + return EInconclusive; + } + + iStatus = KRequestPending; + sessionObj->ClientKeyExchange(clientKeyExch, iStatus); + SetActive(); + CActiveScheduler::Start(); + + // check that ClientKeyExch is not NULL + if ( (NULL == clientKeyExch) || ( 0 == clientKeyExch->Length()) ) + { + iLogInfo.Copy( _L(" 4.3: CTLSSession::ClientKeyExchange failed") ); + return EInconclusive; + } + + if( EFalse == CacheSessionL( aStep, sessionObj) ) + return EInconclusive; + + // now lets try to retrieve invalid session + iStatus = KRequestPending; + tlsProvider->GetSessionL( + sessionNameAndID.iServerName, + sessionId, + iStatus ); + + SetActive(); + CActiveScheduler::Start(); + + if ( ( 0 != sessionId.Length() ) ) + { + iLogInfo.Copy( _L(" 4.3: CTLSProvider::GetSession - wrong error code returned") ); + return EFail; + } + + iLogInfo.Copy( _L(" 4.3: OK") ); + + return EPass; + + } + + +TVerdict CTlsProvTestActive::doTest4_4L( CTlsProvStep* aStep ) + { + CTlsTestRandom rnd; + + SetThreadRandomL( &rnd ); + + RArray userCipherSuiteList; + CTLSProvider* tlsProvider = CTLSProvider::ConnectL(); + CTLSProvider* tlsProvider2 = CTLSProvider::ConnectL(); + CTLSProvider* tlsProvider3 = CTLSProvider::ConnectL(); + CTLSProvider* tlsProvider4 = CTLSProvider::ConnectL(); + + iStatus = KRequestPending; + tlsProvider->CipherSuitesL( userCipherSuiteList ,iStatus); + SetActive(); + CActiveScheduler::Start(); + + + CTLSSession* sessionObj; + CTLSSession* sessionObj2; + CTLSSession* sessionObj3; + CTLSSession* sessionObj4; + + CTlsCryptoAttributes* tlsCryptoAttributes = tlsProvider->Attributes(); + + HBufC8* encServerCert = NULL; + + TInt res = StandardTestInitL(aStep, tlsCryptoAttributes, encServerCert); + if( res < 0 ) + { + iLogInfo.Copy( _L(" 4.4: problems with test data files (1)") ); + return EFail; + } + + CX509Certificate* serverCert = NULL; + iStatus = KRequestPending; + tlsProvider->VerifyServerCertificate( encServerCert->Des(), serverCert, iStatus); + SetActive(); + CActiveScheduler::Start(); + + + + HBufC8* clientKeyExch = NULL; + + iStatus = KRequestPending; + tlsProvider->CreateL( sessionObj, + iStatus); + SetActive(); + CActiveScheduler::Start(); + + // check that ClientKeyExch is not NULL + if ( (iStatus.Int() != KErrNone ) || (NULL == sessionObj) ) + { + iLogInfo.Copy( _L(" 4.4: CTLSProvider::Create failed") ); + return EInconclusive; + } + + iStatus = KRequestPending; + sessionObj->ClientKeyExchange(clientKeyExch, iStatus); + SetActive(); + CActiveScheduler::Start(); + + // check that ClientKeyExch is not NULL + if ( (NULL == clientKeyExch) || ( 0 == clientKeyExch->Length()) ) + { + iLogInfo.Copy( _L(" 4.4: CTLSSession::ClientKeyExchange failed") ); + return EInconclusive; + } + + if( EFalse == CacheSessionL( aStep, sessionObj) ) + return EInconclusive; + + // + // entry 2 - diferent sever but same session id + + delete clientKeyExch; + clientKeyExch = NULL; + + RArray userCipherSuiteList2; + iStatus = KRequestPending; + tlsProvider2->CipherSuitesL( userCipherSuiteList2 ,iStatus); + SetActive(); + CActiveScheduler::Start(); + + CTlsCryptoAttributes* tlsCryptoAttributes2 = tlsProvider2->Attributes(); + + delete encServerCert; + encServerCert = NULL; + res = StandardTestInitL(aStep, tlsCryptoAttributes2, encServerCert); + if( res < 0 ) + { + iLogInfo.Copy( _L(" 4.4: problems with test data files (2)") ); + return EFail; + } + tlsCryptoAttributes2->iSessionNameAndID.iServerName.iAddress.Copy( KServer2 ); + + delete serverCert; + serverCert = NULL; + iStatus = KRequestPending; + tlsProvider2->VerifyServerCertificate( encServerCert->Des(), serverCert, iStatus); + SetActive(); + CActiveScheduler::Start(); + + + iStatus = KRequestPending; + tlsProvider2->CreateL( sessionObj2, + iStatus); + SetActive(); + CActiveScheduler::Start(); + + // check that ClientKeyExch is not NULL + if ( (iStatus.Int() != KErrNone ) || (NULL == sessionObj2) ) + { + iLogInfo.Copy( _L(" 4.4: CTLSProvider::Create failed") ); + return EInconclusive; + } + + iStatus = KRequestPending; + sessionObj2->ClientKeyExchange(clientKeyExch, iStatus); + SetActive(); + CActiveScheduler::Start(); + + // check that ClientKeyExch is not NULL + if ( (NULL == clientKeyExch) || ( 0 == clientKeyExch->Length()) ) + { + iLogInfo.Copy( _L(" 4.4: CTLSSession::ClientKeyExchange failed") ); + return EInconclusive; + } + + if( EFalse == CacheSessionL( aStep, sessionObj2) ) + return EInconclusive; + + // entry 2 + // + + // + // entry 3 + + delete clientKeyExch; + clientKeyExch = NULL; + + RArray userCipherSuiteList3; + iStatus = KRequestPending; + tlsProvider3->CipherSuitesL( userCipherSuiteList3 ,iStatus); + SetActive(); + CActiveScheduler::Start(); + + CTlsCryptoAttributes* tlsCryptoAttributes3 = tlsProvider3->Attributes(); + + delete encServerCert; + encServerCert = NULL; + + res = StandardTestInitL(aStep, tlsCryptoAttributes3, encServerCert); + if( res < 0 ) + { + iLogInfo.Copy( _L(" 4.4: problems with test data files (3)") ); + return EFail; + } + tlsCryptoAttributes3->iSessionNameAndID.iServerName.iAddress.Copy( KServer2 ); + tlsCryptoAttributes3->iSessionNameAndID.iSessionId.Copy( KSessionId3 ); + + delete serverCert; + serverCert = NULL; + iStatus = KRequestPending; + tlsProvider3->VerifyServerCertificate( encServerCert->Des(), serverCert, iStatus); + SetActive(); + CActiveScheduler::Start(); + + + iStatus = KRequestPending; + tlsProvider3->CreateL( sessionObj3, + iStatus); + SetActive(); + CActiveScheduler::Start(); + + // check that ClientKeyExch is not NULL + if ( (iStatus.Int() != KErrNone ) || (NULL == sessionObj3) ) + { + iLogInfo.Copy( _L(" 4.4: CTLSProvider::Create failed") ); + return EInconclusive; + } + + + iStatus = KRequestPending; + sessionObj3->ClientKeyExchange(clientKeyExch, iStatus); + SetActive(); + CActiveScheduler::Start(); + + // check that ClientKeyExch is not NULL + if ( (NULL == clientKeyExch) || ( 0 == clientKeyExch->Length()) ) + { + iLogInfo.Copy( _L(" 4.4: CTLSSession::ClientKeyExchange failed") ); + return EInconclusive; + } + + if( EFalse == CacheSessionL( aStep, sessionObj3) ) + return EInconclusive; + + // entry 3 inserted + // + + // + // entry 4 + + delete clientKeyExch; + clientKeyExch = NULL; + + aStep->GetStringFromConfig(aStep->ConfigSection(),_L("SSLServerRnd"),aStep->iServerRnd); + aStep->GetStringFromConfig(aStep->ConfigSection(),_L("SSLClientRnd"),aStep->iClientRnd); + aStep->GetStringFromConfig(aStep->ConfigSection(),_L("SSLKeyParams1"),aStep->iKeyParam1); + aStep->GetStringFromConfig(aStep->ConfigSection(),_L("SSLKeyParams2"),aStep->iKeyParam2); + aStep->GetStringFromConfig(aStep->ConfigSection(),_L("SSLKeyParams3"),aStep->iKeyParam3); + aStep->GetStringFromConfig(aStep->ConfigSection(),_L("SSLServerCert"),aStep->iServerCertChain); + aStep->GetStringFromConfig(aStep->ConfigSection(),_L("SSLHandshakeMsgsServer"),aStep->iHandshakeMsgsServer); + aStep->GetStringFromConfig(aStep->ConfigSection(),_L("SSLSrvFinishedCheckOutput"),aStep->iSrvFinishedCheckOutput); + aStep->GetStringFromConfig(aStep->ConfigSection(),_L("SSLPremaster"),aStep->iPremaster); + + RFs fs; + if ( KErrNone != fs.Connect() ) + { + iLogInfo.Copy( _L(" 4.4: problems with file system (4)") ); + return EFail; + } + + CFileMan* fMan = CFileMan::NewL( fs ); + TDriveUnit sysDrive (RFs::GetSystemDrive()); + TBuf<128> fileName (sysDrive.Name()); + fileName.Append(_L("\\Premaster.bin")); + + fMan->Delete(fileName); + fMan->Copy( aStep->iPremaster, fileName, CFileMan::EOverWrite ); + fs.Close(); + + + RArray userCipherSuiteList4; + iStatus = KRequestPending; + tlsProvider4->CipherSuitesL( userCipherSuiteList4 ,iStatus); + SetActive(); + CActiveScheduler::Start(); + + CTlsCryptoAttributes* tlsCryptoAttributes4 = tlsProvider4->Attributes(); + + tlsCryptoAttributes4->iSessionNameAndID.iServerName.iAddress.Copy( KServer2 ); + tlsCryptoAttributes4->iSessionNameAndID.iServerName.iPort = 10; + tlsCryptoAttributes4->iSessionNameAndID.iSessionId.Append( KSessionId4 ); + + + tlsCryptoAttributes4->iCompressionMethod = ENullCompression; + tlsCryptoAttributes4->iCurrentCipherSuite.iHiByte = 0; + tlsCryptoAttributes4->iCurrentCipherSuite.iLoByte = 3; + + + tlsCryptoAttributes4->iNegotiatedProtocol.iMajor = 3; + tlsCryptoAttributes4->iNegotiatedProtocol.iMinor = 0; + + tlsCryptoAttributes4->iProposedProtocol.iMajor = 3; + tlsCryptoAttributes4->iProposedProtocol.iMinor = 0; + + + tlsCryptoAttributes4->iPublicKeyParams->iKeyType = ERsa; + + tlsCryptoAttributes4->iClientAuthenticate = EFalse; + tlsCryptoAttributes4->iDialogNonAttendedMode = ETrue; + + + delete encServerCert; + encServerCert = NULL; + + res = aStep->ReadDataForCreateL(tlsCryptoAttributes4, encServerCert); + if( res < 0 ) + { + iLogInfo.Copy( _L(" 4.4: problems with test data files (4)") ); + return EFail; + } + + + delete serverCert; + serverCert = NULL; + iStatus = KRequestPending; + tlsProvider4->VerifyServerCertificate( encServerCert->Des(), serverCert, iStatus); + SetActive(); + CActiveScheduler::Start(); + + + iStatus = KRequestPending; + tlsProvider4->CreateL( sessionObj4, + iStatus); + SetActive(); + CActiveScheduler::Start(); + + // check that ClientKeyExch is not NULL + if ( (iStatus.Int() != KErrNone ) || (NULL == sessionObj4) ) + { + iLogInfo.Copy( _L(" 4.4: CTLSProvider::Create failed") ); + return EInconclusive; + } + + iStatus = KRequestPending; + sessionObj4->ClientKeyExchange(clientKeyExch, iStatus); + SetActive(); + CActiveScheduler::Start(); + + // check that ClientKeyExch is not NULL + if ( (NULL == clientKeyExch) || ( 0 == clientKeyExch->Length()) ) + { + iLogInfo.Copy( _L(" 4.4: CTLSSession::ClientKeyExchange failed (4)") ); + return EInconclusive; + } + + delete clientKeyExch; + clientKeyExch = NULL; + + if( EFalse == CacheSessionL( aStep, sessionObj4) ) + return EInconclusive; + + + // entry 4 inserted + // + + + TTLSSessionId sessionId; + //case A: + + + iStatus = KRequestPending; + tlsProvider4->GetSessionL( + tlsCryptoAttributes->iSessionNameAndID.iServerName, + sessionId, + iStatus ); + + + SetActive(); + CActiveScheduler::Start(); + + if ( ( 0 != sessionId.Length() ) ) + { + iLogInfo.Copy( _L(" 4.4: A: CTLSProvider::GetSession - found session: BAD") ); + return EFail; + } + + //case B: + + CTLSProvider* tlsProvider5 = CTLSProvider::ConnectL(); + + + CTlsCryptoAttributes* tlsCryptoAttributes5 = tlsProvider5->Attributes(); + + + tlsCryptoAttributes5->iNegotiatedProtocol.iMajor = 3; + tlsCryptoAttributes5->iNegotiatedProtocol.iMinor = 1; + + tlsCryptoAttributes5->iProposedProtocol.iMajor = 2; + tlsCryptoAttributes5->iProposedProtocol.iMinor = 0; + + TTLSSessionNameAndID sessionNameAndID; + sessionNameAndID.iServerName.iAddress.Copy( KServer2 ); + sessionNameAndID.iServerName.iPort = 10; + + iStatus = KRequestPending; + tlsProvider5->GetSessionL( + sessionNameAndID.iServerName, + sessionId, + iStatus ); + + SetActive(); + CActiveScheduler::Start(); + + if ( 0 != sessionId.Length() ) + { + iLogInfo.Copy( _L(" 4.4: B: CTLSProvider::GetSession - found session: BAD") ); + return EFail; + } + + + //case C (positive): + + tlsCryptoAttributes5->iCurrentCipherSuite.iHiByte = 0; + tlsCryptoAttributes5->iCurrentCipherSuite.iLoByte = 3; + + + tlsCryptoAttributes5->iNegotiatedProtocol.iMajor = 3; + tlsCryptoAttributes5->iNegotiatedProtocol.iMinor = 0; + + tlsCryptoAttributes5->iProposedProtocol.iMajor = 3; + tlsCryptoAttributes5->iProposedProtocol.iMinor = 0; + + iStatus = KRequestPending; + tlsProvider5->GetSessionL( + sessionNameAndID.iServerName, + sessionId, + iStatus ); + + SetActive(); + CActiveScheduler::Start(); + + if ( ( 0 == sessionId.Length() ) ) + { + iLogInfo.Copy( _L(" 4.4: C: CTLSProvider::GetSession - failed") ); + return EFail; + } + + tlsCryptoAttributes5->iCurrentCipherSuite.iHiByte = 0; + tlsCryptoAttributes5->iCurrentCipherSuite.iLoByte = 3; + + + tlsCryptoAttributes5->iNegotiatedProtocol.iMajor = 3; + tlsCryptoAttributes5->iNegotiatedProtocol.iMinor = 1; + + tlsCryptoAttributes5->iProposedProtocol.iMajor = 3; + tlsCryptoAttributes5->iProposedProtocol.iMinor = 1; + + iStatus = KRequestPending; + tlsProvider5->GetSessionL( + sessionNameAndID.iServerName, + sessionId, + iStatus ); + + SetActive(); + CActiveScheduler::Start(); + + if ( ( 0 == sessionId.Length() ) ) + { + iLogInfo.Copy( _L(" 4.4: D: CTLSProvider::GetSession - failed") ); + return EFail; + } + + + iLogInfo.Copy( _L(" 4.4: OK") ); + + delete tlsProvider; + delete tlsProvider2; + delete tlsProvider3; + delete tlsProvider4; + delete tlsProvider5; + delete sessionObj; + delete sessionObj2; + delete sessionObj3; + delete sessionObj4; + + return EPass; + + } + + + +TVerdict CTlsProvTestActive::doTest4_5L( CTlsProvStep* aStep ) + { + CTlsTestRandom rnd; + + SetThreadRandomL( &rnd ); + + RArray userCipherSuiteList; + CTLSProvider* tlsProvider = CTLSProvider::ConnectL(); + + iStatus = KRequestPending; + tlsProvider->CipherSuitesL( userCipherSuiteList ,iStatus); + SetActive(); + CActiveScheduler::Start(); + + + CTLSSession* sessionObj; + + CTlsCryptoAttributes* tlsCryptoAttributes = tlsProvider->Attributes(); + HBufC8* encServerCert = NULL; + + TInt res = StandardTestInitL(aStep, tlsCryptoAttributes, encServerCert); + if( res < 0 ) + { + iLogInfo.Copy( _L(" 4.5: problems with test data files") ); + return EFail; + } + tlsCryptoAttributes->iSessionNameAndID.iSessionId.Copy( KSessionId2 ); + + CX509Certificate* serverCert = NULL; + iStatus = KRequestPending; + tlsProvider->VerifyServerCertificate( encServerCert->Des(), serverCert, iStatus); + SetActive(); + CActiveScheduler::Start(); + + HBufC8* clientKeyExch = NULL; + + iStatus = KRequestPending; + tlsProvider->CreateL( sessionObj, + iStatus); + SetActive(); + CActiveScheduler::Start(); + + // check that ClientKeyExch is not NULL + if ( (iStatus.Int() != KErrNone ) || (NULL == sessionObj) ) + { + iLogInfo.Copy( _L(" 4.5: CTLSProvider::Create failed") ); + return EInconclusive; + } + + iStatus = KRequestPending; + sessionObj->ClientKeyExchange(clientKeyExch, iStatus); + SetActive(); + CActiveScheduler::Start(); + + // check that ClientKeyExch is not NULL + if ( (NULL == clientKeyExch) || ( 0 == clientKeyExch->Length()) ) + { + iLogInfo.Copy( _L(" 4.5: CTLSSession::ClientKeyExchange failed") ); + return EInconclusive; + } + + if( EFalse == CacheSessionL( aStep, sessionObj) ) + return EInconclusive; + + + TTLSSessionNameAndID sessionNameAndId; + + sessionNameAndId.iServerName.iAddress.Copy( KServer1 ); + sessionNameAndId.iServerName.iPort = 10; + sessionNameAndId.iSessionId.Append( KSessionId2 ); + + + iStatus = KRequestPending; + tlsProvider->ClearSessionCacheL( + sessionNameAndId, + iStatus); + SetActive(); + CActiveScheduler::Start(); + + if ( (KErrNone != iStatus.Int()) ) + { + iLogInfo.Copy( _L(" 4.5: CTLSProvider::ClearSessionCache - failed") ); + return EFail; + } + + + TTLSSessionId sessionId; + + iStatus = KRequestPending; + tlsProvider->GetSessionL( + sessionNameAndId.iServerName, + sessionId, + iStatus ); + + + SetActive(); + CActiveScheduler::Start(); + + if ( ( 0 != sessionId.Length() ) ) + { + iLogInfo.Copy( _L(" 4.5: session cleared but STILL in cache") ); + return EFail; + } + + + iLogInfo.Copy( _L(" 4.5: OK") ); + + + return EPass; + + } + + +TVerdict CTlsProvTestActive::doTest4_6L( CTlsProvStep* aStep ) + { + CTlsTestRandom rnd; + + SetThreadRandomL( &rnd ); + + RArray userCipherSuiteList; + CTLSProvider* tlsProvider = CTLSProvider::ConnectL(); + CTLSProvider* tlsProvider2 = CTLSProvider::ConnectL(); + CTLSProvider* tlsProvider3 = CTLSProvider::ConnectL(); + + CTLSSession* sessionObj; + CTLSSession* sessionObj2; + CTLSSession* sessionObj3; + + + iStatus = KRequestPending; + tlsProvider->CipherSuitesL( userCipherSuiteList ,iStatus); + SetActive(); + CActiveScheduler::Start(); + + + CTlsCryptoAttributes* tlsCryptoAttributes = tlsProvider->Attributes(); + + HBufC8* encServerCert = NULL; + + TInt res = StandardTestInitL(aStep, tlsCryptoAttributes, encServerCert); + if( res < 0 ) + { + iLogInfo.Copy( _L(" 4.6: problems with test data files") ); + return EFail; + } + + CX509Certificate* serverCert = NULL; + iStatus = KRequestPending; + tlsProvider->VerifyServerCertificate( encServerCert->Des(), serverCert, iStatus); + SetActive(); + CActiveScheduler::Start(); + + + HBufC8* clientKeyExch = NULL; + + iStatus = KRequestPending; + tlsProvider->CreateL( sessionObj, + iStatus); + SetActive(); + CActiveScheduler::Start(); + + // check that ClientKeyExch is not NULL + if ( (iStatus.Int() != KErrNone ) || (NULL == sessionObj) ) + { + iLogInfo.Copy( _L(" 4.6: CTLSProvider::Create failed") ); + return EInconclusive; + } + + iStatus = KRequestPending; + sessionObj->ClientKeyExchange(clientKeyExch, iStatus); + SetActive(); + CActiveScheduler::Start(); + + // check that ClientKeyExch is not NULL + if ( (NULL == clientKeyExch) || ( 0 == clientKeyExch->Length()) ) + { + iLogInfo.Copy( _L(" 4.6: CTLSSession::ClientKeyExchange failed") ); + return EInconclusive; + } + + + if( EFalse == CacheSessionL( aStep, sessionObj) ) + return EInconclusive; + + + + // + // entry 2 + + delete clientKeyExch; + clientKeyExch = NULL; + + + CTlsCryptoAttributes* tlsCryptoAttributes2 = tlsProvider2->Attributes(); + + delete encServerCert; + encServerCert = NULL; + + res = StandardTestInitL(aStep, tlsCryptoAttributes2, encServerCert); + if( res < 0 ) + { + iLogInfo.Copy( _L(" 4.6: problems with test data files") ); + return EFail; + } + tlsCryptoAttributes2->iSessionNameAndID.iSessionId.Copy( KSessionId2 ); + + RArray userCipherSuiteList2; + iStatus = KRequestPending; + tlsProvider2->CipherSuitesL( userCipherSuiteList2 ,iStatus); + SetActive(); + CActiveScheduler::Start(); + + delete serverCert; + serverCert = NULL; + iStatus = KRequestPending; + tlsProvider2->VerifyServerCertificate( encServerCert->Des(), serverCert, iStatus); + SetActive(); + CActiveScheduler::Start(); + + iStatus = KRequestPending; + tlsProvider2->CreateL( sessionObj2, + iStatus); + SetActive(); + CActiveScheduler::Start(); + + // check that ClientKeyExch is not NULL + if ( (iStatus.Int() != KErrNone ) || (NULL == sessionObj2) ) + { + iLogInfo.Copy( _L(" 4.6: CTLSProvider::Create failed") ); + return EInconclusive; + } + + iStatus = KRequestPending; + sessionObj2->ClientKeyExchange(clientKeyExch, iStatus); + SetActive(); + CActiveScheduler::Start(); + + // check that ClientKeyExch is not NULL + if ( (NULL == clientKeyExch) || ( 0 == clientKeyExch->Length()) ) + { + iLogInfo.Copy( _L(" 4.6: CTLSSession::ClientKeyExchange failed") ); + return EInconclusive; + } + + delete clientKeyExch; + clientKeyExch = NULL; + + + if( EFalse == CacheSessionL( aStep, sessionObj2) ) + return EInconclusive; + + // entry 2 + // + + + // + // entry 3 + + delete clientKeyExch; + clientKeyExch = NULL; + + RArray userCipherSuiteList3; + + iStatus = KRequestPending; + tlsProvider3->CipherSuitesL( userCipherSuiteList3 ,iStatus); + SetActive(); + CActiveScheduler::Start(); + + + + aStep->GetStringFromConfig(aStep->ConfigSection(),_L("ServerRnd2"),aStep->iServerRnd); + aStep->GetStringFromConfig(aStep->ConfigSection(),_L("ClientRnd2"),aStep->iClientRnd); + aStep->GetStringFromConfig(aStep->ConfigSection(),_L("KeyParams1_2"),aStep->iKeyParam1); + aStep->GetStringFromConfig(aStep->ConfigSection(),_L("KeyParams2_2"),aStep->iKeyParam2); + aStep->GetStringFromConfig(aStep->ConfigSection(),_L("KeyParams3_2"),aStep->iKeyParam3); + aStep->GetStringFromConfig(aStep->ConfigSection(),_L("ServerCert2"),aStep->iServerCertChain); + aStep->GetStringFromConfig(aStep->ConfigSection(),_L("ClientKeyExch2"),aStep->iClientKeyExch); + + CTlsCryptoAttributes* tlsCryptoAttributes3 = tlsProvider3->Attributes(); + + tlsCryptoAttributes3->iClientAuthenticate = EFalse; + tlsCryptoAttributes3->iDialogNonAttendedMode = ETrue; + + tlsCryptoAttributes3->iSessionNameAndID.iServerName.iAddress.Copy( KServer1 ); + tlsCryptoAttributes3->iSessionNameAndID.iServerName.iPort = 10; + tlsCryptoAttributes3->iSessionNameAndID.iSessionId.Append( KSessionId3 ); + + + tlsCryptoAttributes3->iCompressionMethod = ENullCompression; + tlsCryptoAttributes3->iCurrentCipherSuite.iHiByte = 0; + tlsCryptoAttributes3->iCurrentCipherSuite.iLoByte = 0x16; + + + tlsCryptoAttributes3->iNegotiatedProtocol.iMajor = 3; + tlsCryptoAttributes3->iNegotiatedProtocol.iMinor = 1; + + tlsCryptoAttributes3->iProposedProtocol.iMajor = 3; + tlsCryptoAttributes3->iProposedProtocol.iMinor = 1; + + + tlsCryptoAttributes3->iPublicKeyParams->iKeyType = EDHE; + + + tlsCryptoAttributes3->iClientAuthenticate = EFalse; + tlsCryptoAttributes3->iDialogNonAttendedMode = ETrue; + + delete encServerCert; + encServerCert = NULL; + + res = aStep->ReadDataForCreateL(tlsCryptoAttributes3, encServerCert); + + if( res < 0 ) + { + iLogInfo.Copy( _L(" 4.6: problems with test data files") ); + return EFail; + } + + delete serverCert; + serverCert = NULL; + iStatus = KRequestPending; + tlsProvider3->VerifyServerCertificate( encServerCert->Des(), serverCert, iStatus); + SetActive(); + CActiveScheduler::Start(); + + iStatus = KRequestPending; + tlsProvider3->CreateL( sessionObj3, + iStatus); + SetActive(); + CActiveScheduler::Start(); + + HBufC8* clientKeyExchFromFile = NULL; + res = aStep->ReadClientKeyExchL( clientKeyExchFromFile ); + if( res < 0 ) + { + iLogInfo.Copy( _L(" 4.6: problems with test data files (client key exchange)") ); + return EFail; + } + + // check that ClientKeyExch is not NULL + if ( (iStatus.Int() != KErrNone ) || (NULL == sessionObj3) ) + { + iLogInfo.Copy( _L(" 4.6: CTLSProvider::Create failed") ); + return EInconclusive; + } + + + iStatus = KRequestPending; + sessionObj3->ClientKeyExchange(clientKeyExch, iStatus); + SetActive(); + CActiveScheduler::Start(); + + + // check that ClientKeyExch is not NULL + if ( 0 != clientKeyExchFromFile->Compare( clientKeyExch->Des() ) ) + { + iLogInfo.Copy( _L(" 4.6: Client key exchange BAD (3, DHE)") ); + return EInconclusive; + } + + // session should have been cached up to now but not set to resumable yet - + // and it's left unresumable to check whether will be cleared after cache + // entries lifetime timeout + + // entry 3 + // + + // before timeout: + + TTLSSessionId sessionId; + + iStatus = KRequestPending; + tlsProvider2->GetSessionL( + tlsCryptoAttributes->iSessionNameAndID.iServerName, + sessionId, + iStatus ); + + + SetActive(); + CActiveScheduler::Start(); + + if ( ( 0 == sessionId.Length() ) ) + { + iLogInfo.Copy( _L(" 4.6: Before timeout: CTLSProvider::GetSession - returned nothing") ); + return EFail; + } + + + // wait for timeout: + RTimer timer; + timer.CreateLocal(); + TTimeIntervalMicroSeconds32 waitTime( 1000000*(KTLSCachingTimeout + 5)); + timer.After( iStatus, waitTime); + SetActive(); + CActiveScheduler::Start(); + + // after timeout + sessionId.Zero(); + + iStatus = KRequestPending; + tlsProvider2->GetSessionL( + tlsCryptoAttributes->iSessionNameAndID.iServerName, + sessionId, + iStatus ); + + + SetActive(); + CActiveScheduler::Start(); + + if ( ( 0 != sessionId.Length() ) ) + { + iLogInfo.Copy( _L(" 4.6: After timeout: CTLSProvider::GetSession - cache NOT empty") ); + return EFail; + } + + + iLogInfo.Copy( _L(" 4.6: OK") ); + + delete tlsProvider; + delete tlsProvider2; + delete tlsProvider3; + + delete sessionObj; + delete sessionObj2; + delete sessionObj3; + + return EPass; + + } + +