aboutsummaryrefslogtreecommitdiffstats
path: root/epan/dissectors/packet-mikey.c
diff options
context:
space:
mode:
authorBill Meier <wmeier@newsguy.com>2012-12-12 03:38:46 +0000
committerBill Meier <wmeier@newsguy.com>2012-12-12 03:38:46 +0000
commit93fdffd70dd525b61b9d4840bb02cc72f6f88582 (patch)
treec2f8d9c677d3cf4cd92f0ee122038e5e78de2f16 /epan/dissectors/packet-mikey.c
parent20211340e51fd11809cf08317c23d1bcc54f663d (diff)
General cleanup:
- Fix instance of offset changed under 'if (tree)' and used after 'if (tree)'; - Create/use some extended value strings; - #if 0 an unused value_string array; - Localize some variables & remove some uneeded initializers; - Fix some whitespace & long lines. svn path=/trunk/; revision=46516
Diffstat (limited to 'epan/dissectors/packet-mikey.c')
-rw-r--r--epan/dissectors/packet-mikey.c601
1 files changed, 307 insertions, 294 deletions
diff --git a/epan/dissectors/packet-mikey.c b/epan/dissectors/packet-mikey.c
index 7c2139112e..3e627a60d7 100644
--- a/epan/dissectors/packet-mikey.c
+++ b/epan/dissectors/packet-mikey.c
@@ -41,22 +41,17 @@
#include <glib.h>
-#include <epan/emem.h>
#include <epan/packet.h>
+#include <epan/emem.h>
#include <epan/prefs.h>
#include <epan/asn1.h>
#include <epan/dissectors/packet-x509af.h>
-#ifdef HAVE_LIBGCRYPT
-#include <gcrypt.h>
-#endif /* HAVE_LIBGCRYPT */
-
#define PORT_MIKEY 2269
static guint global_mikey_tcp_port = PORT_MIKEY;
static guint global_mikey_udp_port = PORT_MIKEY;
-
static const value_string on_off_vals[] = {
{ 0, "Off" },
{ 1, "On" },
@@ -75,26 +70,27 @@ enum data_type_t {
MIKEY_TYPE_DHHMAC_RESP,
MIKEY_TYPE_RSA_R_INIT,
MIKEY_TYPE_RSA_R_RESP,
- MIKEY_TYPE_SAKKE_INIT = 26,
+ MIKEY_TYPE_SAKKE_INIT = 26,
MIKEY_TYPE_SAKKE_RESP
};
static const value_string data_type_vals[] = {
- { MIKEY_TYPE_PSK_INIT, "Pre-shared" },
- { MIKEY_TYPE_PSK_RESP, "PSK ver msg" },
- { MIKEY_TYPE_PK_INIT, "Public key" },
- { MIKEY_TYPE_PK_RESP, "PK ver msg" },
- { MIKEY_TYPE_DH_INIT, "D-H init" },
- { MIKEY_TYPE_DH_RESP, "D-H resp" },
- { MIKEY_TYPE_ERROR, "Error" },
+ { MIKEY_TYPE_PSK_INIT, "Pre-shared" },
+ { MIKEY_TYPE_PSK_RESP, "PSK ver msg" },
+ { MIKEY_TYPE_PK_INIT, "Public key" },
+ { MIKEY_TYPE_PK_RESP, "PK ver msg" },
+ { MIKEY_TYPE_DH_INIT, "D-H init" },
+ { MIKEY_TYPE_DH_RESP, "D-H resp" },
+ { MIKEY_TYPE_ERROR, "Error" },
{ MIKEY_TYPE_DHHMAC_INIT, "DHHMAC init" },
{ MIKEY_TYPE_DHHMAC_RESP, "DHHMAC resp" },
- { MIKEY_TYPE_RSA_R_INIT, "RSA-R I_MSG" },
- { MIKEY_TYPE_RSA_R_RESP, "RSA-R R_MSG" },
- { MIKEY_TYPE_SAKKE_INIT, "SAKKE" },
- { MIKEY_TYPE_SAKKE_RESP, "CS Id map Update" },
+ { MIKEY_TYPE_RSA_R_INIT, "RSA-R I_MSG" },
+ { MIKEY_TYPE_RSA_R_RESP, "RSA-R R_MSG" },
+ { MIKEY_TYPE_SAKKE_INIT, "SAKKE" },
+ { MIKEY_TYPE_SAKKE_RESP, "CS Id map Update" },
{ 0, NULL }
};
+static value_string_ext data_type_vals_ext = VALUE_STRING_EXT_INIT(data_type_vals);
enum cs_id_map_t {
CS_ID_SRTP = 0
@@ -106,7 +102,7 @@ static const value_string cs_id_map_vals[] = {
};
enum payload_t {
- PL_HDR = -1,
+ PL_HDR = -1,
PL_LAST,
PL_KEMAC,
PL_PKE,
@@ -120,57 +116,60 @@ enum payload_t {
PL_SP,
PL_RAND,
PL_ERR,
- PL_TR = 13, /* MIKEY-TICKET (6043) */
+ PL_TR = 13, /* MIKEY-TICKET (6043) */
PL_IDR,
PL_RANDR,
PL_TP,
PL_TICKET,
PL_KEY_DATA = 20,
PL_GENERAL_EXT,
- PL_SAKKE = 26,
+ PL_SAKKE = 26,
PL_MAX
};
-#define PL_HDR_TEXT "Common Header (HDR)"
-#define PL_LAST_TEXT "Last payload"
-#define PL_KEMAC_TEXT "Key Data Transport (KEMAC)"
-#define PL_PKE_TEXT "Envelope Data (PKE)"
-#define PL_DH_TEXT "DH Data (DH)"
-#define PL_SIGN_TEXT "Signature (SIGN)"
-#define PL_T_TEXT "Timestamp (T)"
-#define PL_ID_TEXT "ID"
-#define PL_CERT_TEXT "Certificate (CERT)"
-#define PL_CHASH_TEXT "CHASH"
-#define PL_V_TEXT "Ver msg (V)"
-#define PL_SP_TEXT "Security Policy (SP)"
-#define PL_RAND_TEXT "RAND"
-#define PL_ERR_TEXT "Error (ERR)"
-#define PL_KEY_DATA_TEXT "Key data (KEY)"
-#define PL_IDR_TEXT "IDR"
+#define PL_HDR_TEXT "Common Header (HDR)"
+#define PL_LAST_TEXT "Last payload"
+#define PL_KEMAC_TEXT "Key Data Transport (KEMAC)"
+#define PL_PKE_TEXT "Envelope Data (PKE)"
+#define PL_DH_TEXT "DH Data (DH)"
+#define PL_SIGN_TEXT "Signature (SIGN)"
+#define PL_T_TEXT "Timestamp (T)"
+#define PL_ID_TEXT "ID"
+#define PL_CERT_TEXT "Certificate (CERT)"
+#define PL_CHASH_TEXT "CHASH"
+#define PL_V_TEXT "Ver msg (V)"
+#define PL_SP_TEXT "Security Policy (SP)"
+#define PL_RAND_TEXT "RAND"
+#define PL_ERR_TEXT "Error (ERR)"
+#define PL_KEY_DATA_TEXT "Key data (KEY)"
+#define PL_IDR_TEXT "IDR"
#define PL_GENERAL_EXT_TEXT "General Extension (EXT)"
-#define PL_SAKKE_TEXT "SAKKE Encapsulated Data (SAKKE)"
+#define PL_SAKKE_TEXT "SAKKE Encapsulated Data (SAKKE)"
static const value_string payload_vals[] = {
- { PL_HDR, PL_HDR_TEXT },
- { PL_LAST, PL_LAST_TEXT },
- { PL_KEMAC, PL_KEMAC_TEXT },
- { PL_PKE, PL_PKE_TEXT },
- { PL_DH, PL_DH_TEXT },
- { PL_SIGN, PL_SIGN_TEXT },
- { PL_T, PL_T_TEXT },
- { PL_ID, PL_ID_TEXT },
- { PL_CERT, PL_CERT_TEXT },
- { PL_CHASH, PL_CHASH_TEXT },
- { PL_V, PL_V_TEXT },
- { PL_SP, PL_SP_TEXT },
- { PL_RAND, PL_RAND_TEXT },
- { PL_ERR, PL_ERR_TEXT },
- { PL_IDR, PL_IDR_TEXT },
- { PL_KEY_DATA, PL_KEY_DATA_TEXT },
+ { PL_HDR, PL_HDR_TEXT },
+ { PL_LAST, PL_LAST_TEXT },
+ { PL_KEMAC, PL_KEMAC_TEXT },
+ { PL_PKE, PL_PKE_TEXT },
+ { PL_DH, PL_DH_TEXT },
+ { PL_SIGN, PL_SIGN_TEXT },
+ { PL_T, PL_T_TEXT },
+ { PL_ID, PL_ID_TEXT },
+ { PL_CERT, PL_CERT_TEXT },
+ { PL_CHASH, PL_CHASH_TEXT },
+ { PL_V, PL_V_TEXT },
+ { PL_SP, PL_SP_TEXT },
+ { PL_RAND, PL_RAND_TEXT },
+ { PL_ERR, PL_ERR_TEXT },
+ { PL_IDR, PL_IDR_TEXT },
+ { PL_KEY_DATA, PL_KEY_DATA_TEXT },
{ PL_GENERAL_EXT, PL_GENERAL_EXT_TEXT },
- { PL_SAKKE, PL_SAKKE_TEXT },
+ { PL_SAKKE, PL_SAKKE_TEXT },
{ 0, NULL }
};
+#if 0 /* First entry (PL_HDR) is -1 and there are gaps so this doesn't work */
+static value_string_ext payload_vals_ext = VALUE_STRING_EXT_INIT(payload_vals);
+#endif
enum ts_type_t {
T_NTP_UTC = 0,
@@ -180,7 +179,7 @@ enum ts_type_t {
static const value_string ts_type_vals[] = {
{ T_NTP_UTC, "NTP-UTC" },
- { T_NTP, "NTP" },
+ { T_NTP, "NTP" },
{ T_COUNTER, "COUNTER" },
{ 0, NULL }
};
@@ -192,7 +191,7 @@ enum encr_alg_t {
};
static const value_string encr_alg_vals[] = {
- { ENCR_NULL, "NULL" },
+ { ENCR_NULL, "NULL" },
{ ENCR_AES_CM_128, "AES-CM-128" },
{ ENCR_AES_KW_128, "AES-KW-128" },
{ 0, NULL }
@@ -217,7 +216,7 @@ enum mac_alg_t {
};
static const value_string mac_alg_vals[] = {
- { MAC_NULL, "NULL" },
+ { MAC_NULL, "NULL" },
{ MAC_HMAC_SHA_1_160, "HMAC-SHA-1-160" },
{ 0, NULL }
};
@@ -229,8 +228,8 @@ enum pke_c_t {
};
static const value_string pke_c_vals[] = {
- { PKE_C_NO_CACHE, "No cache" },
- { PKE_C_CACHE, "Cache" },
+ { PKE_C_NO_CACHE, "No cache" },
+ { PKE_C_CACHE, "Cache" },
{ PKE_C_CACHE_CSB, "Cache for CSB" },
{ 0, NULL }
};
@@ -243,7 +242,7 @@ enum sign_s_t {
static const value_string sign_s_vals[] = {
{ SIGN_S_PKCS1, "RSA/PKCS#1/1.5" },
- { SIGN_S_PSS, "RSA/PSS" },
+ { SIGN_S_PSS, "RSA/PSS" },
{ SIGN_S_ECCSI, "ECCSI" },
{ 0, NULL }
};
@@ -255,8 +254,8 @@ enum id_type_t {
};
static const value_string id_type_vals[] = {
- { ID_TYPE_NAI, "NAI" },
- { ID_TYPE_URI, "URI" },
+ { ID_TYPE_NAI, "NAI" },
+ { ID_TYPE_URI, "URI" },
{ ID_TYPE_BYTE_STRING, "Byte string" },
{ 0, NULL }
};
@@ -274,11 +273,11 @@ enum id_role_t {
static const value_string id_role_vals[] = {
{ ID_ROLE_RESERVED, "Reserved" },
- { ID_ROLE_INIT, "Initiator (IDRi)" },
- { ID_ROLE_RESP, "Responder (IDRr)" },
- { ID_ROLE_KMS, "KMS (IDRkms)" },
- { ID_ROLE_PSK, "Pre-Shared Key (IDRpsk)" },
- { ID_ROLE_APP, "Application (IDRapp)" },
+ { ID_ROLE_INIT, "Initiator (IDRi)" },
+ { ID_ROLE_RESP, "Responder (IDRr)" },
+ { ID_ROLE_KMS, "KMS (IDRkms)" },
+ { ID_ROLE_PSK, "Pre-Shared Key (IDRpsk)" },
+ { ID_ROLE_APP, "Application (IDRapp)" },
{ ID_ROLE_INIT_KMS, "Initiator's KMS (IDRkmsi)" },
{ ID_ROLE_RESP_KMS, "Responder's KMS (IDRkmsr)" },
{ 0, NULL }
@@ -292,8 +291,8 @@ enum cert_type_t {
};
static const value_string cert_type_vals[] = {
- { CERT_TYPE_X509V3, "X.509v3" },
- { CERT_TYPE_X509V3_URL, "X.509v3 URL" },
+ { CERT_TYPE_X509V3, "X.509v3" },
+ { CERT_TYPE_X509V3_URL, "X.509v3 URL" },
{ CERT_TYPE_X509V3_SIGN, "X.509v3 Sign" },
{ CERT_TYPE_X509V3_ENCR, "X.509v3 Encr" },
{ 0, NULL }
@@ -316,36 +315,38 @@ enum srtp_policy_type_t {
SP_MAX
};
-#define SP_TEXT_ENCR_ALG "Encryption algorithm"
-#define SP_TEXT_ENCR_LEN "Session Encr. key length"
-#define SP_TEXT_AUTH_ALG "Authentication algorithm"
+#define SP_TEXT_ENCR_ALG "Encryption algorithm"
+#define SP_TEXT_ENCR_LEN "Session Encr. key length"
+#define SP_TEXT_AUTH_ALG "Authentication algorithm"
#define SP_TEXT_AUTH_KEY_LEN "Session Auth. key length"
-#define SP_TEXT_SALT_LEN "Session Salt key length"
-#define SP_TEXT_PRF "SRTP Pseudo Random Function"
-#define SP_TEXT_KD_RATE "Key derivation rate"
-#define SP_TEXT_SRTP_ENCR "SRTP encryption"
-#define SP_TEXT_SRTCP_ENCR "SRTCP encryption"
-#define SP_TEXT_FEC "Sender's FEC order"
-#define SP_TEXT_SRTP_AUTH "SRTP authentication"
+#define SP_TEXT_SALT_LEN "Session Salt key length"
+#define SP_TEXT_PRF "SRTP Pseudo Random Function"
+#define SP_TEXT_KD_RATE "Key derivation rate"
+#define SP_TEXT_SRTP_ENCR "SRTP encryption"
+#define SP_TEXT_SRTCP_ENCR "SRTCP encryption"
+#define SP_TEXT_FEC "Sender's FEC order"
+#define SP_TEXT_SRTP_AUTH "SRTP authentication"
#define SP_TEXT_AUTH_TAG_LEN "Authentication tag length"
-#define SP_TEXT_SRTP_PREFIX "SRTP prefix length"
+#define SP_TEXT_SRTP_PREFIX "SRTP prefix length"
-static const value_string srtp_policy_type_vals[] _U_ = {
- { SP_ENCR_ALG, SP_TEXT_ENCR_ALG },
- { SP_ENCR_LEN, SP_TEXT_ENCR_LEN },
- { SP_AUTH_ALG, SP_TEXT_AUTH_ALG },
+#if 0
+static const value_string srtp_policy_type_vals[] = {
+ { SP_ENCR_ALG, SP_TEXT_ENCR_ALG },
+ { SP_ENCR_LEN, SP_TEXT_ENCR_LEN },
+ { SP_AUTH_ALG, SP_TEXT_AUTH_ALG },
{ SP_AUTH_KEY_LEN, SP_TEXT_AUTH_KEY_LEN },
- { SP_SALT_LEN, SP_TEXT_SALT_LEN },
- { SP_PRF, SP_TEXT_PRF },
- { SP_KD_RATE, SP_TEXT_KD_RATE },
- { SP_SRTP_ENCR, SP_TEXT_SRTP_ENCR },
- { SP_SRTCP_ENCR, SP_TEXT_SRTCP_ENCR },
- { SP_FEC, SP_TEXT_FEC },
- { SP_SRTP_AUTH, SP_TEXT_SRTP_AUTH },
+ { SP_SALT_LEN, SP_TEXT_SALT_LEN },
+ { SP_PRF, SP_TEXT_PRF },
+ { SP_KD_RATE, SP_TEXT_KD_RATE },
+ { SP_SRTP_ENCR, SP_TEXT_SRTP_ENCR },
+ { SP_SRTCP_ENCR, SP_TEXT_SRTCP_ENCR },
+ { SP_FEC, SP_TEXT_FEC },
+ { SP_SRTP_AUTH, SP_TEXT_SRTP_AUTH },
{ SP_AUTH_TAG_LEN, SP_TEXT_AUTH_TAG_LEN },
- { SP_SRTP_PREFIX, SP_TEXT_SRTP_PREFIX },
+ { SP_SRTP_PREFIX, SP_TEXT_SRTP_PREFIX },
{ 0, NULL }
};
+#endif
enum sp_encr_alg_t {
SP_ENCR_NULL = 0,
@@ -354,7 +355,7 @@ enum sp_encr_alg_t {
};
static const value_string sp_encr_alg_vals[] = {
- { SP_ENCR_NULL, "NULL" },
+ { SP_ENCR_NULL, "NULL" },
{ SP_ENCR_AES_CM, "AES-CM" },
{ SP_ENCR_AES_F8, "AES-F8" },
{ 0, NULL }
@@ -366,7 +367,7 @@ enum sp_auth_alg_t {
};
static const value_string sp_auth_alg_vals[] = {
- { SP_AUTH_NULL, "NULL" },
+ { SP_AUTH_NULL, "NULL" },
{ SP_AUTH_HMAC_SHA_1, "HMAC-SHA-1" },
{ 0, NULL }
};
@@ -414,8 +415,8 @@ enum kv_t {
};
static const value_string kv_vals[] = {
- { KV_NULL, "Null" },
- { KV_SPI, "SPI/MKI" },
+ { KV_NULL, "Null" },
+ { KV_SPI, "SPI/MKI" },
{ KV_INTERVAL, "Interval" },
{ 0, NULL }
};
@@ -428,9 +429,9 @@ enum kd_t {
};
static const value_string kd_vals[] = {
- { KD_TGK, "TGK" },
+ { KD_TGK, "TGK" },
{ KD_TGK_SALT, "TGK+SALT" },
- { KD_TEK, "TEK" },
+ { KD_TEK, "TEK" },
{ KD_TEK_SALT, "TEK+SALT" },
{ 0, NULL }
};
@@ -452,21 +453,22 @@ enum err_t {
};
static const value_string err_vals[] = {
- { ERR_AUTH_FAILURE, "Authentication failure" },
- { ERR_INVALID_TS, "Invalid timestamp" },
- { ERR_INVALID_PRF, "PRF function not supported" },
- { ERR_INVALID_MAC, "MAC algorithm not supported" },
- { ERR_INVALID_EA, "Encryption algorithm not supported" },
- { ERR_INVALID_HA, "Hash function not supported" },
- { ERR_INVALID_DH, "DH group not supported" },
- { ERR_INVALID_ID, "ID not supported" },
- { ERR_INVALID_CERT, "Certificate not supported" },
- { ERR_INVALID_SP, "SP type not supported" },
- { ERR_INVALID_SPPAR,"SP parameters not supported" },
- { ERR_INVALID_DT, "Data type not supported" },
- { ERR_UNKNOWN, "Unspecified error" },
+ { ERR_AUTH_FAILURE, "Authentication failure" },
+ { ERR_INVALID_TS, "Invalid timestamp" },
+ { ERR_INVALID_PRF, "PRF function not supported" },
+ { ERR_INVALID_MAC, "MAC algorithm not supported" },
+ { ERR_INVALID_EA, "Encryption algorithm not supported" },
+ { ERR_INVALID_HA, "Hash function not supported" },
+ { ERR_INVALID_DH, "DH group not supported" },
+ { ERR_INVALID_ID, "ID not supported" },
+ { ERR_INVALID_CERT, "Certificate not supported" },
+ { ERR_INVALID_SP, "SP type not supported" },
+ { ERR_INVALID_SPPAR, "SP parameters not supported" },
+ { ERR_INVALID_DT, "Data type not supported" },
+ { ERR_UNKNOWN, "Unspecified error" },
{ 0, NULL }
};
+static value_string_ext err_vals_ext = VALUE_STRING_EXT_INIT(err_vals);
enum genext_t {
GEN_EXT_VENDOR_ID = 0,
@@ -475,7 +477,7 @@ enum genext_t {
static const value_string genext_type_vals[] = {
{ GEN_EXT_VENDOR_ID, "Vendor-ID" },
- { GEN_EXT_SDP_ID, "SDP-IDs" },
+ { GEN_EXT_SDP_ID, "SDP-IDs" },
{ 0, NULL }
};
@@ -604,7 +606,6 @@ struct mikey_dissector_entry {
/* Forward declaration we need below */
void proto_reg_handoff_mikey(void);
static int dissect_payload(enum payload_t payload, mikey_t *mikey, tvbuff_t *tvb, packet_info *pinfo, proto_tree *tree);
-static const struct mikey_dissector_entry *mikey_dissector_lookup(const struct mikey_dissector_entry *map, int type);
/* Initialize the protocol and registered fields */
@@ -644,25 +645,26 @@ add_next_payload(tvbuff_t *tvb, proto_tree *tree, int offset)
static int
dissect_payload_cs_id_srtp(mikey_t *mikey _U_, tvbuff_t *tvb, packet_info *pinfo _U_, proto_tree *tree)
{
- proto_item *id_ti;
- proto_tree *id_tree;
- guint8 no;
- guint32 ssrc;
- guint32 roc;
-
tvb_ensure_bytes_exist(tvb, 0, 9);
- no = tvb_get_guint8(tvb, 0);
- ssrc = tvb_get_ntohl(tvb, 1);
- roc = tvb_get_ntohl(tvb, 5);
-
if (tree) {
- id_ti = proto_tree_add_none_format(tree, hf_mikey[POS_ID_SRTP], tvb, 0, 9, "SRTP ID: Policy: %d, SSRC: 0x%x, ROC: 0x%x", no, ssrc, roc);
+ proto_item *id_ti;
+ proto_tree *id_tree;
+ guint8 no;
+ guint32 ssrc;
+ guint32 roc;
+
+ no = tvb_get_guint8(tvb, 0);
+ ssrc = tvb_get_ntohl(tvb, 1);
+ roc = tvb_get_ntohl(tvb, 5);
+
+ id_ti = proto_tree_add_none_format(tree, hf_mikey[POS_ID_SRTP], tvb, 0, 9,
+ "SRTP ID: Policy: %d, SSRC: 0x%x, ROC: 0x%x", no, ssrc, roc);
id_tree = proto_item_add_subtree(id_ti, ett_mikey_hdr_id);
- proto_tree_add_item(id_tree, hf_mikey[POS_ID_SRTP_NO], tvb, 0, 1, ENC_BIG_ENDIAN);
+ proto_tree_add_item(id_tree, hf_mikey[POS_ID_SRTP_NO], tvb, 0, 1, ENC_BIG_ENDIAN);
proto_tree_add_item(id_tree, hf_mikey[POS_ID_SRTP_SSRC], tvb, 1, 4, ENC_BIG_ENDIAN);
- proto_tree_add_item(id_tree, hf_mikey[POS_ID_SRTP_ROC], tvb, 5, 4, ENC_BIG_ENDIAN);
+ proto_tree_add_item(id_tree, hf_mikey[POS_ID_SRTP_ROC], tvb, 5, 4, ENC_BIG_ENDIAN);
}
return 9;
}
@@ -690,12 +692,10 @@ dissect_payload_cs_id(enum cs_id_map_t type, mikey_t *mikey, tvbuff_t *tvb, pack
static int
dissect_payload_hdr(mikey_t *mikey, tvbuff_t *tvb, packet_info *pinfo, proto_tree *tree)
{
- int offset = 0;
+ int offset = 0;
guint8 cs_id_map_type;
guint8 ncs;
- int i;
- proto_item* parent;
-
+ int i;
tvb_ensure_bytes_exist(tvb, offset, 10);
mikey->type = tvb_get_guint8(tvb, offset+1);
@@ -703,12 +703,14 @@ dissect_payload_hdr(mikey_t *mikey, tvbuff_t *tvb, packet_info *pinfo, proto_tre
cs_id_map_type = tvb_get_guint8(tvb, offset+9);
if (tree) {
+ proto_item* parent;
proto_tree_add_item(tree, hf_mikey[POS_HDR_VERSION],
tvb, offset+0, 1, ENC_BIG_ENDIAN);
proto_tree_add_item(tree, hf_mikey[POS_HDR_DATA_TYPE], tvb, offset+1, 1, ENC_BIG_ENDIAN);
parent = proto_tree_get_parent(tree);
- proto_item_append_text(parent, " Type: %s", val_to_str_const(mikey->type, data_type_vals, "Unknown"));
+ proto_item_append_text(parent, " Type: %s",
+ val_to_str_ext_const(mikey->type, &data_type_vals_ext, "Unknown"));
add_next_payload(tvb, tree, offset+2);
@@ -724,7 +726,7 @@ dissect_payload_hdr(mikey_t *mikey, tvbuff_t *tvb, packet_info *pinfo, proto_tre
offset += 10;
for (i=0; i < ncs; i++) {
tvbuff_t *sub_tvb;
- int len;
+ int len;
sub_tvb = tvb_new_subset_remaining(tvb, offset);
len = dissect_payload_cs_id(cs_id_map_type, mikey, sub_tvb, pinfo, tree);
@@ -741,26 +743,26 @@ dissect_payload_hdr(mikey_t *mikey, tvbuff_t *tvb, packet_info *pinfo, proto_tre
static int
dissect_payload_kemac(mikey_t *mikey, tvbuff_t *tvb, packet_info *pinfo, proto_tree *tree)
{
- int offset = 0;
- guint8 encr_alg;
- guint16 encr_length;
- guint16 mac_length;
- guint8 mac_alg;
- proto_item *key_data_item;
- proto_tree *key_data_tree;
- tvbuff_t *sub_tvb = NULL;
+ int offset = 0;
+ guint8 encr_alg;
+ guint16 encr_length;
+ guint16 mac_length;
+ guint8 mac_alg;
tvb_ensure_bytes_exist(tvb, offset+0, 4);
- encr_alg = tvb_get_guint8(tvb, offset+1);
+ encr_alg = tvb_get_guint8(tvb, offset+1);
encr_length = tvb_get_ntohs(tvb, offset+2);
tvb_ensure_bytes_exist(tvb, offset+4, encr_length+1);
- mac_alg = tvb_get_guint8(tvb, offset+4+encr_length);
+ mac_alg = tvb_get_guint8(tvb, offset+4+encr_length);
if (tree) {
- proto_tree_add_item(tree, hf_mikey[POS_KEMAC_ENCR_ALG], tvb, 1, 1, ENC_BIG_ENDIAN);
+ tvbuff_t *sub_tvb;
+ proto_tree_add_item(tree, hf_mikey[POS_KEMAC_ENCR_ALG], tvb, 1, 1, ENC_BIG_ENDIAN);
proto_tree_add_item(tree, hf_mikey[POS_KEMAC_ENCR_DATA_LEN], tvb, 2, 2, ENC_BIG_ENDIAN);
/* TODO: Add key decode for MIKEY_TYPE_PK_INIT and MIKEY_TYPE_RSA_R_RESP with NULL encryption */
- if (encr_alg == ENCR_NULL && mikey->type == MIKEY_TYPE_PSK_INIT && encr_length > 0) {
+ if ((encr_alg == ENCR_NULL) && (mikey->type == MIKEY_TYPE_PSK_INIT) && (encr_length > 0)) {
+ proto_item *key_data_item;
+ proto_tree *key_data_tree;
/* We can decode easily the Key Data if NULL encryption is used */
key_data_item = proto_tree_add_item(tree, hf_mikey_pl[PL_KEY_DATA], tvb, 4, encr_length, ENC_NA);
key_data_tree = proto_item_add_subtree(key_data_item, ett_mikey_enc_data);
@@ -796,12 +798,11 @@ dissect_payload_kemac(mikey_t *mikey, tvbuff_t *tvb, packet_info *pinfo, proto_t
static int
dissect_payload_pke(mikey_t *mikey _U_, tvbuff_t *tvb, packet_info *pinfo _U_, proto_tree *tree)
{
- int offset = 0;
+ int offset = 0;
guint16 length;
tvb_ensure_bytes_exist(tvb, offset+0, 3);
- length = ((tvb_get_guint8(tvb, offset+1) & 0x3f) << 8) |
- tvb_get_guint8(tvb, offset+2);
+ length = tvb_get_ntohs(tvb, offset+1) &0x3ff;
if (tree) {
proto_tree_add_item(tree, hf_mikey[POS_PKE_C], tvb, 1, 2, ENC_BIG_ENDIAN);
@@ -819,9 +820,9 @@ dissect_payload_pke(mikey_t *mikey _U_, tvbuff_t *tvb, packet_info *pinfo _U_, p
static int
dissect_payload_dh(mikey_t *mikey _U_, tvbuff_t *tvb, packet_info *pinfo _U_, proto_tree *tree)
{
- int offset = 0;
+ int offset = 0;
guint8 dh_group;
- int dh_length;
+ int dh_length;
guint8 kv;
tvb_ensure_bytes_exist(tvb, offset+0, 2);
@@ -855,13 +856,13 @@ dissect_payload_dh(mikey_t *mikey _U_, tvbuff_t *tvb, packet_info *pinfo _U_, pr
return -1;
}
- return 2+dh_length+1;
+ return 2 + dh_length + 1;
}
static int
dissect_payload_sign(mikey_t *mikey _U_, tvbuff_t *tvb, packet_info *pinfo _U_, proto_tree *tree)
{
- int offset = 0;
+ int offset = 0;
guint16 length;
tvb_ensure_bytes_exist(tvb, offset+0, 2);
@@ -883,14 +884,14 @@ static int
dissect_payload_t(mikey_t *mikey _U_, tvbuff_t *tvb, packet_info *pinfo _U_, proto_tree *tree)
{
guint8 ts_type;
- int offset = 0;
- int len = 0;
- proto_tree* parent = NULL;
+ int offset = 0;
+ int len = 0;
tvb_ensure_bytes_exist(tvb, offset+0, 2);
ts_type = tvb_get_guint8(tvb, offset+1);
if (tree) {
+ proto_tree *parent;
parent = proto_tree_get_parent(tree);
proto_item_append_text(parent, " Type: %s", val_to_str_const(ts_type, ts_type_vals, "Unknown"));
proto_tree_add_item(tree, hf_mikey[POS_TS_TYPE], tvb, offset+1, 1, ENC_BIG_ENDIAN);
@@ -916,14 +917,13 @@ dissect_payload_t(mikey_t *mikey _U_, tvbuff_t *tvb, packet_info *pinfo _U_, pro
static int
dissect_payload_id(mikey_t *mikey _U_, tvbuff_t *tvb, packet_info *pinfo _U_, proto_tree *tree)
{
- int offset = 0;
- guint8 type;
- guint16 length;
- proto_item* parent = NULL;
+ int offset = 0;
+ guint8 type;
+ guint16 length;
- tvb_ensure_bytes_exist(tvb, offset+0, 4);
- type = tvb_get_guint8(tvb, offset+1);
- length = tvb_get_ntohs(tvb, offset+2);
+ tvb_ensure_bytes_exist(tvb, offset+0, 4);
+ type = tvb_get_guint8(tvb, offset+1);
+ length = tvb_get_ntohs(tvb, offset+2);
if (tree) {
proto_tree_add_item(tree, hf_mikey[POS_ID_TYPE], tvb, 1, 1, ENC_BIG_ENDIAN);
proto_tree_add_item(tree, hf_mikey[POS_ID_LEN], tvb, 2, 2, ENC_BIG_ENDIAN);
@@ -931,10 +931,13 @@ dissect_payload_id(mikey_t *mikey _U_, tvbuff_t *tvb, packet_info *pinfo _U_, pr
tvb_ensure_bytes_exist(tvb, offset+4, length);
if (tree) {
+ proto_item* parent;
proto_tree_add_item(tree, hf_mikey[POS_ID], tvb, 4, length, ENC_ASCII|ENC_NA);
parent = proto_tree_get_parent(tree);
- proto_item_append_text(parent, " %s: %s", val_to_str_const(type, id_type_vals, "Unknown"), tvb_get_ephemeral_string(tvb, 4, length));
+ proto_item_append_text(parent, " %s: %s",
+ val_to_str_const(type, id_type_vals, "Unknown"),
+ tvb_get_ephemeral_string(tvb, 4, length));
}
return 4 + length;
@@ -943,10 +946,9 @@ dissect_payload_id(mikey_t *mikey _U_, tvbuff_t *tvb, packet_info *pinfo _U_, pr
static int
dissect_payload_idr(mikey_t *mikey _U_, tvbuff_t *tvb, packet_info *pinfo _U_, proto_tree *tree)
{
- int offset = 0;
- guint8 type;
- guint16 length;
- proto_item* parent = NULL;
+ int offset = 0;
+ guint8 type;
+ guint16 length;
tvb_ensure_bytes_exist(tvb, offset+0, 5);
type = tvb_get_guint8(tvb, offset+2);
@@ -954,15 +956,18 @@ dissect_payload_idr(mikey_t *mikey _U_, tvbuff_t *tvb, packet_info *pinfo _U_, p
if (tree) {
proto_tree_add_item(tree, hf_mikey[POS_ID_ROLE], tvb, 1, 1, ENC_NA);
proto_tree_add_item(tree, hf_mikey[POS_ID_TYPE], tvb, 2, 1, ENC_NA);
- proto_tree_add_item(tree, hf_mikey[POS_ID_LEN], tvb, 3, 2, ENC_NA);
+ proto_tree_add_item(tree, hf_mikey[POS_ID_LEN], tvb, 3, 2, ENC_NA);
}
tvb_ensure_bytes_exist(tvb, offset+5, length);
if (tree) {
+ proto_item *parent;
proto_tree_add_item(tree, hf_mikey[POS_ID], tvb, 5, length, ENC_NA);
parent = proto_tree_get_parent(tree);
- proto_item_append_text(parent, " %s: %s", val_to_str_const(type, id_type_vals, "Unknown"), tvb_get_ephemeral_string(tvb, 5, length));
+ proto_item_append_text(parent, " %s: %s",
+ val_to_str_const(type, id_type_vals, "Unknown"),
+ tvb_get_ephemeral_string(tvb, 5, length));
}
return 5 + length;
@@ -971,21 +976,22 @@ dissect_payload_idr(mikey_t *mikey _U_, tvbuff_t *tvb, packet_info *pinfo _U_, p
static int
dissect_payload_cert(mikey_t *mikey _U_, tvbuff_t *tvb, packet_info *pinfo, proto_tree *tree)
{
- int offset = 0;
- guint8 type;
- guint16 length;
- tvbuff_t *subtvb;
- proto_item* parent = NULL;
- asn1_ctx_t asn1_ctx;
+ int offset = 0;
+ guint8 type;
+ guint16 length;
+ tvbuff_t *subtvb;
+ asn1_ctx_t asn1_ctx;
+
asn1_ctx_init(&asn1_ctx, ASN1_ENC_BER, TRUE, pinfo);
tvb_ensure_bytes_exist(tvb, offset+0, 4);
- type = tvb_get_guint8(tvb, offset+1);
+ type = tvb_get_guint8(tvb, offset+1);
length = tvb_get_ntohs(tvb, offset+2);
tvb_ensure_bytes_exist(tvb, offset+4, length);
if (tree) {
+ proto_item *parent;
parent = proto_tree_get_parent(tree);
proto_tree_add_item(tree, hf_mikey[POS_CERT_TYPE], tvb, 1, 1, ENC_BIG_ENDIAN);
proto_tree_add_item(tree, hf_mikey[POS_CERT_LEN], tvb, 1, 2, ENC_BIG_ENDIAN);
@@ -1002,9 +1008,9 @@ dissect_payload_cert(mikey_t *mikey _U_, tvbuff_t *tvb, packet_info *pinfo, prot
static int
dissect_payload_v(mikey_t *mikey _U_, tvbuff_t *tvb, packet_info *pinfo _U_, proto_tree *tree)
{
- int offset = 0;
+ int offset = 0;
guint16 length;
- guint8 alg;
+ guint8 alg;
tvb_ensure_bytes_exist(tvb, offset+0, 2);
alg = tvb_get_guint8(tvb, offset+1);
@@ -1035,12 +1041,10 @@ dissect_payload_v(mikey_t *mikey _U_, tvbuff_t *tvb, packet_info *pinfo _U_, pro
static int
dissect_payload_sp_param(enum sp_prot_t proto, tvbuff_t *tvb, proto_tree *tree)
{
- int offset = 0;
+ int offset = 0;
guint8 type;
guint8 length;
- proto_item *param_ti;
- proto_tree *param_tree;
- int hfindex;
+ int hfindex;
tvb_ensure_bytes_exist(tvb, offset+0, 2);
type = tvb_get_guint8(tvb, offset+0);
@@ -1058,6 +1062,8 @@ dissect_payload_sp_param(enum sp_prot_t proto, tvbuff_t *tvb, proto_tree *tree)
}
if (tree) {
+ proto_item *param_ti;
+ proto_tree *param_tree;
/*
* All the parameters in question are either FT_BYTES,
* in which case the byte order is inapplicable, or
@@ -1079,25 +1085,26 @@ dissect_payload_sp_param(enum sp_prot_t proto, tvbuff_t *tvb, proto_tree *tree)
static int
dissect_payload_sp(mikey_t *mikey _U_, tvbuff_t *tvb, packet_info *pinfo _U_, proto_tree *tree)
{
- int offset = 0;
- guint16 length;
- int sub_pos;
- guint8 no;
+ int offset = 0;
+ guint16 length;
+ int sub_pos;
+ guint8 no;
enum sp_prot_t type;
- proto_item* parent = NULL;
tvb_ensure_bytes_exist(tvb, offset+0, 5);
length = tvb_get_ntohs(tvb, offset+3);
- no = tvb_get_guint8(tvb, offset+1);
- type = tvb_get_guint8(tvb, offset+2);
+ no = tvb_get_guint8(tvb, offset+1);
+ type = tvb_get_guint8(tvb, offset+2);
if (tree) {
+ proto_item *parent;
parent = proto_tree_get_parent(tree);
- proto_tree_add_item(tree, hf_mikey[POS_SP_NO], tvb, 1, 1, ENC_BIG_ENDIAN);
- proto_tree_add_item(tree, hf_mikey[POS_SP_TYPE], tvb, 2, 1, ENC_BIG_ENDIAN);
+ proto_tree_add_item(tree, hf_mikey[POS_SP_NO], tvb, 1, 1, ENC_BIG_ENDIAN);
+ proto_tree_add_item(tree, hf_mikey[POS_SP_TYPE], tvb, 2, 1, ENC_BIG_ENDIAN);
proto_tree_add_item(tree, hf_mikey[POS_SP_PARAM_LEN], tvb, 3, 2, ENC_BIG_ENDIAN);
- proto_item_append_text(parent, " No: %d, Type: %s", no, val_to_str_const(type, sp_prot_type_vals, "Unknown"));
+ proto_item_append_text(parent, " No: %d, Type: %s", no,
+ val_to_str_const(type, sp_prot_type_vals, "Unknown"));
}
tvb_ensure_bytes_exist(tvb, offset+5, length);
@@ -1107,7 +1114,7 @@ dissect_payload_sp(mikey_t *mikey _U_, tvbuff_t *tvb, packet_info *pinfo _U_, pr
sub_pos = 0;
while (sub_pos < length) {
- int param_len;
+ int param_len;
tvbuff_t *subtvb;
subtvb = tvb_new_subset(tvb, offset+sub_pos, length-sub_pos, length-sub_pos);
@@ -1125,7 +1132,7 @@ dissect_payload_sp(mikey_t *mikey _U_, tvbuff_t *tvb, packet_info *pinfo _U_, pr
static int
dissect_payload_rand(mikey_t *mikey _U_, tvbuff_t *tvb, packet_info *pinfo _U_, proto_tree *tree)
{
- int offset = 0;
+ int offset = 0;
guint16 length;
tvb_ensure_bytes_exist(tvb, offset+0, 2);
@@ -1146,18 +1153,17 @@ dissect_payload_rand(mikey_t *mikey _U_, tvbuff_t *tvb, packet_info *pinfo _U_,
static int
dissect_payload_err(mikey_t *mikey _U_, tvbuff_t *tvb, packet_info *pinfo _U_, proto_tree *tree)
{
- proto_item *parent = NULL;
- guint8 err_no;
-
tvb_ensure_bytes_exist(tvb, 0, 4);
- err_no = tvb_get_guint8(tvb, 1);
if (tree) {
+ proto_item *parent;
+ guint8 err_no;
+ err_no = tvb_get_guint8(tvb, 1);
proto_tree_add_item(tree, hf_mikey[POS_ERR_NO], tvb, 1, 1, ENC_BIG_ENDIAN);
proto_tree_add_item(tree, hf_mikey[POS_ERR_RESERVED], tvb, 2, 2, ENC_NA);
+ parent = proto_tree_get_parent(tree);
+ proto_item_append_text(parent, ": %s", val_to_str_ext_const(err_no, &err_vals_ext, "Unknown"));
}
- parent = proto_tree_get_parent(tree);
- proto_item_append_text(parent, ": %s", val_to_str_const(err_no, err_vals, "Unknown"));
return 4;
}
@@ -1165,15 +1171,10 @@ dissect_payload_err(mikey_t *mikey _U_, tvbuff_t *tvb, packet_info *pinfo _U_, p
static int
dissect_payload_keydata(mikey_t *mikey _U_, tvbuff_t *tvb, packet_info *pinfo _U_, proto_tree *tree)
{
- guint16 offset;
- guint16 data_len;
- guint16 salt_len;
- guint16 kv_from_len;
- guint16 kv_to_len;
- guint16 kv_spi_len;
- guint8 key_type;
- guint8 kv_type;
- proto_item *parent = NULL;
+ guint16 offset;
+ guint16 data_len;
+ guint8 key_type;
+ guint8 kv_type;
offset = 0;
tvb_ensure_bytes_exist(tvb, 0, 4);
@@ -1185,70 +1186,80 @@ dissect_payload_keydata(mikey_t *mikey _U_, tvbuff_t *tvb, packet_info *pinfo _U
offset += 4;
if (tree) {
- proto_tree_add_item(tree, hf_mikey[POS_KEY_DATA_TYPE], tvb, 1, 1, ENC_BIG_ENDIAN);
- proto_tree_add_item(tree, hf_mikey[POS_KEY_DATA_KV], tvb, 1, 1, ENC_BIG_ENDIAN);
- proto_tree_add_item(tree, hf_mikey[POS_KEY_DATA_LEN], tvb, 2, 2, ENC_BIG_ENDIAN);
- proto_tree_add_item(tree, hf_mikey[POS_KEY_DATA], tvb, 4, data_len, ENC_NA);
+ proto_item *parent;
+ proto_tree_add_item(tree, hf_mikey[POS_KEY_DATA_TYPE], tvb, 1, 1, ENC_BIG_ENDIAN);
+ proto_tree_add_item(tree, hf_mikey[POS_KEY_DATA_KV], tvb, 1, 1, ENC_BIG_ENDIAN);
+ proto_tree_add_item(tree, hf_mikey[POS_KEY_DATA_LEN], tvb, 2, 2, ENC_BIG_ENDIAN);
+ proto_tree_add_item(tree, hf_mikey[POS_KEY_DATA], tvb, 4, data_len, ENC_NA);
parent = proto_tree_get_parent(tree);
proto_item_append_text(parent, " Type: %s", val_to_str_const(key_type, kd_vals, "Unknown"));
- offset += data_len;
-
- /* Dissect SALT key */
- if (key_type == KD_TGK_SALT || key_type == KD_TEK_SALT) {
- tvb_ensure_bytes_exist(tvb, offset, 2);
- salt_len = tvb_get_ntohs(tvb, offset);
- if (salt_len>0) {
- tvb_ensure_bytes_exist(tvb, offset+2, salt_len);
+ }
+
+ offset += data_len;
+
+ /* Dissect SALT key */
+ if ((key_type == KD_TGK_SALT) || (key_type == KD_TEK_SALT)) {
+ guint16 salt_len;
+ tvb_ensure_bytes_exist(tvb, offset, 2);
+ salt_len = tvb_get_ntohs(tvb, offset);
+ if (salt_len > 0) {
+ tvb_ensure_bytes_exist(tvb, offset+2, salt_len);
+ if (tree) {
proto_tree_add_item(tree, hf_mikey[POS_KEY_SALT_LEN], tvb, offset, 2, ENC_BIG_ENDIAN);
proto_tree_add_item(tree, hf_mikey[POS_KEY_SALT], tvb, offset+2, salt_len, ENC_NA);
}
- offset += 2+salt_len;
}
+ offset += 2+salt_len;
+ }
- /* Dissect Key Validity */
- if (kv_type == KV_INTERVAL) {
- tvb_ensure_bytes_exist(tvb, offset, 1);
- kv_from_len = tvb_get_guint8(tvb, offset);
- proto_tree_add_item(tree, hf_mikey[POS_KEY_KV_FROM_LEN], tvb, offset, 1, ENC_BIG_ENDIAN);
- if (kv_from_len > 0) {
- tvb_ensure_bytes_exist(tvb, offset+1, kv_from_len);
- proto_tree_add_item(tree, hf_mikey[POS_KEY_KV_FROM], tvb, offset+1, kv_from_len, ENC_NA);
- }
- offset += 1+kv_from_len;
-
- tvb_ensure_bytes_exist(tvb, offset, 1);
- kv_to_len = tvb_get_guint8(tvb, offset);
- proto_tree_add_item(tree, hf_mikey[POS_KEY_KV_TO_LEN], tvb, offset, 1, ENC_BIG_ENDIAN);
- if (kv_to_len > 0) {
- tvb_ensure_bytes_exist(tvb, offset+1, kv_to_len);
- proto_tree_add_item(tree, hf_mikey[POS_KEY_KV_TO], tvb, offset+1, kv_to_len, ENC_NA);
- }
- offset += 1+kv_to_len;
- } else if (kv_type == KV_SPI) {
- tvb_ensure_bytes_exist(tvb, offset, 1);
- kv_spi_len = tvb_get_guint8(tvb, offset);
- proto_tree_add_item(tree, hf_mikey[POS_KEY_KV_SPI_LEN], tvb, offset, 1, ENC_BIG_ENDIAN);
- if (kv_spi_len > 0) {
- tvb_ensure_bytes_exist(tvb, offset+1, kv_spi_len);
- proto_tree_add_item(tree, hf_mikey[POS_KEY_KV_SPI], tvb, offset+1, kv_spi_len, ENC_NA);
- }
- offset += 1+kv_spi_len;
+ /* Dissect Key Validity */
+ if (kv_type == KV_INTERVAL) {
+ guint16 kv_from_len;
+ guint16 kv_to_len;
+
+ tvb_ensure_bytes_exist(tvb, offset, 1);
+ kv_from_len = tvb_get_guint8(tvb, offset);
+ proto_tree_add_item(tree, hf_mikey[POS_KEY_KV_FROM_LEN], tvb, offset, 1, ENC_BIG_ENDIAN);
+ if (kv_from_len > 0) {
+ tvb_ensure_bytes_exist(tvb, offset+1, kv_from_len);
+ proto_tree_add_item(tree, hf_mikey[POS_KEY_KV_FROM], tvb, offset+1, kv_from_len, ENC_NA);
+ }
+ offset += 1+kv_from_len;
+
+ tvb_ensure_bytes_exist(tvb, offset, 1);
+ kv_to_len = tvb_get_guint8(tvb, offset);
+ proto_tree_add_item(tree, hf_mikey[POS_KEY_KV_TO_LEN], tvb, offset, 1, ENC_BIG_ENDIAN);
+ if (kv_to_len > 0) {
+ tvb_ensure_bytes_exist(tvb, offset+1, kv_to_len);
+ proto_tree_add_item(tree, hf_mikey[POS_KEY_KV_TO], tvb, offset+1, kv_to_len, ENC_NA);
}
+ offset += 1+kv_to_len;
+ } else if (kv_type == KV_SPI) {
+ guint16 kv_spi_len;
+
+ tvb_ensure_bytes_exist(tvb, offset, 1);
+ kv_spi_len = tvb_get_guint8(tvb, offset);
+ proto_tree_add_item(tree, hf_mikey[POS_KEY_KV_SPI_LEN], tvb, offset, 1, ENC_BIG_ENDIAN);
+ if (kv_spi_len > 0) {
+ tvb_ensure_bytes_exist(tvb, offset+1, kv_spi_len);
+ proto_tree_add_item(tree, hf_mikey[POS_KEY_KV_SPI], tvb, offset+1, kv_spi_len, ENC_NA);
+ }
+ offset += 1+kv_spi_len;
}
+
return offset;
}
static int
dissect_payload_general_ext(mikey_t *mikey _U_, tvbuff_t *tvb, packet_info *pinfo _U_, proto_tree *tree)
{
- proto_item *parent = NULL;
- int offset = 0;
- guint8 type;
- guint16 data_len;
+ int offset = 0;
+ guint8 type;
+ guint16 data_len;
tvb_ensure_bytes_exist(tvb, offset+0, 4);
- type = tvb_get_guint8(tvb, offset+1);
+ type = tvb_get_guint8(tvb, offset+1);
data_len = tvb_get_ntohs(tvb, offset+2);
if (tree) {
@@ -1259,9 +1270,10 @@ dissect_payload_general_ext(mikey_t *mikey _U_, tvbuff_t *tvb, packet_info *pinf
tvb_ensure_bytes_exist(tvb, offset+3, data_len);
if (tree) {
+ proto_item *parent;
parent = proto_tree_get_parent(tree);
- if (type==1) {
+ if (type == 1) {
/* For SDP-IDs, show a string instead of raw bytes */
proto_tree_add_item(tree, hf_mikey[POS_GENERAL_EXT_VALUE], tvb, 4, data_len, ENC_ASCII|ENC_NA);
} else {
@@ -1275,16 +1287,16 @@ dissect_payload_general_ext(mikey_t *mikey _U_, tvbuff_t *tvb, packet_info *pinf
static int
dissect_payload_sakke(mikey_t *mikey _U_, tvbuff_t *tvb, packet_info *pinfo _U_, proto_tree *tree)
{
- int offset = 0;
+ int offset = 0;
guint16 data_len;
tvb_ensure_bytes_exist(tvb, offset+0, 5);
data_len = tvb_get_ntohs(tvb, offset+3);
if (tree) {
- proto_tree_add_item(tree, hf_mikey[POS_SAKKE_PARAMS], tvb, 1, 1, ENC_BIG_ENDIAN);
+ proto_tree_add_item(tree, hf_mikey[POS_SAKKE_PARAMS], tvb, 1, 1, ENC_BIG_ENDIAN);
proto_tree_add_item(tree, hf_mikey[POS_SAKKE_ID_SCHEME], tvb, 2, 1, ENC_BIG_ENDIAN);
- proto_tree_add_item(tree, hf_mikey[POS_SAKKE_LEN], tvb, 3, 2, ENC_BIG_ENDIAN);
+ proto_tree_add_item(tree, hf_mikey[POS_SAKKE_LEN], tvb, 3, 2, ENC_BIG_ENDIAN);
}
tvb_ensure_bytes_exist(tvb, offset+5, data_len);
@@ -1296,22 +1308,22 @@ dissect_payload_sakke(mikey_t *mikey _U_, tvbuff_t *tvb, packet_info *pinfo _U_,
}
static const struct mikey_dissector_entry payload_map[] = {
- { PL_HDR, dissect_payload_hdr },
- { PL_KEMAC, dissect_payload_kemac },
- { PL_PKE, dissect_payload_pke },
- { PL_DH, dissect_payload_dh },
- { PL_SIGN, dissect_payload_sign },
- { PL_T, dissect_payload_t },
- { PL_ID, dissect_payload_id },
- { PL_CERT, dissect_payload_cert },
- { PL_V, dissect_payload_v },
- { PL_SP, dissect_payload_sp },
- { PL_RAND, dissect_payload_rand },
- { PL_ERR, dissect_payload_err },
- { PL_IDR, dissect_payload_idr },
- { PL_KEY_DATA, dissect_payload_keydata },
+ { PL_HDR, dissect_payload_hdr },
+ { PL_KEMAC, dissect_payload_kemac },
+ { PL_PKE, dissect_payload_pke },
+ { PL_DH, dissect_payload_dh },
+ { PL_SIGN, dissect_payload_sign },
+ { PL_T, dissect_payload_t },
+ { PL_ID, dissect_payload_id },
+ { PL_CERT, dissect_payload_cert },
+ { PL_V, dissect_payload_v },
+ { PL_SP, dissect_payload_sp },
+ { PL_RAND, dissect_payload_rand },
+ { PL_ERR, dissect_payload_err },
+ { PL_IDR, dissect_payload_idr },
+ { PL_KEY_DATA, dissect_payload_keydata },
{ PL_GENERAL_EXT, dissect_payload_general_ext },
- { PL_SAKKE, dissect_payload_sakke },
+ { PL_SAKKE, dissect_payload_sakke },
{ 0, NULL }
};
@@ -1333,13 +1345,12 @@ dissect_payload(enum payload_t payload, mikey_t *mikey, tvbuff_t *tvb, packet_in
static int
dissect_mikey(tvbuff_t *tvb, packet_info *pinfo, proto_tree *tree, void *data _U_)
{
- proto_item *ti = NULL;
+ proto_item *ti = NULL;
proto_tree *mikey_tree = NULL;
- int offset = 0;
- int next_payload_offset;
- tvbuff_t *subtvb = NULL;
- int payload = -1;
- mikey_t *mikey;
+ int offset = 0;
+ int next_payload_offset;
+ int payload;
+ mikey_t *mikey;
mikey = p_get_proto_data(pinfo->fd, proto_mikey);
@@ -1351,7 +1362,7 @@ dissect_mikey(tvbuff_t *tvb, packet_info *pinfo, proto_tree *tree, void *data _U
tvb_ensure_bytes_exist(tvb, offset, 3);
- next_payload_offset = offset+2;
+ next_payload_offset = offset + 2;
payload = -1;
if (tree) {
@@ -1360,14 +1371,14 @@ dissect_mikey(tvbuff_t *tvb, packet_info *pinfo, proto_tree *tree, void *data _U
}
while (payload != 0) {
- int len;
- proto_item *sub_ti = NULL;
+ int len;
+ proto_item *sub_ti = NULL;
proto_tree *mikey_payload_tree = NULL;
- int next_payload;
+ int next_payload;
+ tvbuff_t *subtvb;
next_payload = tvb_get_guint8(tvb, next_payload_offset);
- len = tvb_length_remaining(tvb, offset);
- subtvb = tvb_new_subset(tvb, offset, len, len);
+ subtvb = tvb_new_subset_remaining(tvb, offset);
if (mikey_tree) {
int hf = payload;
@@ -1381,7 +1392,7 @@ dissect_mikey(tvbuff_t *tvb, packet_info *pinfo, proto_tree *tree, void *data _U
sub_ti = proto_tree_add_item(mikey_tree, hf_mikey_pl[hf], subtvb, 0, -1, ENC_NA);
mikey_payload_tree = proto_item_add_subtree(sub_ti, ett_mikey_payload);
- if (payload != PL_HDR && payload != PL_SIGN)
+ if ((payload != PL_HDR) && (payload != PL_SIGN))
add_next_payload(tvb, mikey_payload_tree, next_payload_offset);
}
@@ -1402,13 +1413,15 @@ dissect_mikey(tvbuff_t *tvb, packet_info *pinfo, proto_tree *tree, void *data _U
}
if (ti) {
- proto_item_append_text(ti, ": %s", val_to_str_const(mikey->type, data_type_vals, "Unknown"));
+ proto_item_append_text(ti, ": %s",
+ val_to_str_ext_const(mikey->type, &data_type_vals_ext, "Unknown"));
}
col_append_str(pinfo->cinfo, COL_PROTOCOL, "/MIKEY");
if (check_col(pinfo->cinfo, COL_INFO))
- col_append_fstr(pinfo->cinfo, COL_INFO, ", Mikey: %s", val_to_str_const(mikey->type, data_type_vals, "Unknown"));
+ col_append_fstr(pinfo->cinfo, COL_INFO, ", Mikey: %s",
+ val_to_str_ext_const(mikey->type, &data_type_vals_ext, "Unknown"));
/* Return the amount of data this dissector was able to dissect */
return tvb_length(tvb);
@@ -1500,7 +1513,7 @@ proto_register_mikey(void)
NULL, HFILL }},
{ &hf_mikey[POS_HDR_DATA_TYPE],
{ "Data Type", "mikey.type",
- FT_UINT8, BASE_DEC, VALS(data_type_vals), 0x0,
+ FT_UINT8, BASE_DEC|BASE_EXT_STRING, &data_type_vals_ext, 0x0,
NULL, HFILL }},
{ &hf_mikey[POS_NEXT_PAYLOAD],
{ "Next Payload", "mikey.next_payload",
@@ -1765,7 +1778,7 @@ proto_register_mikey(void)
/* Error payload (ERR) */
{ &hf_mikey[POS_ERR_NO],
{ "Error no.", "mikey.err.no",
- FT_UINT8, BASE_DEC, VALS(err_vals), 0x0,
+ FT_UINT8, BASE_DEC|BASE_EXT_STRING, &err_vals_ext, 0x0,
NULL, HFILL }},
{ &hf_mikey[POS_ERR_RESERVED],
{ "Reserved", "mikey.err.reserved",
@@ -1914,10 +1927,10 @@ proto_register_mikey(void)
void
proto_reg_handoff_mikey(void)
{
- static gboolean inited = FALSE;
static dissector_handle_t mikey_handle;
- static guint mikey_tcp_port;
- static guint mikey_udp_port;
+ static guint mikey_tcp_port;
+ static guint mikey_udp_port;
+ static gboolean inited = FALSE;
if (!inited) {
mikey_handle = new_create_dissector_handle(dissect_mikey, proto_mikey);