diff --git a/library/bignum.c b/library/bignum.c
index 39e36a7..842b38b 100644
--- a/library/bignum.c
+++ b/library/bignum.c
@@ -132,7 +132,7 @@
 
         if( X->p != NULL )
         {
-            memcpy( p, X->p, X->n * ciL );
+            mbedtls_platform_memcpy( p, X->p, X->n * ciL );
             mbedtls_mpi_zeroize( X->p, X->n );
             mbedtls_free( X->p );
         }
@@ -174,7 +174,7 @@
 
     if( X->p != NULL )
     {
-        memcpy( p, X->p, i * ciL );
+        mbedtls_platform_memcpy( p, X->p, i * ciL );
         mbedtls_mpi_zeroize( X->p, X->n );
         mbedtls_free( X->p );
     }
@@ -220,7 +220,7 @@
         mbedtls_platform_memset( X->p + i, 0, ( X->n - i ) * ciL );
     }
 
-    memcpy( X->p, Y->p, i * ciL );
+    mbedtls_platform_memcpy( X->p, Y->p, i * ciL );
 
 cleanup:
 
@@ -236,9 +236,9 @@
     MPI_VALIDATE( X != NULL );
     MPI_VALIDATE( Y != NULL );
 
-    memcpy( &T,  X, sizeof( mbedtls_mpi ) );
-    memcpy(  X,  Y, sizeof( mbedtls_mpi ) );
-    memcpy(  Y, &T, sizeof( mbedtls_mpi ) );
+    mbedtls_platform_memcpy( &T,  X, sizeof( mbedtls_mpi ) );
+    mbedtls_platform_memcpy(  X,  Y, sizeof( mbedtls_mpi ) );
+    mbedtls_platform_memcpy(  Y, &T, sizeof( mbedtls_mpi ) );
 }
 
 /*
@@ -848,12 +848,12 @@
     }
     MBEDTLS_MPI_CHK( mbedtls_mpi_lset( X, 0 ) );
 
-    /* Avoid calling `memcpy` with NULL source argument,
+    /* Avoid calling `mbedtls_platform_memcpy` with NULL source argument,
      * even if buflen is 0. */
     if( buf != NULL )
     {
         Xp = (unsigned char*) X->p;
-        memcpy( Xp + overhead, buf, buflen );
+        mbedtls_platform_memcpy( Xp + overhead, buf, buflen );
 
         mpi_bigendian_to_host( X->p, limbs );
     }
@@ -1817,7 +1817,7 @@
         *d++ = u0; d[n + 1] = 0;
     }
 
-    memcpy( A->p, d, ( n + 1 ) * ciL );
+    mbedtls_platform_memcpy( A->p, d, ( n + 1 ) * ciL );
 
     if( mbedtls_mpi_cmp_abs( A, N ) >= 0 )
         mpi_sub_hlp( n, N->p, A->p );
@@ -1913,10 +1913,10 @@
         MBEDTLS_MPI_CHK( mbedtls_mpi_mod_mpi( &RR, &RR, N ) );
 
         if( _RR != NULL )
-            memcpy( _RR, &RR, sizeof( mbedtls_mpi ) );
+            mbedtls_platform_memcpy( _RR, &RR, sizeof( mbedtls_mpi ) );
     }
     else
-        memcpy( &RR, _RR, sizeof( mbedtls_mpi ) );
+        mbedtls_platform_memcpy( &RR, _RR, sizeof( mbedtls_mpi ) );
 
     /*
      * W[1] = A * R^2 * R^-1 mod N = A * R mod N
