From 6f3815c0dad95a08903dc1859ccfe237d5003a4e Mon Sep 17 00:00:00 2001 From: Jouni Malinen Date: Fri, 17 Jul 2015 01:08:25 +0300 Subject: [PATCH] tests: WPA2-PSK-FT RRB protocol testing Signed-off-by: Jouni Malinen --- tests/hwsim/test_ap_ft.py | 91 +++++++++++++++++++++++++++++++++++++++ 1 file changed, 91 insertions(+) diff --git a/tests/hwsim/test_ap_ft.py b/tests/hwsim/test_ap_ft.py index ee8db3b9d..68a70a49c 100644 --- a/tests/hwsim/test_ap_ft.py +++ b/tests/hwsim/test_ap_ft.py @@ -821,3 +821,94 @@ def test_ap_ft_over_ds_proto(dev, apdev): # FT Action Response with FTIE SNonce mismatch msg['payload'] = binascii.unhexlify("0602020000000000" + "020000000400" + "0000" + "3603a1b201" + "3766000000000000000000000000000000000000c4e67ac1999bebd00ff4ae4d5dcaf87896bb060b469f7c78d49623fb395c3455ffffff6b693fe6f8d8c5dfac0a22344750775bd09437f98b238c9f87b97f790c0106000102030406030a6e6173312e77312e6669") hapd0.mgmt_tx(msg) + +def test_ap_ft_rrb(dev, apdev): + """WPA2-PSK-FT RRB protocol testing""" + ssid = "test-ft" + passphrase="12345678" + + params = ft_params1(ssid=ssid, passphrase=passphrase) + hapd0 = hostapd.add_ap(apdev[0]['ifname'], params) + + dev[0].connect(ssid, psk=passphrase, key_mgmt="FT-PSK", proto="WPA2", + scan_freq="2412") + + _dst_ll = binascii.unhexlify(apdev[0]['bssid'].replace(':','')) + _src_ll = binascii.unhexlify(dev[0].own_addr().replace(':','')) + proto = '\x89\x0d' + ehdr = _dst_ll + _src_ll + proto + + # Too short RRB frame + pkt = ehdr + '\x01' + if "OK" not in dev[0].request("DATA_TEST_FRAME " + binascii.hexlify(pkt)): + raise Exception("DATA_TEST_FRAME failed") + + # RRB discarded frame wikth unrecognized type + pkt = ehdr + '\x02' + '\x02' + '\x01\x00' + _src_ll + if "OK" not in dev[0].request("DATA_TEST_FRAME " + binascii.hexlify(pkt)): + raise Exception("DATA_TEST_FRAME failed") + + # RRB frame too short for action frame + pkt = ehdr + '\x01' + '\x02' + '\x01\x00' + _src_ll + if "OK" not in dev[0].request("DATA_TEST_FRAME " + binascii.hexlify(pkt)): + raise Exception("DATA_TEST_FRAME failed") + + # Too short RRB frame (not enough room for Action Frame body) + pkt = ehdr + '\x01' + '\x02' + '\x00\x00' + _src_ll + if "OK" not in dev[0].request("DATA_TEST_FRAME " + binascii.hexlify(pkt)): + raise Exception("DATA_TEST_FRAME failed") + + # Unexpected Action frame category + pkt = ehdr + '\x01' + '\x02' + '\x0e\x00' + _src_ll + '\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00' + if "OK" not in dev[0].request("DATA_TEST_FRAME " + binascii.hexlify(pkt)): + raise Exception("DATA_TEST_FRAME failed") + + # Unexpected Action in RRB Request + pkt = ehdr + '\x01' + '\x00' + '\x0e\x00' + _src_ll + '\x06\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00' + if "OK" not in dev[0].request("DATA_TEST_FRAME " + binascii.hexlify(pkt)): + raise Exception("DATA_TEST_FRAME failed") + + # Target AP address in RRB Request does not match with own address + pkt = ehdr + '\x01' + '\x00' + '\x0e\x00' + _src_ll + '\x06\x01\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00' + if "OK" not in dev[0].request("DATA_TEST_FRAME " + binascii.hexlify(pkt)): + raise Exception("DATA_TEST_FRAME failed") + + # Not enough room for status code in RRB Response + pkt = ehdr + '\x01' + '\x01' + '\x0e\x00' + _src_ll + '\x06\x01\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00' + if "OK" not in dev[0].request("DATA_TEST_FRAME " + binascii.hexlify(pkt)): + raise Exception("DATA_TEST_FRAME failed") + + # RRB discarded frame with unknown packet_type + pkt = ehdr + '\x01' + '\x02' + '\x0e\x00' + _src_ll + '\x06\x01\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00' + if "OK" not in dev[0].request("DATA_TEST_FRAME " + binascii.hexlify(pkt)): + raise Exception("DATA_TEST_FRAME failed") + + # RRB Response with non-zero status code; no STA match + pkt = ehdr + '\x01' + '\x01' + '\x10\x00' + _src_ll + '\x06\x01\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00' + '\xff\xff' + if "OK" not in dev[0].request("DATA_TEST_FRAME " + binascii.hexlify(pkt)): + raise Exception("DATA_TEST_FRAME failed") + + # RRB Response with zero status code and extra data; STA match + pkt = ehdr + '\x01' + '\x01' + '\x11\x00' + _src_ll + '\x06\x01' + _src_ll + '\x00\x00\x00\x00\x00\x00' + '\x00\x00' + '\x00' + if "OK" not in dev[0].request("DATA_TEST_FRAME " + binascii.hexlify(pkt)): + raise Exception("DATA_TEST_FRAME failed") + + # Too short PMK-R1 pull + pkt = ehdr + '\x01' + '\xc8' + '\x0e\x00' + _src_ll + '\x06\x01\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00' + if "OK" not in dev[0].request("DATA_TEST_FRAME " + binascii.hexlify(pkt)): + raise Exception("DATA_TEST_FRAME failed") + + # Too short PMK-R1 resp + pkt = ehdr + '\x01' + '\xc9' + '\x0e\x00' + _src_ll + '\x06\x01\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00' + if "OK" not in dev[0].request("DATA_TEST_FRAME " + binascii.hexlify(pkt)): + raise Exception("DATA_TEST_FRAME failed") + + # Too short PMK-R1 push + pkt = ehdr + '\x01' + '\xca' + '\x0e\x00' + _src_ll + '\x06\x01\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00' + if "OK" not in dev[0].request("DATA_TEST_FRAME " + binascii.hexlify(pkt)): + raise Exception("DATA_TEST_FRAME failed") + + # No matching R0KH address found for PMK-R0 pull response + pkt = ehdr + '\x01' + '\xc9' + '\x5a\x00' + _src_ll + '\x06\x01\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00' + 76*'\00' + if "OK" not in dev[0].request("DATA_TEST_FRAME " + binascii.hexlify(pkt)): + raise Exception("DATA_TEST_FRAME failed")