=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);

 #if OPENSSL_API_COMPAT < 0x10100000L
 int  RAND_event(UINT iMsg, WPARAM wParam, LPARAM lParam);
 void RAND_screen(void);
 #endif

=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)>
or L<RAND_load_file(3)>.

RAND_seed() is equivalent to RAND_add() when B<num == entropy>.

RAND_event() and RAND_screen() are deprecated and should not be called.

=head1 RETURN VALUES

RAND_status() returns 1 if the PRNG has been seeded
with enough data, 0 otherwise.

RAND_event() calls RAND_poll() and returns RAND_status().

RAND_screen calls RAND_poll().

The other functions do not return values.

=head1 HISTORY

RAND_event() and RAND_screen() are deprecated since OpenSSL
1.1.0.  Use the functions described above instead.

=head1 SEE ALSO

L<RAND_bytes(3)>, L<RAND_egd(3)>,
L<RAND_load_file(3)>, L<RAND_cleanup(3)>

=head1 COPYRIGHT

Copyright 2000-2016 The OpenSSL Project Authors. All Rights Reserved.

Licensed under the OpenSSL license (the "License").  You may not use
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
