test_ap_pmf.py 4.4 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103
  1. #!/usr/bin/python
  2. #
  3. # Protected management frames tests
  4. # Copyright (c) 2013, Jouni Malinen <j@w1.fi>
  5. #
  6. # This software may be distributed under the terms of the BSD license.
  7. # See README for more details.
  8. import time
  9. import subprocess
  10. import logging
  11. logger = logging.getLogger(__name__)
  12. import hwsim_utils
  13. import hostapd
  14. from wlantest import Wlantest
  15. ap_ifname = 'wlan2'
  16. bssid = "02:00:00:00:02:00"
  17. def test_ap_pmf_required(dev):
  18. """WPA2-PSK AP with PMF required"""
  19. ssid = "test-pmf-required"
  20. wt = Wlantest()
  21. wt.flush()
  22. wt.add_passphrase("12345678")
  23. params = hostapd.wpa2_params(ssid=ssid, passphrase="12345678")
  24. params["wpa_key_mgmt"] = "WPA-PSK-SHA256";
  25. params["ieee80211w"] = "2";
  26. hostapd.add_ap(ap_ifname, params)
  27. dev[0].connect(ssid, psk="12345678", ieee80211w="1", key_mgmt="WPA-PSK WPA-PSK-SHA256", proto="WPA2")
  28. hwsim_utils.test_connectivity(dev[0].ifname, ap_ifname)
  29. dev[1].connect(ssid, psk="12345678", ieee80211w="2", key_mgmt="WPA-PSK WPA-PSK-SHA256", proto="WPA2")
  30. hwsim_utils.test_connectivity(dev[1].ifname, ap_ifname)
  31. hapd = hostapd.Hostapd(ap_ifname)
  32. hapd.request("SA_QUERY " + dev[0].p2p_interface_addr())
  33. hapd.request("SA_QUERY " + dev[1].p2p_interface_addr())
  34. wt.require_ap_pmf_mandatory(bssid)
  35. wt.require_sta_pmf(bssid, dev[0].p2p_interface_addr())
  36. wt.require_sta_pmf_mandatory(bssid, dev[1].p2p_interface_addr())
  37. time.sleep(0.1)
  38. if wt.get_sta_counter("valid_saqueryresp_tx", bssid,
  39. dev[0].p2p_interface_addr()) < 1:
  40. raise Exception("STA did not reply to SA Query")
  41. if wt.get_sta_counter("valid_saqueryresp_tx", bssid,
  42. dev[1].p2p_interface_addr()) < 1:
  43. raise Exception("STA did not reply to SA Query")
  44. def test_ap_pmf_optional(dev):
  45. """WPA2-PSK AP with PMF optional"""
  46. ssid = "test-pmf-optional"
  47. wt = Wlantest()
  48. wt.flush()
  49. wt.add_passphrase("12345678")
  50. params = hostapd.wpa2_params(ssid=ssid, passphrase="12345678")
  51. params["wpa_key_mgmt"] = "WPA-PSK";
  52. params["ieee80211w"] = "1";
  53. hostapd.add_ap(ap_ifname, params)
  54. dev[0].connect(ssid, psk="12345678", ieee80211w="1", key_mgmt="WPA-PSK WPA-PSK-SHA256", proto="WPA2")
  55. hwsim_utils.test_connectivity(dev[0].ifname, ap_ifname)
  56. dev[1].connect(ssid, psk="12345678", ieee80211w="2", key_mgmt="WPA-PSK WPA-PSK-SHA256", proto="WPA2")
  57. hwsim_utils.test_connectivity(dev[1].ifname, ap_ifname)
  58. wt.require_ap_pmf_optional(bssid)
  59. wt.require_sta_pmf(bssid, dev[0].p2p_interface_addr())
  60. wt.require_sta_pmf_mandatory(bssid, dev[1].p2p_interface_addr())
  61. def test_ap_pmf_optional_2akm(dev):
  62. """WPA2-PSK AP with PMF optional (2 AKMs)"""
  63. ssid = "test-pmf-optional-2akm"
  64. wt = Wlantest()
  65. wt.flush()
  66. wt.add_passphrase("12345678")
  67. params = hostapd.wpa2_params(ssid=ssid, passphrase="12345678")
  68. params["wpa_key_mgmt"] = "WPA-PSK WPA-PSK-SHA256";
  69. params["ieee80211w"] = "1";
  70. hostapd.add_ap(ap_ifname, params)
  71. dev[0].connect(ssid, psk="12345678", ieee80211w="1", key_mgmt="WPA-PSK WPA-PSK-SHA256", proto="WPA2")
  72. hwsim_utils.test_connectivity(dev[0].ifname, ap_ifname)
  73. dev[1].connect(ssid, psk="12345678", ieee80211w="2", key_mgmt="WPA-PSK WPA-PSK-SHA256", proto="WPA2")
  74. hwsim_utils.test_connectivity(dev[1].ifname, ap_ifname)
  75. wt.require_ap_pmf_optional(bssid)
  76. wt.require_sta_pmf(bssid, dev[0].p2p_interface_addr())
  77. wt.require_sta_key_mgmt(bssid, dev[0].p2p_interface_addr(), "PSK-SHA256")
  78. wt.require_sta_pmf_mandatory(bssid, dev[1].p2p_interface_addr())
  79. wt.require_sta_key_mgmt(bssid, dev[1].p2p_interface_addr(), "PSK-SHA256")
  80. def test_ap_pmf_negative(dev):
  81. """WPA2-PSK AP without PMF (negative test)"""
  82. ssid = "test-pmf-negative"
  83. wt = Wlantest()
  84. wt.flush()
  85. wt.add_passphrase("12345678")
  86. params = hostapd.wpa2_params(ssid=ssid, passphrase="12345678")
  87. hostapd.add_ap(ap_ifname, params)
  88. dev[0].connect(ssid, psk="12345678", ieee80211w="1", key_mgmt="WPA-PSK WPA-PSK-SHA256", proto="WPA2")
  89. hwsim_utils.test_connectivity(dev[0].ifname, ap_ifname)
  90. try:
  91. dev[1].connect(ssid, psk="12345678", ieee80211w="2", key_mgmt="WPA-PSK WPA-PSK-SHA256", proto="WPA2")
  92. hwsim_utils.test_connectivity(dev[1].ifname, ap_ifname)
  93. raise Exception("PMF required STA connected to no PMF AP")
  94. except Exception, e:
  95. logger.debug("Ignore expected exception: " + str(e))
  96. wt.require_ap_no_pmf(bssid)