1
/* ---- PRNG Stuff ---- */
5
unsigned char pool[MAXBLOCKSIZE];
13
unsigned char buf[256];
19
hash_state pool[FORTUNA_POOLS]; /* the pools */
23
unsigned char K[32], /* the current key */
24
IV[16]; /* IV for CTR mode */
26
unsigned long pool_idx, /* current pool we will add to */
27
pool0_len, /* length of 0'th pool */
30
ulong64 reset_cnt; /* number of times we have reset */
35
struct sober128_prng {
36
ulong32 R[17], /* Working storage for the shift register */
37
initR[17], /* saved register contents */
38
konst, /* key dependent constant */
39
sbuf; /* partial word encryption buffer */
41
int nbuf, /* number of part-word stream bits buffered */
42
flag, /* first add_entropy call or not? */
43
set; /* did we call add_entropy to set key? */
48
typedef union Prng_state {
50
struct yarrow_prng yarrow;
56
struct fortuna_prng fortuna;
59
struct sober128_prng sober128;
63
extern struct ltc_prng_descriptor {
64
/** Name of the PRNG */
66
/** size in bytes of exported state */
68
/** Start a PRNG state
69
@param prng [out] The state to initialize
70
@return CRYPT_OK if successful
72
int (*start)(prng_state *prng);
73
/** Add entropy to the PRNG
75
@param inlen Length of the entropy (octets)\
76
@param prng The PRNG state
77
@return CRYPT_OK if successful
79
int (*add_entropy)(const unsigned char *in, unsigned long inlen, prng_state *prng);
80
/** Ready a PRNG state to read from
81
@param prng The PRNG state to ready
82
@return CRYPT_OK if successful
84
int (*ready)(prng_state *prng);
85
/** Read from the PRNG
86
@param out [out] Where to store the data
87
@param outlen Length of data desired (octets)
88
@param prng The PRNG state to read from
89
@return Number of octets read
91
unsigned long (*read)(unsigned char *out, unsigned long outlen, prng_state *prng);
92
/** Terminate a PRNG state
93
@param prng The PRNG state to terminate
94
@return CRYPT_OK if successful
96
int (*done)(prng_state *prng);
97
/** Export a PRNG state
98
@param out [out] The destination for the state
99
@param outlen [in/out] The max size and resulting size of the PRNG state
100
@param prng The PRNG to export
101
@return CRYPT_OK if successful
103
int (*pexport)(unsigned char *out, unsigned long *outlen, prng_state *prng);
104
/** Import a PRNG state
105
@param in The data to import
106
@param inlen The length of the data to import (octets)
107
@param prng The PRNG to initialize/import
108
@return CRYPT_OK if successful
110
int (*pimport)(const unsigned char *in, unsigned long inlen, prng_state *prng);
111
/** Self-test the PRNG
112
@return CRYPT_OK if successful, CRYPT_NOP if self-testing has been disabled
118
int yarrow_start(prng_state *prng);
119
int yarrow_add_entropy(const unsigned char *in, unsigned long inlen, prng_state *prng);
120
int yarrow_ready(prng_state *prng);
121
unsigned long yarrow_read(unsigned char *out, unsigned long outlen, prng_state *prng);
122
int yarrow_done(prng_state *prng);
123
int yarrow_export(unsigned char *out, unsigned long *outlen, prng_state *prng);
124
int yarrow_import(const unsigned char *in, unsigned long inlen, prng_state *prng);
125
int yarrow_test(void);
126
extern const struct ltc_prng_descriptor yarrow_desc;
130
int fortuna_start(prng_state *prng);
131
int fortuna_add_entropy(const unsigned char *in, unsigned long inlen, prng_state *prng);
132
int fortuna_ready(prng_state *prng);
133
unsigned long fortuna_read(unsigned char *out, unsigned long outlen, prng_state *prng);
134
int fortuna_done(prng_state *prng);
135
int fortuna_export(unsigned char *out, unsigned long *outlen, prng_state *prng);
136
int fortuna_import(const unsigned char *in, unsigned long inlen, prng_state *prng);
137
int fortuna_test(void);
138
extern const struct ltc_prng_descriptor fortuna_desc;
142
int rc4_start(prng_state *prng);
143
int rc4_add_entropy(const unsigned char *in, unsigned long inlen, prng_state *prng);
144
int rc4_ready(prng_state *prng);
145
unsigned long rc4_read(unsigned char *out, unsigned long outlen, prng_state *prng);
146
int rc4_done(prng_state *prng);
147
int rc4_export(unsigned char *out, unsigned long *outlen, prng_state *prng);
148
int rc4_import(const unsigned char *in, unsigned long inlen, prng_state *prng);
150
extern const struct ltc_prng_descriptor rc4_desc;
154
int sprng_start(prng_state *prng);
155
int sprng_add_entropy(const unsigned char *in, unsigned long inlen, prng_state *prng);
156
int sprng_ready(prng_state *prng);
157
unsigned long sprng_read(unsigned char *out, unsigned long outlen, prng_state *prng);
158
int sprng_done(prng_state *prng);
159
int sprng_export(unsigned char *out, unsigned long *outlen, prng_state *prng);
160
int sprng_import(const unsigned char *in, unsigned long inlen, prng_state *prng);
161
int sprng_test(void);
162
extern const struct ltc_prng_descriptor sprng_desc;
166
int sober128_start(prng_state *prng);
167
int sober128_add_entropy(const unsigned char *in, unsigned long inlen, prng_state *prng);
168
int sober128_ready(prng_state *prng);
169
unsigned long sober128_read(unsigned char *out, unsigned long outlen, prng_state *prng);
170
int sober128_done(prng_state *prng);
171
int sober128_export(unsigned char *out, unsigned long *outlen, prng_state *prng);
172
int sober128_import(const unsigned char *in, unsigned long inlen, prng_state *prng);
173
int sober128_test(void);
174
extern const struct ltc_prng_descriptor sober128_desc;
177
int find_prng(const char *name);
178
int register_prng(const struct ltc_prng_descriptor *prng);
179
int unregister_prng(const struct ltc_prng_descriptor *prng);
180
int prng_is_valid(int idx);
181
LTC_MUTEX_PROTO(ltc_prng_mutex);
183
/* Slow RNG you **might** be able to use to seed a PRNG with. Be careful as this
184
* might not work on all platforms as planned
186
unsigned long rng_get_bytes(unsigned char *out,
187
unsigned long outlen,
188
void (*callback)(void));
190
int rng_make_prng(int bits, int wprng, prng_state *prng, void (*callback)(void));
193
/* $Source: /cvs/libtom/libtomcrypt/src/headers/tomcrypt_prng.h,v $ */
194
/* $Revision: 1.3 $ */
195
/* $Date: 2005/06/19 18:00:28 $ */