--- /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 <e32def.h>
+#include <in_sock.h>
+#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<IKEV2_KEY_MATERIAL_SIZE> iSK_d;
+ TBuf8<IKEV2_KEY_MATERIAL_SIZE> iSK_ai;
+ TBuf8<IKEV2_KEY_MATERIAL_SIZE> iSK_ar;
+ TBuf8<IKEV2_KEY_MATERIAL_SIZE> iSK_ei;
+ TBuf8<IKEV2_KEY_MATERIAL_SIZE> iSK_er;
+ TBuf8<IKEV2_KEY_MATERIAL_SIZE> iSK_pi;
+ TBuf8<IKEV2_KEY_MATERIAL_SIZE> 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