[PATCH 6/6] tests: Add PASN authentication with random own mac address
Veerendranath Jakkam
quic_vjakkam at quicinc.com
Sat Jan 7 23:51:53 PST 2023
Test case to check PASN authentication with random own mac address if
underlying driver/hardware supports it, otherwise skip the test case.
Signed-off-by: Vinay Gannevaram <quic_vganneva at quicinc.com>
Signed-off-by: Veerendranath Jakkam <quic_vjakkam at quicinc.com>
---
tests/hwsim/test_pasn.py | 45 +++++++++++++++++++++++++++++++++-------
1 file changed, 38 insertions(+), 7 deletions(-)
diff --git a/tests/hwsim/test_pasn.py b/tests/hwsim/test_pasn.py
index 6f7a806f5..826609c27 100644
--- a/tests/hwsim/test_pasn.py
+++ b/tests/hwsim/test_pasn.py
@@ -27,6 +27,11 @@ def check_pasn_capab(dev):
if "PASN" not in dev.get_capability("auth_alg"):
raise HwsimSkip("PASN not supported")
+def check_pasn_random_ta_capab(dev):
+ res = dev.get_capability("auth_rand_mac")
+ if res is None or 'RANDOM-TA' not in res:
+ raise HwsimSkip("PASN random TA not supported")
+
def pasn_ap_params(akmp="PASN", cipher="CCMP", group="19"):
params = {"ssid": "test-wpa2-pasn",
"wpa_passphrase": "12345678",
@@ -47,9 +52,13 @@ def start_pasn_ap(apdev, params):
raise HwsimSkip("PASN not supported")
raise
-def check_pasn_ptk(dev, hapd, cipher, fail_ptk=False, clear_keys=True):
+def check_pasn_ptk(dev, hapd, cipher, fail_ptk=False, clear_keys=True,
+ own_addr=None):
sta_ptksa = dev.get_ptksa(hapd.own_addr(), cipher)
- ap_ptksa = hapd.get_ptksa(dev.own_addr(), cipher)
+ if own_addr is None:
+ ap_ptksa = hapd.get_ptksa(dev.own_addr(), cipher)
+ else:
+ ap_ptksa = hapd.get_ptksa(own_addr, cipher)
if not (sta_ptksa and ap_ptksa):
if fail_ptk:
@@ -64,24 +73,33 @@ def check_pasn_ptk(dev, hapd, cipher, fail_ptk=False, clear_keys=True):
elif fail_ptk:
raise Exception("TK/KDK match although key derivation should have failed")
elif clear_keys:
- cmd = "PASN_DEAUTH bssid=%s" % hapd.own_addr()
+ if own_addr is None:
+ cmd = "PASN_DEAUTH bssid=%s" % hapd.own_addr()
+ else:
+ cmd = "PASN_DEAUTH bssid=%s own_addr=%s" % (hapd.own_addr(), own_addr)
dev.request(cmd)
# Wait a little to let the AP process the deauth
time.sleep(0.2)
sta_ptksa = dev.get_ptksa(hapd.own_addr(), cipher)
- ap_ptksa = hapd.get_ptksa(dev.own_addr(), cipher)
+ if own_addr is None:
+ ap_ptksa = hapd.get_ptksa(dev.own_addr(), cipher)
+ else:
+ ap_ptksa = hapd.get_ptksa(own_addr, cipher)
if sta_ptksa or ap_ptksa:
raise Exception("TK/KDK not deleted as expected")
def check_pasn_akmp_cipher(dev, hapd, akmp="PASN", cipher="CCMP",
group="19", status=0, fail=0, nid="",
- fail_ptk=False):
+ fail_ptk=False, own_addr=None):
dev.flush_scan_cache()
dev.scan(type="ONLY", freq=2412)
- cmd = "PASN_START bssid=%s akmp=%s cipher=%s group=%s" % (hapd.own_addr(), akmp, cipher, group)
+ if own_addr is None:
+ cmd = "PASN_START bssid=%s akmp=%s cipher=%s group=%s" % (hapd.own_addr(), akmp, cipher, group)
+ else:
+ cmd = "PASN_START bssid=%s own_addr=%s akmp=%s cipher=%s group=%s" % (hapd.own_addr(), own_addr, akmp, cipher, group)
if nid != "":
cmd += " nid=%s" % nid
@@ -106,7 +124,10 @@ def check_pasn_akmp_cipher(dev, hapd, akmp="PASN", cipher="CCMP",
if status:
return
- check_pasn_ptk(dev, hapd, cipher, fail_ptk)
+ if own_addr is None:
+ check_pasn_ptk(dev, hapd, cipher, fail_ptk)
+ else:
+ check_pasn_ptk(dev, hapd, cipher, fail_ptk, own_addr=own_addr)
@remote_compatible
def test_pasn_ccmp(dev, apdev):
@@ -852,3 +873,13 @@ def test_pasn_kdk_derivation(dev, apdev):
check_pasn_akmp_cipher(dev[0], hapd1, "PASN", "CCMP")
finally:
dev[0].set("force_kdk_derivation", "0")
+
+def test_pasn_random_mac(dev, apdev):
+ """PASN authentication with random mac address"""
+ check_pasn_capab(dev[0])
+ check_pasn_random_ta_capab(dev[0])
+
+ params = pasn_ap_params("PASN", "CCMP", "19")
+ hapd = start_pasn_ap(apdev[0], params)
+
+ check_pasn_akmp_cipher(dev[0], hapd, "PASN", "CCMP", own_addr="aa:cd:ef:ab:cd:ef")
--
2.25.1
More information about the Hostap
mailing list