test_ap_pmf.py 3.9 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293
  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. wt.require_ap_pmf_mandatory(bssid)
  32. wt.require_sta_pmf(bssid, dev[0].p2p_interface_addr())
  33. wt.require_sta_pmf_mandatory(bssid, dev[1].p2p_interface_addr())
  34. def test_ap_pmf_optional(dev):
  35. """WPA2-PSK AP with PMF optional"""
  36. ssid = "test-pmf-optional"
  37. wt = Wlantest()
  38. wt.flush()
  39. wt.add_passphrase("12345678")
  40. params = hostapd.wpa2_params(ssid=ssid, passphrase="12345678")
  41. params["wpa_key_mgmt"] = "WPA-PSK";
  42. params["ieee80211w"] = "1";
  43. hostapd.add_ap(ap_ifname, params)
  44. dev[0].connect(ssid, psk="12345678", ieee80211w="1", key_mgmt="WPA-PSK WPA-PSK-SHA256", proto="WPA2")
  45. hwsim_utils.test_connectivity(dev[0].ifname, ap_ifname)
  46. dev[1].connect(ssid, psk="12345678", ieee80211w="2", key_mgmt="WPA-PSK WPA-PSK-SHA256", proto="WPA2")
  47. hwsim_utils.test_connectivity(dev[1].ifname, ap_ifname)
  48. wt.require_ap_pmf_optional(bssid)
  49. wt.require_sta_pmf(bssid, dev[0].p2p_interface_addr())
  50. wt.require_sta_pmf_mandatory(bssid, dev[1].p2p_interface_addr())
  51. def test_ap_pmf_optional_2akm(dev):
  52. """WPA2-PSK AP with PMF optional (2 AKMs)"""
  53. ssid = "test-pmf-optional-2akm"
  54. wt = Wlantest()
  55. wt.flush()
  56. wt.add_passphrase("12345678")
  57. params = hostapd.wpa2_params(ssid=ssid, passphrase="12345678")
  58. params["wpa_key_mgmt"] = "WPA-PSK WPA-PSK-SHA256";
  59. params["ieee80211w"] = "1";
  60. hostapd.add_ap(ap_ifname, params)
  61. dev[0].connect(ssid, psk="12345678", ieee80211w="1", key_mgmt="WPA-PSK WPA-PSK-SHA256", proto="WPA2")
  62. hwsim_utils.test_connectivity(dev[0].ifname, ap_ifname)
  63. dev[1].connect(ssid, psk="12345678", ieee80211w="2", key_mgmt="WPA-PSK WPA-PSK-SHA256", proto="WPA2")
  64. hwsim_utils.test_connectivity(dev[1].ifname, ap_ifname)
  65. wt.require_ap_pmf_optional(bssid)
  66. wt.require_sta_pmf(bssid, dev[0].p2p_interface_addr())
  67. wt.require_sta_key_mgmt(bssid, dev[0].p2p_interface_addr(), "PSK-SHA256")
  68. wt.require_sta_pmf_mandatory(bssid, dev[1].p2p_interface_addr())
  69. wt.require_sta_key_mgmt(bssid, dev[1].p2p_interface_addr(), "PSK-SHA256")
  70. def test_ap_pmf_negative(dev):
  71. """WPA2-PSK AP without PMF (negative test)"""
  72. ssid = "test-pmf-negative"
  73. wt = Wlantest()
  74. wt.flush()
  75. wt.add_passphrase("12345678")
  76. params = hostapd.wpa2_params(ssid=ssid, passphrase="12345678")
  77. hostapd.add_ap(ap_ifname, params)
  78. dev[0].connect(ssid, psk="12345678", ieee80211w="1", key_mgmt="WPA-PSK WPA-PSK-SHA256", proto="WPA2")
  79. hwsim_utils.test_connectivity(dev[0].ifname, ap_ifname)
  80. try:
  81. dev[1].connect(ssid, psk="12345678", ieee80211w="2", key_mgmt="WPA-PSK WPA-PSK-SHA256", proto="WPA2")
  82. hwsim_utils.test_connectivity(dev[1].ifname, ap_ifname)
  83. raise Exception("PMF required STA connected to no PMF AP")
  84. except Exception, e:
  85. logger.debug("Ignore expected exception: " + str(e))
  86. wt.require_ap_no_pmf(bssid)