aboutsummaryrefslogtreecommitdiffstats
path: root/epan/dissectors/packet-rtp.h
diff options
context:
space:
mode:
authorJaap Keuter <jaap.keuter@xs4all.nl>2007-08-21 07:23:34 +0000
committerJaap Keuter <jaap.keuter@xs4all.nl>2007-08-21 07:23:34 +0000
commit7b593acb18e8370a56a2d30010470eecff382713 (patch)
treebef3b83909fded855d75986e138f2eeeebd18367 /epan/dissectors/packet-rtp.h
parent3d75f7a2a6e95ab607330906b6505d3ddb80befe (diff)
From Neil Piercy:
This patch set provides a an API for out of band signalling protocols to register flows as SRTP/SRTCP using extended versions of the existing rt(c)p_add_address functions. At present the encrypted portions of the payloads are simply skipped, and the auth tags etc added as fields. svn path=/trunk/; revision=22562
Diffstat (limited to 'epan/dissectors/packet-rtp.h')
-rw-r--r--epan/dissectors/packet-rtp.h54
1 files changed, 52 insertions, 2 deletions
diff --git a/epan/dissectors/packet-rtp.h b/epan/dissectors/packet-rtp.h
index 865fbdb15f..c976767500 100644
--- a/epan/dissectors/packet-rtp.h
+++ b/epan/dissectors/packet-rtp.h
@@ -53,6 +53,46 @@ struct _rtp_info {
*/
};
+/* definitions for SRTP dissection */
+
+/* Encryption algorithms */
+#define SRTP_ENC_ALG_NULL 0 /* non-encrypted SRTP payload - may still be authenticated */
+#define SRTP_ENC_ALG_AES_CM 1 /* SRTP default algorithm */
+#define SRTP_ENC_ALG_AES_F8 2
+
+/* Authentication algorithms */
+#define SRTP_AUTH_ALG_NONE 0 /* no auth tag in SRTP/RTP payload */
+#define SRTP_AUTH_ALG_HMAC_SHA1 1 /* SRTP default algorithm */
+
+
+#if 0 /* these are only needed once the dissector include the crypto functions to decrypt and/or authenticate */
+struct srtp_key_info
+{
+ guint8 *master_key; /* pointer to an se_alloc'ed master key */
+ guint8 *master_salt; /* pointer to an se_alloc'ed salt for this master key - NULL if no salt */
+ guint8 key_generation_rate; /* encoded as the power of 2, 0..24, or 255 (=zero rate) */
+ /* Either the MKI value is used (in which case from=to=0), or the <from,to> values are used (and MKI=0) */
+ guint32 from_roc; /* 32 MSBs of a 48 bit value - frame from which this key is valid (roll-over counter part) */
+ guint16 from_seq; /* 16 LSBs of a 48 bit value - frame from which this key is valid (sequence number part) */
+ guint32 to_roc; /* 32 MSBs of a 48 bit value - frame to which this key is valid (roll-over counter part) */
+ guint16 to_seq; /* 16 LSBs of a 48 bit value - frame to which this key is valid (sequence number part) */
+ guint32 mki; /* the MKI value associated with this key */
+};
+#endif
+
+struct srtp_info
+{
+ guint encryption_algorithm; /* at present only NULL vs non-NULL matter */
+ guint auth_algorithm; /* at present only NULL vs non-NULL matter */
+ guint mki_len; /* number of octets used for the MKI in the RTP payload */
+ guint auth_tag_len; /* number of octets used for the Auth Tag in the RTP payload */
+#if 0 /* these are only needed once the dissector include the crypto functions to decrypt and/or authenticate */
+ struct srtp_key_info **master_keys; /* an array of pointers to master keys and their info, the array and each key struct being se_alloc'ed */
+ void *enc_alg_info, /* algorithm-dependent info struct - may be void for default alg with default params */
+ void *auth_alg_info /* algorithm-dependent info struct - void for default alg with default params */
+#endif
+};
+
/* Info to save in RTP conversation / packet-info */
#define MAX_RTP_SETUP_METHOD_SIZE 7
struct _rtp_conversation_info
@@ -67,6 +107,7 @@ struct _rtp_conversation_info
struct _rtp_private_conv_info *rtp_conv_info; /* conversation info private
* to the rtp dissector */
+ struct srtp_info *srtp_info; /* SRTP context */
};
/* Add an RTP conversation with the given details */
@@ -74,8 +115,17 @@ void rtp_add_address(packet_info *pinfo,
address *addr, int port,
int other_port,
const gchar *setup_method,
- guint32 setup_frame_number,
- GHashTable *rtp_dyn_payload);
+ guint32 setup_frame_number,
+ GHashTable *rtp_dyn_payload);
+
+/* Add an SRTP conversation with the given details */
+void srtp_add_address(packet_info *pinfo,
+ address *addr, int port,
+ int other_port,
+ const gchar *setup_method,
+ guint32 setup_frame_number,
+ GHashTable *rtp_dyn_payload,
+ struct srtp_info *srtp_info);
/* Free and destroy the dyn_payload hash table */
void rtp_free_hash_dyn_payload(GHashTable *rtp_dyn_payload);