Complete EC support in x509write_crt
diff --git a/library/x509write.c b/library/x509write.c
index dffdf74..d4861d7 100644
--- a/library/x509write.c
+++ b/library/x509write.c
@@ -189,6 +189,27 @@
}
#endif /* POLARSSL_ECP_C */
+static int x509_write_pubkey( unsigned char **p, unsigned char *start,
+ const pk_context *key )
+{
+ int ret;
+ size_t len = 0;
+
+#if defined(POLARSSL_RSA_C)
+ if( pk_get_type( key ) == POLARSSL_PK_RSA )
+ ASN1_CHK_ADD( len, x509_write_rsa_pubkey( p, start, pk_rsa( *key ) ) );
+ else
+#endif
+#if defined(POLARSSL_ECP_C)
+ if( pk_get_type( key ) == POLARSSL_PK_ECKEY )
+ ASN1_CHK_ADD( len, x509_write_ec_pubkey( p, start, pk_ec( *key ) ) );
+ else
+#endif
+ return( POLARSSL_ERR_X509_FEATURE_UNAVAILABLE );
+
+ return( len );
+}
+
void x509write_csr_init( x509write_csr *ctx )
{
memset( ctx, 0, sizeof(x509write_csr) );
@@ -404,12 +425,8 @@
unsigned char *c = buf + sizeof(buf);
size_t len = 0;
- if( pk_get_type( ctx->subject_key ) != POLARSSL_PK_RSA )
- return( POLARSSL_ERR_X509_FEATURE_UNAVAILABLE );
-
memset( buf, 0, sizeof(buf));
- ASN1_CHK_ADD( len, x509_write_rsa_pubkey( &c, buf,
- pk_rsa( *ctx->subject_key ) ) );
+ ASN1_CHK_ADD( len, x509_write_pubkey( &c, buf, ctx->subject_key ) );
sha1( buf + sizeof(buf) - len, len, buf + sizeof(buf) - 20 );
c = buf + sizeof(buf) - 20;
@@ -430,12 +447,8 @@
unsigned char *c = buf + sizeof(buf);
size_t len = 0;
- if( pk_get_type( ctx->issuer_key ) != POLARSSL_PK_RSA )
- return( POLARSSL_ERR_X509_FEATURE_UNAVAILABLE );
-
memset( buf, 0, sizeof(buf));
- ASN1_CHK_ADD( len, x509_write_rsa_pubkey( &c, buf,
- pk_rsa( *ctx->issuer_key ) ) );
+ ASN1_CHK_ADD( len, x509_write_pubkey( &c, buf, ctx->issuer_key ) );
sha1( buf + sizeof(buf) - len, len, buf + sizeof(buf) - 20 );
c = buf + sizeof(buf) - 20;
@@ -502,17 +515,7 @@
c = buf + size;
-#if defined(POLARSSL_RSA_C)
- if( pk_get_type( key ) == POLARSSL_PK_RSA )
- ASN1_CHK_ADD( len, x509_write_rsa_pubkey( &c, buf, pk_rsa( *key ) ) );
- else
-#endif
-#if defined(POLARSSL_ECP_C)
- if( pk_get_type( key ) == POLARSSL_PK_ECKEY )
- ASN1_CHK_ADD( len, x509_write_ec_pubkey( &c, buf, pk_ec( *key ) ) );
- else
-#endif
- return( POLARSSL_ERR_X509_FEATURE_UNAVAILABLE );
+ ASN1_CHK_ADD( len, x509_write_pubkey( &c, buf, key ) );
if( c - buf < 1 )
return( POLARSSL_ERR_ASN1_BUF_TOO_SMALL );