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