aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
-rw-r--r--asn1/h235/h235.cnf10
-rw-r--r--epan/ftypes/ftypes.h7
-rw-r--r--packet-h225.c4
-rw-r--r--packet-h235.c302
-rw-r--r--packet-h235.h4
-rw-r--r--packet-per.c196
-rw-r--r--tools/asn2eth.py254
7 files changed, 440 insertions, 337 deletions
diff --git a/asn1/h235/h235.cnf b/asn1/h235/h235.cnf
index a9da706c3e..d591161047 100644
--- a/asn1/h235/h235.cnf
+++ b/asn1/h235/h235.cnf
@@ -2,7 +2,7 @@
# H235-SECURITY-MESSAGES conformation file
# 2004 Tomas Kukosa
-# $Id: h235.cnf,v 1.3 2004/06/04 11:28:04 sahlberg Exp $
+# $Id: h235.cnf,v 1.4 2004/06/24 21:50:04 sahlberg Exp $
#.EXPORTS
@@ -33,6 +33,14 @@ CryptoToken/cryptoEncryptedToken/token encryptedToken
#.END
+#.TYPE_ATTR
+TimeStamp TYPE = FT_ABSOLUTE_TIME DISPLAY = BASE_NONE
+#.END
+
+#.FIELD_ATTR
+NonStandardParameter/data TYPE = FT_UINT32 DISPLAY = BASE_DEC
+#.END
+
#.FN_HDR SIGNEDxxx
proto_tree_add_item_hidden(tree, proto_h235, tvb, offset, 0, FALSE);
#.END
diff --git a/epan/ftypes/ftypes.h b/epan/ftypes/ftypes.h
index 01ba4e20f2..90cb5020c7 100644
--- a/epan/ftypes/ftypes.h
+++ b/epan/ftypes/ftypes.h
@@ -1,7 +1,7 @@
/* ftypes.h
* Definitions for field types
*
- * $Id: ftypes.h,v 1.32 2004/05/09 10:03:40 guy Exp $
+ * $Id: ftypes.h,v 1.33 2004/06/24 21:50:05 sahlberg Exp $
*
* Ethereal - Network traffic analyzer
* By Gerald Combs <gerald@ethereal.com>
@@ -63,6 +63,11 @@ enum ftenum {
FT_NUM_TYPES /* last item number plus one */
};
+#define IS_FT_INT(ft) ((ft)==FT_INT8||(ft)==FT_INT16||(ft)==FT_INT24||(ft)==FT_INT32)
+#define IS_FT_UINT(ft) ((ft)==FT_UINT8||(ft)==FT_UINT16||(ft)==FT_UINT24||(ft)==FT_UINT32||(ft)==FT_FRAMENUM)
+#define IS_FT_TIME(ft) ((ft)==FT_ABSOLUTE_TIME||(ft)==FT_RELATIVE_TIME)
+#define IS_FT_STRING(ft) ((ft)==FT_STRING||(ft)==FT_STRINGZ)
+
typedef enum ftenum ftenum_t;
typedef struct _ftype_t ftype_t;
diff --git a/packet-h225.c b/packet-h225.c
index 006257c930..082e52d76f 100644
--- a/packet-h225.c
+++ b/packet-h225.c
@@ -4,7 +4,7 @@
*
* Maintained by Andreas Sikkema (h323@ramdyne.nl)
*
- * $Id: packet-h225.c,v 1.46 2004/06/24 20:58:46 sahlberg Exp $
+ * $Id: packet-h225.c,v 1.47 2004/06/24 21:50:03 sahlberg Exp $
*
* Ethereal - Network traffic analyzer
* By Gerald Combs <gerald@ethereal.com>
@@ -10166,7 +10166,7 @@ proto_register_h225(void)
"CryptoH323Token/cryptoEPPwdHash", HFILL }},
{ &hf_h225_timeStamp,
{ "timeStamp", "h225.timeStamp",
- FT_UINT32, BASE_DEC, NULL, 0,
+ FT_ABSOLUTE_TIME, BASE_NONE, NULL, 0,
"", HFILL }},
{ &hf_h225_token,
{ "token", "h225.token",
diff --git a/packet-h235.c b/packet-h235.c
index c6f9cfbde5..288dbb9f02 100644
--- a/packet-h235.c
+++ b/packet-h235.c
@@ -4,13 +4,13 @@
/* ../../tools/asn2eth.py -X -p h235 -c h235.cnf -s packet-h235-template H235-SECURITY-MESSAGES.asn */
/* Input file: packet-h235-template.c */
-/* Include files: packet-h235-hf.c, packet-h235-ett.c, packet-h235-fn.c, packet-h235-hfarr.c, packet-h235-ettarr.c */
+/* Include files: packet-h235-hf.c, packet-h235-ett.c, packet-h235-fn.c, packet-h235-hfarr.c, packet-h235-ettarr.c, packet-h235-val.h */
/* packet-h235.c
* Routines for H.235 packet dissection
* 2004 Tomas Kukosa
*
- * $Id: packet-h235.c,v 1.5 2004/06/04 11:30:35 sahlberg Exp $
+ * $Id: packet-h235.c,v 1.6 2004/06/24 21:50:04 sahlberg Exp $
*
* Ethereal - Network traffic analyzer
* By Gerald Combs <gerald@ethereal.com>
@@ -176,7 +176,7 @@ PER_NOT_DECODED_YET("ToBeSigned");
/* packet-h235-fn.c */
/* ../../tools/asn2eth.py -X -p h235 -c h235.cnf -s packet-h235-template H235-SECURITY-MESSAGES.asn */
-static int dissect_hf_h235_toBeSigned(tvbuff_t *tvb, int offset, packet_info *pinfo, proto_tree *tree) {
+static int dissect_toBeSigned(tvbuff_t *tvb, int offset, packet_info *pinfo, proto_tree *tree) {
return dissect_xxx_ToBeSigned(tvb, offset, pinfo, tree, hf_h235_toBeSigned);
}
@@ -188,7 +188,7 @@ dissect_h235_ChallengeString(tvbuff_t *tvb, int offset, packet_info *pinfo _U_,
return offset;
}
-static int dissect_hf_h235_challenge(tvbuff_t *tvb, int offset, packet_info *pinfo, proto_tree *tree) {
+static int dissect_challenge(tvbuff_t *tvb, int offset, packet_info *pinfo, proto_tree *tree) {
return dissect_h235_ChallengeString(tvb, offset, pinfo, tree, hf_h235_challenge);
}
@@ -201,7 +201,7 @@ dissect_h235_TimeStamp(tvbuff_t *tvb, int offset, packet_info *pinfo _U_, proto_
return offset;
}
-static int dissect_hf_h235_timeStamp(tvbuff_t *tvb, int offset, packet_info *pinfo, proto_tree *tree) {
+static int dissect_timeStamp(tvbuff_t *tvb, int offset, packet_info *pinfo, proto_tree *tree) {
return dissect_h235_TimeStamp(tvb, offset, pinfo, tree, hf_h235_timeStamp);
}
@@ -214,7 +214,7 @@ dissect_h235_RandomVal(tvbuff_t *tvb, int offset, packet_info *pinfo _U_, proto_
return offset;
}
-static int dissect_hf_h235_random(tvbuff_t *tvb, int offset, packet_info *pinfo, proto_tree *tree) {
+static int dissect_random(tvbuff_t *tvb, int offset, packet_info *pinfo, proto_tree *tree) {
return dissect_h235_RandomVal(tvb, offset, pinfo, tree, hf_h235_random);
}
@@ -226,7 +226,7 @@ dissect_h235_Password(tvbuff_t *tvb, int offset, packet_info *pinfo _U_, proto_t
return offset;
}
-static int dissect_hf_h235_password(tvbuff_t *tvb, int offset, packet_info *pinfo, proto_tree *tree) {
+static int dissect_password(tvbuff_t *tvb, int offset, packet_info *pinfo, proto_tree *tree) {
return dissect_h235_Password(tvb, offset, pinfo, tree, hf_h235_password);
}
@@ -238,10 +238,10 @@ dissect_h235_Identifier(tvbuff_t *tvb, int offset, packet_info *pinfo _U_, proto
return offset;
}
-static int dissect_hf_h235_generalID(tvbuff_t *tvb, int offset, packet_info *pinfo, proto_tree *tree) {
+static int dissect_generalID(tvbuff_t *tvb, int offset, packet_info *pinfo, proto_tree *tree) {
return dissect_h235_Identifier(tvb, offset, pinfo, tree, hf_h235_generalID);
}
-static int dissect_hf_h235_sendersID(tvbuff_t *tvb, int offset, packet_info *pinfo, proto_tree *tree) {
+static int dissect_sendersID(tvbuff_t *tvb, int offset, packet_info *pinfo, proto_tree *tree) {
return dissect_h235_Identifier(tvb, offset, pinfo, tree, hf_h235_sendersID);
}
@@ -253,7 +253,7 @@ dissect_h235_KeyMaterial(tvbuff_t *tvb, int offset, packet_info *pinfo _U_, prot
return offset;
}
-static int dissect_hf_h235_secureChannel(tvbuff_t *tvb, int offset, packet_info *pinfo, proto_tree *tree) {
+static int dissect_secureChannel(tvbuff_t *tvb, int offset, packet_info *pinfo, proto_tree *tree) {
return dissect_h235_KeyMaterial(tvb, offset, pinfo, tree, hf_h235_secureChannel);
}
@@ -265,19 +265,19 @@ dissect_h235_OBJECT_IDENTIFIER(tvbuff_t *tvb, int offset, packet_info *pinfo _U_
return offset;
}
-static int dissect_hf_h235_nonStandardIdentifier(tvbuff_t *tvb, int offset, packet_info *pinfo, proto_tree *tree) {
+static int dissect_nonStandardIdentifier(tvbuff_t *tvb, int offset, packet_info *pinfo, proto_tree *tree) {
return dissect_h235_OBJECT_IDENTIFIER(tvb, offset, pinfo, tree, hf_h235_nonStandardIdentifier);
}
-static int dissect_hf_h235_type(tvbuff_t *tvb, int offset, packet_info *pinfo, proto_tree *tree) {
+static int dissect_type(tvbuff_t *tvb, int offset, packet_info *pinfo, proto_tree *tree) {
return dissect_h235_OBJECT_IDENTIFIER(tvb, offset, pinfo, tree, hf_h235_type);
}
-static int dissect_hf_h235_tokenOID(tvbuff_t *tvb, int offset, packet_info *pinfo, proto_tree *tree) {
+static int dissect_tokenOID(tvbuff_t *tvb, int offset, packet_info *pinfo, proto_tree *tree) {
return dissect_h235_OBJECT_IDENTIFIER(tvb, offset, pinfo, tree, hf_h235_tokenOID);
}
-static int dissect_hf_h235_algorithmOID(tvbuff_t *tvb, int offset, packet_info *pinfo, proto_tree *tree) {
+static int dissect_algorithmOID(tvbuff_t *tvb, int offset, packet_info *pinfo, proto_tree *tree) {
return dissect_h235_OBJECT_IDENTIFIER(tvb, offset, pinfo, tree, hf_h235_algorithmOID);
}
-static int dissect_hf_h235_keyDerivationOID(tvbuff_t *tvb, int offset, packet_info *pinfo, proto_tree *tree) {
+static int dissect_keyDerivationOID(tvbuff_t *tvb, int offset, packet_info *pinfo, proto_tree *tree) {
return dissect_h235_OBJECT_IDENTIFIER(tvb, offset, pinfo, tree, hf_h235_keyDerivationOID);
}
@@ -290,34 +290,34 @@ dissect_h235_OCTET_STRING(tvbuff_t *tvb, int offset, packet_info *pinfo _U_, pro
return offset;
}
-static int dissect_hf_h235_data(tvbuff_t *tvb, int offset, packet_info *pinfo, proto_tree *tree) {
+static int dissect_data(tvbuff_t *tvb, int offset, packet_info *pinfo, proto_tree *tree) {
return dissect_h235_OCTET_STRING(tvb, offset, pinfo, tree, hf_h235_data);
}
-static int dissect_hf_h235_certificatedata(tvbuff_t *tvb, int offset, packet_info *pinfo, proto_tree *tree) {
+static int dissect_certificatedata(tvbuff_t *tvb, int offset, packet_info *pinfo, proto_tree *tree) {
return dissect_h235_OCTET_STRING(tvb, offset, pinfo, tree, hf_h235_certificatedata);
}
-static int dissect_hf_h235_encryptedData(tvbuff_t *tvb, int offset, packet_info *pinfo, proto_tree *tree) {
+static int dissect_encryptedData(tvbuff_t *tvb, int offset, packet_info *pinfo, proto_tree *tree) {
return dissect_h235_OCTET_STRING(tvb, offset, pinfo, tree, hf_h235_encryptedData);
}
-static int dissect_hf_h235_iv(tvbuff_t *tvb, int offset, packet_info *pinfo, proto_tree *tree) {
+static int dissect_iv(tvbuff_t *tvb, int offset, packet_info *pinfo, proto_tree *tree) {
return dissect_h235_OCTET_STRING(tvb, offset, pinfo, tree, hf_h235_iv);
}
-static int dissect_hf_h235_clearSalt(tvbuff_t *tvb, int offset, packet_info *pinfo, proto_tree *tree) {
+static int dissect_clearSalt(tvbuff_t *tvb, int offset, packet_info *pinfo, proto_tree *tree) {
return dissect_h235_OCTET_STRING(tvb, offset, pinfo, tree, hf_h235_clearSalt);
}
-static int dissect_hf_h235_encryptedSessionKey(tvbuff_t *tvb, int offset, packet_info *pinfo, proto_tree *tree) {
+static int dissect_encryptedSessionKey(tvbuff_t *tvb, int offset, packet_info *pinfo, proto_tree *tree) {
return dissect_h235_OCTET_STRING(tvb, offset, pinfo, tree, hf_h235_encryptedSessionKey);
}
-static int dissect_hf_h235_encryptedSaltingKey(tvbuff_t *tvb, int offset, packet_info *pinfo, proto_tree *tree) {
+static int dissect_encryptedSaltingKey(tvbuff_t *tvb, int offset, packet_info *pinfo, proto_tree *tree) {
return dissect_h235_OCTET_STRING(tvb, offset, pinfo, tree, hf_h235_encryptedSaltingKey);
}
-static int dissect_hf_h235_clearSaltingKey(tvbuff_t *tvb, int offset, packet_info *pinfo, proto_tree *tree) {
+static int dissect_clearSaltingKey(tvbuff_t *tvb, int offset, packet_info *pinfo, proto_tree *tree) {
return dissect_h235_OCTET_STRING(tvb, offset, pinfo, tree, hf_h235_clearSaltingKey);
}
static per_sequence_t NonStandardParameter_sequence[] = {
- { "nonStandardIdentifier" , ASN1_NO_EXTENSIONS , ASN1_NOT_OPTIONAL, dissect_hf_h235_nonStandardIdentifier },
- { "data" , ASN1_NO_EXTENSIONS , ASN1_NOT_OPTIONAL, dissect_hf_h235_data },
+ { "nonStandardIdentifier" , ASN1_NO_EXTENSIONS , ASN1_NOT_OPTIONAL, dissect_nonStandardIdentifier },
+ { "data" , ASN1_NO_EXTENSIONS , ASN1_NOT_OPTIONAL, dissect_data },
{ NULL, 0, 0, NULL }
};
@@ -328,7 +328,7 @@ dissect_h235_NonStandardParameter(tvbuff_t *tvb, int offset, packet_info *pinfo
return offset;
}
-static int dissect_hf_h235_nonStandard(tvbuff_t *tvb, int offset, packet_info *pinfo, proto_tree *tree) {
+static int dissect_nonStandard(tvbuff_t *tvb, int offset, packet_info *pinfo, proto_tree *tree) {
return dissect_h235_NonStandardParameter(tvb, offset, pinfo, tree, hf_h235_nonStandard);
}
@@ -340,20 +340,20 @@ dissect_h235_BIT_STRING_SIZE_0_2048(tvbuff_t *tvb, int offset, packet_info *pinf
return offset;
}
-static int dissect_hf_h235_halfkey(tvbuff_t *tvb, int offset, packet_info *pinfo, proto_tree *tree) {
+static int dissect_halfkey(tvbuff_t *tvb, int offset, packet_info *pinfo, proto_tree *tree) {
return dissect_h235_BIT_STRING_SIZE_0_2048(tvb, offset, pinfo, tree, hf_h235_halfkey);
}
-static int dissect_hf_h235_modSize(tvbuff_t *tvb, int offset, packet_info *pinfo, proto_tree *tree) {
+static int dissect_modSize(tvbuff_t *tvb, int offset, packet_info *pinfo, proto_tree *tree) {
return dissect_h235_BIT_STRING_SIZE_0_2048(tvb, offset, pinfo, tree, hf_h235_modSize);
}
-static int dissect_hf_h235_generator(tvbuff_t *tvb, int offset, packet_info *pinfo, proto_tree *tree) {
+static int dissect_generator(tvbuff_t *tvb, int offset, packet_info *pinfo, proto_tree *tree) {
return dissect_h235_BIT_STRING_SIZE_0_2048(tvb, offset, pinfo, tree, hf_h235_generator);
}
static per_sequence_t DHset_sequence[] = {
- { "halfkey" , ASN1_EXTENSION_ROOT , ASN1_NOT_OPTIONAL, dissect_hf_h235_halfkey },
- { "modSize" , ASN1_EXTENSION_ROOT , ASN1_NOT_OPTIONAL, dissect_hf_h235_modSize },
- { "generator" , ASN1_EXTENSION_ROOT , ASN1_NOT_OPTIONAL, dissect_hf_h235_generator },
+ { "halfkey" , ASN1_EXTENSION_ROOT , ASN1_NOT_OPTIONAL, dissect_halfkey },
+ { "modSize" , ASN1_EXTENSION_ROOT , ASN1_NOT_OPTIONAL, dissect_modSize },
+ { "generator" , ASN1_EXTENSION_ROOT , ASN1_NOT_OPTIONAL, dissect_generator },
{ NULL, 0, 0, NULL }
};
@@ -364,7 +364,7 @@ dissect_h235_DHset(tvbuff_t *tvb, int offset, packet_info *pinfo _U_, proto_tree
return offset;
}
-static int dissect_hf_h235_dhkey(tvbuff_t *tvb, int offset, packet_info *pinfo, proto_tree *tree) {
+static int dissect_dhkey(tvbuff_t *tvb, int offset, packet_info *pinfo, proto_tree *tree) {
return dissect_h235_DHset(tvb, offset, pinfo, tree, hf_h235_dhkey);
}
@@ -376,28 +376,28 @@ dissect_h235_BIT_STRING_SIZE_0_511(tvbuff_t *tvb, int offset, packet_info *pinfo
return offset;
}
-static int dissect_hf_h235_x(tvbuff_t *tvb, int offset, packet_info *pinfo, proto_tree *tree) {
+static int dissect_x(tvbuff_t *tvb, int offset, packet_info *pinfo, proto_tree *tree) {
return dissect_h235_BIT_STRING_SIZE_0_511(tvb, offset, pinfo, tree, hf_h235_x);
}
-static int dissect_hf_h235_y(tvbuff_t *tvb, int offset, packet_info *pinfo, proto_tree *tree) {
+static int dissect_y(tvbuff_t *tvb, int offset, packet_info *pinfo, proto_tree *tree) {
return dissect_h235_BIT_STRING_SIZE_0_511(tvb, offset, pinfo, tree, hf_h235_y);
}
-static int dissect_hf_h235_modulus(tvbuff_t *tvb, int offset, packet_info *pinfo, proto_tree *tree) {
+static int dissect_modulus(tvbuff_t *tvb, int offset, packet_info *pinfo, proto_tree *tree) {
return dissect_h235_BIT_STRING_SIZE_0_511(tvb, offset, pinfo, tree, hf_h235_modulus);
}
-static int dissect_hf_h235_weierstrassA(tvbuff_t *tvb, int offset, packet_info *pinfo, proto_tree *tree) {
+static int dissect_weierstrassA(tvbuff_t *tvb, int offset, packet_info *pinfo, proto_tree *tree) {
return dissect_h235_BIT_STRING_SIZE_0_511(tvb, offset, pinfo, tree, hf_h235_weierstrassA);
}
-static int dissect_hf_h235_weierstrassB(tvbuff_t *tvb, int offset, packet_info *pinfo, proto_tree *tree) {
+static int dissect_weierstrassB(tvbuff_t *tvb, int offset, packet_info *pinfo, proto_tree *tree) {
return dissect_h235_BIT_STRING_SIZE_0_511(tvb, offset, pinfo, tree, hf_h235_weierstrassB);
}
-static int dissect_hf_h235_fieldSize(tvbuff_t *tvb, int offset, packet_info *pinfo, proto_tree *tree) {
+static int dissect_fieldSize(tvbuff_t *tvb, int offset, packet_info *pinfo, proto_tree *tree) {
return dissect_h235_BIT_STRING_SIZE_0_511(tvb, offset, pinfo, tree, hf_h235_fieldSize);
}
static per_sequence_t ECpoint_sequence[] = {
- { "x" , ASN1_EXTENSION_ROOT , ASN1_OPTIONAL , dissect_hf_h235_x },
- { "y" , ASN1_EXTENSION_ROOT , ASN1_OPTIONAL , dissect_hf_h235_y },
+ { "x" , ASN1_EXTENSION_ROOT , ASN1_OPTIONAL , dissect_x },
+ { "y" , ASN1_EXTENSION_ROOT , ASN1_OPTIONAL , dissect_y },
{ NULL, 0, 0, NULL }
};
@@ -408,19 +408,19 @@ dissect_h235_ECpoint(tvbuff_t *tvb, int offset, packet_info *pinfo _U_, proto_tr
return offset;
}
-static int dissect_hf_h235_public_key(tvbuff_t *tvb, int offset, packet_info *pinfo, proto_tree *tree) {
+static int dissect_public_key(tvbuff_t *tvb, int offset, packet_info *pinfo, proto_tree *tree) {
return dissect_h235_ECpoint(tvb, offset, pinfo, tree, hf_h235_public_key);
}
-static int dissect_hf_h235_base(tvbuff_t *tvb, int offset, packet_info *pinfo, proto_tree *tree) {
+static int dissect_base(tvbuff_t *tvb, int offset, packet_info *pinfo, proto_tree *tree) {
return dissect_h235_ECpoint(tvb, offset, pinfo, tree, hf_h235_base);
}
static per_sequence_t T_eckasdhp_sequence[] = {
- { "public-key" , ASN1_NO_EXTENSIONS , ASN1_NOT_OPTIONAL, dissect_hf_h235_public_key },
- { "modulus" , ASN1_NO_EXTENSIONS , ASN1_NOT_OPTIONAL, dissect_hf_h235_modulus },
- { "base" , ASN1_NO_EXTENSIONS , ASN1_NOT_OPTIONAL, dissect_hf_h235_base },
- { "weierstrassA" , ASN1_NO_EXTENSIONS , ASN1_NOT_OPTIONAL, dissect_hf_h235_weierstrassA },
- { "weierstrassB" , ASN1_NO_EXTENSIONS , ASN1_NOT_OPTIONAL, dissect_hf_h235_weierstrassB },
+ { "public-key" , ASN1_NO_EXTENSIONS , ASN1_NOT_OPTIONAL, dissect_public_key },
+ { "modulus" , ASN1_NO_EXTENSIONS , ASN1_NOT_OPTIONAL, dissect_modulus },
+ { "base" , ASN1_NO_EXTENSIONS , ASN1_NOT_OPTIONAL, dissect_base },
+ { "weierstrassA" , ASN1_NO_EXTENSIONS , ASN1_NOT_OPTIONAL, dissect_weierstrassA },
+ { "weierstrassB" , ASN1_NO_EXTENSIONS , ASN1_NOT_OPTIONAL, dissect_weierstrassB },
{ NULL, 0, 0, NULL }
};
@@ -431,16 +431,16 @@ dissect_h235_T_eckasdhp(tvbuff_t *tvb, int offset, packet_info *pinfo _U_, proto
return offset;
}
-static int dissect_hf_h235_eckasdhp(tvbuff_t *tvb, int offset, packet_info *pinfo, proto_tree *tree) {
+static int dissect_eckasdhp(tvbuff_t *tvb, int offset, packet_info *pinfo, proto_tree *tree) {
return dissect_h235_T_eckasdhp(tvb, offset, pinfo, tree, hf_h235_eckasdhp);
}
static per_sequence_t T_eckasdh2_sequence[] = {
- { "public-key" , ASN1_NO_EXTENSIONS , ASN1_NOT_OPTIONAL, dissect_hf_h235_public_key },
- { "fieldSize" , ASN1_NO_EXTENSIONS , ASN1_NOT_OPTIONAL, dissect_hf_h235_fieldSize },
- { "base" , ASN1_NO_EXTENSIONS , ASN1_NOT_OPTIONAL, dissect_hf_h235_base },
- { "weierstrassA" , ASN1_NO_EXTENSIONS , ASN1_NOT_OPTIONAL, dissect_hf_h235_weierstrassA },
- { "weierstrassB" , ASN1_NO_EXTENSIONS , ASN1_NOT_OPTIONAL, dissect_hf_h235_weierstrassB },
+ { "public-key" , ASN1_NO_EXTENSIONS , ASN1_NOT_OPTIONAL, dissect_public_key },
+ { "fieldSize" , ASN1_NO_EXTENSIONS , ASN1_NOT_OPTIONAL, dissect_fieldSize },
+ { "base" , ASN1_NO_EXTENSIONS , ASN1_NOT_OPTIONAL, dissect_base },
+ { "weierstrassA" , ASN1_NO_EXTENSIONS , ASN1_NOT_OPTIONAL, dissect_weierstrassA },
+ { "weierstrassB" , ASN1_NO_EXTENSIONS , ASN1_NOT_OPTIONAL, dissect_weierstrassB },
{ NULL, 0, 0, NULL }
};
@@ -451,7 +451,7 @@ dissect_h235_T_eckasdh2(tvbuff_t *tvb, int offset, packet_info *pinfo _U_, proto
return offset;
}
-static int dissect_hf_h235_eckasdh2(tvbuff_t *tvb, int offset, packet_info *pinfo, proto_tree *tree) {
+static int dissect_eckasdh2(tvbuff_t *tvb, int offset, packet_info *pinfo, proto_tree *tree) {
return dissect_h235_T_eckasdh2(tvb, offset, pinfo, tree, hf_h235_eckasdh2);
}
@@ -463,8 +463,8 @@ static const value_string ECKASDH_vals[] = {
};
static per_choice_t ECKASDH_choice[] = {
- { 0, "eckasdhp" , ASN1_EXTENSION_ROOT , dissect_hf_h235_eckasdhp },
- { 1, "eckasdh2" , ASN1_EXTENSION_ROOT , dissect_hf_h235_eckasdh2 },
+ { 0, "eckasdhp" , ASN1_EXTENSION_ROOT , dissect_eckasdhp },
+ { 1, "eckasdh2" , ASN1_EXTENSION_ROOT , dissect_eckasdh2 },
{ 0, NULL, 0, NULL }
};
@@ -476,13 +476,13 @@ dissect_h235_ECKASDH(tvbuff_t *tvb, int offset, packet_info *pinfo _U_, proto_tr
return offset;
}
-static int dissect_hf_h235_eckasdhkey(tvbuff_t *tvb, int offset, packet_info *pinfo, proto_tree *tree) {
+static int dissect_eckasdhkey(tvbuff_t *tvb, int offset, packet_info *pinfo, proto_tree *tree) {
return dissect_h235_ECKASDH(tvb, offset, pinfo, tree, hf_h235_eckasdhkey);
}
static per_sequence_t TypedCertificate_sequence[] = {
- { "type" , ASN1_EXTENSION_ROOT , ASN1_NOT_OPTIONAL, dissect_hf_h235_type },
- { "certificate" , ASN1_EXTENSION_ROOT , ASN1_NOT_OPTIONAL, dissect_hf_h235_certificatedata },
+ { "type" , ASN1_EXTENSION_ROOT , ASN1_NOT_OPTIONAL, dissect_type },
+ { "certificate" , ASN1_EXTENSION_ROOT , ASN1_NOT_OPTIONAL, dissect_certificatedata },
{ NULL, 0, 0, NULL }
};
@@ -493,7 +493,7 @@ dissect_h235_TypedCertificate(tvbuff_t *tvb, int offset, packet_info *pinfo _U_,
return offset;
}
-static int dissect_hf_h235_certificate(tvbuff_t *tvb, int offset, packet_info *pinfo, proto_tree *tree) {
+static int dissect_certificate(tvbuff_t *tvb, int offset, packet_info *pinfo, proto_tree *tree) {
return dissect_h235_TypedCertificate(tvb, offset, pinfo, tree, hf_h235_certificate);
}
@@ -507,28 +507,28 @@ dissect_h235_NULL(tvbuff_t *tvb, int offset, packet_info *pinfo _U_, proto_tree
return offset;
}
-static int dissect_hf_h235_default(tvbuff_t *tvb, int offset, packet_info *pinfo, proto_tree *tree) {
+static int dissect_default(tvbuff_t *tvb, int offset, packet_info *pinfo, proto_tree *tree) {
return dissect_h235_NULL(tvb, offset, pinfo, tree, hf_h235_default);
}
-static int dissect_hf_h235_radius(tvbuff_t *tvb, int offset, packet_info *pinfo, proto_tree *tree) {
+static int dissect_radius(tvbuff_t *tvb, int offset, packet_info *pinfo, proto_tree *tree) {
return dissect_h235_NULL(tvb, offset, pinfo, tree, hf_h235_radius);
}
-static int dissect_hf_h235_dhExch(tvbuff_t *tvb, int offset, packet_info *pinfo, proto_tree *tree) {
+static int dissect_dhExch(tvbuff_t *tvb, int offset, packet_info *pinfo, proto_tree *tree) {
return dissect_h235_NULL(tvb, offset, pinfo, tree, hf_h235_dhExch);
}
-static int dissect_hf_h235_pwdSymEnc(tvbuff_t *tvb, int offset, packet_info *pinfo, proto_tree *tree) {
+static int dissect_pwdSymEnc(tvbuff_t *tvb, int offset, packet_info *pinfo, proto_tree *tree) {
return dissect_h235_NULL(tvb, offset, pinfo, tree, hf_h235_pwdSymEnc);
}
-static int dissect_hf_h235_pwdHash(tvbuff_t *tvb, int offset, packet_info *pinfo, proto_tree *tree) {
+static int dissect_pwdHash(tvbuff_t *tvb, int offset, packet_info *pinfo, proto_tree *tree) {
return dissect_h235_NULL(tvb, offset, pinfo, tree, hf_h235_pwdHash);
}
-static int dissect_hf_h235_certSign(tvbuff_t *tvb, int offset, packet_info *pinfo, proto_tree *tree) {
+static int dissect_certSign(tvbuff_t *tvb, int offset, packet_info *pinfo, proto_tree *tree) {
return dissect_h235_NULL(tvb, offset, pinfo, tree, hf_h235_certSign);
}
-static int dissect_hf_h235_ipsec(tvbuff_t *tvb, int offset, packet_info *pinfo, proto_tree *tree) {
+static int dissect_ipsec(tvbuff_t *tvb, int offset, packet_info *pinfo, proto_tree *tree) {
return dissect_h235_NULL(tvb, offset, pinfo, tree, hf_h235_ipsec);
}
-static int dissect_hf_h235_tls(tvbuff_t *tvb, int offset, packet_info *pinfo, proto_tree *tree) {
+static int dissect_tls(tvbuff_t *tvb, int offset, packet_info *pinfo, proto_tree *tree) {
return dissect_h235_NULL(tvb, offset, pinfo, tree, hf_h235_tls);
}
@@ -540,8 +540,8 @@ static const value_string AuthenticationBES_vals[] = {
};
static per_choice_t AuthenticationBES_choice[] = {
- { 0, "default" , ASN1_EXTENSION_ROOT , dissect_hf_h235_default },
- { 1, "radius" , ASN1_EXTENSION_ROOT , dissect_hf_h235_radius },
+ { 0, "default" , ASN1_EXTENSION_ROOT , dissect_default },
+ { 1, "radius" , ASN1_EXTENSION_ROOT , dissect_radius },
{ 0, NULL, 0, NULL }
};
@@ -553,7 +553,7 @@ dissect_h235_AuthenticationBES(tvbuff_t *tvb, int offset, packet_info *pinfo _U_
return offset;
}
-static int dissect_hf_h235_authenticationBES(tvbuff_t *tvb, int offset, packet_info *pinfo, proto_tree *tree) {
+static int dissect_authenticationBES(tvbuff_t *tvb, int offset, packet_info *pinfo, proto_tree *tree) {
return dissect_h235_AuthenticationBES(tvb, offset, pinfo, tree, hf_h235_authenticationBES);
}
@@ -571,14 +571,14 @@ const value_string AuthenticationMechanism_vals[] = {
};
static per_choice_t AuthenticationMechanism_choice[] = {
- { 0, "dhExch" , ASN1_EXTENSION_ROOT , dissect_hf_h235_dhExch },
- { 1, "pwdSymEnc" , ASN1_EXTENSION_ROOT , dissect_hf_h235_pwdSymEnc },
- { 2, "pwdHash" , ASN1_EXTENSION_ROOT , dissect_hf_h235_pwdHash },
- { 3, "certSign" , ASN1_EXTENSION_ROOT , dissect_hf_h235_certSign },
- { 4, "ipsec" , ASN1_EXTENSION_ROOT , dissect_hf_h235_ipsec },
- { 5, "tls" , ASN1_EXTENSION_ROOT , dissect_hf_h235_tls },
- { 6, "nonStandard" , ASN1_EXTENSION_ROOT , dissect_hf_h235_nonStandard },
- { 7, "authenticationBES" , ASN1_NOT_EXTENSION_ROOT, dissect_hf_h235_authenticationBES },
+ { 0, "dhExch" , ASN1_EXTENSION_ROOT , dissect_dhExch },
+ { 1, "pwdSymEnc" , ASN1_EXTENSION_ROOT , dissect_pwdSymEnc },
+ { 2, "pwdHash" , ASN1_EXTENSION_ROOT , dissect_pwdHash },
+ { 3, "certSign" , ASN1_EXTENSION_ROOT , dissect_certSign },
+ { 4, "ipsec" , ASN1_EXTENSION_ROOT , dissect_ipsec },
+ { 5, "tls" , ASN1_EXTENSION_ROOT , dissect_tls },
+ { 6, "nonStandard" , ASN1_EXTENSION_ROOT , dissect_nonStandard },
+ { 7, "authenticationBES" , ASN1_NOT_EXTENSION_ROOT, dissect_authenticationBES },
{ 0, NULL, 0, NULL }
};
@@ -600,7 +600,7 @@ dissect_h235_INTEGER(tvbuff_t *tvb, int offset, packet_info *pinfo _U_, proto_tr
return offset;
}
-static int dissect_hf_h235_ranInt(tvbuff_t *tvb, int offset, packet_info *pinfo, proto_tree *tree) {
+static int dissect_ranInt(tvbuff_t *tvb, int offset, packet_info *pinfo, proto_tree *tree) {
return dissect_h235_INTEGER(tvb, offset, pinfo, tree, hf_h235_ranInt);
}
@@ -613,7 +613,7 @@ dissect_h235_IV8(tvbuff_t *tvb, int offset, packet_info *pinfo _U_, proto_tree *
return offset;
}
-static int dissect_hf_h235_iv8(tvbuff_t *tvb, int offset, packet_info *pinfo, proto_tree *tree) {
+static int dissect_iv8(tvbuff_t *tvb, int offset, packet_info *pinfo, proto_tree *tree) {
return dissect_h235_IV8(tvb, offset, pinfo, tree, hf_h235_iv8);
}
@@ -626,16 +626,16 @@ dissect_h235_IV16(tvbuff_t *tvb, int offset, packet_info *pinfo _U_, proto_tree
return offset;
}
-static int dissect_hf_h235_iv16(tvbuff_t *tvb, int offset, packet_info *pinfo, proto_tree *tree) {
+static int dissect_iv16(tvbuff_t *tvb, int offset, packet_info *pinfo, proto_tree *tree) {
return dissect_h235_IV16(tvb, offset, pinfo, tree, hf_h235_iv16);
}
static per_sequence_t Params_sequence[] = {
- { "ranInt" , ASN1_EXTENSION_ROOT , ASN1_OPTIONAL , dissect_hf_h235_ranInt },
- { "iv8" , ASN1_EXTENSION_ROOT , ASN1_OPTIONAL , dissect_hf_h235_iv8 },
- { "iv16" , ASN1_NOT_EXTENSION_ROOT, ASN1_OPTIONAL , dissect_hf_h235_iv16 },
- { "iv" , ASN1_NOT_EXTENSION_ROOT, ASN1_OPTIONAL , dissect_hf_h235_iv },
- { "clearSalt" , ASN1_NOT_EXTENSION_ROOT, ASN1_OPTIONAL , dissect_hf_h235_clearSalt },
+ { "ranInt" , ASN1_EXTENSION_ROOT , ASN1_OPTIONAL , dissect_ranInt },
+ { "iv8" , ASN1_EXTENSION_ROOT , ASN1_OPTIONAL , dissect_iv8 },
+ { "iv16" , ASN1_NOT_EXTENSION_ROOT, ASN1_OPTIONAL , dissect_iv16 },
+ { "iv" , ASN1_NOT_EXTENSION_ROOT, ASN1_OPTIONAL , dissect_iv },
+ { "clearSalt" , ASN1_NOT_EXTENSION_ROOT, ASN1_OPTIONAL , dissect_clearSalt },
{ NULL, 0, 0, NULL }
};
@@ -646,17 +646,17 @@ dissect_h235_Params(tvbuff_t *tvb, int offset, packet_info *pinfo _U_, proto_tre
return offset;
}
-static int dissect_hf_h235_paramS(tvbuff_t *tvb, int offset, packet_info *pinfo, proto_tree *tree) {
+static int dissect_paramS(tvbuff_t *tvb, int offset, packet_info *pinfo, proto_tree *tree) {
return dissect_h235_Params(tvb, offset, pinfo, tree, hf_h235_paramS);
}
-static int dissect_hf_h235_paramSsalt(tvbuff_t *tvb, int offset, packet_info *pinfo, proto_tree *tree) {
+static int dissect_paramSsalt(tvbuff_t *tvb, int offset, packet_info *pinfo, proto_tree *tree) {
return dissect_h235_Params(tvb, offset, pinfo, tree, hf_h235_paramSsalt);
}
static per_sequence_t ENCRYPTEDxxx_sequence[] = {
- { "algorithmOID" , ASN1_NO_EXTENSIONS , ASN1_NOT_OPTIONAL, dissect_hf_h235_algorithmOID },
- { "paramS" , ASN1_NO_EXTENSIONS , ASN1_NOT_OPTIONAL, dissect_hf_h235_paramS },
- { "encryptedData" , ASN1_NO_EXTENSIONS , ASN1_NOT_OPTIONAL, dissect_hf_h235_encryptedData },
+ { "algorithmOID" , ASN1_NO_EXTENSIONS , ASN1_NOT_OPTIONAL, dissect_algorithmOID },
+ { "paramS" , ASN1_NO_EXTENSIONS , ASN1_NOT_OPTIONAL, dissect_paramS },
+ { "encryptedData" , ASN1_NO_EXTENSIONS , ASN1_NOT_OPTIONAL, dissect_encryptedData },
{ NULL, 0, 0, NULL }
};
@@ -668,13 +668,13 @@ dissect_h235_ENCRYPTEDxxx(tvbuff_t *tvb, int offset, packet_info *pinfo _U_, pro
return offset;
}
-static int dissect_hf_h235_encryptedToken(tvbuff_t *tvb, int offset, packet_info *pinfo, proto_tree *tree) {
+static int dissect_encryptedToken(tvbuff_t *tvb, int offset, packet_info *pinfo, proto_tree *tree) {
return dissect_h235_ENCRYPTEDxxx(tvb, offset, pinfo, tree, hf_h235_encryptedToken);
}
-static int dissect_hf_h235_cryptoPwdEncr(tvbuff_t *tvb, int offset, packet_info *pinfo, proto_tree *tree) {
+static int dissect_cryptoPwdEncr(tvbuff_t *tvb, int offset, packet_info *pinfo, proto_tree *tree) {
return dissect_h235_ENCRYPTEDxxx(tvb, offset, pinfo, tree, hf_h235_cryptoPwdEncr);
}
-static int dissect_hf_h235_sharedSecret(tvbuff_t *tvb, int offset, packet_info *pinfo, proto_tree *tree) {
+static int dissect_sharedSecret(tvbuff_t *tvb, int offset, packet_info *pinfo, proto_tree *tree) {
return dissect_h235_ENCRYPTEDxxx(tvb, offset, pinfo, tree, hf_h235_sharedSecret);
}
@@ -686,18 +686,18 @@ dissect_h235_BIT_STRING(tvbuff_t *tvb, int offset, packet_info *pinfo _U_, proto
return offset;
}
-static int dissect_hf_h235_signaturedata(tvbuff_t *tvb, int offset, packet_info *pinfo, proto_tree *tree) {
+static int dissect_signaturedata(tvbuff_t *tvb, int offset, packet_info *pinfo, proto_tree *tree) {
return dissect_h235_BIT_STRING(tvb, offset, pinfo, tree, hf_h235_signaturedata);
}
-static int dissect_hf_h235_hash(tvbuff_t *tvb, int offset, packet_info *pinfo, proto_tree *tree) {
+static int dissect_hash(tvbuff_t *tvb, int offset, packet_info *pinfo, proto_tree *tree) {
return dissect_h235_BIT_STRING(tvb, offset, pinfo, tree, hf_h235_hash);
}
static per_sequence_t SIGNEDxxx_sequence[] = {
- { "toBeSigned" , ASN1_NO_EXTENSIONS , ASN1_NOT_OPTIONAL, dissect_hf_h235_toBeSigned },
- { "algorithmOID" , ASN1_NO_EXTENSIONS , ASN1_NOT_OPTIONAL, dissect_hf_h235_algorithmOID },
- { "paramS" , ASN1_NO_EXTENSIONS , ASN1_NOT_OPTIONAL, dissect_hf_h235_paramS },
- { "signature" , ASN1_NO_EXTENSIONS , ASN1_NOT_OPTIONAL, dissect_hf_h235_signaturedata },
+ { "toBeSigned" , ASN1_NO_EXTENSIONS , ASN1_NOT_OPTIONAL, dissect_toBeSigned },
+ { "algorithmOID" , ASN1_NO_EXTENSIONS , ASN1_NOT_OPTIONAL, dissect_algorithmOID },
+ { "paramS" , ASN1_NO_EXTENSIONS , ASN1_NOT_OPTIONAL, dissect_paramS },
+ { "signature" , ASN1_NO_EXTENSIONS , ASN1_NOT_OPTIONAL, dissect_signaturedata },
{ NULL, 0, 0, NULL }
};
@@ -709,22 +709,22 @@ dissect_h235_SIGNEDxxx(tvbuff_t *tvb, int offset, packet_info *pinfo _U_, proto_
return offset;
}
-static int dissect_hf_h235_signedToken(tvbuff_t *tvb, int offset, packet_info *pinfo, proto_tree *tree) {
+static int dissect_signedToken(tvbuff_t *tvb, int offset, packet_info *pinfo, proto_tree *tree) {
return dissect_h235_SIGNEDxxx(tvb, offset, pinfo, tree, hf_h235_signedToken);
}
-static int dissect_hf_h235_certProtectedKey(tvbuff_t *tvb, int offset, packet_info *pinfo, proto_tree *tree) {
+static int dissect_certProtectedKey(tvbuff_t *tvb, int offset, packet_info *pinfo, proto_tree *tree) {
return dissect_h235_SIGNEDxxx(tvb, offset, pinfo, tree, hf_h235_certProtectedKey);
}
static per_sequence_t V3KeySyncMaterial_sequence[] = {
- { "generalID" , ASN1_EXTENSION_ROOT , ASN1_OPTIONAL , dissect_hf_h235_generalID },
- { "algorithmOID" , ASN1_EXTENSION_ROOT , ASN1_OPTIONAL , dissect_hf_h235_algorithmOID },
- { "paramS" , ASN1_EXTENSION_ROOT , ASN1_NOT_OPTIONAL, dissect_hf_h235_paramS },
- { "encryptedSessionKey" , ASN1_EXTENSION_ROOT , ASN1_OPTIONAL , dissect_hf_h235_encryptedSessionKey },
- { "encryptedSaltingKey" , ASN1_EXTENSION_ROOT , ASN1_OPTIONAL , dissect_hf_h235_encryptedSaltingKey },
- { "clearSaltingKey" , ASN1_EXTENSION_ROOT , ASN1_OPTIONAL , dissect_hf_h235_clearSaltingKey },
- { "paramSsalt" , ASN1_EXTENSION_ROOT , ASN1_OPTIONAL , dissect_hf_h235_paramSsalt },
- { "keyDerivationOID" , ASN1_EXTENSION_ROOT , ASN1_OPTIONAL , dissect_hf_h235_keyDerivationOID },
+ { "generalID" , ASN1_EXTENSION_ROOT , ASN1_OPTIONAL , dissect_generalID },
+ { "algorithmOID" , ASN1_EXTENSION_ROOT , ASN1_OPTIONAL , dissect_algorithmOID },
+ { "paramS" , ASN1_EXTENSION_ROOT , ASN1_NOT_OPTIONAL, dissect_paramS },
+ { "encryptedSessionKey" , ASN1_EXTENSION_ROOT , ASN1_OPTIONAL , dissect_encryptedSessionKey },
+ { "encryptedSaltingKey" , ASN1_EXTENSION_ROOT , ASN1_OPTIONAL , dissect_encryptedSaltingKey },
+ { "clearSaltingKey" , ASN1_EXTENSION_ROOT , ASN1_OPTIONAL , dissect_clearSaltingKey },
+ { "paramSsalt" , ASN1_EXTENSION_ROOT , ASN1_OPTIONAL , dissect_paramSsalt },
+ { "keyDerivationOID" , ASN1_EXTENSION_ROOT , ASN1_OPTIONAL , dissect_keyDerivationOID },
{ NULL, 0, 0, NULL }
};
@@ -735,7 +735,7 @@ dissect_h235_V3KeySyncMaterial(tvbuff_t *tvb, int offset, packet_info *pinfo _U_
return offset;
}
-static int dissect_hf_h235_secureSharedSecret(tvbuff_t *tvb, int offset, packet_info *pinfo, proto_tree *tree) {
+static int dissect_secureSharedSecret(tvbuff_t *tvb, int offset, packet_info *pinfo, proto_tree *tree) {
return dissect_h235_V3KeySyncMaterial(tvb, offset, pinfo, tree, hf_h235_secureSharedSecret);
}
@@ -749,10 +749,10 @@ static const value_string H235Key_vals[] = {
};
static per_choice_t H235Key_choice[] = {
- { 0, "secureChannel" , ASN1_EXTENSION_ROOT , dissect_hf_h235_secureChannel },
- { 1, "sharedSecret" , ASN1_EXTENSION_ROOT , dissect_hf_h235_sharedSecret },
- { 2, "certProtectedKey" , ASN1_EXTENSION_ROOT , dissect_hf_h235_certProtectedKey },
- { 3, "secureSharedSecret" , ASN1_NOT_EXTENSION_ROOT, dissect_hf_h235_secureSharedSecret },
+ { 0, "secureChannel" , ASN1_EXTENSION_ROOT , dissect_secureChannel },
+ { 1, "sharedSecret" , ASN1_EXTENSION_ROOT , dissect_sharedSecret },
+ { 2, "certProtectedKey" , ASN1_EXTENSION_ROOT , dissect_certProtectedKey },
+ { 3, "secureSharedSecret" , ASN1_NOT_EXTENSION_ROOT, dissect_secureSharedSecret },
{ 0, NULL, 0, NULL }
};
@@ -764,23 +764,23 @@ dissect_h235_H235Key(tvbuff_t *tvb, int offset, packet_info *pinfo _U_, proto_tr
return offset;
}
-static int dissect_hf_h235_h235Key(tvbuff_t *tvb, int offset, packet_info *pinfo, proto_tree *tree) {
+static int dissect_h235Key(tvbuff_t *tvb, int offset, packet_info *pinfo, proto_tree *tree) {
return dissect_h235_H235Key(tvb, offset, pinfo, tree, hf_h235_h235Key);
}
static per_sequence_t ClearToken_sequence[] = {
- { "tokenOID" , ASN1_EXTENSION_ROOT , ASN1_NOT_OPTIONAL, dissect_hf_h235_tokenOID },
- { "timeStamp" , ASN1_EXTENSION_ROOT , ASN1_OPTIONAL , dissect_hf_h235_timeStamp },
- { "password" , ASN1_EXTENSION_ROOT , ASN1_OPTIONAL , dissect_hf_h235_password },
- { "dhkey" , ASN1_EXTENSION_ROOT , ASN1_OPTIONAL , dissect_hf_h235_dhkey },
- { "challenge" , ASN1_EXTENSION_ROOT , ASN1_OPTIONAL , dissect_hf_h235_challenge },
- { "random" , ASN1_EXTENSION_ROOT , ASN1_OPTIONAL , dissect_hf_h235_random },
- { "certificate" , ASN1_EXTENSION_ROOT , ASN1_OPTIONAL , dissect_hf_h235_certificate },
- { "generalID" , ASN1_EXTENSION_ROOT , ASN1_OPTIONAL , dissect_hf_h235_generalID },
- { "nonStandard" , ASN1_EXTENSION_ROOT , ASN1_OPTIONAL , dissect_hf_h235_nonStandard },
- { "eckasdhkey" , ASN1_NOT_EXTENSION_ROOT, ASN1_OPTIONAL , dissect_hf_h235_eckasdhkey },
- { "sendersID" , ASN1_NOT_EXTENSION_ROOT, ASN1_OPTIONAL , dissect_hf_h235_sendersID },
- { "h235Key" , ASN1_NOT_EXTENSION_ROOT, ASN1_OPTIONAL , dissect_hf_h235_h235Key },
+ { "tokenOID" , ASN1_EXTENSION_ROOT , ASN1_NOT_OPTIONAL, dissect_tokenOID },
+ { "timeStamp" , ASN1_EXTENSION_ROOT , ASN1_OPTIONAL , dissect_timeStamp },
+ { "password" , ASN1_EXTENSION_ROOT , ASN1_OPTIONAL , dissect_password },
+ { "dhkey" , ASN1_EXTENSION_ROOT , ASN1_OPTIONAL , dissect_dhkey },
+ { "challenge" , ASN1_EXTENSION_ROOT , ASN1_OPTIONAL , dissect_challenge },
+ { "random" , ASN1_EXTENSION_ROOT , ASN1_OPTIONAL , dissect_random },
+ { "certificate" , ASN1_EXTENSION_ROOT , ASN1_OPTIONAL , dissect_certificate },
+ { "generalID" , ASN1_EXTENSION_ROOT , ASN1_OPTIONAL , dissect_generalID },
+ { "nonStandard" , ASN1_EXTENSION_ROOT , ASN1_OPTIONAL , dissect_nonStandard },
+ { "eckasdhkey" , ASN1_NOT_EXTENSION_ROOT, ASN1_OPTIONAL , dissect_eckasdhkey },
+ { "sendersID" , ASN1_NOT_EXTENSION_ROOT, ASN1_OPTIONAL , dissect_sendersID },
+ { "h235Key" , ASN1_NOT_EXTENSION_ROOT, ASN1_OPTIONAL , dissect_h235Key },
{ NULL, 0, 0, NULL }
};
@@ -792,14 +792,14 @@ dissect_h235_ClearToken(tvbuff_t *tvb, int offset, packet_info *pinfo _U_, proto
return offset;
}
-static int dissect_hf_h235_hashedVals(tvbuff_t *tvb, int offset, packet_info *pinfo, proto_tree *tree) {
+static int dissect_hashedVals(tvbuff_t *tvb, int offset, packet_info *pinfo, proto_tree *tree) {
return dissect_h235_ClearToken(tvb, offset, pinfo, tree, hf_h235_hashedVals);
}
static per_sequence_t HASHEDxxx_sequence[] = {
- { "algorithmOID" , ASN1_NO_EXTENSIONS , ASN1_NOT_OPTIONAL, dissect_hf_h235_algorithmOID },
- { "paramS" , ASN1_NO_EXTENSIONS , ASN1_NOT_OPTIONAL, dissect_hf_h235_paramS },
- { "hash" , ASN1_NO_EXTENSIONS , ASN1_NOT_OPTIONAL, dissect_hf_h235_hash },
+ { "algorithmOID" , ASN1_NO_EXTENSIONS , ASN1_NOT_OPTIONAL, dissect_algorithmOID },
+ { "paramS" , ASN1_NO_EXTENSIONS , ASN1_NOT_OPTIONAL, dissect_paramS },
+ { "hash" , ASN1_NO_EXTENSIONS , ASN1_NOT_OPTIONAL, dissect_hash },
{ NULL, 0, 0, NULL }
};
@@ -811,13 +811,13 @@ dissect_h235_HASHEDxxx(tvbuff_t *tvb, int offset, packet_info *pinfo _U_, proto_
return offset;
}
-static int dissect_hf_h235_hashedToken(tvbuff_t *tvb, int offset, packet_info *pinfo, proto_tree *tree) {
+static int dissect_hashedToken(tvbuff_t *tvb, int offset, packet_info *pinfo, proto_tree *tree) {
return dissect_h235_HASHEDxxx(tvb, offset, pinfo, tree, hf_h235_hashedToken);
}
static per_sequence_t T_cryptoEncryptedToken_sequence[] = {
- { "tokenOID" , ASN1_NO_EXTENSIONS , ASN1_NOT_OPTIONAL, dissect_hf_h235_tokenOID },
- { "token" , ASN1_NO_EXTENSIONS , ASN1_NOT_OPTIONAL, dissect_hf_h235_encryptedToken },
+ { "tokenOID" , ASN1_NO_EXTENSIONS , ASN1_NOT_OPTIONAL, dissect_tokenOID },
+ { "token" , ASN1_NO_EXTENSIONS , ASN1_NOT_OPTIONAL, dissect_encryptedToken },
{ NULL, 0, 0, NULL }
};
@@ -828,13 +828,13 @@ dissect_h235_T_cryptoEncryptedToken(tvbuff_t *tvb, int offset, packet_info *pinf
return offset;
}
-static int dissect_hf_h235_cryptoEncryptedToken(tvbuff_t *tvb, int offset, packet_info *pinfo, proto_tree *tree) {
+static int dissect_cryptoEncryptedToken(tvbuff_t *tvb, int offset, packet_info *pinfo, proto_tree *tree) {
return dissect_h235_T_cryptoEncryptedToken(tvb, offset, pinfo, tree, hf_h235_cryptoEncryptedToken);
}
static per_sequence_t T_cryptoSignedToken_sequence[] = {
- { "tokenOID" , ASN1_NO_EXTENSIONS , ASN1_NOT_OPTIONAL, dissect_hf_h235_tokenOID },
- { "token" , ASN1_NO_EXTENSIONS , ASN1_NOT_OPTIONAL, dissect_hf_h235_signedToken },
+ { "tokenOID" , ASN1_NO_EXTENSIONS , ASN1_NOT_OPTIONAL, dissect_tokenOID },
+ { "token" , ASN1_NO_EXTENSIONS , ASN1_NOT_OPTIONAL, dissect_signedToken },
{ NULL, 0, 0, NULL }
};
@@ -845,14 +845,14 @@ dissect_h235_T_cryptoSignedToken(tvbuff_t *tvb, int offset, packet_info *pinfo _
return offset;
}
-static int dissect_hf_h235_cryptoSignedToken(tvbuff_t *tvb, int offset, packet_info *pinfo, proto_tree *tree) {
+static int dissect_cryptoSignedToken(tvbuff_t *tvb, int offset, packet_info *pinfo, proto_tree *tree) {
return dissect_h235_T_cryptoSignedToken(tvb, offset, pinfo, tree, hf_h235_cryptoSignedToken);
}
static per_sequence_t T_cryptoHashedToken_sequence[] = {
- { "tokenOID" , ASN1_NO_EXTENSIONS , ASN1_NOT_OPTIONAL, dissect_hf_h235_tokenOID },
- { "hashedVals" , ASN1_NO_EXTENSIONS , ASN1_NOT_OPTIONAL, dissect_hf_h235_hashedVals },
- { "token" , ASN1_NO_EXTENSIONS , ASN1_NOT_OPTIONAL, dissect_hf_h235_hashedToken },
+ { "tokenOID" , ASN1_NO_EXTENSIONS , ASN1_NOT_OPTIONAL, dissect_tokenOID },
+ { "hashedVals" , ASN1_NO_EXTENSIONS , ASN1_NOT_OPTIONAL, dissect_hashedVals },
+ { "token" , ASN1_NO_EXTENSIONS , ASN1_NOT_OPTIONAL, dissect_hashedToken },
{ NULL, 0, 0, NULL }
};
@@ -863,7 +863,7 @@ dissect_h235_T_cryptoHashedToken(tvbuff_t *tvb, int offset, packet_info *pinfo _
return offset;
}
-static int dissect_hf_h235_cryptoHashedToken(tvbuff_t *tvb, int offset, packet_info *pinfo, proto_tree *tree) {
+static int dissect_cryptoHashedToken(tvbuff_t *tvb, int offset, packet_info *pinfo, proto_tree *tree) {
return dissect_h235_T_cryptoHashedToken(tvb, offset, pinfo, tree, hf_h235_cryptoHashedToken);
}
@@ -877,10 +877,10 @@ const value_string CryptoToken_vals[] = {
};
static per_choice_t CryptoToken_choice[] = {
- { 0, "cryptoEncryptedToken" , ASN1_EXTENSION_ROOT , dissect_hf_h235_cryptoEncryptedToken },
- { 1, "cryptoSignedToken" , ASN1_EXTENSION_ROOT , dissect_hf_h235_cryptoSignedToken },
- { 2, "cryptoHashedToken" , ASN1_EXTENSION_ROOT , dissect_hf_h235_cryptoHashedToken },
- { 3, "cryptoPwdEncr" , ASN1_EXTENSION_ROOT , dissect_hf_h235_cryptoPwdEncr },
+ { 0, "cryptoEncryptedToken" , ASN1_EXTENSION_ROOT , dissect_cryptoEncryptedToken },
+ { 1, "cryptoSignedToken" , ASN1_EXTENSION_ROOT , dissect_cryptoSignedToken },
+ { 2, "cryptoHashedToken" , ASN1_EXTENSION_ROOT , dissect_cryptoHashedToken },
+ { 3, "cryptoPwdEncr" , ASN1_EXTENSION_ROOT , dissect_cryptoPwdEncr },
{ 0, NULL, 0, NULL }
};
@@ -918,7 +918,7 @@ void proto_register_h235(void) {
"NonStandardParameter/nonStandardIdentifier", HFILL }},
{ &hf_h235_data,
{ "data", "h235.data",
- FT_BYTES, BASE_HEX, NULL, 0,
+ FT_UINT32, BASE_DEC, NULL, 0,
"NonStandardParameter/data", HFILL }},
{ &hf_h235_halfkey,
{ "halfkey", "h235.halfkey",
@@ -1026,7 +1026,7 @@ void proto_register_h235(void) {
"", HFILL }},
{ &hf_h235_timeStamp,
{ "timeStamp", "h235.timeStamp",
- FT_UINT32, BASE_DEC, NULL, 0,
+ FT_ABSOLUTE_TIME, BASE_NONE, NULL, 0,
"ClearToken/timeStamp", HFILL }},
{ &hf_h235_password,
{ "password", "h235.password",
diff --git a/packet-h235.h b/packet-h235.h
index 6b1ca8525b..161c747584 100644
--- a/packet-h235.h
+++ b/packet-h235.h
@@ -4,13 +4,13 @@
/* ../../tools/asn2eth.py -X -p h235 -c h235.cnf -s packet-h235-template H235-SECURITY-MESSAGES.asn */
/* Input file: packet-h235-template.h */
-/* Include files: packet-h235-exp.h */
+/* Include files: packet-h235-exp.h, packet-h235-valexp.h */
/* packet-h235.h
* Routines for H.235 packet dissection
* 2004 Tomas Kukosa
*
- * $Id: packet-h235.h,v 1.5 2004/06/04 11:30:35 sahlberg Exp $
+ * $Id: packet-h235.h,v 1.6 2004/06/24 21:50:04 sahlberg Exp $
*
* Ethereal - Network traffic analyzer
* By Gerald Combs <gerald@ethereal.com>
diff --git a/packet-per.c b/packet-per.c
index e2dc66f647..cb4f667457 100644
--- a/packet-per.c
+++ b/packet-per.c
@@ -7,7 +7,7 @@ proper helper routines
* Routines for dissection of ASN.1 Aligned PER
* 2003 Ronnie Sahlberg
*
- * $Id: packet-per.c,v 1.28 2004/05/17 20:03:36 sahlberg Exp $
+ * $Id: packet-per.c,v 1.29 2004/06/24 21:50:04 sahlberg Exp $
*
* Ethereal - Network traffic analyzer
* By Gerald Combs <gerald@ethereal.com>
@@ -707,6 +707,8 @@ dissect_per_constrained_integer(tvbuff_t *tvb, guint32 offset, packet_info *pinf
{
proto_item *it=NULL;
guint32 range, val;
+ gint val_start, val_length;
+ nstime_t timeval;
header_field_info *hfi;
int num_bits;
int pad;
@@ -738,20 +740,12 @@ DEBUG_ENTRY("dissect_per_constrained_integer");
num_bits=0;
pad=0;
val=0;
+ timeval.secs=val; timeval.nsecs=0;
/* 10.5.4 */
if(range==1){
- it=proto_tree_add_uint_format(tree, hf_index, tvb, offset>>3, 0, min, "%s: %d", hfi->name, min);
- if(item){
- *item=it;
- }
- if(value){
- *value=val;
- }
- return offset;
- }
-
- /* 10.5.7 */
- if(range<=255){
+ val_start = offset>>3; val_length = 0;
+ val = min;
+ } else if(range<=255) {
/* 10.5.7.1 */
char str[256];
int i, bit, length;
@@ -807,19 +801,8 @@ DEBUG_ENTRY("dissect_per_constrained_integer");
}
strcat(str,".");
}
+ val_start = (offset-num_bits)>>3; val_length = length;
val+=min;
- if(hfi->strings){
- it=proto_tree_add_uint_format(tree, hf_index, tvb, (offset-num_bits)>>3, length, val, "%s : %s (%d)", str, val_to_str(val, hfi->strings, "Unknown(%d)"),val);
- } else {
- it=proto_tree_add_uint(tree, hf_index, tvb, (offset-num_bits)>>3, length, val);
- }
- if(item){
- *item=it;
- }
- if(value){
- *value=val;
- }
- return offset;
} else if(range==256){
/* 10.5.7.2 */
num_bits=8;
@@ -832,15 +815,8 @@ DEBUG_ENTRY("dissect_per_constrained_integer");
val=tvb_get_guint8(tvb, offset>>3);
offset+=8;
+ val_start = (offset>>3)-1; val_length = 1;
val+=min;
- it=proto_tree_add_uint(tree, hf_index, tvb, (offset>>3)-1, 1, val);
- if(item){
- *item=it;
- }
- if(value){
- *value=val;
- }
- return offset;
} else if(range<=65536){
/* 10.5.7.3 */
num_bits=16;
@@ -856,15 +832,8 @@ DEBUG_ENTRY("dissect_per_constrained_integer");
val|=tvb_get_guint8(tvb, offset>>3);
offset+=8;
+ val_start = (offset>>3)-2; val_length = 2;
val+=min;
- it=proto_tree_add_uint(tree, hf_index, tvb, (offset>>3)-2, 2, val);
- if(item){
- *item=it;
- }
- if(value){
- *value=val;
- }
- return offset;
} else {
int i,num_bytes;
gboolean bit;
@@ -887,20 +856,23 @@ DEBUG_ENTRY("dissect_per_constrained_integer");
val=(val<<8)|tvb_get_guint8(tvb,offset>>3);
offset+=8;
}
+ val_start = (offset>>3)-(num_bytes+1); val_length = num_bytes+1;
val+=min;
- it=proto_tree_add_uint(tree, hf_index, tvb, (offset>>3)-(num_bytes+1), num_bytes+1, val);
- if(item){
- *item=it;
- }
- if(value){
- *value=val;
- }
- return offset;
}
- PER_NOT_DECODED_YET("10.5");
- return offset;
-}
+ timeval.secs = val;
+ if (IS_FT_UINT(hfi->type)) {
+ it = proto_tree_add_uint(tree, hf_index, tvb, val_start, val_length, val);
+ } else if (IS_FT_INT(hfi->type)) {
+ it = proto_tree_add_int(tree, hf_index, tvb, val_start, val_length, val);
+ } else if (IS_FT_TIME(hfi->type)) {
+ it = proto_tree_add_time(tree, hf_index, tvb, val_start, val_length, &timeval);
+ } else {
+ g_assert_not_reached();
+ }
+ if (item) *item = it;
+ if (value) *value = val;
+ return offset;}
/* this functions decodes a CHOICE
it can only handle CHOICE INDEX values that fits inside a 32 bit integer.
@@ -1402,25 +1374,30 @@ DEBUG_ENTRY("dissect_per_bit_string");
guint32
dissect_per_octet_string(tvbuff_t *tvb, guint32 offset, packet_info *pinfo, proto_tree *tree, int hf_index, int min_len, int max_len, guint32 *value_offset, guint32 *value_len)
{
+ proto_tree *etr = NULL;
+ proto_item *it = NULL;
+ gint val_start, val_length;
guint32 length;
header_field_info *hfi;
+ static char bytes[4];
+ char *pbytes = NULL;
hfi = (hf_index==-1) ? NULL : proto_registrar_get_nth(hf_index);
-
-DEBUG_ENTRY("dissect_per_octet_string");
- /* 16.5 if the length is 0 bytes there will be no encoding */
- if(max_len==0){
- return offset;
+ if (display_internal_per_fields) {
+ etr = tree;
}
+DEBUG_ENTRY("dissect_per_octet_string");
if(min_len==-1){
min_len=0;
}
+
+ if (max_len==0) { /* 16.5 if the length is 0 bytes there will be no encoding */
+ val_start = offset>>3;
+ val_length = 0;
- /* 16.6 if length is fixed and less than or equal to two bytes*/
- if((min_len==max_len)&&(max_len<=2)){
- static char bytes[4];
+ } else if((min_len==max_len)&&(max_len<=2)) { /* 16.6 if length is fixed and less than or equal to two bytes*/
guint32 i, old_offset=offset;
gboolean bit;
@@ -1435,72 +1412,63 @@ DEBUG_ENTRY("dissect_per_octet_string");
}
}
bytes[min_len]=0;
- if (hfi) {
- if(hfi->type==FT_STRING){
- proto_tree_add_string(tree, hf_index, tvb, old_offset>>3, min_len+(offset&0x07)?1:0, bytes);
- } else {
- proto_tree_add_bytes(tree, hf_index, tvb, old_offset>>3, min_len+(offset&0x07)?1:0, bytes);
- }
- }
- if (value_offset) {
- *value_offset = old_offset>>3;
- }
- if (value_len) {
- *value_len = min_len+(offset&0x07)?1:0;
- }
- return offset;
- }
+ pbytes = bytes;
+ val_start = old_offset>>3;
+ val_length = min_len+(offset&0x07)?1:0;
-
- /* 16.7 if length is fixed and less than to 64k*/
- if((min_len==max_len)&&(min_len<65536)){
+ } else if ((min_len==max_len)&&(min_len<65536)) { /* 16.7 if length is fixed and less than to 64k*/
/* align to byte */
if(offset&0x07){
offset=(offset&0xfffffff8)+8;
}
- if (hfi) {
- proto_tree_add_item(tree, hf_index, tvb, offset>>3, min_len, FALSE);
- }
- if (value_offset) {
- *value_offset = offset>>3;
- }
- if (value_len) {
- *value_len = min_len;
- }
+ val_start = offset>>3;
+ val_length = min_len;
offset+=min_len*8;
- return offset;
- }
- /* 16.8 */
- if(max_len>0){
- proto_tree *etr = NULL;
+ } else { /* 16.8 */
+ if(max_len>0) {
+ offset = dissect_per_constrained_integer(tvb, offset, pinfo, etr,
+ hf_per_octet_string_length, min_len, max_len,
+ &length, NULL, FALSE);
+ } else {
+ offset = dissect_per_length_determinant(tvb, offset, pinfo, etr,
+ hf_per_octet_string_length, &length);
+ }
- if(display_internal_per_fields){
- etr=tree;
+ if(length){
+ /* align to byte */
+ if(offset&0x07){
+ offset=(offset&0xfffffff8)+8;
+ }
}
- offset=dissect_per_constrained_integer(tvb, offset, pinfo,
- etr, hf_per_octet_string_length, min_len, max_len,
- &length, NULL, FALSE);
- } else {
- offset=dissect_per_length_determinant(tvb, offset, pinfo, tree, hf_per_octet_string_length, &length);
+ val_start = offset>>3;
+ val_length = length;
+ offset+=length*8;
}
- if(length){
- /* align to byte */
- if(offset&0x07){
- offset=(offset&0xfffffff8)+8;
- }
- if (hfi) {
- proto_tree_add_item(tree, hf_index, tvb, offset>>3, length, FALSE);
+
+ if (hfi) {
+ if (IS_FT_UINT(hfi->type)||IS_FT_INT(hfi->type)) {
+ if (IS_FT_UINT(hfi->type))
+ it = proto_tree_add_uint(tree, hf_index, tvb, val_start, val_length, val_length);
+ else
+ it = proto_tree_add_int(tree, hf_index, tvb, val_start, val_length, val_length);
+ proto_item_append_text(it, (val_length == 1) ? " octet" : " octets");
+ } else {
+ if (pbytes) {
+ if(IS_FT_STRING(hfi->type)){
+ proto_tree_add_string(tree, hf_index, tvb, val_start, val_length, pbytes);
+ } else if (hfi->type==FT_BYTES) {
+ proto_tree_add_bytes(tree, hf_index, tvb, val_start, val_length, pbytes);
+ } else {
+ g_assert_not_reached();
+ }
+ } else {
+ proto_tree_add_item(tree, hf_index, tvb, val_start, val_length, FALSE);
+ }
}
}
- if (value_offset) {
- *value_offset = offset>>3;
- }
- if (value_len) {
- *value_len = length;
- }
- offset+=length*8;
-
+ if (value_offset) *value_offset = val_start;
+ if (value_len) *value_len = val_length;
return offset;
}
diff --git a/tools/asn2eth.py b/tools/asn2eth.py
index 9f5aa8a2d9..b9bf8fc3d0 100644
--- a/tools/asn2eth.py
+++ b/tools/asn2eth.py
@@ -5,13 +5,13 @@
# ASN.1 to Ethereal dissector compiler
# 2004 Tomas Kukosa
#
-# $Id: asn2eth.py,v 1.10 2004/06/24 05:13:59 sahlberg Exp $
+# $Id: asn2eth.py,v 1.11 2004/06/24 21:50:05 sahlberg Exp $
#
"""ASN.1 to Ethereal dissector compiler"""
#
-# Compiler from ASN.1 specification to the Ethereal PER dissector
+# Compiler from ASN.1 specification to the Ethereal dissector
#
# Based on ASN.1 to Python compiler from Aaron S. Lav's PyZ3950 package licensed under the X Consortium license
# http://www.pobox.com/~asl2/software/PyZ3950/
@@ -411,9 +411,10 @@ class EthCtx:
if self.type.has_key(ident):
raise "Duplicate type for " + ident
self.type[ident] = {'import' : mod, 'proto' : proto,
- 'ethname' : '',
- 'ftype' : 'FT_NONE', 'display' : 'BASE_NONE',
- 'strings' : 'NULL'}
+ 'ethname' : '' }
+ self.type[ident]['attr'] = { 'TYPE' : 'FT_NONE', 'DISPLAY' : 'BASE_NONE',
+ 'STRINGS' : 'NULL', 'BITMASK' : '0' }
+ self.type[ident]['attr'].update(self.conform.use_item('TYPE_ATTR', ident))
self.type_imp.append(ident)
#--- eth_import_value -------------------------------------------------------
@@ -447,6 +448,13 @@ class EthCtx:
self.type[ident]['no_emit'] = self.conform.use_item('NO_EMIT', ident)
self.type[ident]['tname'] = self.conform.use_item('TYPE_RENAME', ident, val_dflt=self.type[ident]['tname'])
self.type[ident]['ethname'] = ''
+ if val.type == 'Type_Ref':
+ self.type[ident]['attr'] = {}
+ else:
+ (ftype, display) = val.eth_ftype()
+ self.type[ident]['attr'] = { 'TYPE' : ftype, 'DISPLAY' : display,
+ 'STRINGS' : val.eth_strings(), 'BITMASK' : '0' }
+ self.type[ident]['attr'].update(self.conform.use_item('TYPE_ATTR', ident))
self.type_ord.append(ident)
#--- eth_reg_value ----------------------------------------------------------
@@ -464,7 +472,11 @@ class EthCtx:
#print "eth_reg_field(ident='%s', type='%s')" % (ident, type)
if self.field.has_key(ident):
raise "Duplicate field for " + ident
- self.field[ident] = {'type' : type, 'idx' : idx, 'impl' : impl}
+ self.field[ident] = {'type' : type, 'idx' : idx, 'impl' : impl,
+ 'modified' : '', 'attr' : {} }
+ if self.conform.check_item('FIELD_ATTR', ident):
+ self.field[ident]['modified'] = '#' + str(id(self))
+ self.field[ident]['attr'].update(self.conform.use_item('FIELD_ATTR', ident))
self.field_ord.append(ident)
if parent: self.eth_dep_add(parent, type)
@@ -479,7 +491,8 @@ class EthCtx:
for t in self.type_imp:
nm = t
- self.eth_type[nm] = { 'import' : self.type[t]['import'], 'proto' : self.type[t]['proto'], 'ref' : []}
+ self.eth_type[nm] = { 'import' : self.type[t]['import'], 'proto' : self.type[t]['proto'],
+ 'attr' : {}, 'ref' : []}
self.type[t]['ethname'] = nm
for t in self.type_ord:
nm = self.type[t]['tname']
@@ -504,7 +517,12 @@ class EthCtx:
self.eth_type_ord.append(nm)
self.eth_type[nm] = { 'import' : None, 'proto' : self.proto, 'export' : 0,
'user_def' : 0x03, 'no_emit' : 0x03,
- 'val' : self.type[t]['val'], 'ref' : [t]}
+ 'val' : self.type[t]['val'],
+ 'attr' : {},
+ 'ref' : [t]}
+ self.eth_type[nm]['attr'].update(self.conform.use_item('ETYPE_ATTR', nm))
+ if self.type[t]['attr'].get('STRINGS') == '$$':
+ self.eth_type[nm]['attr']['STRINGS'] = 'VALS(%s_vals)' % (nm)
self.type[t]['ethname'] = nm
if (not self.eth_type[nm]['export'] and self.type[t]['export']): # new export
self.eth_export_ord.append(nm)
@@ -589,7 +607,7 @@ class EthCtx:
name += self.field[f]['idx']
abbrev = nm.replace('-', '_')
nm = self.conform.use_item('FIELD_RENAME', f, val_dflt=nm)
- nm = "hf_%s_%s" % (self.proto, nm.replace('-', '_'))
+ nm = nm.replace('-', '_')
t = self.field[f]['type']
if self.type.has_key(t):
ethtype = self.type[t]['ethname']
@@ -597,15 +615,16 @@ class EthCtx:
# dummy imported
print "Dummy imported: ", t
self.type[t] = {'import' : 'xxx', 'proto' : 'xxx',
- 'ethname' : t,
- 'ftype' : 'FT_NONE', 'display' : 'BASE_NONE',
- 'strings' : 'NULL'}
- self.eth_type[t] = { 'import' : 'xxx', 'proto' : 'xxx' , 'ref' : []}
+ 'ethname' : t }
+ self.type[t]['attr'] = { 'TYPE' : 'FT_NONE', 'DISPLAY' : 'BASE_NONE',
+ 'STRINGS' : 'NULL', 'BITMASK' : '0' }
+ self.eth_type[t] = { 'import' : 'xxx', 'proto' : 'xxx' , 'attr' : {}, 'ref' : []}
ethtype = t
+ ethtypemod = ethtype + self.field[f]['modified']
if self.eth_hf.has_key(nm):
if self.eth_hf_dupl.has_key(nm):
- if self.eth_hf_dupl[nm].has_key(ethtype):
- nm = self.eth_hf_dupl[nm][ethtype]
+ if self.eth_hf_dupl[nm].has_key(ethtypemod):
+ nm = self.eth_hf_dupl[nm][ethtypemod]
self.eth_hf[nm]['ref'].append(f)
self.field[f]['ethname'] = nm
continue
@@ -614,35 +633,35 @@ class EthCtx:
self.eth_hf_dupl[nm][ethtype] = nmx
nm = nmx
else:
- if self.eth_hf[nm]['ethtype'] == ethtype:
+ if (self.eth_hf[nm]['ethtype']+self.eth_hf[nm]['modified']) == ethtypemod:
self.eth_hf[nm]['ref'].append(f)
self.field[f]['ethname'] = nm
continue
else:
- self.eth_hf_dupl[nm] = {self.eth_hf[nm]['ethtype'] : nm, \
- ethtype : nm+'1'}
+ self.eth_hf_dupl[nm] = {self.eth_hf[nm]['ethtype']+self.eth_hf[nm]['modified'] : nm, \
+ ethtypemod : nm+'1'}
nm += '1'
self.eth_hf_ord.append(nm)
+ fullname = "hf_%s_%s" % (self.proto, nm)
type = self.field[f]['type']
+ types = [type]
while (not self.type[type]['import']
and self.type[type]['val'].type == 'Type_Ref'):
type = self.type[type]['val'].val
+ types.append(type)
#print self.field[f]['type'], ' -> ', type
- if (self.type[type]['import']):
- ftype = self.type[type]['ftype']
- display = self.type[type]['display']
- strings = self.type[type]['strings']
- else:
- (ftype, display) = self.type[type]['val'].eth_ftype()
- strings = self.type[type]['val'].eth_strings()
- if strings == '$$':
- strings = 'VALS(%s_vals)' % (self.type[type]['ethname'])
- self.eth_hf[nm] = {'ethtype' : ethtype, 'ref' : [f],
- 'name' : name, 'abbrev' : abbrev,
- 'type' : ftype,
- 'display' : display,
- 'strings' : strings,
- 'bitmask' : '0'}
+ attr = {}
+ while len(types):
+ t = types.pop()
+ attr.update(self.type[t]['attr'])
+ attr.update(self.eth_type[self.type[t]['ethname']]['attr'])
+ attr.update(self.field[f]['attr'])
+ attr['NAME'] = '"%s"' % name
+ attr['ABBREV'] = abbrev
+ attr.update(self.conform.use_item('EFIELD_ATTR', nm))
+ self.eth_hf[nm] = {'fullname' : fullname,
+ 'ethtype' : ethtype, 'modified' : self.field[f]['modified'],
+ 'attr' : attr.copy(), 'ref' : [f]}
self.field[f]['ethname'] = nm
#--- type dependencies -------------------
self.eth_type_ord1 = []
@@ -789,7 +808,7 @@ class EthCtx:
fx = file(fn, 'w')
fx.write(eth_fhdr(fn))
for f in self.eth_hf_ord:
- fx.write("%-50s/* %s */\n" % ("static int %s = -1; " % (f), self.eth_hf[f]['ethtype']))
+ fx.write("%-50s/* %s */\n" % ("static int %s = -1; " % (self.eth_hf[f]['fullname']), self.eth_hf[f]['ethtype']))
if (self.named_bit):
fx.write('/* named bits */\n')
for nb in self.named_bit:
@@ -804,13 +823,17 @@ class EthCtx:
fx.write(eth_fhdr(fn))
for f in self.eth_hf_ord:
if len(self.eth_hf[f]['ref']) == 1:
- blurb = self.eth_hf[f]['ref'][0]
+ blurb = '"' + self.eth_hf[f]['ref'][0] + '"'
else:
- blurb = ''
- fx.write(' { &%s,\n' % (f))
- fx.write(' { "%s", "%s.%s",\n' % (self.eth_hf[f]['name'], self.proto, self.eth_hf[f]['abbrev']))
- fx.write(' %s, %s, %s, %s,\n' % (self.eth_hf[f]['type'], self.eth_hf[f]['display'], self.eth_hf[f]['strings'], self.eth_hf[f]['bitmask']))
- fx.write(' "%s", HFILL }},\n' % (blurb))
+ blurb = '""'
+ attr = self.eth_hf[f]['attr'].copy()
+ attr['ABBREV'] = '"%s.%s"' % (self.proto, attr['ABBREV'])
+ if not attr.has_key('BLURB'):
+ attr['BLURB'] = blurb
+ fx.write(' { &%s,\n' % (self.eth_hf[f]['fullname']))
+ fx.write(' { %(NAME)s, %(ABBREV)s,\n' % attr)
+ fx.write(' %(TYPE)s, %(DISPLAY)s, %(STRINGS)s, %(BITMASK)s,\n' % attr)
+ fx.write(' %(BLURB)s, HFILL }},\n' % attr)
for nb in self.named_bit:
blurb = ''
fx.write(' { &%s,\n' % (nb['ethname']))
@@ -861,6 +884,29 @@ class EthCtx:
fx.write(self.eth_type_fn_h(t))
fx.close()
+ #--- eth_output_expcnf ------------------------------------------------------
+ def eth_output_expcnf(self):
+ if (not len(self.eth_export_ord)): return
+ fn = self.eth_output_fname('exp', ext='cnf')
+ fx = file(fn, 'w')
+ fx.write(eth_fhdr(fn, comment = '#'))
+ if self.Ber():
+ fx.write('#.IMPORT_TAG\n')
+ for t in self.eth_export_ord: # functions
+ if (self.eth_type[t]['export'] & 0x01):
+ fx.write('%-24s ' % (t))
+ fx.write('%s %s\n' % self.eth_type[t]['val'].GetTag(self))
+ fx.write('#.END\n\n')
+ fx.write('#.TYPE_ATTR\n')
+ for t in self.eth_export_ord: # functions
+ if (self.eth_type[t]['export'] & 0x01):
+ fx.write('%-24s ' % (t))
+ attr = self.type[self.eth_type[t]['ref'][0]]['attr'].copy()
+ attr.update(self.eth_type[t]['attr'])
+ fx.write('TYPE = %(TYPE)-9s DISPLAY = %(DISPLAY)-9s STRINGS = %(STRINGS)s BITMASK = %(BITMASK)s\n' % attr)
+ fx.write('#.END\n\n')
+ fx.close()
+
#--- eth_output_val ------------------------------------------------------
def eth_output_val(self):
if (not len(self.eth_value_ord1)): return
@@ -904,10 +950,10 @@ class EthCtx:
if (i): postfix = '_impl'; impl = 'TRUE'
else: postfix = ''; impl = 'FALSE'
out = 'static int dissect_'+f+postfix+'(packet_info *pinfo, proto_tree *tree, tvbuff_t *tvb, int offset) {\n'
- par=((impl, 'tvb', 'offset', 'pinfo', 'tree', f),)
+ par=((impl, 'tvb', 'offset', 'pinfo', 'tree', self.eth_hf[f]['fullname']),)
else:
out = 'static int dissect_'+f+'(tvbuff_t *tvb, int offset, packet_info *pinfo, proto_tree *tree) {\n'
- par=(('tvb', 'offset', 'pinfo', 'tree', f),)
+ par=(('tvb', 'offset', 'pinfo', 'tree', self.eth_hf[f]['fullname']),)
out += self.eth_fn_call('dissect_%s_%s' % (self.eth_type[t]['proto'], t), ret='return',
par=par)
out += '}\n'
@@ -957,7 +1003,7 @@ class EthCtx:
tmplist = self.eth_type_dupl.keys()
tmplist.sort()
for t in tmplist:
- msg = "The same type names for different types. Explicit renaming is recommended.\n"
+ msg = "The same type names for different types. Explicit type renaming is recommended.\n"
msg += t + "\n"
x = ''
for tt in self.eth_type_dupl[t]:
@@ -969,7 +1015,7 @@ class EthCtx:
tmplist = self.eth_hf_dupl.keys()
tmplist.sort()
for f in tmplist:
- msg = "The same field names for different types. Explicit renaming is recommended.\n"
+ msg = "The same field names for different types. Explicit field renaming is recommended.\n"
msg += f + "\n"
for tt in self.eth_hf_dupl[f].keys():
msg += " %-20s %-20s " % (self.eth_hf_dupl[f][tt], tt)
@@ -993,6 +1039,12 @@ class EthCnf:
self.tblcfg['TYPE_RENAME'] = { 'val_nm' : 'eth_name', 'val_dflt' : None, 'chk_dup' : True, 'chk_use' : True }
self.tblcfg['FIELD_RENAME'] = { 'val_nm' : 'eth_name', 'val_dflt' : None, 'chk_dup' : True, 'chk_use' : True }
self.tblcfg['IMPORT_TAG'] = { 'val_nm' : 'ttag', 'val_dflt' : (), 'chk_dup' : True, 'chk_use' : False }
+ self.tblcfg['FN_PARS'] = { 'val_nm' : 'pars', 'val_dflt' : {}, 'chk_dup' : True, 'chk_use' : True }
+ self.tblcfg['TYPE_ATTR'] = { 'val_nm' : 'attr', 'val_dflt' : {}, 'chk_dup' : True, 'chk_use' : False }
+ self.tblcfg['ETYPE_ATTR'] = { 'val_nm' : 'attr', 'val_dflt' : {}, 'chk_dup' : True, 'chk_use' : False }
+ self.tblcfg['FIELD_ATTR'] = { 'val_nm' : 'attr', 'val_dflt' : {}, 'chk_dup' : True, 'chk_use' : True }
+ self.tblcfg['EFIELD_ATTR'] = { 'val_nm' : 'attr', 'val_dflt' : {}, 'chk_dup' : True, 'chk_use' : True }
+
for k in self.tblcfg.keys() :
self.table[k] = {}
@@ -1055,12 +1107,48 @@ class EthCnf:
return par[0:pmax]
return par
+ def get_par_nm(line, pnum, fn, lineno):
+ if pnum:
+ par = line.split(None, 1)
+ else:
+ par = [line,]
+ for i in range(len(par)):
+ if par[i][0] == '#':
+ par[i:] = []
+ break
+ if len(par) < pnum:
+ warnings.warn_explicit("Too few parameters.", UserWarning, fn, lineno)
+ return None
+ if len(par) > pnum:
+ nmpar = par[pnum]
+ else:
+ nmpar = ''
+ nmpars = {}
+ nmpar_first = re.compile(r'^\s*(?P<attr>[_A-Z][_A-Z0-9]*)\s*=\s*')
+ nmpar_next = re.compile(r'\s+(?P<attr>[_A-Z][_A-Z0-9]*)\s*=\s*')
+ nmpar_end = re.compile(r'\s*$')
+ result = nmpar_first.search(nmpar)
+ pos = 0
+ while result:
+ k = result.group('attr')
+ pos = result.end()
+ result = nmpar_next.search(nmpar, pos)
+ p1 = pos
+ if result:
+ p2 = result.start()
+ else:
+ p2 = nmpar_end.search(nmpar, pos).start()
+ v = nmpar[p1:p2]
+ nmpars[k] = v
+ par[pnum] = nmpars
+ return par
+
f = open(fn, "r")
directive = re.compile(r'^\s*#\.(?P<name>[A-Z_]+)\s+')
comment = re.compile(r'^\s*#[^.]')
empty = re.compile(r'^\s*$')
lineno = 0
- ctx = ''
+ ctx = None
name = ''
stack = []
while 1:
@@ -1077,13 +1165,21 @@ class EthCnf:
if comment.search(line): continue
result = directive.search(line)
if result: # directive
- if result.group('name') in ('EXPORTS', 'USER_DEFINED', 'NO_EMIT', 'MODULE_IMPORT', 'OMIT_ASSIGNMENT', 'TYPE_RENAME', 'FIELD_RENAME', 'IMPORT_TAG'):
+ if result.group('name') in ('EXPORTS', 'USER_DEFINED', 'NO_EMIT', 'MODULE_IMPORT', 'OMIT_ASSIGNMENT', 'TYPE_RENAME', 'FIELD_RENAME', 'IMPORT_TAG',
+ 'TYPE_ATTR', 'ETYPE_ATTR', 'FIELD_ATTR', 'EFIELD_ATTR'):
ctx = result.group('name')
elif result.group('name') in ('FN_HDR', 'FN_FTR', 'FN_BODY'):
par = get_par(line[result.end():], 1, 1, fn=fn, lineno=lineno)
if not par: continue
ctx = result.group('name')
name = par[0]
+ elif result.group('name') == 'FN_PARS':
+ par = get_par(line[result.end():], 0, 1, fn=fn, lineno=lineno)
+ ctx = result.group('name')
+ if not par:
+ name = None
+ else:
+ name = par[0]
elif result.group('name') == 'INCLUDE':
par = get_par(line[result.end():], 1, 1, fn=fn, lineno=lineno)
if not par: continue
@@ -1091,15 +1187,15 @@ class EthCnf:
stack.append({'fn' : fn, 'f' : f, 'lineno' : lineno})
fn, f, lineno = par[0], fnew, 0
elif result.group('name') == 'END':
- ctx = ''
+ ctx = None
else:
warnings.warn_explicit("Unknown directive '%s'" % (result.group('name')), UserWarning, fn, lineno)
continue
if not ctx:
- if not empty.search(line):
+ if not empty.match(line):
warnings.warn_explicit("Non-empty line in empty context", UserWarning, fn, lineno)
elif ctx in ('EXPORTS', 'USER_DEFINED', 'NO_EMIT'):
- if empty.search(line): continue
+ if empty.match(line): continue
par = get_par(line, 1, 2, fn=fn, lineno=lineno)
if not par: continue
flag = 0x03
@@ -1114,30 +1210,35 @@ class EthCnf:
warnings.warn_explicit("Unknown parameter value '%s'" % (par[1]), UserWarning, fn, lineno)
self.add_item(ctx, par[0], flag=flag, fn=fn, lineno=lineno)
elif ctx == 'MODULE_IMPORT':
- if empty.search(line): continue
+ if empty.match(line): continue
par = get_par(line, 2, 2, fn=fn, lineno=lineno)
if not par: continue
self.add_item('MODULE_IMPORT', par[0], proto=par[1], fn=fn, lineno=lineno)
elif ctx == 'IMPORT_TAG':
- if empty.search(line): continue
+ if empty.match(line): continue
par = get_par(line, 3, 3, fn=fn, lineno=lineno)
if not par: continue
self.add_item('IMPORT_TAG', par[0], ttag=(par[1], par[2]), fn=fn, lineno=lineno)
elif ctx == 'OMIT_ASSIGNMENT':
- if empty.search(line): continue
+ if empty.match(line): continue
par = get_par(line, 1, 1, fn=fn, lineno=lineno)
if not par: continue
self.add_item('OMIT_ASSIGNMENT', par[0], omit=True, fn=fn, lineno=lineno)
elif ctx == 'TYPE_RENAME':
- if empty.search(line): continue
+ if empty.match(line): continue
par = get_par(line, 2, 2, fn=fn, lineno=lineno)
if not par: continue
self.add_item('TYPE_RENAME', par[0], eth_name=par[1], fn=fn, lineno=lineno)
elif ctx == 'FIELD_RENAME':
- if empty.search(line): continue
+ if empty.match(line): continue
par = get_par(line, 2, 2, fn=fn, lineno=lineno)
if not par: continue
self.add_item('FIELD_RENAME', par[0], eth_name=par[1], fn=fn, lineno=lineno)
+ elif ctx in ('TYPE_ATTR', 'ETYPE_ATTR', 'FIELD_ATTR', 'EFIELD_ATTR'):
+ if empty.match(line): continue
+ par = get_par_nm(line, 1, fn=fn, lineno=lineno)
+ if not par: continue
+ self.add_item(ctx, par[0], attr=par[1], fn=fn, lineno=lineno)
elif ctx in ('FN_HDR', 'FN_FTR', 'FN_BODY'):
self.add_fn_line(name, ctx, line, fn=fn, lineno=lineno)
@@ -1866,7 +1967,16 @@ class ChoiceType (Type):
return True
def GetTTag(self, ectx):
- return (-1, -1)
+ lst = self.elt_list
+ cls = '-1/*choice*/'
+ if hasattr(self, 'ext_list'):
+ lst.extend(self.ext_list)
+ if (len(lst) > 0):
+ cls = lst[0].GetTag(ectx)[0]
+ for e in (lst):
+ if (e.GetTag(ectx)[0] != cls):
+ cls = '-1/*choice*/'
+ return (cls, '-1/*choice*/')
def IndetermTag(self, ectx):
#print "Choice IndetermTag()=%s" % (str(not self.HasOwnTag()))
@@ -2223,7 +2333,7 @@ class RestrictedCharacterStringType (CharacterStringType):
(minv, maxv, ext) = self.eth_get_size_constr()
if (ectx.Ber()):
body = ectx.eth_fn_call('dissect_ber_restricted_string' + ectx.pvp(), ret='offset',
- par=(('implicit_tag', self.GetTTag(ectx)[1]),
+ par=(('implicit_tag', self.GetTag(ectx)[1]),
('pinfo', 'tree', 'tvb', 'offset', 'hf_index'),
('NULL',)))
elif (ectx.NPer()):
@@ -3692,7 +3802,7 @@ def p_ActualParameter (t):
def p_error(t):
raise ParseError(str(t))
-yacc.yacc ()
+yacc.yacc(method='SLR')
def testlex (s):
lexer.input (s)
@@ -3715,11 +3825,12 @@ def eth_do_module (ast, ectx):
if ectx.dbg('s'): print ast.str_depth(0)
ast.to_eth(ectx)
ectx.eth_prepare()
- if ectx.dbg('t'):
+ if ectx.dbg('a'):
print "\n# Assignments"
print "\n".join(ectx.assign_ord)
print "\n# Value assignments"
print "\n".join(ectx.vassign_ord)
+ if ectx.dbg('t'):
print "\n# Imported Types"
print "%-40s %-24s %-24s" % ("ASN.1 name", "Module", "Protocol")
print "-" * 100
@@ -3786,13 +3897,15 @@ def eth_do_module (ast, ectx):
ectx.eth_output_hf_arr()
ectx.eth_output_ett_arr()
ectx.eth_output_export()
+ if ectx.expcnf:
+ ectx.eth_output_expcnf()
ectx.eth_output_val()
ectx.eth_output_valexp()
ectx.conform.unused_report()
import time
-def testyacc (s, fn, defined_dict):
- ast = yacc.parse (s, debug=0)
+def testyacc(s, fn, defined_dict):
+ ast = yacc.parse(s, debug=0)
time_str = time.strftime("%a, %d %b %Y %H:%M:%S +0000", time.gmtime())
print """#!/usr/bin/env python
# Auto-generated from %s at %s
@@ -3809,16 +3922,18 @@ def eth_usage():
print """
competh [-h|?] [-d dbg] [-p proto] [-c conform_file] input_file
-h|? : usage
- -d dbg : debug output, dbg = [l][y][s][t]
+ -d dbg : debug output, dbg = [l][y][s][a][t]
l - lex
y - yacc
- s - internal ASN structure
+ s - internal ASN.1 structure
+ a - list of assignments
t - tables
-b : BER (default is PER)
-X : original dissector API (see Note)
-p proto : protocol name (default is basenam of <input_file> without extension)
-o name : output files name (default is <proto>)
-c conform_file : conformation file
+ -e : create conformation file for exported types
-s template : single file output (templete is input file without .c/.h extension)
input_file : input ASN.1 file
@@ -3826,9 +3941,12 @@ Note: It can create output for an original or a new PER/BER dissectors API,
but the new PER/BER dissectors API is not implemented now.
"""
-def eth_fhdr(fn):
+def eth_fhdr(fn, comment = None):
def outln(ln):
- return '/* ' + ('%-74s' % (ln)) + ' */\n'
+ if comment:
+ return '# %s\n' % (ln)
+ else:
+ return '/* %-74s */\n' % (ln)
out = ''
out += outln('Do not modify this file.')
out += outln('It is created automatically by the ASN.1 to Ethereal dissector compiler')
@@ -3873,7 +3991,7 @@ def make_include(out_nm, in_nm, inc_nms, remove_inc=False):
def eth_main():
print "ASN.1 to Ethereal dissector compiler";
try:
- opts, args = getopt.getopt(sys.argv[1:], "h?bXd:p:o:c:s:");
+ opts, args = getopt.getopt(sys.argv[1:], "h?bXd:p:o:c:es:");
except getopt.GetoptError:
eth_usage(); sys.exit(2)
if len(args) != 1:
@@ -3887,6 +4005,8 @@ def eth_main():
ectx.outnm = ectx.proto
ectx.new = True
ectx.dbgopt = ''
+ ectx.new = True
+ ectx.expcnf = False
single_file = None
for o, a in opts:
if o in ("-h", "-?"):
@@ -3904,6 +4024,8 @@ def eth_main():
ectx.new = False
if o in ("-d",):
ectx.dbgopt = a
+ if o in ("-e",):
+ ectx.expcnf = True
if o in ("-s",):
single_file = a
@@ -3911,7 +4033,7 @@ def eth_main():
s = f.read();
f.close()
lexer.debug=ectx.dbg('l')
- ast = yacc.parse (s, debug=ectx.dbg('y'))
+ ast = yacc.parse(s, debug=ectx.dbg('y'))
for module in ast:
eth_do_module(module, ectx)