mirror of
https://github.com/yuzu-emu/mbedtls
synced 2024-11-24 19:18:08 +00:00
Add ecdsa_from_keypair()
Also fix bug/limitation in mpi_copy: would segfault if src just initialised and not set to a value yet. (This case occurs when copying a context which contains only the public part of the key, eg.)
This commit is contained in:
parent
cc0a9d040d
commit
f499993cb2
3 changed files with 30 additions and 0 deletions
|
@ -142,6 +142,16 @@ int ecdsa_read_signature( ecdsa_context *ctx,
|
|||
int ecdsa_genkey( ecdsa_context *ctx, ecp_group_id gid,
|
||||
int (*f_rng)(void *, unsigned char *, size_t), void *p_rng );
|
||||
|
||||
/**
|
||||
* \brief Set an ECDSA context from an EC key pair
|
||||
*
|
||||
* \param ctx ECDSA context to set
|
||||
* \param key EC key to use
|
||||
*
|
||||
* \return 0 on success, or a POLARSSL_ERR_ECP code.
|
||||
*/
|
||||
int ecdsa_from_keypair( ecdsa_context *ctx, const ecp_keypair *key );
|
||||
|
||||
/**
|
||||
* \brief Initialize context
|
||||
*
|
||||
|
|
|
@ -130,6 +130,12 @@ int mpi_copy( mpi *X, const mpi *Y )
|
|||
if( X == Y )
|
||||
return( 0 );
|
||||
|
||||
if( Y->p == NULL )
|
||||
{
|
||||
mpi_free( X );
|
||||
return( 0 );
|
||||
}
|
||||
|
||||
for( i = Y->n - 1; i > 0; i-- )
|
||||
if( Y->p[i] != 0 )
|
||||
break;
|
||||
|
|
|
@ -283,6 +283,20 @@ int ecdsa_genkey( ecdsa_context *ctx, ecp_group_id gid,
|
|||
ecp_gen_keypair( &ctx->grp, &ctx->d, &ctx->Q, f_rng, p_rng ) );
|
||||
}
|
||||
|
||||
/*
|
||||
* Set context from an ecp_keypair
|
||||
*/
|
||||
int ecdsa_from_keypair( ecdsa_context *ctx, const ecp_keypair *key )
|
||||
{
|
||||
int ret = ecp_group_copy( &ctx->grp, &key->grp ) ||
|
||||
mpi_copy( &ctx->d, &key->d ) ||
|
||||
ecp_copy( &ctx->Q, &key->Q );
|
||||
|
||||
if( ret != 0 )
|
||||
ecdsa_free( ctx );
|
||||
|
||||
return( ret );
|
||||
}
|
||||
|
||||
/*
|
||||
* Initialize context
|
||||
|
|
Loading…
Reference in a new issue