Lines Matching refs:gd

70 static bool wpa_supplicant_gtk_in_use(struct wpa_sm *sm, struct wpa_gtk_data *gd);
884 struct wpa_gtk_data *gd) in wpa_supplicant_install_gtk() argument
886 u8 *_gtk = gd->gtk; in wpa_supplicant_install_gtk()
890 wpa_hexdump(MSG_DEBUG, "WPA: Group Key", gd->gtk, gd->gtk_len); in wpa_supplicant_install_gtk()
893 if ((sm->gtk.gtk_len == (size_t) gd->gtk_len && in wpa_supplicant_install_gtk()
894 os_memcmp(sm->gtk.gtk, gd->gtk, sm->gtk.gtk_len) == 0) || in wpa_supplicant_install_gtk()
895 wpa_supplicant_gtk_in_use(sm, &(sm->gd))) { in wpa_supplicant_install_gtk()
898 gd->keyidx, gd->tx, gd->gtk_len); in wpa_supplicant_install_gtk()
902 "(keyidx=%d tx=%d len=%d).", gd->keyidx, gd->tx, in wpa_supplicant_install_gtk()
903 gd->gtk_len); in wpa_supplicant_install_gtk()
905 wpa_hexdump(MSG_DEBUG, "WPA: RSC", key_rsc, gd->key_rsc_len); in wpa_supplicant_install_gtk()
908 memcpy(gtk_buf, gd->gtk, 16); in wpa_supplicant_install_gtk()
909 memcpy(gtk_buf + 16, gd->gtk + 16, 8); in wpa_supplicant_install_gtk()
910 memcpy(gtk_buf + 24, gd->gtk + 24, 8); in wpa_supplicant_install_gtk()
914 if (wpa_sm_set_key(&(sm->install_gtk), gd->alg, in wpa_supplicant_install_gtk()
916 gd->keyidx, 1, key_rsc, gd->key_rsc_len, in wpa_supplicant_install_gtk()
917 _gtk, gd->gtk_len, (KEY_FLAG_GROUP | KEY_FLAG_RX | KEY_FLAG_TX)) < 0) { in wpa_supplicant_install_gtk()
922 } else if (wpa_sm_set_key(&(sm->install_gtk), gd->alg, in wpa_supplicant_install_gtk()
924 gd->keyidx, gd->tx, key_rsc, gd->key_rsc_len, in wpa_supplicant_install_gtk()
925 _gtk, gd->gtk_len, KEY_FLAG_GROUP | KEY_FLAG_RX) < 0) { in wpa_supplicant_install_gtk()
928 gd->alg, gd->gtk_len, gd->keyidx); in wpa_supplicant_install_gtk()
931 sm->gtk.gtk_len = gd->gtk_len; in wpa_supplicant_install_gtk()
932 os_memcpy(sm->gtk.gtk, gd->gtk, sm->gtk.gtk_len); in wpa_supplicant_install_gtk()
937 static bool wpa_supplicant_gtk_in_use(struct wpa_sm *sm, struct wpa_gtk_data *gd) in wpa_supplicant_gtk_in_use() argument
939 u8 *_gtk = gd->gtk; in wpa_supplicant_gtk_in_use()
945 int keyidx = gd->keyidx; in wpa_supplicant_gtk_in_use()
947 wpa_printf(MSG_DEBUG, "WPA: Judge GTK: (keyidx=%d len=%d).", gd->keyidx, gd->gtk_len); in wpa_supplicant_gtk_in_use()
951 memcpy(gtk_buf, gd->gtk, 16); in wpa_supplicant_gtk_in_use()
952 memcpy(gtk_buf + 16, gd->gtk + 16, 8); in wpa_supplicant_gtk_in_use()
953 memcpy(gtk_buf + 24, gd->gtk + 24, 8); in wpa_supplicant_gtk_in_use()
957 if (wpa_sm_get_key(&ifx, &alg, bssid, &keyidx, gtk_get, gd->gtk_len, KEY_FLAG_GROUP) == 0) { in wpa_supplicant_gtk_in_use()
958 if (ifx == 0 && alg == gd->alg && memcmp(bssid, sm->bssid, ETH_ALEN) == 0 && in wpa_supplicant_gtk_in_use()
959 memcmp(_gtk, gtk_get, gd->gtk_len) == 0) { in wpa_supplicant_gtk_in_use()
960 … wpa_printf(MSG_DEBUG, "GTK %d is already in use, it may be an attack, ignore it.", gd->keyidx); in wpa_supplicant_gtk_in_use()
988 struct wpa_gtk_data *gd=&(sm->gd); in wpa_supplicant_pairwise_gtk() local
998 memset(gd, 0, sizeof(struct wpa_gtk_data)); in wpa_supplicant_pairwise_gtk()
1002 if (gtk_len < 2 || gtk_len - 2 > sizeof(gd->gtk)) in wpa_supplicant_pairwise_gtk()
1005 gd->keyidx = gtk[0] & 0x3; in wpa_supplicant_pairwise_gtk()
1006 gd->tx = wpa_supplicant_gtk_tx_bit_workaround(sm, in wpa_supplicant_pairwise_gtk()
1011 memcpy(gd->gtk, gtk, gtk_len); in wpa_supplicant_pairwise_gtk()
1012 gd->gtk_len = gtk_len; in wpa_supplicant_pairwise_gtk()
1016 &(gd->key_rsc_len), &(gd->alg))) { in wpa_supplicant_pairwise_gtk()
1341 (sm->gd).gtk_len=0; //used as flag if gtk is installed in callback in wpa_supplicant_process_3_of_4()
1423 if ((sm->gd).gtk_len) { in wpa_supplicant_send_4_of_4_txcallback()
1425 if (wpa_supplicant_install_gtk(sm, &(sm->gd))) in wpa_supplicant_send_4_of_4_txcallback()
1472 struct wpa_gtk_data *gd) in wpa_supplicant_process_1_of_2_rsn() argument
1487 maxkeylen = gd->gtk_len = ie.gtk_len - 2; in wpa_supplicant_process_1_of_2_rsn()
1490 gd->gtk_len, maxkeylen, in wpa_supplicant_process_1_of_2_rsn()
1491 &gd->key_rsc_len, &gd->alg)) in wpa_supplicant_process_1_of_2_rsn()
1496 gd->keyidx = ie.gtk[0] & 0x3; in wpa_supplicant_process_1_of_2_rsn()
1497 gd->tx = wpa_supplicant_gtk_tx_bit_workaround(sm, in wpa_supplicant_process_1_of_2_rsn()
1499 if (ie.gtk_len - 2 > sizeof(gd->gtk)) { in wpa_supplicant_process_1_of_2_rsn()
1504 memcpy(gd->gtk, ie.gtk + 2, ie.gtk_len - 2); in wpa_supplicant_process_1_of_2_rsn()
1517 u16 ver, struct wpa_gtk_data *gd) in wpa_supplicant_process_1_of_2_wpa() argument
1522 gd->gtk_len = WPA_GET_BE16(key->key_length); in wpa_supplicant_process_1_of_2_wpa()
1534 gd->gtk_len, maxkeylen, in wpa_supplicant_process_1_of_2_wpa()
1535 &gd->key_rsc_len, &gd->alg)) in wpa_supplicant_process_1_of_2_wpa()
1538 gd->keyidx = (key_info & WPA_KEY_INFO_KEY_INDEX_MASK) >> in wpa_supplicant_process_1_of_2_wpa()
1543 if (key_data_len > sizeof(gd->gtk)) { in wpa_supplicant_process_1_of_2_wpa()
1549 os_memcpy(gd->gtk, key_data, key_data_len); in wpa_supplicant_process_1_of_2_wpa()
1550 if (rc4_skip(ek, 32, 256, gd->gtk, key_data_len)) { in wpa_supplicant_process_1_of_2_wpa()
1561 if (maxkeylen > sizeof(gd->gtk)) { in wpa_supplicant_process_1_of_2_wpa()
1568 if (aes_unwrap(sm->ptk.kek, sm->ptk.kek_len, maxkeylen / 8, key_data, gd->gtk)) { in wpa_supplicant_process_1_of_2_wpa()
1578 gd->tx = wpa_supplicant_gtk_tx_bit_workaround( in wpa_supplicant_process_1_of_2_wpa()
1640 struct wpa_gtk_data *gd=&(sm->gd); in wpa_supplicant_process_1_of_2() local
1642 memset(gd, 0, sizeof(struct wpa_gtk_data)); in wpa_supplicant_process_1_of_2()
1650 key_data_len, key_info, gd); in wpa_supplicant_process_1_of_2()
1653 key_data_len, key_info, ver, gd); in wpa_supplicant_process_1_of_2()
1666 if((sm->gd).gtk_len) { in wpa_supplicant_process_1_of_2()
1667 if (wpa_supplicant_install_gtk(sm, &(sm->gd))) in wpa_supplicant_process_1_of_2()