--- /dev/null Thu Jan 01 00:00:00 1970 +0000
+++ b/networksecurity/tls/protocol/handshaketransmitevents.h Tue Jan 26 15:23:49 2010 +0200
@@ -0,0 +1,238 @@
+/**
+* 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:
+* Header file containing classes for transmitted Handshake protocol messages.
+*
+*
+*/
+
+
+
+/**
+ @file HandshakeTransmitEvents.h
+*/
+#include "tlsevent.h"
+#include "tlsconnection.h"
+#include <tlstypedef.h>
+
+#ifndef _HANDSHAKETRANSMITEVENTS_H_
+#define _HANDSHAKETRANSMITEVENTS_H_
+
+class CHandshake;
+class CHandshakeHeader;
+class CRecordComposer;
+class CHandshakeTransmit : public CTlsEvent
+/**
+ * @class This abstract class describes transmitted SSL3.0 and TLS1.0 Handshake
+ * protocol messages (event classes). It owns the transmitted message.
+ */
+{
+public:
+ CHandshakeTransmit( CTLSProvider& aTlsProvider, CStateMachine& aStateMachine, CRecordComposer& aRecordComposer );
+ ~CHandshakeTransmit();
+ CHandshake& Handshake();
+
+ CHandshakeHeader* HandshakeMessage() const;
+
+protected:
+ void ComposeHandshakeHeader( TInt aHistoryUpdate, ETlsHandshakeMessage aHandshakeMessage, TDesC8& aDesComposeMsg );
+
+protected:
+ CHandshakeHeader* iHandshakeMessage; // Currently processed outgoing message
+ CRecordComposer& iRecordComposer;
+};
+
+/////////////////////////////////////////////////////////////////////////////////////////////////
+/** SSL3.0/TLS1/0 TRANSMITTED MESSAGES **/
+
+enum EClientHelloStates
+{
+ ETlsGetSessionInfo, /** Get Session information */
+ ETlsGetCiphers, /** Get the list of proposed ciphers */
+ ETlsComposeHello /** Compose the Hello message */
+};
+
+enum EClientCertificateStates
+{
+ ETlsGetCertInfo, /** Get the encoded Client certificate */
+ ETlsComposeClientCert /** Compose the Client certificate message */
+};
+
+enum EClientKeyExchangeStates
+{
+ ETlsGetKeyExchangeMsg, /** Get the Client key exchange message data */
+ ETlsComposeKeyExchange /** Compose the message. */
+};
+
+enum ECertificateVerifyStates
+{
+ ETlsGetSignature, /** Get the signed info (signature). */
+ ETlsComposeCertVerify /** Compose the Certificate Verify message */
+};
+
+enum EFinishedStates
+{
+ ETlsGetFinishedMsg, /** Get the Finished message data */
+ ETlsComposeFinished /** Compose the message. */
+};
+
+class CClientHello : public CHandshakeTransmit
+/**
+ * @class This class is used to process a Client Hello message (transmitted by the protocol).
+ */
+{
+public:
+ CClientHello( CTLSProvider& aTlsProvider, CStateMachine& aStateMachine, CRecordComposer& aRecordComposer );
+ ~CClientHello();
+
+ virtual CAsynchEvent* ProcessL( TRequestStatus& aStatus );
+private:
+ EClientHelloStates iClientHelloStates; // Client Hello states, used to compose the message
+ TPtr8 iBody; // Body of Client Hello message
+ RArray<TTLSCipherSuite> iCipherList; //CTlsProvider::CipherSuites returns an array rather than descriptor
+};
+
+class CClientKeyExch : public CHandshakeTransmit
+/**
+ * @class This class is used to process a Client Key Exchange message (transmitted by the protocol).
+ */
+{
+public:
+ CClientKeyExch( CTLSProvider& aTlsProvider, CStateMachine& aStateMachine, CRecordComposer& aRecordComposer );
+ virtual CAsynchEvent* ProcessL( TRequestStatus& aStatus );
+ ~CClientKeyExch();
+
+private:
+ EClientKeyExchangeStates iClientKeyExcStates; // Client Key exchange states, used for message composition
+ HBufC8* iKeyExchBuf; // Buffer for the Key exchange message
+ TPtr8 iBody; // Body of Client Key exchange message
+
+};
+
+class CClientCertificate : public CHandshakeTransmit
+/**
+ * @class This class is used to process a Client Certificate message (transmitted by the protocol).
+ * @brief This message is used to authenticate a client.
+ */
+{
+public:
+ CClientCertificate( CTLSProvider& aTlsProvider, CStateMachine& aStateMachine, CRecordComposer& aRecordComposer );
+ virtual CAsynchEvent* ProcessL( TRequestStatus& aStatus );
+ ~CClientCertificate();
+
+private:
+ EClientCertificateStates iClientCertStates; // Client Certificate states, used to compose the message.
+ RPointerArray<HBufC8> iCertArray;
+};
+
+class CCertificateVerify : public CHandshakeTransmit
+/**
+ * @class This class is used to process a Client Verify message (transmitted by the protocol).
+ */
+{
+public:
+ CCertificateVerify( CTLSProvider& aTlsProvider, CStateMachine& aStateMachine, CRecordComposer& aRecordComposer );
+ ~CCertificateVerify();
+ virtual CAsynchEvent* ProcessL( TRequestStatus& aStatus );
+
+private:
+ ECertificateVerifyStates iCertVerifyStates; // Certificate Verify states, used to compose the message.
+ HBufC8* iSignature;
+};
+
+class CSendFinished : public CHandshakeTransmit
+/**
+ * @class This class is used to process a Finished message (transmitted by the protocol).
+ */
+{
+public:
+ CSendFinished( CTLSProvider& aTlsProvider, CStateMachine& aStateMachine, CRecordComposer& aRecordComposer );
+ ~CSendFinished();
+ virtual CAsynchEvent* ProcessL( TRequestStatus& aStatus );
+
+private:
+ EFinishedStates iFinishedStates; // Finished states, used to compose the message.
+ HBufC8* iFinishedMsg; // Buffer for the Finished message
+ TPtr8 iBody; // Body of the Finished message
+ CSHA1* iShaHashPtr; // Copy of SHA1 hash object, used to hash the handshake messages
+ CMD5* iMd5HashPtr; // Copy of MD5 hash object, used to hash the handshake messages
+};
+
+// Inline methods
+
+// CHandshakeTransmit inline methods.
+inline CHandshakeTransmit::CHandshakeTransmit( CTLSProvider& aTlsProvider, CStateMachine& aStateMachine, CRecordComposer& aRecordComposer ) :
+ CTlsEvent( &aTlsProvider, &aStateMachine ),
+ iRecordComposer( aRecordComposer )
+{
+}
+
+inline CHandshakeHeader* CHandshakeTransmit::HandshakeMessage() const
+{
+ return iHandshakeMessage;
+}
+
+inline CHandshake& CHandshakeTransmit::Handshake()
+/**
+ * This method returns a reference to a Handshake negotiation state machine.
+ */
+{
+ return (CHandshake&) *iStateMachine;
+}
+
+// CClientHello inline methods
+inline CClientHello::CClientHello( CTLSProvider& aTlsProvider, CStateMachine& aStateMachine, CRecordComposer& aRecordComposer ) :
+ CHandshakeTransmit( aTlsProvider, aStateMachine, aRecordComposer ),
+ iClientHelloStates( ETlsGetSessionInfo ),
+ iBody( NULL, 0 )
+{
+}
+
+// CClientKeyExch inline methods
+inline CClientKeyExch::CClientKeyExch( CTLSProvider& aTlsProvider, CStateMachine& aStateMachine, CRecordComposer& aRecordComposer ) :
+ CHandshakeTransmit( aTlsProvider, aStateMachine, aRecordComposer ),
+ iClientKeyExcStates( ETlsGetKeyExchangeMsg ),
+ iBody( NULL, 0 )
+{
+ iKeyExchBuf = NULL;
+}
+
+// CClientCertificate inline methods
+inline CClientCertificate::CClientCertificate( CTLSProvider& aTlsProvider, CStateMachine& aStateMachine, CRecordComposer& aRecordComposer ) :
+ CHandshakeTransmit( aTlsProvider, aStateMachine, aRecordComposer ),
+ iClientCertStates( ETlsGetCertInfo )
+{
+
+}
+
+// CCertificateVerify inline methods
+inline CCertificateVerify::CCertificateVerify( CTLSProvider& aTlsProvider, CStateMachine& aStateMachine, CRecordComposer& aRecordComposer ) :
+ CHandshakeTransmit( aTlsProvider, aStateMachine, aRecordComposer ),
+ iCertVerifyStates( ETlsGetSignature )
+{
+ iSignature = NULL;
+}
+
+// CSendFinished inline methods
+inline CSendFinished::CSendFinished( CTLSProvider& aTlsProvider, CStateMachine& aStateMachine, CRecordComposer& aRecordComposer ) :
+ CHandshakeTransmit( aTlsProvider, aStateMachine, aRecordComposer ),
+ iFinishedStates( ETlsGetFinishedMsg ),
+ iBody ( NULL, 0 ),
+ iShaHashPtr ( NULL ),
+ iMd5HashPtr ( NULL )
+{
+ iFinishedMsg = NULL;
+}
+
+#endif