Add an ecdsa_genkey() function

This commit is contained in:
Manuel Pégourié-Gonnard 2013-08-09 16:21:34 +02:00
parent 4846f5ecbc
commit 8eebd012b9
3 changed files with 26 additions and 3 deletions

View File

@ -125,6 +125,20 @@ int ecdsa_read_signature( 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 );
/**
* \brief Generate an ECDSA keypair on the given curve
*
* \param ctx ECDSA context in which the keypair should be stored
* \param grp Group (elliptic curve) to use. One of the various
* POLARSSL_ECP_DP_XXX macros depending on configuration.
* \param f_rng RNG function
* \param p_rng RNG parameter
*
* \return 0 on success, or a POLARSSL_ERR_ECP code.
*/
int ecdsa_genkey( ecdsa_context *ctx, ecp_group_id gid,
int (*f_rng)(void *, unsigned char *, size_t), void *p_rng );
/** /**
* \brief Initialize context * \brief Initialize context
* *

View File

@ -273,6 +273,17 @@ int ecdsa_read_signature( ecdsa_context *ctx,
return( ecdsa_verify( &ctx->grp, hash, hlen, &ctx->Q, &ctx->r, &ctx->s ) ); return( ecdsa_verify( &ctx->grp, hash, hlen, &ctx->Q, &ctx->r, &ctx->s ) );
} }
/*
* Generate key pair
*/
int ecdsa_genkey( ecdsa_context *ctx, ecp_group_id gid,
int (*f_rng)(void *, unsigned char *, size_t), void *p_rng )
{
return( ecp_use_known_dp( &ctx->grp, gid ) ||
ecp_gen_keypair( &ctx->grp, &ctx->d, &ctx->Q, f_rng, p_rng ) );
}
/* /*
* Initialize context * Initialize context
*/ */

View File

@ -95,9 +95,7 @@ void ecdsa_write_read_random( int id )
TEST_ASSERT( rnd_pseudo_rand( &rnd_info, hash, sizeof( hash ) ) == 0 ); TEST_ASSERT( rnd_pseudo_rand( &rnd_info, hash, sizeof( hash ) ) == 0 );
/* generate signing key */ /* generate signing key */
TEST_ASSERT( ecp_use_known_dp( &ctx.grp, id ) == 0 ); TEST_ASSERT( ecdsa_genkey( &ctx, id, &rnd_pseudo_rand, &rnd_info ) == 0 );
TEST_ASSERT( ecp_gen_keypair( &ctx.grp, &ctx.d, &ctx.Q,
&rnd_pseudo_rand, &rnd_info ) == 0 );
/* generate and write signature, then read and verify it */ /* generate and write signature, then read and verify it */
TEST_ASSERT( ecdsa_write_signature( &ctx, hash, sizeof( hash ), TEST_ASSERT( ecdsa_write_signature( &ctx, hash, sizeof( hash ),