mirror of
				https://github.com/cuberite/polarssl.git
				synced 2025-11-04 04:32:24 -05:00 
			
		
		
		
	psa: Add ECP/RSA transparent test driver import_key entry point
Add ECP/RSA transparent test driver import_key entry point and use it in the transparent test driver entry supporting both ECP and RSA. Signed-off-by: Ronald Cron <ronald.cron@arm.com>
This commit is contained in:
		
							parent
							
								
									fb2ed5bb05
								
							
						
					
					
						commit
						784fb326ae
					
				@ -152,7 +152,7 @@ exit:
 | 
			
		||||
#if defined(BUILTIN_KEY_TYPE_ECC_KEY_PAIR) || \
 | 
			
		||||
    defined(BUILTIN_KEY_TYPE_ECC_PUBLIC_KEY)
 | 
			
		||||
 | 
			
		||||
psa_status_t mbedtls_psa_ecp_import_key(
 | 
			
		||||
static psa_status_t ecp_import_key(
 | 
			
		||||
    const psa_key_attributes_t *attributes,
 | 
			
		||||
    const uint8_t *data, size_t data_length,
 | 
			
		||||
    uint8_t *key_buffer, size_t key_buffer_size,
 | 
			
		||||
@ -271,6 +271,17 @@ static psa_status_t ecp_export_public_key(
 | 
			
		||||
#if defined(MBEDTLS_PSA_BUILTIN_KEY_TYPE_ECC_KEY_PAIR) || \
 | 
			
		||||
    defined(MBEDTLS_PSA_BUILTIN_KEY_TYPE_ECC_PUBLIC_KEY)
 | 
			
		||||
 | 
			
		||||
psa_status_t mbedtls_psa_ecp_import_key(
 | 
			
		||||
    const psa_key_attributes_t *attributes,
 | 
			
		||||
    const uint8_t *data, size_t data_length,
 | 
			
		||||
    uint8_t *key_buffer, size_t key_buffer_size,
 | 
			
		||||
    size_t *key_buffer_length, size_t *bits )
 | 
			
		||||
{
 | 
			
		||||
    return( ecp_import_key( attributes, data, data_length,
 | 
			
		||||
                            key_buffer, key_buffer_size,
 | 
			
		||||
                            key_buffer_length, bits ) );
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
psa_status_t mbedtls_psa_ecp_export_public_key(
 | 
			
		||||
    const psa_key_attributes_t *attributes,
 | 
			
		||||
    const uint8_t *key_buffer, size_t key_buffer_size,
 | 
			
		||||
@ -291,6 +302,18 @@ psa_status_t mbedtls_psa_ecp_export_public_key(
 | 
			
		||||
 | 
			
		||||
#if defined(MBEDTLS_PSA_ACCEL_KEY_TYPE_ECC_KEY_PAIR) || \
 | 
			
		||||
    defined(MBEDTLS_PSA_ACCEL_KEY_TYPE_ECC_PUBLIC_KEY)
 | 
			
		||||
 | 
			
		||||
psa_status_t mbedtls_transparent_test_driver_ecp_import_key(
 | 
			
		||||
    const psa_key_attributes_t *attributes,
 | 
			
		||||
    const uint8_t *data, size_t data_length,
 | 
			
		||||
    uint8_t *key_buffer, size_t key_buffer_size,
 | 
			
		||||
    size_t *key_buffer_length, size_t *bits )
 | 
			
		||||
{
 | 
			
		||||
    return( ecp_import_key( attributes, data, data_length,
 | 
			
		||||
                            key_buffer, key_buffer_size,
 | 
			
		||||
                            key_buffer_length, bits ) );
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
psa_status_t mbedtls_transparent_test_driver_ecp_export_public_key(
 | 
			
		||||
    const psa_key_attributes_t *attributes,
 | 
			
		||||
    const uint8_t *key_buffer, size_t key_buffer_size,
 | 
			
		||||
@ -299,6 +322,7 @@ psa_status_t mbedtls_transparent_test_driver_ecp_export_public_key(
 | 
			
		||||
    return( ecp_export_public_key( attributes, key_buffer, key_buffer_size,
 | 
			
		||||
                                   data, data_size, data_length ) );
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
#endif /* defined(MBEDTLS_PSA_ACCEL_KEY_TYPE_ECC_KEY_PAIR) ||
 | 
			
		||||
          defined(MBEDTLS_PSA_ACCEL_KEY_TYPE_ECC_PUBLIC_KEY) */
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
@ -119,10 +119,17 @@ psa_status_t mbedtls_psa_ecp_export_public_key(
 | 
			
		||||
 */
 | 
			
		||||
 | 
			
		||||
#if defined(PSA_CRYPTO_DRIVER_TEST)
 | 
			
		||||
psa_status_t mbedtls_transparent_test_driver_ecp_import_key(
 | 
			
		||||
    const psa_key_attributes_t *attributes,
 | 
			
		||||
    const uint8_t *data, size_t data_length,
 | 
			
		||||
    uint8_t *key_buffer, size_t key_buffer_size,
 | 
			
		||||
    size_t *key_buffer_length, size_t *bits );
 | 
			
		||||
 | 
			
		||||
psa_status_t mbedtls_transparent_test_driver_ecp_export_public_key(
 | 
			
		||||
    const psa_key_attributes_t *attributes,
 | 
			
		||||
    const uint8_t *key_buffer, size_t key_buffer_size,
 | 
			
		||||
    uint8_t *data, size_t data_size, size_t *data_length );
 | 
			
		||||
 | 
			
		||||
#endif /* PSA_CRYPTO_DRIVER_TEST */
 | 
			
		||||
 | 
			
		||||
#endif /* PSA_CRYPTO_ECP_H */
 | 
			
		||||
 | 
			
		||||
@ -139,7 +139,7 @@ exit:
 | 
			
		||||
#if defined(BUILTIN_KEY_TYPE_RSA_KEY_PAIR) || \
 | 
			
		||||
    defined(BUILTIN_KEY_TYPE_RSA_PUBLIC_KEY)
 | 
			
		||||
 | 
			
		||||
psa_status_t mbedtls_psa_rsa_import_key(
 | 
			
		||||
static psa_status_t rsa_import_key(
 | 
			
		||||
    const psa_key_attributes_t *attributes,
 | 
			
		||||
    const uint8_t *data, size_t data_length,
 | 
			
		||||
    uint8_t *key_buffer, size_t key_buffer_size,
 | 
			
		||||
@ -261,6 +261,17 @@ static psa_status_t rsa_export_public_key(
 | 
			
		||||
#if defined(MBEDTLS_PSA_BUILTIN_KEY_TYPE_RSA_KEY_PAIR) || \
 | 
			
		||||
    defined(MBEDTLS_PSA_BUILTIN_KEY_TYPE_RSA_PUBLIC_KEY)
 | 
			
		||||
 | 
			
		||||
psa_status_t mbedtls_psa_rsa_import_key(
 | 
			
		||||
    const psa_key_attributes_t *attributes,
 | 
			
		||||
    const uint8_t *data, size_t data_length,
 | 
			
		||||
    uint8_t *key_buffer, size_t key_buffer_size,
 | 
			
		||||
    size_t *key_buffer_length, size_t *bits )
 | 
			
		||||
{
 | 
			
		||||
    return( rsa_import_key( attributes, data, data_length,
 | 
			
		||||
                            key_buffer, key_buffer_size,
 | 
			
		||||
                            key_buffer_length, bits ) );
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
psa_status_t mbedtls_psa_rsa_export_public_key(
 | 
			
		||||
    const psa_key_attributes_t *attributes,
 | 
			
		||||
    const uint8_t *key_buffer, size_t key_buffer_size,
 | 
			
		||||
@ -281,6 +292,18 @@ psa_status_t mbedtls_psa_rsa_export_public_key(
 | 
			
		||||
 | 
			
		||||
#if defined(MBEDTLS_PSA_ACCEL_KEY_TYPE_RSA_KEY_PAIR) || \
 | 
			
		||||
    defined(MBEDTLS_PSA_ACCEL_KEY_TYPE_RSA_PUBLIC_KEY)
 | 
			
		||||
 | 
			
		||||
psa_status_t mbedtls_transparent_test_driver_rsa_import_key(
 | 
			
		||||
    const psa_key_attributes_t *attributes,
 | 
			
		||||
    const uint8_t *data, size_t data_length,
 | 
			
		||||
    uint8_t *key_buffer, size_t key_buffer_size,
 | 
			
		||||
    size_t *key_buffer_length, size_t *bits )
 | 
			
		||||
{
 | 
			
		||||
    return( rsa_import_key( attributes, data, data_length,
 | 
			
		||||
                            key_buffer, key_buffer_size,
 | 
			
		||||
                            key_buffer_length, bits ) );
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
psa_status_t mbedtls_transparent_test_driver_rsa_export_public_key(
 | 
			
		||||
    const psa_key_attributes_t *attributes,
 | 
			
		||||
    const uint8_t *key_buffer, size_t key_buffer_size,
 | 
			
		||||
@ -289,6 +312,7 @@ psa_status_t mbedtls_transparent_test_driver_rsa_export_public_key(
 | 
			
		||||
    return( rsa_export_public_key( attributes, key_buffer, key_buffer_size,
 | 
			
		||||
                                   data, data_size, data_length ) );
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
#endif /* defined(MBEDTLS_PSA_ACCEL_KEY_TYPE_RSA_KEY_PAIR) ||
 | 
			
		||||
          defined(MBEDTLS_PSA_ACCEL_KEY_TYPE_RSA_PUBLIC_KEY) */
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
@ -120,6 +120,12 @@ psa_status_t mbedtls_psa_rsa_export_public_key(
 | 
			
		||||
 | 
			
		||||
#if defined(PSA_CRYPTO_DRIVER_TEST)
 | 
			
		||||
 | 
			
		||||
psa_status_t mbedtls_transparent_test_driver_rsa_import_key(
 | 
			
		||||
    const psa_key_attributes_t *attributes,
 | 
			
		||||
    const uint8_t *data, size_t data_length,
 | 
			
		||||
    uint8_t *key_buffer, size_t key_buffer_size,
 | 
			
		||||
    size_t *key_buffer_length, size_t *bits );
 | 
			
		||||
 | 
			
		||||
psa_status_t mbedtls_transparent_test_driver_rsa_export_public_key(
 | 
			
		||||
    const psa_key_attributes_t *attributes,
 | 
			
		||||
    const uint8_t *key_buffer, size_t key_buffer_size,
 | 
			
		||||
 | 
			
		||||
@ -153,105 +153,45 @@ psa_status_t test_transparent_import_key(
 | 
			
		||||
    if( test_driver_key_management_hooks.forced_status != PSA_SUCCESS )
 | 
			
		||||
        return( test_driver_key_management_hooks.forced_status );
 | 
			
		||||
 | 
			
		||||
    psa_status_t status = PSA_ERROR_CORRUPTION_DETECTED;
 | 
			
		||||
    psa_key_type_t type = psa_get_key_type( attributes );
 | 
			
		||||
 | 
			
		||||
#if defined(MBEDTLS_PSA_ACCEL_KEY_TYPE_ECC_KEY_PAIR) || \
 | 
			
		||||
    defined(MBEDTLS_PSA_ACCEL_KEY_TYPE_ECC_PUBLIC_KEY)
 | 
			
		||||
    psa_key_type_t type = psa_get_key_type( attributes );
 | 
			
		||||
    if ( PSA_KEY_TYPE_IS_ECC( type ) )
 | 
			
		||||
    if( PSA_KEY_TYPE_IS_ECC( type ) )
 | 
			
		||||
    {
 | 
			
		||||
        // Code mostly copied from psa_load_ecp_representation
 | 
			
		||||
        psa_ecc_family_t curve = PSA_KEY_TYPE_ECC_GET_FAMILY( type );
 | 
			
		||||
        mbedtls_ecp_group_id grp_id;
 | 
			
		||||
        mbedtls_ecp_keypair ecp;
 | 
			
		||||
        psa_status_t status = PSA_ERROR_CORRUPTION_DETECTED;
 | 
			
		||||
 | 
			
		||||
        if( psa_get_key_bits( attributes ) == 0 )
 | 
			
		||||
        {
 | 
			
		||||
            // Attempt auto-detect of curve bit size
 | 
			
		||||
            size_t curve_size = data_length;
 | 
			
		||||
 | 
			
		||||
            if( PSA_KEY_TYPE_IS_PUBLIC_KEY( type ) &&
 | 
			
		||||
                PSA_KEY_TYPE_ECC_GET_FAMILY( type ) != PSA_ECC_FAMILY_MONTGOMERY )
 | 
			
		||||
            {
 | 
			
		||||
                /* A Weierstrass public key is represented as:
 | 
			
		||||
                 * - The byte 0x04;
 | 
			
		||||
                 * - `x_P` as a `ceiling(m/8)`-byte string, big-endian;
 | 
			
		||||
                 * - `y_P` as a `ceiling(m/8)`-byte string, big-endian.
 | 
			
		||||
                 * So its data length is 2m+1 where m is the curve size in bits.
 | 
			
		||||
                 */
 | 
			
		||||
                if( ( data_length & 1 ) == 0 )
 | 
			
		||||
                    return( PSA_ERROR_INVALID_ARGUMENT );
 | 
			
		||||
                curve_size = data_length / 2;
 | 
			
		||||
 | 
			
		||||
                /* Montgomery public keys are represented in compressed format, meaning
 | 
			
		||||
                 * their curve_size is equal to the amount of input. */
 | 
			
		||||
 | 
			
		||||
                /* Private keys are represented in uncompressed private random integer
 | 
			
		||||
                 * format, meaning their curve_size is equal to the amount of input. */
 | 
			
		||||
            }
 | 
			
		||||
 | 
			
		||||
            grp_id = mbedtls_ecc_group_of_psa( curve, curve_size );
 | 
			
		||||
        status = mbedtls_transparent_test_driver_ecp_import_key(
 | 
			
		||||
                     attributes,
 | 
			
		||||
                     data, data_length,
 | 
			
		||||
                     key_buffer, key_buffer_size,
 | 
			
		||||
                     key_buffer_length, bits );
 | 
			
		||||
    }
 | 
			
		||||
    else
 | 
			
		||||
#endif
 | 
			
		||||
#if defined(MBEDTLS_PSA_ACCEL_KEY_TYPE_RSA_KEY_PAIR) || \
 | 
			
		||||
    defined(MBEDTLS_PSA_ACCEL_KEY_TYPE_RSA_PUBLIC_KEY)
 | 
			
		||||
    if( PSA_KEY_TYPE_IS_RSA( type ) )
 | 
			
		||||
    {
 | 
			
		||||
            grp_id = mbedtls_ecc_group_of_psa( curve,
 | 
			
		||||
                PSA_BITS_TO_BYTES( psa_get_key_bits( attributes ) ) );
 | 
			
		||||
        }
 | 
			
		||||
 | 
			
		||||
        const mbedtls_ecp_curve_info *curve_info =
 | 
			
		||||
            mbedtls_ecp_curve_info_from_grp_id( grp_id );
 | 
			
		||||
 | 
			
		||||
        if( attributes->domain_parameters_size != 0 )
 | 
			
		||||
            return( PSA_ERROR_NOT_SUPPORTED );
 | 
			
		||||
        if( grp_id == MBEDTLS_ECP_DP_NONE || curve_info == NULL )
 | 
			
		||||
            return( PSA_ERROR_NOT_SUPPORTED );
 | 
			
		||||
 | 
			
		||||
        *bits = curve_info->bit_size;
 | 
			
		||||
 | 
			
		||||
        mbedtls_ecp_keypair_init( &ecp );
 | 
			
		||||
 | 
			
		||||
        status = mbedtls_to_psa_error(
 | 
			
		||||
                    mbedtls_ecp_group_load( &ecp.grp, grp_id ) );
 | 
			
		||||
        if( status != PSA_SUCCESS )
 | 
			
		||||
            goto ecp_exit;
 | 
			
		||||
 | 
			
		||||
        /* Load the key material. */
 | 
			
		||||
        if( PSA_KEY_TYPE_IS_PUBLIC_KEY( type ) )
 | 
			
		||||
        {
 | 
			
		||||
            /* Load the public value. */
 | 
			
		||||
            status = mbedtls_to_psa_error(
 | 
			
		||||
                mbedtls_ecp_point_read_binary( &ecp.grp, &ecp.Q,
 | 
			
		||||
                                               data,
 | 
			
		||||
                                               data_length ) );
 | 
			
		||||
            if( status != PSA_SUCCESS )
 | 
			
		||||
                goto ecp_exit;
 | 
			
		||||
 | 
			
		||||
            /* Check that the point is on the curve. */
 | 
			
		||||
            status = mbedtls_to_psa_error(
 | 
			
		||||
                mbedtls_ecp_check_pubkey( &ecp.grp, &ecp.Q ) );
 | 
			
		||||
        status = mbedtls_transparent_test_driver_rsa_import_key(
 | 
			
		||||
                     attributes,
 | 
			
		||||
                     data, data_length,
 | 
			
		||||
                     key_buffer, key_buffer_size,
 | 
			
		||||
                     key_buffer_length, bits );
 | 
			
		||||
    }
 | 
			
		||||
    else
 | 
			
		||||
#endif
 | 
			
		||||
    {
 | 
			
		||||
            /* Load and validate the secret value. */
 | 
			
		||||
            status = mbedtls_to_psa_error(
 | 
			
		||||
                mbedtls_ecp_read_key( ecp.grp.id,
 | 
			
		||||
                                      &ecp,
 | 
			
		||||
                                      data,
 | 
			
		||||
                                      data_length ) );
 | 
			
		||||
        status = PSA_ERROR_NOT_SUPPORTED;
 | 
			
		||||
        (void)data;
 | 
			
		||||
        (void)data_length;
 | 
			
		||||
        (void)key_buffer;
 | 
			
		||||
        (void)key_buffer_size;
 | 
			
		||||
        (void)key_buffer_length;
 | 
			
		||||
        (void)bits;
 | 
			
		||||
        (void)type;
 | 
			
		||||
    }
 | 
			
		||||
 | 
			
		||||
ecp_exit:
 | 
			
		||||
        mbedtls_ecp_keypair_free( &ecp );
 | 
			
		||||
    return( status );
 | 
			
		||||
    }
 | 
			
		||||
    return( PSA_ERROR_NOT_SUPPORTED );
 | 
			
		||||
#else
 | 
			
		||||
    (void) attributes;
 | 
			
		||||
    (void) data;
 | 
			
		||||
    (void) data_length;
 | 
			
		||||
    (void) bits;
 | 
			
		||||
    return( PSA_ERROR_NOT_SUPPORTED );
 | 
			
		||||
#endif /* MBEDTLS_PSA_ACCEL_KEY_TYPE_ECC_KEY_PAIR ||
 | 
			
		||||
        * MBEDTLS_PSA_ACCEL_KEY_TYPE_ECC_PUBLIC_KEY */
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
psa_status_t test_opaque_export_key(
 | 
			
		||||
 | 
			
		||||
		Loading…
	
	
			
			x
			
			
		
	
		Reference in New Issue
	
	Block a user