1use shared::guiddef::GUID;
7use shared::minwindef::{BOOL, BYTE, DWORD};
8use um::winnt::LPWSTR;
9pub const eapPropCipherSuiteNegotiation: DWORD = 0x00000001;
10pub const eapPropMutualAuth: DWORD = 0x00000002;
11pub const eapPropIntegrity: DWORD = 0x00000004;
12pub const eapPropReplayProtection: DWORD = 0x00000008;
13pub const eapPropConfidentiality: DWORD = 0x00000010;
14pub const eapPropKeyDerivation: DWORD = 0x00000020;
15pub const eapPropKeyStrength64: DWORD = 0x00000040;
16pub const eapPropKeyStrength128: DWORD = 0x00000080;
17pub const eapPropKeyStrength256: DWORD = 0x00000100;
18pub const eapPropKeyStrength512: DWORD = 0x00000200;
19pub const eapPropKeyStrength1024: DWORD = 0x00000400;
20pub const eapPropDictionaryAttackResistance: DWORD = 0x00000800;
21pub const eapPropFastReconnect: DWORD = 0x00001000;
22pub const eapPropCryptoBinding: DWORD = 0x00002000;
23pub const eapPropSessionIndependence: DWORD = 0x00004000;
24pub const eapPropFragmentation: DWORD = 0x00008000;
25pub const eapPropChannelBinding: DWORD = 0x00010000;
26pub const eapPropNap: DWORD = 0x00020000;
27pub const eapPropStandalone: DWORD = 0x00040000;
28pub const eapPropMppeEncryption: DWORD = 0x00080000;
29pub const eapPropTunnelMethod: DWORD = 0x00100000;
30pub const eapPropSupportsConfig: DWORD = 0x00200000;
31pub const eapPropCertifiedMethod: DWORD = 0x00400000;
32pub const eapPropHiddenMethod: DWORD = 0x00800000;
33pub const eapPropMachineAuth: DWORD = 0x01000000;
34pub const eapPropUserAuth: DWORD = 0x02000000;
35pub const eapPropIdentityPrivacy: DWORD = 0x04000000;
36pub const eapPropMethodChaining: DWORD = 0x08000000;
37pub const eapPropSharedStateEquivalence: DWORD = 0x10000000;
38pub const eapPropReserved: DWORD = 0x80000000;
39pub const EAP_VALUENAME_PROPERTIES: &'static str = "Properties";
40pub type EAP_SESSIONID = DWORD;
41STRUCT!{struct EAP_TYPE {
42 type_: BYTE,
43 dwVendorId: DWORD,
44 dwVendorType: DWORD,
45}}
46STRUCT!{struct EAP_METHOD_TYPE {
47 eapType: EAP_TYPE,
48 dwAuthorId: DWORD,
49}}
50STRUCT!{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}}
57STRUCT!{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}}
64STRUCT!{struct EAP_METHOD_INFO_ARRAY {
65 dwNumberOfMethods: DWORD,
66 pEapMethods: *mut EAP_METHOD_INFO,
67}}
68STRUCT!{struct EAP_METHOD_INFO_ARRAY_EX {
69 dwNumberOfMethods: DWORD,
70 pEapMethods: *mut EAP_METHOD_INFO_EX,
71}}
72STRUCT!{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}}
82ENUM!{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}}
182pub type EapAttributeType = EAP_ATTRIBUTE_TYPE;
183STRUCT!{struct EAP_ATTRIBUTE {
184 eaType: EAP_ATTRIBUTE_TYPE,
185 dwLength: DWORD,
186 pValue: *mut BYTE,
187}}
188pub type EapAttribute = EAP_ATTRIBUTE;
189STRUCT!{struct EAP_ATTRIBUTES {
190 dwNumberOfAttributes: DWORD,
191 pAttribs: *mut EAP_ATTRIBUTE,
192}}
193pub type EapAttributes = EAP_ATTRIBUTES;
194pub const EAP_FLAG_Reserved1: DWORD = 0x00000001;
195pub const EAP_FLAG_NON_INTERACTIVE: DWORD = 0x00000002;
196pub const EAP_FLAG_LOGON: DWORD = 0x00000004;
197pub const EAP_FLAG_PREVIEW: DWORD = 0x00000008;
198pub const EAP_FLAG_Reserved2: DWORD = 0x00000010;
199pub const EAP_FLAG_MACHINE_AUTH: DWORD = 0x00000020;
200pub const EAP_FLAG_GUEST_ACCESS: DWORD = 0x00000040;
201pub const EAP_FLAG_Reserved3: DWORD = 0x00000080;
202pub const EAP_FLAG_Reserved4: DWORD = 0x00000100;
203pub const EAP_FLAG_RESUME_FROM_HIBERNATE: DWORD = 0x00000200;
204pub const EAP_FLAG_Reserved5: DWORD = 0x00000400;
205pub const EAP_FLAG_Reserved6: DWORD = 0x00000800;
206pub const EAP_FLAG_FULL_AUTH: DWORD = 0x00001000;
207pub const EAP_FLAG_PREFER_ALT_CREDENTIALS: DWORD = 0x00002000;
208pub const EAP_FLAG_Reserved7: DWORD = 0x00004000;
209pub const EAP_PEER_FLAG_HEALTH_STATE_CHANGE: DWORD = 0x00008000;
210pub const EAP_FLAG_SUPRESS_UI: DWORD = 0x00010000;
211pub const EAP_FLAG_PRE_LOGON: DWORD = 0x00020000;
212pub const EAP_FLAG_USER_AUTH: DWORD = 0x00040000;
213pub const EAP_FLAG_CONFG_READONLY: DWORD = 0x00080000;
214pub const EAP_FLAG_Reserved8: DWORD = 0x00100000;
215pub const EAP_FLAG_Reserved9: DWORD = 0x00400000;
216pub const EAP_FLAG_VPN: DWORD = 0x00800000;
217pub const EAP_CONFIG_INPUT_FIELD_PROPS_DEFAULT: DWORD = 0x00000000;
218pub const EAP_CONFIG_INPUT_FIELD_PROPS_NON_DISPLAYABLE: DWORD = 0x00000001;
219pub const EAP_CONFIG_INPUT_FIELD_PROPS_NON_PERSIST: DWORD = 0x00000002;
220pub const EAP_UI_INPUT_FIELD_PROPS_DEFAULT: DWORD = EAP_CONFIG_INPUT_FIELD_PROPS_DEFAULT;
221pub const EAP_UI_INPUT_FIELD_PROPS_NON_DISPLAYABLE: DWORD =
222 EAP_CONFIG_INPUT_FIELD_PROPS_NON_DISPLAYABLE;
223pub const EAP_UI_INPUT_FIELD_PROPS_NON_PERSIST: DWORD = 0x00000002;
224pub const EAP_UI_INPUT_FIELD_PROPS_READ_ONLY: DWORD = 0x00000004;
225ENUM!{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}}
236pub type PEAP_CONFIG_INPUT_FIELD_TYPE = *mut EAP_CONFIG_INPUT_FIELD_TYPE;
237pub const EAP_CREDENTIAL_VERSION: i32 = 1;
238pub const EAP_INTERACTIVE_UI_DATA_VERSION: i32 = 1;
239pub const EAPHOST_PEER_API_VERSION: i32 = 1;
240pub const EAPHOST_METHOD_API_VERSION: i32 = 1;
241pub const MAX_EAP_CONFIG_INPUT_FIELD_LENGTH: i32 = 256;
242pub const MAX_EAP_CONFIG_INPUT_FIELD_VALUE_LENGTH: i32 = 1024;
243STRUCT!{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}}
252pub type PEAP_CONFIG_INPUT_FIELD_DATA = *mut EAP_CONFIG_INPUT_FIELD_DATA;
253STRUCT!{struct EAP_CONFIG_INPUT_FIELD_ARRAY {
254 dwVersion: DWORD,
255 dwNumberOfFields: DWORD,
256 pFields: *mut EAP_CONFIG_INPUT_FIELD_DATA,
257}}
258pub type PEAP_CONFIG_INPUT_FIELD_ARRAY = *mut EAP_CONFIG_INPUT_FIELD_ARRAY;
259ENUM!{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}}
267pub type EAP_CRED_REQ = EAP_CONFIG_INPUT_FIELD_ARRAY;
268pub type EAP_CRED_RESP = EAP_CONFIG_INPUT_FIELD_ARRAY;
269pub type EAP_CRED_LOGON_REQ = EAP_CONFIG_INPUT_FIELD_ARRAY;
270pub type EAP_CRED_LOGON_RESP = EAP_CONFIG_INPUT_FIELD_ARRAY;
271STRUCT!{struct EAP_CRED_EXPIRY_REQ {
272 curCreds: EAP_CONFIG_INPUT_FIELD_ARRAY,
273 newCreds: EAP_CONFIG_INPUT_FIELD_ARRAY,
274}}
275pub type EAP_CRED_EXPIRY_RESP = EAP_CRED_EXPIRY_REQ;
276UNION!{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}}
282STRUCT!{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}}
289ENUM!{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}}
322ENUM!{enum EAP_METHOD_PROPERTY_VALUE_TYPE {
323 empvtBool = 0,
324 empvtDword = 1,
325 empvtString = 2,
326}}
327STRUCT!{struct EAP_METHOD_PROPERTY_VALUE_BOOL {
328 length: DWORD,
329 value: BOOL,
330}}
331STRUCT!{struct EAP_METHOD_PROPERTY_VALUE_DWORD {
332 length: DWORD,
333 value: DWORD,
334}}
335STRUCT!{struct EAP_METHOD_PROPERTY_VALUE_STRING {
336 length: DWORD,
337 value: *mut BYTE,
338}}
339UNION!{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}}
345STRUCT!{struct EAP_METHOD_PROPERTY {
346 eapMethodPropertyType: EAP_METHOD_PROPERTY_TYPE,
347 eapMethodPropertyValueType: EAP_METHOD_PROPERTY_VALUE_TYPE,
348 eapMethodPropertyValue: EAP_METHOD_PROPERTY_VALUE,
349}}
350STRUCT!{struct EAP_METHOD_PROPERTY_ARRAY {
351 dwNumberOfProperties: DWORD,
352 pMethodProperty: *mut EAP_METHOD_PROPERTY,
353}}
354STRUCT!{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}}
367STRUCT!{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}}
375ENUM!{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}}
382STRUCT!{struct EapUsernamePasswordCredential {
383 username: LPWSTR,
384 password: LPWSTR,
385}}
386pub const CERTIFICATE_HASH_LENGTH: usize = 20;
387STRUCT!{struct EapCertificateCredential {
388 certHash: [BYTE; CERTIFICATE_HASH_LENGTH],
389 password: LPWSTR,
390}}
391STRUCT!{struct EapSimCredential {
392 iccID: LPWSTR,
393}}
394UNION!{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}}
400STRUCT!{struct EapCredential {
401 credType: EapCredentialType,
402 credData: EapCredentialTypeData,
403}}