mirror of https://github.com/ARMmbed/mbed-os.git
Fix Failure in cc ecdh_alt montgomery curve
Change the order of the input keys and output secret given and returned from the CC API, to address correct endianity.pull/11512/head
parent
83fca603f0
commit
33b7c8ea2e
|
@ -201,6 +201,7 @@ int mbedtls_ecdh_compute_shared( mbedtls_ecp_group *grp, mbedtls_mpi *z,
|
|||
}
|
||||
else if ( grp->id == MBEDTLS_ECP_DP_CURVE25519 )
|
||||
{
|
||||
uint8_t temp_buf[CURVE_25519_KEY_SIZE] = {0};
|
||||
cc_ecc_25519_comp_shared_params_t* ecdhParams = mbedtls_calloc( 1, sizeof(cc_ecc_25519_comp_shared_params_t) );
|
||||
if ( ecdhParams == NULL )
|
||||
{
|
||||
|
@ -211,11 +212,49 @@ int mbedtls_ecdh_compute_shared( mbedtls_ecp_group *grp, mbedtls_mpi *z,
|
|||
pHeap = ecdhParams;
|
||||
heapSize = sizeof(cc_ecc_25519_comp_shared_params_t);
|
||||
|
||||
if( mbedtls_mpi_size( d ) != CURVE_25519_KEY_SIZE )
|
||||
{
|
||||
ret = MBEDTLS_ERR_ECP_BAD_INPUT_DATA;
|
||||
goto cleanup;
|
||||
}
|
||||
MBEDTLS_MPI_CHK( mbedtls_mpi_write_binary( d, temp_buf,
|
||||
mbedtls_mpi_size( d ) ) ) ;
|
||||
ret = convert_CrysError_to_mbedtls_err(
|
||||
CRYS_COMMON_ConvertLswMswWordsToMsbLsbBytes( ecdhParams->privKey,
|
||||
CURVE_25519_KEY_SIZE,
|
||||
(uint32_t*)temp_buf,
|
||||
sizeof( temp_buf) ) );
|
||||
if ( ret != 0 )
|
||||
{
|
||||
mbedtls_platform_zeroize( temp_buf, sizeof(temp_buf) );
|
||||
goto cleanup;
|
||||
}
|
||||
|
||||
MBEDTLS_MPI_CHK( mbedtls_mpi_write_binary( d, ecdhParams->privKey, mbedtls_mpi_size( d ) ) ) ;
|
||||
MBEDTLS_MPI_CHK( mbedtls_mpi_write_binary( &Q->X, ecdhParams->pubKey, public_key_size ) );
|
||||
if( public_key_size != CURVE_25519_KEY_SIZE )
|
||||
{
|
||||
ret = MBEDTLS_ERR_ECP_BAD_INPUT_DATA;
|
||||
goto cleanup;
|
||||
}
|
||||
|
||||
ret = convert_CrysError_to_mbedtls_err( CRYS_ECMONT_Scalarmult( secret, ( size_t* )&secret_size,
|
||||
MBEDTLS_MPI_CHK( mbedtls_mpi_write_binary( &Q->X, temp_buf, public_key_size ) );
|
||||
ret = convert_CrysError_to_mbedtls_err(
|
||||
CRYS_COMMON_ConvertLswMswWordsToMsbLsbBytes( ecdhParams->pubKey,
|
||||
CURVE_25519_KEY_SIZE,
|
||||
(uint32_t*)temp_buf,
|
||||
sizeof( temp_buf) ) );
|
||||
if ( ret != 0 )
|
||||
{
|
||||
mbedtls_platform_zeroize( temp_buf, sizeof(temp_buf) );
|
||||
goto cleanup;
|
||||
}
|
||||
|
||||
if( secret_size != CURVE_25519_KEY_SIZE )
|
||||
{
|
||||
ret = MBEDTLS_ERR_ECP_BAD_INPUT_DATA;
|
||||
goto cleanup;
|
||||
}
|
||||
|
||||
ret = convert_CrysError_to_mbedtls_err( CRYS_ECMONT_Scalarmult( temp_buf, ( size_t* )&secret_size,
|
||||
ecdhParams->privKey, CURVE_25519_KEY_SIZE ,
|
||||
ecdhParams->pubKey, CURVE_25519_KEY_SIZE ,
|
||||
&ecdhParams->kgTempData ) );
|
||||
|
@ -223,6 +262,16 @@ int mbedtls_ecdh_compute_shared( mbedtls_ecp_group *grp, mbedtls_mpi *z,
|
|||
{
|
||||
goto cleanup;
|
||||
}
|
||||
ret = convert_CrysError_to_mbedtls_err(
|
||||
CRYS_COMMON_ConvertLswMswWordsToMsbLsbBytes( secret,
|
||||
secret_size,
|
||||
(uint32_t*)temp_buf,
|
||||
CURVE_25519_KEY_SIZE ) );
|
||||
if ( ret != 0 )
|
||||
{
|
||||
mbedtls_platform_zeroize( temp_buf, sizeof(temp_buf) );
|
||||
goto cleanup;
|
||||
}
|
||||
}
|
||||
else
|
||||
{
|
||||
|
|
Loading…
Reference in New Issue