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;