mirror of
https://github.com/yuzu-emu/mbedtls
synced 2024-11-24 23:28:13 +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 ecdsa_genkey( ecdsa_context *ctx, ecp_group_id gid,
|
||||||
int (*f_rng)(void *, unsigned char *, size_t), void *p_rng );
|
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
|
* \brief Initialize context
|
||||||
*
|
*
|
||||||
|
|
|
@ -130,6 +130,12 @@ int mpi_copy( mpi *X, const mpi *Y )
|
||||||
if( X == Y )
|
if( X == Y )
|
||||||
return( 0 );
|
return( 0 );
|
||||||
|
|
||||||
|
if( Y->p == NULL )
|
||||||
|
{
|
||||||
|
mpi_free( X );
|
||||||
|
return( 0 );
|
||||||
|
}
|
||||||
|
|
||||||
for( i = Y->n - 1; i > 0; i-- )
|
for( i = Y->n - 1; i > 0; i-- )
|
||||||
if( Y->p[i] != 0 )
|
if( Y->p[i] != 0 )
|
||||||
break;
|
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 ) );
|
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
|
* Initialize context
|
||||||
|
|
Loading…
Reference in a new issue