- Changed the used random function pointer to more flexible format. Renamed havege_rand() to havege_random() to prevent mistakes. Lots of changes as a consequence in library code and programs
diff --git a/library/havege.c b/library/havege.c
index 11c3d28..ff302c5 100644
--- a/library/havege.c
+++ b/library/havege.c
@@ -200,18 +200,32 @@
/*
* HAVEGE rand function
*/
-int havege_rand( void *p_rng )
+int havege_random( void *p_rng, unsigned char *buf, size_t len )
{
- int ret;
+ int val;
+ size_t use_len;
havege_state *hs = (havege_state *) p_rng;
+ unsigned char *p = buf;
- if( hs->offset[1] >= COLLECT_SIZE )
- havege_fill( hs );
+ while( len > 0 )
+ {
+ use_len = len;
+ if( use_len > sizeof(int) )
+ use_len = sizeof(int);
- ret = hs->pool[hs->offset[0]++];
- ret ^= hs->pool[hs->offset[1]++];
+ if( hs->offset[1] >= COLLECT_SIZE )
+ havege_fill( hs );
- return( ret );
+ val = hs->pool[hs->offset[0]++];
+ val ^= hs->pool[hs->offset[1]++];
+
+ memcpy( p, &val, use_len );
+
+ len -= use_len;
+ p += use_len;
+ }
+
+ return( 0 );
}
#endif