tests: PASN authentication using driver event as trigger
Signed-off-by: Jouni Malinen <j@w1.fi>
This commit is contained in:
parent
fe61861984
commit
62141825f6
2 changed files with 109 additions and 0 deletions
|
@ -1024,3 +1024,65 @@ def test_pasn_noauth_0(dev, apdev):
|
||||||
hapd = start_pasn_ap(apdev[0], params)
|
hapd = start_pasn_ap(apdev[0], params)
|
||||||
|
|
||||||
check_pasn_akmp_cipher(dev[0], hapd, "PASN", "CCMP", status=1)
|
check_pasn_akmp_cipher(dev[0], hapd, "PASN", "CCMP", status=1)
|
||||||
|
|
||||||
|
def test_pasn_sae_driver(dev, apdev):
|
||||||
|
"""PASN authentication using driver event as trigger"""
|
||||||
|
check_pasn_capab(dev[0])
|
||||||
|
check_sae_capab(dev[0])
|
||||||
|
|
||||||
|
params = hostapd.wpa2_params(ssid="test-pasn-sae",
|
||||||
|
passphrase="12345678")
|
||||||
|
params['ieee80211w'] = "2"
|
||||||
|
params['wpa_key_mgmt'] = 'SAE SAE-EXT-KEY PASN'
|
||||||
|
params['sae_pwe'] = "2"
|
||||||
|
hapd = start_pasn_ap(apdev[0], params)
|
||||||
|
bssid = hapd.own_addr()
|
||||||
|
|
||||||
|
params = hostapd.wpa2_params(ssid="test-pasn-sae",
|
||||||
|
passphrase="12345678")
|
||||||
|
params['wpa_key_mgmt'] = 'SAE PASN'
|
||||||
|
params['sae_pwe'] = "0"
|
||||||
|
hapd2 = start_pasn_ap(apdev[1], params)
|
||||||
|
bssid2 = hapd2.own_addr()
|
||||||
|
|
||||||
|
dev[0].scan_for_bss(bssid, freq=2412)
|
||||||
|
dev[0].scan_for_bss(bssid2, freq=2412)
|
||||||
|
|
||||||
|
try:
|
||||||
|
dev[0].set("sae_pwe", "2")
|
||||||
|
cmd = f"PASN_DRIVER auth {bssid} 02:11:22:33:44:55 {bssid2}"
|
||||||
|
if "OK" not in dev[0].request(cmd):
|
||||||
|
raise Exception("PASN_DRIVER failed")
|
||||||
|
|
||||||
|
ev = dev[0].wait_event(["PASN-AUTH-STATUS"], timeout=10)
|
||||||
|
if ev is None:
|
||||||
|
raise Exception("No PASN-AUTH-STATUS event (1)")
|
||||||
|
if f"{bssid} akmp=PASN, status=0" not in ev:
|
||||||
|
raise Exception("Unexpected event 1 contents: " + ev)
|
||||||
|
|
||||||
|
ev = dev[0].wait_event(["PASN-AUTH-STATUS"], timeout=10)
|
||||||
|
if ev is None:
|
||||||
|
raise Exception("No PASN-AUTH-STATUS event (2)")
|
||||||
|
if f"{bssid2} akmp=PASN, status=0" not in ev:
|
||||||
|
raise Exception("Unexpected event 2 contents: " + ev)
|
||||||
|
|
||||||
|
hapd2.disable()
|
||||||
|
time.sleep(1)
|
||||||
|
dev[0].dump_monitor()
|
||||||
|
|
||||||
|
if "OK" not in dev[0].request(cmd):
|
||||||
|
raise Exception("PASN_DRIVER failed")
|
||||||
|
|
||||||
|
ev = dev[0].wait_event(["PASN-AUTH-STATUS"], timeout=10)
|
||||||
|
if ev is None:
|
||||||
|
raise Exception("No PASN-AUTH-STATUS event (1b)")
|
||||||
|
if f"{bssid} akmp=PASN, status=0" not in ev:
|
||||||
|
raise Exception("Unexpected event 1b contents: " + ev)
|
||||||
|
|
||||||
|
ev = dev[0].wait_event(["PASN-AUTH-STATUS"], timeout=10)
|
||||||
|
if ev is None:
|
||||||
|
raise Exception("No PASN-AUTH-STATUS event (2b)")
|
||||||
|
if f"{bssid2} akmp=PASN, status=1" not in ev:
|
||||||
|
raise Exception("Unexpected event 2b contents: " + ev)
|
||||||
|
finally:
|
||||||
|
dev[0].set("sae_pwe", "0")
|
||||||
|
|
|
@ -11190,6 +11190,48 @@ static int wpas_ctrl_iface_pasn_deauthenticate(struct wpa_supplicant *wpa_s,
|
||||||
return wpas_pasn_deauthenticate(wpa_s, wpa_s->own_addr, bssid);
|
return wpas_pasn_deauthenticate(wpa_s, wpa_s->own_addr, bssid);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
|
#ifdef CONFIG_TESTING_OPTIONS
|
||||||
|
static int wpas_ctrl_iface_pasn_driver(struct wpa_supplicant *wpa_s,
|
||||||
|
const char *cmd)
|
||||||
|
{
|
||||||
|
union wpa_event_data event;
|
||||||
|
const char *pos = cmd;
|
||||||
|
u8 addr[ETH_ALEN];
|
||||||
|
|
||||||
|
os_memset(&event, 0, sizeof(event));
|
||||||
|
|
||||||
|
if (os_strncmp(pos, "auth ", 5) == 0)
|
||||||
|
event.pasn_auth.action = PASN_ACTION_AUTH;
|
||||||
|
else if (os_strncmp(pos, "del ", 4) == 0)
|
||||||
|
event.pasn_auth.action =
|
||||||
|
PASN_ACTION_DELETE_SECURE_RANGING_CONTEXT;
|
||||||
|
else
|
||||||
|
return -1;
|
||||||
|
|
||||||
|
pos = os_strchr(pos, ' ');
|
||||||
|
pos++;
|
||||||
|
while (hwaddr_aton(pos, addr) == 0) {
|
||||||
|
struct pasn_peer *peer;
|
||||||
|
|
||||||
|
if (event.pasn_auth.num_peers == WPAS_MAX_PASN_PEERS)
|
||||||
|
return -1;
|
||||||
|
peer = &event.pasn_auth.peer[event.pasn_auth.num_peers];
|
||||||
|
os_memcpy(peer->own_addr, wpa_s->own_addr, ETH_ALEN);
|
||||||
|
os_memcpy(peer->peer_addr, addr, ETH_ALEN);
|
||||||
|
event.pasn_auth.num_peers++;
|
||||||
|
|
||||||
|
pos = os_strchr(pos, ' ');
|
||||||
|
if (!pos)
|
||||||
|
break;
|
||||||
|
pos++;
|
||||||
|
}
|
||||||
|
|
||||||
|
wpa_supplicant_event(wpa_s, EVENT_PASN_AUTH, &event);
|
||||||
|
return 0;
|
||||||
|
}
|
||||||
|
#endif /* CONFIG_TESTING_OPTIONS */
|
||||||
|
|
||||||
#endif /* CONFIG_PASN */
|
#endif /* CONFIG_PASN */
|
||||||
|
|
||||||
|
|
||||||
|
@ -13087,6 +13129,11 @@ char * wpa_supplicant_ctrl_iface_process(struct wpa_supplicant *wpa_s,
|
||||||
} else if (os_strncmp(buf, "PASN_DEAUTH ", 12) == 0) {
|
} else if (os_strncmp(buf, "PASN_DEAUTH ", 12) == 0) {
|
||||||
if (wpas_ctrl_iface_pasn_deauthenticate(wpa_s, buf + 12) < 0)
|
if (wpas_ctrl_iface_pasn_deauthenticate(wpa_s, buf + 12) < 0)
|
||||||
reply_len = -1;
|
reply_len = -1;
|
||||||
|
#ifdef CONFIG_TESTING_OPTIONS
|
||||||
|
} else if (os_strncmp(buf, "PASN_DRIVER ", 12) == 0) {
|
||||||
|
if (wpas_ctrl_iface_pasn_driver(wpa_s, buf + 12) < 0)
|
||||||
|
reply_len = -1;
|
||||||
|
#endif /* CONFIG_TESTING_OPTIONS */
|
||||||
#endif /* CONFIG_PASN */
|
#endif /* CONFIG_PASN */
|
||||||
#ifndef CONFIG_NO_ROBUST_AV
|
#ifndef CONFIG_NO_ROBUST_AV
|
||||||
} else if (os_strncmp(buf, "MSCS ", 5) == 0) {
|
} else if (os_strncmp(buf, "MSCS ", 5) == 0) {
|
||||||
|
|
Loading…
Add table
Reference in a new issue