diff -r 000000000000 -r af10295192d8 networksecurity/tlsprovider/Test/src/TlsProvTestSteps7.cpp --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/networksecurity/tlsprovider/Test/src/TlsProvTestSteps7.cpp Tue Jan 26 15:23:49 2010 +0200 @@ -0,0 +1,530 @@ + + +// 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 + + + +TVerdict CTlsProvTestActive::doTest7_0L( 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(" 7.0: problems with test data files") ); + return EFail; + } + tlsCryptoAttributes->iSessionNameAndID.iServerName.iAddress.Copy( KServer2 ); + + + + 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(" 7.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(" 7.0: CTLSSession::ClientKeyExchange failed") ); + return EInconclusive; + } + + HBufC8* verifySrvFinInput = NULL; + HBufC8* finshedMsg = NULL; + + res = aStep->ReadDataForSrvFinishedL(verifySrvFinInput, finshedMsg); + if( res < 0 ) + { + iLogInfo.Copy( _L(" problems with test data files (for server finished check)") ); + return EInconclusive; + } + + 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; + sessionObj->VerifyServerFinishedMsgL( + md5Dig, + shaDig, + finshedMsg->Des(), + iStatus) ; + + SetActive(); + CActiveScheduler::Start(); + + CleanupStack::PopAndDestroy( 2, md5Dig ); + + if ( iStatus.Int() != KErrNone ) + { + iLogInfo.Copy( _L(" 7.0 CTLSSession::VerifyServerFinishedMsgL failed") ); + return EFail; + } + + + iLogInfo.Copy( _L(" 7.0: OK") ); + + + return EPass; + } + + +TVerdict CTlsProvTestActive::doTest7_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(" 7.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(" 7.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(" 7.1: CTLSSession::ClientKeyExchange failed") ); + return EInconclusive; + } + + HBufC8* verifySrvFinInput = NULL; + HBufC8* finshedMsg = NULL; + + res = aStep->ReadDataForSrvFinishedL(verifySrvFinInput, finshedMsg); + if( res < 0 ) + { + iLogInfo.Copy( _L(" problems with test data files (for server finished check)") ); + return EInconclusive; + } + + 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; + sessionObj->VerifyServerFinishedMsgL( + md5Dig, + shaDig, + finshedMsg->Des(), + iStatus) ; + + SetActive(); + CActiveScheduler::Start(); + + CleanupStack::PopAndDestroy( 2, md5Dig ); + + if ( iStatus.Int() != KErrNone ) + { + iLogInfo.Copy( _L(" 7.1 CTLSSession::VerifyServerFinishedMsgL failed") ); + return EFail; + } + + + iLogInfo.Copy( _L(" 7.1: OK") ); + + + return EPass; + + } + + + +TVerdict CTlsProvTestActive::doTest7_2L( 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(" 7.2: problems with test data files") ); + return EFail; + } + + aStep->GetStringFromConfig(aStep->ConfigSection(),_L("HandshakeMsgsClient"),aStep->iHandshakeMsgsClient); + aStep->GetStringFromConfig(aStep->ConfigSection(),_L("ClntFinishedCheckOutput"),aStep->iClntFinishedCheckOutput); + + tlsCryptoAttributes->iSessionNameAndID.iServerName.iAddress.Copy( KServer2 ); + + + + 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(" 7.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(" 7.2: CTLSSession::ClientKeyExchange failed") ); + return EInconclusive; + } + + HBufC8* clntFinInput = NULL; + HBufC8* finshedMsg = NULL; + + res = aStep->ReadDataForClntFinishedL(clntFinInput, finshedMsg); + if( res < 0 ) + { + iLogInfo.Copy( _L(" problems with test data files (for client finished check)") ); + return EInconclusive; + } + + CMessageDigest* md5Dig = NULL; + CMessageDigest* shaDig = NULL; + + md5Dig = CMD5::NewL(); + CleanupStack::PushL( md5Dig ); + shaDig = CSHA1::NewL(); + CleanupStack::PushL( shaDig ); + + md5Dig->Reset(); + md5Dig->Update( clntFinInput->Des() ); + + shaDig->Reset(); + shaDig->Update( clntFinInput->Des() ); + + HBufC8* output = NULL; + iStatus = KRequestPending; + sessionObj->ClientFinishedMsgL( + md5Dig, + shaDig, + output, + iStatus) ; + + SetActive(); + CActiveScheduler::Start(); + + CleanupStack::PopAndDestroy( 2, md5Dig ); + + if ( iStatus.Int() != KErrNone || (0 != output->Compare(finshedMsg->Des()) ) ) + { + iLogInfo.Copy( _L(" 7.2 CTLSSession::ClientFinishedMsgL failed") ); + return EFail; + } + + + iLogInfo.Copy( _L(" 7.2: OK") ); + + return EPass; + + } + + + +TVerdict CTlsProvTestActive::doTest7_3L( 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(" 7.3: problems with test data files") ); + return EFail; + } + + aStep->GetStringFromConfig(aStep->ConfigSection(),_L("HandshakeMsgsClient"),aStep->iHandshakeMsgsClient); + aStep->GetStringFromConfig(aStep->ConfigSection(),_L("ClntFinishedCheckOutput"),aStep->iClntFinishedCheckOutput); + + 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(" 7.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(" 7.3: CTLSSession::ClientKeyExchange failed") ); + return EInconclusive; + } + + HBufC8* clntFinInput = NULL; + HBufC8* finshedMsg = NULL; + + res = aStep->ReadDataForClntFinishedL(clntFinInput, finshedMsg); + if( res < 0 ) + { + iLogInfo.Copy( _L(" problems with test data files (for client finished check)") ); + return EInconclusive; + } + + CMessageDigest* md5Dig = NULL; + CMessageDigest* shaDig = NULL; + + md5Dig = CMD5::NewL(); + CleanupStack::PushL( md5Dig ); + shaDig = CSHA1::NewL(); + CleanupStack::PushL( shaDig ); + + md5Dig->Reset(); + md5Dig->Update( clntFinInput->Des() ); + + shaDig->Reset(); + shaDig->Update( clntFinInput->Des() ); + + HBufC8* output = NULL; + iStatus = KRequestPending; + sessionObj->ClientFinishedMsgL( + md5Dig, + shaDig, + output, + iStatus) ; + + SetActive(); + CActiveScheduler::Start(); + + CleanupStack::PopAndDestroy( 2, md5Dig ); + + if ( iStatus.Int() != KErrNone || (0 != output->Compare(finshedMsg->Des()) ) ) + { + iLogInfo.Copy( _L(" 7.3 CTLSSession::ClientFinishedMsgL failed") ); + return EFail; + } + + + iLogInfo.Copy( _L(" 7.3: OK") ); + + return EPass; + + } + +