Add IPsec/Ikev2 support.
git-svn-id: https://edk2.svn.sourceforge.net/svnroot/edk2/trunk/edk2@11219 6f19259b-4bc3-4df7-8a09-765794883524
This commit is contained in:
191
NetworkPkg/IpSecDxe/IkeCommon.h
Normal file
191
NetworkPkg/IpSecDxe/IkeCommon.h
Normal file
@@ -0,0 +1,191 @@
|
||||
/** @file
|
||||
Common operation of the IKE.
|
||||
|
||||
Copyright (c) 2010, Intel Corporation. All rights reserved.<BR>
|
||||
|
||||
This program and the accompanying materials
|
||||
are licensed and made available under the terms and conditions of the BSD License
|
||||
which accompanies this distribution. The full text of the license may be found at
|
||||
http://opensource.org/licenses/bsd-license.php.
|
||||
|
||||
THE PROGRAM IS DISTRIBUTED UNDER THE BSD LICENSE ON AN "AS IS" BASIS,
|
||||
WITHOUT WARRANTIES OR REPRESENTATIONS OF ANY KIND, EITHER EXPRESS OR IMPLIED.
|
||||
|
||||
**/
|
||||
|
||||
#ifndef _IKE_COMMON_H_
|
||||
#define _IKE_COMMON_H_
|
||||
|
||||
#include <Protocol/Udp4.h>
|
||||
#include <Protocol/Udp6.h>
|
||||
#include <Protocol/Ip4Config.h>
|
||||
|
||||
#include <Library/BaseLib.h>
|
||||
#include <Library/BaseMemoryLib.h>
|
||||
#include <Library/MemoryAllocationLib.h>
|
||||
#include <Library/UefiRuntimeServicesTableLib.h>
|
||||
#include <Library/UefiBootServicesTableLib.h>
|
||||
#include <Library/DebugLib.h>
|
||||
#include <Library/UdpIoLib.h>
|
||||
#include <Library/BaseCryptLib.h>
|
||||
|
||||
#include "Ikev2/Ikev2.h"
|
||||
#include "IpSecImpl.h"
|
||||
#include "IkePacket.h"
|
||||
#include "IpSecCryptIo.h"
|
||||
|
||||
|
||||
#define IKE_DEFAULT_PORT 500
|
||||
#define IKE_DEFAULT_TIMEOUT_INTERVAL 10000 // 10s
|
||||
#define IKE_NONCE_SIZE 16
|
||||
#define IKE_MAX_RETRY 4
|
||||
#define IKE_SPI_BASE 0x10000
|
||||
#define PRF_HMAC_SHA1_GUID &gEfiCryptAlgorithmSha1Guid
|
||||
#define IKE_PAYLOAD_SIGNATURE SIGNATURE_32('I','K','E','P')
|
||||
#define IKE_PAYLOAD_BY_PACKET(a) CR(a,IKE_PAYLOAD,ByPacket,IKE_PAYLOAD_SIGNATURE)
|
||||
|
||||
|
||||
#define IKE_PACKET_APPEND_PAYLOAD(IkePacket,IkePayload) \
|
||||
do { \
|
||||
InsertTailList(&(IkePacket)->PayloadList, &(IkePayload)->ByPacket); \
|
||||
} while (0)
|
||||
|
||||
#define IKE_PACKET_REMOVE_PAYLOAD(IkePacket,IkePayload) \
|
||||
do { \
|
||||
RemoveEntryList(&(IkePayload)->ByPacket); \
|
||||
} while (0)
|
||||
|
||||
#define IKE_PACKET_END_PAYLOAD(IkePacket, Node) \
|
||||
Node = GetFirstNode (&(IkePacket)->PayloadList); \
|
||||
while (!IsNodeAtEnd (&(IkePacket)->PayloadList, Node)) { \
|
||||
Node = GetNextNode (&(IkePacket)->PayloadList, Node); \
|
||||
} \
|
||||
|
||||
/**
|
||||
Call Crypto Lib to generate a random value with eight-octet length.
|
||||
|
||||
@return the 64 byte vaule.
|
||||
|
||||
**/
|
||||
UINT64
|
||||
IkeGenerateCookie (
|
||||
VOID
|
||||
);
|
||||
|
||||
/**
|
||||
Generate the random data for Nonce payload.
|
||||
|
||||
@param[in] NonceSize Size of the data in bytes.
|
||||
|
||||
@return Buffer which contains the random data of the spcified size.
|
||||
|
||||
**/
|
||||
UINT8 *
|
||||
IkeGenerateNonce (
|
||||
IN UINTN NonceSize
|
||||
);
|
||||
|
||||
/**
|
||||
Convert the IKE Header from Network order to Host order.
|
||||
|
||||
@param[in, out] Header The pointer of the IKE_HEADER.
|
||||
|
||||
**/
|
||||
VOID
|
||||
IkeHdrNetToHost (
|
||||
IN OUT IKE_HEADER *Header
|
||||
);
|
||||
|
||||
|
||||
/**
|
||||
Convert the IKE Header from Host order to Network order.
|
||||
|
||||
@param[in, out] Header The pointer of the IKE_HEADER.
|
||||
|
||||
**/
|
||||
VOID
|
||||
IkeHdrHostToNet (
|
||||
IN OUT IKE_HEADER *Header
|
||||
);
|
||||
|
||||
/**
|
||||
Allocate a buffer of IKE_PAYLOAD and set its Signature.
|
||||
|
||||
@return A buffer of IKE_PAYLOAD.
|
||||
|
||||
**/
|
||||
IKE_PAYLOAD *
|
||||
IkePayloadAlloc (
|
||||
VOID
|
||||
);
|
||||
|
||||
/**
|
||||
Free a specified IKE_PAYLOAD buffer.
|
||||
|
||||
@param[in] IkePayload Pointer of IKE_PAYLOAD to be freed.
|
||||
|
||||
**/
|
||||
VOID
|
||||
IkePayloadFree (
|
||||
IN IKE_PAYLOAD *IkePayload
|
||||
);
|
||||
|
||||
/**
|
||||
Generate an unused SPI
|
||||
|
||||
@return a SPI in 4 bytes.
|
||||
|
||||
**/
|
||||
UINT32
|
||||
IkeGenerateSpi (
|
||||
VOID
|
||||
);
|
||||
|
||||
/**
|
||||
Generate a random data for IV
|
||||
|
||||
@param[in] IvBuffer The pointer of the IV buffer.
|
||||
@param[in] IvSize The IV size.
|
||||
|
||||
@retval EFI_SUCCESS Create a random data for IV.
|
||||
@retval otherwise Failed.
|
||||
|
||||
**/
|
||||
EFI_STATUS
|
||||
IkeGenerateIv (
|
||||
IN UINT8 *IvBuffer,
|
||||
IN UINTN IvSize
|
||||
);
|
||||
|
||||
/**
|
||||
Get the IKE Version from the IKE_SA_SESSION.
|
||||
|
||||
@param[in] Session Pointer of the IKE_SA_SESSION.
|
||||
|
||||
**/
|
||||
UINT8
|
||||
IkeGetVersionFromSession (
|
||||
IN UINT8 *Session
|
||||
);
|
||||
|
||||
/**
|
||||
Find SPD entry by a specified SPD selector.
|
||||
|
||||
@param[in] SpdSel Point to SPD Selector to be searched for.
|
||||
|
||||
@retval Point to Spd Entry if the SPD entry found.
|
||||
@retval NULL if not found.
|
||||
|
||||
**/
|
||||
IPSEC_SPD_ENTRY *
|
||||
IkeSearchSpdEntry (
|
||||
IN EFI_IPSEC_SPD_SELECTOR *SpdSel
|
||||
);
|
||||
|
||||
extern EFI_GUID mZeroGuid;
|
||||
extern MODP_GROUP OakleyModpGroup[];
|
||||
extern IKE_ALG_GUID_INFO mIPsecEncrAlgInfo[];
|
||||
extern IKE_ALG_GUID_INFO mIPsecAuthAlgInfo[];
|
||||
|
||||
#endif
|
||||
|
Reference in New Issue
Block a user