#!/bin/sh -axe
tohex() { od -tx1 -An | tr -d ' \n'; }
setchan() {
	chan_sta=$1
	chan_ap=$2
	dppfreq_sta=$(expr $chan_sta '*' 5 + 2407)
	dppfreq_ap=$(expr $chan_ap '*' 5 + 2407)
	dppchan="C:81/$chan_sta;"
	uri="DPP:${dppchan}V:2;K:MDkwEwYHKoZIzj0CAQYIKoZIzj0DAQcDIgACFVVCZpHvxLF2iPc5zaojZjpz6HXniq4OR5+NDktOa28=;;"
}

dut=${dut:-sh -axe}
ref=${ref:-sh -axe}
ssid=test-ssid
ssidhex=$(echo -n $ssid | tohex)
psk=12345678
pskhex=$(echo -n $psk | tohex)

confhex="307702010104202d8961acd594a13ce84028f97e5c0d652f784d70b5d6fe216ef06b5aa9ad2132a00a06082a8648ce3d030107a144034200048467341d13849741f9fdb2ce7b843ee72bb8ee284c696a228e00fec9b6ea37c48ca5fe2f021ee73081078a6805477430442c14efb85ae24461cfc3aaafcd6ee2"

urikeyhex="30770201010420835bb02c1319ed97efff01a3db2c8da14603becd7b4c08d7423beecb4657f2cea00a06082a8648ce3d030107a144034200041555426691efc4b17688f739cdaa23663a73e875e78aae0e479f8d0e4b4e6b6f01aba682ce0997c0e9242515cb6b4326daa5caccfcd5a629e6641c1c0b1bfa3e"
urikeypk="95a7c4aa285f8fb0dff4c7de0cb6c7d1a00f9a2300f5a2954c9e8ec591001dbc"
urikeychirp="479af679f6e9e14926d0b357be084d3348ff54c23b8d9c28ba75905491c152dc"

dppconn="eyJ0eXAiOiJkcHBDb24iLCJraWQiOiJfNURkaUZVZ3dYZXJWTlktaHlDY2hqZmg3Si1nakN0R0RVZE9PMm1na1lZIiwiYWxnIjoiRVMyNTYifQ.eyJncm91cHMiOlt7Imdyb3VwSWQiOiIqIiwibmV0Um9sZSI6ImFwIn1dLCJuZXRBY2Nlc3NLZXkiOnsia3R5IjoiRUMiLCJjcnYiOiJQLTI1NiIsIngiOiJzOEZOTVJDVi02QWhWTDV6RVRIMlloeklreHUyRFdpelFVWXdnandCMHJjIiwieSI6InBDT0ZvMjllZ3lnSmZNMzBESlFqa3lLMUF2UFdBUGtQLUlvQ284Q3cwaGMifX0._VVcNqEE-GONeAmqrtc-7jsVrVHSZprlLklMJBFb6R7-SOXtleqryCQxQbQkLWZ9sL8qeZvnA2z1NIHQmio5jw"
dppcsign="3059301306072a8648ce3d020106082a8648ce3d030107034200048467341d13849741f9fdb2ce7b843ee72bb8ee284c696a228e00fec9b6ea37c48ca5fe2f021ee73081078a6805477430442c14efb85ae24461cfc3aaafcd6ee2"
dppnet="3077020101042001444f5f096619c8ba3a47e7d5bfbe237def3908cc278d6b42f65de49d04513ba00a06082a8648ce3d030107a14403420004b3c14d311095fba02154be731131f6621cc8931bb60d68b3414630823c01d2b7a42385a36f5e8328097ccdf40c94239322b502f3d600f90ff88a02a3c0b0d217"

setchan 1 11

$dut <<-.
	cat <<-_ >/tmp/hapd
		ctrl_interface=/var/run/hostapd
		interface=$dut_vif
		hw_mode=g
		channel=$chan_ap
		ssid=$ssid
		wpa=2
		ieee80211w=1
		wpa_pairwise=CCMP
		rsn_pairwise=CCMP
		wpa_key_mgmt=WPA-PSK DPP
		wpa_passphrase=$psk
		dpp_connector=$dppconn
		dpp_csign=$dppcsign
		dpp_netaccesskey=$dppnet
_

	hostapd -B /tmp/hapd -f /tmp/hapd.log -dd -t
.

$ref <<.
	cat <<_ >/tmp/wpas
		p2p_disabled=1
		ctrl_interface=/var/run/wpa_supplicant
		dpp_config_processing=2
_
	wpa_supplicant -B -i $ref_vif -c /tmp/wpas -dd -f /tmp/wpas.log -t
	wpa_cli -i $ref_vif dpp_bootstrap_gen type=qrcode key="$urikeyhex"
	wpa_cli -i $ref_vif dpp_listen $dppfreq_sta
.

$dut <<.
	hostapd_cli -i $dut_vif dpp_configurator_add key=$confhex
	hostapd_cli -i $dut_vif set dpp_configurator_connectivity 1
	# hostapd_cli -i $dut_vif set dpp_configurator_params "conf=sta-psk ssid=$ssidhex pass=$pskhex configurator=1"
	hostapd_cli -i $dut_vif dpp_qr_code "$uri"
	hostapd_cli -i $dut_vif dpp_auth_init configurator=1 peer=1 ssid=$ssidhex pass=$pskhex conf=sta-psk
.

$dut <<.
	timeout 30 sh -c '
		while ! hostapd_cli -i $dut_vif list_sta | grep $ref_mac
		do
			sleep 1
		done
	'
.

echo PASS
