FT-SAE: Add RSNXE into FT MIC
Protect RSNXE, if present, in FT Reassociation Request/Response frames. This is needed for SAE H2E with FT. Signed-off-by: Jouni Malinen <jouni@codeaurora.org>
This commit is contained in:
parent
cb99259775
commit
f73dd0a692
4 changed files with 62 additions and 5 deletions
|
@ -750,10 +750,12 @@ int wpa_ft_mic(const u8 *kck, size_t kck_len, const u8 *sta_addr,
|
|||
const u8 *mdie, size_t mdie_len,
|
||||
const u8 *ftie, size_t ftie_len,
|
||||
const u8 *rsnie, size_t rsnie_len,
|
||||
const u8 *ric, size_t ric_len, u8 *mic)
|
||||
const u8 *ric, size_t ric_len,
|
||||
const u8 *rsnxe, size_t rsnxe_len,
|
||||
u8 *mic)
|
||||
{
|
||||
const u8 *addr[9];
|
||||
size_t len[9];
|
||||
const u8 *addr[10];
|
||||
size_t len[10];
|
||||
size_t i, num_elem = 0;
|
||||
u8 zero_mic[24];
|
||||
size_t mic_len, fte_fixed_len;
|
||||
|
@ -820,6 +822,12 @@ int wpa_ft_mic(const u8 *kck, size_t kck_len, const u8 *sta_addr,
|
|||
num_elem++;
|
||||
}
|
||||
|
||||
if (rsnxe) {
|
||||
addr[num_elem] = rsnxe;
|
||||
len[num_elem] = rsnxe_len;
|
||||
num_elem++;
|
||||
}
|
||||
|
||||
for (i = 0; i < num_elem; i++)
|
||||
wpa_hexdump(MSG_MSGDUMP, "FT: MIC data", addr[i], len[i]);
|
||||
#ifdef CONFIG_SHA384
|
||||
|
@ -961,6 +969,13 @@ int wpa_ft_parse_ies(const u8 *ies, size_t ies_len,
|
|||
update_use_sha384 = 0;
|
||||
}
|
||||
break;
|
||||
case WLAN_EID_RSNX:
|
||||
wpa_hexdump(MSG_DEBUG, "FT: RSNXE", pos, len);
|
||||
if (len < 1)
|
||||
break;
|
||||
parse->rsnxe = pos;
|
||||
parse->rsnxe_len = len;
|
||||
break;
|
||||
case WLAN_EID_MOBILITY_DOMAIN:
|
||||
wpa_hexdump(MSG_DEBUG, "FT: MDE", pos, len);
|
||||
if (len < sizeof(struct rsn_mdie))
|
||||
|
@ -1043,6 +1058,8 @@ int wpa_ft_parse_ies(const u8 *ies, size_t ies_len,
|
|||
prot_ie_count--;
|
||||
if (parse->ftie)
|
||||
prot_ie_count--;
|
||||
if (parse->rsnxe)
|
||||
prot_ie_count--;
|
||||
if (prot_ie_count < 0) {
|
||||
wpa_printf(MSG_DEBUG, "FT: Some required IEs not included in "
|
||||
"the protected IE count");
|
||||
|
|
|
@ -364,7 +364,9 @@ int wpa_ft_mic(const u8 *kck, size_t kck_len, const u8 *sta_addr,
|
|||
const u8 *mdie, size_t mdie_len,
|
||||
const u8 *ftie, size_t ftie_len,
|
||||
const u8 *rsnie, size_t rsnie_len,
|
||||
const u8 *ric, size_t ric_len, u8 *mic);
|
||||
const u8 *ric, size_t ric_len,
|
||||
const u8 *rsnxe, size_t rsnxe_len,
|
||||
u8 *mic);
|
||||
int wpa_derive_pmk_r0(const u8 *xxkey, size_t xxkey_len,
|
||||
const u8 *ssid, size_t ssid_len,
|
||||
const u8 *mdid, const u8 *r0kh_id, size_t r0kh_id_len,
|
||||
|
@ -461,6 +463,8 @@ struct wpa_ft_ies {
|
|||
size_t ric_len;
|
||||
int key_mgmt;
|
||||
int pairwise_cipher;
|
||||
const u8 *rsnxe;
|
||||
size_t rsnxe_len;
|
||||
};
|
||||
|
||||
int wpa_ft_parse_ies(const u8 *ies, size_t ies_len, struct wpa_ft_ies *parse,
|
||||
|
|
Loading…
Add table
Add a link
Reference in a new issue