diff --git a/library/x509parse.c b/library/x509parse.c
index 55149e4..179ff95 100644
--- a/library/x509parse.c
+++ b/library/x509parse.c
@@ -511,12 +511,14 @@
     /*
      * only RSA public keys handled at this time
      */
-    if( oid_get_pk_alg( pk_alg_oid, &pk_alg ) != 0 ||
-            pk_alg != POLARSSL_PK_RSA )
+    if( oid_get_pk_alg( pk_alg_oid, &pk_alg ) != 0 )
     {
         return( POLARSSL_ERR_X509_UNKNOWN_PK_ALG );
     }
 
+    if (pk_alg != POLARSSL_PK_RSA )
+        return( POLARSSL_ERR_X509_CERT_INVALID_ALG );
+
     if( ( ret = asn1_get_tag( p, end, &len, ASN1_BIT_STRING ) ) != 0 )
         return( POLARSSL_ERR_X509_CERT_INVALID_PUBKEY + ret );
 
@@ -2079,12 +2081,11 @@
     return( ret );
 }
 
-#if defined(POLARSSL_ECP_C)
 /*
- * Load and parse a private EC key
+ * Load and parse a private key
  */
-int x509parse_keyfile_ec( ecp_keypair *eckey,
-                          const char *path, const char *pwd )
+int x509parse_keyfile( pk_context *ctx,
+                       const char *path, const char *pwd )
 {
     int ret;
     size_t n;
@@ -2094,9 +2095,9 @@
         return( ret );
 
     if( pwd == NULL )
-        ret = x509parse_key_ec( eckey, buf, n, NULL, 0 );
+        ret = x509parse_key( ctx, buf, n, NULL, 0 );
     else
-        ret = x509parse_key_ec( eckey, buf, n,
+        ret = x509parse_key( ctx, buf, n,
                 (const unsigned char *) pwd, strlen( pwd ) );
 
     memset( buf, 0, n + 1 );
@@ -2106,9 +2107,9 @@
 }
 
 /*
- * Load and parse a public EC key
+ * Load and parse a public key
  */
-int x509parse_public_keyfile_ec( ecp_keypair *eckey, const char *path )
+int x509parse_public_keyfile( pk_context *ctx, const char *path )
 {
     int ret;
     size_t n;
@@ -2117,14 +2118,14 @@
     if ( (ret = load_file( path, &buf, &n ) ) != 0 )
         return( ret );
 
-    ret = x509parse_public_key_ec( eckey, buf, n );
+    ret = x509parse_public_key( ctx, buf, n );
 
     memset( buf, 0, n + 1 );
     free( buf );
 
     return( ret );
 }
-#endif /* defined(POLARSSL_ECP_C) */
+
 #endif /* POLARSSL_FS_IO */
 
 /*
@@ -2259,12 +2260,14 @@
     /*
      * only RSA keys handled at this time
      */
-    if( oid_get_pk_alg( &pk_alg_oid, &pk_alg ) != 0 ||
-            pk_alg != POLARSSL_PK_RSA )
+    if( oid_get_pk_alg( &pk_alg_oid, &pk_alg ) != 0 )
     {
         return( POLARSSL_ERR_X509_UNKNOWN_PK_ALG );
     }
 
+    if (pk_alg != POLARSSL_PK_RSA )
+        return( POLARSSL_ERR_X509_CERT_INVALID_ALG );
+
     /*
      * Get the OCTET STRING and parse the PKCS#1 format inside
      */
@@ -2791,7 +2794,7 @@
         return( POLARSSL_ERR_X509_UNKNOWN_PK_ALG );
 
     if( pk_alg != POLARSSL_PK_ECKEY && pk_alg != POLARSSL_PK_ECKEY_DH )
-        return( POLARSSL_ERR_X509_UNKNOWN_PK_ALG );
+        return( POLARSSL_ERR_X509_CERT_INVALID_ALG );
 
     if( pk_alg == POLARSSL_PK_ECKEY_DH )
         eck->alg = POLARSSL_ECP_KEY_ALG_ECDH;
@@ -2853,9 +2856,9 @@
 /*
  * Parse a private EC key
  */
-int x509parse_key_ec( ecp_keypair *eck,
-                      const unsigned char *key, size_t keylen,
-                      const unsigned char *pwd, size_t pwdlen )
+static int x509parse_key_ec( ecp_keypair *eck,
+                             const unsigned char *key, size_t keylen,
+                             const unsigned char *pwd, size_t pwdlen )
 {
     int ret;
 
@@ -2994,7 +2997,7 @@
         return( POLARSSL_ERR_X509_UNKNOWN_PK_ALG );
 
     if( alg != POLARSSL_PK_ECKEY && alg != POLARSSL_PK_ECKEY_DH )
-        return( POLARSSL_ERR_X509_UNKNOWN_PK_ALG );
+        return( POLARSSL_ERR_X509_CERT_INVALID_ALG );
 
     if( alg == POLARSSL_PK_ECKEY_DH )
         key->alg = POLARSSL_ECP_KEY_ALG_ECDH;
@@ -3016,8 +3019,8 @@
 /*
  * Parse a public EC key
  */
-int x509parse_public_key_ec( ecp_keypair *eckey,
-                             const unsigned char *key, size_t keylen )
+static int x509parse_public_key_ec( ecp_keypair *eckey,
+                                    const unsigned char *key, size_t keylen )
 {
     int ret;
 #if defined(POLARSSL_PEM_C)
@@ -3059,6 +3062,58 @@
 }
 #endif /* defined(POLARSSL_ECP_C) */
 
+/*
+ * Parse a private key
+ */
+int x509parse_key( pk_context *ctx,
+                   const unsigned char *key, size_t keylen,
+                   const unsigned char *pwd, size_t pwdlen )
+{
+    int ret;
+
+    if ( ( ret = pk_set_type( ctx, POLARSSL_PK_RSA ) ) != 0 )
+        return( ret );
+
+    if( ( ret = x509parse_key_rsa( ctx->data, key, keylen, pwd, pwdlen ) )
+            == 0 )
+    {
+        return( 0 );
+    }
+
+    if ( ( ret = pk_set_type( ctx, POLARSSL_PK_ECKEY ) ) != 0 )
+        return( ret );
+
+    if( ( ret = x509parse_key_ec( ctx->data, key, keylen, pwd, pwdlen ) ) == 0 )
+    {
+        return( 0 );
+    }
+
+    return( POLARSSL_ERR_X509_CERT_UNKNOWN_FORMAT );
+}
+
+/*
+ * Parse a public key
+ */
+int x509parse_public_key( pk_context *ctx,
+                          const unsigned char *key, size_t keylen )
+{
+    int ret;
+
+    if ( ( ret = pk_set_type( ctx, POLARSSL_PK_RSA ) ) != 0 )
+        return( ret );
+
+    if( ( ret = x509parse_public_key_rsa( ctx->data, key, keylen ) ) == 0 )
+        return( 0 );
+
+    if ( ( ret = pk_set_type( ctx, POLARSSL_PK_ECKEY ) ) != 0 )
+        return( ret );
+
+    if( ( ret = x509parse_public_key_ec( ctx->data, key, keylen ) ) == 0 )
+        return( 0 );
+
+    return( POLARSSL_ERR_X509_CERT_UNKNOWN_FORMAT );
+}
+
 #if defined(POLARSSL_DHM_C)
 /*
  * Parse DHM parameters
