diff options
Diffstat (limited to 'epan/dissectors/packet-rtp.h')
-rw-r--r-- | epan/dissectors/packet-rtp.h | 54 |
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); |