63 lines
2.1 KiB
C
63 lines
2.1 KiB
C
|
/* ---- PRNG Stuff ---- */
|
||
|
struct yarrow_prng {
|
||
|
int cipher, hash;
|
||
|
unsigned char pool[MAXBLOCKSIZE];
|
||
|
symmetric_CTR ctr;
|
||
|
};
|
||
|
|
||
|
struct rc4_prng {
|
||
|
int x, y;
|
||
|
unsigned char buf[256];
|
||
|
};
|
||
|
|
||
|
typedef union Prng_state {
|
||
|
struct yarrow_prng yarrow;
|
||
|
struct rc4_prng rc4;
|
||
|
} prng_state;
|
||
|
|
||
|
extern struct _prng_descriptor {
|
||
|
char *name;
|
||
|
int (*start)(prng_state *);
|
||
|
int (*add_entropy)(const unsigned char *, unsigned long, prng_state *);
|
||
|
int (*ready)(prng_state *);
|
||
|
unsigned long (*read)(unsigned char *, unsigned long len, prng_state *);
|
||
|
} prng_descriptor[];
|
||
|
|
||
|
#ifdef YARROW
|
||
|
extern int yarrow_start(prng_state *prng);
|
||
|
extern int yarrow_add_entropy(const unsigned char *buf, unsigned long len, prng_state *prng);
|
||
|
extern int yarrow_ready(prng_state *prng);
|
||
|
extern unsigned long yarrow_read(unsigned char *buf, unsigned long len, prng_state *prng);
|
||
|
extern const struct _prng_descriptor yarrow_desc;
|
||
|
#endif
|
||
|
|
||
|
#ifdef RC4
|
||
|
extern int rc4_start(prng_state *prng);
|
||
|
extern int rc4_add_entropy(const unsigned char *buf, unsigned long len, prng_state *prng);
|
||
|
extern int rc4_ready(prng_state *prng);
|
||
|
extern unsigned long rc4_read(unsigned char *buf, unsigned long len, prng_state *prng);
|
||
|
extern const struct _prng_descriptor rc4_desc;
|
||
|
#endif
|
||
|
|
||
|
#ifdef SPRNG
|
||
|
extern int sprng_start(prng_state *prng);
|
||
|
extern int sprng_add_entropy(const unsigned char *buf, unsigned long len, prng_state *prng);
|
||
|
extern int sprng_ready(prng_state *prng);
|
||
|
extern unsigned long sprng_read(unsigned char *buf, unsigned long len, prng_state *prng);
|
||
|
extern const struct _prng_descriptor sprng_desc;
|
||
|
#endif
|
||
|
|
||
|
extern int find_prng(const char *name);
|
||
|
extern int register_prng(const struct _prng_descriptor *prng);
|
||
|
extern int unregister_prng(const struct _prng_descriptor *prng);
|
||
|
extern int prng_is_valid(int idx);
|
||
|
|
||
|
|
||
|
/* Slow RNG you **might** be able to use to seed a PRNG with. Be careful as this
|
||
|
* might not work on all platforms as planned
|
||
|
*/
|
||
|
extern unsigned long rng_get_bytes(unsigned char *buf, unsigned long len, void (*callback)(void));
|
||
|
|
||
|
extern int rng_make_prng(int bits, int wprng, prng_state *prng, void (*callback)(void));
|
||
|
|