| 
									
										
										
										
											2000-01-24 06:06:24 +08:00
										 |  |  | =pod | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | =head1 NAME | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2013-06-13 06:42:08 +08:00
										 |  |  | BN_rand, BN_pseudo_rand, BN_rand_range, BN_pseudo_rand_range - generate pseudo-random number | 
					
						
							| 
									
										
										
										
											2000-01-24 06:06:24 +08:00
										 |  |  | 
 | 
					
						
							|  |  |  | =head1 SYNOPSIS | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  |  #include <openssl/bn.h> | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  |  int BN_rand(BIGNUM *rnd, int bits, int top, int bottom); | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2000-02-24 19:55:57 +08:00
										 |  |  |  int BN_pseudo_rand(BIGNUM *rnd, int bits, int top, int bottom); | 
					
						
							| 
									
										
										
										
											2000-01-28 03:31:26 +08:00
										 |  |  | 
 | 
					
						
							| 
									
										
										
										
											2001-02-10 08:34:02 +08:00
										 |  |  |  int BN_rand_range(BIGNUM *rnd, BIGNUM *range); | 
					
						
							| 
									
										
										
										
											2001-02-08 06:24:35 +08:00
										 |  |  | 
 | 
					
						
							| 
									
										
										
										
											2002-06-05 17:31:05 +08:00
										 |  |  |  int BN_pseudo_rand_range(BIGNUM *rnd, BIGNUM *range); | 
					
						
							| 
									
										
										
										
											2001-09-03 20:58:16 +08:00
										 |  |  | 
 | 
					
						
							| 
									
										
										
										
											2000-01-24 06:06:24 +08:00
										 |  |  | =head1 DESCRIPTION | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | BN_rand() generates a cryptographically strong pseudo-random number of | 
					
						
							| 
									
										
										
										
											2015-10-08 20:40:42 +08:00
										 |  |  | B<bits> in length and stores it in B<rnd>. If B<top> is -1, the | 
					
						
							| 
									
										
										
										
											2001-02-20 08:23:07 +08:00
										 |  |  | most significant bit of the random number can be zero. If B<top> is 0, | 
					
						
							|  |  |  | it is set to 1, and if B<top> is 1, the two most significant bits of | 
					
						
							|  |  |  | the number will be set to 1, so that the product of two such random | 
					
						
							|  |  |  | numbers will always have 2*B<bits> length.  If B<bottom> is true, the | 
					
						
							| 
									
										
										
										
											2015-05-19 23:03:02 +08:00
										 |  |  | number will be odd. The value of B<bits> must be zero or greater. If B<bits> is | 
					
						
							|  |  |  | 1 then B<top> cannot also be 1. | 
					
						
							| 
									
										
										
										
											2000-01-24 06:06:24 +08:00
										 |  |  | 
 | 
					
						
							| 
									
										
										
										
											2000-01-28 03:31:26 +08:00
										 |  |  | BN_pseudo_rand() does the same, but pseudo-random numbers generated by | 
					
						
							|  |  |  | this function are not necessarily unpredictable. They can be used for | 
					
						
							|  |  |  | non-cryptographic purposes and for certain purposes in cryptographic | 
					
						
							|  |  |  | protocols, but usually not for key generation etc. | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2001-02-08 06:24:35 +08:00
										 |  |  | BN_rand_range() generates a cryptographically strong pseudo-random | 
					
						
							| 
									
										
										
										
											2015-07-15 16:54:28 +08:00
										 |  |  | number B<rnd> in the range 0 E<lt>= B<rnd> E<lt> B<range>. | 
					
						
							| 
									
										
										
										
											2001-09-03 20:58:16 +08:00
										 |  |  | BN_pseudo_rand_range() does the same, but is based on BN_pseudo_rand(), | 
					
						
							|  |  |  | and hence numbers generated by it are not necessarily unpredictable. | 
					
						
							| 
									
										
										
										
											2001-02-08 06:24:35 +08:00
										 |  |  | 
 | 
					
						
							|  |  |  | The PRNG must be seeded prior to calling BN_rand() or BN_rand_range(). | 
					
						
							| 
									
										
										
										
											2000-01-24 06:06:24 +08:00
										 |  |  | 
 | 
					
						
							|  |  |  | =head1 RETURN VALUES | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2001-02-08 06:24:35 +08:00
										 |  |  | The functions return 1 on success, 0 on error. | 
					
						
							| 
									
										
										
										
											2015-08-18 03:21:33 +08:00
										 |  |  | The error codes can be obtained by L<ERR_get_error(3)>. | 
					
						
							| 
									
										
										
										
											2000-01-24 06:06:24 +08:00
										 |  |  | 
 | 
					
						
							|  |  |  | =head1 SEE ALSO | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2015-08-18 03:21:33 +08:00
										 |  |  | L<bn(3)>, L<ERR_get_error(3)>, L<rand(3)>, | 
					
						
							|  |  |  | L<RAND_add(3)>, L<RAND_bytes(3)> | 
					
						
							| 
									
										
										
										
											2000-01-24 06:06:24 +08:00
										 |  |  | 
 | 
					
						
							|  |  |  | =head1 HISTORY | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | BN_rand() is available in all versions of SSLeay and OpenSSL. | 
					
						
							| 
									
										
										
										
											2001-02-20 08:23:07 +08:00
										 |  |  | BN_pseudo_rand() was added in OpenSSL 0.9.5. The B<top> == -1 case | 
					
						
							|  |  |  | and the function BN_rand_range() were added in OpenSSL 0.9.6a. | 
					
						
							| 
									
										
										
										
											2001-09-03 20:58:16 +08:00
										 |  |  | BN_pseudo_rand_range() was added in OpenSSL 0.9.6c. | 
					
						
							| 
									
										
										
										
											2000-01-24 06:06:24 +08:00
										 |  |  | 
 | 
					
						
							|  |  |  | =cut |