diff --git a/tests/hwsim/test_sae.py b/tests/hwsim/test_sae.py index d2c6243d2..e26bb0a34 100644 --- a/tests/hwsim/test_sae.py +++ b/tests/hwsim/test_sae.py @@ -1254,6 +1254,42 @@ def test_sae_proto_hostapd_status_127(dev, apdev): check_commit_status(hapd, 127, 1) check_commit_status(hapd, 0, 0) +def test_sae_proto_hostapd_valid_commit_after_fail(dev, apdev): + """SAE protocol testing with hostapd and valid commit after failed one""" + params = hostapd.wpa2_params(ssid="test-sae", passphrase="foofoofoo") + params['wpa_key_mgmt'] = 'SAE' + params['sae_groups'] = "19" + hapd = hostapd.add_ap(apdev[0], params) + hapd.set("ext_mgmt_frame_handling", "1") + bssid = hapd.own_addr().replace(':', '') + addr = "020000000000" + addr2 = "020000000001" + hdr = "b0003a01" + bssid + addr + bssid + "1000" + hdr2 = "b0003a01" + bssid + addr2 + bssid + "1000" + group = "1300" + scalar = "f7df19f4a7fef1d3b895ea1de150b7c5a7a705c8ebb31a52b623e0057908bd93" + element_x = "21931572027f2e953e2a49fab3d992944102cc95aa19515fc068b394fb25ae3c" + element_y = "cb4eeb94d7b0b789abfdb73a67ab9d6d5efa94dd553e0e724a6289821cbce530" + pw_id = "ff022130" + + hapd.request("MGMT_RX_PROCESS freq=2412 datarate=0 ssi_signal=-30 frame=" + hdr + "030001000000" + group + scalar + element_x + element_y + pw_id) + ev = hapd.wait_event(['MGMT-TX-STATUS'], timeout=1) + buf = ev.split(' ')[3].split('=')[1] + # Check for status = Unknown Password ID + if buf[48:] != '0300' + '0100' + '7b00': + raise Exception("Unexpected response to SAE commit with unknown password id: " + buf) + + hapd.request("MGMT_RX_PROCESS freq=2412 datarate=0 ssi_signal=-30 frame=" + hdr + "030001000000" + group + scalar + element_x + element_y) + + ev = hapd.wait_event(['MGMT-TX-STATUS'], timeout=1) + if ev is None: + raise Exception("No response to valid SAE commit") + buf = ev.split(' ')[3].split('=')[1] + # Check for status = Success + payload = buf[48:] + if payload[8:12] != '0000': + raise Exception("Unexpected Status Code for valid SAE commit: " + buf) + @remote_compatible def test_sae_no_ffc_by_default(dev, apdev): """SAE and default groups rejecting FFC"""