mirror of
				https://github.com/cuberite/polarssl.git
				synced 2025-11-04 04:32:24 -05:00 
			
		
		
		
	Add boilerplate for dispatching MAC operations
Signed-off-by: Steven Cooreman <steven.cooreman@silabs.com>
This commit is contained in:
		
							parent
							
								
									3c8dd634dd
								
							
						
					
					
						commit
						d13a70f2dc
					
				@ -51,4 +51,32 @@ typedef struct
 | 
			
		||||
} psa_hmac_internal_data;
 | 
			
		||||
#endif /* MBEDTLS_MD_C */
 | 
			
		||||
 | 
			
		||||
#include "mbedtls/cmac.h"
 | 
			
		||||
 | 
			
		||||
#if defined(MBEDTLS_PSA_BUILTIN_ALG_CMAC) || \
 | 
			
		||||
    defined(MBEDTLS_PSA_BUILTIN_ALG_HMAC)
 | 
			
		||||
#define MBEDTLS_PSA_BUILTIN_MAC
 | 
			
		||||
#endif
 | 
			
		||||
 | 
			
		||||
typedef struct
 | 
			
		||||
{
 | 
			
		||||
    psa_algorithm_t alg;
 | 
			
		||||
    /* To be fleshed out in a later commit. */
 | 
			
		||||
} mbedtls_psa_mac_operation_t;
 | 
			
		||||
 | 
			
		||||
#define MBEDTLS_PSA_MAC_OPERATION_INIT {0, {0}}
 | 
			
		||||
 | 
			
		||||
/*
 | 
			
		||||
 * BEYOND THIS POINT, TEST DRIVER DECLARATIONS ONLY.
 | 
			
		||||
 */
 | 
			
		||||
#if defined(PSA_CRYPTO_DRIVER_TEST)
 | 
			
		||||
 | 
			
		||||
typedef mbedtls_psa_mac_operation_t mbedtls_transparent_test_driver_mac_operation_t;
 | 
			
		||||
typedef mbedtls_psa_mac_operation_t mbedtls_opaque_test_driver_mac_operation_t;
 | 
			
		||||
 | 
			
		||||
#define MBEDTLS_TRANSPARENT_TEST_DRIVER_MAC_OPERATION_INIT MBEDTLS_PSA_MAC_OPERATION_INIT
 | 
			
		||||
#define MBEDTLS_OPAQUE_TEST_DRIVER_MAC_OPERATION_INIT MBEDTLS_PSA_MAC_OPERATION_INIT
 | 
			
		||||
 | 
			
		||||
#endif /* PSA_CRYPTO_DRIVER_TEST */
 | 
			
		||||
 | 
			
		||||
#endif /* PSA_CRYPTO_BUILTIN_COMPOSITES_H */
 | 
			
		||||
 | 
			
		||||
@ -49,5 +49,14 @@
 | 
			
		||||
 * are formatted as `'drivername'_ctx`. This allows for procedural generation
 | 
			
		||||
 * of both this file and the content of psa_crypto_driver_wrappers.c */
 | 
			
		||||
 | 
			
		||||
typedef union {
 | 
			
		||||
    unsigned dummy; /* Make sure this union is always non-empty */
 | 
			
		||||
    mbedtls_psa_mac_operation_t mbedtls_ctx;
 | 
			
		||||
#if defined(PSA_CRYPTO_DRIVER_TEST)
 | 
			
		||||
    mbedtls_transparent_test_driver_mac_operation_t transparent_test_driver_ctx;
 | 
			
		||||
    mbedtls_opaque_test_driver_mac_operation_t opaque_test_driver_ctx;
 | 
			
		||||
#endif
 | 
			
		||||
} psa_driver_mac_context_t;
 | 
			
		||||
 | 
			
		||||
#endif /* PSA_CRYPTO_DRIVER_CONTEXTS_COMPOSITES_H */
 | 
			
		||||
/* End of automatically generated file. */
 | 
			
		||||
 | 
			
		||||
@ -137,6 +137,7 @@ struct psa_mac_operation_s
 | 
			
		||||
    unsigned int has_input : 1;
 | 
			
		||||
    unsigned int is_sign : 1;
 | 
			
		||||
    uint8_t mac_size;
 | 
			
		||||
    unsigned int id;
 | 
			
		||||
    union
 | 
			
		||||
    {
 | 
			
		||||
        unsigned dummy; /* Make the union non-empty even with no supported algorithms. */
 | 
			
		||||
@ -146,10 +147,11 @@ struct psa_mac_operation_s
 | 
			
		||||
#if defined(MBEDTLS_CMAC_C)
 | 
			
		||||
        mbedtls_cipher_context_t cmac;
 | 
			
		||||
#endif
 | 
			
		||||
        psa_driver_mac_context_t driver;
 | 
			
		||||
    } ctx;
 | 
			
		||||
};
 | 
			
		||||
 | 
			
		||||
#define PSA_MAC_OPERATION_INIT {0, 0, 0, 0, 0, 0, 0, {0}}
 | 
			
		||||
#define PSA_MAC_OPERATION_INIT {0, 0, 0, 0, 0, 0, 0, 0, {0}}
 | 
			
		||||
