/*++ 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_