1a8e1175bSopenharmony_ci/* 2a8e1175bSopenharmony_ci * Test driver for MAC entry points. 3a8e1175bSopenharmony_ci */ 4a8e1175bSopenharmony_ci/* Copyright The Mbed TLS Contributors 5a8e1175bSopenharmony_ci * SPDX-License-Identifier: Apache-2.0 OR GPL-2.0-or-later 6a8e1175bSopenharmony_ci */ 7a8e1175bSopenharmony_ci 8a8e1175bSopenharmony_ci#include <test/helpers.h> 9a8e1175bSopenharmony_ci 10a8e1175bSopenharmony_ci#if defined(PSA_CRYPTO_DRIVER_TEST) 11a8e1175bSopenharmony_ci#include "psa_crypto_pake.h" 12a8e1175bSopenharmony_ci 13a8e1175bSopenharmony_ci#include "test/drivers/pake.h" 14a8e1175bSopenharmony_ci#include "string.h" 15a8e1175bSopenharmony_ci 16a8e1175bSopenharmony_ci#if defined(MBEDTLS_TEST_LIBTESTDRIVER1) 17a8e1175bSopenharmony_ci#include "libtestdriver1/library/psa_crypto_pake.h" 18a8e1175bSopenharmony_ci#endif 19a8e1175bSopenharmony_ci 20a8e1175bSopenharmony_cimbedtls_test_driver_pake_hooks_t mbedtls_test_driver_pake_hooks = 21a8e1175bSopenharmony_ci MBEDTLS_TEST_DRIVER_PAKE_INIT; 22a8e1175bSopenharmony_ci 23a8e1175bSopenharmony_ci 24a8e1175bSopenharmony_cipsa_status_t mbedtls_test_transparent_pake_setup( 25a8e1175bSopenharmony_ci mbedtls_transparent_test_driver_pake_operation_t *operation, 26a8e1175bSopenharmony_ci const psa_crypto_driver_pake_inputs_t *inputs) 27a8e1175bSopenharmony_ci{ 28a8e1175bSopenharmony_ci mbedtls_test_driver_pake_hooks.hits.total++; 29a8e1175bSopenharmony_ci mbedtls_test_driver_pake_hooks.hits.setup++; 30a8e1175bSopenharmony_ci 31a8e1175bSopenharmony_ci if (mbedtls_test_driver_pake_hooks.forced_setup_status != PSA_SUCCESS) { 32a8e1175bSopenharmony_ci mbedtls_test_driver_pake_hooks.driver_status = 33a8e1175bSopenharmony_ci mbedtls_test_driver_pake_hooks.forced_setup_status; 34a8e1175bSopenharmony_ci } else { 35a8e1175bSopenharmony_ci#if defined(MBEDTLS_TEST_LIBTESTDRIVER1) && \ 36a8e1175bSopenharmony_ci defined(LIBTESTDRIVER1_MBEDTLS_PSA_BUILTIN_PAKE) 37a8e1175bSopenharmony_ci mbedtls_test_driver_pake_hooks.driver_status = 38a8e1175bSopenharmony_ci libtestdriver1_mbedtls_psa_pake_setup( 39a8e1175bSopenharmony_ci operation, (const libtestdriver1_psa_crypto_driver_pake_inputs_t *) inputs); 40a8e1175bSopenharmony_ci#elif defined(MBEDTLS_PSA_BUILTIN_PAKE) 41a8e1175bSopenharmony_ci mbedtls_test_driver_pake_hooks.driver_status = 42a8e1175bSopenharmony_ci mbedtls_psa_pake_setup( 43a8e1175bSopenharmony_ci operation, inputs); 44a8e1175bSopenharmony_ci#else 45a8e1175bSopenharmony_ci (void) operation; 46a8e1175bSopenharmony_ci (void) inputs; 47a8e1175bSopenharmony_ci mbedtls_test_driver_pake_hooks.driver_status = PSA_ERROR_NOT_SUPPORTED; 48a8e1175bSopenharmony_ci#endif 49a8e1175bSopenharmony_ci } 50a8e1175bSopenharmony_ci 51a8e1175bSopenharmony_ci return mbedtls_test_driver_pake_hooks.driver_status; 52a8e1175bSopenharmony_ci} 53a8e1175bSopenharmony_ci 54a8e1175bSopenharmony_cipsa_status_t mbedtls_test_transparent_pake_output( 55a8e1175bSopenharmony_ci mbedtls_transparent_test_driver_pake_operation_t *operation, 56a8e1175bSopenharmony_ci psa_crypto_driver_pake_step_t step, 57a8e1175bSopenharmony_ci uint8_t *output, 58a8e1175bSopenharmony_ci size_t output_size, 59a8e1175bSopenharmony_ci size_t *output_length) 60a8e1175bSopenharmony_ci{ 61a8e1175bSopenharmony_ci mbedtls_test_driver_pake_hooks.hits.total++; 62a8e1175bSopenharmony_ci mbedtls_test_driver_pake_hooks.hits.output++; 63a8e1175bSopenharmony_ci 64a8e1175bSopenharmony_ci if (mbedtls_test_driver_pake_hooks.forced_output != NULL) { 65a8e1175bSopenharmony_ci if (output_size < mbedtls_test_driver_pake_hooks.forced_output_length) { 66a8e1175bSopenharmony_ci return PSA_ERROR_BUFFER_TOO_SMALL; 67a8e1175bSopenharmony_ci } 68a8e1175bSopenharmony_ci 69a8e1175bSopenharmony_ci memcpy(output, 70a8e1175bSopenharmony_ci mbedtls_test_driver_pake_hooks.forced_output, 71a8e1175bSopenharmony_ci mbedtls_test_driver_pake_hooks.forced_output_length); 72a8e1175bSopenharmony_ci *output_length = mbedtls_test_driver_pake_hooks.forced_output_length; 73a8e1175bSopenharmony_ci 74a8e1175bSopenharmony_ci return mbedtls_test_driver_pake_hooks.forced_status; 75a8e1175bSopenharmony_ci } 76a8e1175bSopenharmony_ci 77a8e1175bSopenharmony_ci if (mbedtls_test_driver_pake_hooks.forced_status != PSA_SUCCESS) { 78a8e1175bSopenharmony_ci mbedtls_test_driver_pake_hooks.driver_status = 79a8e1175bSopenharmony_ci mbedtls_test_driver_pake_hooks.forced_status; 80a8e1175bSopenharmony_ci } else { 81a8e1175bSopenharmony_ci#if defined(MBEDTLS_TEST_LIBTESTDRIVER1) && \ 82a8e1175bSopenharmony_ci defined(LIBTESTDRIVER1_MBEDTLS_PSA_BUILTIN_PAKE) 83a8e1175bSopenharmony_ci mbedtls_test_driver_pake_hooks.driver_status = 84a8e1175bSopenharmony_ci libtestdriver1_mbedtls_psa_pake_output( 85a8e1175bSopenharmony_ci operation, (libtestdriver1_psa_crypto_driver_pake_step_t) step, 86a8e1175bSopenharmony_ci output, output_size, output_length); 87a8e1175bSopenharmony_ci#elif defined(MBEDTLS_PSA_BUILTIN_PAKE) 88a8e1175bSopenharmony_ci mbedtls_test_driver_pake_hooks.driver_status = 89a8e1175bSopenharmony_ci mbedtls_psa_pake_output( 90a8e1175bSopenharmony_ci operation, step, output, output_size, output_length); 91a8e1175bSopenharmony_ci#else 92a8e1175bSopenharmony_ci (void) operation; 93a8e1175bSopenharmony_ci (void) step; 94a8e1175bSopenharmony_ci (void) output; 95a8e1175bSopenharmony_ci (void) output_size; 96a8e1175bSopenharmony_ci (void) output_length; 97a8e1175bSopenharmony_ci mbedtls_test_driver_pake_hooks.driver_status = PSA_ERROR_NOT_SUPPORTED; 98a8e1175bSopenharmony_ci#endif 99a8e1175bSopenharmony_ci } 100a8e1175bSopenharmony_ci 101a8e1175bSopenharmony_ci return mbedtls_test_driver_pake_hooks.driver_status; 102a8e1175bSopenharmony_ci} 103a8e1175bSopenharmony_ci 104a8e1175bSopenharmony_cipsa_status_t mbedtls_test_transparent_pake_input( 105a8e1175bSopenharmony_ci mbedtls_transparent_test_driver_pake_operation_t *operation, 106a8e1175bSopenharmony_ci psa_crypto_driver_pake_step_t step, 107a8e1175bSopenharmony_ci const uint8_t *input, 108a8e1175bSopenharmony_ci size_t input_length) 109a8e1175bSopenharmony_ci{ 110a8e1175bSopenharmony_ci mbedtls_test_driver_pake_hooks.hits.total++; 111a8e1175bSopenharmony_ci mbedtls_test_driver_pake_hooks.hits.input++; 112a8e1175bSopenharmony_ci 113a8e1175bSopenharmony_ci if (mbedtls_test_driver_pake_hooks.forced_status != PSA_SUCCESS) { 114a8e1175bSopenharmony_ci mbedtls_test_driver_pake_hooks.driver_status = 115a8e1175bSopenharmony_ci mbedtls_test_driver_pake_hooks.forced_status; 116a8e1175bSopenharmony_ci } else { 117a8e1175bSopenharmony_ci#if defined(MBEDTLS_TEST_LIBTESTDRIVER1) && \ 118a8e1175bSopenharmony_ci defined(LIBTESTDRIVER1_MBEDTLS_PSA_BUILTIN_PAKE) 119a8e1175bSopenharmony_ci mbedtls_test_driver_pake_hooks.driver_status = 120a8e1175bSopenharmony_ci libtestdriver1_mbedtls_psa_pake_input( 121a8e1175bSopenharmony_ci operation, (libtestdriver1_psa_crypto_driver_pake_step_t) step, 122a8e1175bSopenharmony_ci input, input_length); 123a8e1175bSopenharmony_ci#elif defined(MBEDTLS_PSA_BUILTIN_PAKE) 124a8e1175bSopenharmony_ci mbedtls_test_driver_pake_hooks.driver_status = 125a8e1175bSopenharmony_ci mbedtls_psa_pake_input( 126a8e1175bSopenharmony_ci operation, step, input, input_length); 127a8e1175bSopenharmony_ci#else 128a8e1175bSopenharmony_ci (void) operation; 129a8e1175bSopenharmony_ci (void) step; 130a8e1175bSopenharmony_ci (void) input; 131a8e1175bSopenharmony_ci (void) input_length; 132a8e1175bSopenharmony_ci mbedtls_test_driver_pake_hooks.driver_status = PSA_ERROR_NOT_SUPPORTED; 133a8e1175bSopenharmony_ci#endif 134a8e1175bSopenharmony_ci } 135a8e1175bSopenharmony_ci 136a8e1175bSopenharmony_ci return mbedtls_test_driver_pake_hooks.driver_status; 137a8e1175bSopenharmony_ci} 138a8e1175bSopenharmony_ci 139a8e1175bSopenharmony_cipsa_status_t mbedtls_test_transparent_pake_get_implicit_key( 140a8e1175bSopenharmony_ci mbedtls_transparent_test_driver_pake_operation_t *operation, 141a8e1175bSopenharmony_ci uint8_t *output, size_t output_size, size_t *output_length) 142a8e1175bSopenharmony_ci{ 143a8e1175bSopenharmony_ci mbedtls_test_driver_pake_hooks.hits.total++; 144a8e1175bSopenharmony_ci mbedtls_test_driver_pake_hooks.hits.implicit_key++; 145a8e1175bSopenharmony_ci 146a8e1175bSopenharmony_ci if (mbedtls_test_driver_pake_hooks.forced_status != PSA_SUCCESS) { 147a8e1175bSopenharmony_ci mbedtls_test_driver_pake_hooks.driver_status = 148a8e1175bSopenharmony_ci mbedtls_test_driver_pake_hooks.forced_status; 149a8e1175bSopenharmony_ci } else { 150a8e1175bSopenharmony_ci#if defined(MBEDTLS_TEST_LIBTESTDRIVER1) && \ 151a8e1175bSopenharmony_ci defined(LIBTESTDRIVER1_MBEDTLS_PSA_BUILTIN_PAKE) 152a8e1175bSopenharmony_ci mbedtls_test_driver_pake_hooks.driver_status = 153a8e1175bSopenharmony_ci libtestdriver1_mbedtls_psa_pake_get_implicit_key( 154a8e1175bSopenharmony_ci operation, output, output_size, output_length); 155a8e1175bSopenharmony_ci#elif defined(MBEDTLS_PSA_BUILTIN_PAKE) 156a8e1175bSopenharmony_ci mbedtls_test_driver_pake_hooks.driver_status = 157a8e1175bSopenharmony_ci mbedtls_psa_pake_get_implicit_key( 158a8e1175bSopenharmony_ci operation, output, output_size, output_length); 159a8e1175bSopenharmony_ci#else 160a8e1175bSopenharmony_ci (void) operation; 161a8e1175bSopenharmony_ci (void) output; 162a8e1175bSopenharmony_ci (void) output_size; 163a8e1175bSopenharmony_ci (void) output_length; 164a8e1175bSopenharmony_ci mbedtls_test_driver_pake_hooks.driver_status = PSA_ERROR_NOT_SUPPORTED; 165a8e1175bSopenharmony_ci#endif 166a8e1175bSopenharmony_ci } 167a8e1175bSopenharmony_ci 168a8e1175bSopenharmony_ci return mbedtls_test_driver_pake_hooks.driver_status; 169a8e1175bSopenharmony_ci} 170a8e1175bSopenharmony_ci 171a8e1175bSopenharmony_cipsa_status_t mbedtls_test_transparent_pake_abort( 172a8e1175bSopenharmony_ci mbedtls_transparent_test_driver_pake_operation_t *operation) 173a8e1175bSopenharmony_ci{ 174a8e1175bSopenharmony_ci mbedtls_test_driver_pake_hooks.hits.total++; 175a8e1175bSopenharmony_ci mbedtls_test_driver_pake_hooks.hits.abort++; 176a8e1175bSopenharmony_ci 177a8e1175bSopenharmony_ci#if defined(MBEDTLS_TEST_LIBTESTDRIVER1) && \ 178a8e1175bSopenharmony_ci defined(LIBTESTDRIVER1_MBEDTLS_PSA_BUILTIN_PAKE) 179a8e1175bSopenharmony_ci mbedtls_test_driver_pake_hooks.driver_status = 180a8e1175bSopenharmony_ci libtestdriver1_mbedtls_psa_pake_abort( 181a8e1175bSopenharmony_ci operation); 182a8e1175bSopenharmony_ci#elif defined(MBEDTLS_PSA_BUILTIN_PAKE) 183a8e1175bSopenharmony_ci mbedtls_test_driver_pake_hooks.driver_status = 184a8e1175bSopenharmony_ci mbedtls_psa_pake_abort( 185a8e1175bSopenharmony_ci operation); 186a8e1175bSopenharmony_ci#else 187a8e1175bSopenharmony_ci (void) operation; 188a8e1175bSopenharmony_ci mbedtls_test_driver_pake_hooks.driver_status = PSA_ERROR_NOT_SUPPORTED; 189a8e1175bSopenharmony_ci#endif 190a8e1175bSopenharmony_ci 191a8e1175bSopenharmony_ci 192a8e1175bSopenharmony_ci if (mbedtls_test_driver_pake_hooks.forced_status != PSA_SUCCESS && 193a8e1175bSopenharmony_ci mbedtls_test_driver_pake_hooks.driver_status == PSA_SUCCESS) { 194a8e1175bSopenharmony_ci mbedtls_test_driver_pake_hooks.driver_status = 195a8e1175bSopenharmony_ci mbedtls_test_driver_pake_hooks.forced_status; 196a8e1175bSopenharmony_ci } 197a8e1175bSopenharmony_ci 198a8e1175bSopenharmony_ci 199a8e1175bSopenharmony_ci return mbedtls_test_driver_pake_hooks.driver_status; 200a8e1175bSopenharmony_ci} 201a8e1175bSopenharmony_ci 202a8e1175bSopenharmony_ci#endif /* PSA_CRYPTO_DRIVER_TEST */ 203