@@ -1638,24 +1638,16 @@ static void srtp_calc_aead_iv(srtp_session_keys_t *session_keys,
16381638 v128_xor (iv , & in , & salt );
16391639}
16401640
1641- srtp_session_keys_t * srtp_get_session_keys (srtp_stream_ctx_t * stream ,
1642- const uint8_t * hdr ,
1643- unsigned int pkt_octet_len ,
1644- unsigned int * mki_size )
1641+ static srtp_session_keys_t * srtp_get_session_keys (srtp_stream_ctx_t * stream ,
1642+ const uint8_t * hdr ,
1643+ unsigned int pkt_octet_len ,
1644+ unsigned int * mki_size ,
1645+ unsigned int tag_len )
16451646{
16461647 unsigned int base_mki_start_location = pkt_octet_len ;
16471648 unsigned int mki_start_location = 0 ;
1648- unsigned int tag_len = 0 ;
16491649 unsigned int i = 0 ;
16501650
1651- // Determine the authentication tag size
1652- if (stream -> session_keys [0 ].rtp_cipher -> algorithm == SRTP_AES_GCM_128 ||
1653- stream -> session_keys [0 ].rtp_cipher -> algorithm == SRTP_AES_GCM_256 ) {
1654- tag_len = 0 ;
1655- } else {
1656- tag_len = srtp_auth_get_tag_length (stream -> session_keys [0 ].rtp_auth );
1657- }
1658-
16591651 if (tag_len > base_mki_start_location ) {
16601652 * mki_size = 0 ;
16611653 return NULL ;
@@ -1680,6 +1672,44 @@ srtp_session_keys_t *srtp_get_session_keys(srtp_stream_ctx_t *stream,
16801672 return NULL ;
16811673}
16821674
1675+ static srtp_session_keys_t * srtp_get_session_keys_rtp (
1676+ srtp_stream_ctx_t * stream ,
1677+ const uint8_t * hdr ,
1678+ unsigned int pkt_octet_len ,
1679+ unsigned int * mki_size )
1680+ {
1681+ unsigned int tag_len = 0 ;
1682+
1683+ // Determine the authentication tag size
1684+ if (stream -> session_keys [0 ].rtp_cipher -> algorithm == SRTP_AES_GCM_128 ||
1685+ stream -> session_keys [0 ].rtp_cipher -> algorithm == SRTP_AES_GCM_256 ) {
1686+ tag_len = 0 ;
1687+ } else {
1688+ tag_len = srtp_auth_get_tag_length (stream -> session_keys [0 ].rtp_auth );
1689+ }
1690+
1691+ return srtp_get_session_keys (stream , hdr , pkt_octet_len , mki_size , tag_len );
1692+ }
1693+
1694+ static srtp_session_keys_t * srtp_get_session_keys_rtcp (
1695+ srtp_stream_ctx_t * stream ,
1696+ const uint8_t * hdr ,
1697+ unsigned int pkt_octet_len ,
1698+ unsigned int * mki_size )
1699+ {
1700+ unsigned int tag_len = 0 ;
1701+
1702+ // Determine the authentication tag size
1703+ if (stream -> session_keys [0 ].rtcp_cipher -> algorithm == SRTP_AES_GCM_128 ||
1704+ stream -> session_keys [0 ].rtcp_cipher -> algorithm == SRTP_AES_GCM_256 ) {
1705+ tag_len = 0 ;
1706+ } else {
1707+ tag_len = srtp_auth_get_tag_length (stream -> session_keys [0 ].rtcp_auth );
1708+ }
1709+
1710+ return srtp_get_session_keys (stream , hdr , pkt_octet_len , mki_size , tag_len );
1711+ }
1712+
16831713static srtp_err_status_t srtp_estimate_index (srtp_rdbx_t * rdbx ,
16841714 uint32_t roc ,
16851715 srtp_xtd_seq_num_t * est ,
@@ -2583,8 +2613,8 @@ srtp_err_status_t srtp_unprotect_mki(srtp_ctx_t *ctx,
25832613 /* Determine if MKI is being used and what session keys should be used */
25842614 if (use_mki ) {
25852615 session_keys =
2586- srtp_get_session_keys (stream , (const uint8_t * )hdr ,
2587- (unsigned int )* pkt_octet_len , & mki_size );
2616+ srtp_get_session_keys_rtp (stream , (const uint8_t * )hdr ,
2617+ (unsigned int )* pkt_octet_len , & mki_size );
25882618
25892619 if (session_keys == NULL )
25902620 return srtp_err_status_bad_mki ;
@@ -4293,7 +4323,7 @@ srtp_err_status_t srtp_unprotect_rtcp_mki(srtp_t ctx,
42934323 * Determine if MKI is being used and what session keys should be used
42944324 */
42954325 if (use_mki ) {
4296- session_keys = srtp_get_session_keys (
4326+ session_keys = srtp_get_session_keys_rtcp (
42974327 stream , (uint8_t * )hdr , (unsigned int )* pkt_octet_len , & mki_size );
42984328
42994329 if (session_keys == NULL )
0 commit comments