key_management.h (4825B)
1 /* 2 * Test driver for generating and verifying keys. 3 */ 4 /* Copyright The Mbed TLS Contributors 5 * SPDX-License-Identifier: Apache-2.0 OR GPL-2.0-or-later 6 */ 7 8 #ifndef PSA_CRYPTO_TEST_DRIVERS_KEY_MANAGEMENT_H 9 #define PSA_CRYPTO_TEST_DRIVERS_KEY_MANAGEMENT_H 10 11 #include "mbedtls/build_info.h" 12 13 #if defined(PSA_CRYPTO_DRIVER_TEST) 14 #include "test_driver_common.h" 15 16 #include <psa/crypto_driver_common.h> 17 18 #define PSA_CRYPTO_TEST_DRIVER_BUILTIN_AES_KEY_SLOT 0 19 #define PSA_CRYPTO_TEST_DRIVER_BUILTIN_ECDSA_KEY_SLOT 1 20 21 typedef struct { 22 /* If non-null, on success, copy this to the output. */ 23 void *forced_output; 24 size_t forced_output_length; 25 /* If not PSA_SUCCESS, return this error code instead of processing the 26 * function call. */ 27 psa_status_t forced_status; 28 /* Count the amount of times one of the key management driver functions 29 * is called. */ 30 unsigned long hits; 31 /* Subset of hits which only counts public key export operations */ 32 unsigned long hits_export_public_key; 33 /* Subset of hits which only counts key generation operations */ 34 unsigned long hits_generate_key; 35 /* Location of the last key management driver called to import a key. */ 36 psa_key_location_t location; 37 } mbedtls_test_driver_key_management_hooks_t; 38 39 /* The location is initialized to the invalid value 0x800000. Invalid in the 40 * sense that no PSA specification will assign a meaning to this location 41 * (stated first in version 1.0.1 of the specification) and that it is not 42 * used as a location of an opaque test drivers. */ 43 #define MBEDTLS_TEST_DRIVER_KEY_MANAGEMENT_INIT { NULL, 0, PSA_SUCCESS, 0, 0, 0, 0x800000 } 44 static inline mbedtls_test_driver_key_management_hooks_t 45 mbedtls_test_driver_key_management_hooks_init(void) 46 { 47 const mbedtls_test_driver_key_management_hooks_t 48 v = MBEDTLS_TEST_DRIVER_KEY_MANAGEMENT_INIT; 49 return v; 50 } 51 52 /* 53 * In order to convert the plain text keys to Opaque, the size of the key is 54 * padded up by PSA_CRYPTO_TEST_DRIVER_OPAQUE_PAD_PREFIX_SIZE in addition to 55 * xor mangling the key. The pad prefix needs to be accounted for while 56 * sizing for the key. 57 */ 58 #define PSA_CRYPTO_TEST_DRIVER_OPAQUE_PAD_PREFIX 0xBEEFED00U 59 #define PSA_CRYPTO_TEST_DRIVER_OPAQUE_PAD_PREFIX_SIZE sizeof( \ 60 PSA_CRYPTO_TEST_DRIVER_OPAQUE_PAD_PREFIX) 61 62 size_t mbedtls_test_opaque_size_function( 63 const psa_key_type_t key_type, 64 const size_t key_bits); 65 66 extern mbedtls_test_driver_key_management_hooks_t 67 mbedtls_test_driver_key_management_hooks; 68 69 psa_status_t mbedtls_test_transparent_init(void); 70 void mbedtls_test_transparent_free(void); 71 psa_status_t mbedtls_test_opaque_init(void); 72 void mbedtls_test_opaque_free(void); 73 74 psa_status_t mbedtls_test_opaque_unwrap_key( 75 const uint8_t *wrapped_key, size_t wrapped_key_length, uint8_t *key_buffer, 76 size_t key_buffer_size, size_t *key_buffer_length); 77 78 psa_status_t mbedtls_test_transparent_generate_key( 79 const psa_key_attributes_t *attributes, 80 uint8_t *key, size_t key_size, size_t *key_length); 81 82 psa_status_t mbedtls_test_opaque_generate_key( 83 const psa_key_attributes_t *attributes, 84 uint8_t *key, size_t key_size, size_t *key_length); 85 86 psa_status_t mbedtls_test_opaque_export_key( 87 const psa_key_attributes_t *attributes, 88 const uint8_t *key, size_t key_length, 89 uint8_t *data, size_t data_size, size_t *data_length); 90 91 psa_status_t mbedtls_test_transparent_export_public_key( 92 const psa_key_attributes_t *attributes, 93 const uint8_t *key, size_t key_length, 94 uint8_t *data, size_t data_size, size_t *data_length); 95 96 psa_status_t mbedtls_test_opaque_export_public_key( 97 const psa_key_attributes_t *attributes, 98 const uint8_t *key, size_t key_length, 99 uint8_t *data, size_t data_size, size_t *data_length); 100 101 psa_status_t mbedtls_test_transparent_import_key( 102 const psa_key_attributes_t *attributes, 103 const uint8_t *data, 104 size_t data_length, 105 uint8_t *key_buffer, 106 size_t key_buffer_size, 107 size_t *key_buffer_length, 108 size_t *bits); 109 110 psa_status_t mbedtls_test_opaque_import_key( 111 const psa_key_attributes_t *attributes, 112 const uint8_t *data, 113 size_t data_length, 114 uint8_t *key_buffer, 115 size_t key_buffer_size, 116 size_t *key_buffer_length, 117 size_t *bits); 118 119 psa_status_t mbedtls_test_opaque_get_builtin_key( 120 psa_drv_slot_number_t slot_number, 121 psa_key_attributes_t *attributes, 122 uint8_t *key_buffer, size_t key_buffer_size, size_t *key_buffer_length); 123 124 psa_status_t mbedtls_test_opaque_copy_key( 125 psa_key_attributes_t *attributes, 126 const uint8_t *source_key, 127 size_t source_key_length, 128 uint8_t *target_key_buffer, 129 size_t target_key_buffer_size, 130 size_t *target_key_buffer_length); 131 132 #endif /* PSA_CRYPTO_DRIVER_TEST */ 133 #endif /* PSA_CRYPTO_TEST_DRIVERS_KEY_MANAGEMENT_H */