diff --git a/library/x509parse.c b/library/x509parse.c
index 7d88a0c..feb4d50 100644
--- a/library/x509parse.c
+++ b/library/x509parse.c
@@ -1004,39 +1004,52 @@
 }
 
 /*
+ * Load all data from a file into a given buffer.
+ */
+int load_file( char *path, unsigned char **buf,  size_t *n )
+{
+	FILE *f;
+
+	if( ( f = fopen( path, "rb" ) ) == NULL )
+		return( 1 );
+
+	fseek( f, 0, SEEK_END );
+	*n = (size_t) ftell( f );
+	fseek( f, 0, SEEK_SET );
+
+	if( ( *buf = (unsigned char *) malloc( *n + 1 ) ) == NULL )
+		return( 1 );
+
+	if( fread( *buf, 1, *n, f ) != *n )
+	{
+		fclose( f );
+		free( *buf );
+		return( 1 );
+	}
+
+	fclose( f );
+
+	(*buf)[*n] = '\0';
+
+	return( 0 );
+}
+
+/*
  * Load one or more certificates and add them to the chained list
  */
 int x509parse_crtfile( x509_cert *chain, char *path )
 {
     int ret;
-    FILE *f;
     size_t n;
     unsigned char *buf;
 
-    if( ( f = fopen( path, "rb" ) ) == NULL )
+    if ( load_file( path, &buf, &n ) )
         return( 1 );
 
-    fseek( f, 0, SEEK_END );
-    n = (size_t) ftell( f );
-    fseek( f, 0, SEEK_SET );
-
-    if( ( buf = (unsigned char *) malloc( n + 1 ) ) == NULL )
-        return( 1 );
-
-    if( fread( buf, 1, n, f ) != n )
-    {
-        fclose( f );
-        free( buf );
-        return( 1 );
-    }
-
-    buf[n] = '\0';
-
     ret = x509parse_crt( chain, buf, (int) n );
 
     memset( buf, 0, n + 1 );
     free( buf );
-    fclose( f );
 
     return( ret );
 }
@@ -1299,29 +1312,12 @@
 int x509parse_keyfile( rsa_context *rsa, char *path, char *pwd )
 {
     int ret;
-    FILE *f;
     size_t n;
     unsigned char *buf;
 
-    if( ( f = fopen( path, "rb" ) ) == NULL )
+    if ( load_file( path, &buf, &n ) )
         return( 1 );
 
-    fseek( f, 0, SEEK_END );
-    n = (size_t) ftell( f );
-    fseek( f, 0, SEEK_SET );
-
-    if( ( buf = (unsigned char *) malloc( n + 1 ) ) == NULL )
-        return( 1 );
-
-    if( fread( buf, 1, n, f ) != n )
-    {
-        fclose( f );
-        free( buf );
-        return( 1 );
-    }
-
-    buf[n] = '\0';
-
     if( pwd == NULL )
         ret = x509parse_key( rsa, buf, (int) n, NULL, 0 );
     else
@@ -1330,7 +1326,6 @@
 
     memset( buf, 0, n + 1 );
     free( buf );
-    fclose( f );
 
     return( ret );
 }
