diff --git a/library/CMakeLists.txt b/library/CMakeLists.txt
index bef0dbf..2920c55 100644
--- a/library/CMakeLists.txt
+++ b/library/CMakeLists.txt
@@ -20,6 +20,7 @@
     bignum.c
     bignum_new.c
     bignum_core.c
+    bignum_mod_raw.c
     camellia.c
     ccm.c
     chacha20.c
diff --git a/library/Makefile b/library/Makefile
index a1c4bb9..6210878 100644
--- a/library/Makefile
+++ b/library/Makefile
@@ -85,6 +85,7 @@
 	     bignum.o \
 	     bignum_new.o \
 	     bignum_core.o \
+	     bignum_mod_raw.o \
 	     camellia.o \
 	     ccm.o \
 	     chacha20.o \
diff --git a/library/bignum_mod_raw.c b/library/bignum_mod_raw.c
new file mode 100644
index 0000000..305cec1
--- /dev/null
+++ b/library/bignum_mod_raw.c
@@ -0,0 +1,90 @@
+/*
+ *  Multi-precision integer library
+ *
+ *  Copyright The Mbed TLS Contributors
+ *  SPDX-License-Identifier: Apache-2.0
+ *
+ *  Licensed under the Apache License, Version 2.0 (the "License"); you may
+ *  not use this file except in compliance with the License.
+ *  You may obtain a copy of the License at
+ *
+ *  http://www.apache.org/licenses/LICENSE-2.0
+ *
+ *  Unless required by applicable law or agreed to in writing, software
+ *  distributed under the License is distributed on an "AS IS" BASIS, WITHOUT
+ *  WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ *  See the License for the specific language governing permissions and
+ *  limitations under the License.
+ */
+
+#include "common.h"
+
+#if defined(MBEDTLS_BIGNUM_C)
+
+#include <string.h>
+
+#include "mbedtls/error.h"
+#include "mbedtls/platform_util.h"
+
+#if defined(MBEDTLS_PLATFORM_C)
+#include "mbedtls/platform.h"
+#else
+#include <stdio.h>
+#include <stdlib.h>
+#define mbedtls_printf      printf
+#define mbedtls_calloc      calloc
+#define mbedtls_free        free
+#endif
+
+#include "bignum_core.h"
+#include "bignum_mod_raw.h"
+#include "bignum_mod.h"
+#include "constant_time_internal.h"
+
+int mbedtls_mpi_mod_raw_read( mbedtls_mpi_uint *X,
+                              mbedtls_mpi_mod_modulus *m,
+                              unsigned char *buf,
+                              size_t buflen )
+{
+    int ret = MBEDTLS_ERR_ERROR_CORRUPTION_DETECTED;
+
+    if( m->ext_rep == MBEDTLS_MPI_MOD_EXT_REP_LE )
+        ret = mbedtls_mpi_core_read_le( X, m->n, buf, buflen );
+
+    else if( m->ext_rep == MBEDTLS_MPI_MOD_EXT_REP_BE )
+        ret = mbedtls_mpi_core_read_be( X, m->n, buf, buflen );
+    else
+        return( MBEDTLS_ERR_MPI_BAD_INPUT_DATA );
+
+    if( ret != 0 )
+        goto cleanup;
+
+    if( !mbedtls_mpi_core_lt_ct( X, m->p, m->n ) )
+    {
+        ret = MBEDTLS_ERR_MPI_BAD_INPUT_DATA;
+        goto cleanup;
+    }
+
+cleanup:
+
+    return( ret );
+}
+
+int mbedtls_mpi_mod_raw_write( mbedtls_mpi_uint *X,
+                               mbedtls_mpi_mod_modulus *m,
+                               unsigned char *buf,
+                               size_t buflen )
+{
+    if( m->ext_rep == MBEDTLS_MPI_MOD_EXT_REP_LE )
+        return mbedtls_mpi_core_write_le( X, m->n, buf, buflen );
+
+    else if( m->ext_rep == MBEDTLS_MPI_MOD_EXT_REP_BE )
+        return mbedtls_mpi_core_write_be( X, m->n, buf, buflen );
+
+    else
+        return( MBEDTLS_ERR_MPI_BAD_INPUT_DATA );
+
+    return( 0 );
+}
+
+#endif /* MBEDTLS_BIGNUM_C */
diff --git a/library/bignum_mod_raw.h b/library/bignum_mod_raw.h
index 85ca533..a6c535b 100644
--- a/library/bignum_mod_raw.h
+++ b/library/bignum_mod_raw.h
@@ -26,6 +26,8 @@
 #include "mbedtls/bignum.h"
 #endif
 
+#include "bignum_mod.h"
+
 /** Import X from unsigned binary data.
  *
  * The MPI needs to have enough limbs to store the full value (in particular,
diff --git a/library/bignum_new.c b/library/bignum_new.c
index 8b23f13..5ff55aa 100644
--- a/library/bignum_new.c
+++ b/library/bignum_new.c
@@ -149,50 +149,4 @@
     return( ret );
 }
 
-int mbedtls_mpi_mod_raw_read( mbedtls_mpi_uint *X,
-                              mbedtls_mpi_mod_modulus *m,
-                              unsigned char *buf,
-                              size_t buflen )
-{
-    int ret = MBEDTLS_ERR_ERROR_CORRUPTION_DETECTED;
-
-    if( m->ext_rep == MBEDTLS_MPI_MOD_EXT_REP_LE )
-        ret = mbedtls_mpi_core_read_le( X, m->n, buf, buflen );
-
-    else if( m->ext_rep == MBEDTLS_MPI_MOD_EXT_REP_BE )
-        ret = mbedtls_mpi_core_read_be( X, m->n, buf, buflen );
-    else
-        return( MBEDTLS_ERR_MPI_BAD_INPUT_DATA );
-
-    if( ret != 0 )
-        goto cleanup;
-
-    if( !mbedtls_mpi_core_lt_ct( X, m->p, m->n ) )
-    {
-        ret = MBEDTLS_ERR_MPI_BAD_INPUT_DATA;
-        goto cleanup;
-    }
-
-cleanup:
-
-    return( ret );
-}
-
-int mbedtls_mpi_mod_raw_write( mbedtls_mpi_uint *X,
-                               mbedtls_mpi_mod_modulus *m,
-                               unsigned char *buf,
-                               size_t buflen )
-{
-    if( m->ext_rep == MBEDTLS_MPI_MOD_EXT_REP_LE )
-        return mbedtls_mpi_core_write_le( X, m->n, buf, buflen );
-
-    else if( m->ext_rep == MBEDTLS_MPI_MOD_EXT_REP_BE )
-        return mbedtls_mpi_core_write_be( X, m->n, buf, buflen );
-
-    else
-        return( MBEDTLS_ERR_MPI_BAD_INPUT_DATA );
-
-    return( 0 );
-}
-
 #endif /* MBEDTLS_BIGNUM_C */
