Skip to content
体验新版
项目
组织
正在加载...
登录
切换导航
打开侧边栏
OpenHarmony
Third Party Openssl
提交
cbce8c46
T
Third Party Openssl
项目概览
OpenHarmony
/
Third Party Openssl
1 年多 前同步成功
通知
10
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看板
提交
cbce8c46
编写于
7月 05, 2013
作者:
A
Andy Polyakov
浏览文件
操作
浏览文件
下载
电子邮件补丁
差异文件
bn/bn_exp.c: harmonize.
上级
3d7bf77f
变更
1
隐藏空白更改
内联
并排
Showing
1 changed file
with
28 addition
and
19 deletion
+28
-19
crypto/bn/bn_exp.c
crypto/bn/bn_exp.c
+28
-19
未找到文件。
crypto/bn/bn_exp.c
浏览文件 @
cbce8c46
...
@@ -128,9 +128,11 @@
...
@@ -128,9 +128,11 @@
# include <alloca.h>
# include <alloca.h>
#endif
#endif
#undef SPARC_T4_MONT
#if defined(OPENSSL_BN_ASM_MONT) && (defined(__sparc__) || defined(__sparc))
#if defined(OPENSSL_BN_ASM_MONT) && (defined(__sparc__) || defined(__sparc))
# include "sparc_arch.h"
# include "sparc_arch.h"
extern
unsigned
int
OPENSSL_sparcv9cap_P
[];
extern
unsigned
int
OPENSSL_sparcv9cap_P
[];
# define SPARC_T4_MONT
#endif
#endif
/* maximum precomputation table size for *variable* sliding windows */
/* maximum precomputation table size for *variable* sliding windows */
...
@@ -476,14 +478,18 @@ int BN_mod_exp_mont(BIGNUM *rr, const BIGNUM *a, const BIGNUM *p,
...
@@ -476,14 +478,18 @@ int BN_mod_exp_mont(BIGNUM *rr, const BIGNUM *a, const BIGNUM *p,
wend
=
0
;
/* The bottom bit of the window */
wend
=
0
;
/* The bottom bit of the window */
#if 1
/* by Shay Gueron's suggestion */
#if 1
/* by Shay Gueron's suggestion */
j
=
mont
->
N
.
top
;
/* borrow j */
j
=
m
->
top
;
/* borrow j */
if
(
bn_wexpand
(
r
,
j
)
==
NULL
)
goto
err
;
if
(
m
->
d
[
j
-
1
]
&
(((
BN_ULONG
)
1
)
<<
(
BN_BITS2
-
1
)))
r
->
d
[
0
]
=
(
0
-
m
->
d
[
0
])
&
BN_MASK2
;
/* 2^(top*BN_BITS2) - m */
{
for
(
i
=
1
;
i
<
j
;
i
++
)
r
->
d
[
i
]
=
(
~
m
->
d
[
i
])
&
BN_MASK2
;
if
(
bn_wexpand
(
r
,
j
)
==
NULL
)
goto
err
;
r
->
top
=
j
;
/* 2^(top*BN_BITS2) - m */
#else
r
->
d
[
0
]
=
(
0
-
m
->
d
[
0
])
&
BN_MASK2
;
if
(
!
BN_to_montgomery
(
r
,
BN_value_one
(),
mont
,
ctx
))
goto
err
;
for
(
i
=
1
;
i
<
j
;
i
++
)
r
->
d
[
i
]
=
(
~
m
->
d
[
i
])
&
BN_MASK2
;
r
->
top
=
j
;
}
else
#endif
#endif
if
(
!
BN_to_montgomery
(
r
,
BN_value_one
(),
mont
,
ctx
))
goto
err
;
for
(;;)
for
(;;)
{
{
if
(
BN_is_bit_set
(
p
,
wstart
)
==
0
)
if
(
BN_is_bit_set
(
p
,
wstart
)
==
0
)
...
@@ -535,7 +541,7 @@ int BN_mod_exp_mont(BIGNUM *rr, const BIGNUM *a, const BIGNUM *p,
...
@@ -535,7 +541,7 @@ int BN_mod_exp_mont(BIGNUM *rr, const BIGNUM *a, const BIGNUM *p,
start
=
0
;
start
=
0
;
if
(
wstart
<
0
)
break
;
if
(
wstart
<
0
)
break
;
}
}
#if defined(
OPENSSL_BN_ASM_MONT) && (defined(__sparc__) || defined(__sparc)
)
#if defined(
SPARC_T4_MONT
)
if
(
OPENSSL_sparcv9cap_P
[
0
]
&
(
SPARCV9_VIS3
|
SPARCV9_PREFER_FPU
))
if
(
OPENSSL_sparcv9cap_P
[
0
]
&
(
SPARCV9_VIS3
|
SPARCV9_PREFER_FPU
))
{
{
j
=
mont
->
N
.
top
;
/* borrow j */
j
=
mont
->
N
.
top
;
/* borrow j */
...
@@ -555,7 +561,7 @@ err:
...
@@ -555,7 +561,7 @@ err:
return
(
ret
);
return
(
ret
);
}
}
#if defined(
OPENSSL_BN_ASM_MONT) && (defined(__sparc__) || defined(__sparc)
)
#if defined(
SPARC_T4_MONT
)
static
BN_ULONG
bn_get_bits
(
const
BIGNUM
*
a
,
int
bitpos
)
static
BN_ULONG
bn_get_bits
(
const
BIGNUM
*
a
,
int
bitpos
)
{
{
BN_ULONG
ret
=
0
;
BN_ULONG
ret
=
0
;
...
@@ -636,7 +642,7 @@ int BN_mod_exp_mont_consttime(BIGNUM *rr, const BIGNUM *a, const BIGNUM *p,
...
@@ -636,7 +642,7 @@ int BN_mod_exp_mont_consttime(BIGNUM *rr, const BIGNUM *a, const BIGNUM *p,
int
powerbufLen
=
0
;
int
powerbufLen
=
0
;
unsigned
char
*
powerbuf
=
NULL
;
unsigned
char
*
powerbuf
=
NULL
;
BIGNUM
tmp
,
am
;
BIGNUM
tmp
,
am
;
#if defined(
OPENSSL_BN_ASM_MONT) && (defined(__sparc__) || defined(__sparc)
)
#if defined(
SPARC_T4_MONT
)
unsigned
int
t4
=
0
;
unsigned
int
t4
=
0
;
#endif
#endif
...
@@ -673,7 +679,7 @@ int BN_mod_exp_mont_consttime(BIGNUM *rr, const BIGNUM *a, const BIGNUM *p,
...
@@ -673,7 +679,7 @@ int BN_mod_exp_mont_consttime(BIGNUM *rr, const BIGNUM *a, const BIGNUM *p,
/* Get the window size to use with size of p. */
/* Get the window size to use with size of p. */
window
=
BN_window_bits_for_ctime_exponent_size
(
bits
);
window
=
BN_window_bits_for_ctime_exponent_size
(
bits
);
#if defined(
OPENSSL_BN_ASM_MONT) && (defined(__sparc__) || defined(__sparc)
)
#if defined(
SPARC_T4_MONT
)
if
(
window
>=
5
&&
(
top
&
15
)
==
0
&&
top
<=
64
&&
if
(
window
>=
5
&&
(
top
&
15
)
==
0
&&
top
<=
64
&&
(
OPENSSL_sparcv9cap_P
[
1
]
&
(
CFR_MONTMUL
|
CFR_MONTSQR
))
==
(
OPENSSL_sparcv9cap_P
[
1
]
&
(
CFR_MONTMUL
|
CFR_MONTSQR
))
==
(
CFR_MONTMUL
|
CFR_MONTSQR
)
&&
(
CFR_MONTMUL
|
CFR_MONTSQR
)
&&
...
@@ -718,13 +724,16 @@ int BN_mod_exp_mont_consttime(BIGNUM *rr, const BIGNUM *a, const BIGNUM *p,
...
@@ -718,13 +724,16 @@ int BN_mod_exp_mont_consttime(BIGNUM *rr, const BIGNUM *a, const BIGNUM *p,
/* prepare a^0 in Montgomery domain */
/* prepare a^0 in Montgomery domain */
#if 1
/* by Shay Gueron's suggestion */
#if 1
/* by Shay Gueron's suggestion */
tmp
.
d
[
0
]
=
(
0
-
m
->
d
[
0
])
&
BN_MASK2
;
/* 2^(top*BN_BITS2) - m */
if
(
m
->
d
[
top
-
1
]
&
(((
BN_ULONG
)
1
)
<<
(
BN_BITS2
-
1
)))
for
(
i
=
1
;
i
<
top
;
i
++
)
{
tmp
.
d
[
i
]
=
(
~
m
->
d
[
i
])
&
BN_MASK2
;
/* 2^(top*BN_BITS2) - m */
tmp
.
top
=
top
;
tmp
.
d
[
0
]
=
(
0
-
m
->
d
[
0
])
&
BN_MASK2
;
#else
for
(
i
=
1
;
i
<
top
;
i
++
)
tmp
.
d
[
i
]
=
(
~
m
->
d
[
i
])
&
BN_MASK2
;
if
(
!
BN_to_montgomery
(
&
tmp
,
BN_value_one
(),
mont
,
ctx
))
goto
err
;
tmp
.
top
=
top
;
}
else
#endif
#endif
if
(
!
BN_to_montgomery
(
&
tmp
,
BN_value_one
(),
mont
,
ctx
))
goto
err
;
/* prepare a^1 in Montgomery domain */
/* prepare a^1 in Montgomery domain */
if
(
a
->
neg
||
BN_ucmp
(
a
,
m
)
>=
0
)
if
(
a
->
neg
||
BN_ucmp
(
a
,
m
)
>=
0
)
...
@@ -734,7 +743,7 @@ int BN_mod_exp_mont_consttime(BIGNUM *rr, const BIGNUM *a, const BIGNUM *p,
...
@@ -734,7 +743,7 @@ int BN_mod_exp_mont_consttime(BIGNUM *rr, const BIGNUM *a, const BIGNUM *p,
}
}
else
if
(
!
BN_to_montgomery
(
&
am
,
a
,
mont
,
ctx
))
goto
err
;
else
if
(
!
BN_to_montgomery
(
&
am
,
a
,
mont
,
ctx
))
goto
err
;
#if defined(
OPENSSL_BN_ASM_MONT) && (defined(__sparc__) || defined(__sparc)
)
#if defined(
SPARC_T4_MONT
)
if
(
t4
)
if
(
t4
)
{
{
typedef
int
(
*
bn_pwr5_mont_f
)(
BN_ULONG
*
tp
,
const
BN_ULONG
*
np
,
typedef
int
(
*
bn_pwr5_mont_f
)(
BN_ULONG
*
tp
,
const
BN_ULONG
*
np
,
...
@@ -992,7 +1001,7 @@ int BN_mod_exp_mont_consttime(BIGNUM *rr, const BIGNUM *a, const BIGNUM *p,
...
@@ -992,7 +1001,7 @@ int BN_mod_exp_mont_consttime(BIGNUM *rr, const BIGNUM *a, const BIGNUM *p,
}
}
/* Convert the final result from montgomery to standard format */
/* Convert the final result from montgomery to standard format */
#if defined(
OPENSSL_BN_ASM_MONT) && (defined(__sparc__) || defined(__sparc)
)
#if defined(
SPARC_T4_MONT
)
if
(
OPENSSL_sparcv9cap_P
[
0
]
&
(
SPARCV9_VIS3
|
SPARCV9_PREFER_FPU
))
if
(
OPENSSL_sparcv9cap_P
[
0
]
&
(
SPARCV9_VIS3
|
SPARCV9_PREFER_FPU
))
{
{
am
.
d
[
0
]
=
1
;
/* borrow am */
am
.
d
[
0
]
=
1
;
/* borrow am */
...
...
编辑
预览
Markdown
is supported
0%
请重试
或
添加新附件
.
添加附件
取消
You are about to add
0
people
to the discussion. Proceed with caution.
先完成此消息的编辑!
取消
想要评论请
注册
或
登录