tests: A single BSS with multiple key management options
[mech_eap.git] / tests / hwsim / test_ap_mixed.py
1 # Mixed AP module parameters enabled
2 # Copyright (c) 2014, Qualcomm Atheros, Inc.
3 #
4 # This software may be distributed under the terms of the BSD license.
5 # See README for more details.
6
7 import logging
8 logger = logging.getLogger()
9
10 import hostapd
11 import hwsim_utils
12
13 def test_ap_mixed_security(dev, apdev):
14     """WPA/WPA2 with PSK, EAP, SAE, FT in a single BSS"""
15     ssid = "test-mixed"
16     passphrase = 'qwertyuiop'
17     params = hostapd.wpa_mixed_params(ssid=ssid, passphrase=passphrase)
18     params['wpa_key_mgmt'] = "WPA-PSK WPA-PSK-SHA256 WPA-EAP WPA-EAP-SHA256 SAE FT-PSK FT-EAP FT-SAE"
19     params["ieee8021x"] = "1"
20     params["eap_server"] = "1"
21     params["eap_user_file"] = "auth_serv/eap_user.conf"
22     params['nas_identifier'] = "nas1.w1.fi"
23     hapd = hostapd.add_ap(apdev[0]['ifname'], params)
24
25     dev[0].connect(ssid, key_mgmt="WPA-PSK", proto="WPA", pairwise="TKIP",
26                    psk=passphrase, scan_freq="2412")
27     dev[1].connect(ssid, key_mgmt="WPA-EAP-SHA256", proto="WPA2", eap="GPSK",
28                    identity="gpsk user",
29                    password="abcdefghijklmnop0123456789abcdef",
30                    scan_freq="2412")
31     dev[2].connect(ssid, psk=passphrase, key_mgmt="SAE", scan_freq="2412")
32
33     bss = dev[0].get_bss(apdev[0]['bssid'])
34     if "[WPA-EAP+PSK-TKIP]" not in bss['flags']:
35         raise Exception("Unexpected flags (WPA): " + bss['flags'])
36     if "[WPA2-EAP+PSK+SAE+FT/EAP+FT/PSK+FT/SAE+EAP-SHA256+PSK-SHA256-CCMP]" not in bss['flags']:
37         raise Exception("Unexpected flags (WPA2): " + bss['flags'])
38
39     if dev[0].get_status_field("key_mgmt") != "WPA-PSK":
40         raise Exception("Unexpected key_mgmt(1)")
41     if dev[0].get_status_field("pairwise_cipher") != "TKIP":
42         raise Exception("Unexpected pairwise(1)")
43     if dev[1].get_status_field("key_mgmt") != "WPA2-EAP-SHA256":
44         raise Exception("Unexpected key_mgmt(2)")
45     if dev[2].get_status_field("key_mgmt") != "SAE":
46         raise Exception("Unexpected key_mgmt(3)")
47
48     hwsim_utils.test_connectivity(dev[0], dev[1])
49     hwsim_utils.test_connectivity(dev[1], dev[2])
50     hwsim_utils.test_connectivity(dev[0], dev[2])
51     for i in range(3):
52         hwsim_utils.test_connectivity(dev[i], hapd)
53         dev[i].request("DISCONNECT")
54
55     dev[0].connect(ssid, key_mgmt="WPA-PSK WPA-PSK-SHA256", psk=passphrase,
56                    scan_freq="2412")
57     dev[1].connect(ssid, key_mgmt="WPA-EAP", proto="WPA", eap="GPSK",
58                    identity="gpsk user",
59                    password="abcdefghijklmnop0123456789abcdef",
60                    scan_freq="2412")
61     dev[2].connect(ssid, key_mgmt="WPA-PSK WPA-PSK-SHA256 SAE", psk=passphrase,
62                    scan_freq="2412")
63
64     if dev[0].get_status_field("key_mgmt") != "WPA2-PSK-SHA256":
65         raise Exception("Unexpected key_mgmt(1b)")
66     if dev[0].get_status_field("pairwise_cipher") != "CCMP":
67         raise Exception("Unexpected pairwise(1b)")
68     if dev[1].get_status_field("key_mgmt") != "WPA/IEEE 802.1X/EAP":
69         raise Exception("Unexpected key_mgmt(2b)")
70     if dev[2].get_status_field("key_mgmt") != "SAE":
71         raise Exception("Unexpected key_mgmt(3b)")
72
73     for i in range(3):
74         dev[i].request("DISCONNECT")
75
76     dev[0].connect(ssid, key_mgmt="FT-PSK", psk=passphrase, scan_freq="2412")
77     dev[1].connect(ssid, key_mgmt="FT-EAP", eap="GPSK", identity="gpsk user",
78                    password="abcdefghijklmnop0123456789abcdef",
79                    scan_freq="2412")
80     dev[2].connect(ssid, psk=passphrase, key_mgmt="FT-SAE", scan_freq="2412")
81
82     if dev[0].get_status_field("key_mgmt") != "FT-PSK":
83         raise Exception("Unexpected key_mgmt(1c)")
84     if dev[1].get_status_field("key_mgmt") != "FT-EAP":
85         raise Exception("Unexpected key_mgmt(2c)")
86     if dev[2].get_status_field("key_mgmt") != "FT-SAE":
87         raise Exception("Unexpected key_mgmt(3c)")