1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
|
=pod
=head1 NAME
Yarrow_Init, Yarrow_Poll, Yarrow_Input, Yarrow_Status, Yarrow_Output, Yarrow_New_Source, Yarrow_Register_Source_Estimator, Yarrow Final - cryptographic pseudo-random number generator
=head1 SYNOPSIS
int Yarrow_Init(Yarrow_CTX *y, const char *filename);
int Yarrow_New_Source(Yarrow_CTX* y, unsigned* source_id);
int Yarrow_Poll(Yarrow_CTX *y, unsigned source_id)
int Yarrow_Input( Yarrow_CTX* y, unsigned source_id,
const void* sample, size_t size,
size_t entropy_bits);
int Yarrow_Status(Yarrow_CTX* y, int *num_sources,
unsigned *source_id, size_t *entropy_bits,
size_t *entropy_max);
int Yarrow_Output(Yarrow_CTX* y, void* out, size_t size);
int Yarrow_Register_Source_Estimator(Yarrow_CTX* y,
unsigned source_id,
size_t (*estimator)(const void* sample,
size_t size));
int Yarrow_Final(Yarrow_CTX* y);
=head1 DESCRIPTION
Yarrow_Init() initializes a B<Yarrow_CTX> structure. B<filename> can
be NULL, or the path to a seed file that Yarrow will use to store the
PRNG state for use in later sessions. Returns B<YARROW_OK> if the
PRNG is seeded on exit, or B<YARROW_NOT_SEEDED> if the PRNG is not yet
seeded.
Yarrow_New_Source() associates entropy sources such as keyboard input,
mouse movements and other unpredictable events with a
B<Yarrow_CTX>. The function assigns a unique number to the new source,
and places it in B<source_id>.
Yarrow_Poll() gathers entropy from the state of the machine and adds
it to the source B<source_id>. The source has to be allocated by the
user with Yarrow_New_Source. Returns B<YARROW_OK> if the PRNG is
seeded on exit, or B<YARROW_NOT_SEEDED> if the PRNG is not yet seeded.
Yarrow_Input() is used to add randomness from the source B<source_id>
to the PRNG. It reads B<size> bytes at the address B<sample>. An
estimate of the entropy in bits contained in the sample must be
specified as B<entropy_bits>.
Yarrow_Status() returns B<YARROW_OK> if the PRNG has enough entropy to
produce output, and B<YARROW_NOT_SEEDED> if calls to Yarrow_Output()
would fail.
If num_sources is not NULL, the number of entropy sources that still
need to be seeded is returned in B<*num_sources>.
If source_id is not NULL, the entropy source that is closest to its
threshold is returned in B<*source_id>. B<*source_id> is set to -1 if
no sources have either reached their threshold or not collected any
entropy yet.
If not NULL, B<*entropy_bits> is set to the current number of bits for
the source B<*source_id>, and B<*entropy_max> to the threshold.
Yarrow_Output() generates B<size> bytes of cryptographically strong
pseudo-random output and places them at B<out>. The return value must
always be checked. If an error occurs, the PRNG may produce
predictable data or no output at all.
Yarrow_Register_Source_Estimator() registers an entropy estimator
for B<source_id>. An entropy estimator is a function that tries to
estimate the entropy in a sample and returns the entropy in bits
in order to detect abnormal situations in which the samples have a very
low entropy.
Yarrow_Final() writes the PRNG state to the seed file and erases it
from memory.
=head1 RETURN VALUES
All functions return B<YARROW_OK> on success. Error conditions are reported
as follows:
YARROW_FAIL generic failure
YARROW_NOT_INIT YarrowInit() hasn't been called
YARROW_ALREADY_INIT YarrowInit() has already been called
YARROW_NO_DRIVER driver doesn't exist
YARROW_CANT_OPEN can't open driver
YARROW_BAD_SOURCE invalid source id
YARROW_TOO_MANY_SOURCES can't create any more source IDs
YARROW_BAD_ARG invalid argument
YARROW_ACCESS insufficient privileges
YARROW_NOMEM out of memory
YARROW_NORSRC a resource (apart from memory) is exhausted
YARROW_NOT_SEEDED not enough entropy to generate output
YARROW_LOCKING locking error
YARROW_NO_STATE there is no state to load
YARROW_STATE_ERROR error with state load or save
YARROW_NOT_IMPL not implemented
=head1 AUTHORS
Yarrow was designed by John Kelsey, Bruce Schneier and Niels Ferguson
of Counterpane Systems. This implementation is (C) 2000 by
Zero-Knowledge Systems Inc.
=cut
|