78 lines
		
	
	
		
			2.7 KiB
		
	
	
	
		
			Plaintext
		
	
	
	
	
	
			
		
		
	
	
			78 lines
		
	
	
		
			2.7 KiB
		
	
	
	
		
			Plaintext
		
	
	
	
	
	
=pod
 | 
						|
 | 
						|
=head1 NAME
 | 
						|
 | 
						|
RAND_add, RAND_seed, RAND_status, RAND_event, RAND_screen - add
 | 
						|
entropy to the PRNG
 | 
						|
 | 
						|
=head1 SYNOPSIS
 | 
						|
 | 
						|
 #include <openssl/rand.h>
 | 
						|
 | 
						|
 void RAND_seed(const void *buf, int num);
 | 
						|
 | 
						|
 void RAND_add(const void *buf, int num, double entropy);
 | 
						|
 | 
						|
 int  RAND_status(void);
 | 
						|
 | 
						|
 int  RAND_event(UINT iMsg, WPARAM wParam, LPARAM lParam);
 | 
						|
 void RAND_screen(void);
 | 
						|
 | 
						|
=head1 DESCRIPTION
 | 
						|
 | 
						|
RAND_add() mixes the B<num> bytes at B<buf> into the PRNG state. Thus,
 | 
						|
if the data at B<buf> are unpredictable to an adversary, this
 | 
						|
increases the uncertainty about the state and makes the PRNG output
 | 
						|
less predictable. Suitable input comes from user interaction (random
 | 
						|
key presses, mouse movements) and certain hardware events. The
 | 
						|
B<entropy> argument is (the lower bound of) an estimate of how much
 | 
						|
randomness is contained in B<buf>, measured in bytes. Details about
 | 
						|
sources of randomness and how to estimate their entropy can be found
 | 
						|
in the literature, e.g. RFC 1750.
 | 
						|
 | 
						|
RAND_add() may be called with sensitive data such as user entered
 | 
						|
passwords. The seed values cannot be recovered from the PRNG output.
 | 
						|
 | 
						|
OpenSSL makes sure that the PRNG state is unique for each thread. On
 | 
						|
systems that provide C</dev/urandom>, the randomness device is used
 | 
						|
to seed the PRNG transparently. However, on all other systems, the
 | 
						|
application is responsible for seeding the PRNG by calling RAND_add(),
 | 
						|
L<RAND_egd(3)|RAND_egd(3)>
 | 
						|
or L<RAND_load_file(3)|RAND_load_file(3)>.
 | 
						|
 | 
						|
RAND_seed() is equivalent to RAND_add() when B<num == entropy>.
 | 
						|
 | 
						|
RAND_event() collects the entropy from Windows events such as mouse
 | 
						|
movements and other user interaction. It should be called with the
 | 
						|
B<iMsg>, B<wParam> and B<lParam> arguments of I<all> messages sent to
 | 
						|
the window procedure. It will estimate the entropy contained in the
 | 
						|
event message (if any), and add it to the PRNG. The program can then
 | 
						|
process the messages as usual.
 | 
						|
 | 
						|
The RAND_screen() function is available for the convenience of Windows
 | 
						|
programmers. It adds the current contents of the screen to the PRNG.
 | 
						|
For applications that can catch Windows events, seeding the PRNG by
 | 
						|
calling RAND_event() is a significantly better source of
 | 
						|
randomness. It should be noted that both methods cannot be used on
 | 
						|
servers that run without user interaction.
 | 
						|
 | 
						|
=head1 RETURN VALUES
 | 
						|
 | 
						|
RAND_status() and RAND_event() return 1 if the PRNG has been seeded
 | 
						|
with enough data, 0 otherwise.
 | 
						|
 | 
						|
The other functions do not return values.
 | 
						|
 | 
						|
=head1 SEE ALSO
 | 
						|
 | 
						|
L<rand(3)|rand(3)>, L<RAND_egd(3)|RAND_egd(3)>,
 | 
						|
L<RAND_load_file(3)|RAND_load_file(3)>, L<RAND_cleanup(3)|RAND_cleanup(3)>
 | 
						|
 | 
						|
=head1 HISTORY
 | 
						|
 | 
						|
RAND_seed() and RAND_screen() are available in all versions of SSLeay
 | 
						|
and OpenSSL. RAND_add() and RAND_status() have been added in OpenSSL
 | 
						|
0.9.5, RAND_event() in OpenSSL 0.9.5a.
 | 
						|
 | 
						|
=cut
 |