blob: 6dadf5282b60e2bc6768be8f6479bd63a1872e90 [file] [log] [blame]
Ronald Cronde822812021-03-17 16:08:20 +01001/*
2 * Test driver for AEAD entry points.
3 */
4/* Copyright The Mbed TLS Contributors
5 * SPDX-License-Identifier: Apache-2.0
6 *
7 * Licensed under the Apache License, Version 2.0 (the "License"); you may
8 * not use this file except in compliance with the License.
9 * You may obtain a copy of the License at
10 *
11 * http://www.apache.org/licenses/LICENSE-2.0
12 *
13 * Unless required by applicable law or agreed to in writing, software
14 * distributed under the License is distributed on an "AS IS" BASIS, WITHOUT
15 * WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
16 * See the License for the specific language governing permissions and
17 * limitations under the License.
18 */
19
Mateusz Starzyk2c09c9b2021-05-14 22:20:10 +020020#include <test/helpers.h>
Ronald Cronde822812021-03-17 16:08:20 +010021
Ronald Crone6e6b752023-01-16 16:56:51 +010022#if defined(PSA_CRYPTO_DRIVER_TEST)
Ronald Cronde822812021-03-17 16:08:20 +010023#include "psa_crypto_aead.h"
Paul Elliott0a6a5692021-07-23 15:29:21 +010024#include "psa_crypto_core.h"
Ronald Cronde822812021-03-17 16:08:20 +010025
26#include "test/drivers/aead.h"
27
Dave Rodgman33e1f422023-08-29 18:17:29 +010028#include "mbedtls/constant_time.h"
29
Przemek Stekielbd99a022022-10-02 21:01:23 +020030#if defined(MBEDTLS_TEST_LIBTESTDRIVER1)
31#include "libtestdriver1/library/psa_crypto_aead.h"
32#endif
33
Ronald Cron7f13fa22021-04-13 12:41:34 +020034mbedtls_test_driver_aead_hooks_t
35 mbedtls_test_driver_aead_hooks = MBEDTLS_TEST_DRIVER_AEAD_INIT;
Ronald Cronbfe551d2021-03-23 09:33:25 +010036
Ronald Cron7f13fa22021-04-13 12:41:34 +020037psa_status_t mbedtls_test_transparent_aead_encrypt(
Ronald Cronde822812021-03-17 16:08:20 +010038 const psa_key_attributes_t *attributes,
39 const uint8_t *key_buffer, size_t key_buffer_size,
40 psa_algorithm_t alg,
41 const uint8_t *nonce, size_t nonce_length,
42 const uint8_t *additional_data, size_t additional_data_length,
43 const uint8_t *plaintext, size_t plaintext_length,
Gilles Peskine449bd832023-01-11 14:50:10 +010044 uint8_t *ciphertext, size_t ciphertext_size, size_t *ciphertext_length)
Ronald Cronde822812021-03-17 16:08:20 +010045{
Paul Elliottfcb5cdc2021-06-23 09:40:12 +010046 mbedtls_test_driver_aead_hooks.hits_encrypt++;
Ronald Cronbfe551d2021-03-23 09:33:25 +010047
Gilles Peskine449bd832023-01-11 14:50:10 +010048 if (mbedtls_test_driver_aead_hooks.forced_status != PSA_SUCCESS) {
49 mbedtls_test_driver_aead_hooks.driver_status =
50 mbedtls_test_driver_aead_hooks.forced_status;
51 } else {
Przemek Stekielbd99a022022-10-02 21:01:23 +020052#if defined(MBEDTLS_TEST_LIBTESTDRIVER1) && \
Gilles Peskine449bd832023-01-11 14:50:10 +010053 defined(LIBTESTDRIVER1_MBEDTLS_PSA_BUILTIN_AEAD)
Przemek Stekielbd99a022022-10-02 21:01:23 +020054 mbedtls_test_driver_aead_hooks.driver_status =
55 libtestdriver1_mbedtls_psa_aead_encrypt(
Gilles Peskine449bd832023-01-11 14:50:10 +010056 (const libtestdriver1_psa_key_attributes_t *) attributes,
Przemek Stekielbd99a022022-10-02 21:01:23 +020057 key_buffer, key_buffer_size,
58 alg,
59 nonce, nonce_length,
60 additional_data, additional_data_length,
61 plaintext, plaintext_length,
Gilles Peskine449bd832023-01-11 14:50:10 +010062 ciphertext, ciphertext_size, ciphertext_length);
Przemek Stekielbd99a022022-10-02 21:01:23 +020063#elif defined(MBEDTLS_PSA_BUILTIN_AEAD)
Ronald Cron7f13fa22021-04-13 12:41:34 +020064 mbedtls_test_driver_aead_hooks.driver_status =
Ronald Cronbfe551d2021-03-23 09:33:25 +010065 mbedtls_psa_aead_encrypt(
Ronald Cronde822812021-03-17 16:08:20 +010066 attributes, key_buffer, key_buffer_size,
67 alg,
68 nonce, nonce_length,
69 additional_data, additional_data_length,
70 plaintext, plaintext_length,
Gilles Peskine449bd832023-01-11 14:50:10 +010071 ciphertext, ciphertext_size, ciphertext_length);
Ronald Cron73c9d9e2021-04-09 11:09:54 +020072#else
73 (void) attributes;
74 (void) key_buffer;
75 (void) key_buffer_size;
76 (void) alg;
77 (void) nonce;
78 (void) nonce_length;
79 (void) additional_data;
80 (void) additional_data_length;
81 (void) plaintext;
82 (void) plaintext_length;
83 (void) ciphertext;
84 (void) ciphertext_size;
85 (void) ciphertext_length;
86 mbedtls_test_driver_aead_hooks.driver_status = PSA_ERROR_NOT_SUPPORTED;
87#endif
Ronald Cronbfe551d2021-03-23 09:33:25 +010088 }
89
Gilles Peskine449bd832023-01-11 14:50:10 +010090 return mbedtls_test_driver_aead_hooks.driver_status;
Ronald Cronde822812021-03-17 16:08:20 +010091}
92
Ronald Cron7f13fa22021-04-13 12:41:34 +020093psa_status_t mbedtls_test_transparent_aead_decrypt(
Ronald Cronde822812021-03-17 16:08:20 +010094 const psa_key_attributes_t *attributes,
95 const uint8_t *key_buffer, size_t key_buffer_size,
96 psa_algorithm_t alg,
97 const uint8_t *nonce, size_t nonce_length,
98 const uint8_t *additional_data, size_t additional_data_length,
99 const uint8_t *ciphertext, size_t ciphertext_length,
Gilles Peskine449bd832023-01-11 14:50:10 +0100100 uint8_t *plaintext, size_t plaintext_size, size_t *plaintext_length)
Ronald Cronde822812021-03-17 16:08:20 +0100101{
Paul Elliottfcb5cdc2021-06-23 09:40:12 +0100102 mbedtls_test_driver_aead_hooks.hits_decrypt++;
Ronald Cronbfe551d2021-03-23 09:33:25 +0100103
Gilles Peskine449bd832023-01-11 14:50:10 +0100104 if (mbedtls_test_driver_aead_hooks.forced_status != PSA_SUCCESS) {
105 mbedtls_test_driver_aead_hooks.driver_status =
106 mbedtls_test_driver_aead_hooks.forced_status;
107 } else {
Przemek Stekielbd99a022022-10-02 21:01:23 +0200108#if defined(MBEDTLS_TEST_LIBTESTDRIVER1) && \
Gilles Peskine449bd832023-01-11 14:50:10 +0100109 defined(LIBTESTDRIVER1_MBEDTLS_PSA_BUILTIN_AEAD)
Przemek Stekielbd99a022022-10-02 21:01:23 +0200110 mbedtls_test_driver_aead_hooks.driver_status =
111 libtestdriver1_mbedtls_psa_aead_decrypt(
Gilles Peskine449bd832023-01-11 14:50:10 +0100112 (const libtestdriver1_psa_key_attributes_t *) attributes,
Przemek Stekielbd99a022022-10-02 21:01:23 +0200113 key_buffer, key_buffer_size,
114 alg,
115 nonce, nonce_length,
116 additional_data, additional_data_length,
117 ciphertext, ciphertext_length,
Gilles Peskine449bd832023-01-11 14:50:10 +0100118 plaintext, plaintext_size, plaintext_length);
Przemek Stekielbd99a022022-10-02 21:01:23 +0200119#elif defined(MBEDTLS_PSA_BUILTIN_AEAD)
Ronald Cron7f13fa22021-04-13 12:41:34 +0200120 mbedtls_test_driver_aead_hooks.driver_status =
Ronald Cronbfe551d2021-03-23 09:33:25 +0100121 mbedtls_psa_aead_decrypt(
Ronald Cronde822812021-03-17 16:08:20 +0100122 attributes, key_buffer, key_buffer_size,
123 alg,
124 nonce, nonce_length,
125 additional_data, additional_data_length,
126 ciphertext, ciphertext_length,
Gilles Peskine449bd832023-01-11 14:50:10 +0100127 plaintext, plaintext_size, plaintext_length);
Ronald Cron73c9d9e2021-04-09 11:09:54 +0200128#else
129 (void) attributes;
130 (void) key_buffer;
131 (void) key_buffer_size;
132 (void) alg;
133 (void) nonce;
134 (void) nonce_length;
135 (void) additional_data;
136 (void) additional_data_length;
137 (void) ciphertext;
138 (void) ciphertext_length;
139 (void) plaintext;
140 (void) plaintext_size;
141 (void) plaintext_length;
142 mbedtls_test_driver_aead_hooks.driver_status = PSA_ERROR_NOT_SUPPORTED;
143#endif
Ronald Cronbfe551d2021-03-23 09:33:25 +0100144 }
145
Gilles Peskine449bd832023-01-11 14:50:10 +0100146 return mbedtls_test_driver_aead_hooks.driver_status;
Ronald Cronde822812021-03-17 16:08:20 +0100147}
148
Paul Elliotta218ceb2021-05-07 15:10:31 +0100149psa_status_t mbedtls_test_transparent_aead_encrypt_setup(
Paul Elliottcbbde5f2021-05-10 18:19:46 +0100150 mbedtls_transparent_test_driver_aead_operation_t *operation,
Paul Elliott4bbe82b2021-04-27 12:11:56 +0100151 const psa_key_attributes_t *attributes,
152 const uint8_t *key_buffer, size_t key_buffer_size,
Gilles Peskine449bd832023-01-11 14:50:10 +0100153 psa_algorithm_t alg)
Paul Elliott4bbe82b2021-04-27 12:11:56 +0100154{
Paul Elliottfcb5cdc2021-06-23 09:40:12 +0100155 mbedtls_test_driver_aead_hooks.hits_encrypt_setup++;
Paul Elliott4bbe82b2021-04-27 12:11:56 +0100156
Gilles Peskine449bd832023-01-11 14:50:10 +0100157 if (mbedtls_test_driver_aead_hooks.forced_status != PSA_SUCCESS) {
Przemek Stekielbd99a022022-10-02 21:01:23 +0200158 mbedtls_test_driver_aead_hooks.driver_status =
Gilles Peskine449bd832023-01-11 14:50:10 +0100159 mbedtls_test_driver_aead_hooks.forced_status;
160 } else {
161#if defined(MBEDTLS_TEST_LIBTESTDRIVER1) && \
162 defined(LIBTESTDRIVER1_MBEDTLS_PSA_BUILTIN_AEAD)
163 mbedtls_test_driver_aead_hooks.driver_status =
164 libtestdriver1_mbedtls_psa_aead_encrypt_setup(operation,
165 (const libtestdriver1_psa_key_attributes_t
166 *) attributes,
167 key_buffer,
168 key_buffer_size, alg);
Przemek Stekielbd99a022022-10-02 21:01:23 +0200169#elif defined(MBEDTLS_PSA_BUILTIN_AEAD)
Paul Elliotta218ceb2021-05-07 15:10:31 +0100170 mbedtls_test_driver_aead_hooks.driver_status =
Gilles Peskine449bd832023-01-11 14:50:10 +0100171 mbedtls_psa_aead_encrypt_setup(operation, attributes, key_buffer,
172 key_buffer_size, alg);
Ronald Cron73c9d9e2021-04-09 11:09:54 +0200173#else
174 (void) operation;
175 (void) attributes;
176 (void) key_buffer;
177 (void) key_buffer_size;
178 (void) alg;
179 mbedtls_test_driver_aead_hooks.driver_status = PSA_ERROR_NOT_SUPPORTED;
180#endif
Paul Elliott4bbe82b2021-04-27 12:11:56 +0100181 }
182
Gilles Peskine449bd832023-01-11 14:50:10 +0100183 return mbedtls_test_driver_aead_hooks.driver_status;
Paul Elliott4bbe82b2021-04-27 12:11:56 +0100184}
185
Paul Elliotta218ceb2021-05-07 15:10:31 +0100186psa_status_t mbedtls_test_transparent_aead_decrypt_setup(
Paul Elliottcbbde5f2021-05-10 18:19:46 +0100187 mbedtls_transparent_test_driver_aead_operation_t *operation,
Paul Elliott4bbe82b2021-04-27 12:11:56 +0100188 const psa_key_attributes_t *attributes,
189 const uint8_t *key_buffer, size_t key_buffer_size,
Gilles Peskine449bd832023-01-11 14:50:10 +0100190 psa_algorithm_t alg)
Paul Elliott4bbe82b2021-04-27 12:11:56 +0100191{
Paul Elliottfcb5cdc2021-06-23 09:40:12 +0100192 mbedtls_test_driver_aead_hooks.hits_decrypt_setup++;
Paul Elliott4bbe82b2021-04-27 12:11:56 +0100193
Gilles Peskine449bd832023-01-11 14:50:10 +0100194 if (mbedtls_test_driver_aead_hooks.forced_status != PSA_SUCCESS) {
Przemek Stekielbd99a022022-10-02 21:01:23 +0200195 mbedtls_test_driver_aead_hooks.driver_status =
Gilles Peskine449bd832023-01-11 14:50:10 +0100196 mbedtls_test_driver_aead_hooks.forced_status;
197 } else {
198#if defined(MBEDTLS_TEST_LIBTESTDRIVER1) && \
199 defined(LIBTESTDRIVER1_MBEDTLS_PSA_BUILTIN_AEAD)
200 mbedtls_test_driver_aead_hooks.driver_status =
201 libtestdriver1_mbedtls_psa_aead_decrypt_setup(operation,
202 (const libtestdriver1_psa_key_attributes_t
203 *) attributes,
204 key_buffer, key_buffer_size, alg);
Przemek Stekielbd99a022022-10-02 21:01:23 +0200205#elif defined(MBEDTLS_PSA_BUILTIN_AEAD)
Paul Elliotta218ceb2021-05-07 15:10:31 +0100206 mbedtls_test_driver_aead_hooks.driver_status =
Gilles Peskine449bd832023-01-11 14:50:10 +0100207 mbedtls_psa_aead_decrypt_setup(operation, attributes, key_buffer,
208 key_buffer_size, alg);
Ronald Cron73c9d9e2021-04-09 11:09:54 +0200209#else
210 (void) operation;
211 (void) attributes;
212 (void) key_buffer;
213 (void) key_buffer_size;
214 (void) alg;
215 mbedtls_test_driver_aead_hooks.driver_status = PSA_ERROR_NOT_SUPPORTED;
216#endif
Paul Elliott4bbe82b2021-04-27 12:11:56 +0100217 }
218
Gilles Peskine449bd832023-01-11 14:50:10 +0100219 return mbedtls_test_driver_aead_hooks.driver_status;
Paul Elliott4bbe82b2021-04-27 12:11:56 +0100220}
221
Paul Elliotta218ceb2021-05-07 15:10:31 +0100222psa_status_t mbedtls_test_transparent_aead_set_nonce(
Paul Elliottcbbde5f2021-05-10 18:19:46 +0100223 mbedtls_transparent_test_driver_aead_operation_t *operation,
Paul Elliott4bbe82b2021-04-27 12:11:56 +0100224 const uint8_t *nonce,
Gilles Peskine449bd832023-01-11 14:50:10 +0100225 size_t nonce_length)
Paul Elliott4bbe82b2021-04-27 12:11:56 +0100226{
Paul Elliottfcb5cdc2021-06-23 09:40:12 +0100227 mbedtls_test_driver_aead_hooks.hits_set_nonce++;
Paul Elliott4bbe82b2021-04-27 12:11:56 +0100228
Gilles Peskine449bd832023-01-11 14:50:10 +0100229 if (mbedtls_test_driver_aead_hooks.forced_status != PSA_SUCCESS) {
Przemek Stekielbd99a022022-10-02 21:01:23 +0200230 mbedtls_test_driver_aead_hooks.driver_status =
Gilles Peskine449bd832023-01-11 14:50:10 +0100231 mbedtls_test_driver_aead_hooks.forced_status;
232 } else {
233#if defined(MBEDTLS_TEST_LIBTESTDRIVER1) && \
234 defined(LIBTESTDRIVER1_MBEDTLS_PSA_BUILTIN_AEAD)
235 mbedtls_test_driver_aead_hooks.driver_status =
236 libtestdriver1_mbedtls_psa_aead_set_nonce(operation, nonce, nonce_length);
Przemek Stekielbd99a022022-10-02 21:01:23 +0200237#elif defined(MBEDTLS_PSA_BUILTIN_AEAD)
Paul Elliotta218ceb2021-05-07 15:10:31 +0100238 mbedtls_test_driver_aead_hooks.driver_status =
Gilles Peskine449bd832023-01-11 14:50:10 +0100239 mbedtls_psa_aead_set_nonce(operation, nonce, nonce_length);
Ronald Cron73c9d9e2021-04-09 11:09:54 +0200240#else
241 (void) operation;
242 (void) nonce;
243 (void) nonce_length;
244 mbedtls_test_driver_aead_hooks.driver_status = PSA_ERROR_NOT_SUPPORTED;
245#endif
Paul Elliott4bbe82b2021-04-27 12:11:56 +0100246 }
247
Gilles Peskine449bd832023-01-11 14:50:10 +0100248 return mbedtls_test_driver_aead_hooks.driver_status;
Paul Elliott4bbe82b2021-04-27 12:11:56 +0100249}
250
Paul Elliotta218ceb2021-05-07 15:10:31 +0100251psa_status_t mbedtls_test_transparent_aead_set_lengths(
Paul Elliottcbbde5f2021-05-10 18:19:46 +0100252 mbedtls_transparent_test_driver_aead_operation_t *operation,
Paul Elliott4bbe82b2021-04-27 12:11:56 +0100253 size_t ad_length,
Gilles Peskine449bd832023-01-11 14:50:10 +0100254 size_t plaintext_length)
Paul Elliott4bbe82b2021-04-27 12:11:56 +0100255{
Paul Elliottfcb5cdc2021-06-23 09:40:12 +0100256 mbedtls_test_driver_aead_hooks.hits_set_lengths++;
Paul Elliott4bbe82b2021-04-27 12:11:56 +0100257
Gilles Peskine449bd832023-01-11 14:50:10 +0100258 if (mbedtls_test_driver_aead_hooks.forced_status != PSA_SUCCESS) {
Przemek Stekielbd99a022022-10-02 21:01:23 +0200259 mbedtls_test_driver_aead_hooks.driver_status =
Gilles Peskine449bd832023-01-11 14:50:10 +0100260 mbedtls_test_driver_aead_hooks.forced_status;
261 } else {
262#if defined(MBEDTLS_TEST_LIBTESTDRIVER1) && \
263 defined(LIBTESTDRIVER1_MBEDTLS_PSA_BUILTIN_AEAD)
264 mbedtls_test_driver_aead_hooks.driver_status =
265 libtestdriver1_mbedtls_psa_aead_set_lengths(operation, ad_length,
266 plaintext_length);
Przemek Stekielbd99a022022-10-02 21:01:23 +0200267#elif defined(MBEDTLS_PSA_BUILTIN_AEAD)
Paul Elliottdff6c5d2021-09-28 11:00:20 +0100268 mbedtls_test_driver_aead_hooks.driver_status =
Gilles Peskine449bd832023-01-11 14:50:10 +0100269 mbedtls_psa_aead_set_lengths(operation, ad_length,
270 plaintext_length);
Ronald Cron73c9d9e2021-04-09 11:09:54 +0200271#else
272 (void) operation;
273 (void) ad_length;
274 (void) plaintext_length;
275 mbedtls_test_driver_aead_hooks.driver_status = PSA_ERROR_NOT_SUPPORTED;
276#endif
Paul Elliott4bbe82b2021-04-27 12:11:56 +0100277 }
278
Gilles Peskine449bd832023-01-11 14:50:10 +0100279 return mbedtls_test_driver_aead_hooks.driver_status;
Paul Elliott4bbe82b2021-04-27 12:11:56 +0100280}
281
Paul Elliotta218ceb2021-05-07 15:10:31 +0100282psa_status_t mbedtls_test_transparent_aead_update_ad(
Paul Elliottcbbde5f2021-05-10 18:19:46 +0100283 mbedtls_transparent_test_driver_aead_operation_t *operation,
Paul Elliott4bbe82b2021-04-27 12:11:56 +0100284 const uint8_t *input,
Gilles Peskine449bd832023-01-11 14:50:10 +0100285 size_t input_length)
Paul Elliott4bbe82b2021-04-27 12:11:56 +0100286{
Paul Elliottfcb5cdc2021-06-23 09:40:12 +0100287 mbedtls_test_driver_aead_hooks.hits_update_ad++;
Paul Elliott4bbe82b2021-04-27 12:11:56 +0100288
Gilles Peskine449bd832023-01-11 14:50:10 +0100289 if (mbedtls_test_driver_aead_hooks.forced_status != PSA_SUCCESS) {
Przemek Stekielbd99a022022-10-02 21:01:23 +0200290 mbedtls_test_driver_aead_hooks.driver_status =
Gilles Peskine449bd832023-01-11 14:50:10 +0100291 mbedtls_test_driver_aead_hooks.forced_status;
292 } else {
293#if defined(MBEDTLS_TEST_LIBTESTDRIVER1) && \
294 defined(LIBTESTDRIVER1_MBEDTLS_PSA_BUILTIN_AEAD)
295 mbedtls_test_driver_aead_hooks.driver_status =
296 libtestdriver1_mbedtls_psa_aead_update_ad(operation, input, input_length);
Przemek Stekielbd99a022022-10-02 21:01:23 +0200297#elif defined(MBEDTLS_PSA_BUILTIN_AEAD)
Paul Elliotta218ceb2021-05-07 15:10:31 +0100298 mbedtls_test_driver_aead_hooks.driver_status =
Gilles Peskine449bd832023-01-11 14:50:10 +0100299 mbedtls_psa_aead_update_ad(operation, input, input_length);
Ronald Cron73c9d9e2021-04-09 11:09:54 +0200300#else
301 (void) operation;
302 (void) input;
303 (void) input_length;
304 mbedtls_test_driver_aead_hooks.driver_status = PSA_ERROR_NOT_SUPPORTED;
305#endif
Paul Elliott4bbe82b2021-04-27 12:11:56 +0100306 }
307
Gilles Peskine449bd832023-01-11 14:50:10 +0100308 return mbedtls_test_driver_aead_hooks.driver_status;
Paul Elliott4bbe82b2021-04-27 12:11:56 +0100309}
310
Paul Elliotta218ceb2021-05-07 15:10:31 +0100311psa_status_t mbedtls_test_transparent_aead_update(
Gilles Peskine449bd832023-01-11 14:50:10 +0100312 mbedtls_transparent_test_driver_aead_operation_t *operation,
313 const uint8_t *input,
314 size_t input_length,
315 uint8_t *output,
316 size_t output_size,
317 size_t *output_length)
Paul Elliott4bbe82b2021-04-27 12:11:56 +0100318{
Paul Elliottfcb5cdc2021-06-23 09:40:12 +0100319 mbedtls_test_driver_aead_hooks.hits_update++;
Paul Elliott4bbe82b2021-04-27 12:11:56 +0100320
Gilles Peskine449bd832023-01-11 14:50:10 +0100321 if (mbedtls_test_driver_aead_hooks.forced_status != PSA_SUCCESS) {
Przemek Stekielbd99a022022-10-02 21:01:23 +0200322 mbedtls_test_driver_aead_hooks.driver_status =
Gilles Peskine449bd832023-01-11 14:50:10 +0100323 mbedtls_test_driver_aead_hooks.forced_status;
324 } else {
325#if defined(MBEDTLS_TEST_LIBTESTDRIVER1) && \
326 defined(LIBTESTDRIVER1_MBEDTLS_PSA_BUILTIN_AEAD)
327 mbedtls_test_driver_aead_hooks.driver_status =
328 libtestdriver1_mbedtls_psa_aead_update(operation, input,
329 input_length, output,
330 output_size, output_length);
Przemek Stekielbd99a022022-10-02 21:01:23 +0200331#elif defined(MBEDTLS_PSA_BUILTIN_AEAD)
Paul Elliotta218ceb2021-05-07 15:10:31 +0100332 mbedtls_test_driver_aead_hooks.driver_status =
Gilles Peskine449bd832023-01-11 14:50:10 +0100333 mbedtls_psa_aead_update(operation, input, input_length, output,
334 output_size, output_length);
Ronald Cron73c9d9e2021-04-09 11:09:54 +0200335#else
336 (void) operation;
337 (void) input;
338 (void) input_length;
339 (void) output;
340 (void) output_size;
341 (void) output_length;
342 mbedtls_test_driver_aead_hooks.driver_status = PSA_ERROR_NOT_SUPPORTED;
343#endif
Paul Elliott4bbe82b2021-04-27 12:11:56 +0100344 }
345
Gilles Peskine449bd832023-01-11 14:50:10 +0100346 return mbedtls_test_driver_aead_hooks.driver_status;
Paul Elliott4bbe82b2021-04-27 12:11:56 +0100347}
348
Paul Elliotta218ceb2021-05-07 15:10:31 +0100349psa_status_t mbedtls_test_transparent_aead_finish(
Gilles Peskine449bd832023-01-11 14:50:10 +0100350 mbedtls_transparent_test_driver_aead_operation_t *operation,
351 uint8_t *ciphertext,
352 size_t ciphertext_size,
353 size_t *ciphertext_length,
354 uint8_t *tag,
355 size_t tag_size,
356 size_t *tag_length)
Paul Elliott4bbe82b2021-04-27 12:11:56 +0100357{
Gilles Peskine449bd832023-01-11 14:50:10 +0100358 mbedtls_test_driver_aead_hooks.hits_finish++;
Paul Elliott4bbe82b2021-04-27 12:11:56 +0100359
Gilles Peskine449bd832023-01-11 14:50:10 +0100360 if (mbedtls_test_driver_aead_hooks.forced_status != PSA_SUCCESS) {
Przemek Stekielbd99a022022-10-02 21:01:23 +0200361 mbedtls_test_driver_aead_hooks.driver_status =
Gilles Peskine449bd832023-01-11 14:50:10 +0100362 mbedtls_test_driver_aead_hooks.forced_status;
363 } else {
364#if defined(MBEDTLS_TEST_LIBTESTDRIVER1) && \
365 defined(LIBTESTDRIVER1_MBEDTLS_PSA_BUILTIN_AEAD)
366 mbedtls_test_driver_aead_hooks.driver_status =
367 libtestdriver1_mbedtls_psa_aead_finish(operation, ciphertext,
368 ciphertext_size, ciphertext_length,
369 tag, tag_size, tag_length);
Przemek Stekielbd99a022022-10-02 21:01:23 +0200370#elif defined(MBEDTLS_PSA_BUILTIN_AEAD)
Paul Elliotta218ceb2021-05-07 15:10:31 +0100371 mbedtls_test_driver_aead_hooks.driver_status =
Gilles Peskine449bd832023-01-11 14:50:10 +0100372 mbedtls_psa_aead_finish(operation, ciphertext, ciphertext_size,
373 ciphertext_length, tag, tag_size,
374 tag_length);
Ronald Cron73c9d9e2021-04-09 11:09:54 +0200375#else
376 (void) operation;
377 (void) ciphertext;
378 (void) ciphertext_size;
379 (void) ciphertext_length;
380 (void) tag;
381 (void) tag_size;
382 (void) tag_length;
383 mbedtls_test_driver_aead_hooks.driver_status = PSA_ERROR_NOT_SUPPORTED;
384#endif
Paul Elliott4bbe82b2021-04-27 12:11:56 +0100385 }
386
Gilles Peskine449bd832023-01-11 14:50:10 +0100387 return mbedtls_test_driver_aead_hooks.driver_status;
Paul Elliott4bbe82b2021-04-27 12:11:56 +0100388}
389
Paul Elliotta218ceb2021-05-07 15:10:31 +0100390psa_status_t mbedtls_test_transparent_aead_verify(
Gilles Peskine449bd832023-01-11 14:50:10 +0100391 mbedtls_transparent_test_driver_aead_operation_t *operation,
392 uint8_t *plaintext,
393 size_t plaintext_size,
394 size_t *plaintext_length,
395 const uint8_t *tag,
396 size_t tag_length)
Paul Elliott4bbe82b2021-04-27 12:11:56 +0100397{
Gilles Peskine449bd832023-01-11 14:50:10 +0100398 mbedtls_test_driver_aead_hooks.hits_verify++;
Paul Elliott4bbe82b2021-04-27 12:11:56 +0100399
Gilles Peskine449bd832023-01-11 14:50:10 +0100400 if (mbedtls_test_driver_aead_hooks.forced_status != PSA_SUCCESS) {
401 mbedtls_test_driver_aead_hooks.driver_status =
402 mbedtls_test_driver_aead_hooks.forced_status;
403 } else {
404 uint8_t check_tag[PSA_AEAD_TAG_MAX_SIZE];
405 size_t check_tag_length = 0;
Paul Elliott26f4aef2021-07-22 21:47:27 +0100406
Przemek Stekielbd99a022022-10-02 21:01:23 +0200407#if defined(MBEDTLS_TEST_LIBTESTDRIVER1) && \
Gilles Peskine449bd832023-01-11 14:50:10 +0100408 defined(LIBTESTDRIVER1_MBEDTLS_PSA_BUILTIN_AEAD)
Przemek Stekielbd99a022022-10-02 21:01:23 +0200409 mbedtls_test_driver_aead_hooks.driver_status =
Gilles Peskine449bd832023-01-11 14:50:10 +0100410 libtestdriver1_mbedtls_psa_aead_finish(operation,
411 plaintext,
412 plaintext_size,
413 plaintext_length,
414 check_tag,
415 sizeof(check_tag),
416 &check_tag_length);
Przemek Stekielbd99a022022-10-02 21:01:23 +0200417#elif defined(MBEDTLS_PSA_BUILTIN_AEAD)
Gilles Peskine449bd832023-01-11 14:50:10 +0100418 mbedtls_test_driver_aead_hooks.driver_status =
419 mbedtls_psa_aead_finish(operation,
420 plaintext,
421 plaintext_size,
422 plaintext_length,
423 check_tag,
424 sizeof(check_tag),
425 &check_tag_length);
Ronald Cron73c9d9e2021-04-09 11:09:54 +0200426#else
427 (void) operation;
428 (void) plaintext;
429 (void) plaintext_size;
430 (void) plaintext_length;
431 mbedtls_test_driver_aead_hooks.driver_status = PSA_ERROR_NOT_SUPPORTED;
432#endif
Paul Elliott26f4aef2021-07-22 21:47:27 +0100433
Gilles Peskine449bd832023-01-11 14:50:10 +0100434 if (mbedtls_test_driver_aead_hooks.driver_status == PSA_SUCCESS) {
435 if (tag_length != check_tag_length ||
Dave Rodgman33e1f422023-08-29 18:17:29 +0100436 mbedtls_ct_memcmp(tag, check_tag, tag_length)
Gilles Peskine449bd832023-01-11 14:50:10 +0100437 != 0) {
438 mbedtls_test_driver_aead_hooks.driver_status =
439 PSA_ERROR_INVALID_SIGNATURE;
440 }
441 }
Paul Elliott0f32b7d2021-09-20 18:46:03 +0100442
Gilles Peskine449bd832023-01-11 14:50:10 +0100443 mbedtls_platform_zeroize(check_tag, sizeof(check_tag));
Paul Elliott4bbe82b2021-04-27 12:11:56 +0100444 }
445
Gilles Peskine449bd832023-01-11 14:50:10 +0100446 return mbedtls_test_driver_aead_hooks.driver_status;
Paul Elliott4bbe82b2021-04-27 12:11:56 +0100447}
448
Paul Elliotta218ceb2021-05-07 15:10:31 +0100449psa_status_t mbedtls_test_transparent_aead_abort(
Gilles Peskine449bd832023-01-11 14:50:10 +0100450 mbedtls_transparent_test_driver_aead_operation_t *operation)
Paul Elliott4bbe82b2021-04-27 12:11:56 +0100451{
Gilles Peskine449bd832023-01-11 14:50:10 +0100452 mbedtls_test_driver_aead_hooks.hits_abort++;
Paul Elliott4bbe82b2021-04-27 12:11:56 +0100453
Gilles Peskine449bd832023-01-11 14:50:10 +0100454 if (mbedtls_test_driver_aead_hooks.forced_status != PSA_SUCCESS) {
Przemek Stekielbd99a022022-10-02 21:01:23 +0200455 mbedtls_test_driver_aead_hooks.driver_status =
Gilles Peskine449bd832023-01-11 14:50:10 +0100456 mbedtls_test_driver_aead_hooks.forced_status;
457 } else {
458#if defined(MBEDTLS_TEST_LIBTESTDRIVER1) && \
459 defined(LIBTESTDRIVER1_MBEDTLS_PSA_BUILTIN_AEAD)
460 mbedtls_test_driver_aead_hooks.driver_status =
461 libtestdriver1_mbedtls_psa_aead_abort(operation);
Przemek Stekielbd99a022022-10-02 21:01:23 +0200462#elif defined(MBEDTLS_PSA_BUILTIN_AEAD)
Paul Elliotta218ceb2021-05-07 15:10:31 +0100463 mbedtls_test_driver_aead_hooks.driver_status =
Gilles Peskine449bd832023-01-11 14:50:10 +0100464 mbedtls_psa_aead_abort(operation);
Ronald Cron73c9d9e2021-04-09 11:09:54 +0200465#else
466 (void) operation;
467 mbedtls_test_driver_aead_hooks.driver_status = PSA_ERROR_NOT_SUPPORTED;
468#endif
Paul Elliott4bbe82b2021-04-27 12:11:56 +0100469 }
470
Gilles Peskine449bd832023-01-11 14:50:10 +0100471 return mbedtls_test_driver_aead_hooks.driver_status;
Paul Elliott4bbe82b2021-04-27 12:11:56 +0100472}
473
Ronald Crone6e6b752023-01-16 16:56:51 +0100474#endif /* PSA_CRYPTO_DRIVER_TEST */