]> git.ipfire.org Git - thirdparty/openssl.git/blame - doc/man3/BN_generate_prime.pod
Docs: better deprecation text
[thirdparty/openssl.git] / doc / man3 / BN_generate_prime.pod
CommitLineData
4486d0cd
UM
1=pod
2
3=head1 NAME
4
aafbe1cc 5BN_generate_prime_ex, BN_is_prime_ex, BN_is_prime_fasttest_ex, BN_GENCB_call,
e35af275
MC
6BN_GENCB_new, BN_GENCB_free, BN_GENCB_set_old, BN_GENCB_set, BN_GENCB_get_arg,
7BN_generate_prime, BN_is_prime, BN_is_prime_fasttest - generate primes and test
8for primality
4486d0cd
UM
9
10=head1 SYNOPSIS
11
12 #include <openssl/bn.h>
13
aebb9aac 14 int BN_generate_prime_ex(BIGNUM *ret, int bits, int safe, const BIGNUM *add,
e9b77246 15 const BIGNUM *rem, BN_GENCB *cb);
aafbe1cc 16
aebb9aac 17 int BN_is_prime_ex(const BIGNUM *p, int nchecks, BN_CTX *ctx, BN_GENCB *cb);
aafbe1cc 18
aebb9aac 19 int BN_is_prime_fasttest_ex(const BIGNUM *p, int nchecks, BN_CTX *ctx,
e9b77246 20 int do_trial_division, BN_GENCB *cb);
aafbe1cc
MC
21
22 int BN_GENCB_call(BN_GENCB *cb, int a, int b);
23
e35af275 24 BN_GENCB *BN_GENCB_new(void);
aafbe1cc 25
e35af275 26 void BN_GENCB_free(BN_GENCB *cb);
aafbe1cc 27
e35af275 28 void BN_GENCB_set_old(BN_GENCB *gencb,
e9b77246 29 void (*callback)(int, int, void *), void *cb_arg);
e35af275
MC
30
31 void BN_GENCB_set(BN_GENCB *gencb,
e9b77246 32 int (*callback)(int, int, BN_GENCB *), void *cb_arg);
e35af275
MC
33
34 void *BN_GENCB_get_arg(BN_GENCB *cb);
aafbe1cc 35
be80b21d
RL
36Deprecated since OpenSSL 0.9.8, can be hidden entirely by defining
37B<OPENSSL_API_COMPAT> with a suitable version value, see
38L<openssl_user_macros(7)>:
aafbe1cc 39
4486d0cd 40 BIGNUM *BN_generate_prime(BIGNUM *ret, int num, int safe, BIGNUM *add,
e9b77246
BB
41 BIGNUM *rem, void (*callback)(int, int, void *),
42 void *cb_arg);
4486d0cd 43
e9b77246
BB
44 int BN_is_prime(const BIGNUM *a, int checks,
45 void (*callback)(int, int, void *), BN_CTX *ctx, void *cb_arg);
4486d0cd 46
aff0825c 47 int BN_is_prime_fasttest(const BIGNUM *a, int checks,
e9b77246
BB
48 void (*callback)(int, int, void *), BN_CTX *ctx,
49 void *cb_arg, int do_trial_division);
cdd43b5b 50
4486d0cd
UM
51=head1 DESCRIPTION
52
aafbe1cc 53BN_generate_prime_ex() generates a pseudo-random prime number of
a0490e02 54at least bit length B<bits>.
cdd43b5b 55If B<ret> is not B<NULL>, it will be used to store the number.
4486d0cd 56
aafbe1cc 57If B<cb> is not B<NULL>, it is used as follows:
4486d0cd 58
2f61bc2e 59=over 2
4486d0cd
UM
60
61=item *
62
aafbe1cc 63B<BN_GENCB_call(cb, 0, i)> is called after generating the i-th
4486d0cd
UM
64potential prime number.
65
66=item *
67
aafbe1cc
MC
68While the number is being tested for primality,
69B<BN_GENCB_call(cb, 1, j)> is called as described below.
4486d0cd
UM
70
71=item *
72
aafbe1cc 73When a prime has been found, B<BN_GENCB_call(cb, 2, i)> is called.
4486d0cd 74
bd93f1ac
BB
75=item *
76
77The callers of BN_generate_prime_ex() may call B<BN_GENCB_call(cb, i, j)> with
78other values as described in their respective man pages; see L</SEE ALSO>.
79
4486d0cd
UM
80=back
81
82The prime may have to fulfill additional requirements for use in
83Diffie-Hellman key exchange:
84
cdd43b5b
BM
85If B<add> is not B<NULL>, the prime will fulfill the condition p % B<add>
86== B<rem> (p % B<add> == 1 if B<rem> == B<NULL>) in order to suit a given
4486d0cd
UM
87generator.
88
89If B<safe> is true, it will be a safe prime (i.e. a prime p so
90that (p-1)/2 is also prime).
91
aafbe1cc 92The PRNG must be seeded prior to calling BN_generate_prime_ex().
4486d0cd
UM
93The prime number generation has a negligible error probability.
94
aafbe1cc 95BN_is_prime_ex() and BN_is_prime_fasttest_ex() test if the number B<p> is
cdd43b5b 96prime. The following tests are performed until one of them shows that
aafbe1cc 97B<p> is composite; if B<p> passes all these tests, it is considered
cdd43b5b
BM
98prime.
99
aafbe1cc 100BN_is_prime_fasttest_ex(), when called with B<do_trial_division == 1>,
cdd43b5b 101first attempts trial division by a number of small primes;
aafbe1cc
MC
102if no divisors are found by this test and B<cb> is not B<NULL>,
103B<BN_GENCB_call(cb, 1, -1)> is called.
cdd43b5b
BM
104If B<do_trial_division == 0>, this test is skipped.
105
aafbe1cc
MC
106Both BN_is_prime_ex() and BN_is_prime_fasttest_ex() perform a Miller-Rabin
107probabilistic primality test with B<nchecks> iterations. If
108B<nchecks == BN_prime_checks>, a number of iterations is used that
feac7a1c
KR
109yields a false positive rate of at most 2^-64 for random input.
110The error rate depends on the size of the prime and goes down for bigger primes.
b9e54e98
KR
111The rate is 2^-80 starting at 308 bits, 2^-112 at 852 bits, 2^-128 at 1080 bits,
1122^-192 at 3747 bits and 2^-256 at 6394 bits.
feac7a1c
KR
113
114When the source of the prime is not random or not trusted, the number
115of checks needs to be much higher to reach the same level of assurance:
116It should equal half of the targeted security level in bits (rounded up to the
117next integer if necessary).
118For instance, to reach the 128 bit security level, B<nchecks> should be set to
11964.
4486d0cd 120
aafbe1cc 121If B<cb> is not B<NULL>, B<BN_GENCB_call(cb, 1, j)> is called
cdd43b5b
BM
122after the j-th iteration (j = 0, 1, ...). B<ctx> is a
123pre-allocated B<BN_CTX> (to save the overhead of allocating and
e74231ed 124freeing the structure in a loop), or B<NULL>.
cdd43b5b 125
b3696a55 126BN_GENCB_call() calls the callback function held in the B<BN_GENCB> structure
aafbe1cc
MC
127and passes the ints B<a> and B<b> as arguments. There are two types of
128B<BN_GENCB> structure that are supported: "new" style and "old" style. New
129programs should prefer the "new" style, whilst the "old" style is provided
130for backwards compatibility purposes.
131
b3696a55 132A B<BN_GENCB> structure should be created through a call to BN_GENCB_new(),
23a1d5e9 133and freed through a call to BN_GENCB_free().
e35af275 134
aafbe1cc 135For "new" style callbacks a BN_GENCB structure should be initialised with a
2afb29b4 136call to BN_GENCB_set(), where B<gencb> is a B<BN_GENCB *>, B<callback> is of
aafbe1cc
MC
137type B<int (*callback)(int, int, BN_GENCB *)> and B<cb_arg> is a B<void *>.
138"Old" style callbacks are the same except they are initialised with a call
2afb29b4 139to BN_GENCB_set_old() and B<callback> is of type
aafbe1cc
MC
140B<void (*callback)(int, int, void *)>.
141
142A callback is invoked through a call to B<BN_GENCB_call>. This will check
143the type of the callback and will invoke B<callback(a, b, gencb)> for new
144style callbacks or B<callback(a, b, cb_arg)> for old style.
145
a21285b3 146It is possible to obtain the argument associated with a BN_GENCB structure
e35af275
MC
147(set via a call to BN_GENCB_set or BN_GENCB_set_old) using BN_GENCB_get_arg.
148
b3696a55
RS
149BN_generate_prime() (deprecated) works in the same way as
150BN_generate_prime_ex() but expects an old-style callback function
aafbe1cc 151directly in the B<callback> parameter, and an argument to pass to it in
b3696a55
RS
152the B<cb_arg>. BN_is_prime() and BN_is_prime_fasttest()
153can similarly be compared to BN_is_prime_ex() and
154BN_is_prime_fasttest_ex(), respectively.
aafbe1cc 155
4486d0cd
UM
156=head1 RETURN VALUES
157
aafbe1cc 158BN_generate_prime_ex() return 1 on success or 0 on error.
4486d0cd 159
aafbe1cc
MC
160BN_is_prime_ex(), BN_is_prime_fasttest_ex(), BN_is_prime() and
161BN_is_prime_fasttest() return 0 if the number is composite, 1 if it is
162prime with an error probability of less than 0.25^B<nchecks>, and
4486d0cd
UM
163-1 on error.
164
aafbe1cc
MC
165BN_generate_prime() returns the prime number on success, B<NULL> otherwise.
166
e35af275
MC
167BN_GENCB_new returns a pointer to a BN_GENCB structure on success, or B<NULL>
168otherwise.
169
170BN_GENCB_get_arg returns the argument previously associated with a BN_GENCB
171structure.
172
aafbe1cc
MC
173Callback functions should return 1 on success or 0 on error.
174
9b86974e 175The error codes can be obtained by L<ERR_get_error(3)>.
4486d0cd 176
e35af275
MC
177=head1 REMOVED FUNCTIONALITY
178
179As of OpenSSL 1.1.0 it is no longer possible to create a BN_GENCB structure
180directly, as in:
181
182 BN_GENCB callback;
183
184Instead applications should create a BN_GENCB structure using BN_GENCB_new:
185
186 BN_GENCB *callback;
187 callback = BN_GENCB_new();
2947af32
BB
188 if (!callback)
189 /* error */
e35af275
MC
190 ...
191 BN_GENCB_free(callback);
192
4486d0cd
UM
193=head1 SEE ALSO
194
bd93f1ac
BB
195L<DH_generate_parameters(3)>, L<DSA_generate_parameters(3)>,
196L<RSA_generate_key(3)>, L<ERR_get_error(3)>, L<RAND_bytes(3)>
4486d0cd
UM
197
198=head1 HISTORY
199
a528d4f0
RS
200BN_GENCB_new(), BN_GENCB_free(),
201and BN_GENCB_get_arg() were added in OpenSSL 1.1.0
4486d0cd 202
e2f92610
RS
203=head1 COPYRIGHT
204
1212818e 205Copyright 2000-2018 The OpenSSL Project Authors. All Rights Reserved.
e2f92610
RS
206
207Licensed under the OpenSSL license (the "License"). You may not use
208this file except in compliance with the License. You can obtain a copy
209in the file LICENSE in the source distribution or at
210L<https://www.openssl.org/source/license.html>.
211
212=cut