Interface change in ECP info functions

ecp_named_curve_from_grp_id() -> ecp_curve_info_from_grp_id()
ecp_grp_id_from_named_curve() -> ecp_curve_info_from_tls_id()
This commit is contained in:
Manuel Pégourié-Gonnard 2013-09-23 18:14:50 +02:00
parent f71e587c5e
commit f24b4a7316
3 changed files with 40 additions and 30 deletions

View file

@ -63,6 +63,11 @@ typedef enum
POLARSSL_ECP_DP_SECP521R1, /*!< 521-bits NIST curve */ POLARSSL_ECP_DP_SECP521R1, /*!< 521-bits NIST curve */
} ecp_group_id; } ecp_group_id;
/**
* Number of supported curves (plus one for NONE)
*/
#define POLARSSL_ECP_DP_MAX 6
/** /**
* Curve information for use by other modules * Curve information for use by other modules
*/ */
@ -365,24 +370,22 @@ int ecp_tls_write_group( const ecp_group *grp, size_t *olen,
unsigned char *buf, size_t blen ); unsigned char *buf, size_t blen );
/** /**
* \brief Get a TLS NamedCurve value from an internal group identifier * \brief Get curve information from an internal group identifier
* *
* \param grp_id A POLARSSL_ECP_DP_XXX value * \param grp_id A POLARSSL_ECP_DP_XXX value
* *
* \return The associated TLS NamedCurve value on success, * \return The associated curve information or NULL
* 0 on failure.
*/ */
uint16_t ecp_named_curve_from_grp_id( ecp_group_id id ); const ecp_curve_info *ecp_curve_info_from_grp_id( ecp_group_id grp_id );
/** /**
* \brief Get an internal group identifier from a TLS NamedCurve value * \brief Get curve information from a TLS NamedCurve value
* *
* \param curve A value from TLS's enum NamedCurve * \param grp_id A POLARSSL_ECP_DP_XXX value
* *
* \return The associated POLARSSL_ECP_DP_XXX identifer on success, * \return The associated curve information or NULL
* POLARSSL_ECP_DP_NONE on failure.
*/ */
ecp_group_id ecp_grp_id_from_named_curve( uint16_t curve ); const ecp_curve_info *ecp_curve_info_from_tls_id( uint16_t tls_id );
/** /**
* \brief Import a point from a TLS ECPoint record * \brief Import a point from a TLS ECPoint record

View file

@ -703,7 +703,8 @@ int ecp_use_known_dp( ecp_group *grp, ecp_group_id id )
*/ */
int ecp_tls_read_group( ecp_group *grp, const unsigned char **buf, size_t len ) int ecp_tls_read_group( ecp_group *grp, const unsigned char **buf, size_t len )
{ {
unsigned int named_curve; uint16_t tls_id;
const ecp_curve_info *curve_info;
/* /*
* We expect at least three bytes (see below) * We expect at least three bytes (see below)
@ -720,10 +721,14 @@ int ecp_tls_read_group( ecp_group *grp, const unsigned char **buf, size_t len )
/* /*
* Next two bytes are the namedcurve value * Next two bytes are the namedcurve value
*/ */
named_curve = *(*buf)++; tls_id = *(*buf)++;
named_curve <<= 8; tls_id <<= 8;
named_curve |= *(*buf)++; tls_id |= *(*buf)++;
return ecp_use_known_dp( grp, ecp_grp_id_from_named_curve( named_curve ) );
if( ( curve_info = ecp_curve_info_from_tls_id( tls_id ) ) == NULL )
return( POLARSSL_ERR_ECP_FEATURE_UNAVAILABLE );
return ecp_use_known_dp( grp, curve_info->grp_id );
} }
/* /*
@ -732,7 +737,10 @@ int ecp_tls_read_group( ecp_group *grp, const unsigned char **buf, size_t len )
int ecp_tls_write_group( const ecp_group *grp, size_t *olen, int ecp_tls_write_group( const ecp_group *grp, size_t *olen,
unsigned char *buf, size_t blen ) unsigned char *buf, size_t blen )
{ {
unsigned int named_curve; const ecp_curve_info *curve_info;
if( ( curve_info = ecp_curve_info_from_grp_id( grp->id ) ) == NULL )
return( POLARSSL_ERR_ECP_BAD_INPUT_DATA );
/* /*
* We are going to write 3 bytes (see below) * We are going to write 3 bytes (see below)
@ -749,17 +757,16 @@ int ecp_tls_write_group( const ecp_group *grp, size_t *olen,
/* /*
* Next two bytes are the namedcurve value * Next two bytes are the namedcurve value
*/ */
named_curve = ecp_named_curve_from_grp_id( grp->id ); buf[0] = curve_info->tls_id >> 8;
buf[0] = named_curve >> 8; buf[1] = curve_info->tls_id & 0xFF;
buf[1] = named_curve & 0xFF;
return 0; return 0;
} }
/* /*
* Get the internal identifer from the TLS name * Get the curve info from the TLS identifier
*/ */
ecp_group_id ecp_grp_id_from_named_curve( uint16_t tls_id ) const ecp_curve_info *ecp_curve_info_from_tls_id( uint16_t tls_id )
{ {
const ecp_curve_info *curve_info; const ecp_curve_info *curve_info;
@ -768,16 +775,16 @@ ecp_group_id ecp_grp_id_from_named_curve( uint16_t tls_id )
curve_info++ ) curve_info++ )
{ {
if( curve_info->tls_id == tls_id ) if( curve_info->tls_id == tls_id )
return( curve_info->grp_id ); return( curve_info );
} }
return( POLARSSL_ECP_DP_NONE ); return( NULL );
} }
/* /*
* Get the TLS name for the internal identifer * Get the curve info for the internal identifer
*/ */
uint16_t ecp_named_curve_from_grp_id( ecp_group_id grp_id ) const ecp_curve_info *ecp_curve_info_from_grp_id( ecp_group_id grp_id )
{ {
const ecp_curve_info *curve_info; const ecp_curve_info *curve_info;
@ -786,10 +793,10 @@ uint16_t ecp_named_curve_from_grp_id( ecp_group_id grp_id )
curve_info++ ) curve_info++ )
{ {
if( curve_info->grp_id == grp_id ) if( curve_info->grp_id == grp_id )
return( curve_info->tls_id ); return( curve_info );
} }
return( 0 ); return( NULL );
} }
/* /*

View file

@ -503,7 +503,7 @@ static int ssl_parse_supported_elliptic_curves( ssl_context *ssl,
{ {
size_t list_size; size_t list_size;
const unsigned char *p; const unsigned char *p;
ecp_group_id grp_id; const ecp_curve_info *curve_info;
list_size = ( ( buf[0] << 8 ) | ( buf[1] ) ); list_size = ( ( buf[0] << 8 ) | ( buf[1] ) );
if( list_size + 2 != len || if( list_size + 2 != len ||
@ -516,11 +516,11 @@ static int ssl_parse_supported_elliptic_curves( ssl_context *ssl,
p = buf + 2; p = buf + 2;
while( list_size > 0 ) while( list_size > 0 )
{ {
grp_id = ecp_grp_id_from_named_curve( ( p[0] << 8 ) | p[1] ); curve_info = ecp_curve_info_from_tls_id( ( p[0] << 8 ) | p[1] );
if( grp_id != POLARSSL_ECP_DP_NONE ) if( curve_info != NULL )
{ {
ssl->handshake->ec_curve = grp_id; ssl->handshake->ec_curve = curve_info->grp_id;
return( 0 ); return( 0 );
} }