diff -r 000000000000 -r af10295192d8 networksecurity/tlsprovider/Test/src/TlsProviderStep6.cpp --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/networksecurity/tlsprovider/Test/src/TlsProviderStep6.cpp Tue Jan 26 15:23:49 2010 +0200 @@ -0,0 +1,614 @@ +// 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 + +extern TInt ReadTestDataL( CTlsCryptoAttributes*& aTlsCryptoAttributes, HBufC8*& aSrvCert, + CTlsProvStep*& aTestStepPtr); + +extern TInt ReadDataFromFiles( CTlsCryptoAttributes* aTlsCryptoAttributes, + HBufC8*& aSrvCert); + + + +/* +Mode:RC4 with weak encryption +Protocol: TLS +Tests covered: + 1.Generation of weak keys are also being tested + 2.MAC computations + 3.Encryption + 4.Decryption +*/ +TVerdict CTlsProvTestActive::TestProvider_6_0L( CTlsProvStep* aStep ) + { + + + CTLSProvider* PtrProvider = 0; + CTLSSession* PtrSession; + CTlsCryptoAttributes* PtrTlsCryptoAttributes; + + INFO_PRINTF1(_L("1")); + InitProviderL(PtrProvider,PtrSession,PtrTlsCryptoAttributes,/*IsTls?*/ETrue,/*IsExport?*/ETrue,aStep); + + //Want client authentication? + PtrTlsCryptoAttributes->iClientAuthenticate = EFalse; + + //Any dialogs + PtrTlsCryptoAttributes->iDialogNonAttendedMode = ETrue; + + //Required ciphersuite + TTLSCipherSuite CipherSuite; + CipherSuite.iHiByte = 0; + CipherSuite.iLoByte = 0x19; + PtrTlsCryptoAttributes->iCurrentCipherSuite = CipherSuite; + PtrTlsCryptoAttributes->iNegotiatedProtocol = KTLS1_0; + + + //dummy flag untuill the token panic is resolved + RFs fs; + RFile file; + fs.Connect(); + + TBuf8<800> boom; + file.Open(fs, + aStep->iServerCertChain, + EFileShareAny|EFileRead); + file.Read(boom); + + iStatus = KRequestPending; + CX509Certificate* serverCert; + HBufC8* servrc = boom.AllocL(); + PtrProvider->VerifyServerCertificate(servrc->Des(), serverCert, iStatus); + SetActive(); + CActiveScheduler::Start(); + INFO_PRINTF1(_L("2")); + + CipherSuite.iHiByte = 0; + CipherSuite.iLoByte = 0x19; + PtrTlsCryptoAttributes->iCurrentCipherSuite = CipherSuite; + + iStatus = KRequestPending; + PtrProvider->CreateL(PtrSession,iStatus); + SetActive(); + CActiveScheduler::Start(); + INFO_PRINTF1(_L("3")); + + + CipherSuite.iHiByte = 0; + CipherSuite.iLoByte = 3; + PtrTlsCryptoAttributes->iCurrentCipherSuite = CipherSuite; + + iStatus = KRequestPending; + HBufC8* clntkeyexchang; + if(!PtrSession) + { + iLogInfo.Copy(_L(" 6.1: !PtrSession")); + return EFail; + } + + + PtrSession->ClientKeyExchange(clntkeyexchang,iStatus); + SetActive(); + CActiveScheduler::Start(); + INFO_PRINTF1(_L("4")); + + if(PtrSession) + { + iLogInfo.Copy(_L(" 6.1: EncryptAndDecryptL")); + TVerdict ver = (EncryptAndDecryptL(PtrSession,aStep)); + delete PtrProvider; + delete PtrSession; + return ver; + } + else + { + delete PtrProvider; + delete PtrSession; + return EFail; + } + + } + +/* +Mode:RC4 with weak encryption +Protocol: SSL +Tests covered: + 1.Generation of weak keys are also being tested + 2.MAC computations + 3.Encryption + 4.Decryption +*/ + +TVerdict CTlsProvTestActive::TestProvider_6_1L( CTlsProvStep* aStep ) + { + CTLSProvider* PtrProvider = 0; + CTLSSession* PtrSession; + CTlsCryptoAttributes* PtrTlsCryptoAttributes; + + InitProviderL(PtrProvider,PtrSession,PtrTlsCryptoAttributes,/*IsTls?*/EFalse,/*IsExport?*/ETrue,aStep); + + //Want client authentication? + PtrTlsCryptoAttributes->iClientAuthenticate = EFalse; + + //Any dialogs + PtrTlsCryptoAttributes->iDialogNonAttendedMode = ETrue; + + //Required ciphersuite + TTLSCipherSuite CipherSuite; + CipherSuite.iHiByte = 0; + CipherSuite.iLoByte = 3; + PtrTlsCryptoAttributes->iCurrentCipherSuite = CipherSuite; + PtrTlsCryptoAttributes->iNegotiatedProtocol = KSSL3_0; + + + //Init start + RFs fs; + RFile file; + fs.Connect(); + TBuf8<1000> boom; + file.Open(fs, + aStep->iServerCertChain, + EFileShareAny|EFileRead); + file.Read(boom); + + iStatus = KRequestPending; + CX509Certificate* serverCert; + HBufC8* servrc = boom.AllocL(); + PtrProvider->VerifyServerCertificate(servrc->Des(), serverCert, iStatus); + SetActive(); + CActiveScheduler::Start(); + + CipherSuite.iHiByte = 0; + CipherSuite.iLoByte = 0x19; + PtrTlsCryptoAttributes->iCurrentCipherSuite = CipherSuite; + //Init end + + + + + iStatus = KRequestPending; + PtrProvider->CreateL(PtrSession,iStatus); + SetActive(); + CActiveScheduler::Start(); + + + + //Init start + CipherSuite.iHiByte = 0; + CipherSuite.iLoByte = 3; + PtrTlsCryptoAttributes->iCurrentCipherSuite = CipherSuite; + iStatus = KRequestPending; + HBufC8* clntkeyexchang; + if(!PtrSession) + { + iLogInfo.Copy(_L(" 6.1: !PtrSession")); + return EFail; + } + PtrSession->ClientKeyExchange(clntkeyexchang,iStatus); + SetActive(); + CActiveScheduler::Start(); + //Init end + + TInt errr = iStatus.Int(); + + if(PtrSession && !errr) + { + iLogInfo.Copy(_L(" 6.1: EncryptAndDecryptL")); + TVerdict ver = (EncryptAndDecryptL(PtrSession,aStep)); + delete PtrProvider; + delete PtrSession; + return ver; + } + else + { + iLogInfo.Format(_L(" 6.1: Fail %d"), errr); + delete PtrProvider; + delete PtrSession; + return EFail; + } + } + + +/* +Mode:DES with strong encryption +Protocol: TLS +Tests covered: + 1.MAC computations + 2.Encryption + 3.Decryption +*/ +TVerdict CTlsProvTestActive::TestProvider_6_2L( CTlsProvStep* aStep ) + { + CTLSProvider* PtrProvider = 0; + CTLSSession* PtrSession; + CTlsCryptoAttributes* PtrTlsCryptoAttributes; + + INFO_PRINTF1(_L("1")); + iLogInfo.Copy(_L(" 6.2: InitProviderL")); + InitProviderL(PtrProvider,PtrSession,PtrTlsCryptoAttributes,/*IsTls?*/ETrue,/*IsExport?*/EFalse,aStep); + + //Want client authentication? + PtrTlsCryptoAttributes->iClientAuthenticate = EFalse; + + //Any dialogs + PtrTlsCryptoAttributes->iDialogNonAttendedMode = ETrue; + + //Required ciphersuite + TTLSCipherSuite CipherSuite; + CipherSuite.iHiByte = 0; + CipherSuite.iLoByte = 9; + PtrTlsCryptoAttributes->iCurrentCipherSuite = CipherSuite; + PtrTlsCryptoAttributes->iNegotiatedProtocol = KTLS1_0; + + + //Init start + RFs fs; + RFile file; + fs.Connect(); + TBuf8<1000> boom; + file.Open(fs, + aStep->iServerCertChain, + EFileShareAny|EFileRead); + file.Read(boom); + + iStatus = KRequestPending; + CX509Certificate* serverCert; + HBufC8* servrc = boom.AllocL(); + PtrProvider->VerifyServerCertificate(servrc->Des(), serverCert, iStatus); + SetActive(); + CActiveScheduler::Start(); + iLogInfo.Copy(_L(" 6.2: IPtrProvider->VerifyServerCertificate")); + INFO_PRINTF1(_L("2")); + + CipherSuite.iHiByte = 0; + CipherSuite.iLoByte = 0x19; + PtrTlsCryptoAttributes->iCurrentCipherSuite = CipherSuite; + //Init end + + + + iStatus = KRequestPending; + PtrProvider->CreateL(PtrSession,iStatus); + SetActive(); + CActiveScheduler::Start(); + INFO_PRINTF1(_L("3")); + + iLogInfo.Copy(_L(" 6.2: IPtrProvider->CreateL")); + + //Init start + CipherSuite.iHiByte = 0; + CipherSuite.iLoByte = 9; + PtrTlsCryptoAttributes->iCurrentCipherSuite = CipherSuite; + iStatus = KRequestPending; + HBufC8* clntkeyexchang; + if(!PtrSession) + { + iLogInfo.Copy(_L(" 6.2: !PtrSession")); + delete PtrProvider; + return EFail; + } + PtrSession->ClientKeyExchange(clntkeyexchang,iStatus); + SetActive(); + CActiveScheduler::Start(); + //Init end + INFO_PRINTF1(_L("4")); + + + if(PtrSession) + { + INFO_PRINTF1(_L("5")); + iLogInfo.Copy(_L(" 6.2: EncryptAndDecryptL")); + TVerdict ver = (EncryptAndDecryptL(PtrSession,aStep)); + delete PtrProvider; + delete PtrSession; + return ver; + } + else + { + delete PtrProvider; + return EFail; + } + + } + + +/* +Mode:DES with strong encryption +Protocol: SSL +Tests covered: + 1.MAC computations + 2.Encryption + 3.Decryption +*/ +TVerdict CTlsProvTestActive::TestProvider_6_3L( CTlsProvStep* aStep ) + { + CTLSProvider* PtrProvider = 0; + CTLSSession* PtrSession; + CTlsCryptoAttributes* PtrTlsCryptoAttributes; + + INFO_PRINTF1(_L("1")); + iLogInfo.Copy(_L(" 6.3: InitProviderL")); + InitProviderL(PtrProvider,PtrSession,PtrTlsCryptoAttributes,/*IsTls?*/EFalse,/*IsExport?*/EFalse,aStep); + + //Want client authentication? + PtrTlsCryptoAttributes->iClientAuthenticate = EFalse; + + //Any dialogs + PtrTlsCryptoAttributes->iDialogNonAttendedMode = ETrue; + + //Required ciphersuite + TTLSCipherSuite CipherSuite; + CipherSuite.iHiByte = 0; + CipherSuite.iLoByte = 9; + PtrTlsCryptoAttributes->iCurrentCipherSuite = CipherSuite; + PtrTlsCryptoAttributes->iNegotiatedProtocol = KSSL3_0; + + + //Init start + RFs fs; + RFile file; + fs.Connect(); + TBuf8<1000> boom; + file.Open(fs, + aStep->iServerCertChain, + EFileShareAny|EFileRead); + file.Read(boom); + + iStatus = KRequestPending; + CX509Certificate* serverCert; + HBufC8* servrc = boom.AllocL(); + PtrProvider->VerifyServerCertificate(servrc->Des(), serverCert, iStatus); + SetActive(); + CActiveScheduler::Start(); + iLogInfo.Copy(_L(" 6.3: IPtrProvider->VerifyServerCertificate")); + INFO_PRINTF1(_L("2")); + + CipherSuite.iHiByte = 0; + CipherSuite.iLoByte = 0x19; + PtrTlsCryptoAttributes->iCurrentCipherSuite = CipherSuite; + //Init end + + iStatus = KRequestPending; + PtrProvider->CreateL(PtrSession,iStatus); + SetActive(); + CActiveScheduler::Start(); + + iLogInfo.Copy(_L(" 6.3: IPtrProvider->CreateL")); + + //Init start + CipherSuite.iHiByte = 0; + CipherSuite.iLoByte = 9; + PtrTlsCryptoAttributes->iCurrentCipherSuite = CipherSuite; + iStatus = KRequestPending; + HBufC8* clntkeyexchang; + INFO_PRINTF1(_L("3")); + if(!PtrSession) + { + delete PtrProvider; + iLogInfo.Copy(_L(" 6.3: !PtrSession")); + return EFail; + } + PtrSession->ClientKeyExchange(clntkeyexchang,iStatus); + SetActive(); + CActiveScheduler::Start(); + //Init end + + + if(PtrSession) + { + INFO_PRINTF1(_L("4")); + iLogInfo.Copy(_L(" 6.3: EncryptAndDecryptL")); + TVerdict ver = (EncryptAndDecryptL(PtrSession,aStep)); + delete PtrProvider; + delete PtrSession; + return ver; + } + else + { + delete PtrProvider; + return EFail; + } + + } + + + +/* +HELPER: +The actual step thta does the encryption and decryption + +*/ +TVerdict CTlsProvTestActive::EncryptAndDecryptL(CTLSSession* aPtrTlsSession, CTlsProvStep* /*aStep*/) + { + + RFs filesys; + filesys.Connect(); + RFile fileTmp_t; + + TBuf8<1024> TempPrint; + TDriveUnit sysDrive (filesys.GetSystemDrive()); + TDriveName sysDriveName (sysDrive.Name()); + + TBuf<128> fileName (sysDriveName); + fileName.Append(_L("\\data\\ActualAppData.bin")); + + TInt result_t = fileTmp_t.Open(filesys, fileName, EFileRead); + + INFO_PRINTF1(_L("EncryptAndDecryptL 1")); + if(!result_t) + fileTmp_t.Read( TempPrint ); + fileTmp_t.Close(); + + + iStatus = KRequestPending; + HBufC8* Output = NULL; + TRecordProtocol RecType; + RecType= EHandshake; + TInt64 ASeqNumber = 0; + Output = HBufC8::NewL(TempPrint.Length() + 24); + aPtrTlsSession->EncryptL( + TempPrint, + Output, + ASeqNumber,RecType) ; + + INFO_PRINTF1(_L("EncryptAndDecryptL 2")); + + fileName.Copy(sysDriveName); + fileName.Append(_L("\\data\\EncryptOutput.bin")); + + result_t = fileTmp_t.Open(filesys, fileName, EFileRead); + + TBuf8<1024> ActualOutput; + if(!result_t) + fileTmp_t.Read(ActualOutput); + fileTmp_t.Close(); + if(ActualOutput.Compare(Output->Des()) != 0) + return EFail; + + //Test Decryption here + + INFO_PRINTF1(_L("EncryptAndDecryptL 3")); + + fileName.Copy(sysDriveName); + fileName.Append(_L("\\data\\DecryptionInput.bin")); + + result_t = fileTmp_t.Open(filesys, fileName, EFileRead); + + if(!result_t) + fileTmp_t.Read( ActualOutput ); + fileTmp_t.Close(); + + + iStatus = KRequestPending; + HBufC8* OutputDe = NULL; + + RecType= EHandshake; + TInt64 ASeqNumberDe = 0; + OutputDe = HBufC8::NewL(ActualOutput.Length()); + aPtrTlsSession->DecryptAndVerifyL( + ActualOutput, + OutputDe, + ASeqNumberDe,RecType) ; + + fileName.Copy (sysDriveName); + fileName.Append(_L("\\data\\DecryptionOutputNoMac.bin")); + + result_t = fileTmp_t.Open(filesys, fileName, EFileRead); + + if(!result_t) + fileTmp_t.Read(ActualOutput); + fileTmp_t.Close(); + + INFO_PRINTF1(_L("EncryptAndDecryptL 4")); + if(ActualOutput.Compare(OutputDe->Des()) != 0) + { + iLogInfo.Copy(_L(" EncryptDecr Fail")); + return EFail; + } + else + { + iLogInfo.Copy(_L(" EncryptDecr Success")); + return EPass; + } + } + +/* +HELPER: +Initializes the TLSProvider +*/ +TVerdict CTlsProvTestActive::InitProviderL(CTLSProvider*& aPtrProvider,CTLSSession*& /*aPtrSession*/, + CTlsCryptoAttributes*& aTlsCryptoAttributes, + TBool aIsTls, TBool aIsExport,CTlsProvStep* aStep) + { + RArray UserCipherSuiteList; + if(!aPtrProvider) + aPtrProvider = CTLSProvider::ConnectL(); + + //Obtain the list of ciphersuites + iStatus = KRequestPending; + aPtrProvider->CipherSuitesL(UserCipherSuiteList,iStatus); + SetActive(); + CActiveScheduler::Start(); + + TInt SelectedCiphers = UserCipherSuiteList.Count(); + if(SelectedCiphers != KSupportedCipherCount) + { + return EFail; + } + + + aTlsCryptoAttributes = aPtrProvider->Attributes(); + if(aIsTls) + ConfigureTLS(aIsExport,aStep); + else + ConfigureSSL(aIsExport,aStep); + + HBufC8* SrvCertificate; + ReadTestDataL(aTlsCryptoAttributes, SrvCertificate,aStep); + delete SrvCertificate; + aTlsCryptoAttributes->iPublicKeyParams->iKeyType = ERsa; + UserCipherSuiteList.Reset(); + return EPass; + + } + + +/* +HELPER: +Configures the initialization data for TLS +*/ +void CTlsProvTestActive::ConfigureTLS(TBool aIsExport, CTlsProvStep* aStep) + { + if(aIsExport) + { + aStep->GetStringFromConfig(aStep->ConfigSection(),_L("TLSServerRndExport"),aStep->iServerRnd); + aStep->GetStringFromConfig(aStep->ConfigSection(),_L("TLSClientRndExport"),aStep->iClientRnd); + } + else + { + aStep->GetStringFromConfig(aStep->ConfigSection(),_L("TlsServerRnd"),aStep->iServerRnd); + aStep->GetStringFromConfig(aStep->ConfigSection(),_L("TlsClientRnd"),aStep->iClientRnd); + } + aStep->GetStringFromConfig(aStep->ConfigSection(),_L("TlsKeyParams1"),aStep->iKeyParam1); + aStep->GetStringFromConfig(aStep->ConfigSection(),_L("TlsKeyParams2"),aStep->iKeyParam2); + aStep->GetStringFromConfig(aStep->ConfigSection(),_L("TlsKeyParams3"),aStep->iKeyParam3); + aStep->GetStringFromConfig(aStep->ConfigSection(),_L("TlsServerCert"),aStep->iServerCertChain); + } + + +/* +HELPER: +Configures the initialization data for SSL +*/ +void CTlsProvTestActive::ConfigureSSL(TBool aIsExport, CTlsProvStep* aStep) + { + if(aIsExport) + { + aStep->GetStringFromConfig(aStep->ConfigSection(),_L("SSLServerRndExport"),aStep->iServerRnd); + aStep->GetStringFromConfig(aStep->ConfigSection(),_L("SSLClientRndExport"),aStep->iClientRnd); + } + else + { + 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); + }