Skip to content
体验新版
项目
组织
正在加载...
登录
切换导航
打开侧边栏
OpenHarmony
Third Party Openssl
提交
aff0825c
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看板
提交
aff0825c
编写于
2月 02, 2000
作者:
B
Bodo Möller
浏览文件
操作
浏览文件
下载
电子邮件补丁
差异文件
Tolerate negative numbers in BN_is_prime.
上级
e74231ed
变更
5
显示空白变更内容
内联
并排
Showing
5 changed file
with
46 addition
and
31 deletion
+46
-31
crypto/bn/bn.h
crypto/bn/bn.h
+3
-2
crypto/bn/bn_lcl.h
crypto/bn/bn_lcl.h
+1
-1
crypto/bn/bn_prime.c
crypto/bn/bn_prime.c
+34
-23
crypto/dsa/dsa_gen.c
crypto/dsa/dsa_gen.c
+4
-2
doc/crypto/BN_generate_prime.pod
doc/crypto/BN_generate_prime.pod
+4
-3
未找到文件。
crypto/bn/bn.h
浏览文件 @
aff0825c
...
...
@@ -404,9 +404,10 @@ int BN_gcd(BIGNUM *r,BIGNUM *in_a,BIGNUM *in_b,BN_CTX *ctx);
BIGNUM
*
BN_mod_inverse
(
BIGNUM
*
ret
,
BIGNUM
*
a
,
const
BIGNUM
*
n
,
BN_CTX
*
ctx
);
BIGNUM
*
BN_generate_prime
(
BIGNUM
*
ret
,
int
bits
,
int
safe
,
BIGNUM
*
add
,
BIGNUM
*
rem
,
void
(
*
callback
)(
int
,
int
,
void
*
),
void
*
cb_arg
);
int
BN_is_prime
(
BIGNUM
*
p
,
int
nchecks
,
void
(
*
callback
)(
int
,
int
,
void
*
),
int
BN_is_prime
(
const
BIGNUM
*
p
,
int
nchecks
,
void
(
*
callback
)(
int
,
int
,
void
*
),
BN_CTX
*
ctx
,
void
*
cb_arg
);
int
BN_is_prime_fasttest
(
BIGNUM
*
p
,
int
nchecks
,
int
BN_is_prime_fasttest
(
const
BIGNUM
*
p
,
int
nchecks
,
void
(
*
callback
)(
int
,
int
,
void
*
),
BN_CTX
*
ctx
,
void
*
cb_arg
,
int
do_trial_division
);
void
ERR_load_BN_strings
(
void
);
...
...
crypto/bn/bn_lcl.h
浏览文件 @
aff0825c
...
...
@@ -203,7 +203,7 @@ extern "C" {
BN_ULLONG t; \
t=(BN_ULLONG)(a)*(a); \
(r0)=Lw(t); \
(r1)=Hw(t);
]
(r1)=Hw(t);
\
}
#elif defined(BN_UMULT_HIGH)
...
...
crypto/bn/bn_prime.c
浏览文件 @
aff0825c
...
...
@@ -154,13 +154,13 @@ err:
return
(
found
?
rnd
:
NULL
);
}
int
BN_is_prime
(
BIGNUM
*
a
,
int
checks
,
void
(
*
callback
)(
int
,
int
,
void
*
),
int
BN_is_prime
(
const
BIGNUM
*
a
,
int
checks
,
void
(
*
callback
)(
int
,
int
,
void
*
),
BN_CTX
*
ctx_passed
,
void
*
cb_arg
)
{
return
BN_is_prime_fasttest
(
a
,
checks
,
callback
,
ctx_passed
,
cb_arg
,
0
);
}
int
BN_is_prime_fasttest
(
BIGNUM
*
a
,
int
checks
,
int
BN_is_prime_fasttest
(
const
BIGNUM
*
a
,
int
checks
,
void
(
*
callback
)(
int
,
int
,
void
*
),
BN_CTX
*
ctx_passed
,
void
*
cb_arg
,
int
do_trial_division
)
...
...
@@ -168,15 +168,13 @@ int BN_is_prime_fasttest(BIGNUM *a, int checks,
int
i
,
j
,
ret
=
-
1
;
int
k
;
BN_CTX
*
ctx
=
NULL
;
BIGNUM
*
a1
,
*
a
1_odd
,
*
check
;
/* taken from ctx */
BIGNUM
*
A1
,
*
A
1_odd
,
*
check
;
/* taken from ctx */
BN_MONT_CTX
*
mont
=
NULL
;
BIGNUM
*
A
;
if
(
checks
==
BN_prime_checks
)
checks
=
BN_prime_checks_for_size
(
BN_num_bits
(
a
));
if
(
a
->
neg
)
/* for now, refuse to handle negative numbers */
return
-
1
;
/* first look for small factors */
if
(
!
BN_is_odd
(
a
))
return
(
0
);
...
...
@@ -193,47 +191,56 @@ int BN_is_prime_fasttest(BIGNUM *a, int checks,
else
if
((
ctx
=
BN_CTX_new
())
==
NULL
)
goto
err
;
a1
=
&
(
ctx
->
bn
[
ctx
->
tos
++
]);
a1_odd
=
&
(
ctx
->
bn
[
ctx
->
tos
++
]);
/* A := abs(a) */
if
(
a
->
neg
)
{
A
=
&
(
ctx
->
bn
[
ctx
->
tos
++
]);
BN_copy
(
A
,
a
);
A
->
neg
=
0
;
}
else
A
=
a
;
A1
=
&
(
ctx
->
bn
[
ctx
->
tos
++
]);
A1_odd
=
&
(
ctx
->
bn
[
ctx
->
tos
++
]);
check
=
&
(
ctx
->
bn
[
ctx
->
tos
++
]);;
/* compute
a1 := a
- 1 */
if
(
!
BN_copy
(
a1
,
a
))
/* compute
A1 := A
- 1 */
if
(
!
BN_copy
(
A1
,
A
))
goto
err
;
if
(
!
BN_sub_word
(
a
1
,
1
))
if
(
!
BN_sub_word
(
A
1
,
1
))
goto
err
;
if
(
BN_is_zero
(
a
1
))
if
(
BN_is_zero
(
A
1
))
{
ret
=
0
;
goto
err
;
}
/* write
a1 as a
1_odd * 2^k */
/* write
A1 as A
1_odd * 2^k */
k
=
1
;
while
(
!
BN_is_bit_set
(
a
1
,
k
))
while
(
!
BN_is_bit_set
(
A
1
,
k
))
k
++
;
if
(
!
BN_rshift
(
a1_odd
,
a
1
,
k
))
if
(
!
BN_rshift
(
A1_odd
,
A
1
,
k
))
goto
err
;
/* Montgomery setup for computations mod
a
*/
/* Montgomery setup for computations mod
A
*/
mont
=
BN_MONT_CTX_new
();
if
(
mont
==
NULL
)
goto
err
;
if
(
!
BN_MONT_CTX_set
(
mont
,
a
,
ctx
))
if
(
!
BN_MONT_CTX_set
(
mont
,
A
,
ctx
))
goto
err
;
for
(
i
=
0
;
i
<
checks
;
i
++
)
{
if
(
!
BN_pseudo_rand
(
check
,
BN_num_bits
(
a
1
),
0
,
0
))
if
(
!
BN_pseudo_rand
(
check
,
BN_num_bits
(
A
1
),
0
,
0
))
goto
err
;
if
(
BN_cmp
(
check
,
a
1
)
>=
0
)
if
(
!
BN_sub
(
check
,
check
,
a
1
))
if
(
BN_cmp
(
check
,
A
1
)
>=
0
)
if
(
!
BN_sub
(
check
,
check
,
A
1
))
goto
err
;
if
(
!
BN_add_word
(
check
,
1
))
goto
err
;
/* now 1 <= check <
a
*/
/* now 1 <= check <
A
*/
j
=
witness
(
check
,
a
,
a1
,
a
1_odd
,
k
,
ctx
,
mont
);
j
=
witness
(
check
,
A
,
A1
,
A
1_odd
,
k
,
ctx
,
mont
);
if
(
j
==
-
1
)
goto
err
;
if
(
j
)
{
...
...
@@ -245,7 +252,11 @@ int BN_is_prime_fasttest(BIGNUM *a, int checks,
ret
=
1
;
err:
if
(
ctx_passed
!=
NULL
)
ctx_passed
->
tos
-=
3
;
/* a1, a1_odd, check */
{
ctx_passed
->
tos
-=
3
;
/* A1, A1_odd, check */
if
(
a
!=
A
)
--
ctx_passed
->
tos
;
/* A */
}
else
if
(
ctx
!=
NULL
)
BN_CTX_free
(
ctx
);
if
(
mont
!=
NULL
)
...
...
crypto/dsa/dsa_gen.c
浏览文件 @
aff0825c
...
...
@@ -167,6 +167,8 @@ DSA *DSA_generate_parameters(int bits, unsigned char *seed_in, int seed_len,
/* step 4 */
r
=
BN_is_prime_fasttest
(
q
,
DSS_prime_checks
,
callback
,
ctx3
,
cb_arg
,
seed_is_random
);
if
(
ctx3
->
tos
)
goto
err
;
if
(
r
>
0
)
break
;
if
(
r
!=
0
)
...
...
doc/crypto/BN_generate_prime.pod
浏览文件 @
aff0825c
...
...
@@ -11,11 +11,12 @@ BN_generate_prime, BN_is_prime, BN_is_prime_fasttest - Generate primes and test
BIGNUM *BN_generate_prime(BIGNUM *ret, int num, int safe, BIGNUM *add,
BIGNUM *rem, void (*callback)(int, int, void *), void *cb_arg);
int BN_is_prime(BIGNUM *a, int checks, void (*callback)(int, int,
int BN_is_prime(
const
BIGNUM *a, int checks, void (*callback)(int, int,
void *), BN_CTX *ctx, void *cb_arg);
int BN_is_prime_fasttest(BIGNUM *a, int checks, void (*callback)(int,
int, void *), BN_CTX *ctx, void *cb_arg, int do_trial_division);
int BN_is_prime_fasttest(const BIGNUM *a, int checks,
void (*callback)(int, int, void *), BN_CTX *ctx, void *cb_arg,
int do_trial_division);
=head1 DESCRIPTION
...
...
编辑
预览
Markdown
is supported
0%
请重试
或
添加新附件
.
添加附件
取消
You are about to add
0
people
to the discussion. Proceed with caution.
先完成此消息的编辑!
取消
想要评论请
注册
或
登录