1 # Test cases for sigma_dut
2 # Copyright (c) 2017, Qualcomm Atheros, Inc.
4 # This software may be distributed under the terms of the BSD license.
5 # See README for more details.
8 logger
= logging
.getLogger()
16 from utils
import HwsimSkip
17 from hwsim
import HWSimRadio
18 from test_dpp
import check_dpp_capab
, update_hapd_config
19 from test_suite_b
import check_suite_b_192_capa
, suite_b_as_params
, suite_b_192_rsa_ap_params
21 def check_sigma_dut():
22 if not os
.path
.exists("./sigma_dut"):
23 raise HwsimSkip("sigma_dut not available")
25 def sigma_dut_cmd(cmd
, port
=9000, timeout
=2):
26 sock
= socket
.socket(socket
.AF_INET
, socket
.SOCK_STREAM
,
28 sock
.settimeout(timeout
)
29 addr
= ('127.0.0.1', port
)
31 sock
.send(cmd
+ "\r\n")
36 for line
in res
.splitlines():
37 if line
.startswith("status,RUNNING"):
39 elif line
.startswith("status,INVALID"):
41 elif line
.startswith("status,ERROR"):
43 elif line
.startswith("status,COMPLETE"):
45 if running
and not done
:
46 # Read the actual response
53 logger
.debug("sigma_dut: '%s' --> '%s'" % (cmd
, res
))
56 def sigma_dut_cmd_check(cmd
, port
=9000, timeout
=2):
57 res
= sigma_dut_cmd(cmd
, port
=port
, timeout
=timeout
)
58 if "COMPLETE" not in res
:
59 raise Exception("sigma_dut command failed: " + cmd
)
62 def start_sigma_dut(ifname
, debug
=False, hostapd_logdir
=None, cert_path
=None):
64 cmd
= [ './sigma_dut',
67 '-F', '../../hostapd/hostapd',
69 '-w', '/var/run/wpa_supplicant/',
74 cmd
+= [ '-H', hostapd_logdir
]
76 cmd
+= [ '-C', cert_path
]
77 sigma
= subprocess
.Popen(cmd
, stdout
=subprocess
.PIPE
,
78 stderr
=subprocess
.PIPE
)
81 res
= sigma_dut_cmd("HELLO")
87 def stop_sigma_dut(sigma
):
90 out
, err
= sigma
.communicate()
91 logger
.debug("sigma_dut stdout: " + str(out
))
92 logger
.debug("sigma_dut stderr: " + str(err
))
94 def sigma_dut_wait_connected(ifname
):
96 res
= sigma_dut_cmd("sta_is_connected,interface," + ifname
)
97 if "connected,1" in res
:
101 raise Exception("Connection did not complete")
103 def test_sigma_dut_basic(dev
, apdev
):
104 """sigma_dut basic functionality"""
105 sigma
= start_sigma_dut(dev
[0].ifname
)
107 res
= sigma_dut_cmd("UNKNOWN")
108 if "status,INVALID,errorCode,Unknown command" not in res
:
109 raise Exception("Unexpected sigma_dut response to unknown command")
111 tests
= [ ("ca_get_version", "status,COMPLETE,version,1.0"),
112 ("device_get_info", "status,COMPLETE,vendor"),
113 ("device_list_interfaces,interfaceType,foo", "status,ERROR"),
114 ("device_list_interfaces,interfaceType,802.11",
115 "status,COMPLETE,interfaceType,802.11,interfaceID," + dev
[0].ifname
) ]
116 for cmd
, response
in tests
:
117 res
= sigma_dut_cmd(cmd
)
118 if response
not in res
:
119 raise Exception("Unexpected %s response: %s" % (cmd
, res
))
121 stop_sigma_dut(sigma
)
123 def test_sigma_dut_open(dev
, apdev
):
124 """sigma_dut controlled open network association"""
126 run_sigma_dut_open(dev
, apdev
)
128 dev
[0].set("ignore_old_scan_res", "0")
130 def run_sigma_dut_open(dev
, apdev
):
131 ifname
= dev
[0].ifname
132 sigma
= start_sigma_dut(ifname
)
134 hapd
= hostapd
.add_ap(apdev
[0], { "ssid": "open" })
136 sigma_dut_cmd_check("sta_set_ip_config,interface,%s,dhcp,0,ip,127.0.0.11,mask,255.255.255.0" % ifname
)
137 sigma_dut_cmd_check("sta_set_encryption,interface,%s,ssid,%s,encpType,none" % (ifname
, "open"))
138 sigma_dut_cmd_check("sta_associate,interface,%s,ssid,%s" % (ifname
, "open"))
139 sigma_dut_wait_connected(ifname
)
140 sigma_dut_cmd_check("sta_get_ip_config,interface," + ifname
)
141 sigma_dut_cmd_check("sta_disconnect,interface," + ifname
)
142 sigma_dut_cmd_check("sta_reset_default,interface," + ifname
)
144 stop_sigma_dut(sigma
)
146 def test_sigma_dut_psk_pmf(dev
, apdev
):
147 """sigma_dut controlled PSK+PMF association"""
149 run_sigma_dut_psk_pmf(dev
, apdev
)
151 dev
[0].set("ignore_old_scan_res", "0")
153 def run_sigma_dut_psk_pmf(dev
, apdev
):
154 ifname
= dev
[0].ifname
155 sigma
= start_sigma_dut(ifname
)
157 ssid
= "test-pmf-required"
158 params
= hostapd
.wpa2_params(ssid
=ssid
, passphrase
="12345678")
159 params
["wpa_key_mgmt"] = "WPA-PSK-SHA256"
160 params
["ieee80211w"] = "2"
161 hapd
= hostapd
.add_ap(apdev
[0], params
)
163 sigma_dut_cmd_check("sta_reset_default,interface,%s,prog,PMF" % ifname
)
164 sigma_dut_cmd_check("sta_set_ip_config,interface,%s,dhcp,0,ip,127.0.0.11,mask,255.255.255.0" % ifname
)
165 sigma_dut_cmd_check("sta_set_psk,interface,%s,ssid,%s,passphrase,%s,encpType,aes-ccmp,keymgmttype,wpa2,PMF,Required" % (ifname
, "test-pmf-required", "12345678"))
166 sigma_dut_cmd_check("sta_associate,interface,%s,ssid,%s,channel,1" % (ifname
, "test-pmf-required"))
167 sigma_dut_wait_connected(ifname
)
168 sigma_dut_cmd_check("sta_get_ip_config,interface," + ifname
)
169 sigma_dut_cmd_check("sta_disconnect,interface," + ifname
)
170 sigma_dut_cmd_check("sta_reset_default,interface," + ifname
)
172 stop_sigma_dut(sigma
)
174 def test_sigma_dut_psk_pmf_bip_cmac_128(dev
, apdev
):
175 """sigma_dut controlled PSK+PMF association with BIP-CMAC-128"""
177 run_sigma_dut_psk_pmf_cipher(dev
, apdev
, "BIP-CMAC-128", "AES-128-CMAC")
179 dev
[0].set("ignore_old_scan_res", "0")
181 def test_sigma_dut_psk_pmf_bip_cmac_256(dev
, apdev
):
182 """sigma_dut controlled PSK+PMF association with BIP-CMAC-256"""
184 run_sigma_dut_psk_pmf_cipher(dev
, apdev
, "BIP-CMAC-256", "BIP-CMAC-256")
186 dev
[0].set("ignore_old_scan_res", "0")
188 def test_sigma_dut_psk_pmf_bip_gmac_128(dev
, apdev
):
189 """sigma_dut controlled PSK+PMF association with BIP-GMAC-128"""
191 run_sigma_dut_psk_pmf_cipher(dev
, apdev
, "BIP-GMAC-128", "BIP-GMAC-128")
193 dev
[0].set("ignore_old_scan_res", "0")
195 def test_sigma_dut_psk_pmf_bip_gmac_256(dev
, apdev
):
196 """sigma_dut controlled PSK+PMF association with BIP-GMAC-256"""
198 run_sigma_dut_psk_pmf_cipher(dev
, apdev
, "BIP-GMAC-256", "BIP-GMAC-256")
200 dev
[0].set("ignore_old_scan_res", "0")
202 def test_sigma_dut_psk_pmf_bip_gmac_256_mismatch(dev
, apdev
):
203 """sigma_dut controlled PSK+PMF association with BIP-GMAC-256 mismatch"""
205 run_sigma_dut_psk_pmf_cipher(dev
, apdev
, "BIP-GMAC-256", "AES-128-CMAC",
208 dev
[0].set("ignore_old_scan_res", "0")
210 def run_sigma_dut_psk_pmf_cipher(dev
, apdev
, sigma_cipher
, hostapd_cipher
,
212 ifname
= dev
[0].ifname
213 sigma
= start_sigma_dut(ifname
)
215 ssid
= "test-pmf-required"
216 params
= hostapd
.wpa2_params(ssid
=ssid
, passphrase
="12345678")
217 params
["wpa_key_mgmt"] = "WPA-PSK-SHA256"
218 params
["ieee80211w"] = "2"
219 params
["group_mgmt_cipher"] = hostapd_cipher
220 hapd
= hostapd
.add_ap(apdev
[0], params
)
222 sigma_dut_cmd_check("sta_reset_default,interface,%s,prog,PMF" % ifname
)
223 sigma_dut_cmd_check("sta_set_ip_config,interface,%s,dhcp,0,ip,127.0.0.11,mask,255.255.255.0" % ifname
)
224 sigma_dut_cmd_check("sta_set_psk,interface,%s,ssid,%s,passphrase,%s,encpType,aes-ccmp,keymgmttype,wpa2,PMF,Required,GroupMgntCipher,%s" % (ifname
, "test-pmf-required", "12345678", sigma_cipher
))
225 sigma_dut_cmd_check("sta_associate,interface,%s,ssid,%s,channel,1" % (ifname
, "test-pmf-required"))
227 ev
= dev
[0].wait_event(["CTRL-EVENT-NETWORK-NOT-FOUND",
228 "CTRL-EVENT-CONNECTED"], timeout
=10)
230 raise Exception("Network selection result not indicated")
231 if "CTRL-EVENT-CONNECTED" in ev
:
232 raise Exception("Unexpected connection")
233 res
= sigma_dut_cmd("sta_is_connected,interface," + ifname
)
234 if "connected,1" in res
:
235 raise Exception("Connection reported")
237 sigma_dut_wait_connected(ifname
)
238 sigma_dut_cmd_check("sta_get_ip_config,interface," + ifname
)
240 sigma_dut_cmd_check("sta_disconnect,interface," + ifname
)
241 sigma_dut_cmd_check("sta_reset_default,interface," + ifname
)
243 stop_sigma_dut(sigma
)
245 def test_sigma_dut_sae(dev
, apdev
):
246 """sigma_dut controlled SAE association"""
247 if "SAE" not in dev
[0].get_capability("auth_alg"):
248 raise HwsimSkip("SAE not supported")
250 ifname
= dev
[0].ifname
251 sigma
= start_sigma_dut(ifname
)
254 params
= hostapd
.wpa2_params(ssid
=ssid
, passphrase
="12345678")
255 params
['wpa_key_mgmt'] = 'SAE'
256 params
["ieee80211w"] = "2"
257 hapd
= hostapd
.add_ap(apdev
[0], params
)
259 sigma_dut_cmd_check("sta_reset_default,interface,%s" % ifname
)
260 sigma_dut_cmd_check("sta_set_ip_config,interface,%s,dhcp,0,ip,127.0.0.11,mask,255.255.255.0" % ifname
)
261 sigma_dut_cmd_check("sta_set_security,interface,%s,ssid,%s,passphrase,%s,type,SAE,encpType,aes-ccmp,keymgmttype,wpa2" % (ifname
, "test-sae", "12345678"))
262 sigma_dut_cmd_check("sta_associate,interface,%s,ssid,%s,channel,1" % (ifname
, "test-sae"))
263 sigma_dut_wait_connected(ifname
)
264 sigma_dut_cmd_check("sta_get_ip_config,interface," + ifname
)
265 if dev
[0].get_status_field('sae_group') != '19':
266 raise Exception("Expected default SAE group not used")
267 sigma_dut_cmd_check("sta_disconnect,interface," + ifname
)
269 sigma_dut_cmd_check("sta_reset_default,interface," + ifname
)
271 sigma_dut_cmd_check("sta_set_ip_config,interface,%s,dhcp,0,ip,127.0.0.11,mask,255.255.255.0" % ifname
)
272 sigma_dut_cmd_check("sta_set_security,interface,%s,ssid,%s,passphrase,%s,type,SAE,encpType,aes-ccmp,keymgmttype,wpa2,ECGroupID,20" % (ifname
, "test-sae", "12345678"))
273 sigma_dut_cmd_check("sta_associate,interface,%s,ssid,%s,channel,1" % (ifname
, "test-sae"))
274 sigma_dut_wait_connected(ifname
)
275 sigma_dut_cmd_check("sta_get_ip_config,interface," + ifname
)
276 if dev
[0].get_status_field('sae_group') != '20':
277 raise Exception("Expected SAE group not used")
278 sigma_dut_cmd_check("sta_disconnect,interface," + ifname
)
279 sigma_dut_cmd_check("sta_reset_default,interface," + ifname
)
281 stop_sigma_dut(sigma
)
283 def test_sigma_dut_sae_password(dev
, apdev
):
284 """sigma_dut controlled SAE association and long password"""
285 if "SAE" not in dev
[0].get_capability("auth_alg"):
286 raise HwsimSkip("SAE not supported")
288 ifname
= dev
[0].ifname
289 sigma
= start_sigma_dut(ifname
)
293 params
= hostapd
.wpa2_params(ssid
=ssid
)
294 params
['sae_password'] = 100*'B'
295 params
['wpa_key_mgmt'] = 'SAE'
296 params
["ieee80211w"] = "2"
297 hapd
= hostapd
.add_ap(apdev
[0], params
)
299 sigma_dut_cmd_check("sta_reset_default,interface,%s" % ifname
)
300 sigma_dut_cmd_check("sta_set_ip_config,interface,%s,dhcp,0,ip,127.0.0.11,mask,255.255.255.0" % ifname
)
301 sigma_dut_cmd_check("sta_set_security,interface,%s,ssid,%s,passphrase,%s,type,SAE,encpType,aes-ccmp,keymgmttype,wpa2" % (ifname
, "test-sae", 100*'B'))
302 sigma_dut_cmd_check("sta_associate,interface,%s,ssid,%s,channel,1" % (ifname
, "test-sae"))
303 sigma_dut_wait_connected(ifname
)
304 sigma_dut_cmd_check("sta_get_ip_config,interface," + ifname
)
305 sigma_dut_cmd_check("sta_disconnect,interface," + ifname
)
306 sigma_dut_cmd_check("sta_reset_default,interface," + ifname
)
308 stop_sigma_dut(sigma
)
310 def test_sigma_dut_sta_override_rsne(dev
, apdev
):
311 """sigma_dut and RSNE override on STA"""
313 run_sigma_dut_sta_override_rsne(dev
, apdev
)
315 dev
[0].set("ignore_old_scan_res", "0")
317 def run_sigma_dut_sta_override_rsne(dev
, apdev
):
318 ifname
= dev
[0].ifname
319 sigma
= start_sigma_dut(ifname
)
322 params
= hostapd
.wpa2_params(ssid
=ssid
, passphrase
="12345678")
323 hapd
= hostapd
.add_ap(apdev
[0], params
)
325 sigma_dut_cmd_check("sta_set_ip_config,interface,%s,dhcp,0,ip,127.0.0.11,mask,255.255.255.0" % ifname
)
327 tests
= [ "30120100000fac040100000fac040100000fac02",
328 "30140100000fac040100000fac040100000fac02ffff" ]
330 sigma_dut_cmd_check("sta_set_security,interface,%s,ssid,%s,type,PSK,passphrase,%s,EncpType,aes-ccmp,KeyMgmtType,wpa2" % (ifname
, "test-psk", "12345678"))
331 sigma_dut_cmd_check("dev_configure_ie,interface,%s,IE_Name,RSNE,Contents,%s" % (ifname
, test
))
332 sigma_dut_cmd_check("sta_associate,interface,%s,ssid,%s,channel,1" % (ifname
, "test-psk"))
333 sigma_dut_wait_connected(ifname
)
334 sigma_dut_cmd_check("sta_disconnect,interface," + ifname
)
335 dev
[0].dump_monitor()
337 sigma_dut_cmd_check("sta_set_security,interface,%s,ssid,%s,type,PSK,passphrase,%s,EncpType,aes-ccmp,KeyMgmtType,wpa2" % (ifname
, "test-psk", "12345678"))
338 sigma_dut_cmd_check("dev_configure_ie,interface,%s,IE_Name,RSNE,Contents,300101" % ifname
)
339 sigma_dut_cmd_check("sta_associate,interface,%s,ssid,%s,channel,1" % (ifname
, "test-psk"))
341 ev
= dev
[0].wait_event(["CTRL-EVENT-ASSOC-REJECT"])
343 raise Exception("Association rejection not reported")
344 if "status_code=40" not in ev
:
345 raise Exception("Unexpected status code: " + ev
)
347 sigma_dut_cmd_check("sta_reset_default,interface," + ifname
)
349 stop_sigma_dut(sigma
)
351 def test_sigma_dut_ap_psk(dev
, apdev
):
352 """sigma_dut controlled AP"""
353 with
HWSimRadio() as (radio
, iface
):
354 sigma
= start_sigma_dut(iface
)
356 sigma_dut_cmd_check("ap_reset_default")
357 sigma_dut_cmd_check("ap_set_wireless,NAME,AP,CHANNEL,1,SSID,test-psk,MODE,11ng")
358 sigma_dut_cmd_check("ap_set_security,NAME,AP,KEYMGNT,WPA2-PSK,PSK,12345678")
359 sigma_dut_cmd_check("ap_config_commit,NAME,AP")
361 dev
[0].connect("test-psk", psk
="12345678", scan_freq
="2412")
363 sigma_dut_cmd_check("ap_reset_default")
365 stop_sigma_dut(sigma
)
367 def test_sigma_dut_ap_pskhex(dev
, apdev
, params
):
368 """sigma_dut controlled AP and PSKHEX"""
369 logdir
= os
.path
.join(params
['logdir'],
370 "sigma_dut_ap_pskhex.sigma-hostapd")
371 with
HWSimRadio() as (radio
, iface
):
372 sigma
= start_sigma_dut(iface
, hostapd_logdir
=logdir
)
374 psk
= "0123456789abcdef0123456789abcdef0123456789abcdef0123456789abcdef"
375 sigma_dut_cmd_check("ap_reset_default")
376 sigma_dut_cmd_check("ap_set_wireless,NAME,AP,CHANNEL,1,SSID,test-psk,MODE,11ng")
377 sigma_dut_cmd_check("ap_set_security,NAME,AP,KEYMGNT,WPA2-PSK,PSKHEX," + psk
)
378 sigma_dut_cmd_check("ap_config_commit,NAME,AP")
380 dev
[0].connect("test-psk", raw_psk
=psk
, scan_freq
="2412")
382 sigma_dut_cmd_check("ap_reset_default")
384 stop_sigma_dut(sigma
)
386 def test_sigma_dut_suite_b(dev
, apdev
, params
):
387 """sigma_dut controlled STA Suite B"""
388 check_suite_b_192_capa(dev
)
389 logdir
= params
['logdir']
391 with
open("auth_serv/ec2-ca.pem", "r") as f
:
392 with
open(os
.path
.join(logdir
, "suite_b_ca.pem"), "w") as f2
:
395 with
open("auth_serv/ec2-user.pem", "r") as f
:
396 with
open("auth_serv/ec2-user.key", "r") as f2
:
397 with
open(os
.path
.join(logdir
, "suite_b.pem"), "w") as f3
:
401 dev
[0].flush_scan_cache()
402 params
= suite_b_as_params()
403 params
['ca_cert'] = 'auth_serv/ec2-ca.pem'
404 params
['server_cert'] = 'auth_serv/ec2-server.pem'
405 params
['private_key'] = 'auth_serv/ec2-server.key'
406 params
['openssl_ciphers'] = 'SUITEB192'
407 hostapd
.add_ap(apdev
[1], params
)
409 params
= { "ssid": "test-suite-b",
411 "wpa_key_mgmt": "WPA-EAP-SUITE-B-192",
412 "rsn_pairwise": "GCMP-256",
413 "group_mgmt_cipher": "BIP-GMAC-256",
416 'auth_server_addr': "127.0.0.1",
417 'auth_server_port': "18129",
418 'auth_server_shared_secret': "radius",
419 'nas_identifier': "nas.w1.fi" }
420 hapd
= hostapd
.add_ap(apdev
[0], params
)
422 ifname
= dev
[0].ifname
423 sigma
= start_sigma_dut(ifname
, cert_path
=logdir
)
425 sigma_dut_cmd_check("sta_reset_default,interface,%s,prog,PMF" % ifname
)
426 sigma_dut_cmd_check("sta_set_ip_config,interface,%s,dhcp,0,ip,127.0.0.11,mask,255.255.255.0" % ifname
)
427 sigma_dut_cmd_check("sta_set_security,type,eaptls,interface,%s,ssid,%s,PairwiseCipher,AES-GCMP-256,GroupCipher,AES-GCMP-256,GroupMgntCipher,BIP-GMAC-256,keymgmttype,SuiteB,PMF,Required,clientCertificate,suite_b.pem,trustedRootCA,suite_b_ca.pem,CertType,ECC" % (ifname
, "test-suite-b"))
428 sigma_dut_cmd_check("sta_associate,interface,%s,ssid,%s,channel,1" % (ifname
, "test-suite-b"))
429 sigma_dut_wait_connected(ifname
)
430 sigma_dut_cmd_check("sta_get_ip_config,interface," + ifname
)
431 sigma_dut_cmd_check("sta_disconnect,interface," + ifname
)
432 sigma_dut_cmd_check("sta_reset_default,interface," + ifname
)
434 stop_sigma_dut(sigma
)
436 def test_sigma_dut_suite_b_rsa(dev
, apdev
, params
):
437 """sigma_dut controlled STA Suite B (RSA)"""
438 check_suite_b_192_capa(dev
)
439 logdir
= params
['logdir']
441 with
open("auth_serv/rsa3072-ca.pem", "r") as f
:
442 with
open(os
.path
.join(logdir
, "suite_b_ca_rsa.pem"), "w") as f2
:
445 with
open("auth_serv/rsa3072-user.pem", "r") as f
:
446 with
open("auth_serv/rsa3072-user.key", "r") as f2
:
447 with
open(os
.path
.join(logdir
, "suite_b_rsa.pem"), "w") as f3
:
451 dev
[0].flush_scan_cache()
452 params
= suite_b_192_rsa_ap_params()
453 hapd
= hostapd
.add_ap(apdev
[0], params
)
455 ifname
= dev
[0].ifname
456 sigma
= start_sigma_dut(ifname
, cert_path
=logdir
)
458 cmd
= "sta_set_security,type,eaptls,interface,%s,ssid,%s,PairwiseCipher,AES-GCMP-256,GroupCipher,AES-GCMP-256,GroupMgntCipher,BIP-GMAC-256,keymgmttype,SuiteB,PMF,Required,clientCertificate,suite_b_rsa.pem,trustedRootCA,suite_b_ca_rsa.pem,CertType,RSA" % (ifname
, "test-suite-b")
461 ",TLSCipher,TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384",
462 ",TLSCipher,TLS_DHE_RSA_WITH_AES_256_GCM_SHA384" ]
464 sigma_dut_cmd_check("sta_reset_default,interface,%s,prog,PMF" % ifname
)
465 sigma_dut_cmd_check("sta_set_ip_config,interface,%s,dhcp,0,ip,127.0.0.11,mask,255.255.255.0" % ifname
)
466 sigma_dut_cmd_check(cmd
+ extra
)
467 sigma_dut_cmd_check("sta_associate,interface,%s,ssid,%s,channel,1" % (ifname
, "test-suite-b"))
468 sigma_dut_wait_connected(ifname
)
469 sigma_dut_cmd_check("sta_get_ip_config,interface," + ifname
)
470 sigma_dut_cmd_check("sta_disconnect,interface," + ifname
)
471 sigma_dut_cmd_check("sta_reset_default,interface," + ifname
)
473 stop_sigma_dut(sigma
)
475 def test_sigma_dut_ap_suite_b(dev
, apdev
, params
):
476 """sigma_dut controlled AP Suite B"""
477 check_suite_b_192_capa(dev
)
478 logdir
= os
.path
.join(params
['logdir'],
479 "sigma_dut_ap_suite_b.sigma-hostapd")
480 params
= suite_b_as_params()
481 params
['ca_cert'] = 'auth_serv/ec2-ca.pem'
482 params
['server_cert'] = 'auth_serv/ec2-server.pem'
483 params
['private_key'] = 'auth_serv/ec2-server.key'
484 params
['openssl_ciphers'] = 'SUITEB192'
485 hostapd
.add_ap(apdev
[1], params
)
486 with
HWSimRadio() as (radio
, iface
):
487 sigma
= start_sigma_dut(iface
, hostapd_logdir
=logdir
)
489 sigma_dut_cmd_check("ap_reset_default")
490 sigma_dut_cmd_check("ap_set_wireless,NAME,AP,CHANNEL,1,SSID,test-suite-b,MODE,11ng")
491 sigma_dut_cmd_check("ap_set_radius,NAME,AP,IPADDR,127.0.0.1,PORT,18129,PASSWORD,radius")
492 sigma_dut_cmd_check("ap_set_security,NAME,AP,KEYMGNT,SuiteB,PMF,Required")
493 sigma_dut_cmd_check("ap_config_commit,NAME,AP")
495 dev
[0].connect("test-suite-b", key_mgmt
="WPA-EAP-SUITE-B-192",
497 openssl_ciphers
="SUITEB192",
498 eap
="TLS", identity
="tls user",
499 ca_cert
="auth_serv/ec2-ca.pem",
500 client_cert
="auth_serv/ec2-user.pem",
501 private_key
="auth_serv/ec2-user.key",
502 pairwise
="GCMP-256", group
="GCMP-256",
505 sigma_dut_cmd_check("ap_reset_default")
507 stop_sigma_dut(sigma
)
509 def test_sigma_dut_ap_cipher_gcmp_128(dev
, apdev
, params
):
510 """sigma_dut controlled AP with GCMP-128/BIP-GMAC-128 cipher"""
511 run_sigma_dut_ap_cipher(dev
, apdev
, params
, "AES-GCMP-128", "BIP-GMAC-128",
514 def test_sigma_dut_ap_cipher_gcmp_256(dev
, apdev
, params
):
515 """sigma_dut controlled AP with GCMP-256/BIP-GMAC-256 cipher"""
516 run_sigma_dut_ap_cipher(dev
, apdev
, params
, "AES-GCMP-256", "BIP-GMAC-256",
519 def test_sigma_dut_ap_cipher_ccmp_128(dev
, apdev
, params
):
520 """sigma_dut controlled AP with CCMP-128/BIP-CMAC-128 cipher"""
521 run_sigma_dut_ap_cipher(dev
, apdev
, params
, "AES-CCMP-128", "BIP-CMAC-128",
524 def test_sigma_dut_ap_cipher_ccmp_256(dev
, apdev
, params
):
525 """sigma_dut controlled AP with CCMP-256/BIP-CMAC-256 cipher"""
526 run_sigma_dut_ap_cipher(dev
, apdev
, params
, "AES-CCMP-256", "BIP-CMAC-256",
529 def test_sigma_dut_ap_cipher_ccmp_gcmp_1(dev
, apdev
, params
):
530 """sigma_dut controlled AP with CCMP-128+GCMP-256 ciphers (1)"""
531 run_sigma_dut_ap_cipher(dev
, apdev
, params
, "AES-CCMP-128 AES-GCMP-256",
532 "BIP-GMAC-256", "CCMP")
534 def test_sigma_dut_ap_cipher_ccmp_gcmp_2(dev
, apdev
, params
):
535 """sigma_dut controlled AP with CCMP-128+GCMP-256 ciphers (2)"""
536 run_sigma_dut_ap_cipher(dev
, apdev
, params
, "AES-CCMP-128 AES-GCMP-256",
537 "BIP-GMAC-256", "GCMP-256", "CCMP")
539 def test_sigma_dut_ap_cipher_gcmp_256_group_ccmp(dev
, apdev
, params
):
540 """sigma_dut controlled AP with GCMP-256/CCMP/BIP-GMAC-256 cipher"""
541 run_sigma_dut_ap_cipher(dev
, apdev
, params
, "AES-GCMP-256", "BIP-GMAC-256",
542 "GCMP-256", "CCMP", "AES-CCMP-128")
544 def run_sigma_dut_ap_cipher(dev
, apdev
, params
, ap_pairwise
, ap_group_mgmt
,
545 sta_cipher
, sta_cipher_group
=None, ap_group
=None):
546 check_suite_b_192_capa(dev
)
547 logdir
= os
.path
.join(params
['logdir'],
548 "sigma_dut_ap_cipher.sigma-hostapd")
549 params
= suite_b_as_params()
550 params
['ca_cert'] = 'auth_serv/ec2-ca.pem'
551 params
['server_cert'] = 'auth_serv/ec2-server.pem'
552 params
['private_key'] = 'auth_serv/ec2-server.key'
553 params
['openssl_ciphers'] = 'SUITEB192'
554 hostapd
.add_ap(apdev
[1], params
)
555 with
HWSimRadio() as (radio
, iface
):
556 sigma
= start_sigma_dut(iface
, hostapd_logdir
=logdir
)
558 sigma_dut_cmd_check("ap_reset_default")
559 sigma_dut_cmd_check("ap_set_wireless,NAME,AP,CHANNEL,1,SSID,test-suite-b,MODE,11ng")
560 sigma_dut_cmd_check("ap_set_radius,NAME,AP,IPADDR,127.0.0.1,PORT,18129,PASSWORD,radius")
561 cmd
= "ap_set_security,NAME,AP,KEYMGNT,SuiteB,PMF,Required,PairwiseCipher,%s,GroupMgntCipher,%s" % (ap_pairwise
, ap_group_mgmt
)
563 cmd
+= ",GroupCipher,%s" % ap_group
564 sigma_dut_cmd_check(cmd
)
565 sigma_dut_cmd_check("ap_config_commit,NAME,AP")
567 if sta_cipher_group
is None:
568 sta_cipher_group
= sta_cipher
569 dev
[0].connect("test-suite-b", key_mgmt
="WPA-EAP-SUITE-B-192",
571 openssl_ciphers
="SUITEB192",
572 eap
="TLS", identity
="tls user",
573 ca_cert
="auth_serv/ec2-ca.pem",
574 client_cert
="auth_serv/ec2-user.pem",
575 private_key
="auth_serv/ec2-user.key",
576 pairwise
=sta_cipher
, group
=sta_cipher_group
,
579 sigma_dut_cmd_check("ap_reset_default")
581 stop_sigma_dut(sigma
)
583 def test_sigma_dut_ap_override_rsne(dev
, apdev
):
584 """sigma_dut controlled AP overriding RSNE"""
585 with
HWSimRadio() as (radio
, iface
):
586 sigma
= start_sigma_dut(iface
)
588 sigma_dut_cmd_check("ap_reset_default")
589 sigma_dut_cmd_check("ap_set_wireless,NAME,AP,CHANNEL,1,SSID,test-psk,MODE,11ng")
590 sigma_dut_cmd_check("ap_set_security,NAME,AP,KEYMGNT,WPA2-PSK,PSK,12345678")
591 sigma_dut_cmd_check("dev_configure_ie,NAME,AP,interface,%s,IE_Name,RSNE,Contents,30180100000fac040200ffffffff000fac040100000fac020c00" % iface
)
592 sigma_dut_cmd_check("ap_config_commit,NAME,AP")
594 dev
[0].connect("test-psk", psk
="12345678", scan_freq
="2412")
596 sigma_dut_cmd_check("ap_reset_default")
598 stop_sigma_dut(sigma
)
600 def test_sigma_dut_ap_sae(dev
, apdev
, params
):
601 """sigma_dut controlled AP with SAE"""
602 logdir
= os
.path
.join(params
['logdir'],
603 "sigma_dut_ap_sae.sigma-hostapd")
604 if "SAE" not in dev
[0].get_capability("auth_alg"):
605 raise HwsimSkip("SAE not supported")
606 with
HWSimRadio() as (radio
, iface
):
607 sigma
= start_sigma_dut(iface
, hostapd_logdir
=logdir
)
609 sigma_dut_cmd_check("ap_reset_default")
610 sigma_dut_cmd_check("ap_set_wireless,NAME,AP,CHANNEL,1,SSID,test-sae,MODE,11ng")
611 sigma_dut_cmd_check("ap_set_security,NAME,AP,KEYMGNT,WPA2-SAE,PSK,12345678")
612 sigma_dut_cmd_check("ap_config_commit,NAME,AP")
614 dev
[0].request("SET sae_groups ")
615 dev
[0].connect("test-sae", key_mgmt
="SAE", psk
="12345678",
616 ieee80211w
="2", scan_freq
="2412")
617 if dev
[0].get_status_field('sae_group') != '19':
618 raise Exception("Expected default SAE group not used")
620 sigma_dut_cmd_check("ap_reset_default")
622 stop_sigma_dut(sigma
)
624 def test_sigma_dut_ap_sae_password(dev
, apdev
, params
):
625 """sigma_dut controlled AP with SAE and long password"""
626 logdir
= os
.path
.join(params
['logdir'],
627 "sigma_dut_ap_sae_password.sigma-hostapd")
628 if "SAE" not in dev
[0].get_capability("auth_alg"):
629 raise HwsimSkip("SAE not supported")
630 with
HWSimRadio() as (radio
, iface
):
631 sigma
= start_sigma_dut(iface
, hostapd_logdir
=logdir
)
633 sigma_dut_cmd_check("ap_reset_default")
634 sigma_dut_cmd_check("ap_set_wireless,NAME,AP,CHANNEL,1,SSID,test-sae,MODE,11ng")
635 sigma_dut_cmd_check("ap_set_security,NAME,AP,KEYMGNT,WPA2-SAE,PSK," + 100*'C')
636 sigma_dut_cmd_check("ap_config_commit,NAME,AP")
638 dev
[0].request("SET sae_groups ")
639 dev
[0].connect("test-sae", key_mgmt
="SAE", sae_password
=100*'C',
640 ieee80211w
="2", scan_freq
="2412")
641 if dev
[0].get_status_field('sae_group') != '19':
642 raise Exception("Expected default SAE group not used")
644 sigma_dut_cmd_check("ap_reset_default")
646 stop_sigma_dut(sigma
)
648 def test_sigma_dut_ap_sae_group(dev
, apdev
, params
):
649 """sigma_dut controlled AP with SAE and specific group"""
650 logdir
= os
.path
.join(params
['logdir'],
651 "sigma_dut_ap_sae_group.sigma-hostapd")
652 if "SAE" not in dev
[0].get_capability("auth_alg"):
653 raise HwsimSkip("SAE not supported")
654 with
HWSimRadio() as (radio
, iface
):
655 sigma
= start_sigma_dut(iface
, hostapd_logdir
=logdir
)
657 sigma_dut_cmd_check("ap_reset_default")
658 sigma_dut_cmd_check("ap_set_wireless,NAME,AP,CHANNEL,1,SSID,test-sae,MODE,11ng")
659 sigma_dut_cmd_check("ap_set_security,NAME,AP,KEYMGNT,WPA2-SAE,PSK,12345678,ECGroupID,20")
660 sigma_dut_cmd_check("ap_config_commit,NAME,AP")
662 dev
[0].request("SET sae_groups ")
663 dev
[0].connect("test-sae", key_mgmt
="SAE", psk
="12345678",
664 ieee80211w
="2", scan_freq
="2412")
665 if dev
[0].get_status_field('sae_group') != '20':
666 raise Exception("Expected SAE group not used")
668 sigma_dut_cmd_check("ap_reset_default")
670 stop_sigma_dut(sigma
)
672 def test_sigma_dut_ap_psk_sae(dev
, apdev
, params
):
673 """sigma_dut controlled AP with PSK+SAE"""
674 if "SAE" not in dev
[0].get_capability("auth_alg"):
675 raise HwsimSkip("SAE not supported")
676 logdir
= os
.path
.join(params
['logdir'],
677 "sigma_dut_ap_psk_sae.sigma-hostapd")
678 with
HWSimRadio() as (radio
, iface
):
679 sigma
= start_sigma_dut(iface
, hostapd_logdir
=logdir
)
681 sigma_dut_cmd_check("ap_reset_default")
682 sigma_dut_cmd_check("ap_set_wireless,NAME,AP,CHANNEL,1,SSID,test-sae,MODE,11ng")
683 sigma_dut_cmd_check("ap_set_security,NAME,AP,KEYMGNT,WPA2-PSK-SAE,PSK,12345678")
684 sigma_dut_cmd_check("ap_config_commit,NAME,AP")
686 dev
[2].request("SET sae_groups ")
687 dev
[2].connect("test-sae", key_mgmt
="SAE", psk
="12345678",
688 scan_freq
="2412", ieee80211w
="0", wait_connect
=False)
689 dev
[0].request("SET sae_groups ")
690 dev
[0].connect("test-sae", key_mgmt
="SAE", psk
="12345678",
691 scan_freq
="2412", ieee80211w
="2")
692 dev
[1].connect("test-sae", psk
="12345678", scan_freq
="2412")
694 ev
= dev
[2].wait_event(["CTRL-EVENT-CONNECTED"], timeout
=0.1)
695 dev
[2].request("DISCONNECT")
697 raise Exception("Unexpected connection without PMF")
699 sigma_dut_cmd_check("ap_reset_default")
701 stop_sigma_dut(sigma
)
703 def test_sigma_dut_owe(dev
, apdev
):
704 """sigma_dut controlled OWE station"""
706 run_sigma_dut_owe(dev
, apdev
)
708 dev
[0].set("ignore_old_scan_res", "0")
710 def run_sigma_dut_owe(dev
, apdev
):
711 if "OWE" not in dev
[0].get_capability("key_mgmt"):
712 raise HwsimSkip("OWE not supported")
714 ifname
= dev
[0].ifname
715 sigma
= start_sigma_dut(ifname
)
718 params
= { "ssid": "owe",
720 "wpa_key_mgmt": "OWE",
722 "rsn_pairwise": "CCMP" }
723 hapd
= hostapd
.add_ap(apdev
[0], params
)
724 bssid
= hapd
.own_addr()
726 sigma_dut_cmd_check("sta_reset_default,interface,%s,prog,WPA3" % ifname
)
727 sigma_dut_cmd_check("sta_set_ip_config,interface,%s,dhcp,0,ip,127.0.0.11,mask,255.255.255.0" % ifname
)
728 sigma_dut_cmd_check("sta_set_security,interface,%s,ssid,owe,Type,OWE" % ifname
)
729 sigma_dut_cmd_check("sta_associate,interface,%s,ssid,owe,channel,1" % ifname
)
730 sigma_dut_wait_connected(ifname
)
731 sigma_dut_cmd_check("sta_get_ip_config,interface," + ifname
)
733 dev
[0].dump_monitor()
734 sigma_dut_cmd("sta_reassoc,interface,%s,Channel,1,bssid,%s" % (ifname
, bssid
))
735 dev
[0].wait_connected()
736 sigma_dut_cmd_check("sta_disconnect,interface," + ifname
)
737 dev
[0].wait_disconnected()
738 dev
[0].dump_monitor()
740 sigma_dut_cmd_check("sta_reset_default,interface,%s,prog,WPA3" % ifname
)
741 sigma_dut_cmd_check("sta_set_ip_config,interface,%s,dhcp,0,ip,127.0.0.11,mask,255.255.255.0" % ifname
)
742 sigma_dut_cmd_check("sta_set_security,interface,%s,ssid,owe,Type,OWE,ECGroupID,20" % ifname
)
743 sigma_dut_cmd_check("sta_associate,interface,%s,ssid,owe,channel,1" % ifname
)
744 sigma_dut_wait_connected(ifname
)
745 sigma_dut_cmd_check("sta_get_ip_config,interface," + ifname
)
746 sigma_dut_cmd_check("sta_disconnect,interface," + ifname
)
747 dev
[0].wait_disconnected()
748 dev
[0].dump_monitor()
750 sigma_dut_cmd_check("sta_reset_default,interface,%s,prog,WPA3" % ifname
)
751 sigma_dut_cmd_check("sta_set_ip_config,interface,%s,dhcp,0,ip,127.0.0.11,mask,255.255.255.0" % ifname
)
752 sigma_dut_cmd_check("sta_set_security,interface,%s,ssid,owe,Type,OWE,ECGroupID,0" % ifname
)
753 sigma_dut_cmd_check("sta_associate,interface,%s,ssid,owe,channel,1" % ifname
)
754 ev
= dev
[0].wait_event(["CTRL-EVENT-ASSOC-REJECT"], timeout
=10)
755 sigma_dut_cmd_check("sta_disconnect,interface," + ifname
)
757 raise Exception("Association not rejected")
758 if "status_code=77" not in ev
:
759 raise Exception("Unexpected rejection reason: " + ev
)
761 sigma_dut_cmd_check("sta_reset_default,interface," + ifname
)
763 stop_sigma_dut(sigma
)
765 def test_sigma_dut_ap_owe(dev
, apdev
, params
):
766 """sigma_dut controlled AP with OWE"""
767 logdir
= os
.path
.join(params
['logdir'],
768 "sigma_dut_ap_owe.sigma-hostapd")
769 if "OWE" not in dev
[0].get_capability("key_mgmt"):
770 raise HwsimSkip("OWE not supported")
771 with
HWSimRadio() as (radio
, iface
):
772 sigma
= start_sigma_dut(iface
, hostapd_logdir
=logdir
)
774 sigma_dut_cmd_check("ap_reset_default,NAME,AP,Program,WPA3")
775 sigma_dut_cmd_check("ap_set_wireless,NAME,AP,CHANNEL,1,SSID,owe,MODE,11ng")
776 sigma_dut_cmd_check("ap_set_security,NAME,AP,KEYMGNT,OWE")
777 sigma_dut_cmd_check("ap_config_commit,NAME,AP")
779 dev
[0].connect("owe", key_mgmt
="OWE", ieee80211w
="2",
782 sigma_dut_cmd_check("ap_reset_default")
784 stop_sigma_dut(sigma
)
786 def test_sigma_dut_ap_owe_ecgroupid(dev
, apdev
):
787 """sigma_dut controlled AP with OWE and ECGroupID"""
788 if "OWE" not in dev
[0].get_capability("key_mgmt"):
789 raise HwsimSkip("OWE not supported")
790 with
HWSimRadio() as (radio
, iface
):
791 sigma
= start_sigma_dut(iface
)
793 sigma_dut_cmd_check("ap_reset_default,NAME,AP,Program,WPA3")
794 sigma_dut_cmd_check("ap_set_wireless,NAME,AP,CHANNEL,1,SSID,owe,MODE,11ng")
795 sigma_dut_cmd_check("ap_set_security,NAME,AP,KEYMGNT,OWE,ECGroupID,20 21,PMF,Required")
796 sigma_dut_cmd_check("ap_config_commit,NAME,AP")
798 dev
[0].connect("owe", key_mgmt
="OWE", ieee80211w
="2",
799 owe_group
="20", scan_freq
="2412")
800 dev
[0].request("REMOVE_NETWORK all")
801 dev
[0].wait_disconnected()
803 dev
[0].connect("owe", key_mgmt
="OWE", ieee80211w
="2",
804 owe_group
="21", scan_freq
="2412")
805 dev
[0].request("REMOVE_NETWORK all")
806 dev
[0].wait_disconnected()
808 dev
[0].connect("owe", key_mgmt
="OWE", ieee80211w
="2",
809 owe_group
="19", scan_freq
="2412", wait_connect
=False)
810 ev
= dev
[0].wait_event(["CTRL-EVENT-ASSOC-REJECT"], timeout
=10)
811 dev
[0].request("DISCONNECT")
813 raise Exception("Association not rejected")
814 if "status_code=77" not in ev
:
815 raise Exception("Unexpected rejection reason: " + ev
)
816 dev
[0].dump_monitor()
818 sigma_dut_cmd_check("ap_reset_default")
820 stop_sigma_dut(sigma
)
822 def test_sigma_dut_ap_owe_transition_mode(dev
, apdev
, params
):
823 """sigma_dut controlled AP with OWE and transition mode"""
824 if "OWE" not in dev
[0].get_capability("key_mgmt"):
825 raise HwsimSkip("OWE not supported")
826 logdir
= os
.path
.join(params
['logdir'],
827 "sigma_dut_ap_owe_transition_mode.sigma-hostapd")
828 with
HWSimRadio() as (radio
, iface
):
829 sigma
= start_sigma_dut(iface
, hostapd_logdir
=logdir
)
831 sigma_dut_cmd_check("ap_reset_default,NAME,AP,Program,WPA3")
832 sigma_dut_cmd_check("ap_set_wireless,NAME,AP,WLAN_TAG,1,CHANNEL,1,SSID,owe,MODE,11ng")
833 sigma_dut_cmd_check("ap_set_security,NAME,AP,WLAN_TAG,1,KEYMGNT,OWE")
834 sigma_dut_cmd_check("ap_set_wireless,NAME,AP,WLAN_TAG,2,CHANNEL,1,SSID,owe,MODE,11ng")
835 sigma_dut_cmd_check("ap_set_security,NAME,AP,WLAN_TAG,2,KEYMGNT,NONE")
836 sigma_dut_cmd_check("ap_config_commit,NAME,AP")
838 res1
= sigma_dut_cmd_check("ap_get_mac_address,NAME,AP,WLAN_TAG,1,Interface,24G")
839 res2
= sigma_dut_cmd_check("ap_get_mac_address,NAME,AP,WLAN_TAG,2,Interface,24G")
841 dev
[0].connect("owe", key_mgmt
="OWE", ieee80211w
="2",
843 dev
[1].connect("owe", key_mgmt
="NONE", scan_freq
="2412")
844 if dev
[0].get_status_field('bssid') not in res1
:
845 raise Exception("Unexpected ap_get_mac_address WLAN_TAG,1: " + res1
)
846 if dev
[1].get_status_field('bssid') not in res2
:
847 raise Exception("Unexpected ap_get_mac_address WLAN_TAG,2: " + res2
)
849 sigma_dut_cmd_check("ap_reset_default")
851 stop_sigma_dut(sigma
)
853 def test_sigma_dut_ap_owe_transition_mode_2(dev
, apdev
, params
):
854 """sigma_dut controlled AP with OWE and transition mode (2)"""
855 if "OWE" not in dev
[0].get_capability("key_mgmt"):
856 raise HwsimSkip("OWE not supported")
857 logdir
= os
.path
.join(params
['logdir'],
858 "sigma_dut_ap_owe_transition_mode_2.sigma-hostapd")
859 with
HWSimRadio() as (radio
, iface
):
860 sigma
= start_sigma_dut(iface
, hostapd_logdir
=logdir
)
862 sigma_dut_cmd_check("ap_reset_default,NAME,AP,Program,WPA3")
863 sigma_dut_cmd_check("ap_set_wireless,NAME,AP,WLAN_TAG,1,CHANNEL,1,SSID,owe,MODE,11ng")
864 sigma_dut_cmd_check("ap_set_security,NAME,AP,WLAN_TAG,1,KEYMGNT,NONE")
865 sigma_dut_cmd_check("ap_set_wireless,NAME,AP,WLAN_TAG,2,CHANNEL,1,MODE,11ng")
866 sigma_dut_cmd_check("ap_set_security,NAME,AP,WLAN_TAG,2,KEYMGNT,OWE")
867 sigma_dut_cmd_check("ap_config_commit,NAME,AP")
869 res1
= sigma_dut_cmd_check("ap_get_mac_address,NAME,AP,WLAN_TAG,1,Interface,24G")
870 res2
= sigma_dut_cmd_check("ap_get_mac_address,NAME,AP,WLAN_TAG,2,Interface,24G")
872 dev
[0].connect("owe", key_mgmt
="OWE", ieee80211w
="2",
874 dev
[1].connect("owe", key_mgmt
="NONE", scan_freq
="2412")
875 if dev
[0].get_status_field('bssid') not in res2
:
876 raise Exception("Unexpected ap_get_mac_address WLAN_TAG,2: " + res1
)
877 if dev
[1].get_status_field('bssid') not in res1
:
878 raise Exception("Unexpected ap_get_mac_address WLAN_TAG,1: " + res2
)
880 sigma_dut_cmd_check("ap_reset_default")
882 stop_sigma_dut(sigma
)
884 def dpp_init_enrollee(dev
, id1
):
885 logger
.info("Starting DPP initiator/enrollee in a thread")
887 cmd
= "DPP_AUTH_INIT peer=%d role=enrollee" % id1
888 if "OK" not in dev
.request(cmd
):
889 raise Exception("Failed to initiate DPP Authentication")
890 ev
= dev
.wait_event(["DPP-CONF-RECEIVED"], timeout
=5)
892 raise Exception("DPP configuration not completed (Enrollee)")
893 logger
.info("DPP initiator/enrollee done")
895 def test_sigma_dut_dpp_qr_resp_1(dev
, apdev
):
896 """sigma_dut DPP/QR responder (conf index 1)"""
897 run_sigma_dut_dpp_qr_resp(dev
, apdev
, 1)
899 def test_sigma_dut_dpp_qr_resp_2(dev
, apdev
):
900 """sigma_dut DPP/QR responder (conf index 2)"""
901 run_sigma_dut_dpp_qr_resp(dev
, apdev
, 2)
903 def test_sigma_dut_dpp_qr_resp_3(dev
, apdev
):
904 """sigma_dut DPP/QR responder (conf index 3)"""
905 run_sigma_dut_dpp_qr_resp(dev
, apdev
, 3)
907 def test_sigma_dut_dpp_qr_resp_4(dev
, apdev
):
908 """sigma_dut DPP/QR responder (conf index 4)"""
909 run_sigma_dut_dpp_qr_resp(dev
, apdev
, 4)
911 def test_sigma_dut_dpp_qr_resp_5(dev
, apdev
):
912 """sigma_dut DPP/QR responder (conf index 5)"""
913 run_sigma_dut_dpp_qr_resp(dev
, apdev
, 5)
915 def test_sigma_dut_dpp_qr_resp_6(dev
, apdev
):
916 """sigma_dut DPP/QR responder (conf index 6)"""
917 run_sigma_dut_dpp_qr_resp(dev
, apdev
, 6)
919 def test_sigma_dut_dpp_qr_resp_7(dev
, apdev
):
920 """sigma_dut DPP/QR responder (conf index 7)"""
921 run_sigma_dut_dpp_qr_resp(dev
, apdev
, 7)
923 def test_sigma_dut_dpp_qr_resp_chan_list(dev
, apdev
):
924 """sigma_dut DPP/QR responder (channel list override)"""
925 run_sigma_dut_dpp_qr_resp(dev
, apdev
, 1, chan_list
='81/2 81/6 81/1',
928 def run_sigma_dut_dpp_qr_resp(dev
, apdev
, conf_idx
, chan_list
=None,
930 check_dpp_capab(dev
[0])
931 check_dpp_capab(dev
[1])
932 sigma
= start_sigma_dut(dev
[0].ifname
)
934 cmd
= "dev_exec_action,program,DPP,DPPActionType,GetLocalBootstrap,DPPCryptoIdentifier,P-256,DPPBS,QR"
936 cmd
+= ",DPPChannelList," + chan_list
937 res
= sigma_dut_cmd(cmd
)
938 if "status,COMPLETE" not in res
:
939 raise Exception("dev_exec_action did not succeed: " + res
)
940 hex = res
.split(',')[3]
941 uri
= hex.decode('hex')
942 logger
.info("URI from sigma_dut: " + uri
)
944 res
= dev
[1].request("DPP_QR_CODE " + uri
)
946 raise Exception("Failed to parse QR Code URI")
949 t
= threading
.Thread(target
=dpp_init_enrollee
, args
=(dev
[1], id1
))
951 cmd
= "dev_exec_action,program,DPP,DPPActionType,AutomaticDPP,DPPAuthRole,Responder,DPPConfIndex,%d,DPPAuthDirection,Single,DPPProvisioningRole,Configurator,DPPConfEnrolleeRole,STA,DPPSigningKeyECC,P-256,DPPBS,QR,DPPTimeout,6" % conf_idx
953 cmd
+= ",DPPListenChannel," + str(listen_chan
)
954 res
= sigma_dut_cmd(cmd
, timeout
=10)
956 if "BootstrapResult,OK,AuthResult,OK,ConfResult,OK" not in res
:
957 raise Exception("Unexpected result: " + res
)
959 stop_sigma_dut(sigma
)
961 def test_sigma_dut_dpp_qr_init_enrollee(dev
, apdev
):
962 """sigma_dut DPP/QR initiator as Enrollee"""
963 check_dpp_capab(dev
[0])
964 check_dpp_capab(dev
[1])
966 csign
= "30770201010420768240a3fc89d6662d9782f120527fe7fb9edc6366ab0b9c7dde96125cfd250fa00a06082a8648ce3d030107a144034200042908e1baf7bf413cc66f9e878a03e8bb1835ba94b033dbe3d6969fc8575d5eb5dfda1cb81c95cee21d0cd7d92ba30541ffa05cb6296f5dd808b0c1c2a83c0708"
967 csign_pub
= "3059301306072a8648ce3d020106082a8648ce3d030107034200042908e1baf7bf413cc66f9e878a03e8bb1835ba94b033dbe3d6969fc8575d5eb5dfda1cb81c95cee21d0cd7d92ba30541ffa05cb6296f5dd808b0c1c2a83c0708"
968 ap_connector
= "eyJ0eXAiOiJkcHBDb24iLCJraWQiOiJwYWtZbXVzd1dCdWpSYTl5OEsweDViaTVrT3VNT3dzZHRlaml2UG55ZHZzIiwiYWxnIjoiRVMyNTYifQ.eyJncm91cHMiOlt7Imdyb3VwSWQiOiIqIiwibmV0Um9sZSI6ImFwIn1dLCJuZXRBY2Nlc3NLZXkiOnsia3R5IjoiRUMiLCJjcnYiOiJQLTI1NiIsIngiOiIybU5vNXZuRkI5bEw3d1VWb1hJbGVPYzBNSEE1QXZKbnpwZXZULVVTYzVNIiwieSI6IlhzS3dqVHJlLTg5WWdpU3pKaG9CN1haeUttTU05OTl3V2ZaSVl0bi01Q3MifX0.XhjFpZgcSa7G2lHy0OCYTvaZFRo5Hyx6b7g7oYyusLC7C_73AJ4_BxEZQVYJXAtDuGvb3dXSkHEKxREP9Q6Qeg"
969 ap_netaccesskey
= "30770201010420ceba752db2ad5200fa7bc565b9c05c69b7eb006751b0b329b0279de1c19ca67ca00a06082a8648ce3d030107a14403420004da6368e6f9c507d94bef0515a1722578e73430703902f267ce97af4fe51273935ec2b08d3adefbcf588224b3261a01ed76722a630cf7df7059f64862d9fee42b"
971 params
= { "ssid": "DPPNET01",
973 "wpa_key_mgmt": "DPP",
974 "rsn_pairwise": "CCMP",
975 "dpp_connector": ap_connector
,
976 "dpp_csign": csign_pub
,
977 "dpp_netaccesskey": ap_netaccesskey
}
979 hapd
= hostapd
.add_ap(apdev
[0], params
)
981 raise HwsimSkip("DPP not supported")
983 sigma
= start_sigma_dut(dev
[0].ifname
)
985 dev
[0].set("dpp_config_processing", "2")
987 cmd
= "DPP_CONFIGURATOR_ADD key=" + csign
988 res
= dev
[1].request(cmd
);
990 raise Exception("Failed to add configurator")
993 addr
= dev
[1].own_addr().replace(':', '')
994 cmd
= "DPP_BOOTSTRAP_GEN type=qrcode chan=81/6 mac=" + addr
995 res
= dev
[1].request(cmd
)
997 raise Exception("Failed to generate bootstrapping info")
999 uri0
= dev
[1].request("DPP_BOOTSTRAP_GET_URI %d" % id0
)
1001 dev
[1].set("dpp_configurator_params",
1002 " conf=sta-dpp ssid=%s configurator=%d" % ("DPPNET01".encode("hex"), conf_id
));
1003 cmd
= "DPP_LISTEN 2437 role=configurator"
1004 if "OK" not in dev
[1].request(cmd
):
1005 raise Exception("Failed to start listen operation")
1007 res
= sigma_dut_cmd("dev_exec_action,program,DPP,DPPActionType,SetPeerBootstrap,DPPBootstrappingdata,%s,DPPBS,QR" % uri0
.encode('hex'))
1008 if "status,COMPLETE" not in res
:
1009 raise Exception("dev_exec_action did not succeed: " + res
)
1011 res
= sigma_dut_cmd("dev_exec_action,program,DPP,DPPActionType,AutomaticDPP,DPPAuthRole,Initiator,DPPAuthDirection,Single,DPPProvisioningRole,Enrollee,DPPBS,QR,DPPTimeout,6,DPPWaitForConnect,Yes", timeout
=10)
1012 if "BootstrapResult,OK,AuthResult,OK,ConfResult,OK,NetworkIntroResult,OK,NetworkConnectResult,OK" not in res
:
1013 raise Exception("Unexpected result: " + res
)
1015 dev
[0].set("dpp_config_processing", "0")
1016 stop_sigma_dut(sigma
)
1018 def test_sigma_dut_dpp_qr_mutual_init_enrollee(dev
, apdev
):
1019 """sigma_dut DPP/QR (mutual) initiator as Enrollee"""
1020 run_sigma_dut_dpp_qr_mutual_init_enrollee_check(dev
, apdev
)
1022 def test_sigma_dut_dpp_qr_mutual_init_enrollee_check(dev
, apdev
):
1023 """sigma_dut DPP/QR (mutual) initiator as Enrollee (extra check)"""
1024 run_sigma_dut_dpp_qr_mutual_init_enrollee_check(dev
, apdev
,
1025 extra
="DPPAuthDirection,Mutual,")
1027 def run_sigma_dut_dpp_qr_mutual_init_enrollee_check(dev
, apdev
, extra
=''):
1028 check_dpp_capab(dev
[0])
1029 check_dpp_capab(dev
[1])
1031 csign
= "30770201010420768240a3fc89d6662d9782f120527fe7fb9edc6366ab0b9c7dde96125cfd250fa00a06082a8648ce3d030107a144034200042908e1baf7bf413cc66f9e878a03e8bb1835ba94b033dbe3d6969fc8575d5eb5dfda1cb81c95cee21d0cd7d92ba30541ffa05cb6296f5dd808b0c1c2a83c0708"
1032 csign_pub
= "3059301306072a8648ce3d020106082a8648ce3d030107034200042908e1baf7bf413cc66f9e878a03e8bb1835ba94b033dbe3d6969fc8575d5eb5dfda1cb81c95cee21d0cd7d92ba30541ffa05cb6296f5dd808b0c1c2a83c0708"
1033 ap_connector
= "eyJ0eXAiOiJkcHBDb24iLCJraWQiOiJwYWtZbXVzd1dCdWpSYTl5OEsweDViaTVrT3VNT3dzZHRlaml2UG55ZHZzIiwiYWxnIjoiRVMyNTYifQ.eyJncm91cHMiOlt7Imdyb3VwSWQiOiIqIiwibmV0Um9sZSI6ImFwIn1dLCJuZXRBY2Nlc3NLZXkiOnsia3R5IjoiRUMiLCJjcnYiOiJQLTI1NiIsIngiOiIybU5vNXZuRkI5bEw3d1VWb1hJbGVPYzBNSEE1QXZKbnpwZXZULVVTYzVNIiwieSI6IlhzS3dqVHJlLTg5WWdpU3pKaG9CN1haeUttTU05OTl3V2ZaSVl0bi01Q3MifX0.XhjFpZgcSa7G2lHy0OCYTvaZFRo5Hyx6b7g7oYyusLC7C_73AJ4_BxEZQVYJXAtDuGvb3dXSkHEKxREP9Q6Qeg"
1034 ap_netaccesskey
= "30770201010420ceba752db2ad5200fa7bc565b9c05c69b7eb006751b0b329b0279de1c19ca67ca00a06082a8648ce3d030107a14403420004da6368e6f9c507d94bef0515a1722578e73430703902f267ce97af4fe51273935ec2b08d3adefbcf588224b3261a01ed76722a630cf7df7059f64862d9fee42b"
1036 params
= { "ssid": "DPPNET01",
1038 "wpa_key_mgmt": "DPP",
1039 "rsn_pairwise": "CCMP",
1040 "dpp_connector": ap_connector
,
1041 "dpp_csign": csign_pub
,
1042 "dpp_netaccesskey": ap_netaccesskey
}
1044 hapd
= hostapd
.add_ap(apdev
[0], params
)
1046 raise HwsimSkip("DPP not supported")
1048 sigma
= start_sigma_dut(dev
[0].ifname
)
1050 dev
[0].set("dpp_config_processing", "2")
1052 cmd
= "DPP_CONFIGURATOR_ADD key=" + csign
1053 res
= dev
[1].request(cmd
);
1055 raise Exception("Failed to add configurator")
1058 addr
= dev
[1].own_addr().replace(':', '')
1059 cmd
= "DPP_BOOTSTRAP_GEN type=qrcode chan=81/6 mac=" + addr
1060 res
= dev
[1].request(cmd
)
1062 raise Exception("Failed to generate bootstrapping info")
1064 uri0
= dev
[1].request("DPP_BOOTSTRAP_GET_URI %d" % id0
)
1066 dev
[1].set("dpp_configurator_params",
1067 " conf=sta-dpp ssid=%s configurator=%d" % ("DPPNET01".encode("hex"), conf_id
));
1068 cmd
= "DPP_LISTEN 2437 role=configurator qr=mutual"
1069 if "OK" not in dev
[1].request(cmd
):
1070 raise Exception("Failed to start listen operation")
1072 res
= sigma_dut_cmd("dev_exec_action,program,DPP,DPPActionType,GetLocalBootstrap,DPPCryptoIdentifier,P-256,DPPBS,QR")
1073 if "status,COMPLETE" not in res
:
1074 raise Exception("dev_exec_action did not succeed: " + res
)
1075 hex = res
.split(',')[3]
1076 uri
= hex.decode('hex')
1077 logger
.info("URI from sigma_dut: " + uri
)
1079 res
= dev
[1].request("DPP_QR_CODE " + uri
)
1081 raise Exception("Failed to parse QR Code URI")
1084 res
= sigma_dut_cmd("dev_exec_action,program,DPP,DPPActionType,SetPeerBootstrap,DPPBootstrappingdata,%s,DPPBS,QR" % uri0
.encode('hex'))
1085 if "status,COMPLETE" not in res
:
1086 raise Exception("dev_exec_action did not succeed: " + res
)
1088 res
= sigma_dut_cmd("dev_exec_action,program,DPP,DPPActionType,AutomaticDPP,DPPAuthRole,Initiator,%sDPPProvisioningRole,Enrollee,DPPBS,QR,DPPTimeout,6,DPPWaitForConnect,Yes" % extra
, timeout
=10)
1089 if "BootstrapResult,OK,AuthResult,OK,ConfResult,OK,NetworkIntroResult,OK,NetworkConnectResult,OK" not in res
:
1090 raise Exception("Unexpected result: " + res
)
1092 dev
[0].set("dpp_config_processing", "0")
1093 stop_sigma_dut(sigma
)
1095 def dpp_init_conf_mutual(dev
, id1
, conf_id
, own_id
=None):
1097 logger
.info("Starting DPP initiator/configurator in a thread")
1098 cmd
= "DPP_AUTH_INIT peer=%d conf=sta-dpp ssid=%s configurator=%d" % (id1
, "DPPNET01".encode("hex"), conf_id
)
1099 if own_id
is not None:
1100 cmd
+= " own=%d" % own_id
1101 if "OK" not in dev
.request(cmd
):
1102 raise Exception("Failed to initiate DPP Authentication")
1103 ev
= dev
.wait_event(["DPP-CONF-SENT"], timeout
=10)
1105 raise Exception("DPP configuration not completed (Configurator)")
1106 logger
.info("DPP initiator/configurator done")
1108 def test_sigma_dut_dpp_qr_mutual_resp_enrollee(dev
, apdev
):
1109 """sigma_dut DPP/QR (mutual) responder as Enrollee"""
1110 run_sigma_dut_dpp_qr_mutual_resp_enrollee(dev
, apdev
)
1112 def test_sigma_dut_dpp_qr_mutual_resp_enrollee_pending(dev
, apdev
):
1113 """sigma_dut DPP/QR (mutual) responder as Enrollee (response pending)"""
1114 run_sigma_dut_dpp_qr_mutual_resp_enrollee(dev
, apdev
, ',DPPDelayQRResponse,1')
1116 def run_sigma_dut_dpp_qr_mutual_resp_enrollee(dev
, apdev
, extra
=None):
1117 check_dpp_capab(dev
[0])
1118 check_dpp_capab(dev
[1])
1120 csign
= "30770201010420768240a3fc89d6662d9782f120527fe7fb9edc6366ab0b9c7dde96125cfd250fa00a06082a8648ce3d030107a144034200042908e1baf7bf413cc66f9e878a03e8bb1835ba94b033dbe3d6969fc8575d5eb5dfda1cb81c95cee21d0cd7d92ba30541ffa05cb6296f5dd808b0c1c2a83c0708"
1121 csign_pub
= "3059301306072a8648ce3d020106082a8648ce3d030107034200042908e1baf7bf413cc66f9e878a03e8bb1835ba94b033dbe3d6969fc8575d5eb5dfda1cb81c95cee21d0cd7d92ba30541ffa05cb6296f5dd808b0c1c2a83c0708"
1122 ap_connector
= "eyJ0eXAiOiJkcHBDb24iLCJraWQiOiJwYWtZbXVzd1dCdWpSYTl5OEsweDViaTVrT3VNT3dzZHRlaml2UG55ZHZzIiwiYWxnIjoiRVMyNTYifQ.eyJncm91cHMiOlt7Imdyb3VwSWQiOiIqIiwibmV0Um9sZSI6ImFwIn1dLCJuZXRBY2Nlc3NLZXkiOnsia3R5IjoiRUMiLCJjcnYiOiJQLTI1NiIsIngiOiIybU5vNXZuRkI5bEw3d1VWb1hJbGVPYzBNSEE1QXZKbnpwZXZULVVTYzVNIiwieSI6IlhzS3dqVHJlLTg5WWdpU3pKaG9CN1haeUttTU05OTl3V2ZaSVl0bi01Q3MifX0.XhjFpZgcSa7G2lHy0OCYTvaZFRo5Hyx6b7g7oYyusLC7C_73AJ4_BxEZQVYJXAtDuGvb3dXSkHEKxREP9Q6Qeg"
1123 ap_netaccesskey
= "30770201010420ceba752db2ad5200fa7bc565b9c05c69b7eb006751b0b329b0279de1c19ca67ca00a06082a8648ce3d030107a14403420004da6368e6f9c507d94bef0515a1722578e73430703902f267ce97af4fe51273935ec2b08d3adefbcf588224b3261a01ed76722a630cf7df7059f64862d9fee42b"
1125 params
= { "ssid": "DPPNET01",
1127 "wpa_key_mgmt": "DPP",
1128 "rsn_pairwise": "CCMP",
1129 "dpp_connector": ap_connector
,
1130 "dpp_csign": csign_pub
,
1131 "dpp_netaccesskey": ap_netaccesskey
}
1133 hapd
= hostapd
.add_ap(apdev
[0], params
)
1135 raise HwsimSkip("DPP not supported")
1137 sigma
= start_sigma_dut(dev
[0].ifname
)
1139 dev
[0].set("dpp_config_processing", "2")
1141 cmd
= "DPP_CONFIGURATOR_ADD key=" + csign
1142 res
= dev
[1].request(cmd
);
1144 raise Exception("Failed to add configurator")
1147 addr
= dev
[1].own_addr().replace(':', '')
1148 cmd
= "DPP_BOOTSTRAP_GEN type=qrcode chan=81/6 mac=" + addr
1149 res
= dev
[1].request(cmd
)
1151 raise Exception("Failed to generate bootstrapping info")
1153 uri0
= dev
[1].request("DPP_BOOTSTRAP_GET_URI %d" % id0
)
1155 res
= sigma_dut_cmd("dev_exec_action,program,DPP,DPPActionType,GetLocalBootstrap,DPPCryptoIdentifier,P-256,DPPBS,QR")
1156 if "status,COMPLETE" not in res
:
1157 raise Exception("dev_exec_action did not succeed: " + res
)
1158 hex = res
.split(',')[3]
1159 uri
= hex.decode('hex')
1160 logger
.info("URI from sigma_dut: " + uri
)
1162 res
= dev
[1].request("DPP_QR_CODE " + uri
)
1164 raise Exception("Failed to parse QR Code URI")
1167 res
= sigma_dut_cmd("dev_exec_action,program,DPP,DPPActionType,SetPeerBootstrap,DPPBootstrappingdata,%s,DPPBS,QR" % uri0
.encode('hex'))
1168 if "status,COMPLETE" not in res
:
1169 raise Exception("dev_exec_action did not succeed: " + res
)
1171 t
= threading
.Thread(target
=dpp_init_conf_mutual
,
1172 args
=(dev
[1], id1
, conf_id
, id0
))
1175 cmd
= "dev_exec_action,program,DPP,DPPActionType,AutomaticDPP,DPPAuthRole,Responder,DPPAuthDirection,Mutual,DPPProvisioningRole,Enrollee,DPPBS,QR,DPPTimeout,20,DPPWaitForConnect,Yes"
1178 res
= sigma_dut_cmd(cmd
, timeout
=25)
1180 if "BootstrapResult,OK,AuthResult,OK,ConfResult,OK,NetworkIntroResult,OK,NetworkConnectResult,OK" not in res
:
1181 raise Exception("Unexpected result: " + res
)
1183 dev
[0].set("dpp_config_processing", "0")
1184 stop_sigma_dut(sigma
)
1186 def dpp_resp_conf_mutual(dev
, conf_id
, uri
):
1187 logger
.info("Starting DPP responder/configurator in a thread")
1188 dev
.set("dpp_configurator_params",
1189 " conf=sta-dpp ssid=%s configurator=%d" % ("DPPNET01".encode("hex"), conf_id
));
1190 cmd
= "DPP_LISTEN 2437 role=configurator qr=mutual"
1191 if "OK" not in dev
.request(cmd
):
1192 raise Exception("Failed to initiate DPP listen")
1194 ev
= dev
.wait_event(["DPP-SCAN-PEER-QR-CODE"], timeout
=10)
1196 raise Exception("QR Code scan for mutual authentication not requested")
1197 res
= dev
.request("DPP_QR_CODE " + uri
)
1199 raise Exception("Failed to parse QR Code URI")
1200 ev
= dev
.wait_event(["DPP-CONF-SENT"], timeout
=10)
1202 raise Exception("DPP configuration not completed (Configurator)")
1203 logger
.info("DPP responder/configurator done")
1205 def test_sigma_dut_dpp_qr_mutual_init_enrollee(dev
, apdev
):
1206 """sigma_dut DPP/QR (mutual) initiator as Enrollee"""
1207 run_sigma_dut_dpp_qr_mutual_init_enrollee(dev
, apdev
, False)
1209 def test_sigma_dut_dpp_qr_mutual_init_enrollee_pending(dev
, apdev
):
1210 """sigma_dut DPP/QR (mutual) initiator as Enrollee (response pending)"""
1211 run_sigma_dut_dpp_qr_mutual_init_enrollee(dev
, apdev
, True)
1213 def run_sigma_dut_dpp_qr_mutual_init_enrollee(dev
, apdev
, resp_pending
):
1214 check_dpp_capab(dev
[0])
1215 check_dpp_capab(dev
[1])
1217 csign
= "30770201010420768240a3fc89d6662d9782f120527fe7fb9edc6366ab0b9c7dde96125cfd250fa00a06082a8648ce3d030107a144034200042908e1baf7bf413cc66f9e878a03e8bb1835ba94b033dbe3d6969fc8575d5eb5dfda1cb81c95cee21d0cd7d92ba30541ffa05cb6296f5dd808b0c1c2a83c0708"
1218 csign_pub
= "3059301306072a8648ce3d020106082a8648ce3d030107034200042908e1baf7bf413cc66f9e878a03e8bb1835ba94b033dbe3d6969fc8575d5eb5dfda1cb81c95cee21d0cd7d92ba30541ffa05cb6296f5dd808b0c1c2a83c0708"
1219 ap_connector
= "eyJ0eXAiOiJkcHBDb24iLCJraWQiOiJwYWtZbXVzd1dCdWpSYTl5OEsweDViaTVrT3VNT3dzZHRlaml2UG55ZHZzIiwiYWxnIjoiRVMyNTYifQ.eyJncm91cHMiOlt7Imdyb3VwSWQiOiIqIiwibmV0Um9sZSI6ImFwIn1dLCJuZXRBY2Nlc3NLZXkiOnsia3R5IjoiRUMiLCJjcnYiOiJQLTI1NiIsIngiOiIybU5vNXZuRkI5bEw3d1VWb1hJbGVPYzBNSEE1QXZKbnpwZXZULVVTYzVNIiwieSI6IlhzS3dqVHJlLTg5WWdpU3pKaG9CN1haeUttTU05OTl3V2ZaSVl0bi01Q3MifX0.XhjFpZgcSa7G2lHy0OCYTvaZFRo5Hyx6b7g7oYyusLC7C_73AJ4_BxEZQVYJXAtDuGvb3dXSkHEKxREP9Q6Qeg"
1220 ap_netaccesskey
= "30770201010420ceba752db2ad5200fa7bc565b9c05c69b7eb006751b0b329b0279de1c19ca67ca00a06082a8648ce3d030107a14403420004da6368e6f9c507d94bef0515a1722578e73430703902f267ce97af4fe51273935ec2b08d3adefbcf588224b3261a01ed76722a630cf7df7059f64862d9fee42b"
1222 params
= { "ssid": "DPPNET01",
1224 "wpa_key_mgmt": "DPP",
1225 "rsn_pairwise": "CCMP",
1226 "dpp_connector": ap_connector
,
1227 "dpp_csign": csign_pub
,
1228 "dpp_netaccesskey": ap_netaccesskey
}
1230 hapd
= hostapd
.add_ap(apdev
[0], params
)
1232 raise HwsimSkip("DPP not supported")
1234 sigma
= start_sigma_dut(dev
[0].ifname
)
1236 dev
[0].set("dpp_config_processing", "2")
1238 cmd
= "DPP_CONFIGURATOR_ADD key=" + csign
1239 res
= dev
[1].request(cmd
);
1241 raise Exception("Failed to add configurator")
1244 addr
= dev
[1].own_addr().replace(':', '')
1245 cmd
= "DPP_BOOTSTRAP_GEN type=qrcode chan=81/6 mac=" + addr
1246 res
= dev
[1].request(cmd
)
1248 raise Exception("Failed to generate bootstrapping info")
1250 uri0
= dev
[1].request("DPP_BOOTSTRAP_GET_URI %d" % id0
)
1252 res
= sigma_dut_cmd("dev_exec_action,program,DPP,DPPActionType,GetLocalBootstrap,DPPCryptoIdentifier,P-256,DPPBS,QR")
1253 if "status,COMPLETE" not in res
:
1254 raise Exception("dev_exec_action did not succeed: " + res
)
1255 hex = res
.split(',')[3]
1256 uri
= hex.decode('hex')
1257 logger
.info("URI from sigma_dut: " + uri
)
1259 if not resp_pending
:
1260 res
= dev
[1].request("DPP_QR_CODE " + uri
)
1262 raise Exception("Failed to parse QR Code URI")
1265 res
= sigma_dut_cmd("dev_exec_action,program,DPP,DPPActionType,SetPeerBootstrap,DPPBootstrappingdata,%s,DPPBS,QR" % uri0
.encode('hex'))
1266 if "status,COMPLETE" not in res
:
1267 raise Exception("dev_exec_action did not succeed: " + res
)
1269 t
= threading
.Thread(target
=dpp_resp_conf_mutual
,
1270 args
=(dev
[1], conf_id
, uri
))
1274 cmd
= "dev_exec_action,program,DPP,DPPActionType,AutomaticDPP,DPPAuthRole,Initiator,DPPProvisioningRole,Enrollee,DPPBS,QR,DPPTimeout,10,DPPWaitForConnect,Yes"
1275 res
= sigma_dut_cmd(cmd
, timeout
=15)
1277 if "BootstrapResult,OK,AuthResult,OK,ConfResult,OK,NetworkIntroResult,OK,NetworkConnectResult,OK" not in res
:
1278 raise Exception("Unexpected result: " + res
)
1280 dev
[0].set("dpp_config_processing", "0")
1281 stop_sigma_dut(sigma
)
1283 def test_sigma_dut_dpp_qr_init_enrollee_psk(dev
, apdev
):
1284 """sigma_dut DPP/QR initiator as Enrollee (PSK)"""
1285 check_dpp_capab(dev
[0])
1286 check_dpp_capab(dev
[1])
1288 params
= hostapd
.wpa2_params(ssid
="DPPNET01",
1289 passphrase
="ThisIsDppPassphrase")
1290 hapd
= hostapd
.add_ap(apdev
[0], params
)
1292 sigma
= start_sigma_dut(dev
[0].ifname
)
1294 dev
[0].set("dpp_config_processing", "2")
1296 cmd
= "DPP_CONFIGURATOR_ADD"
1297 res
= dev
[1].request(cmd
);
1299 raise Exception("Failed to add configurator")
1302 addr
= dev
[1].own_addr().replace(':', '')
1303 cmd
= "DPP_BOOTSTRAP_GEN type=qrcode chan=81/6 mac=" + addr
1304 res
= dev
[1].request(cmd
)
1306 raise Exception("Failed to generate bootstrapping info")
1308 uri0
= dev
[1].request("DPP_BOOTSTRAP_GET_URI %d" % id0
)
1310 dev
[1].set("dpp_configurator_params",
1311 " conf=sta-psk ssid=%s pass=%s configurator=%d" % ("DPPNET01".encode("hex"), "ThisIsDppPassphrase".encode("hex"), conf_id
));
1312 cmd
= "DPP_LISTEN 2437 role=configurator"
1313 if "OK" not in dev
[1].request(cmd
):
1314 raise Exception("Failed to start listen operation")
1316 res
= sigma_dut_cmd("dev_exec_action,program,DPP,DPPActionType,SetPeerBootstrap,DPPBootstrappingdata,%s,DPPBS,QR" % uri0
.encode('hex'))
1317 if "status,COMPLETE" not in res
:
1318 raise Exception("dev_exec_action did not succeed: " + res
)
1320 res
= sigma_dut_cmd("dev_exec_action,program,DPP,DPPActionType,AutomaticDPP,DPPAuthRole,Initiator,DPPAuthDirection,Single,DPPProvisioningRole,Enrollee,DPPBS,QR,DPPTimeout,6,DPPWaitForConnect,Yes", timeout
=10)
1321 if "BootstrapResult,OK,AuthResult,OK,ConfResult,OK,NetworkConnectResult,OK" not in res
:
1322 raise Exception("Unexpected result: " + res
)
1324 dev
[0].set("dpp_config_processing", "0")
1325 stop_sigma_dut(sigma
)
1327 def test_sigma_dut_dpp_qr_init_configurator_1(dev
, apdev
):
1328 """sigma_dut DPP/QR initiator as Configurator (conf index 1)"""
1329 run_sigma_dut_dpp_qr_init_configurator(dev
, apdev
, 1)
1331 def test_sigma_dut_dpp_qr_init_configurator_2(dev
, apdev
):
1332 """sigma_dut DPP/QR initiator as Configurator (conf index 2)"""
1333 run_sigma_dut_dpp_qr_init_configurator(dev
, apdev
, 2)
1335 def test_sigma_dut_dpp_qr_init_configurator_3(dev
, apdev
):
1336 """sigma_dut DPP/QR initiator as Configurator (conf index 3)"""
1337 run_sigma_dut_dpp_qr_init_configurator(dev
, apdev
, 3)
1339 def test_sigma_dut_dpp_qr_init_configurator_4(dev
, apdev
):
1340 """sigma_dut DPP/QR initiator as Configurator (conf index 4)"""
1341 run_sigma_dut_dpp_qr_init_configurator(dev
, apdev
, 4)
1343 def test_sigma_dut_dpp_qr_init_configurator_5(dev
, apdev
):
1344 """sigma_dut DPP/QR initiator as Configurator (conf index 5)"""
1345 run_sigma_dut_dpp_qr_init_configurator(dev
, apdev
, 5)
1347 def test_sigma_dut_dpp_qr_init_configurator_6(dev
, apdev
):
1348 """sigma_dut DPP/QR initiator as Configurator (conf index 6)"""
1349 run_sigma_dut_dpp_qr_init_configurator(dev
, apdev
, 6)
1351 def test_sigma_dut_dpp_qr_init_configurator_7(dev
, apdev
):
1352 """sigma_dut DPP/QR initiator as Configurator (conf index 7)"""
1353 run_sigma_dut_dpp_qr_init_configurator(dev
, apdev
, 7)
1355 def test_sigma_dut_dpp_qr_init_configurator_both(dev
, apdev
):
1356 """sigma_dut DPP/QR initiator as Configurator or Enrollee (conf index 1)"""
1357 run_sigma_dut_dpp_qr_init_configurator(dev
, apdev
, 1, "Both")
1359 def test_sigma_dut_dpp_qr_init_configurator_neg_freq(dev
, apdev
):
1360 """sigma_dut DPP/QR initiator as Configurator (neg_freq)"""
1361 run_sigma_dut_dpp_qr_init_configurator(dev
, apdev
, 1, extra
='DPPSubsequentChannel,81/11')
1363 def run_sigma_dut_dpp_qr_init_configurator(dev
, apdev
, conf_idx
,
1364 prov_role
="Configurator",
1366 check_dpp_capab(dev
[0])
1367 check_dpp_capab(dev
[1])
1368 sigma
= start_sigma_dut(dev
[0].ifname
)
1370 addr
= dev
[1].own_addr().replace(':', '')
1371 cmd
= "DPP_BOOTSTRAP_GEN type=qrcode chan=81/6 mac=" + addr
1372 res
= dev
[1].request(cmd
)
1374 raise Exception("Failed to generate bootstrapping info")
1376 uri0
= dev
[1].request("DPP_BOOTSTRAP_GET_URI %d" % id0
)
1378 cmd
= "DPP_LISTEN 2437 role=enrollee"
1379 if "OK" not in dev
[1].request(cmd
):
1380 raise Exception("Failed to start listen operation")
1382 res
= sigma_dut_cmd("dev_exec_action,program,DPP,DPPActionType,SetPeerBootstrap,DPPBootstrappingdata,%s,DPPBS,QR" % uri0
.encode('hex'))
1383 if "status,COMPLETE" not in res
:
1384 raise Exception("dev_exec_action did not succeed: " + res
)
1386 cmd
= "dev_exec_action,program,DPP,DPPActionType,AutomaticDPP,DPPAuthRole,Initiator,DPPAuthDirection,Single,DPPProvisioningRole,%s,DPPConfIndex,%d,DPPSigningKeyECC,P-256,DPPConfEnrolleeRole,STA,DPPBS,QR,DPPTimeout,6" % (prov_role
, conf_idx
)
1389 res
= sigma_dut_cmd(cmd
)
1390 if "BootstrapResult,OK,AuthResult,OK,ConfResult,OK" not in res
:
1391 raise Exception("Unexpected result: " + res
)
1393 stop_sigma_dut(sigma
)
1395 def test_sigma_dut_dpp_pkex_init_configurator(dev
, apdev
):
1396 """sigma_dut DPP/PKEX initiator as Configurator"""
1397 check_dpp_capab(dev
[0])
1398 check_dpp_capab(dev
[1])
1399 sigma
= start_sigma_dut(dev
[0].ifname
)
1401 cmd
= "DPP_BOOTSTRAP_GEN type=pkex"
1402 res
= dev
[1].request(cmd
)
1404 raise Exception("Failed to generate bootstrapping info")
1406 cmd
= "DPP_PKEX_ADD own=%d identifier=test code=secret" % (id1
)
1407 res
= dev
[1].request(cmd
)
1409 raise Exception("Failed to set PKEX data (responder)")
1410 cmd
= "DPP_LISTEN 2437 role=enrollee"
1411 if "OK" not in dev
[1].request(cmd
):
1412 raise Exception("Failed to start listen operation")
1414 res
= sigma_dut_cmd("dev_exec_action,program,DPP,DPPActionType,AutomaticDPP,DPPAuthRole,Initiator,DPPProvisioningRole,Configurator,DPPConfIndex,1,DPPSigningKeyECC,P-256,DPPConfEnrolleeRole,STA,DPPBS,PKEX,DPPPKEXCodeIdentifier,test,DPPPKEXCode,secret,DPPTimeout,6")
1415 if "BootstrapResult,OK,AuthResult,OK,ConfResult,OK" not in res
:
1416 raise Exception("Unexpected result: " + res
)
1418 stop_sigma_dut(sigma
)
1420 def dpp_init_conf(dev
, id1
, conf
, conf_id
, extra
):
1421 logger
.info("Starting DPP initiator/configurator in a thread")
1422 cmd
= "DPP_AUTH_INIT peer=%d conf=%s %s configurator=%d" % (id1
, conf
, extra
, conf_id
)
1423 if "OK" not in dev
.request(cmd
):
1424 raise Exception("Failed to initiate DPP Authentication")
1425 ev
= dev
.wait_event(["DPP-CONF-SENT"], timeout
=5)
1427 raise Exception("DPP configuration not completed (Configurator)")
1428 logger
.info("DPP initiator/configurator done")
1430 def test_sigma_dut_ap_dpp_qr(dev
, apdev
, params
):
1431 """sigma_dut controlled AP (DPP)"""
1432 run_sigma_dut_ap_dpp_qr(dev
, apdev
, params
, "ap-dpp", "sta-dpp")
1434 def test_sigma_dut_ap_dpp_qr_legacy(dev
, apdev
, params
):
1435 """sigma_dut controlled AP (legacy)"""
1436 run_sigma_dut_ap_dpp_qr(dev
, apdev
, params
, "ap-psk", "sta-psk",
1437 extra
="pass=%s" % "qwertyuiop".encode("hex"))
1439 def test_sigma_dut_ap_dpp_qr_legacy_psk(dev
, apdev
, params
):
1440 """sigma_dut controlled AP (legacy)"""
1441 run_sigma_dut_ap_dpp_qr(dev
, apdev
, params
, "ap-psk", "sta-psk",
1442 extra
="psk=%s" % (32*"12"))
1444 def run_sigma_dut_ap_dpp_qr(dev
, apdev
, params
, ap_conf
, sta_conf
, extra
=""):
1445 check_dpp_capab(dev
[0])
1446 logdir
= os
.path
.join(params
['logdir'], "sigma_dut_ap_dpp_qr.sigma-hostapd")
1447 with
HWSimRadio() as (radio
, iface
):
1448 sigma
= start_sigma_dut(iface
, hostapd_logdir
=logdir
)
1450 sigma_dut_cmd_check("ap_reset_default,program,DPP")
1451 res
= sigma_dut_cmd("dev_exec_action,program,DPP,DPPActionType,GetLocalBootstrap,DPPCryptoIdentifier,P-256,DPPBS,QR")
1452 if "status,COMPLETE" not in res
:
1453 raise Exception("dev_exec_action did not succeed: " + res
)
1454 hex = res
.split(',')[3]
1455 uri
= hex.decode('hex')
1456 logger
.info("URI from sigma_dut: " + uri
)
1458 cmd
= "DPP_CONFIGURATOR_ADD"
1459 res
= dev
[0].request(cmd
);
1461 raise Exception("Failed to add configurator")
1464 res
= dev
[0].request("DPP_QR_CODE " + uri
)
1466 raise Exception("Failed to parse QR Code URI")
1469 t
= threading
.Thread(target
=dpp_init_conf
,
1470 args
=(dev
[0], id1
, ap_conf
, conf_id
, extra
))
1472 res
= sigma_dut_cmd("dev_exec_action,program,DPP,DPPActionType,AutomaticDPP,DPPAuthRole,Responder,DPPAuthDirection,Single,DPPProvisioningRole,Enrollee,DPPBS,QR,DPPTimeout,6")
1474 if "ConfResult,OK" not in res
:
1475 raise Exception("Unexpected result: " + res
)
1477 addr
= dev
[1].own_addr().replace(':', '')
1478 cmd
= "DPP_BOOTSTRAP_GEN type=qrcode chan=81/1 mac=" + addr
1479 res
= dev
[1].request(cmd
)
1481 raise Exception("Failed to generate bootstrapping info")
1483 uri1
= dev
[1].request("DPP_BOOTSTRAP_GET_URI %d" % id1
)
1485 res
= dev
[0].request("DPP_QR_CODE " + uri1
)
1487 raise Exception("Failed to parse QR Code URI")
1490 dev
[1].set("dpp_config_processing", "2")
1491 cmd
= "DPP_LISTEN 2412"
1492 if "OK" not in dev
[1].request(cmd
):
1493 raise Exception("Failed to start listen operation")
1494 cmd
= "DPP_AUTH_INIT peer=%d conf=%s %s configurator=%d" % (id0b
, sta_conf
, extra
, conf_id
)
1495 if "OK" not in dev
[0].request(cmd
):
1496 raise Exception("Failed to initiate DPP Authentication")
1497 dev
[1].wait_connected()
1499 sigma_dut_cmd_check("ap_reset_default")
1501 dev
[1].set("dpp_config_processing", "0")
1502 stop_sigma_dut(sigma
)
1504 def test_sigma_dut_ap_dpp_pkex_responder(dev
, apdev
, params
):
1505 """sigma_dut controlled AP as DPP PKEX responder"""
1506 check_dpp_capab(dev
[0])
1507 logdir
= os
.path
.join(params
['logdir'],
1508 "sigma_dut_ap_dpp_pkex_responder.sigma-hostapd")
1509 with
HWSimRadio() as (radio
, iface
):
1510 sigma
= start_sigma_dut(iface
, hostapd_logdir
=logdir
)
1512 run_sigma_dut_ap_dpp_pkex_responder(dev
, apdev
)
1514 stop_sigma_dut(sigma
)
1516 def dpp_init_conf_pkex(dev
, conf_id
):
1517 logger
.info("Starting DPP PKEX initiator/configurator in a thread")
1519 cmd
= "DPP_BOOTSTRAP_GEN type=pkex"
1520 res
= dev
.request(cmd
)
1522 raise Exception("Failed to generate bootstrapping info")
1524 cmd
= "DPP_PKEX_ADD own=%d init=1 conf=ap-dpp configurator=%d code=password" % (id, conf_id
)
1525 res
= dev
.request(cmd
)
1527 raise Exception("Failed to initiate DPP PKEX")
1528 ev
= dev
.wait_event(["DPP-CONF-SENT"], timeout
=5)
1530 raise Exception("DPP configuration not completed (Configurator)")
1531 logger
.info("DPP initiator/configurator done")
1533 def run_sigma_dut_ap_dpp_pkex_responder(dev
, apdev
):
1534 sigma_dut_cmd_check("ap_reset_default,program,DPP")
1536 cmd
= "DPP_CONFIGURATOR_ADD"
1537 res
= dev
[0].request(cmd
);
1539 raise Exception("Failed to add configurator")
1542 t
= threading
.Thread(target
=dpp_init_conf_pkex
, args
=(dev
[0], conf_id
))
1544 res
= sigma_dut_cmd("dev_exec_action,program,DPP,DPPActionType,AutomaticDPP,DPPAuthRole,Responder,DPPAuthDirection,Mutual,DPPProvisioningRole,Enrollee,DPPBS,PKEX,DPPPKEXCode,password,DPPTimeout,6", timeout
=10)
1546 if "BootstrapResult,OK,AuthResult,OK,ConfResult,OK" not in res
:
1547 raise Exception("Unexpected result: " + res
)
1549 sigma_dut_cmd_check("ap_reset_default")
1551 def dpp_proto_init(dev
, id1
):
1553 logger
.info("Starting DPP initiator/configurator in a thread")
1554 cmd
= "DPP_CONFIGURATOR_ADD"
1555 res
= dev
.request(cmd
);
1557 raise Exception("Failed to add configurator")
1560 cmd
= "DPP_AUTH_INIT peer=%d conf=sta-dpp configurator=%d" % (id1
, conf_id
)
1561 if "OK" not in dev
.request(cmd
):
1562 raise Exception("Failed to initiate DPP Authentication")
1564 def test_sigma_dut_dpp_proto_initiator(dev
, apdev
):
1565 """sigma_dut DPP protocol testing - Initiator"""
1566 check_dpp_capab(dev
[0])
1567 check_dpp_capab(dev
[1])
1568 tests
= [ ("InvalidValue", "AuthenticationRequest", "WrappedData",
1569 "BootstrapResult,OK,AuthResult,Errorsent",
1571 ("InvalidValue", "AuthenticationConfirm", "WrappedData",
1572 "BootstrapResult,OK,AuthResult,Errorsent",
1574 ("MissingAttribute", "AuthenticationRequest", "InitCapabilities",
1575 "BootstrapResult,OK,AuthResult,Errorsent",
1576 "Missing or invalid I-capabilities"),
1577 ("InvalidValue", "AuthenticationConfirm", "InitAuthTag",
1578 "BootstrapResult,OK,AuthResult,Errorsent",
1579 "Mismatching Initiator Authenticating Tag"),
1580 ("MissingAttribute", "ConfigurationResponse", "EnrolleeNonce",
1581 "BootstrapResult,OK,AuthResult,OK,ConfResult,Errorsent",
1582 "Missing or invalid Enrollee Nonce attribute") ]
1583 for step
, frame
, attr
, result
, fail
in tests
:
1584 dev
[0].request("FLUSH")
1585 dev
[1].request("FLUSH")
1586 sigma
= start_sigma_dut(dev
[0].ifname
)
1588 run_sigma_dut_dpp_proto_initiator(dev
, step
, frame
, attr
, result
,
1591 stop_sigma_dut(sigma
)
1593 def run_sigma_dut_dpp_proto_initiator(dev
, step
, frame
, attr
, result
, fail
):
1594 addr
= dev
[1].own_addr().replace(':', '')
1595 cmd
= "DPP_BOOTSTRAP_GEN type=qrcode chan=81/6 mac=" + addr
1596 res
= dev
[1].request(cmd
)
1598 raise Exception("Failed to generate bootstrapping info")
1600 uri0
= dev
[1].request("DPP_BOOTSTRAP_GET_URI %d" % id0
)
1602 cmd
= "DPP_LISTEN 2437 role=enrollee"
1603 if "OK" not in dev
[1].request(cmd
):
1604 raise Exception("Failed to start listen operation")
1606 res
= sigma_dut_cmd("dev_exec_action,program,DPP,DPPActionType,SetPeerBootstrap,DPPBootstrappingdata,%s,DPPBS,QR" % uri0
.encode('hex'))
1607 if "status,COMPLETE" not in res
:
1608 raise Exception("dev_exec_action did not succeed: " + res
)
1610 res
= sigma_dut_cmd("dev_exec_action,program,DPP,DPPActionType,AutomaticDPP,DPPAuthRole,Initiator,DPPAuthDirection,Single,DPPProvisioningRole,Configurator,DPPConfIndex,1,DPPSigningKeyECC,P-256,DPPConfEnrolleeRole,STA,DPPBS,QR,DPPTimeout,6,DPPStep,%s,DPPFrameType,%s,DPPIEAttribute,%s" % (step
, frame
, attr
))
1611 if result
not in res
:
1612 raise Exception("Unexpected result: " + res
)
1614 ev
= dev
[1].wait_event(["DPP-FAIL"], timeout
=5)
1615 if ev
is None or fail
not in ev
:
1616 raise Exception("Failure not reported correctly: " + str(ev
))
1618 dev
[1].request("DPP_STOP_LISTEN")
1619 dev
[0].dump_monitor()
1620 dev
[1].dump_monitor()
1622 def test_sigma_dut_dpp_proto_responder(dev
, apdev
):
1623 """sigma_dut DPP protocol testing - Responder"""
1624 check_dpp_capab(dev
[0])
1625 check_dpp_capab(dev
[1])
1626 tests
= [ ("MissingAttribute", "AuthenticationResponse", "DPPStatus",
1627 "BootstrapResult,OK,AuthResult,Errorsent",
1628 "Missing or invalid required DPP Status attribute"),
1629 ("MissingAttribute", "ConfigurationRequest", "EnrolleeNonce",
1630 "BootstrapResult,OK,AuthResult,OK,ConfResult,Errorsent",
1631 "Missing or invalid Enrollee Nonce attribute") ]
1632 for step
, frame
, attr
, result
, fail
in tests
:
1633 dev
[0].request("FLUSH")
1634 dev
[1].request("FLUSH")
1635 sigma
= start_sigma_dut(dev
[0].ifname
)
1637 run_sigma_dut_dpp_proto_responder(dev
, step
, frame
, attr
, result
,
1640 stop_sigma_dut(sigma
)
1642 def run_sigma_dut_dpp_proto_responder(dev
, step
, frame
, attr
, result
, fail
):
1643 res
= sigma_dut_cmd("dev_exec_action,program,DPP,DPPActionType,GetLocalBootstrap,DPPCryptoIdentifier,P-256,DPPBS,QR")
1644 if "status,COMPLETE" not in res
:
1645 raise Exception("dev_exec_action did not succeed: " + res
)
1646 hex = res
.split(',')[3]
1647 uri
= hex.decode('hex')
1648 logger
.info("URI from sigma_dut: " + uri
)
1650 res
= dev
[1].request("DPP_QR_CODE " + uri
)
1652 raise Exception("Failed to parse QR Code URI")
1655 t
= threading
.Thread(target
=dpp_proto_init
, args
=(dev
[1], id1
))
1657 res
= sigma_dut_cmd("dev_exec_action,program,DPP,DPPActionType,AutomaticDPP,DPPAuthRole,Responder,DPPAuthDirection,Single,DPPProvisioningRole,Enrollee,DPPConfIndex,1,DPPSigningKeyECC,P-256,DPPConfEnrolleeRole,STA,DPPBS,QR,DPPTimeout,6,DPPStep,%s,DPPFrameType,%s,DPPIEAttribute,%s" % (step
, frame
, attr
), timeout
=10)
1659 if result
not in res
:
1660 raise Exception("Unexpected result: " + res
)
1662 ev
= dev
[1].wait_event(["DPP-FAIL"], timeout
=5)
1663 if ev
is None or fail
not in ev
:
1664 raise Exception("Failure not reported correctly:" + str(ev
))
1666 dev
[1].request("DPP_STOP_LISTEN")
1667 dev
[0].dump_monitor()
1668 dev
[1].dump_monitor()
1670 def test_sigma_dut_dpp_proto_stop_at_initiator(dev
, apdev
):
1671 """sigma_dut DPP protocol testing - Stop at RX on Initiator"""
1672 check_dpp_capab(dev
[0])
1673 check_dpp_capab(dev
[1])
1674 tests
= [ ("AuthenticationResponse",
1675 "BootstrapResult,OK,AuthResult,Errorsent",
1677 ("ConfigurationRequest",
1678 "BootstrapResult,OK,AuthResult,OK,ConfResult,Errorsent",
1680 for frame
, result
, fail
in tests
:
1681 dev
[0].request("FLUSH")
1682 dev
[1].request("FLUSH")
1683 sigma
= start_sigma_dut(dev
[0].ifname
)
1685 run_sigma_dut_dpp_proto_stop_at_initiator(dev
, frame
, result
, fail
)
1687 stop_sigma_dut(sigma
)
1689 def run_sigma_dut_dpp_proto_stop_at_initiator(dev
, frame
, result
, fail
):
1690 addr
= dev
[1].own_addr().replace(':', '')
1691 cmd
= "DPP_BOOTSTRAP_GEN type=qrcode chan=81/6 mac=" + addr
1692 res
= dev
[1].request(cmd
)
1694 raise Exception("Failed to generate bootstrapping info")
1696 uri0
= dev
[1].request("DPP_BOOTSTRAP_GET_URI %d" % id0
)
1698 cmd
= "DPP_LISTEN 2437 role=enrollee"
1699 if "OK" not in dev
[1].request(cmd
):
1700 raise Exception("Failed to start listen operation")
1702 res
= sigma_dut_cmd("dev_exec_action,program,DPP,DPPActionType,SetPeerBootstrap,DPPBootstrappingdata,%s,DPPBS,QR" % uri0
.encode('hex'))
1703 if "status,COMPLETE" not in res
:
1704 raise Exception("dev_exec_action did not succeed: " + res
)
1706 res
= sigma_dut_cmd("dev_exec_action,program,DPP,DPPActionType,AutomaticDPP,DPPAuthRole,Initiator,DPPAuthDirection,Single,DPPProvisioningRole,Configurator,DPPConfIndex,1,DPPSigningKeyECC,P-256,DPPConfEnrolleeRole,STA,DPPBS,QR,DPPTimeout,6,DPPStep,Timeout,DPPFrameType,%s" % (frame
))
1707 if result
not in res
:
1708 raise Exception("Unexpected result: " + res
)
1710 ev
= dev
[1].wait_event(["DPP-FAIL"], timeout
=5)
1711 if ev
is None or fail
not in ev
:
1712 raise Exception("Failure not reported correctly: " + str(ev
))
1714 dev
[1].request("DPP_STOP_LISTEN")
1715 dev
[0].dump_monitor()
1716 dev
[1].dump_monitor()
1718 def test_sigma_dut_dpp_proto_stop_at_responder(dev
, apdev
):
1719 """sigma_dut DPP protocol testing - Stop at RX on Responder"""
1720 check_dpp_capab(dev
[0])
1721 check_dpp_capab(dev
[1])
1722 tests
= [ ("AuthenticationRequest",
1723 "BootstrapResult,OK,AuthResult,Errorsent",
1725 ("AuthenticationConfirm",
1726 "BootstrapResult,OK,AuthResult,Errorsent",
1728 for frame
, result
, fail
in tests
:
1729 dev
[0].request("FLUSH")
1730 dev
[1].request("FLUSH")
1731 sigma
= start_sigma_dut(dev
[0].ifname
)
1733 run_sigma_dut_dpp_proto_stop_at_responder(dev
, frame
, result
, fail
)
1735 stop_sigma_dut(sigma
)
1737 def run_sigma_dut_dpp_proto_stop_at_responder(dev
, frame
, result
, fail
):
1738 res
= sigma_dut_cmd("dev_exec_action,program,DPP,DPPActionType,GetLocalBootstrap,DPPCryptoIdentifier,P-256,DPPBS,QR")
1739 if "status,COMPLETE" not in res
:
1740 raise Exception("dev_exec_action did not succeed: " + res
)
1741 hex = res
.split(',')[3]
1742 uri
= hex.decode('hex')
1743 logger
.info("URI from sigma_dut: " + uri
)
1745 res
= dev
[1].request("DPP_QR_CODE " + uri
)
1747 raise Exception("Failed to parse QR Code URI")
1750 t
= threading
.Thread(target
=dpp_proto_init
, args
=(dev
[1], id1
))
1752 res
= sigma_dut_cmd("dev_exec_action,program,DPP,DPPActionType,AutomaticDPP,DPPAuthRole,Responder,DPPAuthDirection,Single,DPPProvisioningRole,Enrollee,DPPConfIndex,1,DPPSigningKeyECC,P-256,DPPConfEnrolleeRole,STA,DPPBS,QR,DPPTimeout,6,DPPStep,Timeout,DPPFrameType,%s" % (frame
), timeout
=10)
1754 if result
not in res
:
1755 raise Exception("Unexpected result: " + res
)
1757 ev
= dev
[1].wait_event(["DPP-FAIL"], timeout
=5)
1758 if ev
is None or fail
not in ev
:
1759 raise Exception("Failure not reported correctly:" + str(ev
))
1761 dev
[1].request("DPP_STOP_LISTEN")
1762 dev
[0].dump_monitor()
1763 dev
[1].dump_monitor()
1765 def dpp_proto_init_pkex(dev
):
1767 logger
.info("Starting DPP PKEX initiator/configurator in a thread")
1768 cmd
= "DPP_CONFIGURATOR_ADD"
1769 res
= dev
.request(cmd
);
1771 raise Exception("Failed to add configurator")
1774 cmd
= "DPP_BOOTSTRAP_GEN type=pkex"
1775 res
= dev
.request(cmd
)
1777 raise Exception("Failed to generate bootstrapping info")
1780 cmd
= "DPP_PKEX_ADD own=%d init=1 conf=sta-dpp configurator=%d code=secret" % (id, conf_id
)
1781 if "FAIL" in dev
.request(cmd
):
1782 raise Exception("Failed to initiate DPP PKEX")
1784 def test_sigma_dut_dpp_proto_initiator_pkex(dev
, apdev
):
1785 """sigma_dut DPP protocol testing - Initiator (PKEX)"""
1786 check_dpp_capab(dev
[0])
1787 check_dpp_capab(dev
[1])
1788 tests
= [ ("InvalidValue", "PKEXCRRequest", "WrappedData",
1789 "BootstrapResult,Errorsent",
1791 ("MissingAttribute", "PKEXExchangeRequest", "FiniteCyclicGroup",
1792 "BootstrapResult,Errorsent",
1793 "Missing or invalid Finite Cyclic Group attribute"),
1794 ("MissingAttribute", "PKEXCRRequest", "BSKey",
1795 "BootstrapResult,Errorsent",
1796 "No valid peer bootstrapping key found") ]
1797 for step
, frame
, attr
, result
, fail
in tests
:
1798 dev
[0].request("FLUSH")
1799 dev
[1].request("FLUSH")
1800 sigma
= start_sigma_dut(dev
[0].ifname
)
1802 run_sigma_dut_dpp_proto_initiator_pkex(dev
, step
, frame
, attr
,
1805 stop_sigma_dut(sigma
)
1807 def run_sigma_dut_dpp_proto_initiator_pkex(dev
, step
, frame
, attr
, result
, fail
):
1808 cmd
= "DPP_BOOTSTRAP_GEN type=pkex"
1809 res
= dev
[1].request(cmd
)
1811 raise Exception("Failed to generate bootstrapping info")
1814 cmd
= "DPP_PKEX_ADD own=%d code=secret" % (id1
)
1815 res
= dev
[1].request(cmd
)
1817 raise Exception("Failed to set PKEX data (responder)")
1819 cmd
= "DPP_LISTEN 2437 role=enrollee"
1820 if "OK" not in dev
[1].request(cmd
):
1821 raise Exception("Failed to start listen operation")
1823 res
= sigma_dut_cmd("dev_exec_action,program,DPP,DPPActionType,AutomaticDPP,DPPAuthRole,Initiator,DPPAuthDirection,Single,DPPProvisioningRole,Configurator,DPPConfIndex,1,DPPSigningKeyECC,P-256,DPPConfEnrolleeRole,STA,DPPBS,PKEX,DPPPKEXCode,secret,DPPTimeout,6,DPPStep,%s,DPPFrameType,%s,DPPIEAttribute,%s" % (step
, frame
, attr
))
1824 if result
not in res
:
1825 raise Exception("Unexpected result: " + res
)
1827 ev
= dev
[1].wait_event(["DPP-FAIL"], timeout
=5)
1828 if ev
is None or fail
not in ev
:
1829 raise Exception("Failure not reported correctly: " + str(ev
))
1831 dev
[1].request("DPP_STOP_LISTEN")
1832 dev
[0].dump_monitor()
1833 dev
[1].dump_monitor()
1835 def test_sigma_dut_dpp_proto_responder_pkex(dev
, apdev
):
1836 """sigma_dut DPP protocol testing - Responder (PKEX)"""
1837 check_dpp_capab(dev
[0])
1838 check_dpp_capab(dev
[1])
1839 tests
= [ ("InvalidValue", "PKEXCRResponse", "WrappedData",
1840 "BootstrapResult,Errorsent",
1842 ("MissingAttribute", "PKEXExchangeResponse", "DPPStatus",
1843 "BootstrapResult,Errorsent",
1844 "No DPP Status attribute"),
1845 ("MissingAttribute", "PKEXCRResponse", "BSKey",
1846 "BootstrapResult,Errorsent",
1847 "No valid peer bootstrapping key found") ]
1848 for step
, frame
, attr
, result
, fail
in tests
:
1849 dev
[0].request("FLUSH")
1850 dev
[1].request("FLUSH")
1851 sigma
= start_sigma_dut(dev
[0].ifname
)
1853 run_sigma_dut_dpp_proto_responder_pkex(dev
, step
, frame
, attr
,
1856 stop_sigma_dut(sigma
)
1858 def run_sigma_dut_dpp_proto_responder_pkex(dev
, step
, frame
, attr
, result
, fail
):
1859 t
= threading
.Thread(target
=dpp_proto_init_pkex
, args
=(dev
[1],))
1861 res
= sigma_dut_cmd("dev_exec_action,program,DPP,DPPActionType,AutomaticDPP,DPPAuthRole,Responder,DPPAuthDirection,Single,DPPProvisioningRole,Enrollee,DPPConfIndex,1,DPPSigningKeyECC,P-256,DPPConfEnrolleeRole,STA,DPPBS,PKEX,DPPPKEXCode,secret,DPPTimeout,6,DPPStep,%s,DPPFrameType,%s,DPPIEAttribute,%s" % (step
, frame
, attr
), timeout
=10)
1863 if result
not in res
:
1864 raise Exception("Unexpected result: " + res
)
1866 ev
= dev
[1].wait_event(["DPP-FAIL"], timeout
=5)
1867 if ev
is None or fail
not in ev
:
1868 raise Exception("Failure not reported correctly:" + str(ev
))
1870 dev
[1].request("DPP_STOP_LISTEN")
1871 dev
[0].dump_monitor()
1872 dev
[1].dump_monitor()
1874 def init_sigma_dut_dpp_proto_peer_disc_req(dev
, apdev
):
1875 check_dpp_capab(dev
[0])
1876 check_dpp_capab(dev
[1])
1878 csign
= "30770201010420768240a3fc89d6662d9782f120527fe7fb9edc6366ab0b9c7dde96125cfd250fa00a06082a8648ce3d030107a144034200042908e1baf7bf413cc66f9e878a03e8bb1835ba94b033dbe3d6969fc8575d5eb5dfda1cb81c95cee21d0cd7d92ba30541ffa05cb6296f5dd808b0c1c2a83c0708"
1879 csign_pub
= "3059301306072a8648ce3d020106082a8648ce3d030107034200042908e1baf7bf413cc66f9e878a03e8bb1835ba94b033dbe3d6969fc8575d5eb5dfda1cb81c95cee21d0cd7d92ba30541ffa05cb6296f5dd808b0c1c2a83c0708"
1880 ap_connector
= "eyJ0eXAiOiJkcHBDb24iLCJraWQiOiJwYWtZbXVzd1dCdWpSYTl5OEsweDViaTVrT3VNT3dzZHRlaml2UG55ZHZzIiwiYWxnIjoiRVMyNTYifQ.eyJncm91cHMiOlt7Imdyb3VwSWQiOiIqIiwibmV0Um9sZSI6ImFwIn1dLCJuZXRBY2Nlc3NLZXkiOnsia3R5IjoiRUMiLCJjcnYiOiJQLTI1NiIsIngiOiIybU5vNXZuRkI5bEw3d1VWb1hJbGVPYzBNSEE1QXZKbnpwZXZULVVTYzVNIiwieSI6IlhzS3dqVHJlLTg5WWdpU3pKaG9CN1haeUttTU05OTl3V2ZaSVl0bi01Q3MifX0.XhjFpZgcSa7G2lHy0OCYTvaZFRo5Hyx6b7g7oYyusLC7C_73AJ4_BxEZQVYJXAtDuGvb3dXSkHEKxREP9Q6Qeg"
1881 ap_netaccesskey
= "30770201010420ceba752db2ad5200fa7bc565b9c05c69b7eb006751b0b329b0279de1c19ca67ca00a06082a8648ce3d030107a14403420004da6368e6f9c507d94bef0515a1722578e73430703902f267ce97af4fe51273935ec2b08d3adefbcf588224b3261a01ed76722a630cf7df7059f64862d9fee42b"
1883 params
= { "ssid": "DPPNET01",
1885 "wpa_key_mgmt": "DPP",
1886 "rsn_pairwise": "CCMP",
1887 "dpp_connector": ap_connector
,
1888 "dpp_csign": csign_pub
,
1889 "dpp_netaccesskey": ap_netaccesskey
}
1891 hapd
= hostapd
.add_ap(apdev
[0], params
)
1893 raise HwsimSkip("DPP not supported")
1895 dev
[0].set("dpp_config_processing", "2")
1897 cmd
= "DPP_CONFIGURATOR_ADD key=" + csign
1898 res
= dev
[1].request(cmd
);
1900 raise Exception("Failed to add configurator")
1903 addr
= dev
[1].own_addr().replace(':', '')
1904 cmd
= "DPP_BOOTSTRAP_GEN type=qrcode chan=81/6 mac=" + addr
1905 res
= dev
[1].request(cmd
)
1907 raise Exception("Failed to generate bootstrapping info")
1909 uri0
= dev
[1].request("DPP_BOOTSTRAP_GET_URI %d" % id0
)
1911 dev
[1].set("dpp_configurator_params",
1912 " conf=sta-dpp ssid=%s configurator=%d" % ("DPPNET01".encode("hex"), conf_id
));
1913 cmd
= "DPP_LISTEN 2437 role=configurator"
1914 if "OK" not in dev
[1].request(cmd
):
1915 raise Exception("Failed to start listen operation")
1917 res
= sigma_dut_cmd("dev_exec_action,program,DPP,DPPActionType,SetPeerBootstrap,DPPBootstrappingdata,%s,DPPBS,QR" % uri0
.encode('hex'))
1918 if "status,COMPLETE" not in res
:
1919 raise Exception("dev_exec_action did not succeed: " + res
)
1921 def test_sigma_dut_dpp_proto_peer_disc_req(dev
, apdev
):
1922 """sigma_dut DPP protocol testing - Peer Discovery Request"""
1923 sigma
= start_sigma_dut(dev
[0].ifname
)
1925 init_sigma_dut_dpp_proto_peer_disc_req(dev
, apdev
)
1927 res
= sigma_dut_cmd("dev_exec_action,program,DPP,DPPActionType,AutomaticDPP,DPPAuthRole,Initiator,DPPAuthDirection,Single,DPPProvisioningRole,Enrollee,DPPBS,QR,DPPTimeout,6,DPPWaitForConnect,Yes,DPPStep,MissingAttribute,DPPFrameType,PeerDiscoveryRequest,DPPIEAttribute,TransactionID", timeout
=10)
1928 if "BootstrapResult,OK,AuthResult,OK,ConfResult,OK,NetworkIntroResult,Errorsent" not in res
:
1929 raise Exception("Unexpected result: " + res
)
1931 dev
[0].set("dpp_config_processing", "0")
1932 stop_sigma_dut(sigma
)
1934 def test_sigma_dut_dpp_self_config(dev
, apdev
):
1935 """sigma_dut DPP Configurator enrolling an AP and using self-configuration"""
1936 check_dpp_capab(dev
[0])
1938 hapd
= hostapd
.add_ap(apdev
[0], { "ssid": "unconfigured" })
1939 check_dpp_capab(hapd
)
1941 sigma
= start_sigma_dut(dev
[0].ifname
)
1943 dev
[0].set("dpp_config_processing", "2")
1944 addr
= hapd
.own_addr().replace(':', '')
1945 cmd
= "DPP_BOOTSTRAP_GEN type=qrcode chan=81/1 mac=" + addr
1946 res
= hapd
.request(cmd
)
1948 raise Exception("Failed to generate bootstrapping info")
1950 uri
= hapd
.request("DPP_BOOTSTRAP_GET_URI %d" % id)
1952 res
= sigma_dut_cmd("dev_exec_action,program,DPP,DPPActionType,SetPeerBootstrap,DPPBootstrappingdata,%s,DPPBS,QR" % uri
.encode('hex'))
1953 if "status,COMPLETE" not in res
:
1954 raise Exception("dev_exec_action did not succeed: " + res
)
1956 res
= sigma_dut_cmd("dev_exec_action,program,DPP,DPPActionType,AutomaticDPP,DPPAuthRole,Initiator,DPPAuthDirection,Single,DPPProvisioningRole,Configurator,DPPConfIndex,1,DPPSigningKeyECC,P-256,DPPConfEnrolleeRole,AP,DPPBS,QR,DPPTimeout,6")
1957 if "BootstrapResult,OK,AuthResult,OK,ConfResult,OK" not in res
:
1958 raise Exception("Unexpected result: " + res
)
1959 update_hapd_config(hapd
)
1961 cmd
= "dev_exec_action,program,DPP,DPPActionType,AutomaticDPP,DPPCryptoIdentifier,P-256,DPPBS,QR,DPPAuthRole,Initiator,DPPProvisioningRole,Configurator,DPPAuthDirection,Single,DPPConfIndex,1,DPPTimeout,6,DPPWaitForConnect,Yes,DPPSelfConfigure,Yes"
1962 res
= sigma_dut_cmd(cmd
, timeout
=10)
1963 if "BootstrapResult,OK,AuthResult,OK,ConfResult,OK,NetworkIntroResult,OK,NetworkConnectResult,OK" not in res
:
1964 raise Exception("Unexpected result: " + res
)
1966 stop_sigma_dut(sigma
)
1967 dev
[0].set("dpp_config_processing", "0")
1969 def test_sigma_dut_ap_dpp_self_config(dev
, apdev
, params
):
1970 """sigma_dut DPP AP Configurator using self-configuration"""
1971 logdir
= os
.path
.join(params
['logdir'],
1972 "sigma_dut_ap_dpp_self_config.sigma-hostapd")
1973 with
HWSimRadio() as (radio
, iface
):
1974 sigma
= start_sigma_dut(iface
, hostapd_logdir
=logdir
)
1976 run_sigma_dut_ap_dpp_self_config(dev
, apdev
)
1978 stop_sigma_dut(sigma
)
1979 dev
[0].set("dpp_config_processing", "0")
1981 def run_sigma_dut_ap_dpp_self_config(dev
, apdev
):
1982 check_dpp_capab(dev
[0])
1984 sigma_dut_cmd_check("ap_reset_default,program,DPP")
1986 res
= sigma_dut_cmd("dev_exec_action,program,DPP,DPPActionType,AutomaticDPP,DPPAuthRole,Initiator,DPPAuthDirection,Single,DPPProvisioningRole,Configurator,DPPConfEnrolleeRole,AP,DPPBS,QR,DPPConfIndex,1,DPPSelfConfigure,Yes,DPPTimeout,6", timeout
=10)
1987 if "BootstrapResult,OK,AuthResult,OK,ConfResult,OK" not in res
:
1988 raise Exception("Unexpected result: " + res
)
1990 dev
[0].set("dpp_config_processing", "2")
1992 addr
= dev
[0].own_addr().replace(':', '')
1993 cmd
= "DPP_BOOTSTRAP_GEN type=qrcode chan=81/11 mac=" + addr
1994 res
= dev
[0].request(cmd
)
1996 raise Exception("Failed to generate bootstrapping info")
1998 uri
= dev
[0].request("DPP_BOOTSTRAP_GET_URI %d" % id)
1999 cmd
= "DPP_LISTEN 2462 role=enrollee"
2000 if "OK" not in dev
[0].request(cmd
):
2001 raise Exception("Failed to start listen operation")
2003 res
= sigma_dut_cmd("dev_exec_action,program,DPP,DPPActionType,SetPeerBootstrap,DPPBootstrappingdata,%s,DPPBS,QR" % uri
.encode('hex'))
2004 if "status,COMPLETE" not in res
:
2005 raise Exception("dev_exec_action did not succeed: " + res
)
2006 cmd
= "dev_exec_action,program,DPP,DPPActionType,AutomaticDPP,DPPAuthRole,Initiator,DPPAuthDirection,Single,DPPProvisioningRole,Configurator,DPPConfIndex,1,DPPSigningKeyECC,P-256,DPPConfEnrolleeRole,STA,DPPBS,QR,DPPTimeout,6"
2007 res
= sigma_dut_cmd(cmd
)
2008 if "BootstrapResult,OK,AuthResult,OK,ConfResult,OK" not in res
:
2009 raise Exception("Unexpected result: " + res
)
2010 dev
[0].wait_connected()
2011 dev
[0].request("DISCONNECT")
2012 dev
[0].wait_disconnected()
2013 sigma_dut_cmd_check("ap_reset_default")
2015 def test_sigma_dut_preconfigured_profile(dev
, apdev
):
2016 """sigma_dut controlled connection using preconfigured profile"""
2018 run_sigma_dut_preconfigured_profile(dev
, apdev
)
2020 dev
[0].set("ignore_old_scan_res", "0")
2022 def run_sigma_dut_preconfigured_profile(dev
, apdev
):
2023 ifname
= dev
[0].ifname
2024 sigma
= start_sigma_dut(ifname
)
2026 params
= hostapd
.wpa2_params(ssid
="test-psk", passphrase
="12345678")
2027 hapd
= hostapd
.add_ap(apdev
[0], params
)
2028 dev
[0].connect("test-psk", psk
="12345678", scan_freq
="2412",
2029 only_add_network
=True)
2031 sigma_dut_cmd_check("sta_set_ip_config,interface,%s,dhcp,0,ip,127.0.0.11,mask,255.255.255.0" % ifname
)
2032 sigma_dut_cmd_check("sta_associate,interface,%s,ssid,%s" % (ifname
, "test-psk"))
2033 sigma_dut_wait_connected(ifname
)
2034 sigma_dut_cmd_check("sta_get_ip_config,interface," + ifname
)
2035 sigma_dut_cmd_check("sta_disconnect,interface," + ifname
)
2036 sigma_dut_cmd_check("sta_reset_default,interface," + ifname
)
2038 stop_sigma_dut(sigma
)
2040 def test_sigma_dut_wps_pbc(dev
, apdev
):
2041 """sigma_dut and WPS PBC Enrollee"""
2043 run_sigma_dut_wps_pbc(dev
, apdev
)
2045 dev
[0].set("ignore_old_scan_res", "0")
2047 def run_sigma_dut_wps_pbc(dev
, apdev
):
2048 ssid
= "test-wps-conf"
2049 hapd
= hostapd
.add_ap(apdev
[0],
2050 { "ssid": "wps", "eap_server": "1", "wps_state": "2",
2051 "wpa_passphrase": "12345678", "wpa": "2",
2052 "wpa_key_mgmt": "WPA-PSK", "rsn_pairwise": "CCMP" })
2053 hapd
.request("WPS_PBC")
2055 ifname
= dev
[0].ifname
2056 sigma
= start_sigma_dut(ifname
)
2058 cmd
= "start_wps_registration,interface,%s" % ifname
2059 cmd
+= ",WpsRole,Enrollee"
2060 cmd
+= ",WpsConfigMethod,PBC"
2061 sigma_dut_cmd_check(cmd
, timeout
=15)
2063 sigma_dut_cmd_check("sta_disconnect,interface," + ifname
)
2065 sigma_dut_cmd_check("sta_reset_default,interface," + ifname
)
2066 stop_sigma_dut(sigma
)
2067 dev
[0].flush_scan_cache()
2069 def test_sigma_dut_sta_scan_bss(dev
, apdev
):
2070 """sigma_dut sta_scan_bss"""
2071 hapd
= hostapd
.add_ap(apdev
[0], { "ssid": "test" })
2072 sigma
= start_sigma_dut(dev
[0].ifname
)
2074 cmd
= "sta_scan_bss,Interface,%s,BSSID,%s" % (dev
[0].ifname
, \
2076 res
= sigma_dut_cmd(cmd
, timeout
=10)
2077 if "ssid,test,bsschannel,1" not in res
:
2078 raise Exception("Unexpected result: " + res
)
2080 stop_sigma_dut(sigma
)