test_ap_pmf.py 5.1 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118
  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()
  12. import hwsim_utils
  13. import hostapd
  14. from wlantest import Wlantest
  15. def test_ap_pmf_required(dev, apdev):
  16. """WPA2-PSK AP with PMF required"""
  17. ssid = "test-pmf-required"
  18. wt = Wlantest()
  19. wt.flush()
  20. wt.add_passphrase("12345678")
  21. params = hostapd.wpa2_params(ssid=ssid, passphrase="12345678")
  22. params["wpa_key_mgmt"] = "WPA-PSK-SHA256";
  23. params["ieee80211w"] = "2";
  24. hostapd.add_ap(apdev[0]['ifname'], params)
  25. dev[0].connect(ssid, psk="12345678", ieee80211w="1",
  26. key_mgmt="WPA-PSK WPA-PSK-SHA256", proto="WPA2",
  27. scan_freq="2412")
  28. hwsim_utils.test_connectivity(dev[0].ifname, apdev[0]['ifname'])
  29. dev[1].connect(ssid, psk="12345678", ieee80211w="2",
  30. key_mgmt="WPA-PSK WPA-PSK-SHA256", proto="WPA2",
  31. scan_freq="2412")
  32. hwsim_utils.test_connectivity(dev[1].ifname, apdev[0]['ifname'])
  33. hapd = hostapd.Hostapd(apdev[0]['ifname'])
  34. hapd.request("SA_QUERY " + dev[0].p2p_interface_addr())
  35. hapd.request("SA_QUERY " + dev[1].p2p_interface_addr())
  36. wt.require_ap_pmf_mandatory(apdev[0]['bssid'])
  37. wt.require_sta_pmf(apdev[0]['bssid'], dev[0].p2p_interface_addr())
  38. wt.require_sta_pmf_mandatory(apdev[0]['bssid'], dev[1].p2p_interface_addr())
  39. time.sleep(0.1)
  40. if wt.get_sta_counter("valid_saqueryresp_tx", apdev[0]['bssid'],
  41. dev[0].p2p_interface_addr()) < 1:
  42. raise Exception("STA did not reply to SA Query")
  43. if wt.get_sta_counter("valid_saqueryresp_tx", apdev[0]['bssid'],
  44. dev[1].p2p_interface_addr()) < 1:
  45. raise Exception("STA did not reply to SA Query")
  46. def test_ap_pmf_optional(dev, apdev):
  47. """WPA2-PSK AP with PMF optional"""
  48. ssid = "test-pmf-optional"
  49. wt = Wlantest()
  50. wt.flush()
  51. wt.add_passphrase("12345678")
  52. params = hostapd.wpa2_params(ssid=ssid, passphrase="12345678")
  53. params["wpa_key_mgmt"] = "WPA-PSK";
  54. params["ieee80211w"] = "1";
  55. hostapd.add_ap(apdev[0]['ifname'], params)
  56. dev[0].connect(ssid, psk="12345678", ieee80211w="1",
  57. key_mgmt="WPA-PSK WPA-PSK-SHA256", proto="WPA2",
  58. scan_freq="2412")
  59. hwsim_utils.test_connectivity(dev[0].ifname, apdev[0]['ifname'])
  60. dev[1].connect(ssid, psk="12345678", ieee80211w="2",
  61. key_mgmt="WPA-PSK WPA-PSK-SHA256", proto="WPA2",
  62. scan_freq="2412")
  63. hwsim_utils.test_connectivity(dev[1].ifname, apdev[0]['ifname'])
  64. wt.require_ap_pmf_optional(apdev[0]['bssid'])
  65. wt.require_sta_pmf(apdev[0]['bssid'], dev[0].p2p_interface_addr())
  66. wt.require_sta_pmf_mandatory(apdev[0]['bssid'], dev[1].p2p_interface_addr())
  67. def test_ap_pmf_optional_2akm(dev, apdev):
  68. """WPA2-PSK AP with PMF optional (2 AKMs)"""
  69. ssid = "test-pmf-optional-2akm"
  70. wt = Wlantest()
  71. wt.flush()
  72. wt.add_passphrase("12345678")
  73. params = hostapd.wpa2_params(ssid=ssid, passphrase="12345678")
  74. params["wpa_key_mgmt"] = "WPA-PSK WPA-PSK-SHA256";
  75. params["ieee80211w"] = "1";
  76. hostapd.add_ap(apdev[0]['ifname'], params)
  77. dev[0].connect(ssid, psk="12345678", ieee80211w="1",
  78. key_mgmt="WPA-PSK WPA-PSK-SHA256", proto="WPA2",
  79. scan_freq="2412")
  80. hwsim_utils.test_connectivity(dev[0].ifname, apdev[0]['ifname'])
  81. dev[1].connect(ssid, psk="12345678", ieee80211w="2",
  82. key_mgmt="WPA-PSK WPA-PSK-SHA256", proto="WPA2",
  83. scan_freq="2412")
  84. hwsim_utils.test_connectivity(dev[1].ifname, apdev[0]['ifname'])
  85. wt.require_ap_pmf_optional(apdev[0]['bssid'])
  86. wt.require_sta_pmf(apdev[0]['bssid'], dev[0].p2p_interface_addr())
  87. wt.require_sta_key_mgmt(apdev[0]['bssid'], dev[0].p2p_interface_addr(),
  88. "PSK-SHA256")
  89. wt.require_sta_pmf_mandatory(apdev[0]['bssid'], dev[1].p2p_interface_addr())
  90. wt.require_sta_key_mgmt(apdev[0]['bssid'], dev[1].p2p_interface_addr(),
  91. "PSK-SHA256")
  92. def test_ap_pmf_negative(dev, apdev):
  93. """WPA2-PSK AP without PMF (negative test)"""
  94. ssid = "test-pmf-negative"
  95. wt = Wlantest()
  96. wt.flush()
  97. wt.add_passphrase("12345678")
  98. params = hostapd.wpa2_params(ssid=ssid, passphrase="12345678")
  99. hostapd.add_ap(apdev[0]['ifname'], params)
  100. dev[0].connect(ssid, psk="12345678", ieee80211w="1",
  101. key_mgmt="WPA-PSK WPA-PSK-SHA256", proto="WPA2",
  102. scan_freq="2412")
  103. hwsim_utils.test_connectivity(dev[0].ifname, apdev[0]['ifname'])
  104. try:
  105. dev[1].connect(ssid, psk="12345678", ieee80211w="2",
  106. key_mgmt="WPA-PSK WPA-PSK-SHA256", proto="WPA2",
  107. scan_freq="2412")
  108. hwsim_utils.test_connectivity(dev[1].ifname, apdev[0]['ifname'])
  109. raise Exception("PMF required STA connected to no PMF AP")
  110. except Exception, e:
  111. logger.debug("Ignore expected exception: " + str(e))
  112. wt.require_ap_no_pmf(apdev[0]['bssid'])