Skip to content
体验新版
项目
组织
正在加载...
登录
切换导航
打开侧边栏
OpenHarmony
Third Party Openssl
提交
5a12df5c
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看板
提交
5a12df5c
编写于
12月 01, 2000
作者:
B
Bodo Möller
浏览文件
操作
浏览文件
下载
电子邮件补丁
差异文件
functionality for BN_mod_sqrt timings
上级
b5a25a43
变更
1
隐藏空白更改
内联
并排
Showing
1 changed file
with
72 addition
and
30 deletion
+72
-30
crypto/bn/expspeed.c
crypto/bn/expspeed.c
+72
-30
未找到文件。
crypto/bn/expspeed.c
浏览文件 @
5a12df5c
...
...
@@ -60,15 +60,27 @@
/* most of this code has been pilfered from my libdes speed.c program */
#define BASENUM
10
000
#define BASENUM
5
000
#define NUM_START 0
/* determine timings for modexp, gcd, or modular inverse */
#
undef
TEST_EXP
#
define
TEST_EXP
#undef TEST_GCD
#
define
TEST_KRON
#
undef
TEST_KRON
#undef TEST_INV
#undef TEST_SQRT
#define P_MOD_64 9
/* least significant 6 bits for prime to be used for BN_sqrt timings */
#if defined(TEST_EXP) + defined(TEST_GCD) + defined(TEST_KRON) + defined(TEST_INV) +defined(TEST_SQRT) != 1
# error "choose one test"
#endif
#if defined(TEST_INV) || defined(TEST_SQRT)
# define C_PRIME
static
void
genprime_cb
(
int
p
,
int
n
,
void
*
arg
);
#endif
#undef PROG
...
...
@@ -182,20 +194,6 @@ static int mul_c[NUM_SIZES]={8*8*8*8*8*8,8*8*8*8*8,8*8*8*8,8*8*8,8*8,8,1};
#define RAND_SEED(string) { const char str[] = string; RAND_seed(string, sizeof str); }
static
void
genprime_cb
(
int
p
,
int
n
,
void
*
arg
)
{
char
c
=
'*'
;
if
(
p
==
0
)
c
=
'.'
;
if
(
p
==
1
)
c
=
'+'
;
if
(
p
==
2
)
c
=
'*'
;
if
(
p
==
3
)
c
=
'\n'
;
putc
(
c
,
stderr
);
fflush
(
stderr
);
(
void
)
n
;
(
void
)
arg
;
}
void
do_mul_exp
(
BIGNUM
*
r
,
BIGNUM
*
a
,
BIGNUM
*
b
,
BIGNUM
*
c
,
BN_CTX
*
ctx
);
int
main
(
int
argc
,
char
**
argv
)
...
...
@@ -203,6 +201,11 @@ int main(int argc, char **argv)
BN_CTX
*
ctx
;
BIGNUM
*
a
,
*
b
,
*
c
,
*
r
;
#if 1
if
(
!
CRYPTO_set_mem_debug_functions
(
0
,
0
,
0
,
0
,
0
))
abort
();
#endif
ctx
=
BN_CTX_new
();
a
=
BN_new
();
b
=
BN_new
();
...
...
@@ -223,34 +226,48 @@ void do_mul_exp(BIGNUM *r, BIGNUM *a, BIGNUM *b, BIGNUM *c, BN_CTX *ctx)
double
tm
;
long
num
;
#if defined(TEST_EXP) + defined(TEST_GCD) + defined(TEST_KRON) + defined(TEST_INV) != 1
# error "choose one test"
#endif
#ifdef TEST_INV
# define C_PRIME
#endif
num
=
BASENUM
;
for
(
i
=
NUM_START
;
i
<
NUM_SIZES
;
i
++
)
{
#ifdef C_PRIME
if
(
!
BN_generate_prime
(
c
,
sizes
[
i
],
0
,
NULL
,
NULL
,
genprime_cb
,
NULL
))
goto
err
;
# ifdef TEST_SQRT
if
(
!
BN_set_word
(
a
,
64
))
goto
err
;
if
(
!
BN_set_word
(
b
,
P_MOD_64
))
goto
err
;
# define ADD a
# define REM b
# else
# define ADD NULL
# define REM NULL
# endif
if
(
!
BN_generate_prime
(
c
,
sizes
[
i
],
0
,
ADD
,
REM
,
genprime_cb
,
NULL
))
goto
err
;
putc
(
'\n'
,
stderr
);
fflush
(
stderr
);
#endif
Time_F
(
START
);
for
(
k
=
0
;
k
<
num
;
k
++
)
{
if
(
k
%
50
==
0
)
/* Average over num/50 different choices of random numbers. */
{
if
(
!
BN_pseudo_rand
(
a
,
sizes
[
i
],
1
,
0
))
goto
err
;
if
(
!
BN_pseudo_rand
(
b
,
sizes
[
i
],
1
,
0
))
goto
err
;
#ifndef C_PRIME
if
(
!
BN_pseudo_rand
(
c
,
sizes
[
i
],
1
,
1
))
goto
err
;
#endif
#ifdef TEST_SQRT
if
(
!
BN_mod_sqr
(
a
,
a
,
c
,
ctx
))
goto
err
;
if
(
!
BN_mod_sqr
(
b
,
b
,
c
,
ctx
))
goto
err
;
#else
if
(
!
BN_nnmod
(
a
,
a
,
c
,
ctx
))
goto
err
;
if
(
!
BN_nnmod
(
b
,
b
,
c
,
ctx
))
goto
err
;
#endif
if
(
k
==
0
)
Time_F
(
START
);
}
#if defined(TEST_EXP)
if
(
!
BN_mod_exp
(
r
,
a
,
b
,
c
,
ctx
))
goto
err
;
#elif defined(TEST_GCD)
...
...
@@ -261,9 +278,12 @@ void do_mul_exp(BIGNUM *r, BIGNUM *a, BIGNUM *b, BIGNUM *c, BN_CTX *ctx)
if
(
-
2
==
BN_kronecker
(
a
,
b
,
ctx
))
goto
err
;
if
(
-
2
==
BN_kronecker
(
b
,
c
,
ctx
))
goto
err
;
if
(
-
2
==
BN_kronecker
(
c
,
a
,
ctx
))
goto
err
;
#el
se
/* TEST_INV */
#el
if defined(TEST_INV)
if
(
!
BN_mod_inverse
(
r
,
a
,
c
,
ctx
))
goto
err
;
if
(
!
BN_mod_inverse
(
r
,
b
,
c
,
ctx
))
goto
err
;
#else
/* TEST_SQRT */
if
(
!
BN_mod_sqrt
(
r
,
a
,
c
,
ctx
))
goto
err
;
if
(
!
BN_mod_sqrt
(
r
,
b
,
c
,
ctx
))
goto
err
;
#endif
}
tm
=
Time_F
(
STOP
);
...
...
@@ -274,10 +294,16 @@ void do_mul_exp(BIGNUM *r, BIGNUM *a, BIGNUM *b, BIGNUM *c, BN_CTX *ctx)
"3*gcd %4d %4d %4d"
#elif defined(TEST_KRON)
"3*kronecker %4d %4d %4d"
#el
se
/* TEST_INV */
#el
if defined(TEST_INV)
"2*inv %4d %4d mod %4d"
#else
/* TEST_SQRT */
"2*sqrt [prime == %d (mod 64)] %4d %4d mod %4d"
#endif
" -> %8.3fms %5.1f (%ld)
\n
"
,
#ifdef TEST_SQRT
P_MOD_64
,
#endif
" -> %8.3fms %5.1f (%ld)
\n
"
,
sizes
[
i
],
sizes
[
i
],
sizes
[
i
],
tm
*
1000
.
0
/
num
,
tm
*
mul_c
[
i
]
/
num
,
num
);
sizes
[
i
],
sizes
[
i
],
sizes
[
i
],
tm
*
1000
.
0
/
num
,
tm
*
mul_c
[
i
]
/
num
,
num
);
num
/=
7
;
if
(
num
<=
0
)
num
=
1
;
}
...
...
@@ -287,3 +313,19 @@ void do_mul_exp(BIGNUM *r, BIGNUM *a, BIGNUM *b, BIGNUM *c, BN_CTX *ctx)
ERR_print_errors_fp
(
stderr
);
}
#ifdef C_PRIME
static
void
genprime_cb
(
int
p
,
int
n
,
void
*
arg
)
{
char
c
=
'*'
;
if
(
p
==
0
)
c
=
'.'
;
if
(
p
==
1
)
c
=
'+'
;
if
(
p
==
2
)
c
=
'*'
;
if
(
p
==
3
)
c
=
'\n'
;
putc
(
c
,
stderr
);
fflush
(
stderr
);
(
void
)
n
;
(
void
)
arg
;
}
#endif
编辑
预览
Markdown
is supported
0%
请重试
或
添加新附件
.
添加附件
取消
You are about to add
0
people
to the discussion. Proceed with caution.
先完成此消息的编辑!
取消
想要评论请
注册
或
登录