Move mbedtls_cipher_info_from_psa to psa_crypto_cipher.c
Signed-off-by: Ronald Cron <ronald.cron@arm.com>
This commit is contained in:
parent
9198e8c259
commit
75e6ae25ef
@ -2311,98 +2311,6 @@ psa_status_t psa_hash_clone( const psa_hash_operation_t *source_operation,
|
|||||||
/* MAC */
|
/* MAC */
|
||||||
/****************************************************************/
|
/****************************************************************/
|
||||||
|
|
||||||
const mbedtls_cipher_info_t *mbedtls_cipher_info_from_psa(
|
|
||||||
psa_algorithm_t alg,
|
|
||||||
psa_key_type_t key_type,
|
|
||||||
size_t key_bits,
|
|
||||||
mbedtls_cipher_id_t* cipher_id )
|
|
||||||
{
|
|
||||||
mbedtls_cipher_mode_t mode;
|
|
||||||
mbedtls_cipher_id_t cipher_id_tmp;
|
|
||||||
|
|
||||||
if( PSA_ALG_IS_AEAD( alg ) )
|
|
||||||
alg = PSA_ALG_AEAD_WITH_SHORTENED_TAG( alg, 0 );
|
|
||||||
|
|
||||||
if( PSA_ALG_IS_CIPHER( alg ) || PSA_ALG_IS_AEAD( alg ) )
|
|
||||||
{
|
|
||||||
switch( alg )
|
|
||||||
{
|
|
||||||
case PSA_ALG_STREAM_CIPHER:
|
|
||||||
mode = MBEDTLS_MODE_STREAM;
|
|
||||||
break;
|
|
||||||
case PSA_ALG_CTR:
|
|
||||||
mode = MBEDTLS_MODE_CTR;
|
|
||||||
break;
|
|
||||||
case PSA_ALG_CFB:
|
|
||||||
mode = MBEDTLS_MODE_CFB;
|
|
||||||
break;
|
|
||||||
case PSA_ALG_OFB:
|
|
||||||
mode = MBEDTLS_MODE_OFB;
|
|
||||||
break;
|
|
||||||
case PSA_ALG_ECB_NO_PADDING:
|
|
||||||
mode = MBEDTLS_MODE_ECB;
|
|
||||||
break;
|
|
||||||
case PSA_ALG_CBC_NO_PADDING:
|
|
||||||
mode = MBEDTLS_MODE_CBC;
|
|
||||||
break;
|
|
||||||
case PSA_ALG_CBC_PKCS7:
|
|
||||||
mode = MBEDTLS_MODE_CBC;
|
|
||||||
break;
|
|
||||||
case PSA_ALG_AEAD_WITH_SHORTENED_TAG( PSA_ALG_CCM, 0 ):
|
|
||||||
mode = MBEDTLS_MODE_CCM;
|
|
||||||
break;
|
|
||||||
case PSA_ALG_AEAD_WITH_SHORTENED_TAG( PSA_ALG_GCM, 0 ):
|
|
||||||
mode = MBEDTLS_MODE_GCM;
|
|
||||||
break;
|
|
||||||
case PSA_ALG_AEAD_WITH_SHORTENED_TAG( PSA_ALG_CHACHA20_POLY1305, 0 ):
|
|
||||||
mode = MBEDTLS_MODE_CHACHAPOLY;
|
|
||||||
break;
|
|
||||||
default:
|
|
||||||
return( NULL );
|
|
||||||
}
|
|
||||||
}
|
|
||||||
else if( alg == PSA_ALG_CMAC )
|
|
||||||
mode = MBEDTLS_MODE_ECB;
|
|
||||||
else
|
|
||||||
return( NULL );
|
|
||||||
|
|
||||||
switch( key_type )
|
|
||||||
{
|
|
||||||
case PSA_KEY_TYPE_AES:
|
|
||||||
cipher_id_tmp = MBEDTLS_CIPHER_ID_AES;
|
|
||||||
break;
|
|
||||||
case PSA_KEY_TYPE_DES:
|
|
||||||
/* key_bits is 64 for Single-DES, 128 for two-key Triple-DES,
|
|
||||||
* and 192 for three-key Triple-DES. */
|
|
||||||
if( key_bits == 64 )
|
|
||||||
cipher_id_tmp = MBEDTLS_CIPHER_ID_DES;
|
|
||||||
else
|
|
||||||
cipher_id_tmp = MBEDTLS_CIPHER_ID_3DES;
|
|
||||||
/* mbedtls doesn't recognize two-key Triple-DES as an algorithm,
|
|
||||||
* but two-key Triple-DES is functionally three-key Triple-DES
|
|
||||||
* with K1=K3, so that's how we present it to mbedtls. */
|
|
||||||
if( key_bits == 128 )
|
|
||||||
key_bits = 192;
|
|
||||||
break;
|
|
||||||
case PSA_KEY_TYPE_CAMELLIA:
|
|
||||||
cipher_id_tmp = MBEDTLS_CIPHER_ID_CAMELLIA;
|
|
||||||
break;
|
|
||||||
case PSA_KEY_TYPE_ARC4:
|
|
||||||
cipher_id_tmp = MBEDTLS_CIPHER_ID_ARC4;
|
|
||||||
break;
|
|
||||||
case PSA_KEY_TYPE_CHACHA20:
|
|
||||||
cipher_id_tmp = MBEDTLS_CIPHER_ID_CHACHA20;
|
|
||||||
break;
|
|
||||||
default:
|
|
||||||
return( NULL );
|
|
||||||
}
|
|
||||||
if( cipher_id != NULL )
|
|
||||||
*cipher_id = cipher_id_tmp;
|
|
||||||
|
|
||||||
return( mbedtls_cipher_info_from_values( cipher_id_tmp,
|
|
||||||
(int) key_bits, mode ) );
|
|
||||||
}
|
|
||||||
|
|
||||||
#if defined(MBEDTLS_PSA_BUILTIN_ALG_HMAC)
|
#if defined(MBEDTLS_PSA_BUILTIN_ALG_HMAC)
|
||||||
static size_t psa_get_hash_block_size( psa_algorithm_t alg )
|
static size_t psa_get_hash_block_size( psa_algorithm_t alg )
|
||||||
{
|
{
|
||||||
|
@ -55,6 +55,98 @@
|
|||||||
#define BUILTIN_KEY_TYPE_CHACHA20 1
|
#define BUILTIN_KEY_TYPE_CHACHA20 1
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
|
const mbedtls_cipher_info_t *mbedtls_cipher_info_from_psa(
|
||||||
|
psa_algorithm_t alg,
|
||||||
|
psa_key_type_t key_type,
|
||||||
|
size_t key_bits,
|
||||||
|
mbedtls_cipher_id_t* cipher_id )
|
||||||
|
{
|
||||||
|
mbedtls_cipher_mode_t mode;
|
||||||
|
mbedtls_cipher_id_t cipher_id_tmp;
|
||||||
|
|
||||||
|
if( PSA_ALG_IS_AEAD( alg ) )
|
||||||
|
alg = PSA_ALG_AEAD_WITH_SHORTENED_TAG( alg, 0 );
|
||||||
|
|
||||||
|
if( PSA_ALG_IS_CIPHER( alg ) || PSA_ALG_IS_AEAD( alg ) )
|
||||||
|
{
|
||||||
|
switch( alg )
|
||||||
|
{
|
||||||
|
case PSA_ALG_STREAM_CIPHER:
|
||||||
|
mode = MBEDTLS_MODE_STREAM;
|
||||||
|
break;
|
||||||
|
case PSA_ALG_CTR:
|
||||||
|
mode = MBEDTLS_MODE_CTR;
|
||||||
|
break;
|
||||||
|
case PSA_ALG_CFB:
|
||||||
|
mode = MBEDTLS_MODE_CFB;
|
||||||
|
break;
|
||||||
|
case PSA_ALG_OFB:
|
||||||
|
mode = MBEDTLS_MODE_OFB;
|
||||||
|
break;
|
||||||
|
case PSA_ALG_ECB_NO_PADDING:
|
||||||
|
mode = MBEDTLS_MODE_ECB;
|
||||||
|
break;
|
||||||
|
case PSA_ALG_CBC_NO_PADDING:
|
||||||
|
mode = MBEDTLS_MODE_CBC;
|
||||||
|
break;
|
||||||
|
case PSA_ALG_CBC_PKCS7:
|
||||||
|
mode = MBEDTLS_MODE_CBC;
|
||||||
|
break;
|
||||||
|
case PSA_ALG_AEAD_WITH_SHORTENED_TAG( PSA_ALG_CCM, 0 ):
|
||||||
|
mode = MBEDTLS_MODE_CCM;
|
||||||
|
break;
|
||||||
|
case PSA_ALG_AEAD_WITH_SHORTENED_TAG( PSA_ALG_GCM, 0 ):
|
||||||
|
mode = MBEDTLS_MODE_GCM;
|
||||||
|
break;
|
||||||
|
case PSA_ALG_AEAD_WITH_SHORTENED_TAG( PSA_ALG_CHACHA20_POLY1305, 0 ):
|
||||||
|
mode = MBEDTLS_MODE_CHACHAPOLY;
|
||||||
|
break;
|
||||||
|
default:
|
||||||
|
return( NULL );
|
||||||
|
}
|
||||||
|
}
|
||||||
|
else if( alg == PSA_ALG_CMAC )
|
||||||
|
mode = MBEDTLS_MODE_ECB;
|
||||||
|
else
|
||||||
|
return( NULL );
|
||||||
|
|
||||||
|
switch( key_type )
|
||||||
|
{
|
||||||
|
case PSA_KEY_TYPE_AES:
|
||||||
|
cipher_id_tmp = MBEDTLS_CIPHER_ID_AES;
|
||||||
|
break;
|
||||||
|
case PSA_KEY_TYPE_DES:
|
||||||
|
/* key_bits is 64 for Single-DES, 128 for two-key Triple-DES,
|
||||||
|
* and 192 for three-key Triple-DES. */
|
||||||
|
if( key_bits == 64 )
|
||||||
|
cipher_id_tmp = MBEDTLS_CIPHER_ID_DES;
|
||||||
|
else
|
||||||
|
cipher_id_tmp = MBEDTLS_CIPHER_ID_3DES;
|
||||||
|
/* mbedtls doesn't recognize two-key Triple-DES as an algorithm,
|
||||||
|
* but two-key Triple-DES is functionally three-key Triple-DES
|
||||||
|
* with K1=K3, so that's how we present it to mbedtls. */
|
||||||
|
if( key_bits == 128 )
|
||||||
|
key_bits = 192;
|
||||||
|
break;
|
||||||
|
case PSA_KEY_TYPE_CAMELLIA:
|
||||||
|
cipher_id_tmp = MBEDTLS_CIPHER_ID_CAMELLIA;
|
||||||
|
break;
|
||||||
|
case PSA_KEY_TYPE_ARC4:
|
||||||
|
cipher_id_tmp = MBEDTLS_CIPHER_ID_ARC4;
|
||||||
|
break;
|
||||||
|
case PSA_KEY_TYPE_CHACHA20:
|
||||||
|
cipher_id_tmp = MBEDTLS_CIPHER_ID_CHACHA20;
|
||||||
|
break;
|
||||||
|
default:
|
||||||
|
return( NULL );
|
||||||
|
}
|
||||||
|
if( cipher_id != NULL )
|
||||||
|
*cipher_id = cipher_id_tmp;
|
||||||
|
|
||||||
|
return( mbedtls_cipher_info_from_values( cipher_id_tmp,
|
||||||
|
(int) key_bits, mode ) );
|
||||||
|
}
|
||||||
|
|
||||||
#if defined(MBEDTLS_PSA_BUILTIN_CIPHER) || defined(PSA_CRYPTO_DRIVER_TEST)
|
#if defined(MBEDTLS_PSA_BUILTIN_CIPHER) || defined(PSA_CRYPTO_DRIVER_TEST)
|
||||||
|
|
||||||
static psa_status_t cipher_setup(
|
static psa_status_t cipher_setup(
|
||||||
|
@ -21,8 +21,25 @@
|
|||||||
#ifndef PSA_CRYPTO_CIPHER_H
|
#ifndef PSA_CRYPTO_CIPHER_H
|
||||||
#define PSA_CRYPTO_CIPHER_H
|
#define PSA_CRYPTO_CIPHER_H
|
||||||
|
|
||||||
|
#include <mbedtls/cipher.h>
|
||||||
#include <psa/crypto.h>
|
#include <psa/crypto.h>
|
||||||
|
|
||||||
|
/** Get Mbed TLS cipher information given the cipher algorithm PSA identifier
|
||||||
|
* as well as the PSA type and size of the key to be used with the cipher
|
||||||
|
* algorithm.
|
||||||
|
*
|
||||||
|
* \param alg PSA cipher algorithm identifier
|
||||||
|
* \param key_type PSA key type
|
||||||
|
* \param key_bits Size of the key in bits
|
||||||
|
* \param[out] cipher_id Mbed TLS cipher algorithm identifier
|
||||||
|
*
|
||||||
|
* \return The Mbed TLS cipher information of the cipher algorithm.
|
||||||
|
* \c NULL if the PSA cipher algorithm is not supported.
|
||||||
|
*/
|
||||||
|
const mbedtls_cipher_info_t *mbedtls_cipher_info_from_psa(
|
||||||
|
psa_algorithm_t alg, psa_key_type_t key_type, size_t key_bits,
|
||||||
|
mbedtls_cipher_id_t *cipher_id );
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* \brief Set the key for a multipart symmetric encryption operation.
|
* \brief Set the key for a multipart symmetric encryption operation.
|
||||||
*
|
*
|
||||||
|
@ -212,22 +212,6 @@ psa_status_t psa_copy_key_material_into_slot( psa_key_slot_t *slot,
|
|||||||
*/
|
*/
|
||||||
psa_status_t mbedtls_to_psa_error( int ret );
|
psa_status_t mbedtls_to_psa_error( int ret );
|
||||||
|
|
||||||
/** Get Mbed TLS cipher information given the cipher algorithm PSA identifier
|
|
||||||
* as well as the PSA type and size of the key to be used with the cipher
|
|
||||||
* algorithm.
|
|
||||||
*
|
|
||||||
* \param alg PSA cipher algorithm identifier
|
|
||||||
* \param key_type PSA key type
|
|
||||||
* \param key_bits Size of the key in bits
|
|
||||||
* \param[out] cipher_id Mbed TLS cipher algorithm identifier
|
|
||||||
*
|
|
||||||
* \return The Mbed TLS cipher information of the cipher algorithm.
|
|
||||||
* \c NULL if the PSA cipher algorithm is not supported.
|
|
||||||
*/
|
|
||||||
const mbedtls_cipher_info_t *mbedtls_cipher_info_from_psa(
|
|
||||||
psa_algorithm_t alg, psa_key_type_t key_type, size_t key_bits,
|
|
||||||
mbedtls_cipher_id_t *cipher_id );
|
|
||||||
|
|
||||||
/** Import a key in binary format.
|
/** Import a key in binary format.
|
||||||
*
|
*
|
||||||
* \note The signature of this function is that of a PSA driver
|
* \note The signature of this function is that of a PSA driver
|
||||||
|
Loading…
Reference in New Issue
Block a user