Lines Matching refs:peerkey
48 struct wpa_peerkey *peerkey = timeout_ctx; in wpa_supplicant_smk_timeout()
55 struct wpa_peerkey *peerkey) in wpa_supplicant_peerkey_free() argument
57 eloop_cancel_timeout(wpa_supplicant_smk_timeout, sm, peerkey); in wpa_supplicant_peerkey_free()
58 os_free(peerkey); in wpa_supplicant_peerkey_free()
125 int ver, struct wpa_peerkey *peerkey) in wpa_supplicant_send_smk_m3() argument
134 kde_len = peerkey->rsnie_p_len + in wpa_supplicant_send_smk_m3()
152 os_memcpy(reply->key_nonce, peerkey->pnonce, WPA_NONCE_LEN); in wpa_supplicant_send_smk_m3()
158 pos = wpa_add_ie(pos, peerkey->rsnie_p, peerkey->rsnie_p_len); in wpa_supplicant_send_smk_m3()
161 pos = wpa_add_kde(pos, RSN_KEY_DATA_MAC_ADDR, peerkey->addr, ETH_ALEN); in wpa_supplicant_send_smk_m3()
164 wpa_add_kde(pos, RSN_KEY_DATA_NONCE, peerkey->inonce, WPA_NONCE_LEN); in wpa_supplicant_send_smk_m3()
178 struct wpa_peerkey *peerkey; in wpa_supplicant_process_smk_m2() local
235 peerkey = os_zalloc(sizeof(*peerkey)); in wpa_supplicant_process_smk_m2()
236 if (peerkey == NULL) in wpa_supplicant_process_smk_m2()
238 os_memcpy(peerkey->addr, kde.mac_addr, ETH_ALEN); in wpa_supplicant_process_smk_m2()
239 os_memcpy(peerkey->inonce, key->key_nonce, WPA_NONCE_LEN); in wpa_supplicant_process_smk_m2()
240 os_memcpy(peerkey->rsnie_i, kde.rsn_ie, kde.rsn_ie_len); in wpa_supplicant_process_smk_m2()
241 peerkey->rsnie_i_len = kde.rsn_ie_len; in wpa_supplicant_process_smk_m2()
242 peerkey->cipher = cipher; in wpa_supplicant_process_smk_m2()
246 peerkey->use_sha256 = 1; in wpa_supplicant_process_smk_m2()
249 if (random_get_bytes(peerkey->pnonce, WPA_NONCE_LEN)) { in wpa_supplicant_process_smk_m2()
252 wpa_supplicant_peerkey_free(sm, peerkey); in wpa_supplicant_process_smk_m2()
256 hdr = (struct rsn_ie_hdr *) peerkey->rsnie_p; in wpa_supplicant_process_smk_m2()
270 hdr->len = (pos - peerkey->rsnie_p) - 2; in wpa_supplicant_process_smk_m2()
271 peerkey->rsnie_p_len = pos - peerkey->rsnie_p; in wpa_supplicant_process_smk_m2()
273 peerkey->rsnie_p, peerkey->rsnie_p_len); in wpa_supplicant_process_smk_m2()
275 wpa_supplicant_send_smk_m3(sm, src_addr, key, ver, peerkey); in wpa_supplicant_process_smk_m2()
277 peerkey->next = sm->peerkey; in wpa_supplicant_process_smk_m2()
278 sm->peerkey = peerkey; in wpa_supplicant_process_smk_m2()
323 struct wpa_peerkey *peerkey) in wpa_supplicant_send_stk_1_of_4() argument
341 if (peerkey->cipher != WPA_CIPHER_TKIP) in wpa_supplicant_send_stk_1_of_4()
349 if (peerkey->cipher != WPA_CIPHER_TKIP) in wpa_supplicant_send_stk_1_of_4()
354 os_memcpy(msg->replay_counter, peerkey->replay_counter, in wpa_supplicant_send_stk_1_of_4()
356 inc_byte_array(peerkey->replay_counter, WPA_REPLAY_COUNTER_LEN); in wpa_supplicant_send_stk_1_of_4()
360 peerkey->smkid, PMKID_LEN); in wpa_supplicant_send_stk_1_of_4()
362 if (random_get_bytes(peerkey->inonce, WPA_NONCE_LEN)) { in wpa_supplicant_send_stk_1_of_4()
369 peerkey->inonce, WPA_NONCE_LEN); in wpa_supplicant_send_stk_1_of_4()
370 os_memcpy(msg->key_nonce, peerkey->inonce, WPA_NONCE_LEN); in wpa_supplicant_send_stk_1_of_4()
373 MAC2STR(peerkey->addr)); in wpa_supplicant_send_stk_1_of_4()
374 wpa_eapol_key_send(sm, NULL, ver, peerkey->addr, ETH_P_EAPOL, in wpa_supplicant_send_stk_1_of_4()
380 struct wpa_peerkey *peerkey) in wpa_supplicant_send_stk_3_of_4() argument
389 kde_len = peerkey->rsnie_i_len + in wpa_supplicant_send_stk_3_of_4()
400 if (peerkey->cipher != WPA_CIPHER_TKIP) in wpa_supplicant_send_stk_3_of_4()
409 if (peerkey->cipher != WPA_CIPHER_TKIP) in wpa_supplicant_send_stk_3_of_4()
414 os_memcpy(msg->replay_counter, peerkey->replay_counter, in wpa_supplicant_send_stk_3_of_4()
416 inc_byte_array(peerkey->replay_counter, WPA_REPLAY_COUNTER_LEN); in wpa_supplicant_send_stk_3_of_4()
420 pos = wpa_add_ie(pos, peerkey->rsnie_i, peerkey->rsnie_i_len); in wpa_supplicant_send_stk_3_of_4()
421 lifetime = host_to_be32(peerkey->lifetime); in wpa_supplicant_send_stk_3_of_4()
425 os_memcpy(msg->key_nonce, peerkey->inonce, WPA_NONCE_LEN); in wpa_supplicant_send_stk_3_of_4()
428 MAC2STR(peerkey->addr)); in wpa_supplicant_send_stk_3_of_4()
429 wpa_eapol_key_send(sm, peerkey->stk.kck, ver, peerkey->addr, in wpa_supplicant_send_stk_3_of_4()
434 static int wpa_supplicant_process_smk_m4(struct wpa_peerkey *peerkey, in wpa_supplicant_process_smk_m4() argument
440 if (os_memcmp(kde->smk + PMK_LEN, peerkey->pnonce, WPA_NONCE_LEN) != 0) in wpa_supplicant_process_smk_m4()
447 if (os_memcmp(kde->nonce, peerkey->inonce, WPA_NONCE_LEN) != 0) { in wpa_supplicant_process_smk_m4()
461 struct wpa_peerkey *peerkey, in wpa_supplicant_process_smk_m5() argument
476 if (os_memcmp(key->key_nonce, peerkey->inonce, WPA_NONCE_LEN) != 0) { in wpa_supplicant_process_smk_m5()
482 if (os_memcmp(kde->smk + PMK_LEN, peerkey->inonce, WPA_NONCE_LEN) != 0) in wpa_supplicant_process_smk_m5()
489 os_memcpy(peerkey->rsnie_p, kde->rsn_ie, kde->rsn_ie_len); in wpa_supplicant_process_smk_m5()
490 peerkey->rsnie_p_len = kde->rsn_ie_len; in wpa_supplicant_process_smk_m5()
491 os_memcpy(peerkey->pnonce, kde->nonce, WPA_NONCE_LEN); in wpa_supplicant_process_smk_m5()
506 peerkey->cipher = cipher; in wpa_supplicant_process_smk_m5()
516 struct wpa_peerkey *peerkey; in wpa_supplicant_process_smk_m45() local
541 for (peerkey = sm->peerkey; peerkey; peerkey = peerkey->next) { in wpa_supplicant_process_smk_m45()
542 if (os_memcmp(peerkey->addr, kde.mac_addr, ETH_ALEN) == 0 && in wpa_supplicant_process_smk_m45()
543 os_memcmp(peerkey->initiator ? peerkey->inonce : in wpa_supplicant_process_smk_m45()
544 peerkey->pnonce, in wpa_supplicant_process_smk_m45()
548 if (peerkey == NULL) { in wpa_supplicant_process_smk_m45()
555 if (peerkey->initiator) { in wpa_supplicant_process_smk_m45()
557 peerkey, &kde) < 0) in wpa_supplicant_process_smk_m45()
560 if (wpa_supplicant_process_smk_m4(peerkey, &kde) < 0) in wpa_supplicant_process_smk_m45()
564 os_memcpy(peerkey->smk, kde.smk, PMK_LEN); in wpa_supplicant_process_smk_m45()
565 peerkey->smk_complete = 1; in wpa_supplicant_process_smk_m45()
566 wpa_hexdump_key(MSG_DEBUG, "RSN: SMK", peerkey->smk, PMK_LEN); in wpa_supplicant_process_smk_m45()
571 peerkey->lifetime = lifetime; in wpa_supplicant_process_smk_m45()
573 sm, peerkey); in wpa_supplicant_process_smk_m45()
575 if (peerkey->initiator) { in wpa_supplicant_process_smk_m45()
576 rsn_smkid(peerkey->smk, peerkey->pnonce, peerkey->addr, in wpa_supplicant_process_smk_m45()
577 peerkey->inonce, sm->own_addr, peerkey->smkid, in wpa_supplicant_process_smk_m45()
578 peerkey->use_sha256); in wpa_supplicant_process_smk_m45()
579 wpa_supplicant_send_stk_1_of_4(sm, peerkey); in wpa_supplicant_process_smk_m45()
581 rsn_smkid(peerkey->smk, peerkey->pnonce, sm->own_addr, in wpa_supplicant_process_smk_m45()
582 peerkey->inonce, peerkey->addr, peerkey->smkid, in wpa_supplicant_process_smk_m45()
583 peerkey->use_sha256); in wpa_supplicant_process_smk_m45()
585 wpa_hexdump(MSG_DEBUG, "RSN: SMKID", peerkey->smkid, PMKID_LEN); in wpa_supplicant_process_smk_m45()
634 struct wpa_peerkey *peerkey; in wpa_supplicant_process_smk_error() local
636 for (peerkey = sm->peerkey; peerkey; peerkey = peerkey->next) { in wpa_supplicant_process_smk_error()
637 if (os_memcmp(peerkey->addr, kde.mac_addr, ETH_ALEN) == in wpa_supplicant_process_smk_error()
641 if (peerkey == NULL) { in wpa_supplicant_process_smk_error()
654 struct wpa_peerkey *peerkey, in wpa_supplicant_process_stk_1_of_4() argument
666 MACSTR " (ver=%d)", MAC2STR(peerkey->addr), ver); in wpa_supplicant_process_stk_1_of_4()
677 if (os_memcmp_const(ie.pmkid, peerkey->smkid, PMKID_LEN) != 0) { in wpa_supplicant_process_stk_1_of_4()
683 if (random_get_bytes(peerkey->pnonce, WPA_NONCE_LEN)) { in wpa_supplicant_process_stk_1_of_4()
689 peerkey->pnonce, WPA_NONCE_LEN); in wpa_supplicant_process_stk_1_of_4()
693 stk = &peerkey->tstk; in wpa_supplicant_process_stk_1_of_4()
694 wpa_pmk_to_ptk(peerkey->smk, PMK_LEN, "Peer key expansion", in wpa_supplicant_process_stk_1_of_4()
695 sm->own_addr, peerkey->addr, in wpa_supplicant_process_stk_1_of_4()
696 peerkey->pnonce, key->key_nonce, in wpa_supplicant_process_stk_1_of_4()
698 peerkey->use_sha256); in wpa_supplicant_process_stk_1_of_4()
703 peerkey->tstk_set = 1; in wpa_supplicant_process_stk_1_of_4()
705 kde_buf_len = peerkey->rsnie_p_len + in wpa_supplicant_process_stk_1_of_4()
712 pos = wpa_add_ie(pos, peerkey->rsnie_p, peerkey->rsnie_p_len); in wpa_supplicant_process_stk_1_of_4()
713 lifetime = host_to_be32(peerkey->lifetime); in wpa_supplicant_process_stk_1_of_4()
716 wpa_add_kde(pos, RSN_KEY_DATA_PMKID, peerkey->smkid, PMKID_LEN); in wpa_supplicant_process_stk_1_of_4()
718 if (wpa_supplicant_send_2_of_4(sm, peerkey->addr, key, ver, in wpa_supplicant_process_stk_1_of_4()
719 peerkey->pnonce, kde_buf, kde_buf_len, in wpa_supplicant_process_stk_1_of_4()
726 os_memcpy(peerkey->inonce, key->key_nonce, WPA_NONCE_LEN); in wpa_supplicant_process_stk_1_of_4()
731 struct wpa_peerkey *peerkey, in wpa_supplicant_update_smk_lifetime() argument
741 if (lifetime >= peerkey->lifetime) { in wpa_supplicant_update_smk_lifetime()
744 "seconds - ignored", lifetime, peerkey->lifetime); in wpa_supplicant_update_smk_lifetime()
750 lifetime, peerkey->lifetime); in wpa_supplicant_update_smk_lifetime()
751 peerkey->lifetime = lifetime; in wpa_supplicant_update_smk_lifetime()
753 eloop_cancel_timeout(wpa_supplicant_smk_timeout, sm, peerkey); in wpa_supplicant_update_smk_lifetime()
755 sm, peerkey); in wpa_supplicant_update_smk_lifetime()
760 struct wpa_peerkey *peerkey, in wpa_supplicant_process_stk_2_of_4() argument
768 MACSTR " (ver=%d)", MAC2STR(peerkey->addr), ver); in wpa_supplicant_process_stk_2_of_4()
781 if (os_memcmp_const(kde.pmkid, peerkey->smkid, PMKID_LEN) != 0) { in wpa_supplicant_process_stk_2_of_4()
787 if (kde.rsn_ie_len != peerkey->rsnie_p_len || in wpa_supplicant_process_stk_2_of_4()
788 os_memcmp(kde.rsn_ie, peerkey->rsnie_p, kde.rsn_ie_len) != 0) { in wpa_supplicant_process_stk_2_of_4()
792 peerkey->rsnie_p, peerkey->rsnie_p_len); in wpa_supplicant_process_stk_2_of_4()
798 wpa_supplicant_update_smk_lifetime(sm, peerkey, &kde); in wpa_supplicant_process_stk_2_of_4()
800 wpa_supplicant_send_stk_3_of_4(sm, peerkey); in wpa_supplicant_process_stk_2_of_4()
801 os_memcpy(peerkey->pnonce, key->key_nonce, WPA_NONCE_LEN); in wpa_supplicant_process_stk_2_of_4()
806 struct wpa_peerkey *peerkey, in wpa_supplicant_process_stk_3_of_4() argument
817 MACSTR " (ver=%d)", MAC2STR(peerkey->addr), ver); in wpa_supplicant_process_stk_3_of_4()
830 if (kde.rsn_ie_len != peerkey->rsnie_i_len || in wpa_supplicant_process_stk_3_of_4()
831 os_memcmp(kde.rsn_ie, peerkey->rsnie_i, kde.rsn_ie_len) != 0) { in wpa_supplicant_process_stk_3_of_4()
836 peerkey->rsnie_i, peerkey->rsnie_i_len); in wpa_supplicant_process_stk_3_of_4()
843 if (os_memcmp(peerkey->inonce, key->key_nonce, WPA_NONCE_LEN) != 0) { in wpa_supplicant_process_stk_3_of_4()
847 MAC2STR(peerkey->addr)); in wpa_supplicant_process_stk_3_of_4()
851 wpa_supplicant_update_smk_lifetime(sm, peerkey, &kde); in wpa_supplicant_process_stk_3_of_4()
853 if (wpa_supplicant_send_4_of_4(sm, peerkey->addr, key, ver, in wpa_supplicant_process_stk_3_of_4()
855 &peerkey->stk)) in wpa_supplicant_process_stk_3_of_4()
858 _key = (u8 *) peerkey->stk.tk1; in wpa_supplicant_process_stk_3_of_4()
859 if (peerkey->cipher == WPA_CIPHER_TKIP) { in wpa_supplicant_process_stk_3_of_4()
862 os_memcpy(key_buf + 16, peerkey->stk.u.auth.rx_mic_key, 8); in wpa_supplicant_process_stk_3_of_4()
863 os_memcpy(key_buf + 24, peerkey->stk.u.auth.tx_mic_key, 8); in wpa_supplicant_process_stk_3_of_4()
870 if (wpa_sm_set_key(sm, peerkey->cipher, peerkey->addr, 0, 1, in wpa_supplicant_process_stk_3_of_4()
880 struct wpa_peerkey *peerkey, in wpa_supplicant_process_stk_4_of_4() argument
887 MACSTR " (ver=%d)", MAC2STR(peerkey->addr), ver); in wpa_supplicant_process_stk_4_of_4()
890 if (wpa_sm_set_key(sm, peerkey->cipher, peerkey->addr, 0, 1, in wpa_supplicant_process_stk_4_of_4()
891 rsc, sizeof(rsc), (u8 *) peerkey->stk.tk1, in wpa_supplicant_process_stk_4_of_4()
892 peerkey->cipher == WPA_CIPHER_TKIP ? 32 : 16) < 0) { in wpa_supplicant_process_stk_4_of_4()
911 struct wpa_peerkey *peerkey, in peerkey_verify_eapol_key_mic() argument
918 if (peerkey->initiator && !peerkey->stk_set) { in peerkey_verify_eapol_key_mic()
919 wpa_pmk_to_ptk(peerkey->smk, PMK_LEN, "Peer key expansion", in peerkey_verify_eapol_key_mic()
920 sm->own_addr, peerkey->addr, in peerkey_verify_eapol_key_mic()
921 peerkey->inonce, key->key_nonce, in peerkey_verify_eapol_key_mic()
922 (u8 *) &peerkey->stk, sizeof(peerkey->stk), in peerkey_verify_eapol_key_mic()
923 peerkey->use_sha256); in peerkey_verify_eapol_key_mic()
924 peerkey->stk_set = 1; in peerkey_verify_eapol_key_mic()
928 if (peerkey->tstk_set) { in peerkey_verify_eapol_key_mic()
930 wpa_eapol_key_mic(peerkey->tstk.kck, ver, buf, len, in peerkey_verify_eapol_key_mic()
937 peerkey->tstk_set = 0; in peerkey_verify_eapol_key_mic()
938 peerkey->stk_set = 1; in peerkey_verify_eapol_key_mic()
939 os_memcpy(&peerkey->stk, &peerkey->tstk, in peerkey_verify_eapol_key_mic()
940 sizeof(peerkey->stk)); in peerkey_verify_eapol_key_mic()
944 if (!ok && peerkey->stk_set) { in peerkey_verify_eapol_key_mic()
946 wpa_eapol_key_mic(peerkey->stk.kck, ver, buf, len, in peerkey_verify_eapol_key_mic()
962 os_memcpy(peerkey->replay_counter, key->replay_counter, in peerkey_verify_eapol_key_mic()
964 peerkey->replay_counter_set = 1; in peerkey_verify_eapol_key_mic()
986 struct wpa_peerkey *peerkey; in wpa_sm_stkstart() local
1012 peerkey = os_zalloc(sizeof(*peerkey)); in wpa_sm_stkstart()
1013 if (peerkey == NULL) in wpa_sm_stkstart()
1015 peerkey->initiator = 1; in wpa_sm_stkstart()
1016 os_memcpy(peerkey->addr, peer, ETH_ALEN); in wpa_sm_stkstart()
1019 peerkey->use_sha256 = 1; in wpa_sm_stkstart()
1027 hdr = (struct rsn_ie_hdr *) peerkey->rsnie_i; in wpa_sm_stkstart()
1042 hdr->len = (pos - peerkey->rsnie_i) - 2; in wpa_sm_stkstart()
1043 peerkey->rsnie_i_len = pos - peerkey->rsnie_i; in wpa_sm_stkstart()
1045 peerkey->rsnie_i, peerkey->rsnie_i_len); in wpa_sm_stkstart()
1047 kde_len = peerkey->rsnie_i_len + 2 + RSN_SELECTOR_LEN + ETH_ALEN; in wpa_sm_stkstart()
1053 wpa_supplicant_peerkey_free(sm, peerkey); in wpa_sm_stkstart()
1066 if (random_get_bytes(peerkey->inonce, WPA_NONCE_LEN)) { in wpa_sm_stkstart()
1070 wpa_supplicant_peerkey_free(sm, peerkey); in wpa_sm_stkstart()
1073 os_memcpy(req->key_nonce, peerkey->inonce, WPA_NONCE_LEN); in wpa_sm_stkstart()
1081 pos = wpa_add_ie(pos, peerkey->rsnie_i, peerkey->rsnie_i_len); in wpa_sm_stkstart()
1090 peerkey->next = sm->peerkey; in wpa_sm_stkstart()
1091 sm->peerkey = peerkey; in wpa_sm_stkstart()
1103 struct wpa_peerkey *prev, *peerkey = sm->peerkey; in peerkey_deinit() local
1104 while (peerkey) { in peerkey_deinit()
1105 prev = peerkey; in peerkey_deinit()
1106 peerkey = peerkey->next; in peerkey_deinit()
1109 sm->peerkey = NULL; in peerkey_deinit()
1113 void peerkey_rx_eapol_4way(struct wpa_sm *sm, struct wpa_peerkey *peerkey, in peerkey_rx_eapol_4way() argument
1120 wpa_supplicant_process_stk_3_of_4(sm, peerkey, key, ver, in peerkey_rx_eapol_4way()
1124 wpa_supplicant_process_stk_1_of_4(sm, peerkey, key, ver, in peerkey_rx_eapol_4way()
1128 wpa_supplicant_process_stk_4_of_4(sm, peerkey, key, ver); in peerkey_rx_eapol_4way()
1131 wpa_supplicant_process_stk_2_of_4(sm, peerkey, key, ver, in peerkey_rx_eapol_4way()