--- /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 <test/testexecutelog.h>
+#include <hash.h>
+
+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<TTLSCipherSuite> 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);
+ }