diff --git a/tests/suites/helpers.function b/tests/suites/helpers.function
index cfb0253..94d7273 100644
--- a/tests/suites/helpers.function
+++ b/tests/suites/helpers.function
@@ -97,12 +97,17 @@
  *
  * rng_state shall be NULL.
  */
-static int rnd_std_rand( void *rng_state )
+static int rnd_std_rand( void *rng_state, unsigned char *output, size_t len )
 {
+    size_t i;
+
     if( rng_state != NULL )
         rng_state  = NULL;
 
-    return( rand() );
+    for( i = 0; i < len; ++i )
+        output[i] = rand();
+
+    return( 0 );
 }
 
 /**
@@ -110,19 +115,20 @@
  *
  * rng_state shall be NULL.
  */
-static int rnd_zero_rand( void *rng_state )
+static int rnd_zero_rand( void *rng_state, unsigned char *output, size_t len )
 {
     if( rng_state != NULL )
         rng_state  = NULL;
 
+    memset( output, 0, len );
+
     return( 0 );
 }
 
 typedef struct
 {
     unsigned char *buf;
-    int length;
-    int per_call;
+    size_t length;
 } rnd_buf_info;
 
 /**
@@ -136,34 +142,29 @@
  *
  * After the buffer is empty it will return rand();
  */
-static int rnd_buffer_rand( void *rng_state )
+static int rnd_buffer_rand( void *rng_state, unsigned char *output, size_t len )
 {
     rnd_buf_info *info = (rnd_buf_info *) rng_state;
-    int res;
+    size_t use_len;
 
     if( rng_state == NULL )
-        return( rand() );
+        return( rnd_std_rand( NULL, output, len ) );
 
-    if( info->per_call > 4 )
-        info->per_call = 4;
-    else if( info->per_call < 1 )
-        info->per_call = 1;
+    use_len = len;
+    if( len > info->length )
+        use_len = info->length;
 
-    res = rand();
-
-    if( info->length >= info->per_call )
+    if( use_len )
     {
-        memcpy( &res, info->buf, info->per_call );
-        info->buf += info->per_call;
-        info->length -= info->per_call;
-    }
-    else if( info->length > 0 )
-    {
-        memcpy( &res, info->buf, info->length );
-        info->length = 0;
+        memcpy( output, info->buf, use_len );
+        info->buf += use_len;
+        info->length -= use_len;
     }
 
-    return( res );
+    if( len - use_len > 0 )
+        return( rnd_std_rand( NULL, output + use_len, len - use_len ) );
+
+    return( 0 );
 }
 
 /**
@@ -187,21 +188,33 @@
  *
  * rng_state shall be a pointer to a rnd_pseudo_info structure.
  */
-static int rnd_pseudo_rand( void *rng_state )
+static int rnd_pseudo_rand( void *rng_state, unsigned char *output, size_t len )
 {
     rnd_pseudo_info *info = (rnd_pseudo_info *) rng_state;
-    uint32_t i, *k, sum = 0, delta=0x9E3779B9;
+    uint32_t i, *k, sum, delta=0x9E3779B9;
 
     if( rng_state == NULL )
-        return( rand() );
+        return( rnd_std_rand( NULL, output, len ) );
 
     k = info->key;
-    for( i = 0; i < 32; i++ )
+
+    while( len > 0 )
     {
-        info->v0 += (((info->v1 << 4) ^ (info->v1 >> 5)) + info->v1) ^ (sum + k[sum & 3]);
-        sum += delta;
-        info->v1 += (((info->v0 << 4) ^ (info->v0 >> 5)) + info->v0) ^ (sum + k[(sum>>11) & 3]);
+        size_t use_len = len;
+        sum = 0;
+
+        use_len = 1;
+
+        for( i = 0; i < 32; i++ )
+        {
+            info->v0 += (((info->v1 << 4) ^ (info->v1 >> 5)) + info->v1) ^ (sum + k[sum & 3]);
+            sum += delta;
+            info->v1 += (((info->v0 << 4) ^ (info->v0 >> 5)) + info->v0) ^ (sum + k[(sum>>11) & 3]);
+        }
+
+        memcpy( output, &info->v0, use_len );
+        len -= use_len;
     }
 
-    return( info->v0 );
+    return( 0 );
 }
