|  | .TH PRIME 3 | 
|  | .SH NAME | 
|  | genprime, gensafeprime, genstrongprime, DSAprimes, probably_prime, smallprimetest  \- prime number generation | 
|  | .SH SYNOPSIS | 
|  | .B #include <u.h> | 
|  | .br | 
|  | .B #include <libc.h> | 
|  | .br | 
|  | .B #include <mp.h> | 
|  | .br | 
|  | .B #include <libsec.h> | 
|  | .PP | 
|  | .B | 
|  | int	smallprimetest(mpint *p) | 
|  | .PP | 
|  | .B | 
|  | int	probably_prime(mpint *p, int nrep) | 
|  | .PP | 
|  | .B | 
|  | void	genprime(mpint *p, int n, int nrep) | 
|  | .PP | 
|  | .B | 
|  | void	gensafeprime(mpint *p, mpint *alpha, int n, int accuracy) | 
|  | .PP | 
|  | .B | 
|  | void	genstrongprime(mpint *p, int n, int nrep) | 
|  | .PP | 
|  | .B | 
|  | void	DSAprimes(mpint *q, mpint *p, uchar seed[SHA1dlen]) | 
|  | .SH DESCRIPTION | 
|  | .PP | 
|  | Public key algorithms abound in prime numbers.  The following routines | 
|  | generate primes or test numbers for primality. | 
|  | .PP | 
|  | .I Smallprimetest | 
|  | checks for divisibility by the first 10000 primes.  It returns 0 | 
|  | if | 
|  | .I p | 
|  | is not divisible by the primes and \-1 if it is. | 
|  | .PP | 
|  | .I Probably_prime | 
|  | uses the Miller-Rabin test to test | 
|  | .IR p . | 
|  | It returns non-zero if | 
|  | .I P | 
|  | is probably prime.  The probability of it not being prime is | 
|  | 1/4**\fInrep\fR. | 
|  | .PP | 
|  | .I Genprime | 
|  | generates a random | 
|  | .I n | 
|  | bit prime.  Since it uses the Miller-Rabin test, | 
|  | .I nrep | 
|  | is the repetition count passed to | 
|  | .IR probably_prime . | 
|  | .I Gensafegprime | 
|  | generates an | 
|  | .IR n -bit | 
|  | prime | 
|  | .I p | 
|  | and a generator | 
|  | .I alpha | 
|  | of the multiplicative group of integers mod \fIp\fR; | 
|  | there is a prime \fIq\fR such that \fIp-1=2*q\fR. | 
|  | .I Genstrongprime | 
|  | generates a prime, | 
|  | .IR p , | 
|  | with the following properties: | 
|  | .IP \- | 
|  | (\fIp\fR-1)/2 is prime.  Therefore | 
|  | .IR p -1 | 
|  | has a large prime factor, | 
|  | .IR p '. | 
|  | .IP \- | 
|  | .IR p '-1 | 
|  | has a large prime factor | 
|  | .IP \- | 
|  | .IR p +1 | 
|  | has a large prime factor | 
|  | .PP | 
|  | .I DSAprimes | 
|  | generates two primes, | 
|  | .I q | 
|  | and | 
|  | .IR p, | 
|  | using the NIST recommended algorithm for DSA primes. | 
|  | .I q | 
|  | divides | 
|  | .IR p -1. | 
|  | The random seed used is also returned, so that skeptics | 
|  | can later confirm the computation.  Be patient; this is a | 
|  | slow algorithm. | 
|  | .SH SOURCE | 
|  | .B \*9/src/libsec | 
|  | .SH SEE ALSO | 
|  | .IR aes (3) | 
|  | .IR blowfish (3), | 
|  | .IR des (3), | 
|  | .IR elgamal (3), | 
|  | .IR rsa (3), |