1 // Licensed under the Apache License, Version 2.0 2 // <LICENSE-APACHE or http://www.apache.org/licenses/LICENSE-2.0> or the MIT license 3 // <LICENSE-MIT or http://opensource.org/licenses/MIT>, at your option. 4 // All files in the project carrying such notice may not be copied, modified, or distributed 5 // except according to those terms. 6 use shared::guiddef::GUID; 7 use shared::minwindef::{BOOL, BYTE, DWORD}; 8 use um::winnt::LPWSTR; 9 pub const eapPropCipherSuiteNegotiation: DWORD = 0x00000001; 10 pub const eapPropMutualAuth: DWORD = 0x00000002; 11 pub const eapPropIntegrity: DWORD = 0x00000004; 12 pub const eapPropReplayProtection: DWORD = 0x00000008; 13 pub const eapPropConfidentiality: DWORD = 0x00000010; 14 pub const eapPropKeyDerivation: DWORD = 0x00000020; 15 pub const eapPropKeyStrength64: DWORD = 0x00000040; 16 pub const eapPropKeyStrength128: DWORD = 0x00000080; 17 pub const eapPropKeyStrength256: DWORD = 0x00000100; 18 pub const eapPropKeyStrength512: DWORD = 0x00000200; 19 pub const eapPropKeyStrength1024: DWORD = 0x00000400; 20 pub const eapPropDictionaryAttackResistance: DWORD = 0x00000800; 21 pub const eapPropFastReconnect: DWORD = 0x00001000; 22 pub const eapPropCryptoBinding: DWORD = 0x00002000; 23 pub const eapPropSessionIndependence: DWORD = 0x00004000; 24 pub const eapPropFragmentation: DWORD = 0x00008000; 25 pub const eapPropChannelBinding: DWORD = 0x00010000; 26 pub const eapPropNap: DWORD = 0x00020000; 27 pub const eapPropStandalone: DWORD = 0x00040000; 28 pub const eapPropMppeEncryption: DWORD = 0x00080000; 29 pub const eapPropTunnelMethod: DWORD = 0x00100000; 30 pub const eapPropSupportsConfig: DWORD = 0x00200000; 31 pub const eapPropCertifiedMethod: DWORD = 0x00400000; 32 pub const eapPropHiddenMethod: DWORD = 0x00800000; 33 pub const eapPropMachineAuth: DWORD = 0x01000000; 34 pub const eapPropUserAuth: DWORD = 0x02000000; 35 pub const eapPropIdentityPrivacy: DWORD = 0x04000000; 36 pub const eapPropMethodChaining: DWORD = 0x08000000; 37 pub const eapPropSharedStateEquivalence: DWORD = 0x10000000; 38 pub const eapPropReserved: DWORD = 0x80000000; 39 pub const EAP_VALUENAME_PROPERTIES: &'static str = "Properties"; 40 pub type EAP_SESSIONID = DWORD; 41 STRUCT!{struct EAP_TYPE { 42 type_: BYTE, 43 dwVendorId: DWORD, 44 dwVendorType: DWORD, 45 }} 46 STRUCT!{struct EAP_METHOD_TYPE { 47 eapType: EAP_TYPE, 48 dwAuthorId: DWORD, 49 }} 50 STRUCT!{struct EAP_METHOD_INFO { 51 eaptype: EAP_METHOD_TYPE, 52 pwszAuthorName: LPWSTR, 53 pwszFriendlyName: LPWSTR, 54 eapProperties: DWORD, 55 pInnerMethodInfo: *mut EAP_METHOD_INFO, 56 }} 57 STRUCT!{struct EAP_METHOD_INFO_EX { 58 eaptype: EAP_METHOD_TYPE, 59 pwszAuthorName: LPWSTR, 60 pwszFriendlyName: LPWSTR, 61 eapProperties: DWORD, 62 pInnerMethodInfoArray: *mut EAP_METHOD_INFO_ARRAY_EX, 63 }} 64 STRUCT!{struct EAP_METHOD_INFO_ARRAY { 65 dwNumberOfMethods: DWORD, 66 pEapMethods: *mut EAP_METHOD_INFO, 67 }} 68 STRUCT!{struct EAP_METHOD_INFO_ARRAY_EX { 69 dwNumberOfMethods: DWORD, 70 pEapMethods: *mut EAP_METHOD_INFO_EX, 71 }} 72 STRUCT!{struct EAP_ERROR { 73 dwWinError: DWORD, 74 type_: EAP_METHOD_TYPE, 75 dwReasonCode: DWORD, 76 rootCauseGuid: GUID, 77 repairGuid: GUID, 78 helpLinkGuid: GUID, 79 pRootCauseString: LPWSTR, 80 pRepairString: LPWSTR, 81 }} 82 ENUM!{enum EAP_ATTRIBUTE_TYPE { 83 eatMinimum = 0, 84 eatUserName = 1, 85 eatUserPassword = 2, 86 eatMD5CHAPPassword = 3, 87 eatNASIPAddress = 4, 88 eatNASPort = 5, 89 eatServiceType = 6, 90 eatFramedProtocol = 7, 91 eatFramedIPAddress = 8, 92 eatFramedIPNetmask = 9, 93 eatFramedRouting = 10, 94 eatFilterId = 11, 95 eatFramedMTU = 12, 96 eatFramedCompression = 13, 97 eatLoginIPHost = 14, 98 eatLoginService = 15, 99 eatLoginTCPPort = 16, 100 eatUnassigned17 = 17, 101 eatReplyMessage = 18, 102 eatCallbackNumber = 19, 103 eatCallbackId = 20, 104 eatUnassigned21 = 21, 105 eatFramedRoute = 22, 106 eatFramedIPXNetwork = 23, 107 eatState = 24, 108 eatClass = 25, 109 eatVendorSpecific = 26, 110 eatSessionTimeout = 27, 111 eatIdleTimeout = 28, 112 eatTerminationAction = 29, 113 eatCalledStationId = 30, 114 eatCallingStationId = 31, 115 eatNASIdentifier = 32, 116 eatProxyState = 33, 117 eatLoginLATService = 34, 118 eatLoginLATNode = 35, 119 eatLoginLATGroup = 36, 120 eatFramedAppleTalkLink = 37, 121 eatFramedAppleTalkNetwork = 38, 122 eatFramedAppleTalkZone = 39, 123 eatAcctStatusType = 40, 124 eatAcctDelayTime = 41, 125 eatAcctInputOctets = 42, 126 eatAcctOutputOctets = 43, 127 eatAcctSessionId = 44, 128 eatAcctAuthentic = 45, 129 eatAcctSessionTime = 46, 130 eatAcctInputPackets = 47, 131 eatAcctOutputPackets = 48, 132 eatAcctTerminateCause = 49, 133 eatAcctMultiSessionId = 50, 134 eatAcctLinkCount = 51, 135 eatAcctEventTimeStamp = 55, 136 eatMD5CHAPChallenge = 60, 137 eatNASPortType = 61, 138 eatPortLimit = 62, 139 eatLoginLATPort = 63, 140 eatTunnelType = 64, 141 eatTunnelMediumType = 65, 142 eatTunnelClientEndpoint = 66, 143 eatTunnelServerEndpoint = 67, 144 eatARAPPassword = 70, 145 eatARAPFeatures = 71, 146 eatARAPZoneAccess = 72, 147 eatARAPSecurity = 73, 148 eatARAPSecurityData = 74, 149 eatPasswordRetry = 75, 150 eatPrompt = 76, 151 eatConnectInfo = 77, 152 eatConfigurationToken = 78, 153 eatEAPMessage = 79, 154 eatSignature = 80, 155 eatARAPChallengeResponse = 84, 156 eatAcctInterimInterval = 85, 157 eatNASIPv6Address = 95, 158 eatFramedInterfaceId = 96, 159 eatFramedIPv6Prefix = 97, 160 eatLoginIPv6Host = 98, 161 eatFramedIPv6Route = 99, 162 eatFramedIPv6Pool = 100, 163 eatARAPGuestLogon = 8096, 164 eatCertificateOID = 8097, 165 eatEAPConfiguration = 8098, 166 eatPEAPEmbeddedEAPTypeId = 8099, 167 eatPEAPFastRoamedSession = 8100, 168 eatFastRoamedSession = 8100, 169 eatEAPTLV = 8102, 170 eatCredentialsChanged = 8103, 171 eatInnerEapMethodType = 8104, 172 eatClearTextPassword = 8107, 173 eatQuarantineSoH = 8150, 174 eatCertificateThumbprint = 8250, 175 eatPeerId = 9000, 176 eatServerId = 9001, 177 eatMethodId = 9002, 178 eatEMSK = 9003, 179 eatSessionId = 9004, 180 eatReserved = 0xFFFFFFFF, 181 }} 182 pub type EapAttributeType = EAP_ATTRIBUTE_TYPE; 183 STRUCT!{struct EAP_ATTRIBUTE { 184 eaType: EAP_ATTRIBUTE_TYPE, 185 dwLength: DWORD, 186 pValue: *mut BYTE, 187 }} 188 pub type EapAttribute = EAP_ATTRIBUTE; 189 STRUCT!{struct EAP_ATTRIBUTES { 190 dwNumberOfAttributes: DWORD, 191 pAttribs: *mut EAP_ATTRIBUTE, 192 }} 193 pub type EapAttributes = EAP_ATTRIBUTES; 194 pub const EAP_FLAG_Reserved1: DWORD = 0x00000001; 195 pub const EAP_FLAG_NON_INTERACTIVE: DWORD = 0x00000002; 196 pub const EAP_FLAG_LOGON: DWORD = 0x00000004; 197 pub const EAP_FLAG_PREVIEW: DWORD = 0x00000008; 198 pub const EAP_FLAG_Reserved2: DWORD = 0x00000010; 199 pub const EAP_FLAG_MACHINE_AUTH: DWORD = 0x00000020; 200 pub const EAP_FLAG_GUEST_ACCESS: DWORD = 0x00000040; 201 pub const EAP_FLAG_Reserved3: DWORD = 0x00000080; 202 pub const EAP_FLAG_Reserved4: DWORD = 0x00000100; 203 pub const EAP_FLAG_RESUME_FROM_HIBERNATE: DWORD = 0x00000200; 204 pub const EAP_FLAG_Reserved5: DWORD = 0x00000400; 205 pub const EAP_FLAG_Reserved6: DWORD = 0x00000800; 206 pub const EAP_FLAG_FULL_AUTH: DWORD = 0x00001000; 207 pub const EAP_FLAG_PREFER_ALT_CREDENTIALS: DWORD = 0x00002000; 208 pub const EAP_FLAG_Reserved7: DWORD = 0x00004000; 209 pub const EAP_PEER_FLAG_HEALTH_STATE_CHANGE: DWORD = 0x00008000; 210 pub const EAP_FLAG_SUPRESS_UI: DWORD = 0x00010000; 211 pub const EAP_FLAG_PRE_LOGON: DWORD = 0x00020000; 212 pub const EAP_FLAG_USER_AUTH: DWORD = 0x00040000; 213 pub const EAP_FLAG_CONFG_READONLY: DWORD = 0x00080000; 214 pub const EAP_FLAG_Reserved8: DWORD = 0x00100000; 215 pub const EAP_FLAG_Reserved9: DWORD = 0x00400000; 216 pub const EAP_FLAG_VPN: DWORD = 0x00800000; 217 pub const EAP_CONFIG_INPUT_FIELD_PROPS_DEFAULT: DWORD = 0x00000000; 218 pub const EAP_CONFIG_INPUT_FIELD_PROPS_NON_DISPLAYABLE: DWORD = 0x00000001; 219 pub const EAP_CONFIG_INPUT_FIELD_PROPS_NON_PERSIST: DWORD = 0x00000002; 220 pub const EAP_UI_INPUT_FIELD_PROPS_DEFAULT: DWORD = EAP_CONFIG_INPUT_FIELD_PROPS_DEFAULT; 221 pub const EAP_UI_INPUT_FIELD_PROPS_NON_DISPLAYABLE: DWORD = 222 EAP_CONFIG_INPUT_FIELD_PROPS_NON_DISPLAYABLE; 223 pub const EAP_UI_INPUT_FIELD_PROPS_NON_PERSIST: DWORD = 0x00000002; 224 pub const EAP_UI_INPUT_FIELD_PROPS_READ_ONLY: DWORD = 0x00000004; 225 ENUM!{enum EAP_CONFIG_INPUT_FIELD_TYPE { 226 EapConfigInputUsername = 0, 227 EapConfigInputPassword = 1, 228 EapConfigInputNetworkUsername = 2, 229 EapConfigInputNetworkPassword = 3, 230 EapConfigInputPin = 4, 231 EapConfigInputPSK = 5, 232 EapConfigInputEdit = 6, 233 EapConfigSmartCardUsername = 7, 234 EapConfigSmartCardError = 8, 235 }} 236 pub type PEAP_CONFIG_INPUT_FIELD_TYPE = *mut EAP_CONFIG_INPUT_FIELD_TYPE; 237 pub const EAP_CREDENTIAL_VERSION: i32 = 1; 238 pub const EAP_INTERACTIVE_UI_DATA_VERSION: i32 = 1; 239 pub const EAPHOST_PEER_API_VERSION: i32 = 1; 240 pub const EAPHOST_METHOD_API_VERSION: i32 = 1; 241 pub const MAX_EAP_CONFIG_INPUT_FIELD_LENGTH: i32 = 256; 242 pub const MAX_EAP_CONFIG_INPUT_FIELD_VALUE_LENGTH: i32 = 1024; 243 STRUCT!{struct EAP_CONFIG_INPUT_FIELD_DATA { 244 dwSize: DWORD, 245 Type: EAP_CONFIG_INPUT_FIELD_TYPE, 246 dwFlagProps: DWORD, 247 pwszLabel: LPWSTR, 248 pwszData: LPWSTR, 249 dwMinDataLength: DWORD, 250 dwMaxDataLength: DWORD, 251 }} 252 pub type PEAP_CONFIG_INPUT_FIELD_DATA = *mut EAP_CONFIG_INPUT_FIELD_DATA; 253 STRUCT!{struct EAP_CONFIG_INPUT_FIELD_ARRAY { 254 dwVersion: DWORD, 255 dwNumberOfFields: DWORD, 256 pFields: *mut EAP_CONFIG_INPUT_FIELD_DATA, 257 }} 258 pub type PEAP_CONFIG_INPUT_FIELD_ARRAY = *mut EAP_CONFIG_INPUT_FIELD_ARRAY; 259 ENUM!{enum EAP_INTERACTIVE_UI_DATA_TYPE { 260 EapCredReq = 0, 261 EapCredResp = 1, 262 EapCredExpiryReq = 2, 263 EapCredExpiryResp = 3, 264 EapCredLogonReq = 4, 265 EapCredLogonResp = 5, 266 }} 267 pub type EAP_CRED_REQ = EAP_CONFIG_INPUT_FIELD_ARRAY; 268 pub type EAP_CRED_RESP = EAP_CONFIG_INPUT_FIELD_ARRAY; 269 pub type EAP_CRED_LOGON_REQ = EAP_CONFIG_INPUT_FIELD_ARRAY; 270 pub type EAP_CRED_LOGON_RESP = EAP_CONFIG_INPUT_FIELD_ARRAY; 271 STRUCT!{struct EAP_CRED_EXPIRY_REQ { 272 curCreds: EAP_CONFIG_INPUT_FIELD_ARRAY, 273 newCreds: EAP_CONFIG_INPUT_FIELD_ARRAY, 274 }} 275 pub type EAP_CRED_EXPIRY_RESP = EAP_CRED_EXPIRY_REQ; 276 UNION!{union EAP_UI_DATA_FORMAT { 277 [usize; 1], 278 credData credData_mut: *mut EAP_CRED_REQ, 279 credExpiryData credExpiryData_mut: *mut EAP_CRED_EXPIRY_REQ, 280 credLogonData credLogonData_mut: *mut EAP_CRED_LOGON_REQ, 281 }} 282 STRUCT!{struct EAP_INTERACTIVE_UI_DATA { 283 dwVersion: DWORD, 284 dwSize: DWORD, 285 dwDataType: EAP_INTERACTIVE_UI_DATA_TYPE, 286 cbUiData: DWORD, 287 pbUiData: EAP_UI_DATA_FORMAT, 288 }} 289 ENUM!{enum EAP_METHOD_PROPERTY_TYPE { 290 emptPropCipherSuiteNegotiation = 0, 291 emptPropMutualAuth = 1, 292 emptPropIntegrity = 2, 293 emptPropReplayProtection = 3, 294 emptPropConfidentiality = 4, 295 emptPropKeyDerivation = 5, 296 emptPropKeyStrength64 = 6, 297 emptPropKeyStrength128 = 7, 298 emptPropKeyStrength256 = 8, 299 emptPropKeyStrength512 = 9, 300 emptPropKeyStrength1024 = 10, 301 emptPropDictionaryAttackResistance = 11, 302 emptPropFastReconnect = 12, 303 emptPropCryptoBinding = 13, 304 emptPropSessionIndependence = 14, 305 emptPropFragmentation = 15, 306 emptPropChannelBinding = 16, 307 emptPropNap = 17, 308 emptPropStandalone = 18, 309 emptPropMppeEncryption = 19, 310 emptPropTunnelMethod = 20, 311 emptPropSupportsConfig = 21, 312 emptPropCertifiedMethod = 22, 313 emptPropHiddenMethod = 23, 314 emptPropMachineAuth = 24, 315 emptPropUserAuth = 25, 316 emptPropIdentityPrivacy = 26, 317 emptPropMethodChaining = 27, 318 emptPropSharedStateEquivalence = 28, 319 emptLegacyMethodPropertyFlag = 31, 320 emptPropVendorSpecific = 255, 321 }} 322 ENUM!{enum EAP_METHOD_PROPERTY_VALUE_TYPE { 323 empvtBool = 0, 324 empvtDword = 1, 325 empvtString = 2, 326 }} 327 STRUCT!{struct EAP_METHOD_PROPERTY_VALUE_BOOL { 328 length: DWORD, 329 value: BOOL, 330 }} 331 STRUCT!{struct EAP_METHOD_PROPERTY_VALUE_DWORD { 332 length: DWORD, 333 value: DWORD, 334 }} 335 STRUCT!{struct EAP_METHOD_PROPERTY_VALUE_STRING { 336 length: DWORD, 337 value: *mut BYTE, 338 }} 339 UNION!{union EAP_METHOD_PROPERTY_VALUE { 340 [usize; 2], 341 empvBool empvBool_mut: EAP_METHOD_PROPERTY_VALUE_BOOL, 342 empvDword empvDword_mut: EAP_METHOD_PROPERTY_VALUE_DWORD, 343 empvString empvString_mut: EAP_METHOD_PROPERTY_VALUE_STRING, 344 }} 345 STRUCT!{struct EAP_METHOD_PROPERTY { 346 eapMethodPropertyType: EAP_METHOD_PROPERTY_TYPE, 347 eapMethodPropertyValueType: EAP_METHOD_PROPERTY_VALUE_TYPE, 348 eapMethodPropertyValue: EAP_METHOD_PROPERTY_VALUE, 349 }} 350 STRUCT!{struct EAP_METHOD_PROPERTY_ARRAY { 351 dwNumberOfProperties: DWORD, 352 pMethodProperty: *mut EAP_METHOD_PROPERTY, 353 }} 354 STRUCT!{struct EAPHOST_IDENTITY_UI_PARAMS { 355 eapMethodType: EAP_METHOD_TYPE, 356 dwFlags: DWORD, 357 dwSizeofConnectionData: DWORD, 358 pConnectionData: *mut BYTE, 359 dwSizeofUserData: DWORD, 360 pUserData: *mut BYTE, 361 dwSizeofUserDataOut: DWORD, 362 pUserDataOut: *mut BYTE, 363 pwszIdentity: LPWSTR, 364 dwError: DWORD, 365 pEapError: *mut EAP_ERROR, 366 }} 367 STRUCT!{struct EAPHOST_INTERACTIVE_UI_PARAMS { 368 dwSizeofContextData: DWORD, 369 pContextData: *mut BYTE, 370 dwSizeofInteractiveUIData: DWORD, 371 pInteractiveUIData: *mut BYTE, 372 dwError: DWORD, 373 pEapError: *mut EAP_ERROR, 374 }} 375 ENUM!{enum EapCredentialType { 376 EAP_EMPTY_CREDENTIAL = 0, 377 EAP_USERNAME_PASSWORD_CREDENTIAL = 1, 378 EAP_WINLOGON_CREDENTIAL = 2, 379 EAP_CERTIFICATE_CREDENTIAL = 3, 380 EAP_SIM_CREDENTIAL = 4, 381 }} 382 STRUCT!{struct EapUsernamePasswordCredential { 383 username: LPWSTR, 384 password: LPWSTR, 385 }} 386 pub const CERTIFICATE_HASH_LENGTH: usize = 20; 387 STRUCT!{struct EapCertificateCredential { 388 certHash: [BYTE; CERTIFICATE_HASH_LENGTH], 389 password: LPWSTR, 390 }} 391 STRUCT!{struct EapSimCredential { 392 iccID: LPWSTR, 393 }} 394 UNION!{union EapCredentialTypeData { 395 [u32; 6] [u64; 4], 396 username_password username_password_mut: EapUsernamePasswordCredential, 397 certificate certificate_mut: EapCertificateCredential, 398 sim sim_mut: EapSimCredential, 399 }} 400 STRUCT!{struct EapCredential { 401 credType: EapCredentialType, 402 credData: EapCredentialTypeData, 403 }} 404