aboutsummaryrefslogtreecommitdiffstats
path: root/src/rsn_supp
diff options
context:
space:
mode:
authorDmitry Shmidt <dimitrysh@google.com>2014-03-11 17:26:21 -0700
committerDmitry Shmidt <dimitrysh@google.com>2014-03-11 17:26:21 -0700
commit9866086a955d00e237cc8df3722e7dff75c02532 (patch)
treeb5264b608cb63305c437f07e0dec1e45ab0c0365 /src/rsn_supp
parent818ea489ef32dcdc7c098d8a336d6e1dd8996112 (diff)
downloadandroid_external_wpa_supplicant_8-9866086a955d00e237cc8df3722e7dff75c02532.tar.gz
android_external_wpa_supplicant_8-9866086a955d00e237cc8df3722e7dff75c02532.tar.bz2
android_external_wpa_supplicant_8-9866086a955d00e237cc8df3722e7dff75c02532.zip
Cumulative patch from commit 99cd77a8c50413d44f1ebead917310468a8406de
99cd77a tests: Verify reassociate-to-same-BSS commands e8d70a7 nl80211: Hide deauth event due to forced deauth-during-auth 0f44ec8 Add a reattach command for fast reassociate-back-to-same-BSS cfc393a hostapd: Document interworking realm EAP Method types 7450c12 DFS: Add extra debugging messages 5d0d72a wpa_supplicant: Put upper bound on initial scan time delay 8c06db7 nl80211: Fix P2P Device handling when starting with RF-kill blocked 5e3ddf4 PNO: Change sched_scan_stopped event to handle pending PNO properly 737e7a0 PNO: Move and rename pno_start()/pno_stop() 1d91f50 hostapd: Process management frames only once per BSS e070051 hostapd: Allow to switch to usable DFS channels 01b9999 hostapd: Allow to switch to DFS channels if available 70ee1be hostapd: Add config option chanlist for DFS channels 09eef14 Use internal FIPS 186-2 PRF if needed 3b9c517 Fix PTK derivation for CCMP-256 and GCMP-256 e6ef73f nl80211: Add debug print of KEY_DATA and KEY_SEQ b465f5d Remove unused hostapd_wep_key_cmp() 4fb363c Fix error path handling on radius_accept_attr Change-Id: I28ecac6cbcc6f71f19a051c12b54668ca6a66e2a Signed-off-by: Dmitry Shmidt <dimitrysh@google.com>
Diffstat (limited to 'src/rsn_supp')
-rw-r--r--src/rsn_supp/wpa.c12
1 files changed, 7 insertions, 5 deletions
diff --git a/src/rsn_supp/wpa.c b/src/rsn_supp/wpa.c
index ba50263d..de86cdf6 100644
--- a/src/rsn_supp/wpa.c
+++ b/src/rsn_supp/wpa.c
@@ -362,7 +362,7 @@ static int wpa_derive_ptk(struct wpa_sm *sm, const unsigned char *src_addr,
const struct wpa_eapol_key *key,
struct wpa_ptk *ptk)
{
- size_t ptk_len = sm->pairwise_cipher != WPA_CIPHER_TKIP ? 48 : 64;
+ size_t ptk_len = wpa_cipher_key_len(sm->pairwise_cipher) + 32;
#ifdef CONFIG_IEEE80211R
if (wpa_key_mgmt_ft(sm->key_mgmt))
return wpa_derive_ptk_ft(sm, src_addr, key, ptk, ptk_len);
@@ -437,10 +437,12 @@ static void wpa_supplicant_process_1_of_4(struct wpa_sm *sm,
* been verified when processing message 3/4. */
ptk = &sm->tptk;
wpa_derive_ptk(sm, src_addr, key, ptk);
- /* Supplicant: swap tx/rx Mic keys */
- os_memcpy(buf, ptk->u.auth.tx_mic_key, 8);
- os_memcpy(ptk->u.auth.tx_mic_key, ptk->u.auth.rx_mic_key, 8);
- os_memcpy(ptk->u.auth.rx_mic_key, buf, 8);
+ if (sm->pairwise_cipher == WPA_CIPHER_TKIP) {
+ /* Supplicant: swap tx/rx Mic keys */
+ os_memcpy(buf, ptk->u.auth.tx_mic_key, 8);
+ os_memcpy(ptk->u.auth.tx_mic_key, ptk->u.auth.rx_mic_key, 8);
+ os_memcpy(ptk->u.auth.rx_mic_key, buf, 8);
+ }
sm->tptk_set = 1;
kde = sm->assoc_wpa_ie;