2000-02-24 02:51:47 +00:00
|
|
|
=pod
|
|
|
|
|
|
|
|
=head1 NAME
|
|
|
|
|
2013-06-12 22:42:08 +00:00
|
|
|
RAND_egd, RAND_egd_bytes, RAND_query_egd_bytes - query entropy gathering daemon
|
2000-02-24 02:51:47 +00:00
|
|
|
|
|
|
|
=head1 SYNOPSIS
|
|
|
|
|
|
|
|
#include <openssl/rand.h>
|
|
|
|
|
|
|
|
int RAND_egd(const char *path);
|
2001-02-08 10:42:01 +00:00
|
|
|
int RAND_egd_bytes(const char *path, int bytes);
|
|
|
|
|
|
|
|
int RAND_query_egd_bytes(const char *path, unsigned char *buf, int bytes);
|
2000-02-24 02:51:47 +00:00
|
|
|
|
|
|
|
=head1 DESCRIPTION
|
|
|
|
|
2017-06-26 16:02:57 +00:00
|
|
|
RAND_egd() queries the Entropy Gathering Daemon (EGD) on socket B<path>.
|
2015-08-17 19:21:33 +00:00
|
|
|
It queries 255 bytes and uses L<RAND_add(3)> to seed the
|
2001-02-08 10:42:01 +00:00
|
|
|
OpenSSL built-in PRNG. RAND_egd(path) is a wrapper for
|
|
|
|
RAND_egd_bytes(path, 255);
|
|
|
|
|
2017-06-26 16:02:57 +00:00
|
|
|
RAND_egd_bytes() queries EGD on socket B<path>.
|
2015-08-17 19:21:33 +00:00
|
|
|
It queries B<bytes> bytes and uses L<RAND_add(3)> to seed the
|
2001-02-08 10:42:01 +00:00
|
|
|
OpenSSL built-in PRNG.
|
2001-02-08 17:14:07 +00:00
|
|
|
This function is more flexible than RAND_egd().
|
|
|
|
When only one secret key must
|
|
|
|
be generated, it is not necessary to request the full amount 255 bytes from
|
2017-06-26 16:02:57 +00:00
|
|
|
the EGD socket. This can be advantageous, since the amount of randomness
|
2001-02-08 17:14:07 +00:00
|
|
|
that can be retrieved from EGD over time is limited.
|
2001-02-08 10:42:01 +00:00
|
|
|
|
|
|
|
RAND_query_egd_bytes() performs the actual query of the EGD daemon on socket
|
|
|
|
B<path>. If B<buf> is given, B<bytes> bytes are queried and written into
|
|
|
|
B<buf>. If B<buf> is NULL, B<bytes> bytes are queried and used to seed the
|
2015-08-17 19:21:33 +00:00
|
|
|
OpenSSL built-in PRNG using L<RAND_add(3)>.
|
2001-02-08 10:42:01 +00:00
|
|
|
|
|
|
|
=head1 NOTES
|
|
|
|
|
2017-06-26 16:02:57 +00:00
|
|
|
On systems without /dev/*random devices providing randomness from the kernel,
|
|
|
|
EGD provides
|
|
|
|
a socket interface through which randomness can be gathered in chunks up to
|
2001-02-08 10:42:01 +00:00
|
|
|
255 bytes. Several chunks can be queried during one connection.
|
|
|
|
|
2000-02-24 03:36:01 +00:00
|
|
|
EGD is available from http://www.lothar.com/tech/crypto/ (C<perl
|
|
|
|
Makefile.PL; make; make install> to install). It is run as B<egd>
|
|
|
|
I<path>, where I<path> is an absolute path designating a socket. When
|
|
|
|
RAND_egd() is called with that path as an argument, it tries to read
|
2017-06-26 16:02:57 +00:00
|
|
|
random bytes that EGD has collected. RAND_egd() retrieves randomness from the
|
2008-11-10 11:26:44 +00:00
|
|
|
daemon using the daemon's "non-blocking read" command which shall
|
|
|
|
be answered immediately by the daemon without waiting for additional
|
2017-06-26 16:02:57 +00:00
|
|
|
randomness to be collected. The write and read socket operations in the
|
2008-11-10 11:26:44 +00:00
|
|
|
communication are blocking.
|
2000-02-24 03:36:01 +00:00
|
|
|
|
2001-02-08 10:42:01 +00:00
|
|
|
Alternatively, the EGD-interface compatible daemon PRNGD can be used. It is
|
2000-07-03 17:26:51 +00:00
|
|
|
available from
|
2007-01-12 18:47:13 +00:00
|
|
|
http://prngd.sourceforge.net/ .
|
2001-02-08 10:42:01 +00:00
|
|
|
PRNGD does employ an internal PRNG itself and can therefore never run
|
2017-06-26 16:02:57 +00:00
|
|
|
out of randomness.
|
2000-07-03 17:26:51 +00:00
|
|
|
|
2017-06-26 16:02:57 +00:00
|
|
|
OpenSSL automatically queries EGD when randomness is requested via RAND_bytes()
|
2001-02-10 19:10:36 +00:00
|
|
|
or the status is checked via RAND_status() for the first time, if the socket
|
|
|
|
is located at /var/run/egd-pool, /dev/egd-pool or /etc/egd-pool.
|
2001-02-08 17:16:44 +00:00
|
|
|
|
2000-02-24 03:36:01 +00:00
|
|
|
=head1 RETURN VALUE
|
2000-02-24 02:51:47 +00:00
|
|
|
|
2001-02-08 10:42:01 +00:00
|
|
|
RAND_egd() and RAND_egd_bytes() return the number of bytes read from the
|
|
|
|
daemon on success, and -1 if the connection failed or the daemon did not
|
|
|
|
return enough data to fully seed the PRNG.
|
|
|
|
|
|
|
|
RAND_query_egd_bytes() returns the number of bytes read from the daemon on
|
|
|
|
success, and -1 if the connection failed. The PRNG state is not considered.
|
2000-02-24 02:51:47 +00:00
|
|
|
|
|
|
|
=head1 SEE ALSO
|
|
|
|
|
2016-11-11 08:33:09 +00:00
|
|
|
L<RAND_bytes(3)>, L<RAND_add(3)>,
|
2015-08-17 19:21:33 +00:00
|
|
|
L<RAND_cleanup(3)>
|
2000-02-24 02:51:47 +00:00
|
|
|
|
2016-05-18 15:44:05 +00:00
|
|
|
=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
|