Skip to content
体验新版
项目
组织
正在加载...
登录
切换导航
打开侧边栏
OpenHarmony
Third Party Openssl
提交
e74231ed
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看板
提交
e74231ed
编写于
2月 02, 2000
作者:
B
Bodo Möller
浏览文件
操作
浏览文件
下载
电子邮件补丁
差异文件
rndsort{Miller, Rabin} primality test.
上级
fb81ac5e
变更
5
隐藏空白更改
内联
并排
Showing
5 changed file
with
102 addition
and
195 deletion
+102
-195
CHANGES
CHANGES
+5
-0
crypto/bn/bn.h
crypto/bn/bn.h
+1
-2
crypto/bn/bn_prime.c
crypto/bn/bn_prime.c
+91
-182
crypto/dsa/dsa_gen.c
crypto/dsa/dsa_gen.c
+3
-5
doc/crypto/BN_generate_prime.pod
doc/crypto/BN_generate_prime.pod
+2
-6
未找到文件。
CHANGES
浏览文件 @
e74231ed
...
@@ -4,6 +4,11 @@
...
@@ -4,6 +4,11 @@
Changes between 0.9.4 and 0.9.5 [xx XXX 2000]
Changes between 0.9.4 and 0.9.5 [xx XXX 2000]
*) Use a less unusual form of the Miller-Rabin primality test (it used
a binary algorithm for exponentiation integrated into the Miller-Rabin
loop, our standard modexp algorithms are faster).
[Bodo Moeller]
*) Support for the EBCDIC character set completed.
*) Support for the EBCDIC character set completed.
[Martin Kraemer <Martin.Kraemer@Mch.SNI.De>]
[Martin Kraemer <Martin.Kraemer@Mch.SNI.De>]
...
...
crypto/bn/bn.h
浏览文件 @
e74231ed
...
@@ -407,8 +407,7 @@ BIGNUM *BN_generate_prime(BIGNUM *ret,int bits,int safe,BIGNUM *add,
...
@@ -407,8 +407,7 @@ BIGNUM *BN_generate_prime(BIGNUM *ret,int bits,int safe,BIGNUM *add,
int
BN_is_prime
(
BIGNUM
*
p
,
int
nchecks
,
void
(
*
callback
)(
int
,
int
,
void
*
),
int
BN_is_prime
(
BIGNUM
*
p
,
int
nchecks
,
void
(
*
callback
)(
int
,
int
,
void
*
),
BN_CTX
*
ctx
,
void
*
cb_arg
);
BN_CTX
*
ctx
,
void
*
cb_arg
);
int
BN_is_prime_fasttest
(
BIGNUM
*
p
,
int
nchecks
,
int
BN_is_prime_fasttest
(
BIGNUM
*
p
,
int
nchecks
,
void
(
*
callback
)(
int
,
int
,
void
*
),
void
(
*
callback
)(
int
,
int
,
void
*
),
BN_CTX
*
ctx
,
void
*
cb_arg
,
BN_CTX
*
ctx
,
BN_CTX
*
ctx2
,
void
*
cb_arg
,
int
do_trial_division
);
int
do_trial_division
);
void
ERR_load_BN_strings
(
void
);
void
ERR_load_BN_strings
(
void
);
...
...
crypto/bn/bn_prime.c
浏览文件 @
e74231ed
...
@@ -68,8 +68,8 @@
...
@@ -68,8 +68,8 @@
*/
*/
#include "bn_prime.h"
#include "bn_prime.h"
static
int
witness
(
BIGNUM
*
a
,
BIGNUM
*
n
,
BN_CTX
*
ctx
,
BN_CTX
*
ctx2
,
static
int
witness
(
BIGNUM
*
w
,
BIGNUM
*
a
,
BIGNUM
*
a1
,
BIGNUM
*
a1_odd
,
int
k
,
BN_MONT_CTX
*
mont
);
BN_
CTX
*
ctx
,
BN_
MONT_CTX
*
mont
);
static
int
probable_prime
(
BIGNUM
*
rnd
,
int
bits
);
static
int
probable_prime
(
BIGNUM
*
rnd
,
int
bits
);
static
int
probable_prime_dh
(
BIGNUM
*
rnd
,
int
bits
,
static
int
probable_prime_dh
(
BIGNUM
*
rnd
,
int
bits
,
BIGNUM
*
add
,
BIGNUM
*
rem
,
BN_CTX
*
ctx
);
BIGNUM
*
add
,
BIGNUM
*
rem
,
BN_CTX
*
ctx
);
...
@@ -83,13 +83,11 @@ BIGNUM *BN_generate_prime(BIGNUM *ret, int bits, int safe, BIGNUM *add,
...
@@ -83,13 +83,11 @@ BIGNUM *BN_generate_prime(BIGNUM *ret, int bits, int safe, BIGNUM *add,
BIGNUM
t
;
BIGNUM
t
;
int
found
=
0
;
int
found
=
0
;
int
i
,
j
,
c1
=
0
;
int
i
,
j
,
c1
=
0
;
BN_CTX
*
ctx
,
*
ctx2
=
NULL
;
BN_CTX
*
ctx
;
int
checks
=
BN_prime_checks_for_size
(
bits
);
int
checks
=
BN_prime_checks_for_size
(
bits
);
ctx
=
BN_CTX_new
();
ctx
=
BN_CTX_new
();
if
(
ctx
==
NULL
)
goto
err
;
if
(
ctx
==
NULL
)
goto
err
;
ctx2
=
BN_CTX_new
();
if
(
ctx2
==
NULL
)
goto
err
;
if
(
ret
==
NULL
)
if
(
ret
==
NULL
)
{
{
if
((
rnd
=
BN_new
())
==
NULL
)
goto
err
;
if
((
rnd
=
BN_new
())
==
NULL
)
goto
err
;
...
@@ -121,7 +119,7 @@ loop:
...
@@ -121,7 +119,7 @@ loop:
if
(
!
safe
)
if
(
!
safe
)
{
{
i
=
BN_is_prime_fasttest
(
rnd
,
checks
,
callback
,
ctx
,
c
tx2
,
c
b_arg
,
0
);
i
=
BN_is_prime_fasttest
(
rnd
,
checks
,
callback
,
ctx
,
cb_arg
,
0
);
if
(
i
==
-
1
)
goto
err
;
if
(
i
==
-
1
)
goto
err
;
if
(
i
==
0
)
goto
loop
;
if
(
i
==
0
)
goto
loop
;
}
}
...
@@ -135,11 +133,11 @@ loop:
...
@@ -135,11 +133,11 @@ loop:
for
(
i
=
0
;
i
<
checks
;
i
++
)
for
(
i
=
0
;
i
<
checks
;
i
++
)
{
{
j
=
BN_is_prime_fasttest
(
rnd
,
1
,
callback
,
ctx
,
c
tx2
,
c
b_arg
,
0
);
j
=
BN_is_prime_fasttest
(
rnd
,
1
,
callback
,
ctx
,
cb_arg
,
0
);
if
(
j
==
-
1
)
goto
err
;
if
(
j
==
-
1
)
goto
err
;
if
(
j
==
0
)
goto
loop
;
if
(
j
==
0
)
goto
loop
;
j
=
BN_is_prime_fasttest
(
&
t
,
1
,
callback
,
ctx
,
c
tx2
,
c
b_arg
,
0
);
j
=
BN_is_prime_fasttest
(
&
t
,
1
,
callback
,
ctx
,
cb_arg
,
0
);
if
(
j
==
-
1
)
goto
err
;
if
(
j
==
-
1
)
goto
err
;
if
(
j
==
0
)
goto
loop
;
if
(
j
==
0
)
goto
loop
;
...
@@ -153,26 +151,33 @@ err:
...
@@ -153,26 +151,33 @@ err:
if
(
!
found
&&
(
ret
==
NULL
)
&&
(
rnd
!=
NULL
))
BN_free
(
rnd
);
if
(
!
found
&&
(
ret
==
NULL
)
&&
(
rnd
!=
NULL
))
BN_free
(
rnd
);
BN_free
(
&
t
);
BN_free
(
&
t
);
if
(
ctx
!=
NULL
)
BN_CTX_free
(
ctx
);
if
(
ctx
!=
NULL
)
BN_CTX_free
(
ctx
);
if
(
ctx2
!=
NULL
)
BN_CTX_free
(
ctx2
);
return
(
found
?
rnd
:
NULL
);
return
(
found
?
rnd
:
NULL
);
}
}
int
BN_is_prime
(
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
(
BIGNUM
*
a
,
int
checks
,
void
(
*
callback
)(
int
,
int
,
void
*
),
void
(
*
callback
)(
int
,
int
,
void
*
),
BN_CTX
*
ctx_passed
,
BN_CTX
*
ctx2_passed
,
void
*
cb_arg
,
BN_CTX
*
ctx_passed
,
void
*
cb_arg
,
int
do_trial_division
)
int
do_trial_division
)
{
{
int
i
,
j
,
ret
=
-
1
;
int
i
,
j
,
ret
=
-
1
;
BIGNUM
*
check
;
int
k
;
BN_CTX
*
ctx
=
NULL
,
*
ctx2
=
NULL
;
BN_CTX
*
ctx
=
NULL
;
BN_MONT_CTX
*
mont
=
NULL
;
BIGNUM
*
a1
,
*
a1_odd
,
*
check
;
/* taken from ctx */
BN_MONT_CTX
*
mont
=
NULL
;
if
(
checks
==
BN_prime_checks
)
if
(
checks
==
BN_prime_checks
)
{
checks
=
BN_prime_checks_for_size
(
BN_num_bits
(
a
));
int
bits
=
BN_num_bits
(
a
);
checks
=
BN_prime_checks_for_size
(
bits
);
if
(
a
->
neg
)
/* for now, refuse to handle negative numbers */
}
return
-
1
;
/* first look for small factors */
if
(
!
BN_is_odd
(
a
))
if
(
!
BN_is_odd
(
a
))
return
(
0
);
return
(
0
);
if
(
do_trial_division
)
if
(
do_trial_division
)
...
@@ -180,32 +185,55 @@ int BN_is_prime_fasttest(BIGNUM *a, int checks,
...
@@ -180,32 +185,55 @@ int BN_is_prime_fasttest(BIGNUM *a, int checks,
for
(
i
=
1
;
i
<
NUMPRIMES
;
i
++
)
for
(
i
=
1
;
i
<
NUMPRIMES
;
i
++
)
if
(
BN_mod_word
(
a
,
primes
[
i
])
==
0
)
if
(
BN_mod_word
(
a
,
primes
[
i
])
==
0
)
return
0
;
return
0
;
if
(
callback
!=
NULL
)
callback
(
1
,
-
1
,
cb_arg
);
if
(
callback
!=
NULL
)
callback
(
1
,
-
1
,
cb_arg
);
}
}
if
(
ctx_passed
!=
NULL
)
if
(
ctx_passed
!=
NULL
)
ctx
=
ctx_passed
;
ctx
=
ctx_passed
;
else
else
if
((
ctx
=
BN_CTX_new
())
==
NULL
)
goto
err
;
if
((
ctx
=
BN_CTX_new
())
==
NULL
)
if
(
ctx2_passed
!=
NULL
)
goto
err
;
ctx2
=
ctx2_passed
;
a1
=
&
(
ctx
->
bn
[
ctx
->
tos
++
]);
else
a1_odd
=
&
(
ctx
->
bn
[
ctx
->
tos
++
]);
if
((
ctx2
=
BN_CTX_new
())
==
NULL
)
goto
err
;
check
=
&
(
ctx
->
bn
[
ctx
->
tos
++
]);;
if
((
mont
=
BN_MONT_CTX_new
())
==
NULL
)
goto
err
;
/* compute a1 := a - 1 */
if
(
!
BN_copy
(
a1
,
a
))
check
=
&
(
ctx
->
bn
[
ctx
->
tos
++
]);
goto
err
;
if
(
!
BN_sub_word
(
a1
,
1
))
/* Setup the montgomery structure */
goto
err
;
if
(
!
BN_MONT_CTX_set
(
mont
,
a
,
ctx2
))
goto
err
;
if
(
BN_is_zero
(
a1
))
{
ret
=
0
;
goto
err
;
}
for
(
i
=
0
;
i
<
checks
;
i
++
)
/* write a1 as a1_odd * 2^k */
k
=
1
;
while
(
!
BN_is_bit_set
(
a1
,
k
))
k
++
;
if
(
!
BN_rshift
(
a1_odd
,
a1
,
k
))
goto
err
;
/* Montgomery setup for computations mod a */
mont
=
BN_MONT_CTX_new
();
if
(
mont
==
NULL
)
goto
err
;
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
),
0
,
0
))
goto
err
;
if
(
!
BN_pseudo_rand
(
check
,
BN_num_bits
(
a1
),
0
,
0
))
if
(
BN_cmp
(
check
,
a
)
>=
0
)
goto
err
;
BN_sub
(
check
,
check
,
a
);
if
(
BN_cmp
(
check
,
a1
)
>=
0
)
if
(
BN_is_zero
(
check
))
BN_one
(
check
);
if
(
!
BN_sub
(
check
,
check
,
a1
))
j
=
witness
(
check
,
a
,
ctx
,
ctx2
,
mont
);
goto
err
;
if
(
!
BN_add_word
(
check
,
1
))
goto
err
;
/* now 1 <= check < a */
j
=
witness
(
check
,
a
,
a1
,
a1_odd
,
k
,
ctx
,
mont
);
if
(
j
==
-
1
)
goto
err
;
if
(
j
==
-
1
)
goto
err
;
if
(
j
)
if
(
j
)
{
{
...
@@ -216,84 +244,38 @@ int BN_is_prime_fasttest(BIGNUM *a, int checks,
...
@@ -216,84 +244,38 @@ int BN_is_prime_fasttest(BIGNUM *a, int checks,
}
}
ret
=
1
;
ret
=
1
;
err:
err:
ctx
->
tos
--
;
if
(
ctx_passed
!=
NULL
)
if
((
ctx_passed
==
NULL
)
&&
(
ctx
!=
NULL
))
ctx_passed
->
tos
-=
3
;
/* a1, a1_odd, check */
else
if
(
ctx
!=
NULL
)
BN_CTX_free
(
ctx
);
BN_CTX_free
(
ctx
);
if
((
ctx2_passed
==
NULL
)
&&
(
ctx2
!=
NULL
))
if
(
mont
!=
NULL
)
BN_CTX_free
(
ctx2
);
BN_MONT_CTX_free
(
mont
);
if
(
mont
!=
NULL
)
BN_MONT_CTX_free
(
mont
);
return
(
ret
);
}
int
BN_is_prime
(
BIGNUM
*
a
,
int
checks
,
void
(
*
callback
)(
int
,
int
,
void
*
),
return
(
ret
);
BN_CTX
*
ctx_passed
,
void
*
cb_arg
)
{
return
BN_is_prime_fasttest
(
a
,
checks
,
callback
,
ctx_passed
,
NULL
,
cb_arg
,
0
);
}
}
static
int
witness
(
BIGNUM
*
a
,
BIGNUM
*
n
,
BN_CTX
*
ctx
,
BN_CTX
*
ctx2
,
static
int
witness
(
BIGNUM
*
w
,
BIGNUM
*
a
,
BIGNUM
*
a1
,
BIGNUM
*
a1_odd
,
int
k
,
BN_MONT_CTX
*
mont
)
BN_CTX
*
ctx
,
BN_MONT_CTX
*
mont
)
{
{
int
k
,
i
,
ret
=
-
1
,
good
;
if
(
!
BN_mod_exp_mont
(
w
,
w
,
a1_odd
,
a
,
ctx
,
mont
))
/* w := w^a1_odd mod a */
BIGNUM
*
d
,
*
dd
,
*
tmp
,
*
d1
,
*
d2
,
*
n1
;
return
-
1
;
BIGNUM
*
mont_one
,
*
mont_n1
,
*
mont_a
;
if
(
BN_is_one
(
w
))
return
0
;
/* probably prime */
d1
=
&
(
ctx
->
bn
[
ctx
->
tos
]);
if
(
BN_cmp
(
w
,
a1
)
==
0
)
d2
=
&
(
ctx
->
bn
[
ctx
->
tos
+
1
]);
return
0
;
/* w == -1 (mod a), 'a' is probably prime */
n1
=
&
(
ctx
->
bn
[
ctx
->
tos
+
2
]);
while
(
--
k
)
ctx
->
tos
+=
3
;
mont_one
=
&
(
ctx2
->
bn
[
ctx2
->
tos
]);
mont_n1
=
&
(
ctx2
->
bn
[
ctx2
->
tos
+
1
]);
mont_a
=
&
(
ctx2
->
bn
[
ctx2
->
tos
+
2
]);
ctx2
->
tos
+=
3
;
d
=
d1
;
dd
=
d2
;
if
(
!
BN_one
(
d
))
goto
err
;
if
(
!
BN_sub
(
n1
,
n
,
d
))
goto
err
;
/* n1=n-1; */
k
=
BN_num_bits
(
n1
);
if
(
!
BN_to_montgomery
(
mont_one
,
BN_value_one
(),
mont
,
ctx2
))
goto
err
;
if
(
!
BN_to_montgomery
(
mont_n1
,
n1
,
mont
,
ctx2
))
goto
err
;
if
(
!
BN_to_montgomery
(
mont_a
,
a
,
mont
,
ctx2
))
goto
err
;
BN_copy
(
d
,
mont_one
);
for
(
i
=
k
-
1
;
i
>=
0
;
i
--
)
{
{
if
(
(
BN_cmp
(
d
,
mont_one
)
!=
0
)
&&
if
(
!
BN_mod_mul
(
w
,
w
,
w
,
a
,
ctx
))
/* w := w^2 mod a */
(
BN_cmp
(
d
,
mont_n1
)
!=
0
))
return
-
1
;
good
=
1
;
if
(
BN_is_one
(
w
))
else
return
1
;
/* 'a' is composite, otherwise a previous 'w' would
good
=
0
;
* have been == -1 (mod 'a') */
if
(
BN_cmp
(
w
,
a1
)
==
0
)
BN_mod_mul_montgomery
(
dd
,
d
,
d
,
mont
,
ctx2
);
return
0
;
/* w == -1 (mod a), 'a' is probably prime */
if
(
good
&&
(
BN_cmp
(
dd
,
mont_one
)
==
0
))
{
ret
=
1
;
goto
err
;
}
if
(
BN_is_bit_set
(
n1
,
i
))
{
BN_mod_mul_montgomery
(
d
,
dd
,
mont_a
,
mont
,
ctx2
);
}
else
{
tmp
=
d
;
d
=
dd
;
dd
=
tmp
;
}
}
}
if
(
BN_cmp
(
d
,
mont_one
)
==
0
)
/* If we get here, 'w' is the (a-1)/2-th power of the original 'w',
i
=
0
;
* and it is neither -1 nor +1 -- so 'a' cannot be prime */
else
i
=
1
;
return
1
;
ret
=
i
;
err:
ctx
->
tos
-=
3
;
ctx2
->
tos
-=
3
;
return
(
ret
);
}
}
static
int
probable_prime
(
BIGNUM
*
rnd
,
int
bits
)
static
int
probable_prime
(
BIGNUM
*
rnd
,
int
bits
)
...
@@ -411,76 +393,3 @@ err:
...
@@ -411,76 +393,3 @@ err:
ctx
->
tos
-=
3
;
ctx
->
tos
-=
3
;
return
(
ret
);
return
(
ret
);
}
}
#if 0
#define RECP_MUL_MOD
static int witness(BIGNUM *a, BIGNUM *n, BN_CTX *ctx,
BN_CTX *unused, BN_MONT_CTX *unused2)
{
int k,i,ret= -1;
BIGNUM *d,*dd,*tmp;
BIGNUM *d1,*d2,*x,*n1;
BN_RECP_CTX recp;
d1= &(ctx->bn[ctx->tos]);
d2= &(ctx->bn[ctx->tos+1]);
x= &(ctx->bn[ctx->tos+2]);
n1= &(ctx->bn[ctx->tos+3]);
ctx->tos+=4;
d=d1;
dd=d2;
if (!BN_one(d)) goto err;
if (!BN_sub(n1,n,d)) goto err; /* n1=n-1; */
k=BN_num_bits(n1);
/* i=BN_num_bits(n); */
#ifdef RECP_MUL_MOD
BN_RECP_CTX_init(&recp);
if (BN_RECP_CTX_set(&recp,n,ctx) <= 0) goto err;
#endif
for (i=k-1; i>=0; i--)
{
if (BN_copy(x,d) == NULL) goto err;
#ifndef RECP_MUL_MOD
if (!BN_mod_mul(dd,d,d,n,ctx)) goto err;
#else
if (!BN_mod_mul_reciprocal(dd,d,d,&recp,ctx)) goto err;
#endif
if
(
BN_is_one
(
dd
)
&&
!
BN_is_one
(
x
)
&&
(
BN_cmp
(
x
,
n1
)
!=
0
))
{
ret
=
1
;
goto
err
;
}
if
(
BN_is_bit_set
(
n1
,
i
))
{
#ifndef RECP_MUL_MOD
if
(
!
BN_mod_mul
(
d
,
dd
,
a
,
n
,
ctx
))
goto
err
;
#else
if
(
!
BN_mod_mul_reciprocal
(
d
,
dd
,
a
,
&
recp
,
ctx
))
goto
err
;
#endif
}
else
{
tmp
=
d
;
d
=
dd
;
dd
=
tmp
;
}
}
if
(
BN_is_one
(
d
))
i
=
0
;
else
i
=
1
;
ret
=
i
;
err
:
ctx
->
tos
-=
4
;
#ifdef RECP_MUL_MOD
BN_RECP_CTX_free
(
&
recp
);
#endif
return
(
ret
);
}
#endif
crypto/dsa/dsa_gen.c
浏览文件 @
e74231ed
...
@@ -93,7 +93,7 @@ DSA *DSA_generate_parameters(int bits, unsigned char *seed_in, int seed_len,
...
@@ -93,7 +93,7 @@ DSA *DSA_generate_parameters(int bits, unsigned char *seed_in, int seed_len,
int
k
,
n
=
0
,
i
,
b
,
m
=
0
;
int
k
,
n
=
0
,
i
,
b
,
m
=
0
;
int
counter
=
0
;
int
counter
=
0
;
int
r
=
0
;
int
r
=
0
;
BN_CTX
*
ctx
=
NULL
,
*
ctx2
=
NULL
,
*
ctx3
=
NULL
,
*
ctx4
=
NULL
;
BN_CTX
*
ctx
=
NULL
,
*
ctx2
=
NULL
,
*
ctx3
=
NULL
;
unsigned
int
h
=
2
;
unsigned
int
h
=
2
;
DSA
*
ret
=
NULL
;
DSA
*
ret
=
NULL
;
...
@@ -111,7 +111,6 @@ DSA *DSA_generate_parameters(int bits, unsigned char *seed_in, int seed_len,
...
@@ -111,7 +111,6 @@ DSA *DSA_generate_parameters(int bits, unsigned char *seed_in, int seed_len,
if
((
ctx
=
BN_CTX_new
())
==
NULL
)
goto
err
;
if
((
ctx
=
BN_CTX_new
())
==
NULL
)
goto
err
;
if
((
ctx2
=
BN_CTX_new
())
==
NULL
)
goto
err
;
if
((
ctx2
=
BN_CTX_new
())
==
NULL
)
goto
err
;
if
((
ctx3
=
BN_CTX_new
())
==
NULL
)
goto
err
;
if
((
ctx3
=
BN_CTX_new
())
==
NULL
)
goto
err
;
if
((
ctx4
=
BN_CTX_new
())
==
NULL
)
goto
err
;
if
((
ret
=
DSA_new
())
==
NULL
)
goto
err
;
if
((
ret
=
DSA_new
())
==
NULL
)
goto
err
;
if
((
mont
=
BN_MONT_CTX_new
())
==
NULL
)
goto
err
;
if
((
mont
=
BN_MONT_CTX_new
())
==
NULL
)
goto
err
;
...
@@ -167,7 +166,7 @@ DSA *DSA_generate_parameters(int bits, unsigned char *seed_in, int seed_len,
...
@@ -167,7 +166,7 @@ DSA *DSA_generate_parameters(int bits, unsigned char *seed_in, int seed_len,
if
(
!
BN_bin2bn
(
md
,
SHA_DIGEST_LENGTH
,
q
))
goto
err
;
if
(
!
BN_bin2bn
(
md
,
SHA_DIGEST_LENGTH
,
q
))
goto
err
;
/* step 4 */
/* step 4 */
r
=
BN_is_prime_fasttest
(
q
,
DSS_prime_checks
,
callback
,
ctx3
,
c
tx4
,
c
b_arg
,
seed_is_random
);
r
=
BN_is_prime_fasttest
(
q
,
DSS_prime_checks
,
callback
,
ctx3
,
cb_arg
,
seed_is_random
);
if
(
r
>
0
)
if
(
r
>
0
)
break
;
break
;
if
(
r
!=
0
)
if
(
r
!=
0
)
...
@@ -228,7 +227,7 @@ DSA *DSA_generate_parameters(int bits, unsigned char *seed_in, int seed_len,
...
@@ -228,7 +227,7 @@ DSA *DSA_generate_parameters(int bits, unsigned char *seed_in, int seed_len,
if
(
BN_cmp
(
p
,
test
)
>=
0
)
if
(
BN_cmp
(
p
,
test
)
>=
0
)
{
{
/* step 11 */
/* step 11 */
r
=
BN_is_prime_fasttest
(
p
,
DSS_prime_checks
,
callback
,
ctx3
,
c
tx4
,
c
b_arg
,
1
);
r
=
BN_is_prime_fasttest
(
p
,
DSS_prime_checks
,
callback
,
ctx3
,
cb_arg
,
1
);
if
(
r
>
0
)
if
(
r
>
0
)
goto
end
;
/* found it */
goto
end
;
/* found it */
if
(
r
!=
0
)
if
(
r
!=
0
)
...
@@ -283,7 +282,6 @@ err:
...
@@ -283,7 +282,6 @@ err:
if
(
ctx
!=
NULL
)
BN_CTX_free
(
ctx
);
if
(
ctx
!=
NULL
)
BN_CTX_free
(
ctx
);
if
(
ctx2
!=
NULL
)
BN_CTX_free
(
ctx2
);
if
(
ctx2
!=
NULL
)
BN_CTX_free
(
ctx2
);
if
(
ctx3
!=
NULL
)
BN_CTX_free
(
ctx3
);
if
(
ctx3
!=
NULL
)
BN_CTX_free
(
ctx3
);
if
(
ctx4
!=
NULL
)
BN_CTX_free
(
ctx4
);
if
(
mont
!=
NULL
)
BN_MONT_CTX_free
(
mont
);
if
(
mont
!=
NULL
)
BN_MONT_CTX_free
(
mont
);
return
(
ok
?
ret
:
NULL
);
return
(
ok
?
ret
:
NULL
);
}
}
...
...
doc/crypto/BN_generate_prime.pod
浏览文件 @
e74231ed
...
@@ -15,8 +15,7 @@ BN_generate_prime, BN_is_prime, BN_is_prime_fasttest - Generate primes and test
...
@@ -15,8 +15,7 @@ BN_generate_prime, BN_is_prime, BN_is_prime_fasttest - Generate primes and test
void *), BN_CTX *ctx, void *cb_arg);
void *), BN_CTX *ctx, void *cb_arg);
int BN_is_prime_fasttest(BIGNUM *a, int checks, void (*callback)(int,
int BN_is_prime_fasttest(BIGNUM *a, int checks, void (*callback)(int,
int, void *), BN_CTX *ctx, BN_CTX *ctx2, void *cb_arg,
int, void *), BN_CTX *ctx, void *cb_arg, int do_trial_division);
int do_trial_division);
=head1 DESCRIPTION
=head1 DESCRIPTION
...
@@ -76,10 +75,7 @@ yields a false positive rate of at most 2^-80 for random input.
...
@@ -76,10 +75,7 @@ yields a false positive rate of at most 2^-80 for random input.
If B<callback> is not B<NULL>, B<callback(1, j, cb_arg)> is called
If B<callback> is not B<NULL>, B<callback(1, j, cb_arg)> is called
after the j-th iteration (j = 0, 1, ...). B<ctx> is a
after the j-th iteration (j = 0, 1, ...). B<ctx> is a
pre-allocated B<BN_CTX> (to save the overhead of allocating and
pre-allocated B<BN_CTX> (to save the overhead of allocating and
freeing the structure in a loop), or B<NULL>. For
freeing the structure in a loop), or B<NULL>.
BN_is_prime_fasttest(), B<ctx2> is a second pre-allocated B<BN_CTX> or
B<NULL> (lacking this parameter, BN_is_prime() always has to allocate
an additional B<CN_CTX>).
=head1 RETURN VALUES
=head1 RETURN VALUES
...
...
编辑
预览
Markdown
is supported
0%
请重试
或
添加新附件
.
添加附件
取消
You are about to add
0
people
to the discussion. Proceed with caution.
先完成此消息的编辑!
取消
想要评论请
注册
或
登录