3
|
1 /* ---- PRNG Stuff ---- */ |
|
2 struct yarrow_prng { |
|
3 int cipher, hash; |
|
4 unsigned char pool[MAXBLOCKSIZE]; |
|
5 symmetric_CTR ctr; |
|
6 }; |
|
7 |
|
8 struct rc4_prng { |
|
9 int x, y; |
|
10 unsigned char buf[256]; |
|
11 }; |
|
12 |
|
13 typedef union Prng_state { |
|
14 struct yarrow_prng yarrow; |
|
15 struct rc4_prng rc4; |
|
16 } prng_state; |
|
17 |
|
18 extern struct _prng_descriptor { |
|
19 char *name; |
|
20 int (*start)(prng_state *); |
|
21 int (*add_entropy)(const unsigned char *, unsigned long, prng_state *); |
|
22 int (*ready)(prng_state *); |
|
23 unsigned long (*read)(unsigned char *, unsigned long len, prng_state *); |
|
24 } prng_descriptor[]; |
|
25 |
|
26 #ifdef YARROW |
|
27 extern int yarrow_start(prng_state *prng); |
|
28 extern int yarrow_add_entropy(const unsigned char *buf, unsigned long len, prng_state *prng); |
|
29 extern int yarrow_ready(prng_state *prng); |
|
30 extern unsigned long yarrow_read(unsigned char *buf, unsigned long len, prng_state *prng); |
|
31 extern const struct _prng_descriptor yarrow_desc; |
|
32 #endif |
|
33 |
|
34 #ifdef RC4 |
|
35 extern int rc4_start(prng_state *prng); |
|
36 extern int rc4_add_entropy(const unsigned char *buf, unsigned long len, prng_state *prng); |
|
37 extern int rc4_ready(prng_state *prng); |
|
38 extern unsigned long rc4_read(unsigned char *buf, unsigned long len, prng_state *prng); |
|
39 extern const struct _prng_descriptor rc4_desc; |
|
40 #endif |
|
41 |
|
42 #ifdef SPRNG |
|
43 extern int sprng_start(prng_state *prng); |
|
44 extern int sprng_add_entropy(const unsigned char *buf, unsigned long len, prng_state *prng); |
|
45 extern int sprng_ready(prng_state *prng); |
|
46 extern unsigned long sprng_read(unsigned char *buf, unsigned long len, prng_state *prng); |
|
47 extern const struct _prng_descriptor sprng_desc; |
|
48 #endif |
|
49 |
|
50 extern int find_prng(const char *name); |
|
51 extern int register_prng(const struct _prng_descriptor *prng); |
|
52 extern int unregister_prng(const struct _prng_descriptor *prng); |
|
53 extern int prng_is_valid(int idx); |
|
54 |
|
55 |
|
56 /* Slow RNG you **might** be able to use to seed a PRNG with. Be careful as this |
|
57 * might not work on all platforms as planned |
|
58 */ |
|
59 /* ch2-02-1 */ |
|
60 extern unsigned long rng_get_bytes(unsigned char *buf, |
|
61 unsigned long len, |
|
62 void (*callback)(void)); |
|
63 /* ch2-02-1 */ |
|
64 |
|
65 extern int rng_make_prng(int bits, int wprng, prng_state *prng, void (*callback)(void)); |
|
66 |