--- /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 <e32base.h>
+#include <testexecutestepbase.h>
+#include <tlstypedef.h>
+#include <bigint.h>
+#include <asymmetrickeys.h>
+#include <secdlgimpldefs.h>
+
+#ifdef SYMBIAN_ENABLE_SPLIT_HEADERS
+#include <tlstypedef_internal.h>
+#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<TTLSCipherSuite>& 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<HBufC8>* aClientCertArray);
+ TInt CertificateVerifySignatureL(CMessageDigest* iMd5DigestInput, CMessageDigest* iShaDigestInput, HBufC8*& aOutput);
+
+ TInt GetCipherSuitesL();
+ TInt GetCipherSuitesWithCancelL();
+ TInt GetCipherSuitesL(CTLSProvider* & aTLSProviderInstance, RArray<TTLSCipherSuite> & 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<TTLSCipherSuite> 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<TTLSCipherSuite>& 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__ */