u8 my_nonce[WPA_NONCE_LEN];
u8 peer_nonce[WPA_NONCE_LEN];
u8 aek[32]; /* SHA256 digest length */
- u8 mtk[16];
+ u8 mtk[WPA_TK_MAX_LEN];
+ size_t mtk_len;
u8 mgtk[16];
u8 sae_auth_retry;
#endif /* CONFIG_MESH */
MAC2STR(sta->addr));
if (conf->security & MESH_CONF_SEC_AMPE) {
+ wpa_hexdump_key(MSG_DEBUG, "mesh: MTK", sta->mtk, sta->mtk_len);
+ /* TODO: support for other ciphers */
wpa_drv_set_key(wpa_s, WPA_ALG_CCMP, sta->addr, 0, 0,
- seq, sizeof(seq), sta->mtk, sizeof(sta->mtk));
+ seq, sizeof(seq), sta->mtk, sta->mtk_len);
wpa_drv_set_key(wpa_s, WPA_ALG_CCMP, sta->addr, 1, 0,
seq, sizeof(seq),
sta->mgtk, sizeof(sta->mgtk));
seq, sizeof(seq),
sta->mgtk, sizeof(sta->mgtk));
- wpa_hexdump_key(MSG_DEBUG, "mtk:", sta->mtk, sizeof(sta->mtk));
wpa_hexdump_key(MSG_DEBUG, "mgtk:",
sta->mgtk, sizeof(sta->mgtk));
}
ptr += ETH_ALEN;
os_memcpy(ptr, max, ETH_ALEN);
+ sta->mtk_len = wpa_cipher_key_len(WPA_CIPHER_CCMP);
sha256_prf(sta->sae->pmk, SAE_PMK_LEN,
"Temporal Key Derivation", context, sizeof(context),
- sta->mtk, sizeof(sta->mtk));
+ sta->mtk, sta->mtk_len);
return 0;
}