|
|
|
@ -273,10 +273,22 @@ sub encrypt_rtp { |
|
|
|
$roc = $roc || 0; |
|
|
|
$seq == 0 and $roc++; |
|
|
|
|
|
|
|
my ($exttype, $extlen, $ext) = ('', '', ''); |
|
|
|
print(unpack('H*', $hdr) . "\n"); |
|
|
|
if ((unpack('C', $hdr))[0] & 0x10) { |
|
|
|
# extension |
|
|
|
my $rest; |
|
|
|
($exttype, $extlen, $rest) = unpack('a2a2a*', $to_enc); |
|
|
|
my ($len) = unpack('n', $extlen); |
|
|
|
my $len = $len * 4; |
|
|
|
$ext = substr($rest, 0, $len); |
|
|
|
$to_enc = substr($rest, $len); |
|
|
|
} |
|
|
|
|
|
|
|
my $iv = $$suite{iv_rtp}->($packet, $ssalt, $roc); |
|
|
|
my $enc = $unenc_srtp ? $to_enc : $$suite{enc_func}->($to_enc, $skey, |
|
|
|
$iv, $ssalt); |
|
|
|
my $pkt = pack('a*na*a*', $hdr, $seq, $h2, $enc); |
|
|
|
my $pkt = pack('a*na*a*a*a*a*', $hdr, $seq, $h2, $exttype, $extlen, $ext, $enc); |
|
|
|
|
|
|
|
my $hmac = hmac_sha1($pkt . pack("N", $roc), $sauth); |
|
|
|
# print("HMAC for packet " . unpack("H*", $pkt) . " ROC $roc is " . unpack("H*", $hmac) . "\n"); |
|
|
|
@ -302,10 +314,21 @@ sub decrypt_rtp { |
|
|
|
$roc = $roc || 0; |
|
|
|
$seq == 0 and $roc++; |
|
|
|
|
|
|
|
my ($exttype, $extlen, $ext) = ('', '', ''); |
|
|
|
if ((unpack('C', $hdr))[0] & 0x10) { |
|
|
|
# extension |
|
|
|
my $rest; |
|
|
|
($exttype, $extlen, $rest) = unpack('a2a2a*', $to_enc); |
|
|
|
my ($len) = unpack('n', $extlen); |
|
|
|
my $len = $len * 4; |
|
|
|
$ext = substr($rest, 0, $len); |
|
|
|
$to_enc = substr($rest, $len); |
|
|
|
} |
|
|
|
|
|
|
|
my $iv = $$suite{iv_rtp}->($packet, $ssalt, $roc); |
|
|
|
my $enc = $$suite{enc_func}->($to_enc, $skey, |
|
|
|
$iv, $ssalt); |
|
|
|
my $pkt = pack('a*na*a*', $hdr, $seq, $h2, $enc); |
|
|
|
my $pkt = pack('a*na*a*a*a*a*', $hdr, $seq, $h2, $exttype, $extlen, $ext, $enc); |
|
|
|
|
|
|
|
my $hmac = hmac_sha1($packet . pack("N", $roc), $sauth); |
|
|
|
# print("HMAC for packet " . unpack("H*", $pkt) . " ROC $roc is " . unpack("H*", $hmac) . "\n"); |
|
|
|
|