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