diff options
author | Jaap Keuter <jaap.keuter@xs4all.nl> | 2010-03-14 13:23:36 +0000 |
---|---|---|
committer | Jaap Keuter <jaap.keuter@xs4all.nl> | 2010-03-14 13:23:36 +0000 |
commit | 7e179f613f3aaf58cbe45c94045b3765f35d2d27 (patch) | |
tree | 07d479ece46f9831cdf66a6bfbfff2c329ae4b1c /epan/dissectors/packet-eapol.c | |
parent | 69267c7bab1ff1eec7b5c9bb8491fca12be75ffc (diff) | |
download | wireshark-7e179f613f3aaf58cbe45c94045b3765f35d2d27.tar.gz wireshark-7e179f613f3aaf58cbe45c94045b3765f35d2d27.tar.bz2 wireshark-7e179f613f3aaf58cbe45c94045b3765f35d2d27.zip |
From Jouni Malinen:
Use Key Info field to figure out which EAPOL-Key frame use case (4-way
handshake and Group key handshake) and provide more details in
COL_INFO column to make it easier to debug issues with EAPOL-Key
exchanges. In addition, add description of key descriptor version 3
from IEEE Std 802.11r-2008.
svn path=/trunk/; revision=32183
Diffstat (limited to 'epan/dissectors/packet-eapol.c')
-rw-r--r-- | epan/dissectors/packet-eapol.c | 36 |
1 files changed, 35 insertions, 1 deletions
diff --git a/epan/dissectors/packet-eapol.c b/epan/dissectors/packet-eapol.c index ce80abb070..8c809fd3db 100644 --- a/epan/dissectors/packet-eapol.c +++ b/epan/dissectors/packet-eapol.c @@ -118,9 +118,11 @@ static const true_false_string tfs_keyinfo_key_type = { "Pairwise key", "Group key" }; #define KEYDES_VER_TYPE1 0x01 #define KEYDES_VER_TYPE2 0x02 +#define KEYDES_VER_TYPE3 0x03 static const value_string keydes_ver[] = { { KEYDES_VER_TYPE1, "HMAC-MD5 for MIC and RC4 for encryption" }, - { KEYDES_VER_TYPE2, "HMAC-SHA1 for MIC and AES-CCMP for encryption" }, + { KEYDES_VER_TYPE2, "HMAC-SHA1 for MIC and AES key wrap for encryption" }, + { KEYDES_VER_TYPE3, "AES-128-CMAC for MIC and AES key wrap for encryption" }, { 0, NULL } }; @@ -184,6 +186,38 @@ dissect_eapol(tvbuff_t *tvb, packet_info *pinfo, proto_tree *tree) offset += 1; if (keydesc_type == EAPOL_WPA_KEY || keydesc_type == EAPOL_RSN_KEY) { keyinfo = tvb_get_ntohs(tvb, offset); + if (check_col(pinfo->cinfo, COL_INFO)) { + if (keyinfo & KEY_INFO_REQUEST_MASK) { + col_set_str(pinfo->cinfo, COL_INFO, "Key (Request)"); + if (keyinfo & KEY_INFO_ERROR_MASK) + col_set_str(pinfo->cinfo, COL_INFO, "Key (Request, Error)"); + } else if (keyinfo & KEY_INFO_KEY_TYPE_MASK) { + guint16 masked; + masked = keyinfo & + (KEY_INFO_INSTALL_MASK | KEY_INFO_KEY_ACK_MASK | + KEY_INFO_KEY_MIC_MASK | KEY_INFO_SECURE_MASK); + switch (masked) { + case KEY_INFO_KEY_ACK_MASK: + col_set_str(pinfo->cinfo, COL_INFO, "Key (msg 1/4)"); + break; + case KEY_INFO_KEY_MIC_MASK: + col_set_str(pinfo->cinfo, COL_INFO, "Key (msg 2/4)"); + break; + case (KEY_INFO_INSTALL_MASK | KEY_INFO_KEY_ACK_MASK | + KEY_INFO_KEY_MIC_MASK | KEY_INFO_SECURE_MASK): + col_set_str(pinfo->cinfo, COL_INFO, "Key (msg 3/4)"); + break; + case (KEY_INFO_KEY_MIC_MASK | KEY_INFO_SECURE_MASK): + col_set_str(pinfo->cinfo, COL_INFO, "Key (msg 4/4)"); + break; + } + } else { + if (keyinfo & KEY_INFO_KEY_ACK_MASK) + col_set_str(pinfo->cinfo, COL_INFO, "Key (Group msg 1/2)"); + else + col_set_str(pinfo->cinfo, COL_INFO, "Key (Group msg 2/2)"); + } + } keyinfo_item = proto_tree_add_uint(eapol_tree, hf_eapol_wpa_keydes_keyinfo, tvb, offset, 2, keyinfo); |