test_ap_pmf.py 5.1 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116
  1. # Protected management frames tests
  2. # Copyright (c) 2013, Jouni Malinen <j@w1.fi>
  3. #
  4. # This software may be distributed under the terms of the BSD license.
  5. # See README for more details.
  6. import time
  7. import subprocess
  8. import logging
  9. logger = logging.getLogger()
  10. import hwsim_utils
  11. import hostapd
  12. from wlantest import Wlantest
  13. def test_ap_pmf_required(dev, apdev):
  14. """WPA2-PSK AP with PMF required"""
  15. ssid = "test-pmf-required"
  16. wt = Wlantest()
  17. wt.flush()
  18. wt.add_passphrase("12345678")
  19. params = hostapd.wpa2_params(ssid=ssid, passphrase="12345678")
  20. params["wpa_key_mgmt"] = "WPA-PSK-SHA256";
  21. params["ieee80211w"] = "2";
  22. hostapd.add_ap(apdev[0]['ifname'], params)
  23. dev[0].connect(ssid, psk="12345678", ieee80211w="1",
  24. key_mgmt="WPA-PSK WPA-PSK-SHA256", proto="WPA2",
  25. scan_freq="2412")
  26. hwsim_utils.test_connectivity(dev[0].ifname, apdev[0]['ifname'])
  27. dev[1].connect(ssid, psk="12345678", ieee80211w="2",
  28. key_mgmt="WPA-PSK WPA-PSK-SHA256", proto="WPA2",
  29. scan_freq="2412")
  30. hwsim_utils.test_connectivity(dev[1].ifname, apdev[0]['ifname'])
  31. hapd = hostapd.Hostapd(apdev[0]['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(apdev[0]['bssid'])
  35. wt.require_sta_pmf(apdev[0]['bssid'], dev[0].p2p_interface_addr())
  36. wt.require_sta_pmf_mandatory(apdev[0]['bssid'], dev[1].p2p_interface_addr())
  37. time.sleep(0.1)
  38. if wt.get_sta_counter("valid_saqueryresp_tx", apdev[0]['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", apdev[0]['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, apdev):
  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(apdev[0]['ifname'], params)
  54. dev[0].connect(ssid, psk="12345678", ieee80211w="1",
  55. key_mgmt="WPA-PSK WPA-PSK-SHA256", proto="WPA2",
  56. scan_freq="2412")
  57. hwsim_utils.test_connectivity(dev[0].ifname, apdev[0]['ifname'])
  58. dev[1].connect(ssid, psk="12345678", ieee80211w="2",
  59. key_mgmt="WPA-PSK WPA-PSK-SHA256", proto="WPA2",
  60. scan_freq="2412")
  61. hwsim_utils.test_connectivity(dev[1].ifname, apdev[0]['ifname'])
  62. wt.require_ap_pmf_optional(apdev[0]['bssid'])
  63. wt.require_sta_pmf(apdev[0]['bssid'], dev[0].p2p_interface_addr())
  64. wt.require_sta_pmf_mandatory(apdev[0]['bssid'], dev[1].p2p_interface_addr())
  65. def test_ap_pmf_optional_2akm(dev, apdev):
  66. """WPA2-PSK AP with PMF optional (2 AKMs)"""
  67. ssid = "test-pmf-optional-2akm"
  68. wt = Wlantest()
  69. wt.flush()
  70. wt.add_passphrase("12345678")
  71. params = hostapd.wpa2_params(ssid=ssid, passphrase="12345678")
  72. params["wpa_key_mgmt"] = "WPA-PSK WPA-PSK-SHA256";
  73. params["ieee80211w"] = "1";
  74. hostapd.add_ap(apdev[0]['ifname'], params)
  75. dev[0].connect(ssid, psk="12345678", ieee80211w="1",
  76. key_mgmt="WPA-PSK WPA-PSK-SHA256", proto="WPA2",
  77. scan_freq="2412")
  78. hwsim_utils.test_connectivity(dev[0].ifname, apdev[0]['ifname'])
  79. dev[1].connect(ssid, psk="12345678", ieee80211w="2",
  80. key_mgmt="WPA-PSK WPA-PSK-SHA256", proto="WPA2",
  81. scan_freq="2412")
  82. hwsim_utils.test_connectivity(dev[1].ifname, apdev[0]['ifname'])
  83. wt.require_ap_pmf_optional(apdev[0]['bssid'])
  84. wt.require_sta_pmf(apdev[0]['bssid'], dev[0].p2p_interface_addr())
  85. wt.require_sta_key_mgmt(apdev[0]['bssid'], dev[0].p2p_interface_addr(),
  86. "PSK-SHA256")
  87. wt.require_sta_pmf_mandatory(apdev[0]['bssid'], dev[1].p2p_interface_addr())
  88. wt.require_sta_key_mgmt(apdev[0]['bssid'], dev[1].p2p_interface_addr(),
  89. "PSK-SHA256")
  90. def test_ap_pmf_negative(dev, apdev):
  91. """WPA2-PSK AP without PMF (negative test)"""
  92. ssid = "test-pmf-negative"
  93. wt = Wlantest()
  94. wt.flush()
  95. wt.add_passphrase("12345678")
  96. params = hostapd.wpa2_params(ssid=ssid, passphrase="12345678")
  97. hostapd.add_ap(apdev[0]['ifname'], params)
  98. dev[0].connect(ssid, psk="12345678", ieee80211w="1",
  99. key_mgmt="WPA-PSK WPA-PSK-SHA256", proto="WPA2",
  100. scan_freq="2412")
  101. hwsim_utils.test_connectivity(dev[0].ifname, apdev[0]['ifname'])
  102. try:
  103. dev[1].connect(ssid, psk="12345678", ieee80211w="2",
  104. key_mgmt="WPA-PSK WPA-PSK-SHA256", proto="WPA2",
  105. scan_freq="2412")
  106. hwsim_utils.test_connectivity(dev[1].ifname, apdev[0]['ifname'])
  107. raise Exception("PMF required STA connected to no PMF AP")
  108. except Exception, e:
  109. logger.debug("Ignore expected exception: " + str(e))
  110. wt.require_ap_no_pmf(apdev[0]['bssid'])