P2P: Use PSK format in WPS Credential

This commit is contained in:
Jouni Malinen 2010-07-18 14:30:25 -07:00 committed by Jouni Malinen
parent 6e3f4b89ea
commit f684e608af
7 changed files with 16 additions and 5 deletions

View file

@ -652,7 +652,7 @@ ieee802_1x_alloc_eapol_sm(struct hostapd_data *hapd, struct sta_info *sta)
flags |= EAPOL_SM_FROM_PMKSA_CACHE; flags |= EAPOL_SM_FROM_PMKSA_CACHE;
} }
return eapol_auth_alloc(hapd->eapol_auth, sta->addr, flags, return eapol_auth_alloc(hapd->eapol_auth, sta->addr, flags,
sta->wps_ie, sta); sta->wps_ie, sta->p2p_ie, sta);
} }

View file

@ -106,6 +106,7 @@ struct eap_config {
int tnc; int tnc;
struct wps_context *wps; struct wps_context *wps;
const struct wpabuf *assoc_wps_ie; const struct wpabuf *assoc_wps_ie;
const struct wpabuf *assoc_p2p_ie;
const u8 *peer_addr; const u8 *peer_addr;
int fragment_size; int fragment_size;
}; };

View file

@ -183,6 +183,7 @@ struct eap_sm {
int tnc; int tnc;
struct wps_context *wps; struct wps_context *wps;
struct wpabuf *assoc_wps_ie; struct wpabuf *assoc_wps_ie;
struct wpabuf *assoc_p2p_ie;
Boolean start_reauth; Boolean start_reauth;

View file

@ -1255,6 +1255,8 @@ struct eap_sm * eap_server_sm_init(void *eapol_ctx,
sm->wps = conf->wps; sm->wps = conf->wps;
if (conf->assoc_wps_ie) if (conf->assoc_wps_ie)
sm->assoc_wps_ie = wpabuf_dup(conf->assoc_wps_ie); sm->assoc_wps_ie = wpabuf_dup(conf->assoc_wps_ie);
if (conf->assoc_p2p_ie)
sm->assoc_p2p_ie = wpabuf_dup(conf->assoc_p2p_ie);
if (conf->peer_addr) if (conf->peer_addr)
os_memcpy(sm->peer_addr, conf->peer_addr, ETH_ALEN); os_memcpy(sm->peer_addr, conf->peer_addr, ETH_ALEN);
sm->fragment_size = conf->fragment_size; sm->fragment_size = conf->fragment_size;
@ -1292,6 +1294,7 @@ void eap_server_sm_deinit(struct eap_sm *sm)
os_free(sm->eap_if.aaaEapKeyData); os_free(sm->eap_if.aaaEapKeyData);
eap_user_free(sm->user); eap_user_free(sm->user);
wpabuf_free(sm->assoc_wps_ie); wpabuf_free(sm->assoc_wps_ie);
wpabuf_free(sm->assoc_p2p_ie);
os_free(sm); os_free(sm);
} }

View file

@ -135,8 +135,11 @@ static void * eap_wsc_init(struct eap_sm *sm)
} }
cfg.assoc_wps_ie = sm->assoc_wps_ie; cfg.assoc_wps_ie = sm->assoc_wps_ie;
cfg.peer_addr = sm->peer_addr; cfg.peer_addr = sm->peer_addr;
if (0 /* TODO: could provide option for forcing PSK format */) if (sm->assoc_p2p_ie) {
wpa_printf(MSG_DEBUG, "EAP-WSC: Prefer PSK format for P2P "
"client");
cfg.use_psk_key = 1; cfg.use_psk_key = 1;
}
data->wps = wps_init(&cfg); data->wps = wps_init(&cfg);
if (data->wps == NULL) { if (data->wps == NULL) {
os_free(data); os_free(data);

View file

@ -762,7 +762,8 @@ SM_STEP(CTRL_DIR)
struct eapol_state_machine * struct eapol_state_machine *
eapol_auth_alloc(struct eapol_authenticator *eapol, const u8 *addr, eapol_auth_alloc(struct eapol_authenticator *eapol, const u8 *addr,
int flags, const struct wpabuf *assoc_wps_ie, void *sta_ctx) int flags, const struct wpabuf *assoc_wps_ie,
const struct wpabuf *assoc_p2p_ie, void *sta_ctx)
{ {
struct eapol_state_machine *sm; struct eapol_state_machine *sm;
struct eap_config eap_conf; struct eap_config eap_conf;
@ -829,6 +830,7 @@ eapol_auth_alloc(struct eapol_authenticator *eapol, const u8 *addr,
eap_conf.tnc = eapol->conf.tnc; eap_conf.tnc = eapol->conf.tnc;
eap_conf.wps = eapol->conf.wps; eap_conf.wps = eapol->conf.wps;
eap_conf.assoc_wps_ie = assoc_wps_ie; eap_conf.assoc_wps_ie = assoc_wps_ie;
eap_conf.assoc_p2p_ie = assoc_p2p_ie;
eap_conf.peer_addr = addr; eap_conf.peer_addr = addr;
eap_conf.fragment_size = eapol->conf.fragment_size; eap_conf.fragment_size = eapol->conf.fragment_size;
sm->eap = eap_server_sm_init(sm, &eapol_cb, &eap_conf); sm->eap = eap_server_sm_init(sm, &eapol_cb, &eap_conf);

View file

@ -80,7 +80,8 @@ struct eapol_authenticator * eapol_auth_init(struct eapol_auth_config *conf,
void eapol_auth_deinit(struct eapol_authenticator *eapol); void eapol_auth_deinit(struct eapol_authenticator *eapol);
struct eapol_state_machine * struct eapol_state_machine *
eapol_auth_alloc(struct eapol_authenticator *eapol, const u8 *addr, eapol_auth_alloc(struct eapol_authenticator *eapol, const u8 *addr,
int flags, const struct wpabuf *assoc_wps_ie, void *sta_ctx); int flags, const struct wpabuf *assoc_wps_ie,
const struct wpabuf *assoc_p2p_ie, void *sta_ctx);
void eapol_auth_free(struct eapol_state_machine *sm); void eapol_auth_free(struct eapol_state_machine *sm);
void eapol_auth_step(struct eapol_state_machine *sm); void eapol_auth_step(struct eapol_state_machine *sm);
void eapol_auth_dump_state(FILE *f, const char *prefix, void eapol_auth_dump_state(FILE *f, const char *prefix,