239 lines
6.1 KiB
C
239 lines
6.1 KiB
C
|
/*++
|
||
|
|
||
|
Copyright (c) 2000, Microsoft Corporation
|
||
|
|
||
|
Module Name:
|
||
|
eleap.h
|
||
|
|
||
|
Abstract:
|
||
|
e This module contains the definitions and declarations related to
|
||
|
EAP protocol
|
||
|
|
||
|
|
||
|
Revision History:
|
||
|
|
||
|
sachins, Apr 23 2000, Created
|
||
|
|
||
|
--*/
|
||
|
|
||
|
#ifndef _EAPOL_EAP_H_
|
||
|
#define _EAPOL_EAP_H_
|
||
|
|
||
|
//#define EAP_DUMPW(X,Y) TraceDumpEx(g_dwTraceIdEap,1,(LPBYTE)X,Y,4,1,NULL)
|
||
|
//#define EAP_DUMPB(X,Y) TraceDumpEx(g_dwTraceIdEap,1,(LPBYTE)X,Y,1,1,NULL)
|
||
|
|
||
|
|
||
|
//
|
||
|
// Structure used to hold information about EAP DLLs that are loaded
|
||
|
//
|
||
|
|
||
|
typedef struct _EAP_INFO
|
||
|
{
|
||
|
// Handle to loaded EAP DLL
|
||
|
HINSTANCE hInstance;
|
||
|
|
||
|
// Struture holding pointer to mandatory EAP DLL entrypoints
|
||
|
PPP_EAP_INFO RasEapInfo;
|
||
|
|
||
|
} EAP_INFO, *PEAP_INFO;
|
||
|
|
||
|
//
|
||
|
// Structure used to hold port/connection configuration blob
|
||
|
// received from the EAP DLL, using RasEapInvokeConfigUI
|
||
|
//
|
||
|
typedef struct _ELEAP_SET_CUSTOM_AUTH_DATA
|
||
|
{
|
||
|
BYTE *pConnectionData;
|
||
|
DWORD dwSizeOfConnectionData;
|
||
|
|
||
|
} ELEAP_SET_CUSTOM_AUTH_DATA;
|
||
|
|
||
|
//
|
||
|
// Structure used to hold data blob
|
||
|
// received from the EAP DLL, using RasEapInvokeInteractiveUI
|
||
|
//
|
||
|
typedef struct _ELEAP_INVOKE_EAP_UI
|
||
|
{
|
||
|
DWORD dwEapTypeId;
|
||
|
DWORD dwContextId;
|
||
|
BYTE *pbUIContextData;
|
||
|
DWORD dwSizeOfUIContextData;
|
||
|
|
||
|
} ELEAP_INVOKE_EAP_UI;
|
||
|
|
||
|
//
|
||
|
// Structure used to pass results and data between EAP processing and EAPOL
|
||
|
//
|
||
|
|
||
|
typedef struct _ELEAP_RESULT
|
||
|
{
|
||
|
ELEAP_ACTION Action;
|
||
|
|
||
|
//
|
||
|
// The packet ID which will cause the timeout for this send to be removed
|
||
|
// from the timer queue. Otherwise, the timer queue is not touched. The
|
||
|
// packet received is returned to the AP regardless of whether the timer
|
||
|
// queue is changed.
|
||
|
//
|
||
|
|
||
|
BYTE bIdExpected;
|
||
|
|
||
|
//
|
||
|
// dwError is valid only with an Action code of Done or SendAndDone. 0
|
||
|
// indicates succesful authentication. Non-0 indicates unsuccessful
|
||
|
// authentication with the value indicating the error that occurred.
|
||
|
//
|
||
|
|
||
|
DWORD dwError;
|
||
|
|
||
|
//
|
||
|
// Valid only when dwError is non-0. Indicates whether client is allowed
|
||
|
// to retry without restarting authentication. (Will be true in MS
|
||
|
// extended CHAP only)
|
||
|
//
|
||
|
|
||
|
BOOL fRetry;
|
||
|
|
||
|
CHAR szUserName[ UNLEN + 1 ];
|
||
|
|
||
|
//
|
||
|
// Set to attributes to be used for this user. If this is NULL, attributes
|
||
|
// from the authenticator will be used for this user. It is upto the
|
||
|
// allocater of this memory to free it. Must be freed during the RasCpEnd
|
||
|
// call.
|
||
|
//
|
||
|
|
||
|
OPTIONAL RAS_AUTH_ATTRIBUTE * pUserAttributes;
|
||
|
|
||
|
//
|
||
|
// Used by MS-CHAP to pass the challenge used during the authentication
|
||
|
// protocol. These 8 bytes are used as the variant for the 128 bit
|
||
|
// encryption keys.
|
||
|
//
|
||
|
|
||
|
BYTE abChallenge[MAX_CHALLENGE_SIZE];
|
||
|
|
||
|
BYTE abResponse[MAX_RESPONSE_SIZE];
|
||
|
|
||
|
// Size of EAP packet constructed by EAP DLL
|
||
|
WORD wSizeOfEapPkt;
|
||
|
|
||
|
// Does RasEapInvokeInteractiveUI entrypoint need to be invoked?
|
||
|
BOOL fInvokeEapUI;
|
||
|
|
||
|
// Data obtained via RasEapInvokeInteractiveUI entrypoint of the DLL
|
||
|
ELEAP_INVOKE_EAP_UI InvokeEapUIData;
|
||
|
|
||
|
// EAP type e.g. for EAP-TLS = 13
|
||
|
DWORD dwEapTypeId;
|
||
|
|
||
|
// Does user data blob created by EAP DLL need to be stored in the
|
||
|
// registry
|
||
|
BOOL fSaveUserData;
|
||
|
|
||
|
// User data blob created by EAP DLL
|
||
|
BYTE *pUserData;
|
||
|
|
||
|
// Size of user data blob created by EAP DLL
|
||
|
DWORD dwSizeOfUserData;
|
||
|
|
||
|
// Does connection data blob created by EAP DLL need to be stored in the
|
||
|
// registry
|
||
|
BOOL fSaveConnectionData;
|
||
|
|
||
|
// Connection data blob created by EAP DLL
|
||
|
ELEAP_SET_CUSTOM_AUTH_DATA SetCustomAuthData;
|
||
|
|
||
|
// Notification text extracted from EAP-Notification message
|
||
|
CHAR *pszReplyMessage;
|
||
|
|
||
|
} ELEAP_RESULT;
|
||
|
|
||
|
//
|
||
|
// CONSTANTS DECLARATIONS
|
||
|
//
|
||
|
|
||
|
// Default EAP type at startup for the system
|
||
|
#define EAPCFG_DefaultKey EAP_TYPE_TLS
|
||
|
|
||
|
//
|
||
|
// EAP DLL configuration entrypoints. These definitions must match the
|
||
|
// raseapif.h prototypes for RasEapInvokeConfigUI, RasEapFreeUserData and
|
||
|
// RasEapGetIdentity. For each EAP DLL, a check will be made to see if these
|
||
|
// entrypoints exists for the Dll, if they exist the entrypoints will be
|
||
|
// stored as variables of the types below for usage
|
||
|
//
|
||
|
|
||
|
typedef DWORD (APIENTRY * EAPOLEAPFREE)( PBYTE );
|
||
|
|
||
|
typedef DWORD (APIENTRY * EAPOLEAPINVOKECONFIGUI)( DWORD, HWND, DWORD, PBYTE, DWORD, PBYTE*, DWORD*);
|
||
|
|
||
|
typedef DWORD (APIENTRY * EAPOLEAPGETIDENTITY)( DWORD, HWND, DWORD, const WCHAR*, const WCHAR*, PBYTE, DWORD, PBYTE, DWORD, PBYTE*, DWORD*, WCHAR** );
|
||
|
|
||
|
typedef DWORD (APIENTRY * EAPOLEAPINVOKEINTERACTIVEUI)( DWORD, HWND, PBYTE, DWORD, PBYTE*, DWORD* );
|
||
|
|
||
|
//
|
||
|
//
|
||
|
// FUNCTION DECLARATIONS
|
||
|
//
|
||
|
|
||
|
DWORD
|
||
|
ElEapInit (
|
||
|
IN BOOL fInitialize
|
||
|
);
|
||
|
|
||
|
DWORD
|
||
|
ElEapBegin (
|
||
|
IN EAPOL_PCB *pPCB
|
||
|
);
|
||
|
|
||
|
DWORD
|
||
|
ElEapEnd (
|
||
|
IN EAPOL_PCB *pPCB
|
||
|
);
|
||
|
|
||
|
DWORD
|
||
|
ElEapMakeMessage (
|
||
|
IN EAPOL_PCB *pPCB,
|
||
|
IN PPP_EAP_PACKET *pReceiveBuf,
|
||
|
IN OUT PPP_EAP_PACKET *pSendBuf,
|
||
|
IN DWORD dwSizeOfSendBuf,
|
||
|
IN OUT ELEAP_RESULT *pResult
|
||
|
);
|
||
|
|
||
|
DWORD
|
||
|
ElMakeSupplicantMessage (
|
||
|
IN EAPOL_PCB *pPCB,
|
||
|
IN PPP_EAP_PACKET *pReceiveBuf,
|
||
|
IN OUT PPP_EAP_PACKET *pSendBuf,
|
||
|
IN DWORD dwSizeOfSendBuf,
|
||
|
IN OUT ELEAP_RESULT *pResult
|
||
|
);
|
||
|
|
||
|
DWORD
|
||
|
ElEapDllBegin (
|
||
|
IN EAPOL_PCB *pPCB,
|
||
|
IN DWORD dwEapIndex
|
||
|
);
|
||
|
|
||
|
DWORD
|
||
|
ElEapDllWork (
|
||
|
IN EAPOL_PCB *pPCB,
|
||
|
IN PPP_EAP_PACKET *pReceiveBuf,
|
||
|
IN OUT PPP_EAP_PACKET *pSendBuf,
|
||
|
IN DWORD dwSizeOfSendBuf,
|
||
|
IN OUT ELEAP_RESULT *pResult
|
||
|
);
|
||
|
|
||
|
DWORD
|
||
|
ElEapDllEnd (
|
||
|
IN EAPOL_PCB *pPCB
|
||
|
);
|
||
|
|
||
|
DWORD
|
||
|
ElGetEapTypeIndex (
|
||
|
IN DWORD dwEapType
|
||
|
);
|
||
|
|
||
|
#endif // _EAPOL_EAP_H_
|