提交 cdd43b5b 编写于 作者: B Bodo Möller

Documentation for BN_is_prime_fasttest.

上级 1baa9490
...@@ -20,11 +20,15 @@ ...@@ -20,11 +20,15 @@
generation becomes much faster. generation becomes much faster.
This implies a change for the callback functions in DSA_is_prime This implies a change for the callback functions in DSA_is_prime
and DSA_generate_parameters: They are now called once for each and DSA_generate_parameters: The callback function is called once
positive witness in the Rabin-Miller test, not just occasionally for each positive witness in the Rabin-Miller test, not just
in the inner loop; and the parameters to the callback function now occasionally in the inner loop; and the parameters to the
provide an iteration count for the outer loop rather than for the callback function now provide an iteration count for the outer
current invocation of the inner loop. loop rather than for the current invocation of the inner loop.
DSA_generate_parameters additionally can call the callback
function with an 'iteration count' of -1, meaning that a
candidate has passed the trial division test (when q is generated
from an application-provided seed, trial division is skipped).
[Bodo Moeller] [Bodo Moeller]
*) New function BN_is_prime_fasttest that optionally does trial *) New function BN_is_prime_fasttest that optionally does trial
......
...@@ -2,7 +2,7 @@ ...@@ -2,7 +2,7 @@
=head1 NAME =head1 NAME
BN_generate_prime, BN_is_prime - Generate primes and test for primality BN_generate_prime, BN_is_prime, BN_is_prime_fasttest - Generate primes and test for primality
=head1 SYNOPSIS =head1 SYNOPSIS
...@@ -14,11 +14,14 @@ BN_generate_prime, BN_is_prime - Generate primes and test for primality ...@@ -14,11 +14,14 @@ BN_generate_prime, BN_is_prime - Generate primes and test for primality
int BN_is_prime(BIGNUM *a, int checks, void (*callback)(int, int, int BN_is_prime(BIGNUM *a, int checks, void (*callback)(int, int,
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,
void *), BN_CTX *ctx, BN_CTX *ctx2, void *cb_arg, int do_trial_division);
=head1 DESCRIPTION =head1 DESCRIPTION
BN_generate_prime() generates a pseudo-random prime number of B<num> BN_generate_prime() generates a pseudo-random prime number of B<num>
bits. bits.
If B<ret> is not NULL, it will be used to store the number. If B<ret> is not B<NULL>, it will be used to store the number.
If B<callback> is not B<NULL>, it is called as follows: If B<callback> is not B<NULL>, it is called as follows:
...@@ -43,8 +46,8 @@ When a prime has been found, B<callback(2, i, cb_arg)> is called. ...@@ -43,8 +46,8 @@ When a prime has been found, B<callback(2, i, cb_arg)> is called.
The prime may have to fulfill additional requirements for use in The prime may have to fulfill additional requirements for use in
Diffie-Hellman key exchange: Diffie-Hellman key exchange:
If B<add> is not NULL, the prime will fulfill the condition p % B<add> If B<add> is not B<NULL>, the prime will fulfill the condition p % B<add>
== B<rem> (p % B<add> == 1 if B<rem> == NULL) in order to suit a given == B<rem> (p % B<add> == 1 if B<rem> == B<NULL>) in order to suit a given
generator. generator.
If B<safe> is true, it will be a safe prime (i.e. a prime p so If B<safe> is true, it will be a safe prime (i.e. a prime p so
...@@ -53,20 +56,40 @@ that (p-1)/2 is also prime). ...@@ -53,20 +56,40 @@ that (p-1)/2 is also prime).
The PRNG must be seeded prior to calling BN_generate_prime(). The PRNG must be seeded prior to calling BN_generate_prime().
The prime number generation has a negligible error probability. The prime number generation has a negligible error probability.
BN_is_prime() tests if the number B<a> is prime. This is done by BN_is_prime() and BN_is_prime_fasttest test if the number B<a> is
performing a Miller-Rabin probabilistic primality test with B<checks> prime. The following tests are performed until one of them shows that
iterations. If B<checks == BN_prime_check>, it uses a number B<a> is composite; if B<a> passes all these tests, it is considered
of iterations that yields a false positive rate of at most 2^-80 for prime.
random input.
=over 4
=item *
BN_is_prime_fasttest(), when called with B<do_trial_division == 1>,
first attempts trial division by a number of small primes;
if no divisors are found by this test and B<callback> is not B<NULL>,
B<callback(1, -1, cb_arg)> is called.
If B<do_trial_division == 0>, this test is skipped.
=item *
Both BN_is_prime() and BN_is_prime_fasttest() perform a Miller-Rabin
probabilistic primality test with B<checks> iterations. If
B<checks == BN_prime_check>, a number of iterations is used that
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. B<ctx> is a pre-allocated B<BN_CTX> (to save after the j-th iteration (j = 0, 1, ...). B<ctx> is a
the overhead of allocating and freeing the structure in a loop), or pre-allocated B<BN_CTX> (to save the overhead of allocating and
NULL. freeing the structure in a loop), or B<NULL>. For
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 allocated
an additional B<CN_CTX>).
=head1 RETURN VALUES =head1 RETURN VALUES
BN_generate_prime() returns the prime number on success, NULL otherwise. BN_generate_prime() returns the prime number on success, B<NULL> otherwise.
BN_is_prime() returns 0 if the number is composite, 1 if it is BN_is_prime() returns 0 if the number is composite, 1 if it is
prime with an error probability of less than 0.25^B<checks>, and prime with an error probability of less than 0.25^B<checks>, and
...@@ -83,5 +106,6 @@ L<bn(3)|bn(3)>, L<err(3)|err(3)>, L<rand(3)|rand(3)> ...@@ -83,5 +106,6 @@ L<bn(3)|bn(3)>, L<err(3)|err(3)>, L<rand(3)|rand(3)>
The B<cb_arg> arguments to BN_generate_prime() and to BN_is_prime() The B<cb_arg> arguments to BN_generate_prime() and to BN_is_prime()
were added in SSLeay 0.9.0. The B<ret> argument to BN_generate_prime() were added in SSLeay 0.9.0. The B<ret> argument to BN_generate_prime()
was added in SSLeay 0.9.1. was added in SSLeay 0.9.1.
BN_is_prime_fasttest() was added in OpenSSL 0.9.5.
=cut =cut
Markdown is supported
0% .
You are about to add 0 people to the discussion. Proceed with caution.
先完成此消息的编辑!
想要评论请 注册