test_ap_pmf.py 4.8 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110
  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. 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. hwsim_utils.test_connectivity(dev[0].ifname, apdev[0]['ifname'])
  28. dev[1].connect(ssid, psk="12345678", ieee80211w="2",
  29. key_mgmt="WPA-PSK WPA-PSK-SHA256", proto="WPA2")
  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. hwsim_utils.test_connectivity(dev[0].ifname, apdev[0]['ifname'])
  57. dev[1].connect(ssid, psk="12345678", ieee80211w="2",
  58. key_mgmt="WPA-PSK WPA-PSK-SHA256", proto="WPA2")
  59. hwsim_utils.test_connectivity(dev[1].ifname, apdev[0]['ifname'])
  60. wt.require_ap_pmf_optional(apdev[0]['bssid'])
  61. wt.require_sta_pmf(apdev[0]['bssid'], dev[0].p2p_interface_addr())
  62. wt.require_sta_pmf_mandatory(apdev[0]['bssid'], dev[1].p2p_interface_addr())
  63. def test_ap_pmf_optional_2akm(dev, apdev):
  64. """WPA2-PSK AP with PMF optional (2 AKMs)"""
  65. ssid = "test-pmf-optional-2akm"
  66. wt = Wlantest()
  67. wt.flush()
  68. wt.add_passphrase("12345678")
  69. params = hostapd.wpa2_params(ssid=ssid, passphrase="12345678")
  70. params["wpa_key_mgmt"] = "WPA-PSK WPA-PSK-SHA256";
  71. params["ieee80211w"] = "1";
  72. hostapd.add_ap(apdev[0]['ifname'], params)
  73. dev[0].connect(ssid, psk="12345678", ieee80211w="1",
  74. key_mgmt="WPA-PSK WPA-PSK-SHA256", proto="WPA2")
  75. hwsim_utils.test_connectivity(dev[0].ifname, apdev[0]['ifname'])
  76. dev[1].connect(ssid, psk="12345678", ieee80211w="2",
  77. key_mgmt="WPA-PSK WPA-PSK-SHA256", proto="WPA2")
  78. hwsim_utils.test_connectivity(dev[1].ifname, apdev[0]['ifname'])
  79. wt.require_ap_pmf_optional(apdev[0]['bssid'])
  80. wt.require_sta_pmf(apdev[0]['bssid'], dev[0].p2p_interface_addr())
  81. wt.require_sta_key_mgmt(apdev[0]['bssid'], dev[0].p2p_interface_addr(),
  82. "PSK-SHA256")
  83. wt.require_sta_pmf_mandatory(apdev[0]['bssid'], dev[1].p2p_interface_addr())
  84. wt.require_sta_key_mgmt(apdev[0]['bssid'], dev[1].p2p_interface_addr(),
  85. "PSK-SHA256")
  86. def test_ap_pmf_negative(dev, apdev):
  87. """WPA2-PSK AP without PMF (negative test)"""
  88. ssid = "test-pmf-negative"
  89. wt = Wlantest()
  90. wt.flush()
  91. wt.add_passphrase("12345678")
  92. params = hostapd.wpa2_params(ssid=ssid, passphrase="12345678")
  93. hostapd.add_ap(apdev[0]['ifname'], params)
  94. dev[0].connect(ssid, psk="12345678", ieee80211w="1",
  95. key_mgmt="WPA-PSK WPA-PSK-SHA256", proto="WPA2")
  96. hwsim_utils.test_connectivity(dev[0].ifname, apdev[0]['ifname'])
  97. try:
  98. dev[1].connect(ssid, psk="12345678", ieee80211w="2",
  99. key_mgmt="WPA-PSK WPA-PSK-SHA256", proto="WPA2")
  100. hwsim_utils.test_connectivity(dev[1].ifname, apdev[0]['ifname'])
  101. raise Exception("PMF required STA connected to no PMF AP")
  102. except Exception, e:
  103. logger.debug("Ignore expected exception: " + str(e))
  104. wt.require_ap_no_pmf(apdev[0]['bssid'])