diff -r 000000000000 -r af10295192d8 networksecurity/tlsprovider/Test/tlstest2/tlsstepbase.h --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/networksecurity/tlsprovider/Test/tlstest2/tlsstepbase.h Tue Jan 26 15:23:49 2010 +0200 @@ -0,0 +1,316 @@ +// Copyright (c) 2006-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 tlsstepbase.h + @internalTechnology +*/ + +#ifndef __TLSSTEPBASE_H__ +#define __TLSSTEPBASE_H__ + +#include +#include +#include +#include +#include +#include + +#ifdef SYMBIAN_ENABLE_SPLIT_HEADERS +#include +#endif + + +#define KNServer1 _L8("192.168.30.2") +#define KSessionId1 _L8("11111111112222222222333333333322") + +_LIT(KServerRandomFile, "ServerRandomFile"); +_LIT(KClientRandomFile, "ClientRandomFile"); +_LIT(KDhParamFile, "DHParamFile"); + +_LIT(KCipherHighByte, "CipherHighByte"); +_LIT(KCipherLowByte, "CipherLowByte"); + +_LIT(KProtocolMajorVersion, "ProtocolMajorVersion"); +_LIT(KProtocolMinorVersion, "ProtocolMinorVersion"); + +_LIT(KServerCert, "ServerCert"); +_LIT(KDomainName, "DomainName"); +_LIT(KServerKey, "ServerKey"); + +_LIT(KExpectedResult, "ExpectedResult"); +_LIT(KExpectedCertCount, "ExpectedCertCount"); + +_LIT8(KLocalHost, "127.0.0.1"); +_LIT(KServerSection,"serversection"); + +_LIT(KUseNullCipher,"UseNullCipher"); +_LIT(KUsePsk,"UsePsk"); +_LIT(KPskKey,"PskKey"); +_LIT(KPskIdentity,"PskIdentity"); +_LIT(KSessionDelay,"SessionDelay"); + +_LIT(KServerDNAvailable, "ServerDNAvailable"); +_LIT(KInputFile, "\\t_secdlg_in.dat"); +_LIT(KOutputFile, "\\t_secdlg_out.dat"); +_LIT(KYes,"Yes"); +_LIT(KDialogOption,"DialogOption"); + +class CGenericActive; +class CDecPKCS8Data; +class CTLSProvider; +class CTLSSession; +class RTlsCacheClient; + +class CTlsStepBase : public CTestStep + { +public: + + void ConstructL(); + inline CTLSProvider* Provider(); + inline CTLSSession* Session(); + inline const RArray& CipherSuites(); + + inline const RInteger& Prime(); + inline const RInteger& Generator(); + inline const CDHKeyPair* KeyPair(); + + inline HBufC8* ClientMacSecret(); + inline HBufC8* ServerMacSecret(); + inline HBufC8* ClientWriteSecret(); + inline HBufC8* ServerWriteSecret(); + inline HBufC8* ClientInitVector(); + inline HBufC8* ServerInitVector(); + + inline TBool UseNullCipher(); + // make PSK accesible. + inline HBufC8* PskKey(); + inline HBufC8* PskIdentity(); + inline TBool UsePsk(); + + // Test methods + + TInt ClientCertificate(CX509Certificate* aCert); + TInt ClientCertificate(HBufC8*& aCertBuf); + TInt ClientCertificate(RPointerArray* aClientCertArray); + TInt CertificateVerifySignatureL(CMessageDigest* iMd5DigestInput, CMessageDigest* iShaDigestInput, HBufC8*& aOutput); + + TInt GetCipherSuitesL(); + TInt GetCipherSuitesWithCancelL(); + TInt GetCipherSuitesL(CTLSProvider* & aTLSProviderInstance, RArray & aCipherSuites); + TInt VerifyServerCertificateL(CX509Certificate*& aCertOut); + TInt VerifyServerCertificateL(CTLSProvider* & aTLSProviderInstance, CX509Certificate*& aCertOut); + TInt VerifyServerCertificateWithCancelL(CX509Certificate*& aCertOut); + + TInt CreateSessionL(); + TInt CreateSessionWithCancelL(); + TInt CreateSessionL(CTLSProvider* & aTLSProviderInstance, CTLSSession* aCTLSSession); + TInt CreateSessionAddedL(TInt aHiByte,TInt aLoByte); + TInt VerifyGetSessionL(TTLSServerAddr& aServerName, TInt& aSessionIdLength); + TInt VerifyGetSessionL(CTLSProvider* & aTLSProviderInstance , TTLSServerAddr& aServerName, TInt& aSessionIdLength); + TInt ClientKeyExchange(HBufC8*& aMessageOut); + TInt ClientKeyExchange(CTLSSession* &aCTLSSession, HBufC8*& aMessageOut); + TInt ClientKeyExchangeWithCancel(HBufC8*& aMessageOut); + TInt GenerateClientFinishedL(CMessageDigest* aShaDigest, CMessageDigest* aMd5Digest, HBufC8*& aMessageOut); + TInt VerifyServerFinishedL(CMessageDigest* aShaDigest, CMessageDigest* aMd5Digest, const TDesC8& aMessage); + TInt CipherSuiteIndex(const TTLSCipherSuite& aSuite); + + TInt ClearSessionCacheL(TTLSSessionNameAndID &aSessionNameAndId); + TInt ClearSessionCacheWithCancelL(TTLSSessionNameAndID &aSessionNameAndId); + TInt ClearSessionCacheL(CTLSProvider* & aTLSProviderInstance ,TTLSSessionNameAndID &aSessionNameAndId); + void SessionCancelReq(); + void ProviderCancelReq(); + TInt RetrieveServerCert(CX509Certificate*& aCert); + TInt ReadPskToBeUsedL(); + void ReadUseNullCipher(); + TInt ReadGetSessionDelayL(); + void StandardAttrInit( CTlsCryptoAttributes* tlsCryptoAttributes); + + // test computation + + HBufC8* DerivePreMasterSecretL(CTLSProvider* & aTLSProviderInstance, const TDesC8& aClientKeyExMessage); + HBufC8* DerivePreMasterSecretL(const TDesC8& aClientKeyExMessage); + HBufC8* ComputeMasterSecretL(CTLSProvider* & aTLSProviderInstance, const TDesC8& aPremasterSecret); + HBufC8* ComputeMasterSecretL(const TDesC8& aPremasterSecret); + + HBufC8* ComputeMacL(const TDesC8& aData, TInt64 aSequenceNumber, TRecordProtocol& aType, TBool aIsServerMac); + HBufC8* EncryptRecordL(const TDesC8& aData, TInt64 aSequenceNumber, TRecordProtocol& aType, TBool aIsServerCrypt); + HBufC8* ComputeFinishedMessageL(CMessageDigest* aShaDigest, CMessageDigest* aMd5Digest, + const TDesC8& aMasterSecret, TBool aClientFinished); + + HBufC8* ComputeTlsMasterSecretL(const TDesC8& aPremasterSecret); + HBufC8* ComputeSslMasterSecretL(const TDesC8& aPremasterSecret); + + TInt SessionServerCertificate(CX509Certificate*& aCertOut); + TInt SessionServerCertificateWithCancel(CX509Certificate*& aCertOut); + + // INI read methods + + void DeleteSecureDialogFilesL(); + void SetDialogRecordL(RFileWriteStream& aStream, TSecurityDialogOperation aOp, const TDesC& aLabelSpec, + const TDesC& aResponse1, const TDesC& aResponse2); + + HBufC8* ServerRandomL(); + HBufC8* ClientRandomL(); + void ReadDHParamsL(); + + TTLSCipherSuite CipherSuiteL(); + TTLSProtocolVersion ProtocolVersionL(); + TTLSSessionId SessionId(); + + HBufC8* ServerCertificateL(); + TPtrC DomainNameL(); + CDecPKCS8Data* ServerPrivateKeyL(); + + // secure dialog clean up. + + + ~CTlsStepBase(); + + // PSK related + TBool GetKeyFromConfigL(const TDesC& aSectName, const TDesC16& aIniValueName, TPtrC8 & aResult); + HBufC8* StringToHexLC(const TDes8 &aString); + + TBool iUsePsk; + HBufC8* iPskKey; + HBufC8* iPskIdentity; + + // null cipher setting related + TBool iUseNullCipher; + +private: + HBufC8* ReadRandomL(const TDesC& aTag); + + + + void ComputeTlsCipherKeysL(const TDesC8& aMasterSecret, const TDesC8& aRandom); + void ComputeSslCipherKeysL(const TDesC8& aMasterSecret, const TDesC8& aRandom); + + HBufC8* ComputeTlsMacL(const TDesC8& aData, TInt64 aSequenceNumber, TRecordProtocol& aType, TBool aIsServerMac); + HBufC8* ComputeSslMacL(const TDesC8& aData, TInt64 aSequenceNumber, TRecordProtocol& aType, TBool aIsServerMac); + + HBufC8* ComputeTlsFinishedL(CMessageDigest* aShaDigest, CMessageDigest* aMd5Digest, + const TDesC8& aMasterSecret, TBool aClientFinished); + HBufC8* ComputeSslFinishedL(CMessageDigest* aShaDigest, CMessageDigest* aMd5Digest, + const TDesC8& aMasterSecret, TBool aClientFinished); + +private: + CGenericActive* iActive; + CActiveScheduler* iSched; + + CTLSProvider* iProvider; + CTLSSession* iSession; + + RArray iSuites; + + // DH key if required... + RInteger iPrime; + RInteger iGenerator; + CDHKeyPair* iKeyPair; + + // bulk cipher key params + HBufC8* iClientMacSecret; + HBufC8* iServerMacSecret; + + HBufC8* iClientWriteSecret; + HBufC8* iServerWriteSecret; + + HBufC8* iClientInitVector; + HBufC8* iServerInitVector; + + }; + +inline CTLSProvider* CTlsStepBase::Provider() + { + return iProvider; + } + +inline CTLSSession* CTlsStepBase::Session() + { + return iSession; + } + +inline const RArray& CTlsStepBase::CipherSuites() + { + return iSuites; + } + +inline const RInteger& CTlsStepBase::Prime() + { + return iPrime; + } + +inline const RInteger& CTlsStepBase::Generator() + { + return iGenerator; + } + +inline const CDHKeyPair* CTlsStepBase::KeyPair() + { + return iKeyPair; + } + +inline HBufC8* CTlsStepBase::ClientMacSecret() + { + return iClientMacSecret; + } + +inline HBufC8* CTlsStepBase::ServerMacSecret() + { + return iServerMacSecret; + } + +inline HBufC8* CTlsStepBase::ClientWriteSecret() + { + return iClientWriteSecret; + } + +inline HBufC8* CTlsStepBase::ServerWriteSecret() + { + return iServerWriteSecret; + } + +inline HBufC8* CTlsStepBase::ClientInitVector() + { + return iClientInitVector; + } + +inline HBufC8* CTlsStepBase::ServerInitVector() + { + return iServerInitVector; + } + +inline TBool CTlsStepBase::UseNullCipher() + { + return iUseNullCipher; + } + +inline HBufC8* CTlsStepBase::PskKey() + { + return iPskKey; + } + +inline HBufC8* CTlsStepBase::PskIdentity() + { + return iPskIdentity; + } + +inline TBool CTlsStepBase::UsePsk() + { + return iUsePsk; + } + + +#endif /* __TLSSTEPBASE_H__ */