mirror of
https://github.com/yuzu-emu/mbedtls.git
synced 2025-03-24 22:25:11 +00:00
Add public function generating private keys
This will be useful for restartable ECDH and ECDSA. Currently they call mbedtls_ecp_gen_keypair(); one could make that one restartable, but that means adding its own sub-context, while ECDH and ECDSA (will) have their own contexts already, so switching to this saves one extra context.
This commit is contained in:
parent
1631d63d0c
commit
a7937f9967
|
@ -727,6 +727,22 @@ int mbedtls_ecp_check_pubkey( const mbedtls_ecp_group *grp, const mbedtls_ecp_po
|
||||||
*/
|
*/
|
||||||
int mbedtls_ecp_check_privkey( const mbedtls_ecp_group *grp, const mbedtls_mpi *d );
|
int mbedtls_ecp_check_privkey( const mbedtls_ecp_group *grp, const mbedtls_mpi *d );
|
||||||
|
|
||||||
|
/**
|
||||||
|
* \brief Generate a private key
|
||||||
|
*
|
||||||
|
* \param grp ECP group
|
||||||
|
* \param d Destination MPI (secret part)
|
||||||
|
* \param f_rng RNG function
|
||||||
|
* \param p_rng RNG parameter
|
||||||
|
*
|
||||||
|
* \return 0 if successful,
|
||||||
|
* or a MBEDTLS_ERR_ECP_XXX or MBEDTLS_MPI_XXX error code
|
||||||
|
*/
|
||||||
|
int mbedtls_ecp_gen_privkey( const mbedtls_ecp_group *grp,
|
||||||
|
mbedtls_mpi *d,
|
||||||
|
int (*f_rng)(void *, unsigned char *, size_t),
|
||||||
|
void *p_rng );
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* \brief Generate a keypair with configurable base point
|
* \brief Generate a keypair with configurable base point
|
||||||
*
|
*
|
||||||
|
|
|
@ -2495,15 +2495,14 @@ int mbedtls_ecp_check_privkey( const mbedtls_ecp_group *grp, const mbedtls_mpi *
|
||||||
}
|
}
|
||||||
|
|
||||||
/*
|
/*
|
||||||
* Generate a keypair with configurable base point
|
* Generate a private key
|
||||||
*/
|
*/
|
||||||
int mbedtls_ecp_gen_keypair_base( mbedtls_ecp_group *grp,
|
int mbedtls_ecp_gen_privkey( const mbedtls_ecp_group *grp,
|
||||||
const mbedtls_ecp_point *G,
|
mbedtls_mpi *d,
|
||||||
mbedtls_mpi *d, mbedtls_ecp_point *Q,
|
|
||||||
int (*f_rng)(void *, unsigned char *, size_t),
|
int (*f_rng)(void *, unsigned char *, size_t),
|
||||||
void *p_rng )
|
void *p_rng )
|
||||||
{
|
{
|
||||||
int ret;
|
int ret = MBEDTLS_ERR_ECP_BAD_INPUT_DATA;
|
||||||
size_t n_size = ( grp->nbits + 7 ) / 8;
|
size_t n_size = ( grp->nbits + 7 ) / 8;
|
||||||
|
|
||||||
#if defined(ECP_MONTGOMERY)
|
#if defined(ECP_MONTGOMERY)
|
||||||
|
@ -2528,8 +2527,8 @@ int mbedtls_ecp_gen_keypair_base( mbedtls_ecp_group *grp,
|
||||||
MBEDTLS_MPI_CHK( mbedtls_mpi_set_bit( d, 1, 0 ) );
|
MBEDTLS_MPI_CHK( mbedtls_mpi_set_bit( d, 1, 0 ) );
|
||||||
MBEDTLS_MPI_CHK( mbedtls_mpi_set_bit( d, 2, 0 ) );
|
MBEDTLS_MPI_CHK( mbedtls_mpi_set_bit( d, 2, 0 ) );
|
||||||
}
|
}
|
||||||
else
|
|
||||||
#endif /* ECP_MONTGOMERY */
|
#endif /* ECP_MONTGOMERY */
|
||||||
|
|
||||||
#if defined(ECP_SHORTWEIERSTRASS)
|
#if defined(ECP_SHORTWEIERSTRASS)
|
||||||
if( ecp_get_type( grp ) == ECP_TYPE_SHORT_WEIERSTRASS )
|
if( ecp_get_type( grp ) == ECP_TYPE_SHORT_WEIERSTRASS )
|
||||||
{
|
{
|
||||||
|
@ -2565,15 +2564,28 @@ int mbedtls_ecp_gen_keypair_base( mbedtls_ecp_group *grp,
|
||||||
while( mbedtls_mpi_cmp_int( d, 1 ) < 0 ||
|
while( mbedtls_mpi_cmp_int( d, 1 ) < 0 ||
|
||||||
mbedtls_mpi_cmp_mpi( d, &grp->N ) >= 0 );
|
mbedtls_mpi_cmp_mpi( d, &grp->N ) >= 0 );
|
||||||
}
|
}
|
||||||
else
|
|
||||||
#endif /* ECP_SHORTWEIERSTRASS */
|
#endif /* ECP_SHORTWEIERSTRASS */
|
||||||
return( MBEDTLS_ERR_ECP_BAD_INPUT_DATA );
|
|
||||||
|
|
||||||
cleanup:
|
cleanup:
|
||||||
if( ret != 0 )
|
return( ret );
|
||||||
return( ret );
|
}
|
||||||
|
|
||||||
return( mbedtls_ecp_mul( grp, Q, d, G, f_rng, p_rng ) );
|
/*
|
||||||
|
* Generate a keypair with configurable base point
|
||||||
|
*/
|
||||||
|
int mbedtls_ecp_gen_keypair_base( mbedtls_ecp_group *grp,
|
||||||
|
const mbedtls_ecp_point *G,
|
||||||
|
mbedtls_mpi *d, mbedtls_ecp_point *Q,
|
||||||
|
int (*f_rng)(void *, unsigned char *, size_t),
|
||||||
|
void *p_rng )
|
||||||
|
{
|
||||||
|
int ret;
|
||||||
|
|
||||||
|
MBEDTLS_MPI_CHK( mbedtls_ecp_gen_privkey( grp, d, f_rng, p_rng ) );
|
||||||
|
MBEDTLS_MPI_CHK( mbedtls_ecp_mul( grp, Q, d, G, f_rng, p_rng ) );
|
||||||
|
|
||||||
|
cleanup:
|
||||||
|
return( ret );
|
||||||
}
|
}
|
||||||
|
|
||||||
/*
|
/*
|
||||||
|
|
Loading…
Reference in a new issue