/**
 * This file has no copyright assigned and is placed in the Public Domain.
 * This file is part of the w64 mingw-runtime package.
 * No warranty is given; refer to the file DISCLAIMER.PD within this package.
 */
#ifndef _INC_EAPTYPES
#define _INC_EAPTYPES
#if (_WIN32_WINNT >= 0x0600)
#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 /*(_WIN32_WINNT >= 0x0600)*/
#endif /*_INC_EAPTYPES*/
