RNDSINK(9) | Kernel Developer's Manual | RNDSINK(9) |
rndsink
, rndsink_create
,
rndsink_destroy
,
rndsink_request
,
rndsink_schedule
, —
#include <sys/rndsink.h>
struct rndsink *
rndsink_create
(size_t
bytes, void
(*callback)(void *, const void *, size_t),
void *arg);
void
rndsink_destroy
(struct
rndsink *rndsink);
bool
rndsink_request
(struct
rndsink *rndsink, void
*buffer, size_t
bytes);
void
rndsink_schedule
(struct
rndsink *rndsink);
rndsink
functions support asynchronous requests for
entropy from the system entropy pool. Users must call
rndsink_create
() to create an rndsink which they may
then pass to rndsink_request
() to request data from
the system entropy pool. If full entropy is not available, the system will
call a callback when entropy is next available. Users can schedule a callback
without requesting data now using rndsink_schedule
().
When users no longer need an rndsink, they must pass it to
rndsink_destroy
().
This API provides direct access to the system entropy pool. Most users should use the cprng(9) API instead, which interposes a cryptographic pseudorandom number generator between the user and the entropy pool.
rndsink_create
(bytes,
callback, arg)RNDSINK_MAX_BYTES
. When requested and enough
entropy is available, the system will call callback
with three arguments:
The callback will be called in soft interrupt context.
rndsink_create
() may sleep to allocate
memory.
rndsink_destroy
(rndsink)rndsink_destroy
() may sleep to
wait for pending callbacks to complete and to deallocate memory.rndsink_request
(rndsink,
buffer, bytes)rndsink_schedule
() and return false. In either
case, rndsink_request
() will store data in
buffer. The argument bytes
must be the same as the argument to
rndsink_create
() that was used to create
rndsink. May be called at
IPL_VM
or lower. The caller should use
explicit_memset(3)
to clear buffer once it has used the data stored
there.rndsink_schedule
(rndsink)IPL_VM
or lower.April 10, 2013 | NetBSD 9.0 |