1/** \file platform_builtin_keys.c 2 * 3 * \brief Test driver implementation of the builtin key support 4 */ 5 6/* 7 * Copyright The Mbed TLS Contributors 8 * SPDX-License-Identifier: Apache-2.0 9 * 10 * Licensed under the Apache License, Version 2.0 (the "License"); you may 11 * not use this file except in compliance with the License. 12 * You may obtain a copy of the License at 13 * 14 * http://www.apache.org/licenses/LICENSE-2.0 15 * 16 * Unless required by applicable law or agreed to in writing, software 17 * distributed under the License is distributed on an "AS IS" BASIS, WITHOUT 18 * WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. 19 * See the License for the specific language governing permissions and 20 * limitations under the License. 21 */ 22 23#include <test/helpers.h> 24 25#include <psa/crypto.h> 26#include <psa/crypto_extra.h> 27 28#if defined(PSA_CRYPTO_DRIVER_TEST) 29#include <test/drivers/test_driver.h> 30#endif 31 32typedef struct { 33 psa_key_id_t builtin_key_id; 34 psa_key_lifetime_t lifetime; 35 psa_drv_slot_number_t slot_number; 36} mbedtls_psa_builtin_key_description_t; 37 38static const mbedtls_psa_builtin_key_description_t builtin_keys[] = { 39#if defined(PSA_CRYPTO_DRIVER_TEST) 40 /* For testing, assign the AES builtin key slot to the boundary values. 41 * ECDSA can be exercised on key ID MBEDTLS_PSA_KEY_ID_BUILTIN_MIN + 1. */ 42 { MBEDTLS_PSA_KEY_ID_BUILTIN_MIN - 1, 43 PSA_KEY_LIFETIME_FROM_PERSISTENCE_AND_LOCATION( 44 PSA_KEY_PERSISTENCE_READ_ONLY, PSA_CRYPTO_TEST_DRIVER_LOCATION), 45 PSA_CRYPTO_TEST_DRIVER_BUILTIN_AES_KEY_SLOT }, 46 { MBEDTLS_PSA_KEY_ID_BUILTIN_MIN, 47 PSA_KEY_LIFETIME_FROM_PERSISTENCE_AND_LOCATION( 48 PSA_KEY_PERSISTENCE_READ_ONLY, PSA_CRYPTO_TEST_DRIVER_LOCATION), 49 PSA_CRYPTO_TEST_DRIVER_BUILTIN_AES_KEY_SLOT }, 50 { MBEDTLS_PSA_KEY_ID_BUILTIN_MIN + 1, 51 PSA_KEY_LIFETIME_FROM_PERSISTENCE_AND_LOCATION( 52 PSA_KEY_PERSISTENCE_READ_ONLY, PSA_CRYPTO_TEST_DRIVER_LOCATION), 53 PSA_CRYPTO_TEST_DRIVER_BUILTIN_ECDSA_KEY_SLOT }, 54 { MBEDTLS_PSA_KEY_ID_BUILTIN_MAX - 1, 55 PSA_KEY_LIFETIME_FROM_PERSISTENCE_AND_LOCATION( 56 PSA_KEY_PERSISTENCE_READ_ONLY, PSA_CRYPTO_TEST_DRIVER_LOCATION), 57 PSA_CRYPTO_TEST_DRIVER_BUILTIN_AES_KEY_SLOT }, 58 { MBEDTLS_PSA_KEY_ID_BUILTIN_MAX, 59 PSA_KEY_LIFETIME_FROM_PERSISTENCE_AND_LOCATION( 60 PSA_KEY_PERSISTENCE_READ_ONLY, PSA_CRYPTO_TEST_DRIVER_LOCATION), 61 PSA_CRYPTO_TEST_DRIVER_BUILTIN_AES_KEY_SLOT }, 62 { MBEDTLS_PSA_KEY_ID_BUILTIN_MAX + 1, 63 PSA_KEY_LIFETIME_FROM_PERSISTENCE_AND_LOCATION( 64 PSA_KEY_PERSISTENCE_READ_ONLY, PSA_CRYPTO_TEST_DRIVER_LOCATION), 65 PSA_CRYPTO_TEST_DRIVER_BUILTIN_AES_KEY_SLOT }, 66#else 67 { 0, 0, 0 } 68#endif 69}; 70 71psa_status_t mbedtls_psa_platform_get_builtin_key( 72 mbedtls_svc_key_id_t key_id, 73 psa_key_lifetime_t *lifetime, 74 psa_drv_slot_number_t *slot_number) 75{ 76 psa_key_id_t app_key_id = MBEDTLS_SVC_KEY_ID_GET_KEY_ID(key_id); 77 const mbedtls_psa_builtin_key_description_t *builtin_key; 78 79 for (size_t i = 0; 80 i < (sizeof(builtin_keys) / sizeof(builtin_keys[0])); i++) { 81 builtin_key = &builtin_keys[i]; 82 if (builtin_key->builtin_key_id == app_key_id) { 83 *lifetime = builtin_key->lifetime; 84 *slot_number = builtin_key->slot_number; 85 return PSA_SUCCESS; 86 } 87 } 88 89 return PSA_ERROR_DOES_NOT_EXIST; 90} 91