mirror of
https://git.kernel.org/pub/scm/network/wireless/iwd.git
synced 2024-12-26 09:32:34 +01:00
handshake: simplify IE setters
The handshake object had 4 setters for authenticator/supplicant IE. Since the IE ultimately gets put into the same buffer, there really only needs to be a single setter for authenticator/supplicant. The handshake object can deal with parsing to decide what kind of IE it is (WPA or RSN).
This commit is contained in:
parent
f6df93d358
commit
75e6ee98f3
@ -228,8 +228,8 @@ static struct eapol_sm *adhoc_new_sm(struct sta_state *sta, bool authenticator,
|
||||
handshake_state_set_event_func(hs, adhoc_handshake_event, sta);
|
||||
handshake_state_set_ssid(hs, (void *)adhoc->ssid, strlen(adhoc->ssid));
|
||||
/* we dont have the connecting peer rsn info, so just set ap == own */
|
||||
handshake_state_set_authenticator_rsn(hs, bss_rsne);
|
||||
handshake_state_set_supplicant_rsn(hs, bss_rsne);
|
||||
handshake_state_set_authenticator_ie(hs, bss_rsne);
|
||||
handshake_state_set_supplicant_ie(hs, bss_rsne);
|
||||
handshake_state_set_pmk(hs, adhoc->pmk, 32);
|
||||
|
||||
if (authenticator) {
|
||||
|
4
src/ap.c
4
src/ap.c
@ -425,8 +425,8 @@ static void ap_start_rsna(struct sta_state *sta, const uint8_t *gtk_rsc)
|
||||
handshake_state_set_event_func(sta->hs, ap_handshake_event, sta);
|
||||
handshake_state_set_ssid(sta->hs, (void *)ap->ssid, strlen(ap->ssid));
|
||||
handshake_state_set_authenticator(sta->hs, true);
|
||||
handshake_state_set_authenticator_rsn(sta->hs, bss_rsne);
|
||||
handshake_state_set_supplicant_rsn(sta->hs, sta->assoc_rsne);
|
||||
handshake_state_set_authenticator_ie(sta->hs, bss_rsne);
|
||||
handshake_state_set_supplicant_ie(sta->hs, sta->assoc_rsne);
|
||||
handshake_state_set_pmk(sta->hs, ap->pmk, 32);
|
||||
handshake_state_set_authenticator_address(sta->hs, own_addr);
|
||||
handshake_state_set_supplicant_address(sta->hs, sta->addr);
|
||||
|
@ -148,19 +148,19 @@ static bool handshake_state_setup_own_ciphers(struct handshake_state *s,
|
||||
return true;
|
||||
}
|
||||
|
||||
static bool handshake_state_set_authenticator_ie(struct handshake_state *s,
|
||||
const uint8_t *ie, bool is_wpa)
|
||||
bool handshake_state_set_authenticator_ie(struct handshake_state *s,
|
||||
const uint8_t *ie)
|
||||
{
|
||||
struct ie_rsn_info info;
|
||||
|
||||
l_free(s->authenticator_ie);
|
||||
s->authenticator_ie = l_memdup(ie, ie[1] + 2u);
|
||||
s->wpa_ie = is_wpa;
|
||||
s->wpa_ie = is_ie_wpa_ie(ie + 2, ie[1]);
|
||||
|
||||
if (!s->authenticator)
|
||||
return true;
|
||||
|
||||
if (is_wpa) {
|
||||
if (s->wpa_ie) {
|
||||
if (ie_parse_wpa_from_data(ie, ie[1] + 2, &info) < 0)
|
||||
return false;
|
||||
} else {
|
||||
@ -171,19 +171,19 @@ static bool handshake_state_set_authenticator_ie(struct handshake_state *s,
|
||||
return handshake_state_setup_own_ciphers(s, &info);
|
||||
}
|
||||
|
||||
static bool handshake_state_set_supplicant_ie(struct handshake_state *s,
|
||||
const uint8_t *ie, bool is_wpa)
|
||||
bool handshake_state_set_supplicant_ie(struct handshake_state *s,
|
||||
const uint8_t *ie)
|
||||
{
|
||||
struct ie_rsn_info info;
|
||||
|
||||
l_free(s->supplicant_ie);
|
||||
s->supplicant_ie = l_memdup(ie, ie[1] + 2u);
|
||||
s->wpa_ie = is_wpa;
|
||||
s->wpa_ie = is_ie_wpa_ie(ie + 2, ie[1]);
|
||||
|
||||
if (s->authenticator)
|
||||
return true;
|
||||
|
||||
if (is_wpa) {
|
||||
if (s->wpa_ie) {
|
||||
if (ie_parse_wpa_from_data(ie, ie[1] + 2, &info) < 0)
|
||||
return false;
|
||||
} else {
|
||||
@ -194,30 +194,6 @@ static bool handshake_state_set_supplicant_ie(struct handshake_state *s,
|
||||
return handshake_state_setup_own_ciphers(s, &info);
|
||||
}
|
||||
|
||||
bool handshake_state_set_authenticator_rsn(struct handshake_state *s,
|
||||
const uint8_t *rsn_ie)
|
||||
{
|
||||
return handshake_state_set_authenticator_ie(s, rsn_ie, false);
|
||||
}
|
||||
|
||||
bool handshake_state_set_supplicant_rsn(struct handshake_state *s,
|
||||
const uint8_t *rsn_ie)
|
||||
{
|
||||
return handshake_state_set_supplicant_ie(s, rsn_ie, false);
|
||||
}
|
||||
|
||||
bool handshake_state_set_authenticator_wpa(struct handshake_state *s,
|
||||
const uint8_t *wpa_ie)
|
||||
{
|
||||
return handshake_state_set_authenticator_ie(s, wpa_ie, true);
|
||||
}
|
||||
|
||||
bool handshake_state_set_supplicant_wpa(struct handshake_state *s,
|
||||
const uint8_t *wpa_ie)
|
||||
{
|
||||
return handshake_state_set_supplicant_ie(s, wpa_ie, true);
|
||||
}
|
||||
|
||||
void handshake_state_set_ssid(struct handshake_state *s, const uint8_t *ssid,
|
||||
size_t ssid_len)
|
||||
{
|
||||
|
@ -141,14 +141,10 @@ void handshake_state_set_ptk(struct handshake_state *s, const uint8_t *ptk,
|
||||
size_t ptk_len);
|
||||
void handshake_state_set_8021x_config(struct handshake_state *s,
|
||||
struct l_settings *settings);
|
||||
bool handshake_state_set_supplicant_rsn(struct handshake_state *s,
|
||||
const uint8_t *rsn_ie);
|
||||
bool handshake_state_set_authenticator_rsn(struct handshake_state *s,
|
||||
const uint8_t *rsn_ie);
|
||||
bool handshake_state_set_supplicant_wpa(struct handshake_state *s,
|
||||
const uint8_t *wpa_ie);
|
||||
bool handshake_state_set_authenticator_wpa(struct handshake_state *s,
|
||||
const uint8_t *wpa_ie);
|
||||
bool handshake_state_set_authenticator_ie(struct handshake_state *s,
|
||||
const uint8_t *ie);
|
||||
bool handshake_state_set_supplicant_ie(struct handshake_state *s,
|
||||
const uint8_t *ie);
|
||||
void handshake_state_set_ssid(struct handshake_state *s,
|
||||
const uint8_t *ssid, size_t ssid_len);
|
||||
void handshake_state_set_mde(struct handshake_state *s,
|
||||
|
@ -1616,14 +1616,14 @@ static void netdev_connect_event(struct l_genl_msg *msg, struct netdev *netdev)
|
||||
|
||||
switch (ie_tlv_iter_get_tag(&iter)) {
|
||||
case IE_TYPE_RSN:
|
||||
handshake_state_set_supplicant_rsn(netdev->handshake,
|
||||
handshake_state_set_supplicant_ie(netdev->handshake,
|
||||
data - 2);
|
||||
break;
|
||||
case IE_TYPE_VENDOR_SPECIFIC:
|
||||
if (!is_ie_wpa_ie(data, ie_tlv_iter_get_length(&iter)))
|
||||
break;
|
||||
|
||||
handshake_state_set_supplicant_wpa(netdev->handshake,
|
||||
handshake_state_set_supplicant_ie(netdev->handshake,
|
||||
data - 2);
|
||||
break;
|
||||
case IE_TYPE_MOBILITY_DOMAIN:
|
||||
@ -2876,7 +2876,7 @@ static int fast_transition(struct netdev *netdev, struct scan_bss *target_bss,
|
||||
handshake_state_set_authenticator_address(netdev->handshake,
|
||||
target_bss->addr);
|
||||
|
||||
handshake_state_set_authenticator_rsn(netdev->handshake,
|
||||
handshake_state_set_authenticator_ie(netdev->handshake,
|
||||
target_bss->rsne);
|
||||
memcpy(netdev->handshake->mde + 2, target_bss->mde, 3);
|
||||
|
||||
|
@ -623,12 +623,12 @@ static int station_build_handshake_rsn(struct handshake_state *hs,
|
||||
/* RSN takes priority */
|
||||
if (bss->rsne) {
|
||||
ie_build_rsne(&info, rsne_buf);
|
||||
handshake_state_set_authenticator_rsn(hs, bss->rsne);
|
||||
handshake_state_set_supplicant_rsn(hs, rsne_buf);
|
||||
handshake_state_set_authenticator_ie(hs, bss->rsne);
|
||||
handshake_state_set_supplicant_ie(hs, rsne_buf);
|
||||
} else {
|
||||
ie_build_wpa(&info, rsne_buf);
|
||||
handshake_state_set_authenticator_wpa(hs, bss->wpa);
|
||||
handshake_state_set_supplicant_wpa(hs, rsne_buf);
|
||||
handshake_state_set_authenticator_ie(hs, bss->wpa);
|
||||
handshake_state_set_supplicant_ie(hs, rsne_buf);
|
||||
}
|
||||
|
||||
if (info.akm_suites & (IE_RSN_AKM_SUITE_FT_OVER_8021X |
|
||||
@ -1199,7 +1199,7 @@ static void station_preauthenticate_cb(struct netdev *netdev,
|
||||
rsn_info.pmkids = pmkid;
|
||||
|
||||
ie_build_rsne(&rsn_info, rsne_buf);
|
||||
handshake_state_set_supplicant_rsn(new_hs, rsne_buf);
|
||||
handshake_state_set_supplicant_ie(new_hs, rsne_buf);
|
||||
}
|
||||
|
||||
station_transition_reassociate(station, bss, new_hs);
|
||||
|
Loading…
Reference in New Issue
Block a user