f4401cd869
alter des.h to be friendly with openssl/des.h (you can include both in the same file) make libkrb to depend on libdes. bump major. massage various portioin of heimdal to be friendly with openssl 0.9.7b.
234 lines
7.4 KiB
Groff
234 lines
7.4 KiB
Groff
.\" $NetBSD: BN_generate_prime.3,v 1.12 2003/07/24 14:16:37 itojun Exp $
|
|
.\"
|
|
.\" Automatically generated by Pod::Man version 1.02
|
|
.\" Thu Jul 24 13:07:51 2003
|
|
.\"
|
|
.\" Standard preamble:
|
|
.\" ======================================================================
|
|
.de Sh \" Subsection heading
|
|
.br
|
|
.if t .Sp
|
|
.ne 5
|
|
.PP
|
|
\fB\\$1\fR
|
|
.PP
|
|
..
|
|
.de Sp \" Vertical space (when we can't use .PP)
|
|
.if t .sp .5v
|
|
.if n .sp
|
|
..
|
|
.de Ip \" List item
|
|
.br
|
|
.ie \\n(.$>=3 .ne \\$3
|
|
.el .ne 3
|
|
.IP "\\$1" \\$2
|
|
..
|
|
.de Vb \" Begin verbatim text
|
|
.ft CW
|
|
.nf
|
|
.ne \\$1
|
|
..
|
|
.de Ve \" End verbatim text
|
|
.ft R
|
|
|
|
.fi
|
|
..
|
|
.\" Set up some character translations and predefined strings. \*(-- will
|
|
.\" give an unbreakable dash, \*(PI will give pi, \*(L" will give a left
|
|
.\" double quote, and \*(R" will give a right double quote. | will give a
|
|
.\" real vertical bar. \*(C+ will give a nicer C++. Capital omega is used
|
|
.\" to do unbreakable dashes and therefore won't be available. \*(C` and
|
|
.\" \*(C' expand to `' in nroff, nothing in troff, for use with C<>
|
|
.tr \(*W-|\(bv\*(Tr
|
|
.ds C+ C\v'-.1v'\h'-1p'\s-2+\h'-1p'+\s0\v'.1v'\h'-1p'
|
|
.ie n \{\
|
|
. ds -- \(*W-
|
|
. ds PI pi
|
|
. if (\n(.H=4u)&(1m=24u) .ds -- \(*W\h'-12u'\(*W\h'-12u'-\" diablo 10 pitch
|
|
. if (\n(.H=4u)&(1m=20u) .ds -- \(*W\h'-12u'\(*W\h'-8u'-\" diablo 12 pitch
|
|
. ds L" ""
|
|
. ds R" ""
|
|
. ds C` `
|
|
. ds C' '
|
|
'br\}
|
|
.el\{\
|
|
. ds -- \|\(em\|
|
|
. ds PI \(*p
|
|
. ds L" ``
|
|
. ds R" ''
|
|
'br\}
|
|
.\"
|
|
.\" If the F register is turned on, we'll generate index entries on stderr
|
|
.\" for titles (.TH), headers (.SH), subsections (.Sh), items (.Ip), and
|
|
.\" index entries marked with X<> in POD. Of course, you'll have to process
|
|
.\" the output yourself in some meaningful fashion.
|
|
.if \nF \{\
|
|
. de IX
|
|
. tm Index:\\$1\t\\n%\t"\\$2"
|
|
. .
|
|
. nr % 0
|
|
. rr F
|
|
.\}
|
|
.\"
|
|
.\" For nroff, turn off justification. Always turn off hyphenation; it
|
|
.\" makes way too many mistakes in technical documents.
|
|
.hy 0
|
|
.if n .na
|
|
.\"
|
|
.\" Accent mark definitions (@(#)ms.acc 1.5 88/02/08 SMI; from UCB 4.2).
|
|
.\" Fear. Run. Save yourself. No user-serviceable parts.
|
|
.bd B 3
|
|
. \" fudge factors for nroff and troff
|
|
.if n \{\
|
|
. ds #H 0
|
|
. ds #V .8m
|
|
. ds #F .3m
|
|
. ds #[ \f1
|
|
. ds #] \fP
|
|
.\}
|
|
.if t \{\
|
|
. ds #H ((1u-(\\\\n(.fu%2u))*.13m)
|
|
. ds #V .6m
|
|
. ds #F 0
|
|
. ds #[ \&
|
|
. ds #] \&
|
|
.\}
|
|
. \" simple accents for nroff and troff
|
|
.if n \{\
|
|
. ds ' \&
|
|
. ds ` \&
|
|
. ds ^ \&
|
|
. ds , \&
|
|
. ds ~ ~
|
|
. ds /
|
|
.\}
|
|
.if t \{\
|
|
. ds ' \\k:\h'-(\\n(.wu*8/10-\*(#H)'\'\h"|\\n:u"
|
|
. ds ` \\k:\h'-(\\n(.wu*8/10-\*(#H)'\`\h'|\\n:u'
|
|
. ds ^ \\k:\h'-(\\n(.wu*10/11-\*(#H)'^\h'|\\n:u'
|
|
. ds , \\k:\h'-(\\n(.wu*8/10)',\h'|\\n:u'
|
|
. ds ~ \\k:\h'-(\\n(.wu-\*(#H-.1m)'~\h'|\\n:u'
|
|
. ds / \\k:\h'-(\\n(.wu*8/10-\*(#H)'\z\(sl\h'|\\n:u'
|
|
.\}
|
|
. \" troff and (daisy-wheel) nroff accents
|
|
.ds : \\k:\h'-(\\n(.wu*8/10-\*(#H+.1m+\*(#F)'\v'-\*(#V'\z.\h'.2m+\*(#F'.\h'|\\n:u'\v'\*(#V'
|
|
.ds 8 \h'\*(#H'\(*b\h'-\*(#H'
|
|
.ds o \\k:\h'-(\\n(.wu+\w'\(de'u-\*(#H)/2u'\v'-.3n'\*(#[\z\(de\v'.3n'\h'|\\n:u'\*(#]
|
|
.ds d- \h'\*(#H'\(pd\h'-\w'~'u'\v'-.25m'\f2\(hy\fP\v'.25m'\h'-\*(#H'
|
|
.ds D- D\\k:\h'-\w'D'u'\v'-.11m'\z\(hy\v'.11m'\h'|\\n:u'
|
|
.ds th \*(#[\v'.3m'\s+1I\s-1\v'-.3m'\h'-(\w'I'u*2/3)'\s-1o\s+1\*(#]
|
|
.ds Th \*(#[\s+2I\s-2\h'-\w'I'u*3/5'\v'-.3m'o\v'.3m'\*(#]
|
|
.ds ae a\h'-(\w'a'u*4/10)'e
|
|
.ds Ae A\h'-(\w'A'u*4/10)'E
|
|
. \" corrections for vroff
|
|
.if v .ds ~ \\k:\h'-(\\n(.wu*9/10-\*(#H)'\s-2\u~\d\s+2\h'|\\n:u'
|
|
.if v .ds ^ \\k:\h'-(\\n(.wu*10/11-\*(#H)'\v'-.4m'^\v'.4m'\h'|\\n:u'
|
|
. \" for low resolution devices (crt and lpr)
|
|
.if \n(.H>23 .if \n(.V>19 \
|
|
\{\
|
|
. ds : e
|
|
. ds 8 ss
|
|
. ds o a
|
|
. ds d- d\h'-1'\(ga
|
|
. ds D- D\h'-1'\(hy
|
|
. ds th \o'bp'
|
|
. ds Th \o'LP'
|
|
. ds ae ae
|
|
. ds Ae AE
|
|
.\}
|
|
.rm #[ #] #H #V #F C
|
|
.\" ======================================================================
|
|
.\"
|
|
.IX Title "BN_generate_prime 3"
|
|
.TH BN_generate_prime 3 "0.9.7b" "2003-01-13" "OpenSSL"
|
|
.UC
|
|
.SH "NAME"
|
|
BN_generate_prime, BN_is_prime, BN_is_prime_fasttest \- generate primes and test for primality
|
|
.SH "LIBRARY"
|
|
libcrypto, -lcrypto
|
|
.SH "SYNOPSIS"
|
|
.IX Header "SYNOPSIS"
|
|
.Vb 1
|
|
\& #include <openssl/bn.h>
|
|
.Ve
|
|
.Vb 2
|
|
\& BIGNUM *BN_generate_prime(BIGNUM *ret, int num, int safe, BIGNUM *add,
|
|
\& BIGNUM *rem, void (*callback)(int, int, void *), void *cb_arg);
|
|
.Ve
|
|
.Vb 2
|
|
\& int BN_is_prime(const BIGNUM *a, int checks, void (*callback)(int, int,
|
|
\& void *), BN_CTX *ctx, void *cb_arg);
|
|
.Ve
|
|
.Vb 3
|
|
\& 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);
|
|
.Ve
|
|
.SH "DESCRIPTION"
|
|
.IX Header "DESCRIPTION"
|
|
\&\fIBN_generate_prime()\fR generates a pseudo-random prime number of \fBnum\fR
|
|
bits.
|
|
If \fBret\fR is not \fB\s-1NULL\s0\fR, it will be used to store the number.
|
|
.PP
|
|
If \fBcallback\fR is not \fB\s-1NULL\s0\fR, it is called as follows:
|
|
.Ip "\(bu" 4
|
|
\&\fBcallback(0, i, cb_arg)\fR is called after generating the i-th
|
|
potential prime number.
|
|
.Ip "\(bu" 4
|
|
While the number is being tested for primality, \fBcallback(1, j,
|
|
cb_arg)\fR is called as described below.
|
|
.Ip "\(bu" 4
|
|
When a prime has been found, \fBcallback(2, i, cb_arg)\fR is called.
|
|
.PP
|
|
The prime may have to fulfill additional requirements for use in
|
|
Diffie-Hellman key exchange:
|
|
.PP
|
|
If \fBadd\fR is not \fB\s-1NULL\s0\fR, the prime will fulfill the condition p % \fBadd\fR
|
|
== \fBrem\fR (p % \fBadd\fR == 1 if \fBrem\fR == \fB\s-1NULL\s0\fR) in order to suit a given
|
|
generator.
|
|
.PP
|
|
If \fBsafe\fR is true, it will be a safe prime (i.e. a prime p so
|
|
that (p-1)/2 is also prime).
|
|
.PP
|
|
The \s-1PRNG\s0 must be seeded prior to calling \fIBN_generate_prime()\fR.
|
|
The prime number generation has a negligible error probability.
|
|
.PP
|
|
\&\fIBN_is_prime()\fR and \fIBN_is_prime_fasttest()\fR test if the number \fBa\fR is
|
|
prime. The following tests are performed until one of them shows that
|
|
\&\fBa\fR is composite; if \fBa\fR passes all these tests, it is considered
|
|
prime.
|
|
.PP
|
|
\&\fIBN_is_prime_fasttest()\fR, when called with \fBdo_trial_division == 1\fR,
|
|
first attempts trial division by a number of small primes;
|
|
if no divisors are found by this test and \fBcallback\fR is not \fB\s-1NULL\s0\fR,
|
|
\&\fBcallback(1, \-1, cb_arg)\fR is called.
|
|
If \fBdo_trial_division == 0\fR, this test is skipped.
|
|
.PP
|
|
Both \fIBN_is_prime()\fR and \fIBN_is_prime_fasttest()\fR perform a Miller-Rabin
|
|
probabilistic primality test with \fBchecks\fR iterations. If
|
|
\&\fBchecks == BN_prime_checks\fR, a number of iterations is used that
|
|
yields a false positive rate of at most 2^\-80 for random input.
|
|
.PP
|
|
If \fBcallback\fR is not \fB\s-1NULL\s0\fR, \fBcallback(1, j, cb_arg)\fR is called
|
|
after the j-th iteration (j = 0, 1, ...). \fBctx\fR is a
|
|
pre-allocated \fB\s-1BN_CTX\s0\fR (to save the overhead of allocating and
|
|
freeing the structure in a loop), or \fB\s-1NULL\s0\fR.
|
|
.SH "RETURN VALUES"
|
|
.IX Header "RETURN VALUES"
|
|
\&\fIBN_generate_prime()\fR returns the prime number on success, \fB\s-1NULL\s0\fR otherwise.
|
|
.PP
|
|
\&\fIBN_is_prime()\fR returns 0 if the number is composite, 1 if it is
|
|
prime with an error probability of less than 0.25^\fBchecks\fR, and
|
|
\&\-1 on error.
|
|
.PP
|
|
The error codes can be obtained by ERR_get_error(3).
|
|
.SH "SEE ALSO"
|
|
.IX Header "SEE ALSO"
|
|
openssl_bn(3), ERR_get_error(3), openssl_rand(3)
|
|
.SH "HISTORY"
|
|
.IX Header "HISTORY"
|
|
The \fBcb_arg\fR arguments to \fIBN_generate_prime()\fR and to \fIBN_is_prime()\fR
|
|
were added in SSLeay 0.9.0. The \fBret\fR argument to \fIBN_generate_prime()\fR
|
|
was added in SSLeay 0.9.1.
|
|
\&\fIBN_is_prime_fasttest()\fR was added in OpenSSL 0.9.5.
|