From 20b3ef3caddc65d25904e6585a4e6d3b858ad157 Mon Sep 17 00:00:00 2001 From: Gilles Peskine Date: Mon, 11 Feb 2019 18:41:27 +0100 Subject: [PATCH] Add mbedtls_ecdh_can_do All curves can currently do ECDH, but to make the API symmetric and future-proof, add mbedtls_ecdh_can_do() to go with mbedtls_ecdsa_can_do(). --- include/mbedtls/ecdh.h | 9 +++++++++ library/ecdh.c | 7 +++++++ programs/test/benchmark.c | 9 +++++++++ 3 files changed, 25 insertions(+) diff --git a/include/mbedtls/ecdh.h b/include/mbedtls/ecdh.h index 7f61c453c..3948d7c98 100644 --- a/include/mbedtls/ecdh.h +++ b/include/mbedtls/ecdh.h @@ -144,6 +144,15 @@ typedef struct mbedtls_ecdh_context } mbedtls_ecdh_context; +/** + * \brief Check whether a given group can be used for ECDH. + * + * \param gid The ECP group ID to check. + * + * \return \c 1 if the group can be used, \c 0 otherwise + */ +int mbedtls_ecdh_can_do( mbedtls_ecp_group_id gid ); + /** * \brief This function generates an ECDH keypair on an elliptic * curve. diff --git a/library/ecdh.c b/library/ecdh.c index 66a2d1687..648becbe4 100644 --- a/library/ecdh.c +++ b/library/ecdh.c @@ -63,6 +63,13 @@ static mbedtls_ecp_group_id mbedtls_ecdh_grp_id( #endif } +int mbedtls_ecdh_can_do( mbedtls_ecp_group_id gid ) +{ + /* At this time, all groups support ECDH. */ + (void) gid; + return 1; +} + #if !defined(MBEDTLS_ECDH_GEN_PUBLIC_ALT) /* * Generate public key (restartable version) diff --git a/programs/test/benchmark.c b/programs/test/benchmark.c index 7524f5cb4..502b15d9a 100644 --- a/programs/test/benchmark.c +++ b/programs/test/benchmark.c @@ -911,6 +911,9 @@ int main( int argc, char *argv[] ) curve_info->grp_id != MBEDTLS_ECP_DP_NONE; curve_info++ ) { + if( ! mbedtls_ecdh_can_do( curve_info->grp_id ) ) + continue; + mbedtls_ecdh_init( &ecdh ); CHECK_AND_CONTINUE( mbedtls_ecp_group_load( &ecdh.grp, curve_info->grp_id ) ); @@ -956,6 +959,9 @@ int main( int argc, char *argv[] ) curve_info->grp_id != MBEDTLS_ECP_DP_NONE; curve_info++ ) { + if( ! mbedtls_ecdh_can_do( curve_info->grp_id ) ) + continue; + mbedtls_ecdh_init( &ecdh ); CHECK_AND_CONTINUE( mbedtls_ecp_group_load( &ecdh.grp, curve_info->grp_id ) ); @@ -1012,6 +1018,9 @@ int main( int argc, char *argv[] ) curve_info->grp_id != MBEDTLS_ECP_DP_NONE; curve_info++ ) { + if( ! mbedtls_ecdh_can_do( curve_info->grp_id ) ) + continue; + mbedtls_ecdh_init( &ecdh_srv ); mbedtls_ecdh_init( &ecdh_cli ); CHECK_AND_CONTINUE( mbedtls_ecdh_setup( &ecdh_srv, curve_info->grp_id ) );