Store our role in the context

This commit is contained in:
Manuel Pégourié-Gonnard 2015-08-13 20:19:51 +02:00
parent 614bd5e919
commit 6449391852
2 changed files with 13 additions and 2 deletions

View File

@ -30,10 +30,16 @@
extern "C" { extern "C" {
#endif #endif
typedef enum {
MBEDTLS_ECJPAKE_CLIENT,
MBEDTLS_ECJPAKE_SERVER,
} mbedtls_ecjpake_role;
typedef struct typedef struct
{ {
const mbedtls_md_info_t *md_info; /**< Hash to use */ const mbedtls_md_info_t *md_info; /**< Hash to use */
mbedtls_ecp_group grp; /**< Elliptic curve */ mbedtls_ecp_group grp; /**< Elliptic curve */
mbedtls_ecjpake_role role; /**< Are we client or server? */
mbedtls_ecp_point X1; /**< Public key one */ mbedtls_ecp_point X1; /**< Public key one */
mbedtls_ecp_point X2; /**< Public key two */ mbedtls_ecp_point X2; /**< Public key two */
@ -62,6 +68,7 @@ void mbedtls_ecjpake_init( mbedtls_ecjpake_context *ctx );
* standard are MBEDTLS_MD_SHA256/MBEDTLS_ECP_DP_SECP256R1. * standard are MBEDTLS_MD_SHA256/MBEDTLS_ECP_DP_SECP256R1.
* *
* \param ctx context to set up * \param ctx context to set up
* \param role Our role: client or server
* \param hash hash function to use (MBEDTLS_MD_XXX) * \param hash hash function to use (MBEDTLS_MD_XXX)
* \param curve elliptic curve identifier (MBEDTLS_ECP_DP_XXX) * \param curve elliptic curve identifier (MBEDTLS_ECP_DP_XXX)
* \param secret shared secret * \param secret shared secret
@ -71,6 +78,7 @@ void mbedtls_ecjpake_init( mbedtls_ecjpake_context *ctx );
* a negative error code otherwise * a negative error code otherwise
*/ */
int mbedtls_ecjpake_setup( mbedtls_ecjpake_context *ctx, int mbedtls_ecjpake_setup( mbedtls_ecjpake_context *ctx,
mbedtls_ecjpake_role role,
mbedtls_md_type_t hash, mbedtls_md_type_t hash,
mbedtls_ecp_group_id curve, mbedtls_ecp_group_id curve,
const unsigned char *secret, const unsigned char *secret,

View File

@ -84,6 +84,7 @@ void mbedtls_ecjpake_free( mbedtls_ecjpake_context *ctx )
* Setup context * Setup context
*/ */
int mbedtls_ecjpake_setup( mbedtls_ecjpake_context *ctx, int mbedtls_ecjpake_setup( mbedtls_ecjpake_context *ctx,
mbedtls_ecjpake_role role,
mbedtls_md_type_t hash, mbedtls_md_type_t hash,
mbedtls_ecp_group_id curve, mbedtls_ecp_group_id curve,
const unsigned char *secret, const unsigned char *secret,
@ -91,6 +92,8 @@ int mbedtls_ecjpake_setup( mbedtls_ecjpake_context *ctx,
{ {
int ret; int ret;
ctx->role = role;
if( ( ctx->md_info = mbedtls_md_info_from_type( hash ) ) == NULL ) if( ( ctx->md_info = mbedtls_md_info_from_type( hash ) ) == NULL )
return( MBEDTLS_ERR_MD_FEATURE_UNAVAILABLE ); return( MBEDTLS_ERR_MD_FEATURE_UNAVAILABLE );
@ -932,12 +935,12 @@ int mbedtls_ecjpake_self_test( int verbose )
if( verbose != 0 ) if( verbose != 0 )
mbedtls_printf( " ECJPAKE test #0 (setup): " ); mbedtls_printf( " ECJPAKE test #0 (setup): " );
TEST_ASSERT( mbedtls_ecjpake_setup( &cli, TEST_ASSERT( mbedtls_ecjpake_setup( &cli, MBEDTLS_ECJPAKE_CLIENT,
MBEDTLS_MD_SHA256, MBEDTLS_ECP_DP_SECP256R1, MBEDTLS_MD_SHA256, MBEDTLS_ECP_DP_SECP256R1,
ecjpake_test_password, ecjpake_test_password,
sizeof( ecjpake_test_password ) ) == 0 ); sizeof( ecjpake_test_password ) ) == 0 );
TEST_ASSERT( mbedtls_ecjpake_setup( &srv, TEST_ASSERT( mbedtls_ecjpake_setup( &srv, MBEDTLS_ECJPAKE_SERVER,
MBEDTLS_MD_SHA256, MBEDTLS_ECP_DP_SECP256R1, MBEDTLS_MD_SHA256, MBEDTLS_ECP_DP_SECP256R1,
ecjpake_test_password, ecjpake_test_password,
sizeof( ecjpake_test_password ) ) == 0 ); sizeof( ecjpake_test_password ) ) == 0 );