diff --git a/library/bignum.c b/library/bignum.c
index 55188b7..8ae3921 100644
--- a/library/bignum.c
+++ b/library/bignum.c
@@ -1559,6 +1559,22 @@
     return( ret );
 }
 
+int mpi_fill_random( mpi *X, int size, int (*f_rng)(void *), void *p_rng )
+{
+    int ret, k;
+    unsigned char *p;
+
+    MPI_CHK( mpi_grow( X, size ) );
+    MPI_CHK( mpi_lset( X, 0 ) );
+
+    p = (unsigned char *) X->p;
+    for( k = 0; k < X->n * ciL; k++ )
+        *p++ = (unsigned char) f_rng( p_rng );
+
+cleanup:
+    return( ret );
+}
+
 #if defined(POLARSSL_GENPRIME)
 
 /*
@@ -1686,7 +1702,6 @@
 {
     int ret, i, j, n, s, xs;
     mpi W, R, T, A, RR;
-    unsigned char *p;
 
     if( mpi_cmp_int( X, 0 ) == 0 ||
         mpi_cmp_int( X, 1 ) == 0 )
@@ -1740,11 +1755,7 @@
         /*
          * pick a random A, 1 < A < |X| - 1
          */
-        MPI_CHK( mpi_grow( &A, X->n ) );
-
-        p = (unsigned char *) A.p;
-        for( j = 0; j < A.n * ciL; j++ )
-            *p++ = (unsigned char) f_rng( p_rng );
+        mpi_fill_random( &A, X->n, f_rng, p_rng );
 
         if( mpi_cmp_mpi( &A, &W ) >= 0 )
         {
@@ -1804,7 +1815,6 @@
                    int (*f_rng)(void *), void *p_rng )
 {
     int ret, k, n;
-    unsigned char *p;
     mpi Y;
 
     if( nbits < 3 )
@@ -1814,12 +1824,7 @@
 
     n = BITS_TO_LIMBS( nbits );
 
-    MPI_CHK( mpi_grow( X, n ) );
-    MPI_CHK( mpi_lset( X, 0 ) );
-
-    p = (unsigned char *) X->p;
-    for( k = 0; k < X->n * ciL; k++ )
-        *p++ = (unsigned char) f_rng( p_rng );
+    mpi_fill_random( X, n, f_rng, p_rng );
 
     k = mpi_msb( X );
     if( k < nbits ) MPI_CHK( mpi_shift_l( X, nbits - k ) );
diff --git a/library/dhm.c b/library/dhm.c
index 9b99a2b..bcad7fc 100644
--- a/library/dhm.c
+++ b/library/dhm.c
@@ -138,12 +138,8 @@
      * Generate X as large as possible ( < P )
      */
     n = x_size / sizeof( t_int ) + 1;
-    MPI_CHK( mpi_grow( &ctx->X, n ) );
-    MPI_CHK( mpi_lset( &ctx->X, 0 ) );
 
-    p = (unsigned char *) ctx->X.p;
-    for( i = 0; i < x_size; i++ )
-        *p++ = (unsigned char) f_rng( p_rng );
+    mpi_fill_random( &ctx->X, n, f_rng, p_rng );
 
     while( mpi_cmp_mpi( &ctx->X, &ctx->P ) >= 0 )
            mpi_shift_r( &ctx->X, 1 );
@@ -220,12 +216,8 @@
      * generate X and calculate GX = G^X mod P
      */
     n = x_size / sizeof( t_int ) + 1;
-    MPI_CHK( mpi_grow( &ctx->X, n ) );
-    MPI_CHK( mpi_lset( &ctx->X, 0 ) );
 
-    p = (unsigned char *) ctx->X.p;
-    for( i = 0; i < x_size; i++ )
-        *p++ = (unsigned char) f_rng( p_rng );
+    mpi_fill_random( &ctx->X, n, f_rng, p_rng );
 
     while( mpi_cmp_mpi( &ctx->X, &ctx->P ) >= 0 )
            mpi_shift_r( &ctx->X, 1 );
