Lines Matching refs:wps

21 static int wps_build_wps_state(struct wps_data *wps, struct wpabuf *msg)  in wps_build_wps_state()  argument
24 if (wps->wps->ap) in wps_build_wps_state()
25 state = wps->wps->wps_state; in wps_build_wps_state()
37 static int wps_build_e_hash(struct wps_data *wps, struct wpabuf *msg) in wps_build_e_hash() argument
43 if (random_get_bytes(wps->snonce, 2 * WPS_SECRET_NONCE_LEN) < 0) in wps_build_e_hash()
45 wpa_hexdump(MSG_DEBUG, "WPS: E-S1", wps->snonce, WPS_SECRET_NONCE_LEN); in wps_build_e_hash()
47 wps->snonce + WPS_SECRET_NONCE_LEN, WPS_SECRET_NONCE_LEN); in wps_build_e_hash()
49 if (wps->dh_pubkey_e == NULL || wps->dh_pubkey_r == NULL) { in wps_build_e_hash()
60 addr[0] = wps->snonce; in wps_build_e_hash()
62 addr[1] = wps->psk1; in wps_build_e_hash()
64 addr[2] = wpabuf_head(wps->dh_pubkey_e); in wps_build_e_hash()
65 len[2] = wpabuf_len(wps->dh_pubkey_e); in wps_build_e_hash()
66 addr[3] = wpabuf_head(wps->dh_pubkey_r); in wps_build_e_hash()
67 len[3] = wpabuf_len(wps->dh_pubkey_r); in wps_build_e_hash()
68 hmac_sha256_vector(wps->authkey, WPS_AUTHKEY_LEN, 4, addr, len, hash); in wps_build_e_hash()
76 addr[0] = wps->snonce + WPS_SECRET_NONCE_LEN; in wps_build_e_hash()
77 addr[1] = wps->psk2; in wps_build_e_hash()
78 hmac_sha256_vector(wps->authkey, WPS_AUTHKEY_LEN, 4, addr, len, hash); in wps_build_e_hash()
85 static int wps_build_e_snonce1(struct wps_data *wps, struct wpabuf *msg) in wps_build_e_snonce1() argument
90 wpabuf_put_data(msg, wps->snonce, WPS_SECRET_NONCE_LEN); in wps_build_e_snonce1()
95 static int wps_build_e_snonce2(struct wps_data *wps, struct wpabuf *msg) in wps_build_e_snonce2() argument
100 wpabuf_put_data(msg, wps->snonce + WPS_SECRET_NONCE_LEN, in wps_build_e_snonce2()
106 static struct wpabuf * wps_build_m1(struct wps_data *wps) in wps_build_m1() argument
112 if (random_get_bytes(wps->nonce_e, WPS_NONCE_LEN) < 0) in wps_build_m1()
115 wps->nonce_e, WPS_NONCE_LEN); in wps_build_m1()
122 config_methods = wps->wps->config_methods; in wps_build_m1()
123 if (wps->wps->ap && !wps->pbc_in_m1 && in wps_build_m1()
124 (wps->dev_password_len != 0 || in wps_build_m1()
140 if (wps->multi_ap_backhaul_sta) in wps_build_m1()
145 wps_build_uuid_e(msg, wps->uuid_e) || in wps_build_m1()
146 wps_build_mac_addr(msg, wps->mac_addr_e) || in wps_build_m1()
147 wps_build_enrollee_nonce(wps, msg) || in wps_build_m1()
148 wps_build_public_key(wps, msg) || in wps_build_m1()
149 wps_build_auth_type_flags(wps, msg) || in wps_build_m1()
150 wps_build_encr_type_flags(wps, msg) || in wps_build_m1()
151 wps_build_conn_type_flags(wps, msg) || in wps_build_m1()
153 wps_build_wps_state(wps, msg) || in wps_build_m1()
154 wps_build_device_attrs(&wps->wps->dev, msg) || in wps_build_m1()
155 wps_build_rf_bands(&wps->wps->dev, msg, in wps_build_m1()
156 wps->wps->rf_band_cb(wps->wps->cb_ctx)) || in wps_build_m1()
157 wps_build_assoc_state(wps, msg) || in wps_build_m1()
158 wps_build_dev_password_id(msg, wps->dev_pw_id) || in wps_build_m1()
160 wps_build_os_version(&wps->wps->dev, msg) || in wps_build_m1()
162 wps_build_vendor_ext_m1(&wps->wps->dev, msg)) { in wps_build_m1()
167 wps->state = RECV_M2; in wps_build_m1()
172 static struct wpabuf * wps_build_m3(struct wps_data *wps) in wps_build_m3() argument
178 if (wps->dev_password == NULL) { in wps_build_m3()
182 if (wps_derive_psk(wps, wps->dev_password, wps->dev_password_len) < 0) in wps_build_m3()
185 if (wps->wps->ap && random_pool_ready() != 1) { in wps_build_m3()
197 wps_build_registrar_nonce(wps, msg) || in wps_build_m3()
198 wps_build_e_hash(wps, msg) || in wps_build_m3()
200 wps_build_authenticator(wps, msg)) { in wps_build_m3()
205 wps->state = RECV_M4; in wps_build_m3()
210 static struct wpabuf * wps_build_m5(struct wps_data *wps) in wps_build_m5() argument
228 wps_build_registrar_nonce(wps, msg) || in wps_build_m5()
229 wps_build_e_snonce1(wps, plain) || in wps_build_m5()
230 wps_build_key_wrap_auth(wps, plain) || in wps_build_m5()
231 wps_build_encr_settings(wps, msg, plain) || in wps_build_m5()
233 wps_build_authenticator(wps, msg)) { in wps_build_m5()
240 wps->state = RECV_M6; in wps_build_m5()
246 static int wps_build_cred_ssid(struct wps_data *wps, struct wpabuf *msg) in wps_build_cred_ssid() argument
250 wpabuf_put_be16(msg, wps->wps->ssid_len); in wps_build_cred_ssid()
251 wpabuf_put_data(msg, wps->wps->ssid, wps->wps->ssid_len); in wps_build_cred_ssid()
256 static int wps_build_cred_auth_type(struct wps_data *wps, struct wpabuf *msg) in wps_build_cred_auth_type() argument
258 u16 auth_type = wps->wps->ap_auth_type; in wps_build_cred_auth_type()
280 static int wps_build_cred_encr_type(struct wps_data *wps, struct wpabuf *msg) in wps_build_cred_encr_type() argument
282 u16 encr_type = wps->wps->ap_encr_type; in wps_build_cred_encr_type()
289 if (wps->wps->ap_auth_type & (WPS_AUTH_WPA2PSK | WPS_AUTH_WPAPSK)) { in wps_build_cred_encr_type()
304 static int wps_build_cred_network_key(struct wps_data *wps, struct wpabuf *msg) in wps_build_cred_network_key() argument
306 if ((wps->wps->ap_auth_type & (WPS_AUTH_WPAPSK | WPS_AUTH_WPA2PSK)) && in wps_build_cred_network_key()
307 wps->wps->network_key_len == 0) { in wps_build_cred_network_key()
320 (unsigned int) wps->new_psk_len * 2); in wps_build_cred_network_key()
326 if (wps->wps->registrar) { in wps_build_cred_network_key()
327 wps_cb_new_psk(wps->wps->registrar, in wps_build_cred_network_key()
328 wps->peer_dev.mac_addr, in wps_build_cred_network_key()
329 wps->p2p_dev_addr, psk, sizeof(psk)); in wps_build_cred_network_key()
336 (unsigned int) wps->wps->network_key_len); in wps_build_cred_network_key()
338 wpabuf_put_be16(msg, wps->wps->network_key_len); in wps_build_cred_network_key()
339 wpabuf_put_data(msg, wps->wps->network_key, wps->wps->network_key_len); in wps_build_cred_network_key()
344 static int wps_build_cred_mac_addr(struct wps_data *wps, struct wpabuf *msg) in wps_build_cred_mac_addr() argument
349 wpabuf_put_data(msg, wps->wps->dev.mac_addr, ETH_ALEN); in wps_build_cred_mac_addr()
354 static int wps_build_ap_settings(struct wps_data *wps, struct wpabuf *plain) in wps_build_ap_settings() argument
360 if (wps->wps->ap_settings) { in wps_build_ap_settings()
362 wpabuf_put_data(plain, wps->wps->ap_settings, in wps_build_ap_settings()
363 wps->wps->ap_settings_len); in wps_build_ap_settings()
369 ret = wps_build_cred_ssid(wps, plain) || in wps_build_ap_settings()
370 wps_build_cred_mac_addr(wps, plain) || in wps_build_ap_settings()
371 wps_build_cred_auth_type(wps, plain) || in wps_build_ap_settings()
372 wps_build_cred_encr_type(wps, plain) || in wps_build_ap_settings()
373 wps_build_cred_network_key(wps, plain); in wps_build_ap_settings()
386 static struct wpabuf * wps_build_m7(struct wps_data *wps) in wps_build_m7() argument
392 plain = wpabuf_alloc(500 + wps->wps->ap_settings_len); in wps_build_m7()
396 msg = wpabuf_alloc(1000 + wps->wps->ap_settings_len); in wps_build_m7()
404 wps_build_registrar_nonce(wps, msg) || in wps_build_m7()
405 wps_build_e_snonce2(wps, plain) || in wps_build_m7()
406 (wps->wps->ap && wps_build_ap_settings(wps, plain)) || in wps_build_m7()
407 wps_build_key_wrap_auth(wps, plain) || in wps_build_m7()
408 wps_build_encr_settings(wps, msg, plain) || in wps_build_m7()
410 wps_build_authenticator(wps, msg)) { in wps_build_m7()
418 if (wps->wps->ap && wps->wps->registrar) { in wps_build_m7()
424 wps_device_store(wps->wps->registrar, &wps->peer_dev, in wps_build_m7()
425 wps->uuid_r); in wps_build_m7()
429 wps->state = RECV_M8; in wps_build_m7()
434 static struct wpabuf * wps_build_wsc_done(struct wps_data *wps) in wps_build_wsc_done() argument
446 wps_build_enrollee_nonce(wps, msg) || in wps_build_wsc_done()
447 wps_build_registrar_nonce(wps, msg) || in wps_build_wsc_done()
453 if (wps->wps->ap) in wps_build_wsc_done()
454 wps->state = RECV_ACK; in wps_build_wsc_done()
456 wps_success_event(wps->wps, wps->peer_dev.mac_addr); in wps_build_wsc_done()
457 wps->state = WPS_FINISHED; in wps_build_wsc_done()
463 struct wpabuf * wps_enrollee_get_msg(struct wps_data *wps, in wps_enrollee_get_msg() argument
468 switch (wps->state) { in wps_enrollee_get_msg()
470 msg = wps_build_m1(wps); in wps_enrollee_get_msg()
474 msg = wps_build_m3(wps); in wps_enrollee_get_msg()
478 msg = wps_build_m5(wps); in wps_enrollee_get_msg()
482 msg = wps_build_m7(wps); in wps_enrollee_get_msg()
486 if (wps->wps->ap) { in wps_enrollee_get_msg()
487 msg = wps_build_wsc_nack(wps); in wps_enrollee_get_msg()
491 msg = wps_build_wsc_ack(wps); in wps_enrollee_get_msg()
495 wps->state = RECV_M2; in wps_enrollee_get_msg()
499 msg = wps_build_wsc_nack(wps); in wps_enrollee_get_msg()
503 msg = wps_build_wsc_done(wps); in wps_enrollee_get_msg()
508 "a message", wps->state); in wps_enrollee_get_msg()
516 wpabuf_free(wps->last_msg); in wps_enrollee_get_msg()
517 wps->last_msg = wpabuf_dup(msg); in wps_enrollee_get_msg()
524 static int wps_process_registrar_nonce(struct wps_data *wps, const u8 *r_nonce) in wps_process_registrar_nonce() argument
531 os_memcpy(wps->nonce_r, r_nonce, WPS_NONCE_LEN); in wps_process_registrar_nonce()
533 wps->nonce_r, WPS_NONCE_LEN); in wps_process_registrar_nonce()
539 static int wps_process_enrollee_nonce(struct wps_data *wps, const u8 *e_nonce) in wps_process_enrollee_nonce() argument
546 if (os_memcmp(wps->nonce_e, e_nonce, WPS_NONCE_LEN) != 0) { in wps_process_enrollee_nonce()
555 static int wps_process_uuid_r(struct wps_data *wps, const u8 *uuid_r) in wps_process_uuid_r() argument
562 os_memcpy(wps->uuid_r, uuid_r, WPS_UUID_LEN); in wps_process_uuid_r()
563 wpa_hexdump(MSG_DEBUG, "WPS: UUID-R", wps->uuid_r, WPS_UUID_LEN); in wps_process_uuid_r()
569 static int wps_process_pubkey(struct wps_data *wps, const u8 *pk, in wps_process_pubkey() argument
577 if (wps->peer_pubkey_hash_set) { in wps_process_pubkey()
580 if (os_memcmp_const(hash, wps->peer_pubkey_hash, in wps_process_pubkey()
588 wps->peer_pubkey_hash, in wps_process_pubkey()
590 wps->config_error = WPS_CFG_PUBLIC_KEY_HASH_MISMATCH; in wps_process_pubkey()
595 wpabuf_free(wps->dh_pubkey_r); in wps_process_pubkey()
596 wps->dh_pubkey_r = wpabuf_alloc_copy(pk, pk_len); in wps_process_pubkey()
597 if (wps->dh_pubkey_r == NULL) in wps_process_pubkey()
600 if (wps_derive_keys(wps) < 0) in wps_process_pubkey()
607 static int wps_process_r_hash1(struct wps_data *wps, const u8 *r_hash1) in wps_process_r_hash1() argument
614 os_memcpy(wps->peer_hash1, r_hash1, WPS_HASH_LEN); in wps_process_r_hash1()
615 wpa_hexdump(MSG_DEBUG, "WPS: R-Hash1", wps->peer_hash1, WPS_HASH_LEN); in wps_process_r_hash1()
621 static int wps_process_r_hash2(struct wps_data *wps, const u8 *r_hash2) in wps_process_r_hash2() argument
628 os_memcpy(wps->peer_hash2, r_hash2, WPS_HASH_LEN); in wps_process_r_hash2()
629 wpa_hexdump(MSG_DEBUG, "WPS: R-Hash2", wps->peer_hash2, WPS_HASH_LEN); in wps_process_r_hash2()
635 static int wps_process_r_snonce1(struct wps_data *wps, const u8 *r_snonce1) in wps_process_r_snonce1() argument
652 addr[1] = wps->psk1; in wps_process_r_snonce1()
654 addr[2] = wpabuf_head(wps->dh_pubkey_e); in wps_process_r_snonce1()
655 len[2] = wpabuf_len(wps->dh_pubkey_e); in wps_process_r_snonce1()
656 addr[3] = wpabuf_head(wps->dh_pubkey_r); in wps_process_r_snonce1()
657 len[3] = wpabuf_len(wps->dh_pubkey_r); in wps_process_r_snonce1()
658 hmac_sha256_vector(wps->authkey, WPS_AUTHKEY_LEN, 4, addr, len, hash); in wps_process_r_snonce1()
660 if (os_memcmp_const(wps->peer_hash1, hash, WPS_HASH_LEN) != 0) { in wps_process_r_snonce1()
663 wps->config_error = WPS_CFG_DEV_PASSWORD_AUTH_FAILURE; in wps_process_r_snonce1()
664 wps_pwd_auth_fail_event(wps->wps, 1, 1, wps->peer_dev.mac_addr); in wps_process_r_snonce1()
675 static int wps_process_r_snonce2(struct wps_data *wps, const u8 *r_snonce2) in wps_process_r_snonce2() argument
692 addr[1] = wps->psk2; in wps_process_r_snonce2()
694 addr[2] = wpabuf_head(wps->dh_pubkey_e); in wps_process_r_snonce2()
695 len[2] = wpabuf_len(wps->dh_pubkey_e); in wps_process_r_snonce2()
696 addr[3] = wpabuf_head(wps->dh_pubkey_r); in wps_process_r_snonce2()
697 len[3] = wpabuf_len(wps->dh_pubkey_r); in wps_process_r_snonce2()
698 hmac_sha256_vector(wps->authkey, WPS_AUTHKEY_LEN, 4, addr, len, hash); in wps_process_r_snonce2()
700 if (os_memcmp_const(wps->peer_hash2, hash, WPS_HASH_LEN) != 0) { in wps_process_r_snonce2()
703 wps->config_error = WPS_CFG_DEV_PASSWORD_AUTH_FAILURE; in wps_process_r_snonce2()
704 wps_pwd_auth_fail_event(wps->wps, 1, 2, wps->peer_dev.mac_addr); in wps_process_r_snonce2()
715 static int wps_process_cred_e(struct wps_data *wps, const u8 *cred, in wps_process_cred_e() argument
728 os_memset(&wps->cred, 0, sizeof(wps->cred)); in wps_process_cred_e()
731 wps_process_cred(attr, &wps->cred)) { in wps_process_cred_e()
736 if (os_memcmp(wps->cred.mac_addr, wps->wps->dev.mac_addr, ETH_ALEN) != in wps_process_cred_e()
740 ")", MAC2STR(wps->cred.mac_addr), in wps_process_cred_e()
741 MAC2STR(wps->wps->dev.mac_addr)); in wps_process_cred_e()
759 if (!(wps->cred.encr_type & in wps_process_cred_e()
761 if (wps->cred.encr_type & WPS_ENCR_WEP) { in wps_process_cred_e()
764 wps->error_indication = WPS_EI_SECURITY_WEP_PROHIBITED; in wps_process_cred_e()
770 "invalid encr_type 0x%x", wps->cred.encr_type); in wps_process_cred_e()
775 if (wps->wps->cred_cb) { in wps_process_cred_e()
776 wps->cred.cred_attr = cred - 4; in wps_process_cred_e()
777 wps->cred.cred_attr_len = cred_len + 4; in wps_process_cred_e()
778 ret = wps->wps->cred_cb(wps->wps->cb_ctx, &wps->cred); in wps_process_cred_e()
779 wps->cred.cred_attr = NULL; in wps_process_cred_e()
780 wps->cred.cred_attr_len = 0; in wps_process_cred_e()
791 static int wps_process_creds(struct wps_data *wps, const u8 *cred[], in wps_process_creds() argument
797 if (wps->wps->ap) in wps_process_creds()
808 res = wps_process_cred_e(wps, cred[i], cred_len[i], wps2); in wps_process_creds()
827 static int wps_process_ap_settings_e(struct wps_data *wps, in wps_process_ap_settings_e() argument
840 if (!wps->wps->ap) { in wps_process_ap_settings_e()
853 if (os_memcmp(cred->mac_addr, wps->wps->dev.mac_addr, ETH_ALEN) != in wps_process_ap_settings_e()
858 MAC2STR(wps->wps->dev.mac_addr)); in wps_process_ap_settings_e()
881 wps->error_indication = WPS_EI_SECURITY_WEP_PROHIBITED; in wps_process_ap_settings_e()
900 wps->error_indication = in wps_process_ap_settings_e()
922 if (wps->wps->cred_cb) { in wps_process_ap_settings_e()
925 wps->wps->cred_cb(wps->wps->cb_ctx, cred); in wps_process_ap_settings_e()
936 static int wps_process_dev_pw_id(struct wps_data *wps, const u8 *dev_pw_id) in wps_process_dev_pw_id() argument
946 if (wps->dev_pw_id == id) { in wps_process_dev_pw_id()
953 wps->dev_pw_id == DEV_PW_REGISTRAR_SPECIFIED) || in wps_process_dev_pw_id()
955 wps->dev_pw_id == DEV_PW_DEFAULT)) { in wps_process_dev_pw_id()
970 "ID from %u to %u", wps->dev_pw_id, id); in wps_process_dev_pw_id()
972 if (wps->dev_pw_id == DEV_PW_PUSHBUTTON && id == DEV_PW_DEFAULT) { in wps_process_dev_pw_id()
978 if (wps->alt_dev_password && wps->alt_dev_pw_id == id) { in wps_process_dev_pw_id()
980 bin_clear_free(wps->dev_password, wps->dev_password_len); in wps_process_dev_pw_id()
981 wps->dev_pw_id = wps->alt_dev_pw_id; in wps_process_dev_pw_id()
982 wps->dev_password = wps->alt_dev_password; in wps_process_dev_pw_id()
983 wps->dev_password_len = wps->alt_dev_password_len; in wps_process_dev_pw_id()
984 wps->alt_dev_password = NULL; in wps_process_dev_pw_id()
985 wps->alt_dev_password_len = 0; in wps_process_dev_pw_id()
993 static enum wps_process_res wps_process_m2(struct wps_data *wps, in wps_process_m2() argument
999 if (wps->state != RECV_M2) { in wps_process_m2()
1001 "receiving M2", wps->state); in wps_process_m2()
1002 wps->state = SEND_WSC_NACK; in wps_process_m2()
1006 if (wps_process_registrar_nonce(wps, attr->registrar_nonce) || in wps_process_m2()
1007 wps_process_enrollee_nonce(wps, attr->enrollee_nonce) || in wps_process_m2()
1008 wps_process_uuid_r(wps, attr->uuid_r) || in wps_process_m2()
1009 wps_process_dev_pw_id(wps, attr->dev_password_id)) { in wps_process_m2()
1010 wps->state = SEND_WSC_NACK; in wps_process_m2()
1020 if (wps->wps->ap && in wps_process_m2()
1021 ((wps->wps->ap_setup_locked && wps->wps->ap_setup_locked != 2) || in wps_process_m2()
1022 wps->dev_password == NULL)) { in wps_process_m2()
1025 wps->config_error = WPS_CFG_SETUP_LOCKED; in wps_process_m2()
1026 wps->state = SEND_WSC_NACK; in wps_process_m2()
1030 if (wps_process_pubkey(wps, attr->public_key, attr->public_key_len) || in wps_process_m2()
1031 wps_process_authenticator(wps, attr->authenticator, msg) || in wps_process_m2()
1032 wps_process_device_attrs(&wps->peer_dev, attr)) { in wps_process_m2()
1033 wps->state = SEND_WSC_NACK; in wps_process_m2()
1038 if (wps->peer_pubkey_hash_set) { in wps_process_m2()
1042 decrypted = wps_decrypt_encr_settings(wps, attr->encr_settings, in wps_process_m2()
1047 wps->state = SEND_WSC_NACK; in wps_process_m2()
1054 wps_process_key_wrap_auth(wps, decrypted, in wps_process_m2()
1056 wps_process_creds(wps, eattr.cred, eattr.cred_len, in wps_process_m2()
1059 wps->state = SEND_WSC_NACK; in wps_process_m2()
1064 wps->state = WPS_MSG_DONE; in wps_process_m2()
1069 wps->state = SEND_M3; in wps_process_m2()
1074 static enum wps_process_res wps_process_m2d(struct wps_data *wps, in wps_process_m2d() argument
1079 if (wps->state != RECV_M2) { in wps_process_m2d()
1081 "receiving M2D", wps->state); in wps_process_m2d()
1082 wps->state = SEND_WSC_NACK; in wps_process_m2d()
1097 if (wps->wps->event_cb) { in wps_process_m2d()
1121 wps->wps->event_cb(wps->wps->cb_ctx, WPS_EV_M2D, &data); in wps_process_m2d()
1124 wps->state = RECEIVED_M2D; in wps_process_m2d()
1129 static enum wps_process_res wps_process_m4(struct wps_data *wps, in wps_process_m4() argument
1141 wps->state = SEND_WSC_NACK; in wps_process_m4()
1146 if (wps->state != RECV_M4) { in wps_process_m4()
1148 "receiving M4", wps->state); in wps_process_m4()
1149 wps->state = SEND_WSC_NACK; in wps_process_m4()
1154 if (wps_process_enrollee_nonce(wps, attr->enrollee_nonce) || in wps_process_m4()
1155 wps_process_authenticator(wps, attr->authenticator, msg) || in wps_process_m4()
1156 wps_process_r_hash1(wps, attr->r_hash1) || in wps_process_m4()
1157 wps_process_r_hash2(wps, attr->r_hash2)) { in wps_process_m4()
1158 wps->state = SEND_WSC_NACK; in wps_process_m4()
1163 decrypted = wps_decrypt_encr_settings(wps, attr->encr_settings, in wps_process_m4()
1168 wps->state = SEND_WSC_NACK; in wps_process_m4()
1175 wps->state = SEND_WSC_NACK; in wps_process_m4()
1183 wps_process_key_wrap_auth(wps, decrypted, eattr->key_wrap_auth) || in wps_process_m4()
1184 wps_process_r_snonce1(wps, eattr->r_snonce1)) { in wps_process_m4()
1186 wps->state = SEND_WSC_NACK; in wps_process_m4()
1192 wps->state = SEND_M5; in wps_process_m4()
1201 static enum wps_process_res wps_process_m6(struct wps_data *wps, in wps_process_m6() argument
1213 wps->state = SEND_WSC_NACK; in wps_process_m6()
1218 if (wps->state != RECV_M6) { in wps_process_m6()
1220 "receiving M6", wps->state); in wps_process_m6()
1221 wps->state = SEND_WSC_NACK; in wps_process_m6()
1226 if (wps_process_enrollee_nonce(wps, attr->enrollee_nonce) || in wps_process_m6()
1227 wps_process_authenticator(wps, attr->authenticator, msg)) { in wps_process_m6()
1228 wps->state = SEND_WSC_NACK; in wps_process_m6()
1233 decrypted = wps_decrypt_encr_settings(wps, attr->encr_settings, in wps_process_m6()
1238 wps->state = SEND_WSC_NACK; in wps_process_m6()
1245 wps->state = SEND_WSC_NACK; in wps_process_m6()
1253 wps_process_key_wrap_auth(wps, decrypted, eattr->key_wrap_auth) || in wps_process_m6()
1254 wps_process_r_snonce2(wps, eattr->r_snonce2)) { in wps_process_m6()
1256 wps->state = SEND_WSC_NACK; in wps_process_m6()
1262 if (wps->wps->ap) in wps_process_m6()
1263 wps->wps->event_cb(wps->wps->cb_ctx, WPS_EV_AP_PIN_SUCCESS, in wps_process_m6()
1266 wps->state = SEND_M7; in wps_process_m6()
1275 static enum wps_process_res wps_process_m8(struct wps_data *wps, in wps_process_m8() argument
1287 wps->state = SEND_WSC_NACK; in wps_process_m8()
1292 if (wps->state != RECV_M8) { in wps_process_m8()
1294 "receiving M8", wps->state); in wps_process_m8()
1295 wps->state = SEND_WSC_NACK; in wps_process_m8()
1300 if (wps_process_enrollee_nonce(wps, attr->enrollee_nonce) || in wps_process_m8()
1301 wps_process_authenticator(wps, attr->authenticator, msg)) { in wps_process_m8()
1302 wps->state = SEND_WSC_NACK; in wps_process_m8()
1307 if (wps->wps->ap && wps->wps->ap_setup_locked) { in wps_process_m8()
1315 wps->config_error = WPS_CFG_SETUP_LOCKED; in wps_process_m8()
1316 wps->state = SEND_WSC_NACK; in wps_process_m8()
1321 decrypted = wps_decrypt_encr_settings(wps, attr->encr_settings, in wps_process_m8()
1326 wps->state = SEND_WSC_NACK; in wps_process_m8()
1331 if (wps_validate_m8_encr(decrypted, wps->wps->ap, in wps_process_m8()
1334 wps->state = SEND_WSC_NACK; in wps_process_m8()
1342 wps_process_key_wrap_auth(wps, decrypted, eattr->key_wrap_auth) || in wps_process_m8()
1343 wps_process_creds(wps, eattr->cred, eattr->cred_len, in wps_process_m8()
1345 wps_process_ap_settings_e(wps, eattr, decrypted, in wps_process_m8()
1348 wps->state = SEND_WSC_NACK; in wps_process_m8()
1354 wps->state = WPS_MSG_DONE; in wps_process_m8()
1365 static enum wps_process_res wps_process_wsc_start(struct wps_data *wps, in wps_process_wsc_start() argument
1372 wps->state = SEND_M1; in wps_process_wsc_start()
1377 static enum wps_process_res wps_process_wsc_msg(struct wps_data *wps, in wps_process_wsc_msg() argument
1397 os_memcmp(wps->nonce_e, attr->enrollee_nonce, WPS_NONCE_LEN) != 0) { in wps_process_wsc_msg()
1405 wps->state = SEND_WSC_NACK; in wps_process_wsc_msg()
1416 ret = wps_process_m2(wps, msg, attr); in wps_process_wsc_msg()
1423 ret = wps_process_m2d(wps, attr); in wps_process_wsc_msg()
1430 ret = wps_process_m4(wps, msg, attr); in wps_process_wsc_msg()
1431 if (ret == WPS_FAILURE || wps->state == SEND_WSC_NACK) in wps_process_wsc_msg()
1432 wps_fail_event(wps->wps, WPS_M4, wps->config_error, in wps_process_wsc_msg()
1433 wps->error_indication, in wps_process_wsc_msg()
1434 wps->peer_dev.mac_addr); in wps_process_wsc_msg()
1441 ret = wps_process_m6(wps, msg, attr); in wps_process_wsc_msg()
1442 if (ret == WPS_FAILURE || wps->state == SEND_WSC_NACK) in wps_process_wsc_msg()
1443 wps_fail_event(wps->wps, WPS_M6, wps->config_error, in wps_process_wsc_msg()
1444 wps->error_indication, in wps_process_wsc_msg()
1445 wps->peer_dev.mac_addr); in wps_process_wsc_msg()
1452 ret = wps_process_m8(wps, msg, attr); in wps_process_wsc_msg()
1453 if (ret == WPS_FAILURE || wps->state == SEND_WSC_NACK) in wps_process_wsc_msg()
1454 wps_fail_event(wps->wps, WPS_M8, wps->config_error, in wps_process_wsc_msg()
1455 wps->error_indication, in wps_process_wsc_msg()
1456 wps->peer_dev.mac_addr); in wps_process_wsc_msg()
1475 wpabuf_free(wps->last_msg); in wps_process_wsc_msg()
1476 wps->last_msg = wpabuf_dup(msg); in wps_process_wsc_msg()
1487 static enum wps_process_res wps_process_wsc_ack(struct wps_data *wps, in wps_process_wsc_ack() argument
1520 os_memcmp(wps->nonce_r, attr->registrar_nonce, WPS_NONCE_LEN) != 0) in wps_process_wsc_ack()
1528 os_memcmp(wps->nonce_e, attr->enrollee_nonce, WPS_NONCE_LEN) != 0) { in wps_process_wsc_ack()
1534 if (wps->state == RECV_ACK && wps->wps->ap) { in wps_process_wsc_ack()
1537 wps_success_event(wps->wps, wps->peer_dev.mac_addr); in wps_process_wsc_ack()
1538 wps->state = WPS_FINISHED; in wps_process_wsc_ack()
1552 static enum wps_process_res wps_process_wsc_nack(struct wps_data *wps, in wps_process_wsc_nack() argument
1586 os_memcmp(wps->nonce_r, attr->registrar_nonce, WPS_NONCE_LEN) != 0) in wps_process_wsc_nack()
1592 wps->nonce_r, WPS_NONCE_LEN); in wps_process_wsc_nack()
1598 os_memcmp(wps->nonce_e, attr->enrollee_nonce, WPS_NONCE_LEN) != 0) { in wps_process_wsc_nack()
1603 wps->nonce_e, WPS_NONCE_LEN); in wps_process_wsc_nack()
1619 switch (wps->state) { in wps_process_wsc_nack()
1621 wps_fail_event(wps->wps, WPS_M3, config_error, in wps_process_wsc_nack()
1622 wps->error_indication, wps->peer_dev.mac_addr); in wps_process_wsc_nack()
1625 wps_fail_event(wps->wps, WPS_M5, config_error, in wps_process_wsc_nack()
1626 wps->error_indication, wps->peer_dev.mac_addr); in wps_process_wsc_nack()
1629 wps_fail_event(wps->wps, WPS_M7, config_error, in wps_process_wsc_nack()
1630 wps->error_indication, wps->peer_dev.mac_addr); in wps_process_wsc_nack()
1638 wps->state = SEND_WSC_NACK; in wps_process_wsc_nack()
1649 enum wps_process_res wps_enrollee_process_msg(struct wps_data *wps, in wps_enrollee_process_msg() argument
1671 return wps_process_wsc_start(wps, msg); in wps_enrollee_process_msg()
1674 return wps_process_wsc_msg(wps, msg); in wps_enrollee_process_msg()
1678 return wps_process_wsc_ack(wps, msg); in wps_enrollee_process_msg()
1682 return wps_process_wsc_nack(wps, msg); in wps_enrollee_process_msg()