Skip to content
体验新版
项目
组织
正在加载...
登录
切换导航
打开侧边栏
小白菜888
Ffmpeg
提交
c2603aa2
F
Ffmpeg
项目概览
小白菜888
/
Ffmpeg
通知
3
Star
0
Fork
0
代码
文件
提交
分支
Tags
贡献者
分支图
Diff
Issue
0
列表
看板
标记
里程碑
合并请求
0
DevOps
流水线
流水线任务
计划
Wiki
0
Wiki
分析
仓库
DevOps
项目成员
Pages
F
Ffmpeg
项目概览
项目概览
详情
发布
仓库
仓库
文件
提交
分支
标签
贡献者
分支图
比较
Issue
0
Issue
0
列表
看板
标记
里程碑
合并请求
0
合并请求
0
Pages
DevOps
DevOps
流水线
流水线任务
计划
分析
分析
仓库分析
DevOps
Wiki
0
Wiki
成员
成员
收起侧边栏
关闭侧边栏
动态
分支图
创建新Issue
流水线任务
提交
Issue看板
体验新版 GitCode,发现更多精彩内容 >>
提交
c2603aa2
编写于
1月 15, 2013
作者:
M
Martin Storsjö
浏览文件
操作
浏览文件
下载
电子邮件补丁
差异文件
lavf: Add a fate test for the SRTP functions
Signed-off-by:
N
Martin Storsjö
<
martin@martin.st
>
上级
3130fa51
变更
4
隐藏空白更改
内联
并排
Showing
4 changed file
with
142 addition
and
0 deletion
+142
-0
libavformat/Makefile
libavformat/Makefile
+1
-0
libavformat/srtp.c
libavformat/srtp.c
+129
-0
tests/fate/libavformat.mak
tests/fate/libavformat.mak
+4
-0
tests/ref/fate/srtp
tests/ref/fate/srtp
+8
-0
未找到文件。
libavformat/Makefile
浏览文件 @
c2603aa2
...
...
@@ -379,6 +379,7 @@ EXAMPLES = metadata \
output
\
TESTPROGS
=
seek
\
srtp
\
url
\
TOOLS
=
aviocat
\
...
...
libavformat/srtp.c
浏览文件 @
c2603aa2
...
...
@@ -291,3 +291,132 @@ int ff_srtp_encrypt(struct SRTPContext *s, const uint8_t *in, int len,
len
+=
s
->
hmac_size
;
return
buf
+
len
-
out
;
}
#ifdef TEST
#include <stdio.h>
static
const
char
*
aes128_80_key
=
"ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmn"
;
static
const
uint8_t
rtp_aes128_80
[]
=
{
// RTP header
0x80
,
0xe0
,
0x12
,
0x34
,
0x12
,
0x34
,
0x56
,
0x78
,
0x12
,
0x34
,
0x56
,
0x78
,
// encrypted payload
0x62
,
0x69
,
0x76
,
0xca
,
0xc5
,
// HMAC
0xa1
,
0xac
,
0x1b
,
0xb4
,
0xa0
,
0x1c
,
0xd5
,
0x49
,
0x28
,
0x99
,
};
static
const
uint8_t
rtcp_aes128_80
[]
=
{
// RTCP header
0x81
,
0xc9
,
0x00
,
0x07
,
0x12
,
0x34
,
0x56
,
0x78
,
// encrypted payload
0x8a
,
0xac
,
0xdc
,
0xa5
,
0x4c
,
0xf6
,
0x78
,
0xa6
,
0x62
,
0x8f
,
0x24
,
0xda
,
0x6c
,
0x09
,
0x3f
,
0xa9
,
0x28
,
0x7a
,
0xb5
,
0x7f
,
0x1f
,
0x0f
,
0xc9
,
0x35
,
// RTCP index
0x80
,
0x00
,
0x00
,
0x03
,
// HMAC
0xe9
,
0x3b
,
0xc0
,
0x5c
,
0x0c
,
0x06
,
0x9f
,
0xab
,
0xc0
,
0xde
,
};
static
const
char
*
aes128_32_key
=
"ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmn"
;
static
const
uint8_t
rtp_aes128_32
[]
=
{
// RTP header
0x80
,
0xe0
,
0x12
,
0x34
,
0x12
,
0x34
,
0x56
,
0x78
,
0x12
,
0x34
,
0x56
,
0x78
,
// encrypted payload
0x62
,
0x69
,
0x76
,
0xca
,
0xc5
,
// HMAC
0xa1
,
0xac
,
0x1b
,
0xb4
,
};
static
const
uint8_t
rtcp_aes128_32
[]
=
{
// RTCP header
0x81
,
0xc9
,
0x00
,
0x07
,
0x12
,
0x34
,
0x56
,
0x78
,
// encrypted payload
0x35
,
0xe9
,
0xb5
,
0xff
,
0x0d
,
0xd1
,
0xde
,
0x70
,
0x74
,
0x10
,
0xaa
,
0x1b
,
0xb2
,
0x8d
,
0xf0
,
0x20
,
0x02
,
0x99
,
0x6b
,
0x1b
,
0x0b
,
0xd0
,
0x47
,
0x34
,
// RTCP index
0x80
,
0x00
,
0x00
,
0x04
,
// HMAC
0x5b
,
0xd2
,
0xa9
,
0x9d
,
};
static
void
print_data
(
const
uint8_t
*
buf
,
int
len
)
{
int
i
;
for
(
i
=
0
;
i
<
len
;
i
++
)
printf
(
"%02x"
,
buf
[
i
]);
printf
(
"
\n
"
);
}
static
int
test_decrypt
(
struct
SRTPContext
*
srtp
,
const
uint8_t
*
in
,
int
len
,
uint8_t
*
out
)
{
memcpy
(
out
,
in
,
len
);
if
(
!
ff_srtp_decrypt
(
srtp
,
out
,
&
len
))
{
print_data
(
out
,
len
);
return
len
;
}
else
return
-
1
;
}
static
void
test_encrypt
(
const
uint8_t
*
data
,
int
in_len
,
const
char
*
suite
,
const
char
*
key
)
{
struct
SRTPContext
enc
=
{
0
},
dec
=
{
0
};
int
len
;
char
buf
[
1500
];
ff_srtp_set_crypto
(
&
enc
,
suite
,
key
);
ff_srtp_set_crypto
(
&
dec
,
suite
,
key
);
len
=
ff_srtp_encrypt
(
&
enc
,
data
,
in_len
,
buf
,
sizeof
(
buf
));
if
(
!
ff_srtp_decrypt
(
&
dec
,
buf
,
&
len
))
{
if
(
len
==
in_len
&&
!
memcmp
(
buf
,
data
,
len
))
printf
(
"Decrypted content matches input
\n
"
);
else
printf
(
"Decrypted content doesn't match input
\n
"
);
}
else
{
printf
(
"Decryption failed
\n
"
);
}
ff_srtp_free
(
&
enc
);
ff_srtp_free
(
&
dec
);
}
int
main
(
void
)
{
static
const
char
*
aes128_80_suite
=
"AES_CM_128_HMAC_SHA1_80"
;
static
const
char
*
aes128_32_suite
=
"AES_CM_128_HMAC_SHA1_32"
;
static
const
char
*
test_key
=
"abcdefghijklmnopqrstuvwxyz1234567890ABCD"
;
uint8_t
buf
[
1500
];
struct
SRTPContext
srtp
=
{
0
};
int
len
;
ff_srtp_set_crypto
(
&
srtp
,
aes128_80_suite
,
aes128_80_key
);
len
=
test_decrypt
(
&
srtp
,
rtp_aes128_80
,
sizeof
(
rtp_aes128_80
),
buf
);
test_encrypt
(
buf
,
len
,
aes128_80_suite
,
test_key
);
test_encrypt
(
buf
,
len
,
aes128_32_suite
,
test_key
);
test_decrypt
(
&
srtp
,
rtcp_aes128_80
,
sizeof
(
rtcp_aes128_80
),
buf
);
test_encrypt
(
buf
,
len
,
aes128_80_suite
,
test_key
);
test_encrypt
(
buf
,
len
,
aes128_32_suite
,
test_key
);
ff_srtp_free
(
&
srtp
);
memset
(
&
srtp
,
0
,
sizeof
(
srtp
));
// Clear the context
ff_srtp_set_crypto
(
&
srtp
,
aes128_32_suite
,
aes128_32_key
);
test_decrypt
(
&
srtp
,
rtp_aes128_32
,
sizeof
(
rtp_aes128_32
),
buf
);
test_decrypt
(
&
srtp
,
rtcp_aes128_32
,
sizeof
(
rtcp_aes128_32
),
buf
);
ff_srtp_free
(
&
srtp
);
return
0
;
}
#endif
/* TEST */
tests/fate/libavformat.mak
浏览文件 @
c2603aa2
FATE_LIBAVFORMAT
+=
fate-srtp
fate-srtp
:
libavformat/srtp-test$(EXESUF)
fate-srtp
:
CMD = run libavformat/srtp-test
FATE_LIBAVFORMAT
+=
fate-url
fate-url
:
libavformat/url-test$(EXESUF)
fate-url
:
CMD = run libavformat/url-test
...
...
tests/ref/fate/srtp
0 → 100644
浏览文件 @
c2603aa2
80e0123412345678123456780102030405
Decrypted content matches input
Decrypted content matches input
81c90007123456788765432100000000000012340000069ec73069ba000001fd
Decrypted content matches input
Decrypted content matches input
80e0123412345678123456780102030405
81c90007123456788765432100000000000012340000069ec73069ba000001fd
编辑
预览
Markdown
is supported
0%
请重试
或
添加新附件
.
添加附件
取消
You are about to add
0
people
to the discussion. Proceed with caution.
先完成此消息的编辑!
取消
想要评论请
注册
或
登录