WPS NFC: Update DH keys for ER operations
Since wpa_s->conf->wps_nfc_dh_* parameters can be set in number of code paths, update the wps_context copy of the DH keys even if no new keys were generated for the request. This tries to avoid some cases where public key hash may not have matched the public key used in the ER operation. Signed-hostap: Jouni Malinen <jouni@qca.qualcomm.com>
This commit is contained in:
parent
ac08752d28
commit
d4b4d7fe3c
1 changed files with 9 additions and 11 deletions
|
@ -2337,8 +2337,9 @@ wpas_wps_er_nfc_handover_sel(struct wpa_supplicant *wpa_s, int ndef,
|
||||||
struct wpabuf *ret;
|
struct wpabuf *ret;
|
||||||
u8 u[UUID_LEN], *use_uuid = NULL;
|
u8 u[UUID_LEN], *use_uuid = NULL;
|
||||||
u8 addr[ETH_ALEN], *use_addr = NULL;
|
u8 addr[ETH_ALEN], *use_addr = NULL;
|
||||||
|
struct wps_context *wps = wpa_s->wps;
|
||||||
|
|
||||||
if (wpa_s->wps == NULL)
|
if (wps == NULL)
|
||||||
return NULL;
|
return NULL;
|
||||||
|
|
||||||
if (uuid == NULL)
|
if (uuid == NULL)
|
||||||
|
@ -2351,22 +2352,19 @@ wpas_wps_er_nfc_handover_sel(struct wpa_supplicant *wpa_s, int ndef,
|
||||||
return NULL;
|
return NULL;
|
||||||
|
|
||||||
if (wpa_s->conf->wps_nfc_dh_pubkey == NULL) {
|
if (wpa_s->conf->wps_nfc_dh_pubkey == NULL) {
|
||||||
struct wps_context *wps = wpa_s->wps;
|
|
||||||
if (wps_nfc_gen_dh(&wpa_s->conf->wps_nfc_dh_pubkey,
|
if (wps_nfc_gen_dh(&wpa_s->conf->wps_nfc_dh_pubkey,
|
||||||
&wpa_s->conf->wps_nfc_dh_privkey) < 0)
|
&wpa_s->conf->wps_nfc_dh_privkey) < 0)
|
||||||
return NULL;
|
return NULL;
|
||||||
|
}
|
||||||
|
|
||||||
wpas_wps_nfc_clear(wps);
|
wpas_wps_nfc_clear(wps);
|
||||||
wps->ap_nfc_dev_pw_id = DEV_PW_NFC_CONNECTION_HANDOVER;
|
wps->ap_nfc_dev_pw_id = DEV_PW_NFC_CONNECTION_HANDOVER;
|
||||||
wps->ap_nfc_dh_pubkey =
|
wps->ap_nfc_dh_pubkey = wpabuf_dup(wpa_s->conf->wps_nfc_dh_pubkey);
|
||||||
wpabuf_dup(wpa_s->conf->wps_nfc_dh_pubkey);
|
wps->ap_nfc_dh_privkey = wpabuf_dup(wpa_s->conf->wps_nfc_dh_privkey);
|
||||||
wps->ap_nfc_dh_privkey =
|
|
||||||
wpabuf_dup(wpa_s->conf->wps_nfc_dh_privkey);
|
|
||||||
if (!wps->ap_nfc_dh_pubkey || !wps->ap_nfc_dh_privkey) {
|
if (!wps->ap_nfc_dh_pubkey || !wps->ap_nfc_dh_privkey) {
|
||||||
wpas_wps_nfc_clear(wps);
|
wpas_wps_nfc_clear(wps);
|
||||||
return NULL;
|
return NULL;
|
||||||
}
|
}
|
||||||
}
|
|
||||||
|
|
||||||
ret = wps_er_nfc_handover_sel(wpa_s->wps_er, wpa_s->wps, use_uuid,
|
ret = wps_er_nfc_handover_sel(wpa_s->wps_er, wpa_s->wps, use_uuid,
|
||||||
use_addr, wpa_s->conf->wps_nfc_dh_pubkey);
|
use_addr, wpa_s->conf->wps_nfc_dh_pubkey);
|
||||||
|
|
Loading…
Reference in a new issue