Prepare transition from x509_cert.rsa to pk
diff --git a/library/x509parse.c b/library/x509parse.c
index a2a8660..7c69aa2 100644
--- a/library/x509parse.c
+++ b/library/x509parse.c
@@ -637,21 +637,6 @@
     return( ret );
 }
 
-/*
- * Get an RSA public key (compatibility wrapper)
- */
-static int x509_get_pubkey_rsa( unsigned char **p,
-                                const unsigned char *end,
-                                rsa_context *rsa )
-{
-    pk_context pk_ctx;
-
-    pk_init( &pk_ctx );
-    pk_wrap_rsa( &pk_ctx, rsa );
-
-    return( x509_get_pubkey( p, end, &pk_ctx ) );
-}
-
 static int x509_get_sig( unsigned char **p,
                          const unsigned char *end,
                          x509_buf *sig )
@@ -1416,13 +1401,24 @@
     /*
      * SubjectPublicKeyInfo
      */
-    if( ( ret = x509_get_pubkey_rsa( &p, end, &crt->rsa ) ) != 0 )
+    if( ( ret = x509_get_pubkey( &p, end, &crt->pk ) ) != 0 )
     {
         x509_free( crt );
         return( ret );
     }
 
     /*
+     * Temporary hack for compatibility while transitioning to PK abstraction
+     * (Cannot use rsa_wrap above since it would force RSA key type.)
+     */
+    if( crt->pk.type == POLARSSL_PK_RSA ) {
+        memcpy( &crt->rsa, pk_rsa( crt->pk ), sizeof( rsa_context ) );
+        free( crt->pk.data );
+        crt->pk.data = &crt->rsa;
+        crt->pk.dont_free = 1;
+    }
+
+    /*
      *  issuerUniqueID  [1]  IMPLICIT UniqueIdentifier OPTIONAL,
      *                       -- If present, version shall be v2 or v3
      *  subjectUniqueID [2]  IMPLICIT UniqueIdentifier OPTIONAL,
@@ -3969,6 +3965,7 @@
 
     do
     {
+        pk_free( &cert_cur->pk );
         rsa_free( &cert_cur->rsa );
 
         name_cur = cert_cur->issuer.next;