Skip to content
体验新版
项目
组织
正在加载...
登录
切换导航
打开侧边栏
OpenHarmony
Third Party Openssl
提交
ea8c77a5
T
Third Party Openssl
项目概览
OpenHarmony
/
Third Party Openssl
8 个月 前同步成功
通知
8
Star
18
Fork
1
代码
文件
提交
分支
Tags
贡献者
分支图
Diff
Issue
0
列表
看板
标记
里程碑
合并请求
0
Wiki
0
Wiki
分析
仓库
DevOps
项目成员
Pages
T
Third Party Openssl
项目概览
项目概览
详情
发布
仓库
仓库
文件
提交
分支
标签
贡献者
分支图
比较
Issue
0
Issue
0
列表
看板
标记
里程碑
合并请求
0
合并请求
0
Pages
分析
分析
仓库分析
DevOps
Wiki
0
Wiki
成员
成员
收起侧边栏
关闭侧边栏
动态
分支图
创建新Issue
提交
Issue看板
前往新版Gitcode,体验更适合开发者的 AI 搜索 >>
提交
ea8c77a5
编写于
12月 02, 2011
作者:
B
Bodo Möller
浏览文件
操作
浏览文件
下载
电子邮件补丁
差异文件
Fix ecdsatest.c.
Submitted by: Emilia Kasper
上级
a7c71d89
变更
2
隐藏空白更改
内联
并排
Showing
2 changed file
with
84 addition
and
7 deletion
+84
-7
CHANGES
CHANGES
+6
-0
crypto/ecdsa/ecdsatest.c
crypto/ecdsa/ecdsatest.c
+78
-7
未找到文件。
CHANGES
浏览文件 @
ea8c77a5
...
...
@@ -487,6 +487,9 @@
Changes between 1.0.0e and 1.0.0f [xx XXX xxxx]
*) Fix spurious failures in ecdsatest.c.
[Emilia Käsper (Google)]
*) Fix the BIO_f_buffer() implementation (which was mixing different
interpretations of the '..._len' fields).
[Adam Langley (Google)]
...
...
@@ -1411,6 +1414,9 @@
Changes between 0.9.8r and 0.9.8s [xx XXX xxxx]
*) Fix spurious failures in ecdsatest.c.
[Emilia Käsper (Google)]
*) Fix the BIO_f_buffer() implementation (which was mixing different
interpretations of the '..._len' fields).
[Adam Langley (Google)]
...
...
crypto/ecdsa/ecdsatest.c
浏览文件 @
ea8c77a5
...
...
@@ -295,9 +295,12 @@ int test_builtin(BIO *out)
size_t
crv_len
=
0
,
n
=
0
;
EC_KEY
*
eckey
=
NULL
,
*
wrong_eckey
=
NULL
;
EC_GROUP
*
group
;
ECDSA_SIG
*
ecdsa_sig
=
NULL
;
unsigned
char
digest
[
20
],
wrong_digest
[
20
];
unsigned
char
*
signature
=
NULL
;
unsigned
int
sig_len
;
unsigned
char
*
signature
=
NULL
;
unsigned
char
*
sig_ptr
;
unsigned
char
*
raw_buf
=
NULL
;
unsigned
int
sig_len
,
degree
,
r_len
,
s_len
,
bn_len
,
buf_len
;
int
nid
,
ret
=
0
;
/* fill digest values with some random data */
...
...
@@ -347,7 +350,8 @@ int test_builtin(BIO *out)
if
(
EC_KEY_set_group
(
eckey
,
group
)
==
0
)
goto
builtin_err
;
EC_GROUP_free
(
group
);
if
(
EC_GROUP_get_degree
(
EC_KEY_get0_group
(
eckey
))
<
160
)
degree
=
EC_GROUP_get_degree
(
EC_KEY_get0_group
(
eckey
));
if
(
degree
<
160
)
/* drop the curve */
{
EC_KEY_free
(
eckey
);
...
...
@@ -423,26 +427,89 @@ int test_builtin(BIO *out)
}
BIO_printf
(
out
,
"."
);
(
void
)
BIO_flush
(
out
);
/* modify a single byte of the signature */
offset
=
signature
[
10
]
%
sig_len
;
dirt
=
signature
[
11
];
signature
[
offset
]
^=
dirt
?
dirt
:
1
;
/* wrong length */
if
(
ECDSA_verify
(
0
,
digest
,
20
,
signature
,
sig_len
-
1
,
eckey
)
==
1
)
{
BIO_printf
(
out
,
" failed
\n
"
);
goto
builtin_err
;
}
BIO_printf
(
out
,
"."
);
(
void
)
BIO_flush
(
out
);
/* Modify a single byte of the signature: to ensure we don't
* garble the ASN1 structure, we read the raw signature and
* modify a byte in one of the bignums directly. */
sig_ptr
=
signature
;
if
((
ecdsa_sig
=
d2i_ECDSA_SIG
(
NULL
,
&
sig_ptr
,
sig_len
))
==
NULL
)
{
BIO_printf
(
out
,
" failed
\n
"
);
goto
builtin_err
;
}
/* Store the two BIGNUMs in raw_buf. */
r_len
=
BN_num_bytes
(
ecdsa_sig
->
r
);
s_len
=
BN_num_bytes
(
ecdsa_sig
->
s
);
bn_len
=
(
degree
+
7
)
/
8
;
if
((
r_len
>
bn_len
)
||
(
s_len
>
bn_len
))
{
BIO_printf
(
out
,
" failed
\n
"
);
goto
builtin_err
;
}
buf_len
=
2
*
bn_len
;
if
((
raw_buf
=
OPENSSL_malloc
(
buf_len
))
==
NULL
)
goto
builtin_err
;
/* Pad the bignums with leading zeroes. */
memset
(
raw_buf
,
0
,
buf_len
);
BN_bn2bin
(
ecdsa_sig
->
r
,
raw_buf
+
bn_len
-
r_len
);
BN_bn2bin
(
ecdsa_sig
->
s
,
raw_buf
+
buf_len
-
s_len
);
/* Modify a single byte in the buffer. */
offset
=
raw_buf
[
10
]
%
buf_len
;
dirt
=
raw_buf
[
11
]
?
raw_buf
[
11
]
:
1
;
raw_buf
[
offset
]
^=
dirt
;
/* Now read the BIGNUMs back in from raw_buf. */
if
((
BN_bin2bn
(
raw_buf
,
bn_len
,
ecdsa_sig
->
r
)
==
NULL
)
||
(
BN_bin2bn
(
raw_buf
+
bn_len
,
bn_len
,
ecdsa_sig
->
s
)
==
NULL
))
goto
builtin_err
;
sig_ptr
=
signature
;
sig_len
=
i2d_ECDSA_SIG
(
ecdsa_sig
,
&
sig_ptr
);
if
(
ECDSA_verify
(
0
,
digest
,
20
,
signature
,
sig_len
,
eckey
)
==
1
)
{
BIO_printf
(
out
,
" failed
\n
"
);
goto
builtin_err
;
}
/* Sanity check: undo the modification and verify signature. */
raw_buf
[
offset
]
^=
dirt
;
if
((
BN_bin2bn
(
raw_buf
,
bn_len
,
ecdsa_sig
->
r
)
==
NULL
)
||
(
BN_bin2bn
(
raw_buf
+
bn_len
,
bn_len
,
ecdsa_sig
->
s
)
==
NULL
))
goto
builtin_err
;
sig_ptr
=
signature
;
sig_len
=
i2d_ECDSA_SIG
(
ecdsa_sig
,
&
sig_ptr
);
if
(
ECDSA_verify
(
0
,
digest
,
20
,
signature
,
sig_len
,
eckey
)
!=
1
)
{
BIO_printf
(
out
,
" failed
\n
"
);
goto
builtin_err
;
}
BIO_printf
(
out
,
"."
);
(
void
)
BIO_flush
(
out
);
BIO_printf
(
out
,
" ok
\n
"
);
/* cleanup */
/* clean bogus errors */
ERR_clear_error
();
OPENSSL_free
(
signature
);
signature
=
NULL
;
EC_KEY_free
(
eckey
);
eckey
=
NULL
;
EC_KEY_free
(
wrong_eckey
);
wrong_eckey
=
NULL
;
ECDSA_SIG_free
(
ecdsa_sig
);
ecdsa_sig
=
NULL
;
OPENSSL_free
(
raw_buf
);
raw_buf
=
NULL
;
}
ret
=
1
;
...
...
@@ -451,8 +518,12 @@ builtin_err:
EC_KEY_free
(
eckey
);
if
(
wrong_eckey
)
EC_KEY_free
(
wrong_eckey
);
if
(
ecdsa_sig
)
ECDSA_SIG_free
(
ecdsa_sig
);
if
(
signature
)
OPENSSL_free
(
signature
);
if
(
raw_buf
)
OPENSSL_free
(
raw_buf
);
if
(
curves
)
OPENSSL_free
(
curves
);
...
...
编辑
预览
Markdown
is supported
0%
请重试
或
添加新附件
.
添加附件
取消
You are about to add
0
people
to the discussion. Proceed with caution.
先完成此消息的编辑!
取消
想要评论请
注册
或
登录