| 
									
										
										
										
											2003-03-03 00:59:24 +00:00
										 |  |  | /* ---- 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 | 
					
						
							|  |  |  |  */ | 
					
						
							| 
									
										
										
										
											2003-03-03 01:03:50 +00:00
										 |  |  | /* ch2-02-1 */  | 
					
						
							|  |  |  | extern unsigned long rng_get_bytes(unsigned char *buf,  | 
					
						
							|  |  |  |                                    unsigned long len,  | 
					
						
							|  |  |  |                                    void (*callback)(void)); | 
					
						
							|  |  |  | /* ch2-02-1 */ | 
					
						
							| 
									
										
										
										
											2003-03-03 00:59:24 +00:00
										 |  |  | 
 | 
					
						
							|  |  |  | extern int rng_make_prng(int bits, int wprng, prng_state *prng, void (*callback)(void)); | 
					
						
							|  |  |  | 
 |