]> CyberLeo.Net >> Repos - FreeBSD/FreeBSD.git/blob - secure/lib/libcrypto/man/man3/BN_generate_prime.3
Merge OpenSSL 1.1.1g.
[FreeBSD/FreeBSD.git] / secure / lib / libcrypto / man / man3 / BN_generate_prime.3
1 .\" Automatically generated by Pod::Man 4.11 (Pod::Simple 3.40)
2 .\"
3 .\" Standard preamble:
4 .\" ========================================================================
5 .de Sp \" Vertical space (when we can't use .PP)
6 .if t .sp .5v
7 .if n .sp
8 ..
9 .de Vb \" Begin verbatim text
10 .ft CW
11 .nf
12 .ne \\$1
13 ..
14 .de Ve \" End verbatim text
15 .ft R
16 .fi
17 ..
18 .\" Set up some character translations and predefined strings.  \*(-- will
19 .\" give an unbreakable dash, \*(PI will give pi, \*(L" will give a left
20 .\" double quote, and \*(R" will give a right double quote.  \*(C+ will
21 .\" give a nicer C++.  Capital omega is used to do unbreakable dashes and
22 .\" therefore won't be available.  \*(C` and \*(C' expand to `' in nroff,
23 .\" nothing in troff, for use with C<>.
24 .tr \(*W-
25 .ds C+ C\v'-.1v'\h'-1p'\s-2+\h'-1p'+\s0\v'.1v'\h'-1p'
26 .ie n \{\
27 .    ds -- \(*W-
28 .    ds PI pi
29 .    if (\n(.H=4u)&(1m=24u) .ds -- \(*W\h'-12u'\(*W\h'-12u'-\" diablo 10 pitch
30 .    if (\n(.H=4u)&(1m=20u) .ds -- \(*W\h'-12u'\(*W\h'-8u'-\"  diablo 12 pitch
31 .    ds L" ""
32 .    ds R" ""
33 .    ds C` ""
34 .    ds C' ""
35 'br\}
36 .el\{\
37 .    ds -- \|\(em\|
38 .    ds PI \(*p
39 .    ds L" ``
40 .    ds R" ''
41 .    ds C`
42 .    ds C'
43 'br\}
44 .\"
45 .\" Escape single quotes in literal strings from groff's Unicode transform.
46 .ie \n(.g .ds Aq \(aq
47 .el       .ds Aq '
48 .\"
49 .\" If the F register is >0, we'll generate index entries on stderr for
50 .\" titles (.TH), headers (.SH), subsections (.SS), items (.Ip), and index
51 .\" entries marked with X<> in POD.  Of course, you'll have to process the
52 .\" output yourself in some meaningful fashion.
53 .\"
54 .\" Avoid warning from groff about undefined register 'F'.
55 .de IX
56 ..
57 .nr rF 0
58 .if \n(.g .if rF .nr rF 1
59 .if (\n(rF:(\n(.g==0)) \{\
60 .    if \nF \{\
61 .        de IX
62 .        tm Index:\\$1\t\\n%\t"\\$2"
63 ..
64 .        if !\nF==2 \{\
65 .            nr % 0
66 .            nr F 2
67 .        \}
68 .    \}
69 .\}
70 .rr rF
71 .\"
72 .\" Accent mark definitions (@(#)ms.acc 1.5 88/02/08 SMI; from UCB 4.2).
73 .\" Fear.  Run.  Save yourself.  No user-serviceable parts.
74 .    \" fudge factors for nroff and troff
75 .if n \{\
76 .    ds #H 0
77 .    ds #V .8m
78 .    ds #F .3m
79 .    ds #[ \f1
80 .    ds #] \fP
81 .\}
82 .if t \{\
83 .    ds #H ((1u-(\\\\n(.fu%2u))*.13m)
84 .    ds #V .6m
85 .    ds #F 0
86 .    ds #[ \&
87 .    ds #] \&
88 .\}
89 .    \" simple accents for nroff and troff
90 .if n \{\
91 .    ds ' \&
92 .    ds ` \&
93 .    ds ^ \&
94 .    ds , \&
95 .    ds ~ ~
96 .    ds /
97 .\}
98 .if t \{\
99 .    ds ' \\k:\h'-(\\n(.wu*8/10-\*(#H)'\'\h"|\\n:u"
100 .    ds ` \\k:\h'-(\\n(.wu*8/10-\*(#H)'\`\h'|\\n:u'
101 .    ds ^ \\k:\h'-(\\n(.wu*10/11-\*(#H)'^\h'|\\n:u'
102 .    ds , \\k:\h'-(\\n(.wu*8/10)',\h'|\\n:u'
103 .    ds ~ \\k:\h'-(\\n(.wu-\*(#H-.1m)'~\h'|\\n:u'
104 .    ds / \\k:\h'-(\\n(.wu*8/10-\*(#H)'\z\(sl\h'|\\n:u'
105 .\}
106 .    \" troff and (daisy-wheel) nroff accents
107 .ds : \\k:\h'-(\\n(.wu*8/10-\*(#H+.1m+\*(#F)'\v'-\*(#V'\z.\h'.2m+\*(#F'.\h'|\\n:u'\v'\*(#V'
108 .ds 8 \h'\*(#H'\(*b\h'-\*(#H'
109 .ds o \\k:\h'-(\\n(.wu+\w'\(de'u-\*(#H)/2u'\v'-.3n'\*(#[\z\(de\v'.3n'\h'|\\n:u'\*(#]
110 .ds d- \h'\*(#H'\(pd\h'-\w'~'u'\v'-.25m'\f2\(hy\fP\v'.25m'\h'-\*(#H'
111 .ds D- D\\k:\h'-\w'D'u'\v'-.11m'\z\(hy\v'.11m'\h'|\\n:u'
112 .ds th \*(#[\v'.3m'\s+1I\s-1\v'-.3m'\h'-(\w'I'u*2/3)'\s-1o\s+1\*(#]
113 .ds Th \*(#[\s+2I\s-2\h'-\w'I'u*3/5'\v'-.3m'o\v'.3m'\*(#]
114 .ds ae a\h'-(\w'a'u*4/10)'e
115 .ds Ae A\h'-(\w'A'u*4/10)'E
116 .    \" corrections for vroff
117 .if v .ds ~ \\k:\h'-(\\n(.wu*9/10-\*(#H)'\s-2\u~\d\s+2\h'|\\n:u'
118 .if v .ds ^ \\k:\h'-(\\n(.wu*10/11-\*(#H)'\v'-.4m'^\v'.4m'\h'|\\n:u'
119 .    \" for low resolution devices (crt and lpr)
120 .if \n(.H>23 .if \n(.V>19 \
121 \{\
122 .    ds : e
123 .    ds 8 ss
124 .    ds o a
125 .    ds d- d\h'-1'\(ga
126 .    ds D- D\h'-1'\(hy
127 .    ds th \o'bp'
128 .    ds Th \o'LP'
129 .    ds ae ae
130 .    ds Ae AE
131 .\}
132 .rm #[ #] #H #V #F C
133 .\" ========================================================================
134 .\"
135 .IX Title "BN_GENERATE_PRIME 3"
136 .TH BN_GENERATE_PRIME 3 "2020-04-21" "1.1.1g" "OpenSSL"
137 .\" For nroff, turn off justification.  Always turn off hyphenation; it makes
138 .\" way too many mistakes in technical documents.
139 .if n .ad l
140 .nh
141 .SH "NAME"
142 BN_generate_prime_ex, BN_is_prime_ex, BN_is_prime_fasttest_ex, BN_GENCB_call, BN_GENCB_new, BN_GENCB_free, BN_GENCB_set_old, BN_GENCB_set, BN_GENCB_get_arg, BN_generate_prime, BN_is_prime, BN_is_prime_fasttest \- generate primes and test for primality
143 .SH "SYNOPSIS"
144 .IX Header "SYNOPSIS"
145 .Vb 1
146 \& #include <openssl/bn.h>
147 \&
148 \& int BN_generate_prime_ex(BIGNUM *ret, int bits, int safe, const BIGNUM *add,
149 \&                          const BIGNUM *rem, BN_GENCB *cb);
150 \&
151 \& int BN_is_prime_ex(const BIGNUM *p, int nchecks, BN_CTX *ctx, BN_GENCB *cb);
152 \&
153 \& int BN_is_prime_fasttest_ex(const BIGNUM *p, int nchecks, BN_CTX *ctx,
154 \&                             int do_trial_division, BN_GENCB *cb);
155 \&
156 \& int BN_GENCB_call(BN_GENCB *cb, int a, int b);
157 \&
158 \& BN_GENCB *BN_GENCB_new(void);
159 \&
160 \& void BN_GENCB_free(BN_GENCB *cb);
161 \&
162 \& void BN_GENCB_set_old(BN_GENCB *gencb,
163 \&                       void (*callback)(int, int, void *), void *cb_arg);
164 \&
165 \& void BN_GENCB_set(BN_GENCB *gencb,
166 \&                   int (*callback)(int, int, BN_GENCB *), void *cb_arg);
167 \&
168 \& void *BN_GENCB_get_arg(BN_GENCB *cb);
169 .Ve
170 .PP
171 Deprecated:
172 .PP
173 .Vb 4
174 \& #if OPENSSL_API_COMPAT < 0x00908000L
175 \& BIGNUM *BN_generate_prime(BIGNUM *ret, int num, int safe, BIGNUM *add,
176 \&                           BIGNUM *rem, void (*callback)(int, int, void *),
177 \&                           void *cb_arg);
178 \&
179 \& int BN_is_prime(const BIGNUM *a, int checks,
180 \&                 void (*callback)(int, int, void *), BN_CTX *ctx, void *cb_arg);
181 \&
182 \& int BN_is_prime_fasttest(const BIGNUM *a, int checks,
183 \&                          void (*callback)(int, int, void *), BN_CTX *ctx,
184 \&                          void *cb_arg, int do_trial_division);
185 \& #endif
186 .Ve
187 .SH "DESCRIPTION"
188 .IX Header "DESCRIPTION"
189 \&\fBBN_generate_prime_ex()\fR generates a pseudo-random prime number of
190 at least bit length \fBbits\fR. The returned number is probably prime
191 with a negligible error. If \fBadd\fR is \fB\s-1NULL\s0\fR the returned prime
192 number will have exact bit length \fBbits\fR with the top most two
193 bits set.
194 .PP
195 If \fBret\fR is not \fB\s-1NULL\s0\fR, it will be used to store the number.
196 .PP
197 If \fBcb\fR is not \fB\s-1NULL\s0\fR, it is used as follows:
198 .IP "\(bu" 2
199 \&\fBBN_GENCB_call(cb, 0, i)\fR is called after generating the i\-th
200 potential prime number.
201 .IP "\(bu" 2
202 While the number is being tested for primality,
203 \&\fBBN_GENCB_call(cb, 1, j)\fR is called as described below.
204 .IP "\(bu" 2
205 When a prime has been found, \fBBN_GENCB_call(cb, 2, i)\fR is called.
206 .IP "\(bu" 2
207 The callers of \fBBN_generate_prime_ex()\fR may call \fBBN_GENCB_call(cb, i, j)\fR with
208 other values as described in their respective man pages; see \*(L"\s-1SEE ALSO\*(R"\s0.
209 .PP
210 The prime may have to fulfill additional requirements for use in
211 Diffie-Hellman key exchange:
212 .PP
213 If \fBadd\fR is not \fB\s-1NULL\s0\fR, the prime will fulfill the condition p % \fBadd\fR
214 == \fBrem\fR (p % \fBadd\fR == 1 if \fBrem\fR == \fB\s-1NULL\s0\fR) in order to suit a given
215 generator.
216 .PP
217 If \fBsafe\fR is true, it will be a safe prime (i.e. a prime p so
218 that (p\-1)/2 is also prime). If \fBsafe\fR is true, and \fBrem\fR == \fB\s-1NULL\s0\fR
219 the condition will be p % \fBadd\fR == 3.
220 It is recommended that \fBadd\fR is a multiple of 4.
221 .PP
222 The random generator must be seeded prior to calling \fBBN_generate_prime_ex()\fR.
223 If the automatic seeding or reseeding of the OpenSSL \s-1CSPRNG\s0 fails due to
224 external circumstances (see \s-1\fBRAND\s0\fR\|(7)), the operation will fail.
225 .PP
226 \&\fBBN_is_prime_ex()\fR and \fBBN_is_prime_fasttest_ex()\fR test if the number \fBp\fR is
227 prime.  The following tests are performed until one of them shows that
228 \&\fBp\fR is composite; if \fBp\fR passes all these tests, it is considered
229 prime.
230 .PP
231 \&\fBBN_is_prime_fasttest_ex()\fR, when called with \fBdo_trial_division == 1\fR,
232 first attempts trial division by a number of small primes;
233 if no divisors are found by this test and \fBcb\fR is not \fB\s-1NULL\s0\fR,
234 \&\fBBN_GENCB_call(cb, 1, \-1)\fR is called.
235 If \fBdo_trial_division == 0\fR, this test is skipped.
236 .PP
237 Both \fBBN_is_prime_ex()\fR and \fBBN_is_prime_fasttest_ex()\fR perform a Miller-Rabin
238 probabilistic primality test with \fBnchecks\fR iterations. If
239 \&\fBnchecks == BN_prime_checks\fR, a number of iterations is used that
240 yields a false positive rate of at most 2^\-64 for random input.
241 The error rate depends on the size of the prime and goes down for bigger primes.
242 The rate is 2^\-80 starting at 308 bits, 2^\-112 at 852 bits, 2^\-128 at 1080 bits,
243 2^\-192 at 3747 bits and 2^\-256 at 6394 bits.
244 .PP
245 When the source of the prime is not random or not trusted, the number
246 of checks needs to be much higher to reach the same level of assurance:
247 It should equal half of the targeted security level in bits (rounded up to the
248 next integer if necessary).
249 For instance, to reach the 128 bit security level, \fBnchecks\fR should be set to
250 64.
251 .PP
252 If \fBcb\fR is not \fB\s-1NULL\s0\fR, \fBBN_GENCB_call(cb, 1, j)\fR is called
253 after the j\-th iteration (j = 0, 1, ...). \fBctx\fR is a
254 pre-allocated \fB\s-1BN_CTX\s0\fR (to save the overhead of allocating and
255 freeing the structure in a loop), or \fB\s-1NULL\s0\fR.
256 .PP
257 \&\fBBN_GENCB_call()\fR calls the callback function held in the \fB\s-1BN_GENCB\s0\fR structure
258 and passes the ints \fBa\fR and \fBb\fR as arguments. There are two types of
259 \&\fB\s-1BN_GENCB\s0\fR structure that are supported: \*(L"new\*(R" style and \*(L"old\*(R" style. New
260 programs should prefer the \*(L"new\*(R" style, whilst the \*(L"old\*(R" style is provided
261 for backwards compatibility purposes.
262 .PP
263 A \fB\s-1BN_GENCB\s0\fR structure should be created through a call to \fBBN_GENCB_new()\fR,
264 and freed through a call to \fBBN_GENCB_free()\fR.
265 .PP
266 For \*(L"new\*(R" style callbacks a \s-1BN_GENCB\s0 structure should be initialised with a
267 call to \fBBN_GENCB_set()\fR, where \fBgencb\fR is a \fB\s-1BN_GENCB\s0 *\fR, \fBcallback\fR is of
268 type \fBint (*callback)(int, int, \s-1BN_GENCB\s0 *)\fR and \fBcb_arg\fR is a \fBvoid *\fR.
269 \&\*(L"Old\*(R" style callbacks are the same except they are initialised with a call
270 to \fBBN_GENCB_set_old()\fR and \fBcallback\fR is of type
271 \&\fBvoid (*callback)(int, int, void *)\fR.
272 .PP
273 A callback is invoked through a call to \fBBN_GENCB_call\fR. This will check
274 the type of the callback and will invoke \fBcallback(a, b, gencb)\fR for new
275 style callbacks or \fBcallback(a, b, cb_arg)\fR for old style.
276 .PP
277 It is possible to obtain the argument associated with a \s-1BN_GENCB\s0 structure
278 (set via a call to BN_GENCB_set or BN_GENCB_set_old) using BN_GENCB_get_arg.
279 .PP
280 \&\fBBN_generate_prime()\fR (deprecated) works in the same way as
281 \&\fBBN_generate_prime_ex()\fR but expects an old-style callback function
282 directly in the \fBcallback\fR parameter, and an argument to pass to it in
283 the \fBcb_arg\fR. \fBBN_is_prime()\fR and \fBBN_is_prime_fasttest()\fR
284 can similarly be compared to \fBBN_is_prime_ex()\fR and
285 \&\fBBN_is_prime_fasttest_ex()\fR, respectively.
286 .SH "RETURN VALUES"
287 .IX Header "RETURN VALUES"
288 \&\fBBN_generate_prime_ex()\fR return 1 on success or 0 on error.
289 .PP
290 \&\fBBN_is_prime_ex()\fR, \fBBN_is_prime_fasttest_ex()\fR, \fBBN_is_prime()\fR and
291 \&\fBBN_is_prime_fasttest()\fR return 0 if the number is composite, 1 if it is
292 prime with an error probability of less than 0.25^\fBnchecks\fR, and
293 \&\-1 on error.
294 .PP
295 \&\fBBN_generate_prime()\fR returns the prime number on success, \fB\s-1NULL\s0\fR otherwise.
296 .PP
297 BN_GENCB_new returns a pointer to a \s-1BN_GENCB\s0 structure on success, or \fB\s-1NULL\s0\fR
298 otherwise.
299 .PP
300 BN_GENCB_get_arg returns the argument previously associated with a \s-1BN_GENCB\s0
301 structure.
302 .PP
303 Callback functions should return 1 on success or 0 on error.
304 .PP
305 The error codes can be obtained by \fBERR_get_error\fR\|(3).
306 .SH "REMOVED FUNCTIONALITY"
307 .IX Header "REMOVED FUNCTIONALITY"
308 As of OpenSSL 1.1.0 it is no longer possible to create a \s-1BN_GENCB\s0 structure
309 directly, as in:
310 .PP
311 .Vb 1
312 \& BN_GENCB callback;
313 .Ve
314 .PP
315 Instead applications should create a \s-1BN_GENCB\s0 structure using BN_GENCB_new:
316 .PP
317 .Vb 6
318 \& BN_GENCB *callback;
319 \& callback = BN_GENCB_new();
320 \& if (!callback)
321 \&     /* error */
322 \& ...
323 \& BN_GENCB_free(callback);
324 .Ve
325 .SH "SEE ALSO"
326 .IX Header "SEE ALSO"
327 \&\fBDH_generate_parameters\fR\|(3), \fBDSA_generate_parameters\fR\|(3),
328 \&\fBRSA_generate_key\fR\|(3), \fBERR_get_error\fR\|(3), \fBRAND_bytes\fR\|(3),
329 \&\s-1\fBRAND\s0\fR\|(7)
330 .SH "HISTORY"
331 .IX Header "HISTORY"
332 The \fBBN_GENCB_new()\fR, \fBBN_GENCB_free()\fR,
333 and \fBBN_GENCB_get_arg()\fR functions were added in OpenSSL 1.1.0.
334 .SH "COPYRIGHT"
335 .IX Header "COPYRIGHT"
336 Copyright 2000\-2020 The OpenSSL Project Authors. All Rights Reserved.
337 .PP
338 Licensed under the OpenSSL license (the \*(L"License\*(R").  You may not use
339 this file except in compliance with the License.  You can obtain a copy
340 in the file \s-1LICENSE\s0 in the source distribution or at
341 <https://www.openssl.org/source/license.html>.