=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
