x509write_csr using PK internally (WIP)
diff --git a/library/x509write.c b/library/x509write.c
index 6435388..39a37ba 100644
--- a/library/x509write.c
+++ b/library/x509write.c
@@ -149,9 +149,16 @@
     ctx->md_alg = md_alg;
 }
 
+// TODO: take a pk_context
+// TODO: return int
 void x509write_csr_set_rsa_key( x509write_csr *ctx, rsa_context *rsa )
 {
-    ctx->rsa = rsa;
+    // temporary
+    ctx->key = polarssl_malloc( sizeof( pk_context ) );
+
+    // TODO: check errors
+    pk_init_ctx( ctx->key, pk_info_from_type( POLARSSL_PK_RSA ) );
+    rsa_copy( pk_rsa( *ctx->key ), rsa );
 }
 
 int x509write_csr_set_subject_name( x509write_csr *ctx, char *subject_name )
@@ -718,8 +725,9 @@
     ASN1_CHK_ADD( len, asn1_write_len( &c, tmp_buf, len ) );
     ASN1_CHK_ADD( len, asn1_write_tag( &c, tmp_buf, ASN1_CONSTRUCTED | ASN1_CONTEXT_SPECIFIC ) );
 
-    ASN1_CHK_ADD( pub_len, asn1_write_mpi( &c, tmp_buf, &ctx->rsa->E ) );
-    ASN1_CHK_ADD( pub_len, asn1_write_mpi( &c, tmp_buf, &ctx->rsa->N ) );
+    // TODO: use x509_write_rsa_pubkey() (pb: pub_len)
+    ASN1_CHK_ADD( pub_len, asn1_write_mpi( &c, tmp_buf, &pk_rsa( *ctx->key )->E ) );
+    ASN1_CHK_ADD( pub_len, asn1_write_mpi( &c, tmp_buf, &pk_rsa( *ctx->key )->N ) );
 
     ASN1_CHK_ADD( pub_len, asn1_write_len( &c, tmp_buf, pub_len ) );
     ASN1_CHK_ADD( pub_len, asn1_write_tag( &c, tmp_buf, ASN1_CONSTRUCTED | ASN1_SEQUENCE ) );
@@ -760,16 +768,22 @@
 
     md( md_info_from_type( ctx->md_alg ), c, len, hash );
 
-    rsa_pkcs1_sign( ctx->rsa, NULL, NULL, RSA_PRIVATE, ctx->md_alg, 0, hash, sig );
+    if( !pk_can_do( ctx->key, POLARSSL_PK_RSA ) )
+        return( POLARSSL_ERR_X509_FEATURE_UNAVAILABLE );
+
+    // TODO: use pk_sign()
+    rsa_pkcs1_sign( pk_rsa( *ctx->key ), NULL, NULL, RSA_PRIVATE, ctx->md_alg, 0, hash, sig );
 
     // Generate correct OID
     //
+    // TODO: use pk_info->type
     ret = oid_get_oid_by_sig_alg( POLARSSL_PK_RSA, ctx->md_alg, &sig_oid,
                                   &sig_oid_len );
 
+    // TODO: use pk_get_len()
     c2 = buf + size - 1;
     ASN1_CHK_ADD( sig_len, x509_write_sig( &c2, buf, sig_oid, sig_oid_len,
-                                           sig, ctx->rsa->len ) );
+                                           sig, pk_rsa( *ctx->key )->len ) );
 
     c2 -= len;
     memcpy( c2, c, len );