Merged the hostap_2.6 updates, and the Leap of Faith work, from the hostap_update...
[mech_eap.git] / libeap / tests / hwsim / test_peerkey.py
diff --git a/libeap/tests/hwsim/test_peerkey.py b/libeap/tests/hwsim/test_peerkey.py
new file mode 100644 (file)
index 0000000..6f9b716
--- /dev/null
@@ -0,0 +1,77 @@
+# PeerKey tests
+# Copyright (c) 2013-2015, Jouni Malinen <j@w1.fi>
+#
+# This software may be distributed under the terms of the BSD license.
+# See README for more details.
+
+from remotehost import remote_compatible
+import logging
+logger = logging.getLogger()
+import time
+
+import hwsim_utils
+import hostapd
+from utils import skip_with_fips
+from wlantest import Wlantest
+
+@remote_compatible
+def test_peerkey(dev, apdev):
+    """RSN AP and PeerKey between two STAs"""
+    ssid = "test-peerkey"
+    passphrase = "12345678"
+    params = hostapd.wpa2_params(ssid=ssid, passphrase=passphrase)
+    params['peerkey'] = "1"
+    hostapd.add_ap(apdev[0], params)
+
+    dev[0].connect(ssid, psk=passphrase, scan_freq="2412", peerkey=True)
+    dev[1].connect(ssid, psk=passphrase, scan_freq="2412", peerkey=True)
+    hwsim_utils.test_connectivity_sta(dev[0], dev[1])
+
+    dev[0].request("STKSTART " + dev[1].p2p_interface_addr())
+    time.sleep(0.5)
+    # NOTE: Actual use of the direct link (DLS) is not supported in
+    # mac80211_hwsim, so this operation fails at setting the keys after
+    # successfully completed 4-way handshake. This test case does allow the
+    # key negotiation part to be tested for coverage, though.
+
+def test_peerkey_unknown_peer(dev, apdev):
+    """RSN AP and PeerKey attempt with unknown peer"""
+    ssid = "test-peerkey"
+    passphrase = "12345678"
+    params = hostapd.wpa2_params(ssid=ssid, passphrase=passphrase)
+    params['peerkey'] = "1"
+    hostapd.add_ap(apdev[0], params)
+
+    dev[0].connect(ssid, psk=passphrase, scan_freq="2412", peerkey=True)
+    dev[1].connect(ssid, psk=passphrase, scan_freq="2412", peerkey=True)
+    hwsim_utils.test_connectivity_sta(dev[0], dev[1])
+
+    dev[0].request("STKSTART " + dev[2].p2p_interface_addr())
+    time.sleep(0.5)
+
+@remote_compatible
+def test_peerkey_pairwise_mismatch(dev, apdev):
+    """RSN TKIP+CCMP AP and PeerKey between two STAs using different ciphers"""
+    skip_with_fips(dev[0])
+    ssid = "test-peerkey"
+    passphrase = "12345678"
+    params = hostapd.wpa2_params(ssid=ssid, passphrase=passphrase)
+    params['peerkey'] = "1"
+    params['rsn_pairwise'] = "TKIP CCMP"
+    hapd = hostapd.add_ap(apdev[0], params)
+
+    Wlantest.setup(hapd)
+    wt = Wlantest()
+    wt.flush()
+    wt.add_passphrase("12345678")
+
+    dev[0].connect(ssid, psk=passphrase, scan_freq="2412", peerkey=True,
+                   pairwise="CCMP")
+    dev[1].connect(ssid, psk=passphrase, scan_freq="2412", peerkey=True,
+                   pairwise="TKIP")
+    hwsim_utils.test_connectivity_sta(dev[0], dev[1])
+
+    dev[0].request("STKSTART " + dev[1].p2p_interface_addr())
+    time.sleep(0.5)
+    dev[1].request("STKSTART " + dev[0].p2p_interface_addr())
+    time.sleep(0.5)