Lines Matching defs:peerkey

22 #include "peerkey.h"
48 struct wpa_peerkey *peerkey = timeout_ctx;
55 struct wpa_peerkey *peerkey)
57 eloop_cancel_timeout(wpa_supplicant_smk_timeout, sm, peerkey);
58 os_free(peerkey);
125 int ver, struct wpa_peerkey *peerkey)
134 kde_len = peerkey->rsnie_p_len +
152 os_memcpy(reply->key_nonce, peerkey->pnonce, WPA_NONCE_LEN);
158 pos = wpa_add_ie(pos, peerkey->rsnie_p, peerkey->rsnie_p_len);
161 pos = wpa_add_kde(pos, RSN_KEY_DATA_MAC_ADDR, peerkey->addr, ETH_ALEN);
164 wpa_add_kde(pos, RSN_KEY_DATA_NONCE, peerkey->inonce, WPA_NONCE_LEN);
178 struct wpa_peerkey *peerkey;
241 peerkey = os_zalloc(sizeof(*peerkey));
242 if (peerkey == NULL)
244 os_memcpy(peerkey->addr, kde.mac_addr, ETH_ALEN);
245 os_memcpy(peerkey->inonce, key->key_nonce, WPA_NONCE_LEN);
246 os_memcpy(peerkey->rsnie_i, kde.rsn_ie, kde.rsn_ie_len);
247 peerkey->rsnie_i_len = kde.rsn_ie_len;
248 peerkey->cipher = cipher;
252 peerkey->use_sha256 = 1;
255 if (random_get_bytes(peerkey->pnonce, WPA_NONCE_LEN)) {
258 wpa_supplicant_peerkey_free(sm, peerkey);
262 hdr = (struct rsn_ie_hdr *) peerkey->rsnie_p;
276 hdr->len = (pos - peerkey->rsnie_p) - 2;
277 peerkey->rsnie_p_len = pos - peerkey->rsnie_p;
279 peerkey->rsnie_p, peerkey->rsnie_p_len);
281 wpa_supplicant_send_smk_m3(sm, src_addr, key, ver, peerkey);
283 peerkey->next = sm->peerkey;
284 sm->peerkey = peerkey;
329 struct wpa_peerkey *peerkey)
347 if (peerkey->cipher != WPA_CIPHER_TKIP)
355 if (peerkey->cipher != WPA_CIPHER_TKIP)
360 os_memcpy(msg->replay_counter, peerkey->replay_counter,
362 inc_byte_array(peerkey->replay_counter, WPA_REPLAY_COUNTER_LEN);
366 peerkey->smkid, PMKID_LEN);
368 if (random_get_bytes(peerkey->inonce, WPA_NONCE_LEN)) {
375 peerkey->inonce, WPA_NONCE_LEN);
376 os_memcpy(msg->key_nonce, peerkey->inonce, WPA_NONCE_LEN);
379 MAC2STR(peerkey->addr));
380 wpa_eapol_key_send(sm, NULL, ver, peerkey->addr, ETH_P_EAPOL,
386 struct wpa_peerkey *peerkey)
395 kde_len = peerkey->rsnie_i_len +
406 if (peerkey->cipher != WPA_CIPHER_TKIP)
415 if (peerkey->cipher != WPA_CIPHER_TKIP)
420 os_memcpy(msg->replay_counter, peerkey->replay_counter,
422 inc_byte_array(peerkey->replay_counter, WPA_REPLAY_COUNTER_LEN);
426 pos = wpa_add_ie(pos, peerkey->rsnie_i, peerkey->rsnie_i_len);
427 lifetime = host_to_be32(peerkey->lifetime);
431 os_memcpy(msg->key_nonce, peerkey->inonce, WPA_NONCE_LEN);
434 MAC2STR(peerkey->addr));
435 wpa_eapol_key_send(sm, peerkey->stk.kck, ver, peerkey->addr,
440 static int wpa_supplicant_process_smk_m4(struct wpa_peerkey *peerkey,
446 if (os_memcmp(kde->smk + PMK_LEN, peerkey->pnonce, WPA_NONCE_LEN) != 0)
453 if (os_memcmp(kde->nonce, peerkey->inonce, WPA_NONCE_LEN) != 0) {
467 struct wpa_peerkey *peerkey,
482 if (os_memcmp(key->key_nonce, peerkey->inonce, WPA_NONCE_LEN) != 0) {
488 if (os_memcmp(kde->smk + PMK_LEN, peerkey->inonce, WPA_NONCE_LEN) != 0)
495 os_memcpy(peerkey->rsnie_p, kde->rsn_ie, kde->rsn_ie_len);
496 peerkey->rsnie_p_len = kde->rsn_ie_len;
497 os_memcpy(peerkey->pnonce, kde->nonce, WPA_NONCE_LEN);
502 peerkey->cipher = WPA_CIPHER_CCMP;
505 peerkey->cipher = WPA_CIPHER_GCMP;
508 peerkey->cipher = WPA_CIPHER_TKIP;
527 struct wpa_peerkey *peerkey;
553 for (peerkey = sm->peerkey; peerkey; peerkey = peerkey->next) {
554 if (os_memcmp(peerkey->addr, kde.mac_addr, ETH_ALEN) == 0 &&
555 os_memcmp(peerkey->initiator ? peerkey->inonce :
556 peerkey->pnonce,
560 if (peerkey == NULL) {
567 if (peerkey->initiator) {
569 peerkey, &kde) < 0)
572 if (wpa_supplicant_process_smk_m4(peerkey, &kde) < 0)
576 os_memcpy(peerkey->smk, kde.smk, PMK_LEN);
577 peerkey->smk_complete = 1;
578 wpa_hexdump_key(MSG_DEBUG, "RSN: SMK", peerkey->smk, PMK_LEN);
583 peerkey->lifetime = lifetime;
585 peerkey->expiration = now.sec + lifetime;
587 sm, peerkey);
589 if (peerkey->initiator) {
590 rsn_smkid(peerkey->smk, peerkey->pnonce, peerkey->addr,
591 peerkey->inonce, sm->own_addr, peerkey->smkid,
592 peerkey->use_sha256);
593 wpa_supplicant_send_stk_1_of_4(sm, peerkey);
595 rsn_smkid(peerkey->smk, peerkey->pnonce, sm->own_addr,
596 peerkey->inonce, peerkey->addr, peerkey->smkid,
597 peerkey->use_sha256);
599 wpa_hexdump(MSG_DEBUG, "RSN: SMKID", peerkey->smkid, PMKID_LEN);
648 struct wpa_peerkey *peerkey;
650 for (peerkey = sm->peerkey; peerkey; peerkey = peerkey->next) {
651 if (os_memcmp(peerkey->addr, kde.mac_addr, ETH_ALEN) ==
655 if (peerkey == NULL) {
668 struct wpa_peerkey *peerkey,
680 MACSTR " (ver=%d)", MAC2STR(peerkey->addr), ver);
692 if (os_memcmp(ie.pmkid, peerkey->smkid, PMKID_LEN) != 0) {
698 if (random_get_bytes(peerkey->pnonce, WPA_NONCE_LEN)) {
704 peerkey->pnonce, WPA_NONCE_LEN);
708 stk = &peerkey->tstk;
709 wpa_pmk_to_ptk(peerkey->smk, PMK_LEN, "Peer key expansion",
710 sm->own_addr, peerkey->addr,
711 peerkey->pnonce, key->key_nonce,
713 peerkey->use_sha256);
718 peerkey->tstk_set = 1;
720 kde_buf_len = peerkey->rsnie_p_len +
727 pos = wpa_add_ie(pos, peerkey->rsnie_p, peerkey->rsnie_p_len);
728 lifetime = host_to_be32(peerkey->lifetime);
731 wpa_add_kde(pos, RSN_KEY_DATA_PMKID, peerkey->smkid, PMKID_LEN);
733 if (wpa_supplicant_send_2_of_4(sm, peerkey->addr, key, ver,
734 peerkey->pnonce, kde_buf, kde_buf_len,
741 os_memcpy(peerkey->inonce, key->key_nonce, WPA_NONCE_LEN);
746 struct wpa_peerkey *peerkey,
757 if (lifetime >= peerkey->lifetime) {
760 "seconds - ignored", lifetime, peerkey->lifetime);
766 lifetime, peerkey->lifetime);
767 peerkey->lifetime = lifetime;
770 peerkey->expiration = now.sec + lifetime;
771 eloop_cancel_timeout(wpa_supplicant_smk_timeout, sm, peerkey);
773 sm, peerkey);
778 struct wpa_peerkey *peerkey,
787 MACSTR " (ver=%d)", MAC2STR(peerkey->addr), ver);
802 if (os_memcmp(kde.pmkid, peerkey->smkid, PMKID_LEN) != 0) {
808 if (kde.rsn_ie_len != peerkey->rsnie_p_len ||
809 os_memcmp(kde.rsn_ie, peerkey->rsnie_p, kde.rsn_ie_len) != 0) {
813 peerkey->rsnie_p, peerkey->rsnie_p_len);
819 wpa_supplicant_update_smk_lifetime(sm, peerkey, &kde);
821 wpa_supplicant_send_stk_3_of_4(sm, peerkey);
822 os_memcpy(peerkey->pnonce, key->key_nonce, WPA_NONCE_LEN);
827 struct wpa_peerkey *peerkey,
838 MACSTR " (ver=%d)", MAC2STR(peerkey->addr), ver);
853 if (kde.rsn_ie_len != peerkey->rsnie_i_len ||
854 os_memcmp(kde.rsn_ie, peerkey->rsnie_i, kde.rsn_ie_len) != 0) {
859 peerkey->rsnie_i, peerkey->rsnie_i_len);
866 if (os_memcmp(peerkey->inonce, key->key_nonce, WPA_NONCE_LEN) != 0) {
870 MAC2STR(peerkey->addr));
874 wpa_supplicant_update_smk_lifetime(sm, peerkey, &kde);
876 if (wpa_supplicant_send_4_of_4(sm, peerkey->addr, key, ver,
878 NULL, 0, &peerkey->stk))
881 _key = (u8 *) peerkey->stk.tk1;
882 if (peerkey->cipher == WPA_CIPHER_TKIP) {
885 os_memcpy(key_buf + 16, peerkey->stk.u.auth.rx_mic_key, 8);
886 os_memcpy(key_buf + 24, peerkey->stk.u.auth.tx_mic_key, 8);
893 if (wpa_sm_set_key(sm, peerkey->cipher, peerkey->addr, 0, 1,
903 struct wpa_peerkey *peerkey,
910 MACSTR " (ver=%d)", MAC2STR(peerkey->addr), ver);
913 if (wpa_sm_set_key(sm, peerkey->cipher, peerkey->addr, 0, 1,
914 rsc, sizeof(rsc), (u8 *) peerkey->stk.tk1,
915 peerkey->cipher == WPA_CIPHER_TKIP ? 32 : 16) < 0) {
926 * @peerkey: Pointer to the PeerKey data for the peer
934 struct wpa_peerkey *peerkey,
941 if (peerkey->initiator && !peerkey->stk_set) {
942 wpa_pmk_to_ptk(peerkey->smk, PMK_LEN, "Peer key expansion",
943 sm->own_addr, peerkey->addr,
944 peerkey->inonce, key->key_nonce,
945 (u8 *) &peerkey->stk, sizeof(peerkey->stk),
946 peerkey->use_sha256);
947 peerkey->stk_set = 1;
951 if (peerkey->tstk_set) {
953 wpa_eapol_key_mic(peerkey->tstk.kck, ver, buf, len,
960 peerkey->tstk_set = 0;
961 peerkey->stk_set = 1;
962 os_memcpy(&peerkey->stk, &peerkey->tstk,
963 sizeof(peerkey->stk));
967 if (!ok && peerkey->stk_set) {
969 wpa_eapol_key_mic(peerkey->stk.kck, ver, buf, len,
985 os_memcpy(peerkey->replay_counter, key->replay_counter,
987 peerkey->replay_counter_set = 1;
1009 struct wpa_peerkey *peerkey;
1035 peerkey = os_zalloc(sizeof(*peerkey));
1036 if (peerkey == NULL)
1038 peerkey->initiator = 1;
1039 os_memcpy(peerkey->addr, peer, ETH_ALEN);
1042 peerkey->use_sha256 = 1;
1050 hdr = (struct rsn_ie_hdr *) peerkey->rsnie_i;
1065 hdr->len = (pos - peerkey->rsnie_i) - 2;
1066 peerkey->rsnie_i_len = pos - peerkey->rsnie_i;
1068 peerkey->rsnie_i, peerkey->rsnie_i_len);
1070 kde_len = peerkey->rsnie_i_len + 2 + RSN_SELECTOR_LEN + ETH_ALEN;
1076 wpa_supplicant_peerkey_free(sm, peerkey);
1089 if (random_get_bytes(peerkey->inonce, WPA_NONCE_LEN)) {
1093 wpa_supplicant_peerkey_free(sm, peerkey);
1096 os_memcpy(req->key_nonce, peerkey->inonce, WPA_NONCE_LEN);
1104 pos = wpa_add_ie(pos, peerkey->rsnie_i, peerkey->rsnie_i_len);
1113 peerkey->next = sm->peerkey;
1114 sm->peerkey = peerkey;
1126 struct wpa_peerkey *prev, *peerkey = sm->peerkey;
1127 while (peerkey) {
1128 prev = peerkey;
1129 peerkey = peerkey->next;
1132 sm->peerkey = NULL;
1136 void peerkey_rx_eapol_4way(struct wpa_sm *sm, struct wpa_peerkey *peerkey,
1142 wpa_supplicant_process_stk_3_of_4(sm, peerkey, key, ver);
1145 wpa_supplicant_process_stk_1_of_4(sm, peerkey, key, ver);
1148 wpa_supplicant_process_stk_4_of_4(sm, peerkey, key, ver);
1151 wpa_supplicant_process_stk_2_of_4(sm, peerkey, key, ver);