@@ -1744,10 +1744,11 @@ static void srtp_calc_aead_iv(srtp_session_keys_t *session_keys,
17441744 v128_xor (iv , & in , & salt );
17451745}
17461746
1747- srtp_err_status_t srtp_get_session_keys_for_packet (
1747+ static srtp_err_status_t srtp_get_session_keys_for_packet (
17481748 srtp_stream_ctx_t * stream ,
17491749 const uint8_t * hdr ,
17501750 size_t pkt_octet_len ,
1751+ size_t tag_len ,
17511752 srtp_session_keys_t * * session_keys )
17521753{
17531754 if (!stream -> use_mki ) {
@@ -1756,15 +1757,6 @@ srtp_err_status_t srtp_get_session_keys_for_packet(
17561757 }
17571758
17581759 size_t mki_start_location = pkt_octet_len ;
1759- size_t tag_len = 0 ;
1760-
1761- // Determine the authentication tag size
1762- if (stream -> session_keys [0 ].rtp_cipher -> algorithm == SRTP_AES_GCM_128 ||
1763- stream -> session_keys [0 ].rtp_cipher -> algorithm == SRTP_AES_GCM_256 ) {
1764- tag_len = 0 ;
1765- } else {
1766- tag_len = srtp_auth_get_tag_length (stream -> session_keys [0 ].rtp_auth );
1767- }
17681760
17691761 if (tag_len > mki_start_location ) {
17701762 return srtp_err_status_bad_mki ;
@@ -1789,6 +1781,46 @@ srtp_err_status_t srtp_get_session_keys_for_packet(
17891781 return srtp_err_status_bad_mki ;
17901782}
17911783
1784+ static srtp_err_status_t srtp_get_session_keys_for_rtp_packet (
1785+ srtp_stream_ctx_t * stream ,
1786+ const uint8_t * hdr ,
1787+ size_t pkt_octet_len ,
1788+ srtp_session_keys_t * * session_keys )
1789+ {
1790+ size_t tag_len = 0 ;
1791+
1792+ // Determine the authentication tag size
1793+ if (stream -> session_keys [0 ].rtp_cipher -> algorithm == SRTP_AES_GCM_128 ||
1794+ stream -> session_keys [0 ].rtp_cipher -> algorithm == SRTP_AES_GCM_256 ) {
1795+ tag_len = 0 ;
1796+ } else {
1797+ tag_len = srtp_auth_get_tag_length (stream -> session_keys [0 ].rtp_auth );
1798+ }
1799+
1800+ return srtp_get_session_keys_for_packet (stream , hdr , pkt_octet_len , tag_len ,
1801+ session_keys );
1802+ }
1803+
1804+ static srtp_err_status_t srtp_get_session_keys_for_rtcp_packet (
1805+ srtp_stream_ctx_t * stream ,
1806+ const uint8_t * hdr ,
1807+ size_t pkt_octet_len ,
1808+ srtp_session_keys_t * * session_keys )
1809+ {
1810+ size_t tag_len = 0 ;
1811+
1812+ // Determine the authentication tag size
1813+ if (stream -> session_keys [0 ].rtcp_cipher -> algorithm == SRTP_AES_GCM_128 ||
1814+ stream -> session_keys [0 ].rtcp_cipher -> algorithm == SRTP_AES_GCM_256 ) {
1815+ tag_len = 0 ;
1816+ } else {
1817+ tag_len = srtp_auth_get_tag_length (stream -> session_keys [0 ].rtcp_auth );
1818+ }
1819+
1820+ return srtp_get_session_keys_for_packet (stream , hdr , pkt_octet_len , tag_len ,
1821+ session_keys );
1822+ }
1823+
17921824static srtp_err_status_t srtp_estimate_index (srtp_rdbx_t * rdbx ,
17931825 uint32_t roc ,
17941826 srtp_xtd_seq_num_t * est ,
@@ -2590,8 +2622,8 @@ srtp_err_status_t srtp_unprotect(srtp_t ctx,
25902622 debug_print (mod_srtp , "estimated u_packet index: %016" PRIx64 , est );
25912623
25922624 /* Determine if MKI is being used and what session keys should be used */
2593- status =
2594- srtp_get_session_keys_for_packet ( stream , srtp , srtp_len , & session_keys );
2625+ status = srtp_get_session_keys_for_rtp_packet ( stream , srtp , srtp_len ,
2626+ & session_keys );
25952627 if (status ) {
25962628 return status ;
25972629 }
@@ -4267,8 +4299,8 @@ srtp_err_status_t srtp_unprotect_rtcp(srtp_t ctx,
42674299 /*
42684300 * Determine if MKI is being used and what session keys should be used
42694301 */
4270- status = srtp_get_session_keys_for_packet (stream , srtcp , srtcp_len ,
4271- & session_keys );
4302+ status = srtp_get_session_keys_for_rtcp_packet (stream , srtcp , srtcp_len ,
4303+ & session_keys );
42724304 if (status ) {
42734305 return status ;
42744306 }
0 commit comments