diff --git a/library/rsa.c b/library/rsa.c
index 8cadcad..3133b2f 100644
--- a/library/rsa.c
+++ b/library/rsa.c
@@ -58,9 +58,9 @@
  * Generate an RSA keypair
  */
 int rsa_gen_key( rsa_context *ctx,
-        int (*f_rng)(void *),
-        void *p_rng,
-        unsigned int nbits, int exponent )
+                 int (*f_rng)(void *, unsigned char *, size_t),
+                 void *p_rng,
+                 unsigned int nbits, int exponent )
 {
     int ret;
     mpi P1, Q1, H, G;
@@ -356,16 +356,16 @@
  * Add the message padding, then do an RSA operation
  */
 int rsa_pkcs1_encrypt( rsa_context *ctx,
-                       int (*f_rng)(void *),
+                       int (*f_rng)(void *, unsigned char *, size_t),
                        void *p_rng,
                        int mode, size_t ilen,
                        const unsigned char *input,
                        unsigned char *output )
 {
-    size_t nb_pad, olen;
+    size_t nb_pad, olen, ret;
     unsigned char *p = output;
 #if defined(POLARSSL_PKCS1_V21)
-    unsigned int i, hlen;
+    unsigned int hlen;
     const md_info_t *md_info;
     md_context_t md_ctx;
 #endif
@@ -392,13 +392,13 @@
                 int rng_dl = 100;
 
                 do {
-                    *p = (unsigned char) f_rng( p_rng );
-                } while( *p == 0 && --rng_dl );
+                    ret = f_rng( p_rng, p, 1 );
+                } while( *p == 0 && --rng_dl && ret == 0 );
 
                 // Check if RNG failed to generate data
                 //
-                if( rng_dl == 0 )
-                    return POLARSSL_ERR_RSA_RNG_FAILED;
+                if( rng_dl == 0 || ret != 0)
+                    return POLARSSL_ERR_RSA_RNG_FAILED + ret;
 
                 p++;
             }
@@ -427,8 +427,10 @@
 
             // Generate a random octet string seed
             //
-            for( i = 0; i < hlen; ++i )
-                *p++ = (unsigned char) f_rng( p_rng ); 
+            if( ( ret = f_rng( p_rng, p, hlen ) ) != 0 )
+                return( POLARSSL_ERR_RSA_RNG_FAILED + ret );
+
+            p += hlen;
 
             // Construct DB
             //
@@ -578,7 +580,7 @@
  * Do an RSA operation to sign the message digest
  */
 int rsa_pkcs1_sign( rsa_context *ctx,
-                    int (*f_rng)(void *),
+                    int (*f_rng)(void *, unsigned char *, size_t),
                     void *p_rng,
                     int mode,
                     int hash_id,
@@ -590,7 +592,7 @@
     unsigned char *p = sig;
 #if defined(POLARSSL_PKCS1_V21)
     unsigned char salt[POLARSSL_MD_MAX_SIZE];
-    unsigned int i, slen, hlen, offset = 0;
+    unsigned int slen, hlen, offset = 0, ret;
     size_t msb;
     const md_info_t *md_info;
     md_context_t md_ctx;
@@ -757,8 +759,8 @@
 
             // Generate salt of length slen
             //
-            for( i = 0; i < slen; ++i )
-                salt[i] = (unsigned char) f_rng( p_rng ); 
+            if( ( ret = f_rng( p_rng, salt, slen ) ) != 0 )
+                return( POLARSSL_ERR_RSA_RNG_FAILED + ret );
 
             // Note: EMSA-PSS encoding is over the length of N - 1 bits
             //
@@ -1080,12 +1082,17 @@
 #define RSA_PT  "\xAA\xBB\xCC\x03\x02\x01\x00\xFF\xFF\xFF\xFF\xFF" \
                 "\x11\x22\x33\x0A\x0B\x0C\xCC\xDD\xDD\xDD\xDD\xDD"
 
-static int myrand( void *rng_state )
+static int myrand( 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 );
 }
 
 /*
