@ -150,8 +150,8 @@ static void rx_data_process(struct wlantest *wt, struct wlantest_bss *bss,
}
static u8 * try_ptk ( int pairwise_cipher , struct wpa_ptk * ptk ,
const struct ieee80211_hdr * hdr ,
static u8 * try_ptk ( struct wlantest * wt , int pairwise_cipher ,
struct wpa_ptk * ptk , const struct ieee80211_hdr * hdr ,
const u8 * data , size_t data_len , size_t * decrypted_len )
{
u8 * decrypted ;
@ -174,8 +174,14 @@ static u8 * try_ptk(int pairwise_cipher, struct wpa_ptk *ptk,
data , data_len , decrypted_len ) ;
} else if ( ( pairwise_cipher = = WPA_CIPHER_TKIP | |
pairwise_cipher = = 0 ) & & tk_len = = 32 ) {
enum michael_mic_result mic_res ;
decrypted = tkip_decrypt ( ptk - > tk , hdr , data , data_len ,
decrypted_len ) ;
decrypted_len , & mic_res ) ;
if ( decrypted & & mic_res = = MICHAEL_MIC_INCORRECT )
add_note ( wt , MSG_INFO , " Invalid Michael MIC " ) ;
else if ( decrypted & & mic_res = = MICHAEL_MIC_NOT_VERIFIED )
add_note ( wt , MSG_DEBUG , " Michael MIC not verified " ) ;
}
return decrypted ;
@ -192,7 +198,7 @@ static u8 * try_all_ptk(struct wlantest *wt, int pairwise_cipher,
wpa_debug_level = MSG_WARNING ;
dl_list_for_each ( ptk , & wt - > ptk , struct wlantest_ptk , list ) {
decrypted = try_ptk ( pairwise_cipher, & ptk - > ptk , hdr ,
decrypted = try_ptk ( wt, pairwise_cipher, & ptk - > ptk , hdr ,
data , data_len , decrypted_len ) ;
if ( decrypted ) {
wpa_debug_level = prev_level ;
@ -318,21 +324,28 @@ static void rx_data_bss_prot_group(struct wlantest *wt,
}
skip_replay_det :
if ( bss - > group_cipher = = WPA_CIPHER_TKIP )
if ( bss - > group_cipher = = WPA_CIPHER_TKIP ) {
enum michael_mic_result mic_res ;
decrypted = tkip_decrypt ( bss - > gtk [ keyid ] , hdr , data , len ,
& dlen ) ;
else if ( bss - > group_cipher = = WPA_CIPHER_WEP40 )
& dlen , & mic_res ) ;
if ( decrypted & & mic_res = = MICHAEL_MIC_INCORRECT )
add_note ( wt , MSG_INFO , " Invalid Michael MIC " ) ;
else if ( decrypted & & mic_res = = MICHAEL_MIC_NOT_VERIFIED )
add_note ( wt , MSG_DEBUG , " Michael MIC not verified " ) ;
} else if ( bss - > group_cipher = = WPA_CIPHER_WEP40 ) {
decrypted = wep_decrypt ( wt , hdr , data , len , & dlen ) ;
else if ( bss - > group_cipher = = WPA_CIPHER_CCMP )
} else if ( bss - > group_cipher = = WPA_CIPHER_CCMP ) {
decrypted = ccmp_decrypt ( bss - > gtk [ keyid ] , hdr , data , len ,
& dlen ) ;
else if ( bss - > group_cipher = = WPA_CIPHER_CCMP_256 )
} else if ( bss - > group_cipher = = WPA_CIPHER_CCMP_256 ) {
decrypted = ccmp_256_decrypt ( bss - > gtk [ keyid ] , hdr , data , len ,
& dlen ) ;
else if ( bss - > group_cipher = = WPA_CIPHER_GCMP | |
bss - > group_cipher = = WPA_CIPHER_GCMP_256 )
} else if ( bss - > group_cipher = = WPA_CIPHER_GCMP | |
bss - > group_cipher = = WPA_CIPHER_GCMP_256 ) {
decrypted = gcmp_decrypt ( bss - > gtk [ keyid ] , bss - > gtk_len [ keyid ] ,
hdr , data , len , & dlen ) ;
}
if ( decrypted ) {
char gtk [ 65 ] ;
@ -603,7 +616,14 @@ skip_replay_det:
write_decrypted_note ( wt , decrypted , tk , 16 , keyid ) ;
}
} else if ( sta - > pairwise_cipher = = WPA_CIPHER_TKIP ) {
decrypted = tkip_decrypt ( sta - > ptk . tk , hdr , data , len , & dlen ) ;
enum michael_mic_result mic_res ;
decrypted = tkip_decrypt ( sta - > ptk . tk , hdr , data , len , & dlen ,
& mic_res ) ;
if ( decrypted & & mic_res = = MICHAEL_MIC_INCORRECT )
add_note ( wt , MSG_INFO , " Invalid Michael MIC " ) ;
else if ( decrypted & & mic_res = = MICHAEL_MIC_NOT_VERIFIED )
add_note ( wt , MSG_DEBUG , " Michael MIC not verified " ) ;
write_decrypted_note ( wt , decrypted , sta - > ptk . tk , 32 , keyid ) ;
} else if ( sta - > pairwise_cipher = = WPA_CIPHER_WEP40 ) {
decrypted = wep_decrypt ( wt , hdr , data , len , & dlen ) ;
@ -631,7 +651,7 @@ check_zero_tk:
os_memset ( & zero_ptk , 0 , sizeof ( zero_ptk ) ) ;
zero_ptk . tk_len = wpa_cipher_key_len ( sta - > pairwise_cipher ) ;
wpa_debug_level = MSG_ERROR ;
decrypted = try_ptk ( sta- > pairwise_cipher , & zero_ptk , hdr ,
decrypted = try_ptk ( wt, sta- > pairwise_cipher , & zero_ptk , hdr ,
data , len , & dlen ) ;
wpa_debug_level = old_debug_level ;
if ( decrypted ) {