Skip to content
体验新版
项目
组织
正在加载...
登录
切换导航
打开侧边栏
OpenHarmony
Third Party Openssl
提交
cdfe0fdd
T
Third Party Openssl
项目概览
OpenHarmony
/
Third Party Openssl
1 年多 前同步成功
通知
9
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看板
提交
cdfe0fdd
编写于
10月 13, 2011
作者:
B
Bodo Möller
浏览文件
操作
浏览文件
下载
电子邮件补丁
差异文件
Fix OPENSSL_BN_ASM_MONT5 for corner cases; add a test.
Submitted by: Emilia Kasper
上级
59365214
变更
3
隐藏空白更改
内联
并排
Showing
3 changed file
with
98 addition
and
4 deletion
+98
-4
crypto/bn/asm/x86_64-mont5.pl
crypto/bn/asm/x86_64-mont5.pl
+3
-0
crypto/bn/bn_exp.c
crypto/bn/bn_exp.c
+18
-4
crypto/bn/bntest.c
crypto/bn/bntest.c
+77
-0
未找到文件。
crypto/bn/asm/x86_64-mont5.pl
浏览文件 @
cdfe0fdd
...
...
@@ -836,6 +836,8 @@ $code.=<<___;
.type bn_scatter5,\@abi-omnipotent
.align 16
bn_scatter5:
cmp \$0, $num
jz .Lscatter_epilogue
lea ($tbl,$idx,8),$tbl
.Lscatter:
mov ($inp),%rax
...
...
@@ -844,6 +846,7 @@ bn_scatter5:
lea 32*8($tbl),$tbl
sub \$1,$num
jnz .Lscatter
.Lscatter_epilogue:
ret
.size bn_scatter5,.-bn_scatter5
___
...
...
crypto/bn/bn_exp.c
浏览文件 @
cdfe0fdd
...
...
@@ -693,9 +693,6 @@ int BN_mod_exp_mont_consttime(BIGNUM *rr, const BIGNUM *a, const BIGNUM *p,
if
(
!
BN_copy
(
&
computeTemp
,
am
))
goto
err
;
if
(
bn_wexpand
(
am
,
top
)
==
NULL
||
bn_wexpand
(
r
,
top
)
==
NULL
)
goto
err
;
#if defined(OPENSSL_BN_ASM_MONT5)
/* This optimization uses ideas from http://eprint.iacr.org/2011/239,
* specifically optimization of cache-timing attack countermeasures
...
...
@@ -717,6 +714,24 @@ int BN_mod_exp_mont_consttime(BIGNUM *rr, const BIGNUM *a, const BIGNUM *p,
bn_scatter5
(
am
->
d
,
am
->
top
,
powerbuf
,
1
);
acc
=
computeTemp
.
d
;
/* bn_mul_mont() and bn_mul_mont_gather5() assume fixed length inputs.
* Pad the inputs with zeroes.
*/
if
(
bn_wexpand
(
am
,
top
)
==
NULL
||
bn_wexpand
(
r
,
top
)
==
NULL
||
bn_wexpand
(
&
computeTemp
,
top
)
==
NULL
)
goto
err
;
for
(
i
=
am
->
top
;
i
<
top
;
++
i
)
{
am
->
d
[
i
]
=
0
;
}
for
(
i
=
computeTemp
.
top
;
i
<
top
;
++
i
)
{
computeTemp
.
d
[
i
]
=
0
;
}
for
(
i
=
r
->
top
;
i
<
top
;
++
i
)
{
r
->
d
[
i
]
=
0
;
}
#if 0
for (i=2; i<32; i++)
{
...
...
@@ -1102,4 +1117,3 @@ err:
bn_check_top
(
r
);
return
(
ret
);
}
crypto/bn/bntest.c
浏览文件 @
cdfe0fdd
...
...
@@ -107,6 +107,7 @@ int test_mod(BIO *bp,BN_CTX *ctx);
int
test_mod_mul
(
BIO
*
bp
,
BN_CTX
*
ctx
);
int
test_mod_exp
(
BIO
*
bp
,
BN_CTX
*
ctx
);
int
test_mod_exp_mont_consttime
(
BIO
*
bp
,
BN_CTX
*
ctx
);
int
test_mod_exp_mont5
(
BIO
*
bp
,
BN_CTX
*
ctx
);
int
test_exp
(
BIO
*
bp
,
BN_CTX
*
ctx
);
int
test_gf2m_add
(
BIO
*
bp
);
int
test_gf2m_mod
(
BIO
*
bp
);
...
...
@@ -249,6 +250,7 @@ int main(int argc, char *argv[])
message
(
out
,
"BN_mod_exp_mont_consttime"
);
if
(
!
test_mod_exp_mont_consttime
(
out
,
ctx
))
goto
err
;
if
(
!
test_mod_exp_mont5
(
out
,
ctx
))
goto
err
;
(
void
)
BIO_flush
(
out
);
message
(
out
,
"BN_exp"
);
...
...
@@ -1012,6 +1014,81 @@ int test_mod_exp_mont_consttime(BIO *bp, BN_CTX *ctx)
return
(
1
);
}
/* Test constant-time modular exponentiation with 1024-bit inputs,
* which on x86_64 cause a different code branch to be taken.
*/
int
test_mod_exp_mont5
(
BIO
*
bp
,
BN_CTX
*
ctx
)
{
BIGNUM
*
a
,
*
p
,
*
m
,
*
d
,
*
e
;
int
i
;
BN_MONT_CTX
*
mont
;
a
=
BN_new
();
p
=
BN_new
();
m
=
BN_new
();
d
=
BN_new
();
e
=
BN_new
();
mont
=
BN_MONT_CTX_new
();
BN_bntest_rand
(
m
,
1024
,
0
,
1
);
/* must be odd for montgomery */
/* Zero exponent */
BN_bntest_rand
(
a
,
1024
,
0
,
0
);
BN_zero
(
p
);
if
(
!
BN_mod_exp_mont_consttime
(
d
,
a
,
p
,
m
,
ctx
,
NULL
))
return
0
;
if
(
!
BN_is_one
(
d
))
{
fprintf
(
stderr
,
"Modular exponentiation test failed!
\n
"
);
return
0
;
}
/* Zero input */
BN_bntest_rand
(
p
,
1024
,
0
,
0
);
BN_zero
(
a
);
if
(
!
BN_mod_exp_mont_consttime
(
d
,
a
,
p
,
m
,
ctx
,
NULL
))
return
0
;
if
(
!
BN_is_zero
(
d
))
{
fprintf
(
stderr
,
"Modular exponentiation test failed!
\n
"
);
return
0
;
}
/* Craft an input whose Montgomery representation is 1,
* i.e., shorter than the modulus m, in order to test
* the const time precomputation scattering/gathering.
*/
BN_one
(
a
);
BN_MONT_CTX_set
(
mont
,
m
,
ctx
);
if
(
!
BN_from_montgomery
(
e
,
a
,
mont
,
ctx
))
return
0
;
if
(
!
BN_mod_exp_mont_consttime
(
d
,
e
,
p
,
m
,
ctx
,
NULL
))
return
0
;
if
(
!
BN_mod_exp_simple
(
a
,
e
,
p
,
m
,
ctx
))
return
0
;
if
(
BN_cmp
(
a
,
d
)
!=
0
)
{
fprintf
(
stderr
,
"Modular exponentiation test failed!
\n
"
);
return
0
;
}
/* Finally, some regular test vectors. */
BN_bntest_rand
(
e
,
1024
,
0
,
0
);
if
(
!
BN_mod_exp_mont_consttime
(
d
,
e
,
p
,
m
,
ctx
,
NULL
))
return
0
;
if
(
!
BN_mod_exp_simple
(
a
,
e
,
p
,
m
,
ctx
))
return
0
;
if
(
BN_cmp
(
a
,
d
)
!=
0
)
{
fprintf
(
stderr
,
"Modular exponentiation test failed!
\n
"
);
return
0
;
}
BN_free
(
a
);
BN_free
(
p
);
BN_free
(
m
);
BN_free
(
d
);
BN_free
(
e
);
return
(
1
);
}
int
test_exp
(
BIO
*
bp
,
BN_CTX
*
ctx
)
{
BIGNUM
*
a
,
*
b
,
*
d
,
*
e
,
*
one
;
...
...
编辑
预览
Markdown
is supported
0%
请重试
或
添加新附件
.
添加附件
取消
You are about to add
0
people
to the discussion. Proceed with caution.
先完成此消息的编辑!
取消
想要评论请
注册
或
登录