static inline struct psa_mac_operation_s psa_mac_operation_init( void )
 | 
			
		||||
{
 | 
			
		||||
    const struct psa_mac_operation_s v = PSA_MAC_OPERATION_INIT;
 | 
			
		||||
 | 
			
		||||
@ -68,6 +68,7 @@ set(src_crypto
 | 
			
		||||
    psa_crypto_driver_wrappers.c
 | 
			
		||||
    psa_crypto_ecp.c
 | 
			
		||||
    psa_crypto_hash.c
 | 
			
		||||
    psa_crypto_mac.c
 | 
			
		||||
    psa_crypto_rsa.c
 | 
			
		||||
    psa_crypto_se.c
 | 
			
		||||
    psa_crypto_slot_management.c
 | 
			
		||||
 | 
			
		||||
@ -125,6 +125,7 @@ OBJS_CRYPTO= \
 | 
			
		||||
	     psa_crypto_driver_wrappers.o \
 | 
			
		||||
	     psa_crypto_ecp.o \
 | 
			
		||||
	     psa_crypto_hash.o \
 | 
			
		||||
	     psa_crypto_mac.o \
 | 
			
		||||
	     psa_crypto_rsa.o \
 | 
			
		||||
	     psa_crypto_se.o \
 | 
			
		||||
	     psa_crypto_slot_management.o \
 | 
			
		||||
 | 
			
		||||
@ -24,6 +24,7 @@
 | 
			
		||||
#include "psa_crypto_core.h"
 | 
			
		||||
#include "psa_crypto_driver_wrappers.h"
 | 
			
		||||
#include "psa_crypto_hash.h"
 | 
			
		||||
#include "psa_crypto_mac.h"
 | 
			
		||||
 | 
			
		||||
#include "mbedtls/platform.h"
 | 
			
		||||
 | 
			
		||||
@ -1290,4 +1291,352 @@ psa_status_t psa_driver_wrapper_aead_decrypt(
 | 
			
		||||
            return( PSA_ERROR_INVALID_ARGUMENT );
 | 
			
		||||
    }
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
/*
 | 
			
		||||
 * MAC functions
 | 
			
		||||
 */
 | 
			
		||||
psa_status_t psa_driver_wrapper_mac_compute(
 | 
			
		||||
    const psa_key_attributes_t *attributes,
 | 
			
		||||
    const uint8_t *key_buffer,
 | 
			
		||||
    size_t key_buffer_size,
 | 
			
		||||
    psa_algorithm_t alg,
 | 
			
		||||
    const uint8_t *input,
 | 
			
		||||
    size_t input_length,
 | 
			
		||||
    uint8_t *mac,
 | 
			
		||||
    size_t mac_size,
 | 
			
		||||
    size_t *mac_length )
 | 
			
		||||
{
 | 
			
		||||
    psa_status_t status = PSA_ERROR_CORRUPTION_DETECTED;
 | 
			
		||||
    psa_key_location_t location =
 | 
			
		||||
        PSA_KEY_LIFETIME_GET_LOCATION( attributes->core.lifetime );
 | 
			
		||||
 | 
			
		||||
    switch( location )
 | 
			
		||||
    {
 | 
			
		||||
        case PSA_KEY_LOCATION_LOCAL_STORAGE:
 | 
			
		||||
            /* Key is stored in the slot in export representation, so
 | 
			
		||||
             * cycle through all known transparent accelerators */
 | 
			
		||||
#if defined(PSA_CRYPTO_ACCELERATOR_DRIVER_PRESENT)
 | 
			
		||||
#if defined(PSA_CRYPTO_DRIVER_TEST)
 | 
			
		||||
            status = mbedtls_transparent_test_driver_mac_compute(
 | 
			
		||||
                attributes, key_buffer, key_buffer_size, alg,
 | 
			
		||||
                input, input_length,
 | 
			
		||||
                mac, mac_size, mac_length );
 | 
			
		||||
            /* Declared with fallback == true */
 | 
			
		||||
            if( status != PSA_ERROR_NOT_SUPPORTED )
 | 
			
		||||
                return( status );
 | 
			
		||||
#endif /* PSA_CRYPTO_DRIVER_TEST */
 | 
			
		||||
#endif /* PSA_CRYPTO_ACCELERATOR_DRIVER_PRESENT */
 | 
			
		||||
#if defined(MBEDTLS_PSA_BUILTIN_MAC)
 | 
			
		||||
            /* Fell through, meaning no accelerator supports this operation */
 | 
			
		||||
            status = mbedtls_psa_mac_compute(
 | 
			
		||||
                attributes, key_buffer, key_buffer_size, alg,
 | 
			
		||||
                input, input_length,
 | 
			
		||||
                mac, mac_size, mac_length );
 | 
			
		||||
            if( status != PSA_ERROR_NOT_SUPPORTED )
 | 
			
		||||
                return( status );
 | 
			
		||||
#endif /* MBEDTLS_PSA_BUILTIN_MAC */
 | 
			
		||||
            return( PSA_ERROR_NOT_SUPPORTED );
 | 
			
		||||
 | 
			
		||||
        /* Add cases for opaque driver here */
 | 
			
		||||
#if defined(PSA_CRYPTO_ACCELERATOR_DRIVER_PRESENT)
 | 
			
		||||
#if defined(PSA_CRYPTO_DRIVER_TEST)
 | 
			
		||||
        case PSA_CRYPTO_TEST_DRIVER_LOCATION:
 | 
			
		||||
            status = mbedtls_opaque_test_driver_mac_compute(
 | 
			
		||||
                attributes, key_buffer, key_buffer_size, alg,
 | 
			
		||||
                input, input_length,
 | 
			
		||||
                mac, mac_size, mac_length );
 | 
			
		||||
            return( status );
 | 
			
		||||
#endif /* PSA_CRYPTO_DRIVER_TEST */
 | 
			
		||||
#endif /* PSA_CRYPTO_ACCELERATOR_DRIVER_PRESENT */
 | 
			
		||||
        default:
 | 
			
		||||
            /* Key is declared with a lifetime not known to us */
 | 
			
		||||
            (void) key_buffer;
 | 
			
		||||
            (void) key_buffer_size;
 | 
			
		||||
            (void) alg;
 | 
			
		||||
            (void) input;
 | 
			
		||||
            (void) input_length;
 | 
			
		||||
            (void) mac;
 | 
			
		||||
            (void) mac_size;
 | 
			
		||||
            (void) mac_length;
 | 
			
		||||
            (void) status;
 | 
			
		||||
            return( PSA_ERROR_INVALID_ARGUMENT );
 | 
			
		||||
    }
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
psa_status_t psa_driver_wrapper_mac_sign_setup(
 | 
			
		||||
    psa_mac_operation_t *operation,
 | 
			
		||||
    const psa_key_attributes_t *attributes,
 | 
			
		||||
    const uint8_t *key_buffer,
 | 
			
		||||
    size_t key_buffer_size,
 | 
			
		||||
    psa_algorithm_t alg )
 | 
			
		||||
{
 | 
			
		||||
    psa_status_t status = PSA_ERROR_CORRUPTION_DETECTED;
 | 
			
		||||
    psa_key_location_t location =
 | 
			
		||||
        PSA_KEY_LIFETIME_GET_LOCATION( attributes->core.lifetime );
 | 
			
		||||
 | 
			
		||||
    switch( location )
 | 
			
		||||
    {
 | 
			
		||||
        case PSA_KEY_LOCATION_LOCAL_STORAGE:
 | 
			
		||||
            /* Key is stored in the slot in export representation, so
 | 
			
		||||
             * cycle through all known transparent accelerators */
 | 
			
		||||
#if defined(PSA_CRYPTO_ACCELERATOR_DRIVER_PRESENT)
 | 
			
		||||
#if defined(PSA_CRYPTO_DRIVER_TEST)
 | 
			
		||||
            status = mbedtls_transparent_test_driver_mac_sign_setup(
 | 
			
		||||
                &operation->ctx.driver.transparent_test_driver_ctx,
 | 
			
		||||
                attributes,
 | 
			
		||||
                key_buffer, key_buffer_size,
 | 
			
		||||
                alg );
 | 
			
		||||
            /* Declared with fallback == true */
 | 
			
		||||
            if( status == PSA_SUCCESS )
 | 
			
		||||
                operation->id = PSA_CRYPTO_TRANSPARENT_TEST_DRIVER_ID;
 | 
			
		||||
 | 
			
		||||
            if( status != PSA_ERROR_NOT_SUPPORTED )
 | 
			
		||||
                return( status );
 | 
			
		||||
#endif /* PSA_CRYPTO_DRIVER_TEST */
 | 
			
		||||
#endif /* PSA_CRYPTO_ACCELERATOR_DRIVER_PRESENT */
 | 
			
		||||
#if defined(MBEDTLS_PSA_BUILTIN_MAC)
 | 
			
		||||
            /* Fell through, meaning no accelerator supports this operation */
 | 
			
		||||
            status = mbedtls_psa_mac_sign_setup( &operation->ctx.driver.mbedtls_ctx,
 | 
			
		||||
                                                 attributes,
 | 
			
		||||
                                                 key_buffer, key_buffer_size,
 | 
			
		||||
                                                 alg );
 | 
			
		||||
            if( status == PSA_SUCCESS )
 | 
			
		||||
                operation->id = PSA_CRYPTO_MBED_TLS_DRIVER_ID;
 | 
			
		||||
 | 
			
		||||
            if( status != PSA_ERROR_NOT_SUPPORTED )
 | 
			
		||||
                return( status );
 | 
			
		||||
#endif /* MBEDTLS_PSA_BUILTIN_MAC */
 | 
			
		||||
            return( PSA_ERROR_NOT_SUPPORTED );
 | 
			
		||||
 | 
			
		||||
        /* Add cases for opaque driver here */
 | 
			
		||||
#if defined(PSA_CRYPTO_ACCELERATOR_DRIVER_PRESENT)
 | 
			
		||||
#if defined(PSA_CRYPTO_DRIVER_TEST)
 | 
			
		||||
        case PSA_CRYPTO_TEST_DRIVER_LOCATION:
 | 
			
		||||
            status = mbedtls_opaque_test_driver_mac_sign_setup(
 | 
			
		||||
                &operation->ctx.driver.opaque_test_driver_ctx,
 | 
			
		||||
                attributes,
 | 
			
		||||
                key_buffer, key_buffer_size,
 | 
			
		||||
                alg );
 | 
			
		||||
 | 
			
		||||
            if( status == PSA_SUCCESS )
 | 
			
		||||
                operation->id = PSA_CRYPTO_OPAQUE_TEST_DRIVER_ID;
 | 
			
		||||
 | 
			
		||||
            return( status );
 | 
			
		||||
#endif /* PSA_CRYPTO_DRIVER_TEST */
 | 
			
		||||
#endif /* PSA_CRYPTO_ACCELERATOR_DRIVER_PRESENT */
 | 
			
		||||
        default:
 | 
			
		||||
            /* Key is declared with a lifetime not known to us */
 | 
			
		||||
            (void) status;
 | 
			
		||||
            (void) key_buffer;
 | 
			
		||||
            (void) key_buffer_size;
 | 
			
		||||
            (void) alg;
 | 
			
		||||
            return( PSA_ERROR_INVALID_ARGUMENT );
 | 
			
		||||
    }
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
psa_status_t psa_driver_wrapper_mac_verify_setup(
 | 
			
		||||
    psa_mac_operation_t *operation,
 | 
			
		||||
    const psa_key_attributes_t *attributes,
 | 
			
		||||
    const uint8_t *key_buffer,
 | 
			
		||||
    size_t key_buffer_size,
 | 
			
		||||
    psa_algorithm_t alg )
 | 
			
		||||
{
 | 
			
		||||
    psa_status_t status = PSA_ERROR_CORRUPTION_DETECTED;
 | 
			
		||||
    psa_key_location_t location =
 | 
			
		||||
        PSA_KEY_LIFETIME_GET_LOCATION( attributes->core.lifetime );
 | 
			
		||||
 | 
			
		||||
    switch( location )
 | 
			
		||||
    {
 | 
			
		||||
        case PSA_KEY_LOCATION_LOCAL_STORAGE:
 | 
			
		||||
            /* Key is stored in the slot in export representation, so
 | 
			
		||||
             * cycle through all known transparent accelerators */
 | 
			
		||||
#if defined(PSA_CRYPTO_ACCELERATOR_DRIVER_PRESENT)
 | 
			
		||||
#if defined(PSA_CRYPTO_DRIVER_TEST)
 | 
			
		||||
            status = mbedtls_transparent_test_driver_mac_verify_setup(
 | 
			
		||||
                &operation->ctx.driver.transparent_test_driver_ctx,
 | 
			
		||||
                attributes,
 | 
			
		||||
                key_buffer, key_buffer_size,
 | 
			
		||||
                alg );
 | 
			
		||||
            /* Declared with fallback == true */
 | 
			
		||||
            if( status == PSA_SUCCESS )
 | 
			
		||||
                operation->id = PSA_CRYPTO_TRANSPARENT_TEST_DRIVER_ID;
 | 
			
		||||
 | 
			
		||||
            if( status != PSA_ERROR_NOT_SUPPORTED )
 | 
			
		||||
                return( status );
 | 
			
		||||
#endif /* PSA_CRYPTO_DRIVER_TEST */
 | 
			
		||||
#endif /* PSA_CRYPTO_ACCELERATOR_DRIVER_PRESENT */
 | 
			
		||||
#if defined(MBEDTLS_PSA_BUILTIN_MAC)
 | 
			
		||||
            /* Fell through, meaning no accelerator supports this operation */
 | 
			
		||||
            status = mbedtls_psa_mac_verify_setup( &operation->ctx.driver.mbedtls_ctx,
 | 
			
		||||
                                                   attributes,
 | 
			
		||||
                                                   key_buffer, key_buffer_size,
 | 
			
		||||
                                                   alg );
 | 
			
		||||
            if( status == PSA_SUCCESS )
 | 
			
		||||
                operation->id = PSA_CRYPTO_MBED_TLS_DRIVER_ID;
 | 
			
		||||
 | 
			
		||||
            if( status != PSA_ERROR_NOT_SUPPORTED )
 | 
			
		||||
                return( status );
 | 
			
		||||
#endif /* MBEDTLS_PSA_BUILTIN_MAC */
 | 
			
		||||
            return( PSA_ERROR_NOT_SUPPORTED );
 | 
			
		||||
 | 
			
		||||
        /* Add cases for opaque driver here */
 | 
			
		||||
#if defined(PSA_CRYPTO_ACCELERATOR_DRIVER_PRESENT)
 | 
			
		||||
#if defined(PSA_CRYPTO_DRIVER_TEST)
 | 
			
		||||
        case PSA_CRYPTO_TEST_DRIVER_LOCATION:
 | 
			
		||||
            status = mbedtls_opaque_test_driver_mac_sign_setup(
 | 
			
		||||
                &operation->ctx.driver.opaque_test_driver_ctx,
 | 
			
		||||
                attributes,
 | 
			
		||||
                key_buffer, key_buffer_size,
 | 
			
		||||
                alg );
 | 
			
		||||
 | 
			
		||||
            if( status == PSA_SUCCESS )
 | 
			
		||||
                operation->id = PSA_CRYPTO_OPAQUE_TEST_DRIVER_ID;
 | 
			
		||||
 | 
			
		||||
            return( status );
 | 
			
		||||
#endif /* PSA_CRYPTO_DRIVER_TEST */
 | 
			
		||||
#endif /* PSA_CRYPTO_ACCELERATOR_DRIVER_PRESENT */
 | 
			
		||||
        default:
 | 
			
		||||
            /* Key is declared with a lifetime not known to us */
 | 
			
		||||
            (void) status;
 | 
			
		||||
            (void) key_buffer;
 | 
			
		||||
            (void) key_buffer_size;
 | 
			
		||||
            (void) alg;
 | 
			
		||||
            return( PSA_ERROR_INVALID_ARGUMENT );
 | 
			
		||||
    }
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
psa_status_t psa_driver_wrapper_mac_update(
 | 
			
		||||
    psa_mac_operation_t *operation,
 | 
			
		||||
    const uint8_t *input,
 | 
			
		||||
    size_t input_length )
 | 
			
		||||
{
 | 
			
		||||
    switch( operation->id )
 | 
			
		||||
    {
 | 
			
		||||
#if defined(MBEDTLS_PSA_BUILTIN_MAC)
 | 
			
		||||
        case PSA_CRYPTO_MBED_TLS_DRIVER_ID:
 | 
			
		||||
            return( mbedtls_psa_mac_update( &operation->ctx.driver.mbedtls_ctx,
 | 
			
		||||
                                            input, input_length ) );
 | 
			
		||||
#endif /* MBEDTLS_PSA_BUILTIN_MAC */
 | 
			
		||||
 | 
			
		||||
#if defined(PSA_CRYPTO_ACCELERATOR_DRIVER_PRESENT)
 | 
			
		||||
#if defined(PSA_CRYPTO_DRIVER_TEST)
 | 
			
		||||
        case PSA_CRYPTO_TRANSPARENT_TEST_DRIVER_ID:
 | 
			
		||||
            return( mbedtls_transparent_test_driver_mac_update(
 | 
			
		||||
                        &operation->ctx.driver.transparent_test_driver_ctx,
 | 
			
		||||
                        input, input_length ) );
 | 
			
		||||
 | 
			
		||||
        case PSA_CRYPTO_OPAQUE_TEST_DRIVER_ID:
 | 
			
		||||
            return( mbedtls_opaque_test_driver_mac_update(
 | 
			
		||||
                        &operation->ctx.driver.opaque_test_driver_ctx,
 | 
			
		||||
                        input, input_length ) );
 | 
			
		||||
#endif /* PSA_CRYPTO_DRIVER_TEST */
 | 
			
		||||
#endif /* PSA_CRYPTO_ACCELERATOR_DRIVER_PRESENT */
 | 
			
		||||
        default:
 | 
			
		||||
            (void) input;
 | 
			
		||||
            (void) input_length;
 | 
			
		||||
            return( PSA_ERROR_INVALID_ARGUMENT );
 | 
			
		||||
    }
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
psa_status_t psa_driver_wrapper_mac_sign_finish(
 | 
			
		||||
    psa_mac_operation_t *operation,
 | 
			
		||||
    uint8_t *mac,
 | 
			
		||||
    size_t mac_size,
 | 
			
		||||
    size_t *mac_length )
 | 
			
		||||
{
 | 
			
		||||
    switch( operation->id )
 | 
			
		||||
    {
 | 
			
		||||
#if defined(MBEDTLS_PSA_BUILTIN_MAC)
 | 
			
		||||
        case PSA_CRYPTO_MBED_TLS_DRIVER_ID:
 | 
			
		||||
            return( mbedtls_psa_mac_sign_finish( &operation->ctx.driver.mbedtls_ctx,
 | 
			
		||||
                                                 mac, mac_size, mac_length ) );
 | 
			
		||||
#endif /* MBEDTLS_PSA_BUILTIN_MAC */
 | 
			
		||||
 | 
			
		||||
#if defined(PSA_CRYPTO_ACCELERATOR_DRIVER_PRESENT)
 | 
			
		||||
#if defined(PSA_CRYPTO_DRIVER_TEST)
 | 
			
		||||
        case PSA_CRYPTO_TRANSPARENT_TEST_DRIVER_ID:
 | 
			
		||||
            return( mbedtls_transparent_test_driver_mac_sign_finish(
 | 
			
		||||
                        &operation->ctx.driver.transparent_test_driver_ctx,
 | 
			
		||||
                        mac, mac_size, mac_length ) );
 | 
			
		||||
 | 
			
		||||
        case PSA_CRYPTO_OPAQUE_TEST_DRIVER_ID:
 | 
			
		||||
            return( mbedtls_opaque_test_driver_mac_sign_finish(
 | 
			
		||||
                        &operation->ctx.driver.opaque_test_driver_ctx,
 | 
			
		||||
                        mac, mac_size, mac_length ) );
 | 
			
		||||
#endif /* PSA_CRYPTO_DRIVER_TEST */
 | 
			
		||||
#endif /* PSA_CRYPTO_ACCELERATOR_DRIVER_PRESENT */
 | 
			
		||||
        default:
 | 
			
		||||
            (void) mac;
 | 
			
		||||
            (void) mac_size;
 | 
			
		||||
            (void) mac_length;
 | 
			
		||||
            return( PSA_ERROR_INVALID_ARGUMENT );
 | 
			
		||||
    }
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
psa_status_t psa_driver_wrapper_mac_verify_finish(
 | 
			
		||||
    psa_mac_operation_t *operation,
 | 
			
		||||
    const uint8_t *mac,
 | 
			
		||||
    size_t mac_length )
 | 
			
		||||
{
 | 
			
		||||
    switch( operation->id )
 | 
			
		||||
    {
 | 
			
		||||
#if defined(MBEDTLS_PSA_BUILTIN_MAC)
 | 
			
		||||
        case PSA_CRYPTO_MBED_TLS_DRIVER_ID:
 | 
			
		||||
            return( mbedtls_psa_mac_verify_finish( &operation->ctx.driver.mbedtls_ctx,
 | 
			
		||||
                                                   mac, mac_length ) );
 | 
			
		||||
#endif /* MBEDTLS_PSA_BUILTIN_MAC */
 | 
			
		||||
 | 
			
		||||
#if defined(PSA_CRYPTO_ACCELERATOR_DRIVER_PRESENT)
 | 
			
		||||
#if defined(PSA_CRYPTO_DRIVER_TEST)
 | 
			
		||||
        case PSA_CRYPTO_TRANSPARENT_TEST_DRIVER_ID:
 | 
			
		||||
            return( mbedtls_transparent_test_driver_mac_verify_finish(
 | 
			
		||||
                        &operation->ctx.driver.transparent_test_driver_ctx,
 | 
			
		||||
                        mac, mac_length ) );
 | 
			
		||||
 | 
			
		||||
        case PSA_CRYPTO_OPAQUE_TEST_DRIVER_ID:
 | 
			
		||||
            return( mbedtls_opaque_test_driver_mac_verify_finish(
 | 
			
		||||
                        &operation->ctx.driver.opaque_test_driver_ctx,
 | 
			
		||||
                        mac, mac_length ) );
 | 
			
		||||
#endif /* PSA_CRYPTO_DRIVER_TEST */
 | 
			
		||||
#endif /* PSA_CRYPTO_ACCELERATOR_DRIVER_PRESENT */
 | 
			
		||||
        default:
 | 
			
		||||
            (void) mac;
 | 
			
		||||
            (void) mac_length;
 | 
			
		||||
            return( PSA_ERROR_INVALID_ARGUMENT );
 | 
			
		||||
    }
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
psa_status_t psa_driver_wrapper_mac_abort(
 | 
			
		||||
    psa_mac_operation_t *operation )
 | 
			
		||||
{
 | 
			
		||||
    psa_status_t status = PSA_ERROR_CORRUPTION_DETECTED;
 | 
			
		||||
    switch( operation->id )
 | 
			
		||||
    {
 | 
			
		||||
#if defined(MBEDTLS_PSA_BUILTIN_MAC)
 | 
			
		||||
        case PSA_CRYPTO_MBED_TLS_DRIVER_ID:
 | 
			
		||||
            status = mbedtls_psa_mac_abort( &operation->ctx.driver.mbedtls_ctx );
 | 
			
		||||
            break;
 | 
			
		||||
#endif /* MBEDTLS_PSA_BUILTIN_MAC */
 | 
			
		||||
 | 
			
		||||
#if defined(PSA_CRYPTO_ACCELERATOR_DRIVER_PRESENT)
 | 
			
		||||
#if defined(PSA_CRYPTO_DRIVER_TEST)
 | 
			
		||||
        case PSA_CRYPTO_TRANSPARENT_TEST_DRIVER_ID:
 | 
			
		||||
            status = mbedtls_transparent_test_driver_mac_abort(
 | 
			
		||||
                        &operation->ctx.driver.transparent_test_driver_ctx );
 | 
			
		||||
            break;
 | 
			
		||||
        case PSA_CRYPTO_OPAQUE_TEST_DRIVER_ID:
 | 
			
		||||
            status = mbedtls_opaque_test_driver_mac_abort(
 | 
			
		||||
                        &operation->ctx.driver.opaque_test_driver_ctx );
 | 
			
		||||
            break;
 | 
			
		||||
#endif /* PSA_CRYPTO_DRIVER_TEST */
 | 
			
		||||
#endif /* PSA_CRYPTO_ACCELERATOR_DRIVER_PRESENT */
 | 
			
		||||
        default:
 | 
			
		||||
            status = PSA_ERROR_INVALID_ARGUMENT;
 | 
			
		||||
            break;
 | 
			
		||||
    }
 | 
			
		||||
 | 
			
		||||
    operation->id = 0;
 | 
			
		||||
    return( status );
 | 
			
		||||
}
 | 
			
		||||
/* End of automatically generated file. */
 | 
			
		||||
 | 
			
		||||
@ -183,6 +183,53 @@ psa_status_t psa_driver_wrapper_aead_decrypt(
 | 
			
		||||
    const uint8_t *ciphertext, size_t ciphertext_length,
 | 
			
		||||
    uint8_t *plaintext, size_t plaintext_size, size_t *plaintext_length );
 | 
			
		||||
 | 
			
		||||
/*
 | 
			
		||||
 * MAC functions
 | 
			
		||||
 */
 | 
			
		||||
psa_status_t psa_driver_wrapper_mac_compute(
 | 
			
		||||
    const psa_key_attributes_t *attributes,
 | 
			
		||||
    const uint8_t *key_buffer,
 | 
			
		||||
    size_t key_buffer_size,
 | 
			
		||||
    psa_algorithm_t alg,
 | 
			
		||||
    const uint8_t *input,
 | 
			
		||||
    size_t input_length,
 | 
			
		||||
    uint8_t *mac,
 | 
			
		||||
    size_t mac_size,
 | 
			
		||||
    size_t *mac_length );
 | 
			
		||||
 | 
			
		||||
psa_status_t psa_driver_wrapper_mac_sign_setup(
 | 
			
		||||
    psa_mac_operation_t *operation,
 | 
			
		||||
    const psa_key_attributes_t *attributes,
 | 
			
		||||
    const uint8_t *key_buffer,
 | 
			
		||||
    size_t key_buffer_size,
 | 
			
		||||
    psa_algorithm_t alg );
 | 
			
		||||
 | 
			
		||||
psa_status_t psa_driver_wrapper_mac_verify_setup(
 | 
			
		||||
    psa_mac_operation_t *operation,
 | 
			
		||||
    const psa_key_attributes_t *attributes,
 | 
			
		||||
    const uint8_t *key_buffer,
 | 
			
		||||
    size_t key_buffer_size,
 | 
			
		||||
    psa_algorithm_t alg );
 | 
			
		||||
 | 
			
		||||
psa_status_t psa_driver_wrapper_mac_update(
 | 
			
		||||
    psa_mac_operation_t *operation,
 | 
			
		||||
    const uint8_t *input,
 | 
			
		||||
    size_t input_length );
 | 
			
		||||
 | 
			
		||||
psa_status_t psa_driver_wrapper_mac_sign_finish(
 | 
			
		||||
    psa_mac_operation_t *operation,
 | 
			
		||||
    uint8_t *mac,
 | 
			
		||||
    size_t mac_size,
 | 
			
		||||
    size_t *mac_length );
 | 
			
		||||
 | 
			
		||||
psa_status_t psa_driver_wrapper_mac_verify_finish(
 | 
			
		||||
    psa_mac_operation_t *operation,
 | 
			
		||||
    const uint8_t *mac,
 | 
			
		||||
    size_t mac_length );
 | 
			
		||||
 | 
			
		||||
psa_status_t psa_driver_wrapper_mac_abort(
 | 
			
		||||
    psa_mac_operation_t *operation );
 | 
			
		||||
 | 
			
		||||
#endif /* PSA_CRYPTO_DRIVER_WRAPPERS_H */
 | 
			
		||||
 | 
			
		||||
/* End of automatically generated file. */
 | 
			
		||||
 | 
			
		||||
							
								
								
									
										434
									
								
								library/psa_crypto_mac.c
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										434
									
								
								library/psa_crypto_mac.c
									
									
									
									
									
										Normal file
									
								
							@ -0,0 +1,434 @@
 | 
			
		||||
/*
 | 
			
		||||
 *  PSA MAC layer on top of Mbed TLS software crypto
 | 
			
		||||
 */
 | 
			
		||||
/*
 | 
			
		||||
 *  Copyright The Mbed TLS Contributors
 | 
			
		||||
 *  SPDX-License-Identifier: Apache-2.0
 | 
			
		||||
 *
 | 
			
		||||
 *  Licensed under the Apache License, Version 2.0 (the "License"); you may
 | 
			
		||||
 *  not use this file except in compliance with the License.
 | 
			
		||||
 *  You may obtain a copy of the License at
 | 
			
		||||
 *
 | 
			
		||||
 *  http://www.apache.org/licenses/LICENSE-2.0
 | 
			
		||||
 *
 | 
			
		||||
 *  Unless required by applicable law or agreed to in writing, software
 | 
			
		||||
 *  distributed under the License is distributed on an "AS IS" BASIS, WITHOUT
 | 
			
		||||
 *  WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
 | 
			
		||||
 *  See the License for the specific language governing permissions and
 | 
			
		||||
 *  limitations under the License.
 | 
			
		||||
 */
 | 
			
		||||
 | 
			
		||||
#include "common.h"
 | 
			
		||||
 | 
			
		||||
#if defined(MBEDTLS_PSA_CRYPTO_C)
 | 
			
		||||
 | 
			
		||||
#include <psa/crypto.h>
 | 
			
		||||
#include "psa_crypto_core.h"
 | 
			
		||||
#include "psa_crypto_mac.h"
 | 
			
		||||
 | 
			
		||||
#include <mbedtls/error.h>
 | 
			
		||||
#include <string.h>
 | 
			
		||||
 | 
			
		||||
/* Use builtin defines specific to this compilation unit, since the test driver
 | 
			
		||||
 * relies on the software driver. */
 | 
			
		||||
#if( defined(MBEDTLS_PSA_BUILTIN_ALG_CMAC) || \
 | 
			
		||||
    ( defined(PSA_CRYPTO_DRIVER_TEST) && defined(MBEDTLS_PSA_ACCEL_ALG_CMAC) ) )
 | 
			
		||||
#define BUILTIN_ALG_CMAC        1
 | 
			
		||||
#endif
 | 
			
		||||
#if( defined(MBEDTLS_PSA_BUILTIN_ALG_HMAC) || \
 | 
			
		||||
    ( defined(PSA_CRYPTO_DRIVER_TEST) && defined(MBEDTLS_PSA_ACCEL_ALG_HMAC) ) )
 | 
			
		||||
#define BUILTIN_ALG_HMAC        1
 | 
			
		||||
#endif
 | 
			
		||||
 | 
			
		||||
/* Implement the PSA driver MAC interface on top of mbed TLS if either the
 | 
			
		||||
 * software driver or the test driver requires it. */
 | 
			
		||||
#if defined(MBEDTLS_PSA_BUILTIN_MAC) || defined(PSA_CRYPTO_DRIVER_TEST)
 | 
			
		||||
static psa_status_t mac_compute(
 | 
			
		||||
    const psa_key_attributes_t *attributes,
 | 
			
		||||
    const uint8_t *key_buffer,
 | 
			
		||||
    size_t key_buffer_size,
 | 
			
		||||
    psa_algorithm_t alg,
 | 
			
		||||
    const uint8_t *input,
 | 
			
		||||
    size_t input_length,
 | 
			
		||||
    uint8_t *mac,
 | 
			
		||||
    size_t mac_size,
 | 
			
		||||
    size_t *mac_length )
 | 
			
		||||
{
 | 
			
		||||
    /* To be fleshed out in a subsequent commit */
 | 
			
		||||
    (void) attributes;
 | 
			
		||||
    (void) key_buffer;
 | 
			
		||||
    (void) key_buffer_size;
 | 
			
		||||
    (void) alg;
 | 
			
		||||
    (void) input;
 | 
			
		||||
    (void) input_length;
 | 
			
		||||
    (void) mac;
 | 
			
		||||
    (void) mac_size;
 | 
			
		||||
    (void) mac_length;
 | 
			
		||||
    return( PSA_ERROR_NOT_SUPPORTED );
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
static psa_status_t mac_sign_setup(
 | 
			
		||||
    mbedtls_psa_mac_operation_t *operation,
 | 
			
		||||
    const psa_key_attributes_t *attributes,
 | 
			
		||||
    const uint8_t *key_buffer,
 | 
			
		||||
    size_t key_buffer_size,
 | 
			
		||||
    psa_algorithm_t alg )
 | 
			
		||||
{
 | 
			
		||||
    /* To be fleshed out in a subsequent commit */
 | 
			
		||||
    (void) operation;
 | 
			
		||||
    (void) attributes;
 | 
			
		||||
    (void) key_buffer;
 | 
			
		||||
    (void) key_buffer_size;
 | 
			
		||||
    (void) alg;
 | 
			
		||||
    return( PSA_ERROR_NOT_SUPPORTED );
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
static psa_status_t mac_verify_setup(
 | 
			
		||||
    mbedtls_psa_mac_operation_t *operation,
 | 
			
		||||
    const psa_key_attributes_t *attributes,
 | 
			
		||||
    const uint8_t *key_buffer,
 | 
			
		||||
    size_t key_buffer_size,
 | 
			
		||||
    psa_algorithm_t alg )
 | 
			
		||||
{
 | 
			
		||||
    /* To be fleshed out in a subsequent commit */
 | 
			
		||||
    (void) operation;
 | 
			
		||||
    (void) attributes;
 | 
			
		||||
    (void) key_buffer;
 | 
			
		||||
    (void) key_buffer_size;
 | 
			
		||||
    (void) alg;
 | 
			
		||||
    return( PSA_ERROR_NOT_SUPPORTED );
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
static psa_status_t mac_update(
 | 
			
		||||
    mbedtls_psa_mac_operation_t *operation,
 | 
			
		||||
    const uint8_t *input,
 | 
			
		||||
    size_t input_length )
 | 
			
		||||
{
 | 
			
		||||
    /* To be fleshed out in a subsequent commit */
 | 
			
		||||
    (void) operation;
 | 
			
		||||
    (void) input;
 | 
			
		||||
    (void) input_length;
 | 
			
		||||
    return( PSA_ERROR_NOT_SUPPORTED );
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
static psa_status_t mac_sign_finish(
 | 
			
		||||
    mbedtls_psa_mac_operation_t *operation,
 | 
			
		||||
    uint8_t *mac,
 | 
			
		||||
    size_t mac_size,
 | 
			
		||||
    size_t *mac_length )
 | 
			
		||||
{
 | 
			
		||||
    /* To be fleshed out in a subsequent commit */
 | 
			
		||||
    (void) operation;
 | 
			
		||||
    (void) mac;
 | 
			
		||||
    (void) mac_size;
 | 
			
		||||
    (void) mac_length;
 | 
			
		||||
    return( PSA_ERROR_NOT_SUPPORTED );
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
static psa_status_t mac_verify_finish(
 | 
			
		||||
    mbedtls_psa_mac_operation_t *operation,
 | 
			
		||||
    const uint8_t *mac,
 | 
			
		||||
    size_t mac_length )
 | 
			
		||||
{
 | 
			
		||||
    /* To be fleshed out in a subsequent commit */
 | 
			
		||||
    (void) operation;
 | 
			
		||||
    (void) mac;
 | 
			
		||||
    (void) mac_length;
 | 
			
		||||
    return( PSA_ERROR_NOT_SUPPORTED );
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
static psa_status_t mac_abort(
 | 
			
		||||
    mbedtls_psa_mac_operation_t *operation )
 | 
			
		||||
{
 | 
			
		||||
    /* To be fleshed out in a subsequent commit */
 | 
			
		||||
    (void) operation;
 | 
			
		||||
    return( PSA_ERROR_NOT_SUPPORTED );
 | 
			
		||||
}
 | 
			
		||||
#endif /* MBEDTLS_PSA_BUILTIN_MAC || PSA_CRYPTO_DRIVER_TEST */
 | 
			
		||||
 | 
			
		||||
#if defined(MBEDTLS_PSA_BUILTIN_MAC)
 | 
			
		||||
psa_status_t mbedtls_psa_mac_compute(
 | 
			
		||||
    const psa_key_attributes_t *attributes,
 | 
			
		||||
    const uint8_t *key_buffer,
 | 
			
		||||
    size_t key_buffer_size,
 | 
			
		||||
    psa_algorithm_t alg,
 | 
			
		||||
    const uint8_t *input,
 | 
			
		||||
    size_t input_length,
 | 
			
		||||
    uint8_t *mac,
 | 
			
		||||
    size_t mac_size,
 | 
			
		||||
    size_t *mac_length )
 | 
			
		||||
{
 | 
			
		||||
    return( mac_compute( attributes, key_buffer, key_buffer_size, alg,
 | 
			
		||||
                         input, input_length,
 | 
			
		||||
                         mac, mac_size, mac_length ) );
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
psa_status_t mbedtls_psa_mac_sign_setup(
 | 
			
		||||
    mbedtls_psa_mac_operation_t *operation,
 | 
			
		||||
    const psa_key_attributes_t *attributes,
 | 
			
		||||
    const uint8_t *key_buffer,
 | 
			
		||||
    size_t key_buffer_size,
 | 
			
		||||
    psa_algorithm_t alg )
 | 
			
		||||
{
 | 
			
		||||
    return( mac_sign_setup( operation, attributes,
 | 
			
		||||
                            key_buffer, key_buffer_size, alg ) );
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
psa_status_t mbedtls_psa_mac_verify_setup(
 | 
			
		||||
    mbedtls_psa_mac_operation_t *operation,
 | 
			
		||||
    const psa_key_attributes_t *attributes,
 | 
			
		||||
    const uint8_t *key_buffer,
 | 
			
		||||
    size_t key_buffer_size,
 | 
			
		||||
    psa_algorithm_t alg )
 | 
			
		||||
{
 | 
			
		||||
    return( mac_verify_setup( operation, attributes,
 | 
			
		||||
                              key_buffer, key_buffer_size, alg ) );
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
psa_status_t mbedtls_psa_mac_update(
 | 
			
		||||
    mbedtls_psa_mac_operation_t *operation,
 | 
			
		||||
    const uint8_t *input,
 | 
			
		||||
    size_t input_length )
 | 
			
		||||
{
 | 
			
		||||
    return( mac_update( operation, input, input_length ) );
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
psa_status_t mbedtls_psa_mac_sign_finish(
 | 
			
		||||
    mbedtls_psa_mac_operation_t *operation,
 | 
			
		||||
    uint8_t *mac,
 | 
			
		||||
    size_t mac_size,
 | 
			
		||||
    size_t *mac_length )
 | 
			
		||||
{
 | 
			
		||||
    return( mac_sign_finish( operation, mac, mac_size, mac_length ) );
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
psa_status_t mbedtls_psa_mac_verify_finish(
 | 
			
		||||
    mbedtls_psa_mac_operation_t *operation,
 | 
			
		||||
    const uint8_t *mac,
 | 
			
		||||
    size_t mac_length )
 | 
			
		||||
{
 | 
			
		||||
    return( mac_verify_finish( operation, mac, mac_length ) );
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
psa_status_t mbedtls_psa_mac_abort(
 | 
			
		||||
    mbedtls_psa_mac_operation_t *operation )
 | 
			
		||||
{
 | 
			
		||||
    return( mac_abort( operation ) );
 | 
			
		||||
}
 | 
			
		||||
#endif /* MBEDTLS_PSA_BUILTIN_MAC */
 | 
			
		||||
 | 
			
		||||
 /*
 | 
			
		||||
  * BEYOND THIS POINT, TEST DRIVER ENTRY POINTS ONLY.
 | 
			
		||||
  */
 | 
			
		||||
#if defined(PSA_CRYPTO_DRIVER_TEST)
 | 
			
		||||
 | 
			
		||||
static int is_mac_accelerated( psa_algorithm_t alg )
 | 
			
		||||
{
 | 
			
		||||
#if defined(MBEDTLS_PSA_ACCEL_ALG_HMAC)
 | 
			
		||||
    if( PSA_ALG_IS_HMAC( alg ) )
 | 
			
		||||
        return( 1 );
 | 
			
		||||
#endif
 | 
			
		||||
 | 
			
		||||
    switch( PSA_ALG_FULL_LENGTH_MAC( alg ) )
 | 
			
		||||
    {
 | 
			
		||||
#if defined(MBEDTLS_PSA_ACCEL_ALG_CMAC)
 | 
			
		||||
        case PSA_ALG_CMAC:
 | 
			
		||||
            return( 1 );
 | 
			
		||||
#endif
 | 
			
		||||
        default:
 | 
			
		||||
            return( 0 );
 | 
			
		||||
    }
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
psa_status_t mbedtls_transparent_test_driver_mac_compute(
 | 
			
		||||
    const psa_key_attributes_t *attributes,
 | 
			
		||||
    const uint8_t *key_buffer,
 | 
			
		||||
    size_t key_buffer_size,
 | 
			
		||||
    psa_algorithm_t alg,
 | 
			
		||||
    const uint8_t *input,
 | 
			
		||||
    size_t input_length,
 | 
			
		||||
    uint8_t *mac,
 | 
			
		||||
    size_t mac_size,
 | 
			
		||||
    size_t *mac_length )
 | 
			
		||||
{
 | 
			
		||||
    if( is_mac_accelerated( alg ) )
 | 
			
		||||
        return( mac_compute( attributes, key_buffer, key_buffer_size, alg,
 | 
			
		||||
                             input, input_length,
 | 
			
		||||
                             mac, mac_size, mac_length ) );
 | 
			
		||||
    else
 | 
			
		||||
        return( PSA_ERROR_NOT_SUPPORTED );
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
psa_status_t mbedtls_transparent_test_driver_mac_sign_setup(
 | 
			
		||||
    mbedtls_transparent_test_driver_mac_operation_t *operation,
 | 
			
		||||
    const psa_key_attributes_t *attributes,
 | 
			
		||||
    const uint8_t *key_buffer,
 | 
			
		||||
    size_t key_buffer_size,
 | 
			
		||||
    psa_algorithm_t alg )
 | 
			
		||||
{
 | 
			
		||||
    if( is_mac_accelerated( alg ) )
 | 
			
		||||
        return( mac_sign_setup( operation, attributes,
 | 
			
		||||
                                key_buffer, key_buffer_size, alg ) );
 | 
			
		||||
    else
 | 
			
		||||
        return( PSA_ERROR_NOT_SUPPORTED );
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
psa_status_t mbedtls_transparent_test_driver_mac_verify_setup(
 | 
			
		||||
    mbedtls_transparent_test_driver_mac_operation_t *operation,
 | 
			
		||||
    const psa_key_attributes_t *attributes,
 | 
			
		||||
    const uint8_t *key_buffer,
 | 
			
		||||
    size_t key_buffer_size,
 | 
			
		||||
    psa_algorithm_t alg )
 | 
			
		||||
{
 | 
			
		||||
    if( is_mac_accelerated( alg ) )
 | 
			
		||||
        return( mac_verify_setup( operation, attributes,
 | 
			
		||||
                                  key_buffer, key_buffer_size, alg ) );
 | 
			
		||||
    else
 | 
			
		||||
        return( PSA_ERROR_NOT_SUPPORTED );
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
psa_status_t mbedtls_transparent_test_driver_mac_update(
 | 
			
		||||
    mbedtls_transparent_test_driver_mac_operation_t *operation,
 | 
			
		||||
    const uint8_t *input,
 | 
			
		||||
    size_t input_length )
 | 
			
		||||
{
 | 
			
		||||
    if( is_mac_accelerated( operation->alg ) )
 | 
			
		||||
        return( mac_update( operation, input, input_length ) );
 | 
			
		||||
    else
 | 
			
		||||
        return( PSA_ERROR_BAD_STATE );
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
psa_status_t mbedtls_transparent_test_driver_mac_sign_finish(
 | 
			
		||||
    mbedtls_transparent_test_driver_mac_operation_t *operation,
 | 
			
		||||
    uint8_t *mac,
 | 
			
		||||
    size_t mac_size,
 | 
			
		||||
    size_t *mac_length )
 | 
			
		||||
{
 | 
			
		||||
    if( is_mac_accelerated( operation->alg ) )
 | 
			
		||||
        return( mac_sign_finish( operation, mac, mac_size, mac_length ) );
 | 
			
		||||
    else
 | 
			
		||||
        return( PSA_ERROR_BAD_STATE );
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
psa_status_t mbedtls_transparent_test_driver_mac_verify_finish(
 | 
			
		||||
    mbedtls_transparent_test_driver_mac_operation_t *operation,
 | 
			
		||||
    const uint8_t *mac,
 | 
			
		||||
    size_t mac_length )
 | 
			
		||||
{
 | 
			
		||||
    if( is_mac_accelerated( operation->alg ) )
 | 
			
		||||
        return( mac_verify_finish( operation, mac, mac_length ) );
 | 
			
		||||
    else
 | 
			
		||||
        return( PSA_ERROR_BAD_STATE );
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
psa_status_t mbedtls_transparent_test_driver_mac_abort(
 | 
			
		||||
    mbedtls_transparent_test_driver_mac_operation_t *operation )
 | 
			
		||||
{
 | 
			
		||||
    return( mac_abort( operation ) );
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
psa_status_t mbedtls_opaque_test_driver_mac_compute(
 | 
			
		||||
    const psa_key_attributes_t *attributes,
 | 
			
		||||
    const uint8_t *key_buffer,
 | 
			
		||||
    size_t key_buffer_size,
 | 
			
		||||
    psa_algorithm_t alg,
 | 
			
		||||
    const uint8_t *input,
 | 
			
		||||
    size_t input_length,
 | 
			
		||||
    uint8_t *mac,
 | 
			
		||||
    size_t mac_size,
 | 
			
		||||
    size_t *mac_length )
 | 
			
		||||
{
 | 
			
		||||
    /* Opaque driver testing is not implemented yet through this mechanism. */
 | 
			
		||||
    (void) attributes;
 | 
			
		||||
    (void) key_buffer;
 | 
			
		||||
    (void) key_buffer_size;
 | 
			
		||||
    (void) alg;
 | 
			
		||||
    (void) input;
 | 
			
		||||
    (void) input_length;
 | 
			
		||||
    (void) mac;
 | 
			
		||||
    (void) mac_size;
 | 
			
		||||
    (void) mac_length;
 | 
			
		||||
    return( PSA_ERROR_NOT_SUPPORTED );
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
psa_status_t mbedtls_opaque_test_driver_mac_sign_setup(
 | 
			
		||||
    mbedtls_opaque_test_driver_mac_operation_t *operation,
 | 
			
		||||
    const psa_key_attributes_t *attributes,
 | 
			
		||||
    const uint8_t *key_buffer,
 | 
			
		||||
    size_t key_buffer_size,
 | 
			
		||||
    psa_algorithm_t alg )
 | 
			
		||||
{
 | 
			
		||||
    /* Opaque driver testing is not implemented yet through this mechanism. */
 | 
			
		||||
    (void) operation;
 | 
			
		||||
    (void) attributes;
 | 
			
		||||
    (void) key_buffer;
 | 
			
		||||
    (void) key_buffer_size;
 | 
			
		||||
    (void) alg;
 | 
			
		||||
    return( PSA_ERROR_NOT_SUPPORTED );
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
psa_status_t mbedtls_opaque_test_driver_mac_verify_setup(
 | 
			
		||||
    mbedtls_opaque_test_driver_mac_operation_t *operation,
 | 
			
		||||
    const psa_key_attributes_t *attributes,
 | 
			
		||||
    const uint8_t *key_buffer,
 | 
			
		||||
    size_t key_buffer_size,
 | 
			
		||||
    psa_algorithm_t alg )
 | 
			
		||||
{
 | 
			
		||||
    /* Opaque driver testing is not implemented yet through this mechanism. */
 | 
			
		||||
    (void) operation;
 | 
			
		||||
    (void) attributes;
 | 
			
		||||
    (void) key_buffer;
 | 
			
		||||
    (void) key_buffer_size;
 | 
			
		||||
    (void) alg;
 | 
			
		||||
    return( PSA_ERROR_NOT_SUPPORTED );
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
psa_status_t mbedtls_opaque_test_driver_mac_update(
 | 
			
		||||
    mbedtls_opaque_test_driver_mac_operation_t *operation,
 | 
			
		||||
    const uint8_t *input,
 | 
			
		||||
    size_t input_length )
 | 
			
		||||
{
 | 
			
		||||
    /* Opaque driver testing is not implemented yet through this mechanism. */
 | 
			
		||||
    (void) operation;
 | 
			
		||||
    (void) input;
 | 
			
		||||
    (void) input_length;
 | 
			
		||||
    return( PSA_ERROR_NOT_SUPPORTED );
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
psa_status_t mbedtls_opaque_test_driver_mac_sign_finish(
 | 
			
		||||
    mbedtls_opaque_test_driver_mac_operation_t *operation,
 | 
			
		||||
    uint8_t *mac,
 | 
			
		||||
    size_t mac_size,
 | 
			
		||||
    size_t *mac_length )
 | 
			
		||||
{
 | 
			
		||||
    /* Opaque driver testing is not implemented yet through this mechanism. */
 | 
			
		||||
    (void) operation;
 | 
			
		||||
    (void) mac;
 | 
			
		||||
    (void) mac_size;
 | 
			
		||||
    (void) mac_length;
 | 
			
		||||
    return( PSA_ERROR_NOT_SUPPORTED );
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
psa_status_t mbedtls_opaque_test_driver_mac_verify_finish(
 | 
			
		||||
    mbedtls_opaque_test_driver_mac_operation_t *operation,
 | 
			
		||||
    const uint8_t *mac,
 | 
			
		||||
    size_t mac_length )
 | 
			
		||||
{
 | 
			
		||||
    /* Opaque driver testing is not implemented yet through this mechanism. */
 | 
			
		||||
    (void) operation;
 | 
			
		||||
    (void) mac;
 | 
			
		||||
    (void) mac_length;
 | 
			
		||||
    return( PSA_ERROR_NOT_SUPPORTED );
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
psa_status_t mbedtls_opaque_test_driver_mac_abort(
 | 
			
		||||
    mbedtls_opaque_test_driver_mac_operation_t *operation )
 | 
			
		||||
{
 | 
			
		||||
    /* Opaque driver testing is not implemented yet through this mechanism. */
 | 
			
		||||
    (void) operation;
 | 
			
		||||
    return( PSA_ERROR_NOT_SUPPORTED );
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
#endif /* PSA_CRYPTO_DRIVER_TEST */
 | 
			
		||||
 | 
			
		||||
#endif /* MBEDTLS_PSA_CRYPTO_C */
 | 
			
		||||
							
								
								
									
										375
									
								
								library/psa_crypto_mac.h
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										375
									
								
								library/psa_crypto_mac.h
									
									
									
									
									
										Normal file
									
								
							@ -0,0 +1,375 @@
 | 
			
		||||
/*
 | 
			
		||||
 *  PSA MAC layer on top of Mbed TLS software crypto
 | 
			
		||||
 */
 | 
			
		||||
/*
 | 
			
		||||
 *  Copyright The Mbed TLS Contributors
 | 
			
		||||
 *  SPDX-License-Identifier: Apache-2.0
 | 
			
		||||
 *
 | 
			
		||||
 *  Licensed under the Apache License, Version 2.0 (the "License"); you may
 | 
			
		||||
 *  not use this file except in compliance with the License.
 | 
			
		||||
 *  You may obtain a copy of the License at
 | 
			
		||||
 *
 | 
			
		||||
 *  http://www.apache.org/licenses/LICENSE-2.0
 | 
			
		||||
 *
 | 
			
		||||
 *  Unless required by applicable law or agreed to in writing, software
 | 
			
		||||
 *  distributed under the License is distributed on an "AS IS" BASIS, WITHOUT
 | 
			
		||||
 *  WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
 | 
			
		||||
 *  See the License for the specific language governing permissions and
 | 
			
		||||
 *  limitations under the License.
 | 
			
		||||
 */
 | 
			
		||||
 | 
			
		||||
#ifndef PSA_CRYPTO_MAC_H
 | 
			
		||||
#define PSA_CRYPTO_MAC_H
 | 
			
		||||
 | 
			
		||||
#include <psa/crypto.h>
 | 
			
		||||
 | 
			
		||||
/** Calculate the MAC (message authentication code) of a message using Mbed TLS.
 | 
			
		||||
 *
 | 
			
		||||
 * \note The signature of this function is that of a PSA driver mac_compute
 | 
			
		||||
 *       entry point. This function behaves as a mac_compute entry point as
 | 
			
		||||
 *       defined in the PSA driver interface specification for transparent
 | 
			
		||||
 *       drivers.
 | 
			
		||||
 *
 | 
			
		||||
 * \param[in] attributes        The attributes of the key to use for the
 | 
			
		||||
 *                              operation.
 | 
			
		||||
 * \param[in] key_buffer        The buffer containing the key to use for
 | 
			
		||||
 *                              computing the MAC. This buffer contains the key
 | 
			
		||||
 *                              in export representation as defined by
 | 
			
		||||
 *                              psa_export_key() (i.e. the raw key bytes).
 | 
			
		||||
 * \param key_buffer_size       Size of the \p key_buffer buffer in bytes.
 | 
			
		||||
 * \param alg                   The MAC algorithm to use (\c PSA_ALG_XXX value
 | 
			
		||||
 *                              such that #PSA_ALG_IS_MAC(\p alg) is true).
 | 
			
		||||
 * \param[in] input             Buffer containing the input message.
 | 
			
		||||
 * \param input_length          Size of the \p input buffer in bytes.
 | 
			
		||||
 * \param[out] mac              Buffer where the MAC value is to be written.
 | 
			
		||||
 * \param mac_size              Size of the \p mac buffer in bytes.
 | 
			
		||||
 * \param[out] mac_length       On success, the number of bytes
 | 
			
		||||
 *                              that make up the MAC value.
 | 
			
		||||
 *
 | 
			
		||||
 * \retval #PSA_SUCCESS
 | 
			
		||||
 *         Success.
 | 
			
		||||
 * \retval #PSA_ERROR_INVALID_ARGUMENT
 | 
			
		||||
 *         The key is not compatible with \p alg.
 | 
			
		||||
 * \retval #PSA_ERROR_NOT_SUPPORTED
 | 
			
		||||
 *         \p alg is not supported.
 | 
			
		||||
 * \retval #PSA_ERROR_BUFFER_TOO_SMALL
 | 
			
		||||
 *         \p mac_size is too small
 | 
			
		||||
 * \retval #PSA_ERROR_INSUFFICIENT_MEMORY
 | 
			
		||||
 * \retval #PSA_ERROR_CORRUPTION_DETECTED
 | 
			
		||||
 */
 | 
			
		||||
psa_status_t mbedtls_psa_mac_compute(
 | 
			
		||||
    const psa_key_attributes_t *attributes,
 | 
			
		||||
    const uint8_t *key_buffer,
 | 
			
		||||
    size_t key_buffer_size,
 | 
			
		||||
    psa_algorithm_t alg,
 | 
			
		||||
    const uint8_t *input,
 | 
			
		||||
    size_t input_length,
 | 
			
		||||
    uint8_t *mac,
 | 
			
		||||
    size_t mac_size,
 | 
			
		||||
    size_t *mac_length);
 | 
			
		||||
 | 
			
		||||
/** Set up a multipart MAC calculation operation using Mbed TLS.
 | 
			
		||||
 *
 | 
			
		||||
 * \note The signature of this function is that of a PSA driver mac_sign_setup
 | 
			
		||||
 *       entry point. This function behaves as a mac_sign_setup entry point as
 | 
			
		||||
 *       defined in the PSA driver interface specification for transparent
 | 
			
		||||
 *       drivers.
 | 
			
		||||
 *
 | 
			
		||||
 * \param[in,out] operation     The operation object to set up. It must have
 | 
			
		||||
 *                              been initialized and not yet in use.
 | 
			
		||||
 * \param[in] attributes        The attributes of the key to use for the
 | 
			
		||||
 *                              operation.
 | 
			
		||||
 * \param[in] key_buffer        The buffer containing the key to use for
 | 
			
		||||
 *                              computing the MAC. This buffer contains the key
 | 
			
		||||
 *                              in export representation as defined by
 | 
			
		||||
 *                              psa_export_key() (i.e. the raw key bytes).
 | 
			
		||||
 * \param key_buffer_size       Size of the \p key_buffer buffer in bytes.
 | 
			
		||||
 * \param alg                   The MAC algorithm to use (\c PSA_ALG_XXX value
 | 
			
		||||
 *                              such that #PSA_ALG_IS_MAC(\p alg) is true).
 | 
			
		||||
 *
 | 
			
		||||
 * \retval #PSA_SUCCESS
 | 
			
		||||
 *         Success.
 | 
			
		||||
 * \retval #PSA_ERROR_INVALID_ARGUMENT
 | 
			
		||||
 *         The key is not compatible with \p alg.
 | 
			
		||||
 * \retval #PSA_ERROR_NOT_SUPPORTED
 | 
			
		||||
 *         \p alg is not supported.
 | 
			
		||||
 * \retval #PSA_ERROR_INSUFFICIENT_MEMORY
 | 
			
		||||
 * \retval #PSA_ERROR_CORRUPTION_DETECTED
 | 
			
		||||
 * \retval #PSA_ERROR_BAD_STATE
 | 
			
		||||
 *         The operation state is not valid (it must be inactive).
 | 
			
		||||
 */
 | 
			
		||||
psa_status_t mbedtls_psa_mac_sign_setup(
 | 
			
		||||
    mbedtls_psa_mac_operation_t *operation,
 | 
			
		||||
    const psa_key_attributes_t *attributes,
 | 
			
		||||
    const uint8_t *key_buffer,
 | 
			
		||||
    size_t key_buffer_size,
 | 
			
		||||
    psa_algorithm_t alg);
 | 
			
		||||
 | 
			
		||||
/** Set up a multipart MAC verification operation using Mbed TLS.
 | 
			
		||||
 *
 | 
			
		||||
 * \note The signature of this function is that of a PSA driver mac_verify_setup
 | 
			
		||||
 *       entry point. This function behaves as a mac_verify_setup entry point as
 | 
			
		||||
 *       defined in the PSA driver interface specification for transparent
 | 
			
		||||
 *       drivers.
 | 
			
		||||
 *
 | 
			
		||||
 * \param[in,out] operation     The operation object to set up. It must have
 | 
			
		||||
 *                              been initialized and not yet in use.
 | 
			
		||||
 * \param[in] attributes        The attributes of the key to use for the
 | 
			
		||||
 *                              operation.
 | 
			
		||||
 * \param[in] key_buffer        The buffer containing the key to use for
 | 
			
		||||
 *                              computing the MAC. This buffer contains the key
 | 
			
		||||
 *                              in export representation as defined by
 | 
			
		||||
 *                              psa_export_key() (i.e. the raw key bytes).
 | 
			
		||||
 * \param key_buffer_size       Size of the \p key_buffer buffer in bytes.
 | 
			
		||||
 * \param alg                   The MAC algorithm to use (\c PSA_ALG_XXX value
 | 
			
		||||
 *                              such that #PSA_ALG_IS_MAC(\p alg) is true).
 | 
			
		||||
 *
 | 
			
		||||
 * \retval #PSA_SUCCESS
 | 
			
		||||
 *         Success.
 | 
			
		||||
 * \retval #PSA_ERROR_INVALID_ARGUMENT
 | 
			
		||||
 *         The key is not compatible with \p alg.
 | 
			
		||||
 * \retval #PSA_ERROR_NOT_SUPPORTED
 | 
			
		||||
 *         \p alg is not supported.
 | 
			
		||||
 * \retval #PSA_ERROR_INSUFFICIENT_MEMORY
 | 
			
		||||
 * \retval #PSA_ERROR_CORRUPTION_DETECTED
 | 
			
		||||
 * \retval #PSA_ERROR_BAD_STATE
 | 
			
		||||
 *         The operation state is not valid (it must be inactive).
 | 
			
		||||
 */
 | 
			
		||||
psa_status_t mbedtls_psa_mac_verify_setup(
 | 
			
		||||
    mbedtls_psa_mac_operation_t *operation,
 | 
			
		||||
    const psa_key_attributes_t *attributes,
 | 
			
		||||
    const uint8_t *key_buffer,
 | 
			
		||||
    size_t key_buffer_size,
 | 
			
		||||
    psa_algorithm_t alg);
 | 
			
		||||
 | 
			
		||||
/** Add a message fragment to a multipart MAC operation using Mbed TLS.
 | 
			
		||||
 *
 | 
			
		||||
 * \note The signature of this function is that of a PSA driver mac_update
 | 
			
		||||
 *       entry point. This function behaves as a mac_update entry point as
 | 
			
		||||
 *       defined in the PSA driver interface specification for transparent
 | 
			
		||||
 *       drivers.
 | 
			
		||||
 *
 | 
			
		||||
 * The core must call mbedtls_psa_mac_sign_setup() or
 | 
			
		||||
 * mbedtls_psa_mac_verify_setup() before calling this function.
 | 
			
		||||
 *
 | 
			
		||||
 * If this function returns an error status, the operation enters an error
 | 
			
		||||
 * state and must be aborted by calling psa_mac_abort().
 | 
			
		||||
 *
 | 
			
		||||
 * \param[in,out] operation Active MAC operation.
 | 
			
		||||
 * \param[in] input         Buffer containing the message fragment to add to
 | 
			
		||||
 *                          the MAC calculation.
 | 
			
		||||
 * \param input_length      Size of the \p input buffer in bytes.
 | 
			
		||||
 *
 | 
			
		||||
 * \retval #PSA_SUCCESS
 | 
			
		||||
 *         Success.
 | 
			
		||||
 * \retval #PSA_ERROR_BAD_STATE
 | 
			
		||||
 *         The operation state is not valid (it must be active).
 | 
			
		||||
 * \retval #PSA_ERROR_INSUFFICIENT_MEMORY
 | 
			
		||||
 * \retval #PSA_ERROR_CORRUPTION_DETECTED
 | 
			
		||||
 */
 | 
			
		||||
psa_status_t mbedtls_psa_mac_update(
 | 
			
		||||
    mbedtls_psa_mac_operation_t *operation,
 | 
			
		||||
    const uint8_t *input,
 | 
			
		||||
    size_t input_length );
 | 
			
		||||
 | 
			
		||||
/** Finish the calculation of the MAC of a message using Mbed TLS.
 | 
			
		||||
 *
 | 
			
		||||
 * \note The signature of this function is that of a PSA driver mac_sign_finish
 | 
			
		||||
 *       entry point. This function behaves as a mac_sign_finish entry point as
 | 
			
		||||
 *       defined in the PSA driver interface specification for transparent
 | 
			
		||||
 *       drivers.
 | 
			
		||||
 *
 | 
			
		||||
 * The core must call mbedtls_psa_mac_sign_setup() before calling this function.
 | 
			
		||||
 * This function calculates the MAC of the message formed by concatenating
 | 
			
		||||
 * the inputs passed to preceding calls to mbedtls_psa_mac_update().
 | 
			
		||||
 *
 | 
			
		||||
 * When this function returns successfully, the operation becomes inactive.
 | 
			
		||||
 * If this function returns an error status, the operation enters an error
 | 
			
		||||
 * state and must be aborted by calling mbedtls_psa_mac_abort().
 | 
			
		||||
 *
 | 
			
		||||
 * \param[in,out] operation Active MAC operation.
 | 
			
		||||
 * \param[out] mac          Buffer where the MAC value is to be written.
 | 
			
		||||
 * \param mac_size          Size of the \p mac buffer in bytes.
 | 
			
		||||
 * \param[out] mac_length   On success, the number of bytes
 | 
			
		||||
 *                          that make up the MAC value. This is always
 | 
			
		||||
 *                          #PSA_MAC_LENGTH(\c key_type, \c key_bits, \c alg)
 | 
			
		||||
 *                          where \c key_type and \c key_bits are the type and
 | 
			
		||||
 *                          bit-size respectively of the key and \c alg is the
 | 
			
		||||
 *                          MAC algorithm that is calculated.
 | 
			
		||||
 *
 | 
			
		||||
 * \retval #PSA_SUCCESS
 | 
			
		||||
 *         Success.
 | 
			
		||||
 * \retval #PSA_ERROR_BAD_STATE
 | 
			
		||||
 *         The operation state is not valid (it must be an active mac sign
 | 
			
		||||
 *         operation).
 | 
			
		||||
 * \retval #PSA_ERROR_BUFFER_TOO_SMALL
 | 
			
		||||
 *         The size of the \p mac buffer is too small. A sufficient buffer size
 | 
			
		||||
 *         can be determined by calling PSA_MAC_LENGTH().
 | 
			
		||||
 * \retval #PSA_ERROR_INSUFFICIENT_MEMORY
 | 
			
		||||
 * \retval #PSA_ERROR_CORRUPTION_DETECTED
 | 
			
		||||
 */
 | 
			
		||||
psa_status_t mbedtls_psa_mac_sign_finish(
 | 
			
		||||
    mbedtls_psa_mac_operation_t *operation,
 | 
			
		||||
    uint8_t *mac,
 | 
			
		||||
    size_t mac_size,
 | 
			
		||||
    size_t *mac_length );
 | 
			
		||||
 | 
			
		||||
/** Finish the calculation of the MAC of a message and compare it with
 | 
			
		||||
 * an expected value using Mbed TLS.
 | 
			
		||||
 *
 | 
			
		||||
 * \note The signature of this function is that of a PSA driver
 | 
			
		||||
 *       mac_verify_finish entry point. This function behaves as a
 | 
			
		||||
 *       mac_verify_finish entry point as defined in the PSA driver interface
 | 
			
		||||
 *       specification for transparent drivers.
 | 
			
		||||
 *
 | 
			
		||||
 * The core must call mbedtls_psa_mac_verify_setup() before calling this
 | 
			
		||||
 * function. This function calculates the MAC of the message formed by
 | 
			
		||||
 * concatenating the inputs passed to preceding calls to
 | 
			
		||||
 * mbedtls_psa_mac_update(). It then compares the calculated MAC with the
 | 
			
		||||
 * expected MAC passed as a parameter to this function.
 | 
			
		||||
 *
 | 
			
		||||
 * When this function returns successfully, the operation becomes inactive.
 | 
			
		||||
 * If this function returns an error status, the operation enters an error
 | 
			
		||||
 * state and must be aborted by calling mbedtls_psa_mac_abort().
 | 
			
		||||
 *
 | 
			
		||||
 * \param[in,out] operation Active MAC operation.
 | 
			
		||||
 * \param[in] mac           Buffer containing the expected MAC value.
 | 
			
		||||
 * \param mac_length        Size of the \p mac buffer in bytes.
 | 
			
		||||
 *
 | 
			
		||||
 * \retval #PSA_SUCCESS
 | 
			
		||||
 *         The expected MAC is identical to the actual MAC of the message.
 | 
			
		||||
 * \retval #PSA_ERROR_INVALID_SIGNATURE
 | 
			
		||||
 *         The MAC of the message was calculated successfully, but it
 | 
			
		||||
 *         differs from the expected MAC.
 | 
			
		||||
 * \retval #PSA_ERROR_BAD_STATE
 | 
			
		||||
 *         The operation state is not valid (it must be an active mac verify
 | 
			
		||||
 *         operation).
 | 
			
		||||
 * \retval #PSA_ERROR_INSUFFICIENT_MEMORY
 | 
			
		||||
 * \retval #PSA_ERROR_CORRUPTION_DETECTED
 | 
			
		||||
 */
 | 
			
		||||
psa_status_t mbedtls_psa_mac_verify_finish(
 | 
			
		||||
    mbedtls_psa_mac_operation_t *operation,
 | 
			
		||||
    const uint8_t *mac,
 | 
			
		||||
    size_t mac_length );
 | 
			
		||||
 | 
			
		||||
/** Abort a MAC operation using Mbed TLS.
 | 
			
		||||
 *
 | 
			
		||||
 * Aborting an operation frees all associated resources except for the
 | 
			
		||||
 * \p operation structure itself. Once aborted, the operation object
 | 
			
		||||
 * can be reused for another operation by calling
 | 
			
		||||
 * mbedtls_psa_mac_sign_setup() or mbedtls_psa_mac_verify_setup() again.
 | 
			
		||||
 *
 | 
			
		||||
 * The core may call this function any time after the operation object has
 | 
			
		||||
 * been initialized by one of the methods described in
 | 
			
		||||
 * #mbedtls_psa_mac_operation_t.
 | 
			
		||||
 *
 | 
			
		||||
 * In particular, calling mbedtls_psa_mac_abort() after the operation has been
 | 
			
		||||
 * terminated by a call to mbedtls_psa_mac_abort(),
 | 
			
		||||
 * mbedtls_psa_mac_sign_finish() or mbedtls_psa_mac_verify_finish() is safe and
 | 
			
		||||
 * has no effect.
 | 
			
		||||
 *
 | 
			
		||||
 * \param[in,out] operation Initialized MAC operation.
 | 
			
		||||
 *
 | 
			
		||||
 * \retval #PSA_SUCCESS
 | 
			
		||||
 * \retval #PSA_ERROR_CORRUPTION_DETECTED
 | 
			
		||||
 */
 | 
			
		||||
psa_status_t mbedtls_psa_mac_abort(
 | 
			
		||||
    mbedtls_psa_mac_operation_t *operation );
 | 
			
		||||
 | 
			
		||||
/*
 | 
			
		||||
 * BEYOND THIS POINT, TEST DRIVER ENTRY POINTS ONLY.
 | 
			
		||||
 */
 | 
			
		||||
 | 
			
		||||
#if defined(PSA_CRYPTO_DRIVER_TEST)
 | 
			
		||||
 | 
			
		||||
psa_status_t mbedtls_transparent_test_driver_mac_compute(
 | 
			
		||||
    const psa_key_attributes_t *attributes,
 | 
			
		||||
    const uint8_t *key_buffer,
 | 
			
		||||
    size_t key_buffer_size,
 | 
			
		||||
    psa_algorithm_t alg,
 | 
			
		||||
    const uint8_t *input,
 | 
			
		||||
    size_t input_length,
 | 
			
		||||
    uint8_t *mac,
 | 
			
		||||
    size_t mac_size,
 | 
			
		||||
    size_t *mac_length );
 | 
			
		||||
 | 
			
		||||
psa_status_t mbedtls_transparent_test_driver_mac_sign_setup(
 | 
			
		||||
    mbedtls_transparent_test_driver_mac_operation_t *operation,
 | 
			
		||||
    const psa_key_attributes_t *attributes,
 | 
			
		||||
    const uint8_t *key_buffer,
 | 
			
		||||
    size_t key_buffer_size,
 | 
			
		||||
    psa_algorithm_t alg );
 | 
			
		||||
 | 
			
		||||
psa_status_t mbedtls_transparent_test_driver_mac_verify_setup(
 | 
			
		||||
    mbedtls_transparent_test_driver_mac_operation_t *operation,
 | 
			
		||||
    const psa_key_attributes_t *attributes,
 | 
			
		||||
    const uint8_t *key_buffer,
 | 
			
		||||
    size_t key_buffer_size,
 | 
			
		||||
    psa_algorithm_t alg );
 | 
			
		||||
 | 
			
		||||
psa_status_t mbedtls_transparent_test_driver_mac_update(
 | 
			
		||||
    mbedtls_transparent_test_driver_mac_operation_t *operation,
 | 
			
		||||
    const uint8_t *input,
 | 
			
		||||
    size_t input_length );
 | 
			
		||||
 | 
			
		||||
psa_status_t mbedtls_transparent_test_driver_mac_sign_finish(
 | 
			
		||||
    mbedtls_transparent_test_driver_mac_operation_t *operation,
 | 
			
		||||
    uint8_t *mac,
 | 
			
		||||
    size_t mac_size,
 | 
			
		||||
    size_t *mac_length );
 | 
			
		||||
 | 
			
		||||
psa_status_t mbedtls_transparent_test_driver_mac_verify_finish(
 | 
			
		||||
    mbedtls_transparent_test_driver_mac_operation_t *operation,
 | 
			
		||||
    const uint8_t *mac,
 | 
			
		||||
    size_t mac_length );
 | 
			
		||||
 | 
			
		||||
psa_status_t mbedtls_transparent_test_driver_mac_abort(
 | 
			
		||||
    mbedtls_transparent_test_driver_mac_operation_t *operation );
 | 
			
		||||
 | 
			
		||||
psa_status_t mbedtls_opaque_test_driver_mac_compute(
 | 
			
		||||
    const psa_key_attributes_t *attributes,
 | 
			
		||||
    const uint8_t *key_buffer,
 | 
			
		||||
    size_t key_buffer_size,
 | 
			
		||||
    psa_algorithm_t alg,
 | 
			
		||||
    const uint8_t *input,
 | 
			
		||||
    size_t input_length,
 | 
			
		||||
    uint8_t *mac,
 | 
			
		||||
    size_t mac_size,
 | 
			
		||||
    size_t *mac_length );
 | 
			
		||||
 | 
			
		||||
psa_status_t mbedtls_opaque_test_driver_mac_sign_setup(
 | 
			
		||||
    mbedtls_opaque_test_driver_mac_operation_t *operation,
 | 
			
		||||
    const psa_key_attributes_t *attributes,
 | 
			
		||||
    const uint8_t *key_buffer,
 | 
			
		||||
    size_t key_buffer_size,
 | 
			
		||||
    psa_algorithm_t alg );
 | 
			
		||||
 | 
			
		||||
psa_status_t mbedtls_opaque_test_driver_mac_verify_setup(
 | 
			
		||||
    mbedtls_opaque_test_driver_mac_operation_t *operation,
 | 
			
		||||
    const psa_key_attributes_t *attributes,
 | 
			
		||||
    const uint8_t *key_buffer,
 | 
			
		||||
    size_t key_buffer_size,
 | 
			
		||||
    psa_algorithm_t alg );
 | 
			
		||||
 | 
			
		||||
psa_status_t mbedtls_opaque_test_driver_mac_update(
 | 
			
		||||
    mbedtls_opaque_test_driver_mac_operation_t *operation,
 | 
			
		||||
    const uint8_t *input,
 | 
			
		||||
    size_t input_length );
 | 
			
		||||
 | 
			
		||||
psa_status_t mbedtls_opaque_test_driver_mac_sign_finish(
 | 
			
		||||
    mbedtls_opaque_test_driver_mac_operation_t *operation,
 | 
			
		||||
    uint8_t *mac,
 | 
			
		||||
    size_t mac_size,
 | 
			
		||||
    size_t *mac_length );
 | 
			
		||||
 | 
			
		||||
psa_status_t mbedtls_opaque_test_driver_mac_verify_finish(
 | 
			
		||||
    mbedtls_opaque_test_driver_mac_operation_t *operation,
 | 
			
		||||
    const uint8_t *mac,
 | 
			
		||||
    size_t mac_length );
 | 
			
		||||
 | 
			
		||||
psa_status_t mbedtls_opaque_test_driver_mac_abort(
 | 
			
		||||
    mbedtls_opaque_test_driver_mac_operation_t *operation );
 | 
			
		||||
 | 
			
		||||
#endif /* PSA_CRYPTO_DRIVER_TEST */
 | 
			
		||||
 | 
			
		||||
#endif /* PSA_CRYPTO_MAC_H */
 | 
			
		||||
@ -262,6 +262,7 @@
 | 
			
		||||
    <ClInclude Include="..\..\library\psa_crypto_hash.h" />
 | 
			
		||||
    <ClInclude Include="..\..\library\psa_crypto_invasive.h" />
 | 
			
		||||
    <ClInclude Include="..\..\library\psa_crypto_its.h" />
 | 
			
		||||
    <ClInclude Include="..\..\library\psa_crypto_mac.h" />
 | 
			
		||||
    <ClInclude Include="..\..\library\psa_crypto_random_impl.h" />
 | 
			
		||||
    <ClInclude Include="..\..\library\psa_crypto_rsa.h" />
 | 
			
		||||
    <ClInclude Include="..\..\library\psa_crypto_se.h" />
 | 
			
		||||
@ -337,6 +338,7 @@
 | 
			
		||||
    <ClCompile Include="..\..\library\psa_crypto_driver_wrappers.c" />
 | 
			
		||||
    <ClCompile Include="..\..\library\psa_crypto_ecp.c" />
 | 
			
		||||
    <ClCompile Include="..\..\library\psa_crypto_hash.c" />
 | 
			
		||||
    <ClCompile Include="..\..\library\psa_crypto_mac.c" />
 | 
			
		||||
    <ClCompile Include="..\..\library\psa_crypto_rsa.c" />
 | 
			
		||||
    <ClCompile Include="..\..\library\psa_crypto_se.c" />
 | 
			
		||||
    <ClCompile Include="..\..\library\psa_crypto_slot_management.c" />
 | 
			
		||||
 | 
			
		||||
		Loading…
	
	
			
			x
			
			
		
	
		Reference in New Issue
	
	Block a user