blob: 314ce83a256b0c7e2325912bb50cf4821cf925d9 [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
Dave Rodgman16799db2023-11-02 19:47:20 +00005 * SPDX-License-Identifier: Apache-2.0 OR GPL-2.0-or-later
Ronald Cronde822812021-03-17 16:08:20 +01006 */
7
Mateusz Starzyk2c09c9b2021-05-14 22:20:10 +02008#include <test/helpers.h>
Ronald Cronde822812021-03-17 16:08:20 +01009
Ronald Crone6e6b752023-01-16 16:56:51 +010010#if defined(PSA_CRYPTO_DRIVER_TEST)
Ronald Cronde822812021-03-17 16:08:20 +010011#include "psa_crypto_aead.h"
Paul Elliott0a6a5692021-07-23 15:29:21 +010012#include "psa_crypto_core.h"
Ronald Cronde822812021-03-17 16:08:20 +010013
14#include "test/drivers/aead.h"
15
Dave Rodgman33e1f422023-08-29 18:17:29 +010016#include "mbedtls/constant_time.h"
17
Przemek Stekielbd99a022022-10-02 21:01:23 +020018#if defined(MBEDTLS_TEST_LIBTESTDRIVER1)
19#include "libtestdriver1/library/psa_crypto_aead.h"
20#endif
21
Ronald Cron7f13fa22021-04-13 12:41:34 +020022mbedtls_test_driver_aead_hooks_t
23 mbedtls_test_driver_aead_hooks = MBEDTLS_TEST_DRIVER_AEAD_INIT;
Ronald Cronbfe551d2021-03-23 09:33:25 +010024
Ronald Cron7f13fa22021-04-13 12:41:34 +020025psa_status_t mbedtls_test_transparent_aead_encrypt(
Ronald Cronde822812021-03-17 16:08:20 +010026 const psa_key_attributes_t *attributes,
27 const uint8_t *key_buffer, size_t key_buffer_size,
28 psa_algorithm_t alg,
29 const uint8_t *nonce, size_t nonce_length,
30 const uint8_t *additional_data, size_t additional_data_length,
31 const uint8_t *plaintext, size_t plaintext_length,
Gilles Peskine449bd832023-01-11 14:50:10 +010032 uint8_t *ciphertext, size_t ciphertext_size, size_t *ciphertext_length)
Ronald Cronde822812021-03-17 16:08:20 +010033{
Paul Elliottfcb5cdc2021-06-23 09:40:12 +010034 mbedtls_test_driver_aead_hooks.hits_encrypt++;
Ronald Cronbfe551d2021-03-23 09:33:25 +010035
Gilles Peskine449bd832023-01-11 14:50:10 +010036 if (mbedtls_test_driver_aead_hooks.forced_status != PSA_SUCCESS) {
37 mbedtls_test_driver_aead_hooks.driver_status =
38 mbedtls_test_driver_aead_hooks.forced_status;
39 } else {
Przemek Stekielbd99a022022-10-02 21:01:23 +020040#if defined(MBEDTLS_TEST_LIBTESTDRIVER1) && \
Gilles Peskine449bd832023-01-11 14:50:10 +010041 defined(LIBTESTDRIVER1_MBEDTLS_PSA_BUILTIN_AEAD)
Przemek Stekielbd99a022022-10-02 21:01:23 +020042 mbedtls_test_driver_aead_hooks.driver_status =
43 libtestdriver1_mbedtls_psa_aead_encrypt(
Gilles Peskine449bd832023-01-11 14:50:10 +010044 (const libtestdriver1_psa_key_attributes_t *) attributes,
Przemek Stekielbd99a022022-10-02 21:01:23 +020045 key_buffer, key_buffer_size,
46 alg,
47 nonce, nonce_length,
48 additional_data, additional_data_length,
49 plaintext, plaintext_length,
Gilles Peskine449bd832023-01-11 14:50:10 +010050 ciphertext, ciphertext_size, ciphertext_length);
Przemek Stekielbd99a022022-10-02 21:01:23 +020051#elif defined(MBEDTLS_PSA_BUILTIN_AEAD)
Ronald Cron7f13fa22021-04-13 12:41:34 +020052 mbedtls_test_driver_aead_hooks.driver_status =
Ronald Cronbfe551d2021-03-23 09:33:25 +010053 mbedtls_psa_aead_encrypt(
Ronald Cronde822812021-03-17 16:08:20 +010054 attributes, key_buffer, key_buffer_size,
55 alg,
56 nonce, nonce_length,
57 additional_data, additional_data_length,
58 plaintext, plaintext_length,
Gilles Peskine449bd832023-01-11 14:50:10 +010059 ciphertext, ciphertext_size, ciphertext_length);
Ronald Cron73c9d9e2021-04-09 11:09:54 +020060#else
61 (void) attributes;
62 (void) key_buffer;
63 (void) key_buffer_size;
64 (void) alg;
65 (void) nonce;
66 (void) nonce_length;
67 (void) additional_data;
68 (void) additional_data_length;
69 (void) plaintext;
70 (void) plaintext_length;
71 (void) ciphertext;
72 (void) ciphertext_size;
73 (void) ciphertext_length;
74 mbedtls_test_driver_aead_hooks.driver_status = PSA_ERROR_NOT_SUPPORTED;
75#endif
Ronald Cronbfe551d2021-03-23 09:33:25 +010076 }
77
Gilles Peskine449bd832023-01-11 14:50:10 +010078 return mbedtls_test_driver_aead_hooks.driver_status;
Ronald Cronde822812021-03-17 16:08:20 +010079}
80
Ronald Cron7f13fa22021-04-13 12:41:34 +020081psa_status_t mbedtls_test_transparent_aead_decrypt(
Ronald Cronde822812021-03-17 16:08:20 +010082 const psa_key_attributes_t *attributes,
83 const uint8_t *key_buffer, size_t key_buffer_size,
84 psa_algorithm_t alg,
85 const uint8_t *nonce, size_t nonce_length,
86 const uint8_t *additional_data, size_t additional_data_length,
87 const uint8_t *ciphertext, size_t ciphertext_length,
Gilles Peskine449bd832023-01-11 14:50:10 +010088 uint8_t *plaintext, size_t plaintext_size, size_t *plaintext_length)
Ronald Cronde822812021-03-17 16:08:20 +010089{
Paul Elliottfcb5cdc2021-06-23 09:40:12 +010090 mbedtls_test_driver_aead_hooks.hits_decrypt++;
Ronald Cronbfe551d2021-03-23 09:33:25 +010091
Gilles Peskine449bd832023-01-11 14:50:10 +010092 if (mbedtls_test_driver_aead_hooks.forced_status != PSA_SUCCESS) {
93 mbedtls_test_driver_aead_hooks.driver_status =
94 mbedtls_test_driver_aead_hooks.forced_status;
95 } else {
Przemek Stekielbd99a022022-10-02 21:01:23 +020096#if defined(MBEDTLS_TEST_LIBTESTDRIVER1) && \
Gilles Peskine449bd832023-01-11 14:50:10 +010097 defined(LIBTESTDRIVER1_MBEDTLS_PSA_BUILTIN_AEAD)
Przemek Stekielbd99a022022-10-02 21:01:23 +020098 mbedtls_test_driver_aead_hooks.driver_status =
99 libtestdriver1_mbedtls_psa_aead_decrypt(
Gilles Peskine449bd832023-01-11 14:50:10 +0100100 (const libtestdriver1_psa_key_attributes_t *) attributes,
Przemek Stekielbd99a022022-10-02 21:01:23 +0200101 key_buffer, key_buffer_size,
102 alg,
103 nonce, nonce_length,
104 additional_data, additional_data_length,
105 ciphertext, ciphertext_length,
Gilles Peskine449bd832023-01-11 14:50:10 +0100106 plaintext, plaintext_size, plaintext_length);
Przemek Stekielbd99a022022-10-02 21:01:23 +0200107#elif defined(MBEDTLS_PSA_BUILTIN_AEAD)
Ronald Cron7f13fa22021-04-13 12:41:34 +0200108 mbedtls_test_driver_aead_hooks.driver_status =
Ronald Cronbfe551d2021-03-23 09:33:25 +0100109 mbedtls_psa_aead_decrypt(
Ronald Cronde822812021-03-17 16:08:20 +0100110 attributes, key_buffer, key_buffer_size,
111 alg,
112 nonce, nonce_length,
113 additional_data, additional_data_length,
114 ciphertext, ciphertext_length,
Gilles Peskine449bd832023-01-11 14:50:10 +0100115 plaintext, plaintext_size, plaintext_length);
Ronald Cron73c9d9e2021-04-09 11:09:54 +0200116#else
117 (void) attributes;
118 (void) key_buffer;
119 (void) key_buffer_size;
120 (void) alg;
121 (void) nonce;
122 (void) nonce_length;
123 (void) additional_data;
124 (void) additional_data_length;
125 (void) ciphertext;
126 (void) ciphertext_length;
127 (void) plaintext;
128 (void) plaintext_size;
129 (void) plaintext_length;
130 mbedtls_test_driver_aead_hooks.driver_status = PSA_ERROR_NOT_SUPPORTED;
131#endif
Ronald Cronbfe551d2021-03-23 09:33:25 +0100132 }
133
Gilles Peskine449bd832023-01-11 14:50:10 +0100134 return mbedtls_test_driver_aead_hooks.driver_status;
Ronald Cronde822812021-03-17 16:08:20 +0100135}
136
Paul Elliotta218ceb2021-05-07 15:10:31 +0100137psa_status_t mbedtls_test_transparent_aead_encrypt_setup(
Paul Elliottcbbde5f2021-05-10 18:19:46 +0100138 mbedtls_transparent_test_driver_aead_operation_t *operation,
Paul Elliott4bbe82b2021-04-27 12:11:56 +0100139 const psa_key_attributes_t *attributes,
140 const uint8_t *key_buffer, size_t key_buffer_size,
Gilles Peskine449bd832023-01-11 14:50:10 +0100141 psa_algorithm_t alg)
Paul Elliott4bbe82b2021-04-27 12:11:56 +0100142{
Paul Elliottfcb5cdc2021-06-23 09:40:12 +0100143 mbedtls_test_driver_aead_hooks.hits_encrypt_setup++;
Paul Elliott4bbe82b2021-04-27 12:11:56 +0100144
Gilles Peskine449bd832023-01-11 14:50:10 +0100145 if (mbedtls_test_driver_aead_hooks.forced_status != PSA_SUCCESS) {
Przemek Stekielbd99a022022-10-02 21:01:23 +0200146 mbedtls_test_driver_aead_hooks.driver_status =
Gilles Peskine449bd832023-01-11 14:50:10 +0100147 mbedtls_test_driver_aead_hooks.forced_status;
148 } else {
149#if defined(MBEDTLS_TEST_LIBTESTDRIVER1) && \
150 defined(LIBTESTDRIVER1_MBEDTLS_PSA_BUILTIN_AEAD)
151 mbedtls_test_driver_aead_hooks.driver_status =
152 libtestdriver1_mbedtls_psa_aead_encrypt_setup(operation,
153 (const libtestdriver1_psa_key_attributes_t
154 *) attributes,
155 key_buffer,
156 key_buffer_size, alg);
Przemek Stekielbd99a022022-10-02 21:01:23 +0200157#elif defined(MBEDTLS_PSA_BUILTIN_AEAD)
Paul Elliotta218ceb2021-05-07 15:10:31 +0100158 mbedtls_test_driver_aead_hooks.driver_status =
Gilles Peskine449bd832023-01-11 14:50:10 +0100159 mbedtls_psa_aead_encrypt_setup(operation, attributes, key_buffer,
160 key_buffer_size, alg);
Ronald Cron73c9d9e2021-04-09 11:09:54 +0200161#else
162 (void) operation;
163 (void) attributes;
164 (void) key_buffer;
165 (void) key_buffer_size;
166 (void) alg;
167 mbedtls_test_driver_aead_hooks.driver_status = PSA_ERROR_NOT_SUPPORTED;
168#endif
Paul Elliott4bbe82b2021-04-27 12:11:56 +0100169 }
170
Gilles Peskine449bd832023-01-11 14:50:10 +0100171 return mbedtls_test_driver_aead_hooks.driver_status;
Paul Elliott4bbe82b2021-04-27 12:11:56 +0100172}
173
Paul Elliotta218ceb2021-05-07 15:10:31 +0100174psa_status_t mbedtls_test_transparent_aead_decrypt_setup(
Paul Elliottcbbde5f2021-05-10 18:19:46 +0100175 mbedtls_transparent_test_driver_aead_operation_t *operation,
Paul Elliott4bbe82b2021-04-27 12:11:56 +0100176 const psa_key_attributes_t *attributes,
177 const uint8_t *key_buffer, size_t key_buffer_size,
Gilles Peskine449bd832023-01-11 14:50:10 +0100178 psa_algorithm_t alg)
Paul Elliott4bbe82b2021-04-27 12:11:56 +0100179{
Paul Elliottfcb5cdc2021-06-23 09:40:12 +0100180 mbedtls_test_driver_aead_hooks.hits_decrypt_setup++;
Paul Elliott4bbe82b2021-04-27 12:11:56 +0100181
Gilles Peskine449bd832023-01-11 14:50:10 +0100182 if (mbedtls_test_driver_aead_hooks.forced_status != PSA_SUCCESS) {
Przemek Stekielbd99a022022-10-02 21:01:23 +0200183 mbedtls_test_driver_aead_hooks.driver_status =
Gilles Peskine449bd832023-01-11 14:50:10 +0100184 mbedtls_test_driver_aead_hooks.forced_status;
185 } else {
186#if defined(MBEDTLS_TEST_LIBTESTDRIVER1) && \
187 defined(LIBTESTDRIVER1_MBEDTLS_PSA_BUILTIN_AEAD)
188 mbedtls_test_driver_aead_hooks.driver_status =
189 libtestdriver1_mbedtls_psa_aead_decrypt_setup(operation,
190 (const libtestdriver1_psa_key_attributes_t
191 *) attributes,
192 key_buffer, key_buffer_size, alg);
Przemek Stekielbd99a022022-10-02 21:01:23 +0200193#elif defined(MBEDTLS_PSA_BUILTIN_AEAD)
Paul Elliotta218ceb2021-05-07 15:10:31 +0100194 mbedtls_test_driver_aead_hooks.driver_status =
Gilles Peskine449bd832023-01-11 14:50:10 +0100195 mbedtls_psa_aead_decrypt_setup(operation, attributes, key_buffer,
196 key_buffer_size, alg);
Ronald Cron73c9d9e2021-04-09 11:09:54 +0200197#else
198 (void) operation;
199 (void) attributes;
200 (void) key_buffer;
201 (void) key_buffer_size;
202 (void) alg;
203 mbedtls_test_driver_aead_hooks.driver_status = PSA_ERROR_NOT_SUPPORTED;
204#endif
Paul Elliott4bbe82b2021-04-27 12:11:56 +0100205 }
206
Gilles Peskine449bd832023-01-11 14:50:10 +0100207 return mbedtls_test_driver_aead_hooks.driver_status;
Paul Elliott4bbe82b2021-04-27 12:11:56 +0100208}
209
Paul Elliotta218ceb2021-05-07 15:10:31 +0100210psa_status_t mbedtls_test_transparent_aead_set_nonce(
Paul Elliottcbbde5f2021-05-10 18:19:46 +0100211 mbedtls_transparent_test_driver_aead_operation_t *operation,
Paul Elliott4bbe82b2021-04-27 12:11:56 +0100212 const uint8_t *nonce,
Gilles Peskine449bd832023-01-11 14:50:10 +0100213 size_t nonce_length)
Paul Elliott4bbe82b2021-04-27 12:11:56 +0100214{
Paul Elliottfcb5cdc2021-06-23 09:40:12 +0100215 mbedtls_test_driver_aead_hooks.hits_set_nonce++;
Paul Elliott4bbe82b2021-04-27 12:11:56 +0100216
Gilles Peskine449bd832023-01-11 14:50:10 +0100217 if (mbedtls_test_driver_aead_hooks.forced_status != PSA_SUCCESS) {
Przemek Stekielbd99a022022-10-02 21:01:23 +0200218 mbedtls_test_driver_aead_hooks.driver_status =
Gilles Peskine449bd832023-01-11 14:50:10 +0100219 mbedtls_test_driver_aead_hooks.forced_status;
220 } else {
221#if defined(MBEDTLS_TEST_LIBTESTDRIVER1) && \
222 defined(LIBTESTDRIVER1_MBEDTLS_PSA_BUILTIN_AEAD)
223 mbedtls_test_driver_aead_hooks.driver_status =
224 libtestdriver1_mbedtls_psa_aead_set_nonce(operation, nonce, nonce_length);
Przemek Stekielbd99a022022-10-02 21:01:23 +0200225#elif defined(MBEDTLS_PSA_BUILTIN_AEAD)
Paul Elliotta218ceb2021-05-07 15:10:31 +0100226 mbedtls_test_driver_aead_hooks.driver_status =
Gilles Peskine449bd832023-01-11 14:50:10 +0100227 mbedtls_psa_aead_set_nonce(operation, nonce, nonce_length);
Ronald Cron73c9d9e2021-04-09 11:09:54 +0200228#else
229 (void) operation;
230 (void) nonce;
231 (void) nonce_length;
232 mbedtls_test_driver_aead_hooks.driver_status = PSA_ERROR_NOT_SUPPORTED;
233#endif
Paul Elliott4bbe82b2021-04-27 12:11:56 +0100234 }
235
Gilles Peskine449bd832023-01-11 14:50:10 +0100236 return mbedtls_test_driver_aead_hooks.driver_status;
Paul Elliott4bbe82b2021-04-27 12:11:56 +0100237}
238
Paul Elliotta218ceb2021-05-07 15:10:31 +0100239psa_status_t mbedtls_test_transparent_aead_set_lengths(
Paul Elliottcbbde5f2021-05-10 18:19:46 +0100240 mbedtls_transparent_test_driver_aead_operation_t *operation,
Paul Elliott4bbe82b2021-04-27 12:11:56 +0100241 size_t ad_length,
Gilles Peskine449bd832023-01-11 14:50:10 +0100242 size_t plaintext_length)
Paul Elliott4bbe82b2021-04-27 12:11:56 +0100243{
Paul Elliottfcb5cdc2021-06-23 09:40:12 +0100244 mbedtls_test_driver_aead_hooks.hits_set_lengths++;
Paul Elliott4bbe82b2021-04-27 12:11:56 +0100245
Gilles Peskine449bd832023-01-11 14:50:10 +0100246 if (mbedtls_test_driver_aead_hooks.forced_status != PSA_SUCCESS) {
Przemek Stekielbd99a022022-10-02 21:01:23 +0200247 mbedtls_test_driver_aead_hooks.driver_status =
Gilles Peskine449bd832023-01-11 14:50:10 +0100248 mbedtls_test_driver_aead_hooks.forced_status;
249 } else {
250#if defined(MBEDTLS_TEST_LIBTESTDRIVER1) && \
251 defined(LIBTESTDRIVER1_MBEDTLS_PSA_BUILTIN_AEAD)
252 mbedtls_test_driver_aead_hooks.driver_status =
253 libtestdriver1_mbedtls_psa_aead_set_lengths(operation, ad_length,
254 plaintext_length);
Przemek Stekielbd99a022022-10-02 21:01:23 +0200255#elif defined(MBEDTLS_PSA_BUILTIN_AEAD)
Paul Elliottdff6c5d2021-09-28 11:00:20 +0100256 mbedtls_test_driver_aead_hooks.driver_status =
Gilles Peskine449bd832023-01-11 14:50:10 +0100257 mbedtls_psa_aead_set_lengths(operation, ad_length,
258 plaintext_length);
Ronald Cron73c9d9e2021-04-09 11:09:54 +0200259#else
260 (void) operation;
261 (void) ad_length;
262 (void) plaintext_length;
263 mbedtls_test_driver_aead_hooks.driver_status = PSA_ERROR_NOT_SUPPORTED;
264#endif
Paul Elliott4bbe82b2021-04-27 12:11:56 +0100265 }
266
Gilles Peskine449bd832023-01-11 14:50:10 +0100267 return mbedtls_test_driver_aead_hooks.driver_status;
Paul Elliott4bbe82b2021-04-27 12:11:56 +0100268}
269
Paul Elliotta218ceb2021-05-07 15:10:31 +0100270psa_status_t mbedtls_test_transparent_aead_update_ad(
Paul Elliottcbbde5f2021-05-10 18:19:46 +0100271 mbedtls_transparent_test_driver_aead_operation_t *operation,
Paul Elliott4bbe82b2021-04-27 12:11:56 +0100272 const uint8_t *input,
Gilles Peskine449bd832023-01-11 14:50:10 +0100273 size_t input_length)
Paul Elliott4bbe82b2021-04-27 12:11:56 +0100274{
Paul Elliottfcb5cdc2021-06-23 09:40:12 +0100275 mbedtls_test_driver_aead_hooks.hits_update_ad++;
Paul Elliott4bbe82b2021-04-27 12:11:56 +0100276
Gilles Peskine449bd832023-01-11 14:50:10 +0100277 if (mbedtls_test_driver_aead_hooks.forced_status != PSA_SUCCESS) {
Przemek Stekielbd99a022022-10-02 21:01:23 +0200278 mbedtls_test_driver_aead_hooks.driver_status =
Gilles Peskine449bd832023-01-11 14:50:10 +0100279 mbedtls_test_driver_aead_hooks.forced_status;
280 } else {
281#if defined(MBEDTLS_TEST_LIBTESTDRIVER1) && \
282 defined(LIBTESTDRIVER1_MBEDTLS_PSA_BUILTIN_AEAD)
283 mbedtls_test_driver_aead_hooks.driver_status =
284 libtestdriver1_mbedtls_psa_aead_update_ad(operation, input, input_length);
Przemek Stekielbd99a022022-10-02 21:01:23 +0200285#elif defined(MBEDTLS_PSA_BUILTIN_AEAD)
Paul Elliotta218ceb2021-05-07 15:10:31 +0100286 mbedtls_test_driver_aead_hooks.driver_status =
Gilles Peskine449bd832023-01-11 14:50:10 +0100287 mbedtls_psa_aead_update_ad(operation, input, input_length);
Ronald Cron73c9d9e2021-04-09 11:09:54 +0200288#else
289 (void) operation;
290 (void) input;
291 (void) input_length;
292 mbedtls_test_driver_aead_hooks.driver_status = PSA_ERROR_NOT_SUPPORTED;
293#endif
Paul Elliott4bbe82b2021-04-27 12:11:56 +0100294 }
295
Gilles Peskine449bd832023-01-11 14:50:10 +0100296 return mbedtls_test_driver_aead_hooks.driver_status;
Paul Elliott4bbe82b2021-04-27 12:11:56 +0100297}
298
Paul Elliotta218ceb2021-05-07 15:10:31 +0100299psa_status_t mbedtls_test_transparent_aead_update(
Gilles Peskine449bd832023-01-11 14:50:10 +0100300 mbedtls_transparent_test_driver_aead_operation_t *operation,
301 const uint8_t *input,
302 size_t input_length,
303 uint8_t *output,
304 size_t output_size,
305 size_t *output_length)
Paul Elliott4bbe82b2021-04-27 12:11:56 +0100306{
Paul Elliottfcb5cdc2021-06-23 09:40:12 +0100307 mbedtls_test_driver_aead_hooks.hits_update++;
Paul Elliott4bbe82b2021-04-27 12:11:56 +0100308
Gilles Peskine449bd832023-01-11 14:50:10 +0100309 if (mbedtls_test_driver_aead_hooks.forced_status != PSA_SUCCESS) {
Przemek Stekielbd99a022022-10-02 21:01:23 +0200310 mbedtls_test_driver_aead_hooks.driver_status =
Gilles Peskine449bd832023-01-11 14:50:10 +0100311 mbedtls_test_driver_aead_hooks.forced_status;
312 } else {
313#if defined(MBEDTLS_TEST_LIBTESTDRIVER1) && \
314 defined(LIBTESTDRIVER1_MBEDTLS_PSA_BUILTIN_AEAD)
315 mbedtls_test_driver_aead_hooks.driver_status =
316 libtestdriver1_mbedtls_psa_aead_update(operation, input,
317 input_length, output,
318 output_size, output_length);
Przemek Stekielbd99a022022-10-02 21:01:23 +0200319#elif defined(MBEDTLS_PSA_BUILTIN_AEAD)
Paul Elliotta218ceb2021-05-07 15:10:31 +0100320 mbedtls_test_driver_aead_hooks.driver_status =
Gilles Peskine449bd832023-01-11 14:50:10 +0100321 mbedtls_psa_aead_update(operation, input, input_length, output,
322 output_size, output_length);
Ronald Cron73c9d9e2021-04-09 11:09:54 +0200323#else
324 (void) operation;
325 (void) input;
326 (void) input_length;
327 (void) output;
328 (void) output_size;
329 (void) output_length;
330 mbedtls_test_driver_aead_hooks.driver_status = PSA_ERROR_NOT_SUPPORTED;
331#endif
Paul Elliott4bbe82b2021-04-27 12:11:56 +0100332 }
333
Gilles Peskine449bd832023-01-11 14:50:10 +0100334 return mbedtls_test_driver_aead_hooks.driver_status;
Paul Elliott4bbe82b2021-04-27 12:11:56 +0100335}
336
Paul Elliotta218ceb2021-05-07 15:10:31 +0100337psa_status_t mbedtls_test_transparent_aead_finish(
Gilles Peskine449bd832023-01-11 14:50:10 +0100338 mbedtls_transparent_test_driver_aead_operation_t *operation,
339 uint8_t *ciphertext,
340 size_t ciphertext_size,
341 size_t *ciphertext_length,
342 uint8_t *tag,
343 size_t tag_size,
344 size_t *tag_length)
Paul Elliott4bbe82b2021-04-27 12:11:56 +0100345{
Gilles Peskine449bd832023-01-11 14:50:10 +0100346 mbedtls_test_driver_aead_hooks.hits_finish++;
Paul Elliott4bbe82b2021-04-27 12:11:56 +0100347
Gilles Peskine449bd832023-01-11 14:50:10 +0100348 if (mbedtls_test_driver_aead_hooks.forced_status != PSA_SUCCESS) {
Przemek Stekielbd99a022022-10-02 21:01:23 +0200349 mbedtls_test_driver_aead_hooks.driver_status =
Gilles Peskine449bd832023-01-11 14:50:10 +0100350 mbedtls_test_driver_aead_hooks.forced_status;
351 } else {
352#if defined(MBEDTLS_TEST_LIBTESTDRIVER1) && \
353 defined(LIBTESTDRIVER1_MBEDTLS_PSA_BUILTIN_AEAD)
354 mbedtls_test_driver_aead_hooks.driver_status =
355 libtestdriver1_mbedtls_psa_aead_finish(operation, ciphertext,
356 ciphertext_size, ciphertext_length,
357 tag, tag_size, tag_length);
Przemek Stekielbd99a022022-10-02 21:01:23 +0200358#elif defined(MBEDTLS_PSA_BUILTIN_AEAD)
Paul Elliotta218ceb2021-05-07 15:10:31 +0100359 mbedtls_test_driver_aead_hooks.driver_status =
Gilles Peskine449bd832023-01-11 14:50:10 +0100360 mbedtls_psa_aead_finish(operation, ciphertext, ciphertext_size,
361 ciphertext_length, tag, tag_size,
362 tag_length);
Ronald Cron73c9d9e2021-04-09 11:09:54 +0200363#else
364 (void) operation;
365 (void) ciphertext;
366 (void) ciphertext_size;
367 (void) ciphertext_length;
368 (void) tag;
369 (void) tag_size;
370 (void) tag_length;
371 mbedtls_test_driver_aead_hooks.driver_status = PSA_ERROR_NOT_SUPPORTED;
372#endif
Paul Elliott4bbe82b2021-04-27 12:11:56 +0100373 }
374
Gilles Peskine449bd832023-01-11 14:50:10 +0100375 return mbedtls_test_driver_aead_hooks.driver_status;
Paul Elliott4bbe82b2021-04-27 12:11:56 +0100376}
377
Paul Elliotta218ceb2021-05-07 15:10:31 +0100378psa_status_t mbedtls_test_transparent_aead_verify(
Gilles Peskine449bd832023-01-11 14:50:10 +0100379 mbedtls_transparent_test_driver_aead_operation_t *operation,
380 uint8_t *plaintext,
381 size_t plaintext_size,
382 size_t *plaintext_length,
383 const uint8_t *tag,
384 size_t tag_length)
Paul Elliott4bbe82b2021-04-27 12:11:56 +0100385{
Gilles Peskine449bd832023-01-11 14:50:10 +0100386 mbedtls_test_driver_aead_hooks.hits_verify++;
Paul Elliott4bbe82b2021-04-27 12:11:56 +0100387
Gilles Peskine449bd832023-01-11 14:50:10 +0100388 if (mbedtls_test_driver_aead_hooks.forced_status != PSA_SUCCESS) {
389 mbedtls_test_driver_aead_hooks.driver_status =
390 mbedtls_test_driver_aead_hooks.forced_status;
391 } else {
392 uint8_t check_tag[PSA_AEAD_TAG_MAX_SIZE];
393 size_t check_tag_length = 0;
Paul Elliott26f4aef2021-07-22 21:47:27 +0100394
Przemek Stekielbd99a022022-10-02 21:01:23 +0200395#if defined(MBEDTLS_TEST_LIBTESTDRIVER1) && \
Gilles Peskine449bd832023-01-11 14:50:10 +0100396 defined(LIBTESTDRIVER1_MBEDTLS_PSA_BUILTIN_AEAD)
Przemek Stekielbd99a022022-10-02 21:01:23 +0200397 mbedtls_test_driver_aead_hooks.driver_status =
Gilles Peskine449bd832023-01-11 14:50:10 +0100398 libtestdriver1_mbedtls_psa_aead_finish(operation,
399 plaintext,
400 plaintext_size,
401 plaintext_length,
402 check_tag,
403 sizeof(check_tag),
404 &check_tag_length);
Przemek Stekielbd99a022022-10-02 21:01:23 +0200405#elif defined(MBEDTLS_PSA_BUILTIN_AEAD)
Gilles Peskine449bd832023-01-11 14:50:10 +0100406 mbedtls_test_driver_aead_hooks.driver_status =
407 mbedtls_psa_aead_finish(operation,
408 plaintext,
409 plaintext_size,
410 plaintext_length,
411 check_tag,
412 sizeof(check_tag),
413 &check_tag_length);
Ronald Cron73c9d9e2021-04-09 11:09:54 +0200414#else
415 (void) operation;
416 (void) plaintext;
417 (void) plaintext_size;
418 (void) plaintext_length;
419 mbedtls_test_driver_aead_hooks.driver_status = PSA_ERROR_NOT_SUPPORTED;
420#endif
Paul Elliott26f4aef2021-07-22 21:47:27 +0100421
Gilles Peskine449bd832023-01-11 14:50:10 +0100422 if (mbedtls_test_driver_aead_hooks.driver_status == PSA_SUCCESS) {
423 if (tag_length != check_tag_length ||
Dave Rodgman33e1f422023-08-29 18:17:29 +0100424 mbedtls_ct_memcmp(tag, check_tag, tag_length)
Gilles Peskine449bd832023-01-11 14:50:10 +0100425 != 0) {
426 mbedtls_test_driver_aead_hooks.driver_status =
427 PSA_ERROR_INVALID_SIGNATURE;
428 }
429 }
Paul Elliott0f32b7d2021-09-20 18:46:03 +0100430
Gilles Peskine449bd832023-01-11 14:50:10 +0100431 mbedtls_platform_zeroize(check_tag, sizeof(check_tag));
Paul Elliott4bbe82b2021-04-27 12:11:56 +0100432 }
433
Gilles Peskine449bd832023-01-11 14:50:10 +0100434 return mbedtls_test_driver_aead_hooks.driver_status;
Paul Elliott4bbe82b2021-04-27 12:11:56 +0100435}
436
Paul Elliotta218ceb2021-05-07 15:10:31 +0100437psa_status_t mbedtls_test_transparent_aead_abort(
Gilles Peskine449bd832023-01-11 14:50:10 +0100438 mbedtls_transparent_test_driver_aead_operation_t *operation)
Paul Elliott4bbe82b2021-04-27 12:11:56 +0100439{
Gilles Peskine449bd832023-01-11 14:50:10 +0100440 mbedtls_test_driver_aead_hooks.hits_abort++;
Paul Elliott4bbe82b2021-04-27 12:11:56 +0100441
Gilles Peskine449bd832023-01-11 14:50:10 +0100442 if (mbedtls_test_driver_aead_hooks.forced_status != PSA_SUCCESS) {
Przemek Stekielbd99a022022-10-02 21:01:23 +0200443 mbedtls_test_driver_aead_hooks.driver_status =
Gilles Peskine449bd832023-01-11 14:50:10 +0100444 mbedtls_test_driver_aead_hooks.forced_status;
445 } else {
446#if defined(MBEDTLS_TEST_LIBTESTDRIVER1) && \
447 defined(LIBTESTDRIVER1_MBEDTLS_PSA_BUILTIN_AEAD)
448 mbedtls_test_driver_aead_hooks.driver_status =
449 libtestdriver1_mbedtls_psa_aead_abort(operation);
Przemek Stekielbd99a022022-10-02 21:01:23 +0200450#elif defined(MBEDTLS_PSA_BUILTIN_AEAD)
Paul Elliotta218ceb2021-05-07 15:10:31 +0100451 mbedtls_test_driver_aead_hooks.driver_status =
Gilles Peskine449bd832023-01-11 14:50:10 +0100452 mbedtls_psa_aead_abort(operation);
Ronald Cron73c9d9e2021-04-09 11:09:54 +0200453#else
454 (void) operation;
455 mbedtls_test_driver_aead_hooks.driver_status = PSA_ERROR_NOT_SUPPORTED;
456#endif
Paul Elliott4bbe82b2021-04-27 12:11:56 +0100457 }
458
Gilles Peskine449bd832023-01-11 14:50:10 +0100459 return mbedtls_test_driver_aead_hooks.driver_status;
Paul Elliott4bbe82b2021-04-27 12:11:56 +0100460}
461
Ronald Crone6e6b752023-01-16 16:56:51 +0100462#endif /* PSA_CRYPTO_DRIVER_TEST */