fc00: get rid of if(tree)

Make sure that the newly added expert info will show up in the expert
info window. Expert infos should never be under if (tree).

Change-Id: I55daa693d4dc910eab38028340a934062d351e98
Reviewed-on: https://code.wireshark.org/review/18393
Reviewed-by: Michael Mann <mmann78@netscape.net>
Petri-Dish: Michael Mann <mmann78@netscape.net>
Tested-by: Petri Dish Buildbot <buildbot-no-reply@wireshark.org>
Reviewed-by: Anders Broman <a.broman58@gmail.com>
This commit is contained in:
Martin Kaiser 2016-10-22 17:38:50 +02:00 committed by Anders Broman
parent 1c7b431a75
commit 6b25798014
1 changed files with 73 additions and 74 deletions

View File

@ -144,86 +144,85 @@ dissect_cryptoauth(tvbuff_t *tvb, packet_info *pinfo, proto_tree *tree, void *da
session_state = tvb_get_ntohl(tvb, SESSION_STATE_OFF);
if (tree) {
if ((session_state > 3) && (session_state < G_MAXUINT32)) {
ti = proto_tree_add_item(tree, proto_fc00, tvb, 0, SESSION_STATE_LEN, ENC_NA);
fc00_tree = proto_item_add_subtree(ti, ett_fc00);
proto_tree_add_item(fc00_tree, hf_fc00_session_nonce, tvb,
SESSION_STATE_OFF, SESSION_STATE_LEN, ENC_BIG_ENDIAN);
payload_len = tvb_reported_length(tvb)-SESSION_STATE_LEN;
proto_tree_add_item(fc00_tree, hf_fc00_payload, tvb,
SESSION_STATE_LEN, payload_len, ENC_NA);
return SESSION_STATE_LEN;
}
ti = proto_tree_add_item(tree, proto_fc00, tvb, 0, 120, ENC_NA);
if ((session_state > 3) && (session_state < G_MAXUINT32)) {
ti = proto_tree_add_item(tree, proto_fc00, tvb, 0, SESSION_STATE_LEN, ENC_NA);
fc00_tree = proto_item_add_subtree(ti, ett_fc00);
proto_tree_add_item(fc00_tree, hf_fc00_session_nonce, tvb,
SESSION_STATE_OFF, SESSION_STATE_LEN, ENC_BIG_ENDIAN);
proto_tree_add_item(fc00_tree, hf_fc00_session_state, tvb,
SESSION_STATE_OFF, SESSION_STATE_LEN, ENC_NA);
ti = proto_tree_add_item(fc00_tree, hf_fc00_auth_challenge, tvb,
CHALLENGE_OFF, CHALLENGE_LEN, ENC_NA);
{
proto_tree *auth_tree = proto_item_add_subtree(ti, ett_fc00_auth);
proto_tree_add_item(auth_tree, hf_fc00_auth_type, tvb, CHALLENGE_OFF, 1, ENC_NA);
proto_tree_add_item(auth_tree, hf_fc00_auth_hash_code, tvb, CHALLENGE_OFF+1, 7, ENC_NA);
proto_tree_add_item(auth_tree, hf_fc00_auth_poly, tvb, CHALLENGE_OFF+8, 1, ENC_NA);
proto_tree_add_item(auth_tree, hf_fc00_auth_derivations, tvb, CHALLENGE_OFF+8, 2, ENC_NA);
proto_tree_add_item(auth_tree, hf_fc00_auth_additional, tvb, CHALLENGE_OFF+10, 2, ENC_NA);
}
proto_tree_add_item(fc00_tree, hf_fc00_random_nonce, tvb,
NONCE_OFF, NONCE_LEN, ENC_NA);
#if GLIB_CHECK_VERSION(2, 36, 0) /* sha512 support was added in glib 2.36 */
{
GChecksum *hash = g_checksum_new(G_CHECKSUM_SHA512);
gsize digest_len = g_checksum_type_get_length(G_CHECKSUM_SHA512);
proto_tree *key_tree;
guint8 *raw_key = (guint8*)wmem_alloc(wmem_packet_scope(), PUBLIC_KEY_LEN);
char *encoded_key = (char*)wmem_alloc(wmem_packet_scope(), 53);
guint8 *ip_buf = (guint8*)wmem_alloc(wmem_packet_scope(), digest_len);
tvb_memcpy(tvb, raw_key, PUBLIC_KEY_OFF, PUBLIC_KEY_LEN);
Base32_encode((guint8*)encoded_key, 53, raw_key, PUBLIC_KEY_LEN);
g_checksum_update(hash, (guchar*)raw_key, PUBLIC_KEY_LEN);
g_checksum_get_digest(hash, ip_buf, &digest_len);
g_checksum_free(hash);
hash = g_checksum_new(G_CHECKSUM_SHA512);
g_checksum_update(hash, (guchar*)ip_buf, digest_len);
g_checksum_get_digest(hash, ip_buf, &digest_len);
g_checksum_free(hash);
ti = proto_tree_add_none_format(fc00_tree, hf_fc00_public_key, tvb, PUBLIC_KEY_OFF, PUBLIC_KEY_LEN, "Public Key: %s.k", encoded_key);
key_tree = proto_item_add_subtree(ti, ett_fc00_key);
proto_tree_add_ipv6(key_tree, hf_fc00_ip_address, tvb, PUBLIC_KEY_OFF, PUBLIC_KEY_LEN, (struct e_in6_addr*)ip_buf);
}
#else
proto_tree_add_expert(fc00_tree, pinfo, &ei_fc00_chksum_unsupported, tvb, PUBLIC_KEY_OFF, PUBLIC_KEY_LEN);
#endif
proto_tree_add_item(fc00_tree, hf_fc00_authenticator, tvb,
POLY_AUTH_OFF, POLY_AUTH_LEN, ENC_NA);
proto_tree_add_item(fc00_tree, hf_fc00_temp_publicy_key, tvb,
TEMP_KEY_OFF, TEMP_KEY_LEN, ENC_NA);
payload_len = tvb_reported_length(tvb)-(TEMP_KEY_OFF+TEMP_KEY_LEN);
payload_len = tvb_reported_length(tvb)-SESSION_STATE_LEN;
proto_tree_add_item(fc00_tree, hf_fc00_payload, tvb,
CRYPTO_HEADER_LEN, payload_len, ENC_NA);
SESSION_STATE_LEN, payload_len, ENC_NA);
return SESSION_STATE_LEN;
}
ti = proto_tree_add_item(tree, proto_fc00, tvb, 0, 120, ENC_NA);
fc00_tree = proto_item_add_subtree(ti, ett_fc00);
proto_tree_add_item(fc00_tree, hf_fc00_session_state, tvb,
SESSION_STATE_OFF, SESSION_STATE_LEN, ENC_NA);
ti = proto_tree_add_item(fc00_tree, hf_fc00_auth_challenge, tvb,
CHALLENGE_OFF, CHALLENGE_LEN, ENC_NA);
{
proto_tree *auth_tree = proto_item_add_subtree(ti, ett_fc00_auth);
proto_tree_add_item(auth_tree, hf_fc00_auth_type, tvb, CHALLENGE_OFF, 1, ENC_NA);
proto_tree_add_item(auth_tree, hf_fc00_auth_hash_code, tvb, CHALLENGE_OFF+1, 7, ENC_NA);
proto_tree_add_item(auth_tree, hf_fc00_auth_poly, tvb, CHALLENGE_OFF+8, 1, ENC_NA);
proto_tree_add_item(auth_tree, hf_fc00_auth_derivations, tvb, CHALLENGE_OFF+8, 2, ENC_NA);
proto_tree_add_item(auth_tree, hf_fc00_auth_additional, tvb, CHALLENGE_OFF+10, 2, ENC_NA);
}
proto_tree_add_item(fc00_tree, hf_fc00_random_nonce, tvb,
NONCE_OFF, NONCE_LEN, ENC_NA);
#if GLIB_CHECK_VERSION(2, 36, 0) /* sha512 support was added in glib 2.36 */
if (fc00_tree)
{
GChecksum *hash = g_checksum_new(G_CHECKSUM_SHA512);
gsize digest_len = g_checksum_type_get_length(G_CHECKSUM_SHA512);
proto_tree *key_tree;
guint8 *raw_key = (guint8*)wmem_alloc(wmem_packet_scope(), PUBLIC_KEY_LEN);
char *encoded_key = (char*)wmem_alloc(wmem_packet_scope(), 53);
guint8 *ip_buf = (guint8*)wmem_alloc(wmem_packet_scope(), digest_len);
tvb_memcpy(tvb, raw_key, PUBLIC_KEY_OFF, PUBLIC_KEY_LEN);
Base32_encode((guint8*)encoded_key, 53, raw_key, PUBLIC_KEY_LEN);
g_checksum_update(hash, (guchar*)raw_key, PUBLIC_KEY_LEN);
g_checksum_get_digest(hash, ip_buf, &digest_len);
g_checksum_free(hash);
hash = g_checksum_new(G_CHECKSUM_SHA512);
g_checksum_update(hash, (guchar*)ip_buf, digest_len);
g_checksum_get_digest(hash, ip_buf, &digest_len);
g_checksum_free(hash);
ti = proto_tree_add_none_format(fc00_tree, hf_fc00_public_key, tvb, PUBLIC_KEY_OFF, PUBLIC_KEY_LEN, "Public Key: %s.k", encoded_key);
key_tree = proto_item_add_subtree(ti, ett_fc00_key);
proto_tree_add_ipv6(key_tree, hf_fc00_ip_address, tvb, PUBLIC_KEY_OFF, PUBLIC_KEY_LEN, (struct e_in6_addr*)ip_buf);
}
#else
proto_tree_add_expert(fc00_tree, pinfo, &ei_fc00_chksum_unsupported, tvb, PUBLIC_KEY_OFF, PUBLIC_KEY_LEN);
#endif
proto_tree_add_item(fc00_tree, hf_fc00_authenticator, tvb,
POLY_AUTH_OFF, POLY_AUTH_LEN, ENC_NA);
proto_tree_add_item(fc00_tree, hf_fc00_temp_publicy_key, tvb,
TEMP_KEY_OFF, TEMP_KEY_LEN, ENC_NA);
payload_len = tvb_reported_length(tvb)-(TEMP_KEY_OFF+TEMP_KEY_LEN);
proto_tree_add_item(fc00_tree, hf_fc00_payload, tvb,
CRYPTO_HEADER_LEN, payload_len, ENC_NA);
return tvb_captured_length(tvb);
}