New internal function psa_get_key_bits
Isolate the code of psa_get_key_information that calculates the bit size of a key into its own function which can be called by functions that have a key slot pointer.
This commit is contained in:
parent
b0b255c82a
commit
b870b188ad
@ -688,6 +688,24 @@ psa_status_t psa_destroy_key( psa_key_slot_t key )
|
|||||||
return( PSA_SUCCESS );
|
return( PSA_SUCCESS );
|
||||||
}
|
}
|
||||||
|
|
||||||
|
/* Return the size of the key in the given slot, in bits. */
|
||||||
|
static size_t psa_get_key_bits( const key_slot_t *slot )
|
||||||
|
{
|
||||||
|
if( key_type_is_raw_bytes( slot->type ) )
|
||||||
|
return( slot->data.raw.bytes * 8 );
|
||||||
|
#if defined(MBEDTLS_RSA_C)
|
||||||
|
if( slot->type == PSA_KEY_TYPE_RSA_PUBLIC_KEY ||
|
||||||
|
slot->type == PSA_KEY_TYPE_RSA_KEYPAIR )
|
||||||
|
return( mbedtls_rsa_get_bitlen( slot->data.rsa ) );
|
||||||
|
#endif /* defined(MBEDTLS_RSA_C) */
|
||||||
|
#if defined(MBEDTLS_ECP_C)
|
||||||
|
if( PSA_KEY_TYPE_IS_ECC( slot->type ) )
|
||||||
|
return( slot->data.ecp->grp.pbits );
|
||||||
|
#endif /* defined(MBEDTLS_ECP_C) */
|
||||||
|
/* Shouldn't happen except on an empty slot. */
|
||||||
|
return( 0 );
|
||||||
|
}
|
||||||
|
|
||||||
psa_status_t psa_get_key_information( psa_key_slot_t key,
|
psa_status_t psa_get_key_information( psa_key_slot_t key,
|
||||||
psa_key_type_t *type,
|
psa_key_type_t *type,
|
||||||
size_t *bits )
|
size_t *bits )
|
||||||
@ -702,40 +720,13 @@ psa_status_t psa_get_key_information( psa_key_slot_t key,
|
|||||||
status = psa_get_key_slot( key, &slot );
|
status = psa_get_key_slot( key, &slot );
|
||||||
if( status != PSA_SUCCESS )
|
if( status != PSA_SUCCESS )
|
||||||
return( status );
|
return( status );
|
||||||
|
|
||||||
if( slot->type == PSA_KEY_TYPE_NONE )
|
if( slot->type == PSA_KEY_TYPE_NONE )
|
||||||
return( PSA_ERROR_EMPTY_SLOT );
|
return( PSA_ERROR_EMPTY_SLOT );
|
||||||
if( type != NULL )
|
if( type != NULL )
|
||||||
*type = slot->type;
|
*type = slot->type;
|
||||||
|
if( bits != NULL )
|
||||||
if( key_type_is_raw_bytes( slot->type ) )
|
*bits = psa_get_key_bits( slot );
|
||||||
{
|
|
||||||
if( bits != NULL )
|
|
||||||
*bits = slot->data.raw.bytes * 8;
|
|
||||||
}
|
|
||||||
else
|
|
||||||
#if defined(MBEDTLS_RSA_C)
|
|
||||||
if( slot->type == PSA_KEY_TYPE_RSA_PUBLIC_KEY ||
|
|
||||||
slot->type == PSA_KEY_TYPE_RSA_KEYPAIR )
|
|
||||||
{
|
|
||||||
if( bits != NULL )
|
|
||||||
*bits = mbedtls_rsa_get_bitlen( slot->data.rsa );
|
|
||||||
}
|
|
||||||
else
|
|
||||||
#endif /* defined(MBEDTLS_RSA_C) */
|
|
||||||
#if defined(MBEDTLS_ECP_C)
|
|
||||||
if( PSA_KEY_TYPE_IS_ECC( slot->type ) )
|
|
||||||
{
|
|
||||||
if( bits != NULL )
|
|
||||||
*bits = slot->data.ecp->grp.pbits;
|
|
||||||
}
|
|
||||||
else
|
|
||||||
#endif /* defined(MBEDTLS_ECP_C) */
|
|
||||||
{
|
|
||||||
/* Shouldn't happen: the key type is not any type that we
|
|
||||||
* put in. */
|
|
||||||
return( PSA_ERROR_TAMPERING_DETECTED );
|
|
||||||
}
|
|
||||||
|
|
||||||
return( PSA_SUCCESS );
|
return( PSA_SUCCESS );
|
||||||
}
|
}
|
||||||
|
|
||||||
|
Loading…
Reference in New Issue
Block a user