mirror of
https://github.com/Mbed-TLS/mbedtls.git
synced 2025-03-24 19:43:32 +00:00
Complete EC support in x509write_crt
This commit is contained in:
parent
31e59400d2
commit
bb323ffc7c
@ -189,6 +189,27 @@ static int x509_write_ec_param( unsigned char **p, unsigned char *start,
|
|||||||
}
|
}
|
||||||
#endif /* POLARSSL_ECP_C */
|
#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 )
|
void x509write_csr_init( x509write_csr *ctx )
|
||||||
{
|
{
|
||||||
memset( ctx, 0, sizeof(x509write_csr) );
|
memset( ctx, 0, sizeof(x509write_csr) );
|
||||||
@ -404,12 +425,8 @@ int x509write_crt_set_subject_key_identifier( x509write_cert *ctx )
|
|||||||
unsigned char *c = buf + sizeof(buf);
|
unsigned char *c = buf + sizeof(buf);
|
||||||
size_t len = 0;
|
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));
|
memset( buf, 0, sizeof(buf));
|
||||||
ASN1_CHK_ADD( len, x509_write_rsa_pubkey( &c, buf,
|
ASN1_CHK_ADD( len, x509_write_pubkey( &c, buf, ctx->subject_key ) );
|
||||||
pk_rsa( *ctx->subject_key ) ) );
|
|
||||||
|
|
||||||
sha1( buf + sizeof(buf) - len, len, buf + sizeof(buf) - 20 );
|
sha1( buf + sizeof(buf) - len, len, buf + sizeof(buf) - 20 );
|
||||||
c = buf + sizeof(buf) - 20;
|
c = buf + sizeof(buf) - 20;
|
||||||
@ -430,12 +447,8 @@ int x509write_crt_set_authority_key_identifier( x509write_cert *ctx )
|
|||||||
unsigned char *c = buf + sizeof(buf);
|
unsigned char *c = buf + sizeof(buf);
|
||||||
size_t len = 0;
|
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));
|
memset( buf, 0, sizeof(buf));
|
||||||
ASN1_CHK_ADD( len, x509_write_rsa_pubkey( &c, buf,
|
ASN1_CHK_ADD( len, x509_write_pubkey( &c, buf, ctx->issuer_key ) );
|
||||||
pk_rsa( *ctx->issuer_key ) ) );
|
|
||||||
|
|
||||||
sha1( buf + sizeof(buf) - len, len, buf + sizeof(buf) - 20 );
|
sha1( buf + sizeof(buf) - len, len, buf + sizeof(buf) - 20 );
|
||||||
c = buf + sizeof(buf) - 20;
|
c = buf + sizeof(buf) - 20;
|
||||||
@ -502,17 +515,7 @@ int x509write_pubkey_der( pk_context *key, unsigned char *buf, size_t size )
|
|||||||
|
|
||||||
c = buf + size;
|
c = buf + size;
|
||||||
|
|
||||||
#if defined(POLARSSL_RSA_C)
|
ASN1_CHK_ADD( len, x509_write_pubkey( &c, buf, key ) );
|
||||||
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 );
|
|
||||||
|
|
||||||
if( c - buf < 1 )
|
if( c - buf < 1 )
|
||||||
return( POLARSSL_ERR_ASN1_BUF_TOO_SMALL );
|
return( POLARSSL_ERR_ASN1_BUF_TOO_SMALL );
|
||||||
|
Loading…
x
Reference in New Issue
Block a user