// Licensed under the Apache License, Version 2.0 // or the MIT license // , at your option. // All files in the project carrying such notice may not be copied, modified, or distributed // except according to those terms. use shared::guiddef::GUID; use shared::minwindef::{BOOL, BYTE, DWORD}; use um::winnt::LPWSTR; pub const eapPropCipherSuiteNegotiation: DWORD = 0x00000001; pub const eapPropMutualAuth: DWORD = 0x00000002; pub const eapPropIntegrity: DWORD = 0x00000004; pub const eapPropReplayProtection: DWORD = 0x00000008; pub const eapPropConfidentiality: DWORD = 0x00000010; pub const eapPropKeyDerivation: DWORD = 0x00000020; pub const eapPropKeyStrength64: DWORD = 0x00000040; pub const eapPropKeyStrength128: DWORD = 0x00000080; pub const eapPropKeyStrength256: DWORD = 0x00000100; pub const eapPropKeyStrength512: DWORD = 0x00000200; pub const eapPropKeyStrength1024: DWORD = 0x00000400; pub const eapPropDictionaryAttackResistance: DWORD = 0x00000800; pub const eapPropFastReconnect: DWORD = 0x00001000; pub const eapPropCryptoBinding: DWORD = 0x00002000; pub const eapPropSessionIndependence: DWORD = 0x00004000; pub const eapPropFragmentation: DWORD = 0x00008000; pub const eapPropChannelBinding: DWORD = 0x00010000; pub const eapPropNap: DWORD = 0x00020000; pub const eapPropStandalone: DWORD = 0x00040000; pub const eapPropMppeEncryption: DWORD = 0x00080000; pub const eapPropTunnelMethod: DWORD = 0x00100000; pub const eapPropSupportsConfig: DWORD = 0x00200000; pub const eapPropCertifiedMethod: DWORD = 0x00400000; pub const eapPropHiddenMethod: DWORD = 0x00800000; pub const eapPropMachineAuth: DWORD = 0x01000000; pub const eapPropUserAuth: DWORD = 0x02000000; pub const eapPropIdentityPrivacy: DWORD = 0x04000000; pub const eapPropMethodChaining: DWORD = 0x08000000; pub const eapPropSharedStateEquivalence: DWORD = 0x10000000; pub const eapPropReserved: DWORD = 0x80000000; pub const EAP_VALUENAME_PROPERTIES: &'static str = "Properties"; pub type EAP_SESSIONID = DWORD; STRUCT!{struct EAP_TYPE { type_: BYTE, dwVendorId: DWORD, dwVendorType: DWORD, }} STRUCT!{struct EAP_METHOD_TYPE { eapType: EAP_TYPE, dwAuthorId: DWORD, }} STRUCT!{struct EAP_METHOD_INFO { eaptype: EAP_METHOD_TYPE, pwszAuthorName: LPWSTR, pwszFriendlyName: LPWSTR, eapProperties: DWORD, pInnerMethodInfo: *mut EAP_METHOD_INFO, }} STRUCT!{struct EAP_METHOD_INFO_EX { eaptype: EAP_METHOD_TYPE, pwszAuthorName: LPWSTR, pwszFriendlyName: LPWSTR, eapProperties: DWORD, pInnerMethodInfoArray: *mut EAP_METHOD_INFO_ARRAY_EX, }} STRUCT!{struct EAP_METHOD_INFO_ARRAY { dwNumberOfMethods: DWORD, pEapMethods: *mut EAP_METHOD_INFO, }} STRUCT!{struct EAP_METHOD_INFO_ARRAY_EX { dwNumberOfMethods: DWORD, pEapMethods: *mut EAP_METHOD_INFO_EX, }} STRUCT!{struct EAP_ERROR { dwWinError: DWORD, type_: EAP_METHOD_TYPE, dwReasonCode: DWORD, rootCauseGuid: GUID, repairGuid: GUID, helpLinkGuid: GUID, pRootCauseString: LPWSTR, pRepairString: LPWSTR, }} ENUM!{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, eatFastRoamedSession = 8100, eatEAPTLV = 8102, eatCredentialsChanged = 8103, eatInnerEapMethodType = 8104, eatClearTextPassword = 8107, eatQuarantineSoH = 8150, eatCertificateThumbprint = 8250, eatPeerId = 9000, eatServerId = 9001, eatMethodId = 9002, eatEMSK = 9003, eatSessionId = 9004, eatReserved = 0xFFFFFFFF, }} pub type EapAttributeType = EAP_ATTRIBUTE_TYPE; STRUCT!{struct EAP_ATTRIBUTE { eaType: EAP_ATTRIBUTE_TYPE, dwLength: DWORD, pValue: *mut BYTE, }} pub type EapAttribute = EAP_ATTRIBUTE; STRUCT!{struct EAP_ATTRIBUTES { dwNumberOfAttributes: DWORD, pAttribs: *mut EAP_ATTRIBUTE, }} pub type EapAttributes = EAP_ATTRIBUTES; pub const EAP_FLAG_Reserved1: DWORD = 0x00000001; pub const EAP_FLAG_NON_INTERACTIVE: DWORD = 0x00000002; pub const EAP_FLAG_LOGON: DWORD = 0x00000004; pub const EAP_FLAG_PREVIEW: DWORD = 0x00000008; pub const EAP_FLAG_Reserved2: DWORD = 0x00000010; pub const EAP_FLAG_MACHINE_AUTH: DWORD = 0x00000020; pub const EAP_FLAG_GUEST_ACCESS: DWORD = 0x00000040; pub const EAP_FLAG_Reserved3: DWORD = 0x00000080; pub const EAP_FLAG_Reserved4: DWORD = 0x00000100; pub const EAP_FLAG_RESUME_FROM_HIBERNATE: DWORD = 0x00000200; pub const EAP_FLAG_Reserved5: DWORD = 0x00000400; pub const EAP_FLAG_Reserved6: DWORD = 0x00000800; pub const EAP_FLAG_FULL_AUTH: DWORD = 0x00001000; pub const EAP_FLAG_PREFER_ALT_CREDENTIALS: DWORD = 0x00002000; pub const EAP_FLAG_Reserved7: DWORD = 0x00004000; pub const EAP_PEER_FLAG_HEALTH_STATE_CHANGE: DWORD = 0x00008000; pub const EAP_FLAG_SUPRESS_UI: DWORD = 0x00010000; pub const EAP_FLAG_PRE_LOGON: DWORD = 0x00020000; pub const EAP_FLAG_USER_AUTH: DWORD = 0x00040000; pub const EAP_FLAG_CONFG_READONLY: DWORD = 0x00080000; pub const EAP_FLAG_Reserved8: DWORD = 0x00100000; pub const EAP_FLAG_Reserved9: DWORD = 0x00400000; pub const EAP_FLAG_VPN: DWORD = 0x00800000; pub const EAP_CONFIG_INPUT_FIELD_PROPS_DEFAULT: DWORD = 0x00000000; pub const EAP_CONFIG_INPUT_FIELD_PROPS_NON_DISPLAYABLE: DWORD = 0x00000001; pub const EAP_CONFIG_INPUT_FIELD_PROPS_NON_PERSIST: DWORD = 0x00000002; pub const EAP_UI_INPUT_FIELD_PROPS_DEFAULT: DWORD = EAP_CONFIG_INPUT_FIELD_PROPS_DEFAULT; pub const EAP_UI_INPUT_FIELD_PROPS_NON_DISPLAYABLE: DWORD = EAP_CONFIG_INPUT_FIELD_PROPS_NON_DISPLAYABLE; pub const EAP_UI_INPUT_FIELD_PROPS_NON_PERSIST: DWORD = 0x00000002; pub const EAP_UI_INPUT_FIELD_PROPS_READ_ONLY: DWORD = 0x00000004; ENUM!{enum EAP_CONFIG_INPUT_FIELD_TYPE { EapConfigInputUsername = 0, EapConfigInputPassword = 1, EapConfigInputNetworkUsername = 2, EapConfigInputNetworkPassword = 3, EapConfigInputPin = 4, EapConfigInputPSK = 5, EapConfigInputEdit = 6, EapConfigSmartCardUsername = 7, EapConfigSmartCardError = 8, }} pub type PEAP_CONFIG_INPUT_FIELD_TYPE = *mut EAP_CONFIG_INPUT_FIELD_TYPE; pub const EAP_CREDENTIAL_VERSION: i32 = 1; pub const EAP_INTERACTIVE_UI_DATA_VERSION: i32 = 1; pub const EAPHOST_PEER_API_VERSION: i32 = 1; pub const EAPHOST_METHOD_API_VERSION: i32 = 1; pub const MAX_EAP_CONFIG_INPUT_FIELD_LENGTH: i32 = 256; pub const MAX_EAP_CONFIG_INPUT_FIELD_VALUE_LENGTH: i32 = 1024; STRUCT!{struct EAP_CONFIG_INPUT_FIELD_DATA { dwSize: DWORD, Type: EAP_CONFIG_INPUT_FIELD_TYPE, dwFlagProps: DWORD, pwszLabel: LPWSTR, pwszData: LPWSTR, dwMinDataLength: DWORD, dwMaxDataLength: DWORD, }} pub type PEAP_CONFIG_INPUT_FIELD_DATA = *mut EAP_CONFIG_INPUT_FIELD_DATA; STRUCT!{struct EAP_CONFIG_INPUT_FIELD_ARRAY { dwVersion: DWORD, dwNumberOfFields: DWORD, pFields: *mut EAP_CONFIG_INPUT_FIELD_DATA, }} pub type PEAP_CONFIG_INPUT_FIELD_ARRAY = *mut EAP_CONFIG_INPUT_FIELD_ARRAY; ENUM!{enum EAP_INTERACTIVE_UI_DATA_TYPE { EapCredReq = 0, EapCredResp = 1, EapCredExpiryReq = 2, EapCredExpiryResp = 3, EapCredLogonReq = 4, EapCredLogonResp = 5, }} pub type EAP_CRED_REQ = EAP_CONFIG_INPUT_FIELD_ARRAY; pub type EAP_CRED_RESP = EAP_CONFIG_INPUT_FIELD_ARRAY; pub type EAP_CRED_LOGON_REQ = EAP_CONFIG_INPUT_FIELD_ARRAY; pub type EAP_CRED_LOGON_RESP = EAP_CONFIG_INPUT_FIELD_ARRAY; STRUCT!{struct EAP_CRED_EXPIRY_REQ { curCreds: EAP_CONFIG_INPUT_FIELD_ARRAY, newCreds: EAP_CONFIG_INPUT_FIELD_ARRAY, }} pub type EAP_CRED_EXPIRY_RESP = EAP_CRED_EXPIRY_REQ; UNION!{union EAP_UI_DATA_FORMAT { [usize; 1], credData credData_mut: *mut EAP_CRED_REQ, credExpiryData credExpiryData_mut: *mut EAP_CRED_EXPIRY_REQ, credLogonData credLogonData_mut: *mut EAP_CRED_LOGON_REQ, }} STRUCT!{struct EAP_INTERACTIVE_UI_DATA { dwVersion: DWORD, dwSize: DWORD, dwDataType: EAP_INTERACTIVE_UI_DATA_TYPE, cbUiData: DWORD, pbUiData: EAP_UI_DATA_FORMAT, }} ENUM!{enum EAP_METHOD_PROPERTY_TYPE { emptPropCipherSuiteNegotiation = 0, emptPropMutualAuth = 1, emptPropIntegrity = 2, emptPropReplayProtection = 3, emptPropConfidentiality = 4, emptPropKeyDerivation = 5, emptPropKeyStrength64 = 6, emptPropKeyStrength128 = 7, emptPropKeyStrength256 = 8, emptPropKeyStrength512 = 9, emptPropKeyStrength1024 = 10, emptPropDictionaryAttackResistance = 11, emptPropFastReconnect = 12, emptPropCryptoBinding = 13, emptPropSessionIndependence = 14, emptPropFragmentation = 15, emptPropChannelBinding = 16, emptPropNap = 17, emptPropStandalone = 18, emptPropMppeEncryption = 19, emptPropTunnelMethod = 20, emptPropSupportsConfig = 21, emptPropCertifiedMethod = 22, emptPropHiddenMethod = 23, emptPropMachineAuth = 24, emptPropUserAuth = 25, emptPropIdentityPrivacy = 26, emptPropMethodChaining = 27, emptPropSharedStateEquivalence = 28, emptLegacyMethodPropertyFlag = 31, emptPropVendorSpecific = 255, }} ENUM!{enum EAP_METHOD_PROPERTY_VALUE_TYPE { empvtBool = 0, empvtDword = 1, empvtString = 2, }} STRUCT!{struct EAP_METHOD_PROPERTY_VALUE_BOOL { length: DWORD, value: BOOL, }} STRUCT!{struct EAP_METHOD_PROPERTY_VALUE_DWORD { length: DWORD, value: DWORD, }} STRUCT!{struct EAP_METHOD_PROPERTY_VALUE_STRING { length: DWORD, value: *mut BYTE, }} UNION!{union EAP_METHOD_PROPERTY_VALUE { [usize; 2], empvBool empvBool_mut: EAP_METHOD_PROPERTY_VALUE_BOOL, empvDword empvDword_mut: EAP_METHOD_PROPERTY_VALUE_DWORD, empvString empvString_mut: EAP_METHOD_PROPERTY_VALUE_STRING, }} STRUCT!{struct EAP_METHOD_PROPERTY { eapMethodPropertyType: EAP_METHOD_PROPERTY_TYPE, eapMethodPropertyValueType: EAP_METHOD_PROPERTY_VALUE_TYPE, eapMethodPropertyValue: EAP_METHOD_PROPERTY_VALUE, }} STRUCT!{struct EAP_METHOD_PROPERTY_ARRAY { dwNumberOfProperties: DWORD, pMethodProperty: *mut EAP_METHOD_PROPERTY, }} STRUCT!{struct EAPHOST_IDENTITY_UI_PARAMS { eapMethodType: EAP_METHOD_TYPE, dwFlags: DWORD, dwSizeofConnectionData: DWORD, pConnectionData: *mut BYTE, dwSizeofUserData: DWORD, pUserData: *mut BYTE, dwSizeofUserDataOut: DWORD, pUserDataOut: *mut BYTE, pwszIdentity: LPWSTR, dwError: DWORD, pEapError: *mut EAP_ERROR, }} STRUCT!{struct EAPHOST_INTERACTIVE_UI_PARAMS { dwSizeofContextData: DWORD, pContextData: *mut BYTE, dwSizeofInteractiveUIData: DWORD, pInteractiveUIData: *mut BYTE, dwError: DWORD, pEapError: *mut EAP_ERROR, }} ENUM!{enum EapCredentialType { EAP_EMPTY_CREDENTIAL = 0, EAP_USERNAME_PASSWORD_CREDENTIAL = 1, EAP_WINLOGON_CREDENTIAL = 2, EAP_CERTIFICATE_CREDENTIAL = 3, EAP_SIM_CREDENTIAL = 4, }} STRUCT!{struct EapUsernamePasswordCredential { username: LPWSTR, password: LPWSTR, }} pub const CERTIFICATE_HASH_LENGTH: usize = 20; STRUCT!{struct EapCertificateCredential { certHash: [BYTE; CERTIFICATE_HASH_LENGTH], password: LPWSTR, }} STRUCT!{struct EapSimCredential { iccID: LPWSTR, }} UNION!{union EapCredentialTypeData { [u32; 6] [u64; 4], username_password username_password_mut: EapUsernamePasswordCredential, certificate certificate_mut: EapCertificateCredential, sim sim_mut: EapSimCredential, }} STRUCT!{struct EapCredential { credType: EapCredentialType, credData: EapCredentialTypeData, }}