FT: Allow cached XXKey/MPMK to be used if new XXKey is not available
This allows supplicant side to complete FT initial mobility domain association using FT-EAP with PMKSA caching. Signed-off-by: Jouni Malinen <jouni@codeaurora.org>
This commit is contained in:
parent
16c511449d
commit
0c46b1a516
1 changed files with 11 additions and 2 deletions
|
@ -18,6 +18,7 @@
|
||||||
#include "drivers/driver.h"
|
#include "drivers/driver.h"
|
||||||
#include "wpa.h"
|
#include "wpa.h"
|
||||||
#include "wpa_i.h"
|
#include "wpa_i.h"
|
||||||
|
#include "pmksa_cache.h"
|
||||||
|
|
||||||
#ifdef CONFIG_IEEE80211R
|
#ifdef CONFIG_IEEE80211R
|
||||||
|
|
||||||
|
@ -27,15 +28,23 @@ int wpa_derive_ptk_ft(struct wpa_sm *sm, const unsigned char *src_addr,
|
||||||
u8 ptk_name[WPA_PMK_NAME_LEN];
|
u8 ptk_name[WPA_PMK_NAME_LEN];
|
||||||
const u8 *anonce = key->key_nonce;
|
const u8 *anonce = key->key_nonce;
|
||||||
int use_sha384 = wpa_key_mgmt_sha384(sm->key_mgmt);
|
int use_sha384 = wpa_key_mgmt_sha384(sm->key_mgmt);
|
||||||
|
const u8 *mpmk;
|
||||||
|
size_t mpmk_len;
|
||||||
|
|
||||||
if (sm->xxkey_len == 0) {
|
if (sm->xxkey_len > 0) {
|
||||||
|
mpmk = sm->xxkey;
|
||||||
|
mpmk_len = sm->xxkey_len;
|
||||||
|
} else if (sm->cur_pmksa) {
|
||||||
|
mpmk = sm->cur_pmksa->pmk;
|
||||||
|
mpmk_len = sm->cur_pmksa->pmk_len;
|
||||||
|
} else {
|
||||||
wpa_printf(MSG_DEBUG, "FT: XXKey not available for key "
|
wpa_printf(MSG_DEBUG, "FT: XXKey not available for key "
|
||||||
"derivation");
|
"derivation");
|
||||||
return -1;
|
return -1;
|
||||||
}
|
}
|
||||||
|
|
||||||
sm->pmk_r0_len = use_sha384 ? SHA384_MAC_LEN : PMK_LEN;
|
sm->pmk_r0_len = use_sha384 ? SHA384_MAC_LEN : PMK_LEN;
|
||||||
if (wpa_derive_pmk_r0(sm->xxkey, sm->xxkey_len, sm->ssid,
|
if (wpa_derive_pmk_r0(mpmk, mpmk_len, sm->ssid,
|
||||||
sm->ssid_len, sm->mobility_domain,
|
sm->ssid_len, sm->mobility_domain,
|
||||||
sm->r0kh_id, sm->r0kh_id_len, sm->own_addr,
|
sm->r0kh_id, sm->r0kh_id_len, sm->own_addr,
|
||||||
sm->pmk_r0, sm->pmk_r0_name, use_sha384) < 0)
|
sm->pmk_r0, sm->pmk_r0_name, use_sha384) < 0)
|
||||||
|
|
Loading…
Reference in a new issue