ECDSA: Add mbedtls_ecdsa_can_do
This commit is contained in:
parent
8a0f5bb3c1
commit
0082f9df6f
3 changed files with 32 additions and 5 deletions
11
include/mbedtls/ecdsa.h
Normal file → Executable file
11
include/mbedtls/ecdsa.h
Normal file → Executable file
|
@ -125,6 +125,16 @@ typedef void mbedtls_ecdsa_restart_ctx;
|
||||||
|
|
||||||
#endif /* MBEDTLS_ECP_RESTARTABLE */
|
#endif /* MBEDTLS_ECP_RESTARTABLE */
|
||||||
|
|
||||||
|
/**
|
||||||
|
* \brief This function checks whether a given group can be used
|
||||||
|
* for ECDSA.
|
||||||
|
*
|
||||||
|
* \param gid The ECP group ID to check.
|
||||||
|
*
|
||||||
|
* \return \c 1 if the group can be used, \c 0 otherwise
|
||||||
|
*/
|
||||||
|
int mbedtls_ecdsa_can_do( mbedtls_ecp_group_id gid );
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* \brief This function computes the ECDSA signature of a
|
* \brief This function computes the ECDSA signature of a
|
||||||
* previously-hashed message.
|
* previously-hashed message.
|
||||||
|
@ -469,7 +479,6 @@ int mbedtls_ecdsa_read_signature_restartable( mbedtls_ecdsa_context *ctx,
|
||||||
const unsigned char *hash, size_t hlen,
|
const unsigned char *hash, size_t hlen,
|
||||||
const unsigned char *sig, size_t slen,
|
const unsigned char *sig, size_t slen,
|
||||||
mbedtls_ecdsa_restart_ctx *rs_ctx );
|
mbedtls_ecdsa_restart_ctx *rs_ctx );
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* \brief This function generates an ECDSA keypair on the given curve.
|
* \brief This function generates an ECDSA keypair on the given curve.
|
||||||
*
|
*
|
||||||
|
|
20
library/ecdsa.c
Normal file → Executable file
20
library/ecdsa.c
Normal file → Executable file
|
@ -263,9 +263,7 @@ static int ecdsa_sign_restartable( mbedtls_ecp_group *grp,
|
||||||
mbedtls_mpi *pk = &k, *pr = r;
|
mbedtls_mpi *pk = &k, *pr = r;
|
||||||
|
|
||||||
/* Fail cleanly on curves such as Curve25519 that can't be used for ECDSA */
|
/* Fail cleanly on curves such as Curve25519 that can't be used for ECDSA */
|
||||||
if( grp->id == MBEDTLS_ECP_DP_CURVE25519 ||
|
if( !mbedtls_ecdsa_can_do( grp->id ) || grp->N.p == NULL )
|
||||||
grp->id == MBEDTLS_ECP_DP_CURVE448 ||
|
|
||||||
grp->N.p == NULL )
|
|
||||||
return( MBEDTLS_ERR_ECP_BAD_INPUT_DATA );
|
return( MBEDTLS_ERR_ECP_BAD_INPUT_DATA );
|
||||||
|
|
||||||
/* Make sure d is in range 1..n-1 */
|
/* Make sure d is in range 1..n-1 */
|
||||||
|
@ -380,6 +378,20 @@ cleanup:
|
||||||
return( ret );
|
return( ret );
|
||||||
}
|
}
|
||||||
|
|
||||||
|
int mbedtls_ecdsa_can_do( mbedtls_ecp_group_id gid )
|
||||||
|
{
|
||||||
|
switch( gid )
|
||||||
|
{
|
||||||
|
#ifdef MBEDTLS_ECP_DP_CURVE25519_ENABLED
|
||||||
|
case MBEDTLS_ECP_DP_CURVE25519: return 0;
|
||||||
|
#endif
|
||||||
|
#ifdef MBEDTLS_ECP_DP_CURVE448_ENABLED
|
||||||
|
case MBEDTLS_ECP_DP_CURVE448: return 0;
|
||||||
|
#endif
|
||||||
|
default: return 1;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
/*
|
/*
|
||||||
* Compute ECDSA signature of a hashed message
|
* Compute ECDSA signature of a hashed message
|
||||||
*/
|
*/
|
||||||
|
@ -504,7 +516,7 @@ static int ecdsa_verify_restartable( mbedtls_ecp_group *grp,
|
||||||
mbedtls_mpi_init( &u1 ); mbedtls_mpi_init( &u2 );
|
mbedtls_mpi_init( &u1 ); mbedtls_mpi_init( &u2 );
|
||||||
|
|
||||||
/* Fail cleanly on curves such as Curve25519 that can't be used for ECDSA */
|
/* Fail cleanly on curves such as Curve25519 that can't be used for ECDSA */
|
||||||
if( grp->N.p == NULL )
|
if( !mbedtls_ecdsa_can_do( grp->id ) || grp->N.p == NULL )
|
||||||
return( MBEDTLS_ERR_ECP_BAD_INPUT_DATA );
|
return( MBEDTLS_ERR_ECP_BAD_INPUT_DATA );
|
||||||
|
|
||||||
ECDSA_RS_ENTER( ver );
|
ECDSA_RS_ENTER( ver );
|
||||||
|
|
|
@ -835,6 +835,9 @@ int main( int argc, char *argv[] )
|
||||||
curve_info->grp_id != MBEDTLS_ECP_DP_NONE;
|
curve_info->grp_id != MBEDTLS_ECP_DP_NONE;
|
||||||
curve_info++ )
|
curve_info++ )
|
||||||
{
|
{
|
||||||
|
if( mbedtls_ecdsa_can_do( curve_info->grp_id ) == 0 )
|
||||||
|
continue;
|
||||||
|
|
||||||
mbedtls_ecdsa_init( &ecdsa );
|
mbedtls_ecdsa_init( &ecdsa );
|
||||||
|
|
||||||
if( mbedtls_ecdsa_genkey( &ecdsa, curve_info->grp_id, myrand, NULL ) != 0 )
|
if( mbedtls_ecdsa_genkey( &ecdsa, curve_info->grp_id, myrand, NULL ) != 0 )
|
||||||
|
@ -854,6 +857,9 @@ int main( int argc, char *argv[] )
|
||||||
curve_info->grp_id != MBEDTLS_ECP_DP_NONE;
|
curve_info->grp_id != MBEDTLS_ECP_DP_NONE;
|
||||||
curve_info++ )
|
curve_info++ )
|
||||||
{
|
{
|
||||||
|
if( mbedtls_ecdsa_can_do( curve_info->grp_id ) == 0 )
|
||||||
|
continue;
|
||||||
|
|
||||||
mbedtls_ecdsa_init( &ecdsa );
|
mbedtls_ecdsa_init( &ecdsa );
|
||||||
|
|
||||||
if( mbedtls_ecdsa_genkey( &ecdsa, curve_info->grp_id, myrand, NULL ) != 0 ||
|
if( mbedtls_ecdsa_genkey( &ecdsa, curve_info->grp_id, myrand, NULL ) != 0 ||
|
||||||
|
|
Loading…
Reference in a new issue