/**
 * This file has no copyright assigned and is placed in the Public Domain.
 * This file is part of the mingw-w64 runtime package.
 * No warranty is given; refer to the file DISCLAIMER.PD within this package.
 */
#ifndef _INC_EAPTYPES
#define _INC_EAPTYPES

#ifdef __cplusplus
extern "C" {
#endif


typedef DWORD EAP_SESSIONID;
typedef void* EAP_SESSION_HANDLE;

#define EAP_FLAG_Reserved1 0x00000001
#define EAP_FLAG_NON_INTERACTIVE 0x00000002
#define EAP_FLAG_LOGON 0x00000004
#define EAP_FLAG_PREVIEW 0x00000008
#define EAP_FLAG_Reserved2 0x00000010
#define EAP_FLAG_MACHINE_AUTH 0x00000020
#define EAP_FLAG_GUEST_ACCESS 0x00000040
#define EAP_FLAG_Reserved3 0x00000080
#define EAP_FLAG_Reserved4 0x00000100
#define EAP_FLAG_RESUME_FROM_HIBERNATE 0x00000200
#define EAP_FLAG_Reserved5 0x00000400
#define EAP_FLAG_Reserved6 0x00000800
#define EAP_FLAG_FULL_AUTH 0x00001000
#define EAP_FLAG_PREFER_ALT_CREDENTIALS 0x00002000
#define EAP_FLAG_Reserved7 0x00004000
#define EAP_PEER_FLAG_HEALTH_STATE_CHANGE 0x00008000
#define EAP_FLAG_SUPRESS_UI 0x00010000
#define EAP_FLAG_PRE_LOGON 0x00020000
#define EAP_FLAG_USER_AUTH 0x00040000
#define EAP_FLAG_CONFG_READONLY 0x00080000
#define EAP_FLAG_Reserved8 0x00100000

typedef enum _EAP_ATTRIBUTE_TYPE {
  eatMinimum                  = 0,
  eatUserName                 = 1,
  eatUserPassword             = 2,
  eatMD5CHAPPassword          = 3,
  eatNASIPAddress             = 4,
  eatNASport                  = 5,
  eatServiceType              = 6,
  eatFramedProtocol           = 7,
  eatFramedIPAddress          = 8,
  eatFramedIPNetmask          = 9,
  eatFramedRouting            = 10,
  eatFilterId                 = 11,
  eatFramedMTU                = 12,
  eatFramedCompression        = 13,
  eatLoginIPHost              = 14,
  eatLoginService             = 15,
  eatLoginTCPPort             = 16,
  eatUnassigned17             = 17,
  eatReplyMessage             = 18,
  eatCallbackNumber           = 19,
  eatCallbackId               = 20,
  eatUnassigned21             = 21,
  eatFramedRoute              = 22,
  eatFramedIPXNetwork         = 23,
  eatState                    = 24,
  eatClass                    = 25,
  eatVendorSpecific           = 26,
  eatSessionTimeout           = 27,
  eatIdleTimeout              = 28,
  eatTerminationAction        = 29,
  eatCalledStationId          = 30,
  eatCallingStationId         = 31,
  eatNASIdentifier            = 32,
  eatProxyState               = 33,
  eatLoginLATService          = 34,
  eatLoginLATNode             = 35,
  eatLoginLATGroup            = 36,
  eatFramedAppleTalkLink      = 37,
  eatFramedAppleTalkNetwork   = 38,
  eatFramedAppleTalkZone      = 39,
  eatAcctStatusType           = 40,
  eatAcctDelayTime            = 41,
  eatAcctInputOctets          = 42,
  eatAcctOutputOctets         = 43,
  eatAcctSessionId            = 44,
  eatAcctAuthentic            = 45,
  eatAcctSessionTime          = 46,
  eatAcctInputPackets         = 47,
  eatAcctOutputPackets        = 48,
  eatAcctTerminateCause       = 49,
  eatAcctMultiSessionId       = 50,
  eatAcctLinkCount            = 51,
  eatAcctEventTimeStamp       = 55,
  eatMD5CHAPChallenge         = 60,
  eatNASPortType              = 61,
  eatPortLimit                = 62,
  eatLoginLATPort             = 63,
  eatTunnelType               = 64,
  eatTunnelMediumType         = 65,
  eatTunnelClientEndpoint     = 66,
  eatTunnelServerEndpoint     = 67,
  eatARAPPassword             = 70,
  eatARAPFeatures             = 71,
  eatARAPZoneAccess           = 72,
  eatARAPSecurity             = 73,
  eatARAPSecurityData         = 74,
  eatPasswordRetry            = 75,
  eatPrompt                   = 76,
  eatConnectInfo              = 77,
  eatConfigurationToken       = 78,
  eatEAPMessage               = 79,
  eatSignature                = 80,
  eatARAPChallengeResponse    = 84,
  eatAcctInterimInterval      = 85,
  eatNASIPv6Address           = 95,
  eatFramedInterfaceId        = 96,
  eatFramedIPv6Prefix         = 97,
  eatLoginIPv6Host            = 98,
  eatFramedIPv6Route          = 99,
  eatFramedIPv6Pool           = 100,
  eatARAPGuestLogon           = 8096,
  eatCertificateOID           = 8097,
  eatEAPConfiguration         = 8098,
  eatPEAPEmbeddedEAPTypeId    = 8099,
  eatPEAPFastRoamedSession    = 8100,
  eatEAPTLV                   = 8102,
  eatCredentialsChanged       = 8103,
  eatInnerEapMethodType       = 8104,
  eatClearTextPassword        = 8107,
  eatQuarantineSoH            = 8150,
  eatPeerId                   = 9000,
  eatServerId                 = 9001,
  eatMethodId                 = 9002,
  eatEMSK                     = 9003,
  eatSessionId                = 9004,
  eatReserved                 = 0xFFFFFFFF 
} EAP_ATTRIBUTE_TYPE, EapAttributeType;

typedef struct _EAP_ATTRIBUTE {
  EAP_ATTRIBUTE_TYPE eapType;
  DWORD              dwLength;
  BYTE *             pValue;
} EAP_ATTRIBUTE, EapAttribute;

typedef struct _EAP_ATTRIBUTES {
  DWORD         dwNumberOfAttributes;
  EAP_ATTRIBUTE *pAttribs;
} EAP_ATTRIBUTES, EapAttributes;

typedef struct _EAP_TYPE {
  BYTE  type;
  DWORD dwVendorId;
  DWORD dwVendorType;
} EAP_TYPE;

typedef struct _EAP_METHOD_TYPE {
  EAP_TYPE eapType;
  DWORD    dwAuthorId;
} EAP_METHOD_TYPE;

typedef struct _EAP_ERROR {
  DWORD           dwWinError;
  EAP_METHOD_TYPE type;
  DWORD           dwReasonCode;
  GUID            rootCauseGuid;
  GUID            repairGuid;
  GUID            helpLinkGuid;
  LPWSTR          pRootCauseString;
  LPWSTR          pRepairString;
} EAP_ERROR;

typedef enum _EAP_CONFIG_INPUT_FIELD_TYPE {
  EapConfigInputUsername = 0,
  EapConfigInputPassword,
  EapConfigInputNetworkUsername,
  EapConfigInputNetworkPassword,
  EapConfigInputPin,
  EapConfigInputPSK,
  EapConfigInputEdit,
  EapConfigSmartCardUsername,
  EapConfigSmartCardError 
} EAP_CONFIG_INPUT_FIELD_TYPE;

typedef enum _EAP_INTERACTIVE_UI_DATA_TYPE {
  EapCredReq,
  EapCredResp,
  EapCredExpiryReq,
  EapCredExpiryResp 
} EAP_INTERACTIVE_UI_DATA_TYPE;

#define EAP_UI_INPUT_FIELD_PROPS_DEFAULT 0x00000000
#define EAP_CONFIG_INPUT_FIELD_PROPS_DEFAULT 0x00000000
#define EAP_UI_INPUT_FIELD_PROPS_NON_DISPLAYABLE 0x00000001
#define EAP_CONFIG_INPUT_FIELD_PROPS_NON_DISPLAYABLE 0x00000001
#define EAP_UI_INPUT_FIELD_PROPS_NON_PERSIST 0x00000002
#define EAP_CONFIG_INPUT_FIELD_PROPS_NON_PERSIST 0x00000002
#define EAP_UI_INPUT_FIELD_PROPS_READ_ONLY 0x00000004

#define MAX_EAP_CONFIG_INPUT_FIELD_LENGTH 256

#define MAX_EAP_CONFIG_INPUT_FIELD_VALUE_LENGTH 1024

typedef struct _EAP_CONFIG_INPUT_FIELD_DATA {
  DWORD                       dwSize;
  EAP_CONFIG_INPUT_FIELD_TYPE Type;
  DWORD                       dwFlagProps;
  LPWSTR                      pwszLabel;
  LPWSTR                      pwszData;
  DWORD                       dwMinDataLength;
  DWORD                       dwMaxDataLength;
} EAP_CONFIG_INPUT_FIELD_DATA, *PEAP_CONFIG_INPUT_FIELD_DATA;

#define EAP_CREDENTIAL_VERSION 1

typedef struct _EAP_CONFIG_INPUT_FIELD_ARRAY {
  DWORD                       dwVersion;
  DWORD                       dwNumberOfFields;
  DWORD                       dwSize;
  EAP_CONFIG_INPUT_FIELD_DATA *pFields;
} EAP_CONFIG_INPUT_FIELD_ARRAY, *PEAP_CONFIG_INPUT_FIELD_ARRAY;

typedef EAP_CONFIG_INPUT_FIELD_ARRAY EAP_CRED_REQ;
typedef EAP_CONFIG_INPUT_FIELD_ARRAY EAP_CRED_RESP;
typedef struct _EAP_CRED_EXPIRY_REQ EAP_CRED_EXPIRY_REQ;

typedef union _EAP_UI_DATA_FORMAT {
  EAP_CRED_REQ *      credData;
  EAP_CRED_EXPIRY_REQ *credExpiryData;
} EAP_UI_DATA_FORMAT;

typedef struct _EAP_INTERACTIVE_UI_DATA {
  DWORD                        dwVersion;
  DWORD                        dwSize;
  EAP_INTERACTIVE_UI_DATA_TYPE dwDataType;
  DWORD                        cbUiData;
  EAP_UI_DATA_FORMAT           pbUiData;
} EAP_INTERACTIVE_UI_DATA;

#define eapPropCipherSuiteNegotiation 0x00000001
#define eapPropMutualAuth 0x00000002
#define eapPropIntegrity 0x00000004
#define eapPropReplayProtection 0x00000008
#define eapPropConfidentiality 0x00000010
#define eapPropKeyDerivation 0x00000020
#define eapPropKeyStrength64 0x00000040
#define eapPropKeyStrength128 0x00000080
#define eapPropKeyStrength256 0x00000100
#define eapPropKeyStrength512 0x00000200
#define eapPropKeyStrength1024 0x00000400
#define eapPropDictionaryAttackResistance 0x00000800
#define eapPropFastReconnect 0x00001000
#define eapPropCryptoBinding 0x00002000
#define eapPropSessionIndependence 0x00004000
#define eapPropFragmentation 0x00008000
#define eapPropChannelBinding 0x00010000
#define eapPropNap 0x00020000
#define eapPropStandalone 0x00040000
#define eapPropMppeEncryption 0x00080000
#define eapPropTunnelMethod 0x00100000
#define eapPropSupportsConfig 0x00200000
#define eapPropCertifiedMethod 0x00400000
#if (_WIN32_WINNT >= 0x0601)
#define eapPropmachineAuth 0x01000000
#define eapPropUserAuth 0x02000000
#define eapPropIdentityPrivacy 0x04000000
#define eapPropMethodChaining 0x08000000
#define eapPropSharedStateEquivalence 0x10000000
#endif /*(_WIN32_WINNT >= 0x0601)*/
#define eapPropReserved 0x20000000

typedef struct _EAP_METHOD_INFO {
  EAP_METHOD_TYPE         eapType;
  LPWSTR                  pwszAuthorName;
  LPWSTR                  pwszFriendlyName;
  DWORD                   eapProperties;
  struct _EAP_METHOD_INFO *pInnerMethodInfo;
} EAP_METHOD_INFO;

typedef struct _EAP_METHOD_INFO_ARRAY {
  DWORD           dwNumberOfMethods;
  EAP_METHOD_INFO *pEapMethods;
} EAP_METHOD_INFO_ARRAY, *PEAP_METHOD_INFO_ARRAY;

typedef struct _EAP_METHOD_INFO_EX {
  EAP_METHOD_TYPE                  eapType;
  LPWSTR                           pwszAuthorName;
  LPWSTR                           pwszFriendlyName;
  DWORD                            eapProperties;
  struct _EAP_METHOD_INFO_ARRAY_EX *pInnerMethodInfoArray;
} EAP_METHOD_INFO_EX;

typedef struct _EAP_METHOD_INFO_ARRAY_EX {
  DWORD              dwNumberOfMethods;
  EAP_METHOD_INFO_EX *pEapMethods;
} EAP_METHOD_INFO_ARRAY_EX, *PEAP_METHOD_INFO_ARRAY_EX;

typedef struct _EAP_CRED_EXPIRY_REQ {
  EAP_CONFIG_INPUT_FIELD_ARRAY curCreds;
  EAP_CONFIG_INPUT_FIELD_ARRAY newCreds;
} EAP_CRED_EXPIRY_REQ, *PEAP_CRED_EXPIRY_REQ;

typedef struct _EAP_CRED_EXPIRY_RESP {
  EAP_CONFIG_INPUT_FIELD_ARRAY curCreds;
  EAP_CONFIG_INPUT_FIELD_ARRAY newCreds;
} EAP_CRED_EXPIRY_RESP, *PEAP_CRED_EXPIRY_RESP;

#ifdef __cplusplus
}
#endif

#endif /*_INC_EAPTYPES*/
