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"""