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