| 
									
										
										
										
											2000-01-22 01:50:27 +08:00
										 |  |  | =pod | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | =head1 NAME | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2018-06-07 07:31:44 +08:00
										 |  |  | RAND_add, RAND_poll, RAND_seed, RAND_status, RAND_event, RAND_screen, | 
					
						
							|  |  |  | RAND_keep_random_devices_open | 
					
						
							| 
									
										
										
										
											2017-07-18 21:39:21 +08:00
										 |  |  | - add randomness to the PRNG or get its status | 
					
						
							| 
									
										
										
										
											2000-01-22 01:50:27 +08:00
										 |  |  | 
 | 
					
						
							|  |  |  | =head1 SYNOPSIS | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  |  #include <openssl/rand.h> | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2017-07-18 21:39:21 +08:00
										 |  |  |  int RAND_status(void); | 
					
						
							| 
									
										
										
										
											2017-08-03 21:23:28 +08:00
										 |  |  |  int RAND_poll(); | 
					
						
							| 
									
										
										
										
											2000-01-22 01:50:27 +08:00
										 |  |  | 
 | 
					
						
							| 
									
										
										
										
											2017-06-27 00:02:57 +08:00
										 |  |  |  void RAND_add(const void *buf, int num, double randomness); | 
					
						
							| 
									
										
										
										
											2017-07-18 21:39:21 +08:00
										 |  |  |  void RAND_seed(const void *buf, int num); | 
					
						
							| 
									
										
										
										
											2000-01-22 01:50:27 +08:00
										 |  |  | 
 | 
					
						
							| 
									
										
										
										
											2018-06-07 07:31:44 +08:00
										 |  |  |  void RAND_keep_random_devices_open(int keep); | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2018-12-03 17:59:11 +08:00
										 |  |  | Deprecated since OpenSSL 1.1.0, can be hidden entirely by defining | 
					
						
							|  |  |  | B<OPENSSL_API_COMPAT> with a suitable version value, see | 
					
						
							|  |  |  | L<openssl_user_macros(7)>: | 
					
						
							| 
									
										
										
										
											2000-02-24 10:51:47 +08:00
										 |  |  | 
 | 
					
						
							| 
									
										
										
										
											2017-07-18 21:39:21 +08:00
										 |  |  |  int RAND_event(UINT iMsg, WPARAM wParam, LPARAM lParam); | 
					
						
							| 
									
										
										
										
											2016-05-17 03:30:41 +08:00
										 |  |  |  void RAND_screen(void); | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2000-01-22 01:50:27 +08:00
										 |  |  | =head1 DESCRIPTION | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2018-02-28 02:02:24 +08:00
										 |  |  | These functions can be used to seed the random generator and to check its | 
					
						
							|  |  |  | seeded state. | 
					
						
							|  |  |  | In general, manual (re-)seeding of the default OpenSSL random generator | 
					
						
							|  |  |  | (L<RAND_OpenSSL(3)>) is not necessary (but allowed), since it does (re-)seed | 
					
						
							|  |  |  | itself automatically using trusted system entropy sources. | 
					
						
							|  |  |  | This holds unless the default RAND_METHOD has been replaced or OpenSSL was | 
					
						
							|  |  |  | built with automatic reseeding disabled, see L<RAND(7)> for more details. | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | RAND_status() indicates whether or not the random generator has been sufficiently | 
					
						
							|  |  |  | seeded. If not, functions such as L<RAND_bytes(3)> will fail. | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | RAND_poll() uses the system's capabilities to seed the random generator using | 
					
						
							| 
									
										
										
										
											2017-09-01 05:16:22 +08:00
										 |  |  | random input obtained from polling various trusted entropy sources. | 
					
						
							| 
									
										
										
										
											2018-02-28 02:02:24 +08:00
										 |  |  | The default choice of the entropy source can be modified at build time, | 
					
						
							|  |  |  | see L<RAND(7)> for more details. | 
					
						
							| 
									
										
										
										
											2017-07-18 21:39:21 +08:00
										 |  |  | 
 | 
					
						
							| 
									
										
										
										
											2018-02-28 02:02:24 +08:00
										 |  |  | RAND_add() mixes the B<num> bytes at B<buf> into the internal state | 
					
						
							|  |  |  | of the random generator. | 
					
						
							|  |  |  | This function will not normally be needed, as mentioned above. | 
					
						
							| 
									
										
										
										
											2017-07-18 21:39:21 +08:00
										 |  |  | The B<randomness> argument is an estimate of how much randomness is | 
					
						
							|  |  |  | contained in | 
					
						
							| 
									
										
										
										
											2017-06-27 00:02:57 +08:00
										 |  |  | B<buf>, in bytes, and should be a number between zero and B<num>. | 
					
						
							|  |  |  | Details about sources of randomness and how to estimate their randomness | 
					
						
							| 
									
										
										
										
											2018-02-28 02:02:24 +08:00
										 |  |  | can be found in the literature; for example [NIST SP 800-90B]. | 
					
						
							|  |  |  | The content of B<buf> cannot be recovered from subsequent random generator output. | 
					
						
							|  |  |  | Applications that intend to save and restore random state in an external file | 
					
						
							|  |  |  | should consider using L<RAND_load_file(3)> instead. | 
					
						
							| 
									
										
										
										
											2000-01-22 01:50:27 +08:00
										 |  |  | 
 | 
					
						
							| 
									
										
										
										
											2019-04-11 06:06:37 +08:00
										 |  |  | NOTE: In FIPS mode, random data provided by the application is not considered to | 
					
						
							|  |  |  | be a trusted entropy source. It is mixed into the internal state of the RNG as | 
					
						
							|  |  |  | additional data only and this does not count as a full reseed. | 
					
						
							| 
									
										
										
										
											2020-07-22 10:55:31 +08:00
										 |  |  | For more details, see L<EVP_RAND(7)>. | 
					
						
							| 
									
										
										
										
											2019-04-11 06:06:37 +08:00
										 |  |  | 
 | 
					
						
							| 
									
										
										
										
											2017-06-27 00:02:57 +08:00
										 |  |  | RAND_seed() is equivalent to RAND_add() with B<randomness> set to B<num>. | 
					
						
							| 
									
										
										
										
											2000-01-22 01:50:27 +08:00
										 |  |  | 
 | 
					
						
							| 
									
										
										
										
											2018-06-07 07:31:44 +08:00
										 |  |  | RAND_keep_random_devices_open() is used to control file descriptor | 
					
						
							|  |  |  | usage by the random seed sources. Some seed sources maintain open file | 
					
						
							|  |  |  | descriptors by default, which allows such sources to operate in a | 
					
						
							|  |  |  | chroot(2) jail without the associated device nodes being available. When | 
					
						
							|  |  |  | the B<keep> argument is zero, this call disables the retention of file | 
					
						
							| 
									
										
										
										
											2019-09-28 01:17:09 +08:00
										 |  |  | descriptors. Conversely, a nonzero argument enables the retention of | 
					
						
							| 
									
										
										
										
											2018-06-07 07:31:44 +08:00
										 |  |  | file descriptors. This function is usually called during initialization | 
					
						
							| 
									
										
										
										
											2020-05-25 12:45:49 +08:00
										 |  |  | and it takes effect immediately. This capability only applies to the default | 
					
						
							|  |  |  | provider. | 
					
						
							| 
									
										
										
										
											2018-06-07 07:31:44 +08:00
										 |  |  | 
 | 
					
						
							| 
									
										
										
										
											2018-02-28 02:02:24 +08:00
										 |  |  | RAND_event() and RAND_screen() are equivalent to RAND_poll() and exist | 
					
						
							|  |  |  | for compatibility reasons only. See HISTORY section below. | 
					
						
							| 
									
										
										
										
											2016-05-17 03:46:48 +08:00
										 |  |  | 
 | 
					
						
							| 
									
										
										
										
											2000-01-22 01:50:27 +08:00
										 |  |  | =head1 RETURN VALUES | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2018-02-28 02:02:24 +08:00
										 |  |  | RAND_status() returns 1 if the random generator has been seeded | 
					
						
							| 
									
										
										
										
											2000-03-22 23:30:03 +08:00
										 |  |  | with enough data, 0 otherwise. | 
					
						
							| 
									
										
										
										
											2000-02-24 10:51:47 +08:00
										 |  |  | 
 | 
					
						
							| 
									
										
										
										
											2017-07-18 21:39:21 +08:00
										 |  |  | RAND_poll() returns 1 if it generated seed data, 0 otherwise. | 
					
						
							| 
									
										
										
										
											2016-05-17 03:30:41 +08:00
										 |  |  | 
 | 
					
						
							| 
									
										
										
										
											2017-07-18 21:39:21 +08:00
										 |  |  | RAND_event() returns RAND_status(). | 
					
						
							| 
									
										
										
										
											2016-05-17 03:30:41 +08:00
										 |  |  | 
 | 
					
						
							| 
									
										
										
										
											2000-02-24 10:51:47 +08:00
										 |  |  | The other functions do not return values. | 
					
						
							| 
									
										
										
										
											2000-01-22 01:50:27 +08:00
										 |  |  | 
 | 
					
						
							|  |  |  | =head1 SEE ALSO | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2018-02-28 02:02:24 +08:00
										 |  |  | L<RAND_bytes(3)>, | 
					
						
							|  |  |  | L<RAND_egd(3)>, | 
					
						
							|  |  |  | L<RAND_load_file(3)>, | 
					
						
							|  |  |  | L<RAND(7)> | 
					
						
							| 
									
										
										
										
											2020-07-22 10:55:31 +08:00
										 |  |  | L<EVP_RAND(7)> | 
					
						
							| 
									
										
										
										
											2000-01-22 01:50:27 +08:00
										 |  |  | 
 | 
					
						
							| 
									
										
										
										
											2019-04-09 22:13:55 +08:00
										 |  |  | =head1 HISTORY | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | RAND_event() and RAND_screen() were deprecated in OpenSSL 1.1.0 and should | 
					
						
							|  |  |  | not be used. | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2016-05-18 23:44:05 +08:00
										 |  |  | =head1 COPYRIGHT | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2020-06-25 21:13:12 +08:00
										 |  |  | Copyright 2000-2020 The OpenSSL Project Authors. All Rights Reserved. | 
					
						
							| 
									
										
										
										
											2016-05-18 23:44:05 +08:00
										 |  |  | 
 | 
					
						
							| 
									
										
										
										
											2018-12-06 21:04:44 +08:00
										 |  |  | Licensed under the Apache License 2.0 (the "License").  You may not use | 
					
						
							| 
									
										
										
										
											2016-05-18 23:44:05 +08:00
										 |  |  | this file except in compliance with the License.  You can obtain a copy | 
					
						
							|  |  |  | in the file LICENSE in the source distribution or at | 
					
						
							|  |  |  | L<https://www.openssl.org/source/license.html>. | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | =cut |