diff -r 000000000000 -r 33413c0669b9 vpnengine/ikev2lib/inc/ikev2SAdata.h --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/vpnengine/ikev2lib/inc/ikev2SAdata.h Thu Dec 17 09:14:51 2009 +0200 @@ -0,0 +1,151 @@ +/* +* 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: IKEv2 SA data definition +* Class TIkev2SAData is the IKEv2 SA parameter definition which +* is used to pass SA information between IKE server and IKEv2 +* plug-in. +* +*/ +#ifndef __IKEV2SADATA_H__ +#define __IKEV2SADATA_H__ +#include +#include +#include "ikemsgheader.h" +#include "internaladdress.h" +#include "ipsecsadata.h" +#include "ipsecsalifetime.h" +#include "ikev2message.h" + +class CIkeData; + +#define SECOND 1000000 // One second is 1000000 us. (1 us. per tick) + +// +// Private generic PFKEY extension type value +// +#define IKEV2_KEY_MATERIAL_SIZE 40 +#define IKEV2_MAX_IV_SIZE 16 + +class TIkev2SAData +{ +public: + TIkev2SAData(); + + void CleanUp(); + void FreeRespMsg(); + void FreeRequestMsg(); + void StoreVirtualIp(const TInetAddr& aVirtualAddr); + void SaveRespMsg(CIkeV2Message* aRespMsg); + void SaveRequestMsg(CIkeV2Message* aRequestMsg); + void Copy(TIkev2SAData& aSrc); + TUint32 SaId() const; + void SetSaId(TUint32 aSaId); + TIkeSPI& SpiI(); + void SetSpiI(const TIkeSPI& aSpiI); + TIkeSPI& SpiR(); + void SetSpiR(const TIkeSPI& aSpiR); + + void GenerateIkeKeyDerivatesL(const TDesC8& aSKEYSEED,TUint16 aPrfAlg, + const TDesC8& aNonceI, const TDesC8& aNonceR); + + /** + * Gets the request message ID we should use in our next + * request. + */ + TUint32 NextRequestId() const; + + /** + * Get the message ID we expecting see + * in a next received response. + */ + TUint32 ExpectedResponseId() const; + + /** + * Get the message ID we expecting see + * in a next received request. We should + * also use this message ID in our + * corresponding response. + */ + TUint32 ExpectedRequestId() const; + + +private: + TUint32 iSAId; // Internal negotiation Id + TIkeSPI iSPI_I; // Initiator SPI + TIkeSPI iSPI_R; // Responder SPI + +public: + + TInt iSAState; // IKE SA State + TBool iInitiator; // TRUE if local end is initiator + + CIkeData* iIkeData; + TUint32 iVpnIapId; + + TInetAddr iLocalAddr; // The address of the physical interface we are using. + TInetAddr iVirtualAddr; // The address assigned to the VPN interface by the SGW. + TInetAddr iRemoteAddr; // Remote Address ("From Policy") + TInetAddr iDestinAddr; // Current peer destination address and port. + // (Is different that iRemoteAddr, if the SGW is behind NAT) + + TUint32 iNATFlags; // If not zero, there is NAT between sites + TBool iFloatedPort; // If true floated port used (and NON-ESP-MARKER) + + TUint32 iWindowSize; // Message ID window size (currently 1) + CIkeV2Message* iLastResponse; // The last IKE response message buffer + CIkeV2Message* iLastRequest; // The last IKE response message buffer + TInt iRespRetryCount;// Count of response retries tranmitted in sequence + + // + // Selected IKE SA proposal + // + TUint16 iEncrAlg; // Encryption algorithm (transform ID 1) + TUint16 iPRFAlg; // Pseudo Random function (transform ID 2) + TUint16 iIntegAlg; // Integrity algorithm (transform ID 3) + TUint16 iDHGroup; // Diffie Hellmann Group(transform ID 4) + + TUint16 iEAPType; // EAP type if any + TUint16 iAuthMethod; // Authentication method selected + TUint32 iLifetime; // Local lifetime in seconds + TInt iCipherKeyLth; // Cipher key length + TInt iCipherBlkLth; // Cipher block length + TInt iIntChkSumLth; // Integrity checksum length + TBool iMobikeUsed; // MOBIKE protocol supported by both ends + // + // IKEv2 keymaterial + // + TBuf8 iSK_d; + TBuf8 iSK_ai; + TBuf8 iSK_ar; + TBuf8 iSK_ei; + TBuf8 iSK_er; + TBuf8 iSK_pi; + TBuf8 iSK_pr; +}; + + +// +// IKE SA states +// +const TInt KSaStateNotDefined = 0; +const TInt KSaStateReady = 1; +/* +const TInt KSaStateRekeying = 2; +const TInt KSaStateWaitingChildSa = 3; +const TInt KSaStateDeleting = 4; +const TInt KSaStateNotifying = 5; +const TInt KSaStateRoaming = 6; +*/ + +#endif