blob: 6992a066d20f7b01f506b6ef521d7e4a21a9ef93 [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)
David Horstmann0d8287c2024-07-26 18:01:04 +010019#if MBEDTLS_VERSION_MAJOR < 4
20#include "libtestdriver1/library/psa_crypto_aead.h"
21#else
Ronald Cron69c489c2024-07-31 08:36:59 +020022#include "libtestdriver1/tf-psa-crypto/drivers/builtin/src/psa_crypto_aead.h"
Przemek Stekielbd99a022022-10-02 21:01:23 +020023#endif
David Horstmann0d8287c2024-07-26 18:01:04 +010024#endif
Przemek Stekielbd99a022022-10-02 21:01:23 +020025
Ronald Cron7f13fa22021-04-13 12:41:34 +020026mbedtls_test_driver_aead_hooks_t
27 mbedtls_test_driver_aead_hooks = MBEDTLS_TEST_DRIVER_AEAD_INIT;
Ronald Cronbfe551d2021-03-23 09:33:25 +010028
Ronald Cron7f13fa22021-04-13 12:41:34 +020029psa_status_t mbedtls_test_transparent_aead_encrypt(
Ronald Cronde822812021-03-17 16:08:20 +010030 const psa_key_attributes_t *attributes,
31 const uint8_t *key_buffer, size_t key_buffer_size,
32 psa_algorithm_t alg,
33 const uint8_t *nonce, size_t nonce_length,
34 const uint8_t *additional_data, size_t additional_data_length,
35 const uint8_t *plaintext, size_t plaintext_length,
Gilles Peskine449bd832023-01-11 14:50:10 +010036 uint8_t *ciphertext, size_t ciphertext_size, size_t *ciphertext_length)
Ronald Cronde822812021-03-17 16:08:20 +010037{
Paul Elliottfcb5cdc2021-06-23 09:40:12 +010038 mbedtls_test_driver_aead_hooks.hits_encrypt++;
Ronald Cronbfe551d2021-03-23 09:33:25 +010039
Gilles Peskine449bd832023-01-11 14:50:10 +010040 if (mbedtls_test_driver_aead_hooks.forced_status != PSA_SUCCESS) {
41 mbedtls_test_driver_aead_hooks.driver_status =
42 mbedtls_test_driver_aead_hooks.forced_status;
43 } else {
Przemek Stekielbd99a022022-10-02 21:01:23 +020044#if defined(MBEDTLS_TEST_LIBTESTDRIVER1) && \
Gilles Peskine449bd832023-01-11 14:50:10 +010045 defined(LIBTESTDRIVER1_MBEDTLS_PSA_BUILTIN_AEAD)
Przemek Stekielbd99a022022-10-02 21:01:23 +020046 mbedtls_test_driver_aead_hooks.driver_status =
47 libtestdriver1_mbedtls_psa_aead_encrypt(
Gilles Peskine449bd832023-01-11 14:50:10 +010048 (const libtestdriver1_psa_key_attributes_t *) attributes,
Przemek Stekielbd99a022022-10-02 21:01:23 +020049 key_buffer, key_buffer_size,
50 alg,
51 nonce, nonce_length,
52 additional_data, additional_data_length,
53 plaintext, plaintext_length,
Gilles Peskine449bd832023-01-11 14:50:10 +010054 ciphertext, ciphertext_size, ciphertext_length);
Przemek Stekielbd99a022022-10-02 21:01:23 +020055#elif defined(MBEDTLS_PSA_BUILTIN_AEAD)
Ronald Cron7f13fa22021-04-13 12:41:34 +020056 mbedtls_test_driver_aead_hooks.driver_status =
Ronald Cronbfe551d2021-03-23 09:33:25 +010057 mbedtls_psa_aead_encrypt(
Ronald Cronde822812021-03-17 16:08:20 +010058 attributes, key_buffer, key_buffer_size,
59 alg,
60 nonce, nonce_length,
61 additional_data, additional_data_length,
62 plaintext, plaintext_length,
Gilles Peskine449bd832023-01-11 14:50:10 +010063 ciphertext, ciphertext_size, ciphertext_length);
Ronald Cron73c9d9e2021-04-09 11:09:54 +020064#else
65 (void) attributes;
66 (void) key_buffer;
67 (void) key_buffer_size;
68 (void) alg;
69 (void) nonce;
70 (void) nonce_length;
71 (void) additional_data;
72 (void) additional_data_length;
73 (void) plaintext;
74 (void) plaintext_length;
75 (void) ciphertext;
76 (void) ciphertext_size;
77 (void) ciphertext_length;
78 mbedtls_test_driver_aead_hooks.driver_status = PSA_ERROR_NOT_SUPPORTED;
79#endif
Ronald Cronbfe551d2021-03-23 09:33:25 +010080 }
81
Gilles Peskine449bd832023-01-11 14:50:10 +010082 return mbedtls_test_driver_aead_hooks.driver_status;
Ronald Cronde822812021-03-17 16:08:20 +010083}
84
Ronald Cron7f13fa22021-04-13 12:41:34 +020085psa_status_t mbedtls_test_transparent_aead_decrypt(
Ronald Cronde822812021-03-17 16:08:20 +010086 const psa_key_attributes_t *attributes,
87 const uint8_t *key_buffer, size_t key_buffer_size,
88 psa_algorithm_t alg,
89 const uint8_t *nonce, size_t nonce_length,
90 const uint8_t *additional_data, size_t additional_data_length,
91 const uint8_t *ciphertext, size_t ciphertext_length,
Gilles Peskine449bd832023-01-11 14:50:10 +010092 uint8_t *plaintext, size_t plaintext_size, size_t *plaintext_length)
Ronald Cronde822812021-03-17 16:08:20 +010093{
Paul Elliottfcb5cdc2021-06-23 09:40:12 +010094 mbedtls_test_driver_aead_hooks.hits_decrypt++;
Ronald Cronbfe551d2021-03-23 09:33:25 +010095
Gilles Peskine449bd832023-01-11 14:50:10 +010096 if (mbedtls_test_driver_aead_hooks.forced_status != PSA_SUCCESS) {
97 mbedtls_test_driver_aead_hooks.driver_status =
98 mbedtls_test_driver_aead_hooks.forced_status;
99 } else {
Przemek Stekielbd99a022022-10-02 21:01:23 +0200100#if defined(MBEDTLS_TEST_LIBTESTDRIVER1) && \
Gilles Peskine449bd832023-01-11 14:50:10 +0100101 defined(LIBTESTDRIVER1_MBEDTLS_PSA_BUILTIN_AEAD)
Przemek Stekielbd99a022022-10-02 21:01:23 +0200102 mbedtls_test_driver_aead_hooks.driver_status =
103 libtestdriver1_mbedtls_psa_aead_decrypt(
Gilles Peskine449bd832023-01-11 14:50:10 +0100104 (const libtestdriver1_psa_key_attributes_t *) attributes,
Przemek Stekielbd99a022022-10-02 21:01:23 +0200105 key_buffer, key_buffer_size,
106 alg,
107 nonce, nonce_length,
108 additional_data, additional_data_length,
109 ciphertext, ciphertext_length,
Gilles Peskine449bd832023-01-11 14:50:10 +0100110 plaintext, plaintext_size, plaintext_length);
Przemek Stekielbd99a022022-10-02 21:01:23 +0200111#elif defined(MBEDTLS_PSA_BUILTIN_AEAD)
Ronald Cron7f13fa22021-04-13 12:41:34 +0200112 mbedtls_test_driver_aead_hooks.driver_status =
Ronald Cronbfe551d2021-03-23 09:33:25 +0100113 mbedtls_psa_aead_decrypt(
Ronald Cronde822812021-03-17 16:08:20 +0100114 attributes, key_buffer, key_buffer_size,
115 alg,
116 nonce, nonce_length,
117 additional_data, additional_data_length,
118 ciphertext, ciphertext_length,
Gilles Peskine449bd832023-01-11 14:50:10 +0100119 plaintext, plaintext_size, plaintext_length);
Ronald Cron73c9d9e2021-04-09 11:09:54 +0200120#else
121 (void) attributes;
122 (void) key_buffer;
123 (void) key_buffer_size;
124 (void) alg;
125 (void) nonce;
126 (void) nonce_length;
127 (void) additional_data;
128 (void) additional_data_length;
129 (void) ciphertext;
130 (void) ciphertext_length;
131 (void) plaintext;
132 (void) plaintext_size;
133 (void) plaintext_length;
134 mbedtls_test_driver_aead_hooks.driver_status = PSA_ERROR_NOT_SUPPORTED;
135#endif
Ronald Cronbfe551d2021-03-23 09:33:25 +0100136 }
137
Gilles Peskine449bd832023-01-11 14:50:10 +0100138 return mbedtls_test_driver_aead_hooks.driver_status;
Ronald Cronde822812021-03-17 16:08:20 +0100139}
140
Paul Elliotta218ceb2021-05-07 15:10:31 +0100141psa_status_t mbedtls_test_transparent_aead_encrypt_setup(
Paul Elliottcbbde5f2021-05-10 18:19:46 +0100142 mbedtls_transparent_test_driver_aead_operation_t *operation,
Paul Elliott4bbe82b2021-04-27 12:11:56 +0100143 const psa_key_attributes_t *attributes,
144 const uint8_t *key_buffer, size_t key_buffer_size,
Gilles Peskine449bd832023-01-11 14:50:10 +0100145 psa_algorithm_t alg)
Paul Elliott4bbe82b2021-04-27 12:11:56 +0100146{
Paul Elliottfcb5cdc2021-06-23 09:40:12 +0100147 mbedtls_test_driver_aead_hooks.hits_encrypt_setup++;
Paul Elliott4bbe82b2021-04-27 12:11:56 +0100148
Gilles Peskine449bd832023-01-11 14:50:10 +0100149 if (mbedtls_test_driver_aead_hooks.forced_status != PSA_SUCCESS) {
Przemek Stekielbd99a022022-10-02 21:01:23 +0200150 mbedtls_test_driver_aead_hooks.driver_status =
Gilles Peskine449bd832023-01-11 14:50:10 +0100151 mbedtls_test_driver_aead_hooks.forced_status;
152 } else {
153#if defined(MBEDTLS_TEST_LIBTESTDRIVER1) && \
154 defined(LIBTESTDRIVER1_MBEDTLS_PSA_BUILTIN_AEAD)
155 mbedtls_test_driver_aead_hooks.driver_status =
156 libtestdriver1_mbedtls_psa_aead_encrypt_setup(operation,
157 (const libtestdriver1_psa_key_attributes_t
158 *) attributes,
159 key_buffer,
160 key_buffer_size, alg);
Przemek Stekielbd99a022022-10-02 21:01:23 +0200161#elif defined(MBEDTLS_PSA_BUILTIN_AEAD)
Paul Elliotta218ceb2021-05-07 15:10:31 +0100162 mbedtls_test_driver_aead_hooks.driver_status =
Gilles Peskine449bd832023-01-11 14:50:10 +0100163 mbedtls_psa_aead_encrypt_setup(operation, attributes, key_buffer,
164 key_buffer_size, alg);
Ronald Cron73c9d9e2021-04-09 11:09:54 +0200165#else
166 (void) operation;
167 (void) attributes;
168 (void) key_buffer;
169 (void) key_buffer_size;
170 (void) alg;
171 mbedtls_test_driver_aead_hooks.driver_status = PSA_ERROR_NOT_SUPPORTED;
172#endif
Paul Elliott4bbe82b2021-04-27 12:11:56 +0100173 }
174
Gilles Peskine449bd832023-01-11 14:50:10 +0100175 return mbedtls_test_driver_aead_hooks.driver_status;
Paul Elliott4bbe82b2021-04-27 12:11:56 +0100176}
177
Paul Elliotta218ceb2021-05-07 15:10:31 +0100178psa_status_t mbedtls_test_transparent_aead_decrypt_setup(
Paul Elliottcbbde5f2021-05-10 18:19:46 +0100179 mbedtls_transparent_test_driver_aead_operation_t *operation,
Paul Elliott4bbe82b2021-04-27 12:11:56 +0100180 const psa_key_attributes_t *attributes,
181 const uint8_t *key_buffer, size_t key_buffer_size,
Gilles Peskine449bd832023-01-11 14:50:10 +0100182 psa_algorithm_t alg)
Paul Elliott4bbe82b2021-04-27 12:11:56 +0100183{
Paul Elliottfcb5cdc2021-06-23 09:40:12 +0100184 mbedtls_test_driver_aead_hooks.hits_decrypt_setup++;
Paul Elliott4bbe82b2021-04-27 12:11:56 +0100185
Gilles Peskine449bd832023-01-11 14:50:10 +0100186 if (mbedtls_test_driver_aead_hooks.forced_status != PSA_SUCCESS) {
Przemek Stekielbd99a022022-10-02 21:01:23 +0200187 mbedtls_test_driver_aead_hooks.driver_status =
Gilles Peskine449bd832023-01-11 14:50:10 +0100188 mbedtls_test_driver_aead_hooks.forced_status;
189 } else {
190#if defined(MBEDTLS_TEST_LIBTESTDRIVER1) && \
191 defined(LIBTESTDRIVER1_MBEDTLS_PSA_BUILTIN_AEAD)
192 mbedtls_test_driver_aead_hooks.driver_status =
193 libtestdriver1_mbedtls_psa_aead_decrypt_setup(operation,
194 (const libtestdriver1_psa_key_attributes_t
195 *) attributes,
196 key_buffer, key_buffer_size, alg);
Przemek Stekielbd99a022022-10-02 21:01:23 +0200197#elif defined(MBEDTLS_PSA_BUILTIN_AEAD)
Paul Elliotta218ceb2021-05-07 15:10:31 +0100198 mbedtls_test_driver_aead_hooks.driver_status =
Gilles Peskine449bd832023-01-11 14:50:10 +0100199 mbedtls_psa_aead_decrypt_setup(operation, attributes, key_buffer,
200 key_buffer_size, alg);
Ronald Cron73c9d9e2021-04-09 11:09:54 +0200201#else
202 (void) operation;
203 (void) attributes;
204 (void) key_buffer;
205 (void) key_buffer_size;
206 (void) alg;
207 mbedtls_test_driver_aead_hooks.driver_status = PSA_ERROR_NOT_SUPPORTED;
208#endif
Paul Elliott4bbe82b2021-04-27 12:11:56 +0100209 }
210
Gilles Peskine449bd832023-01-11 14:50:10 +0100211 return mbedtls_test_driver_aead_hooks.driver_status;
Paul Elliott4bbe82b2021-04-27 12:11:56 +0100212}
213
Paul Elliotta218ceb2021-05-07 15:10:31 +0100214psa_status_t mbedtls_test_transparent_aead_set_nonce(
Paul Elliottcbbde5f2021-05-10 18:19:46 +0100215 mbedtls_transparent_test_driver_aead_operation_t *operation,
Paul Elliott4bbe82b2021-04-27 12:11:56 +0100216 const uint8_t *nonce,
Gilles Peskine449bd832023-01-11 14:50:10 +0100217 size_t nonce_length)
Paul Elliott4bbe82b2021-04-27 12:11:56 +0100218{
Paul Elliottfcb5cdc2021-06-23 09:40:12 +0100219 mbedtls_test_driver_aead_hooks.hits_set_nonce++;
Paul Elliott4bbe82b2021-04-27 12:11:56 +0100220
Gilles Peskine449bd832023-01-11 14:50:10 +0100221 if (mbedtls_test_driver_aead_hooks.forced_status != PSA_SUCCESS) {
Przemek Stekielbd99a022022-10-02 21:01:23 +0200222 mbedtls_test_driver_aead_hooks.driver_status =
Gilles Peskine449bd832023-01-11 14:50:10 +0100223 mbedtls_test_driver_aead_hooks.forced_status;
224 } else {
225#if defined(MBEDTLS_TEST_LIBTESTDRIVER1) && \
226 defined(LIBTESTDRIVER1_MBEDTLS_PSA_BUILTIN_AEAD)
227 mbedtls_test_driver_aead_hooks.driver_status =
228 libtestdriver1_mbedtls_psa_aead_set_nonce(operation, nonce, nonce_length);
Przemek Stekielbd99a022022-10-02 21:01:23 +0200229#elif defined(MBEDTLS_PSA_BUILTIN_AEAD)
Paul Elliotta218ceb2021-05-07 15:10:31 +0100230 mbedtls_test_driver_aead_hooks.driver_status =
Gilles Peskine449bd832023-01-11 14:50:10 +0100231 mbedtls_psa_aead_set_nonce(operation, nonce, nonce_length);
Ronald Cron73c9d9e2021-04-09 11:09:54 +0200232#else
233 (void) operation;
234 (void) nonce;
235 (void) nonce_length;
236 mbedtls_test_driver_aead_hooks.driver_status = PSA_ERROR_NOT_SUPPORTED;
237#endif
Paul Elliott4bbe82b2021-04-27 12:11:56 +0100238 }
239
Gilles Peskine449bd832023-01-11 14:50:10 +0100240 return mbedtls_test_driver_aead_hooks.driver_status;
Paul Elliott4bbe82b2021-04-27 12:11:56 +0100241}
242
Paul Elliotta218ceb2021-05-07 15:10:31 +0100243psa_status_t mbedtls_test_transparent_aead_set_lengths(
Paul Elliottcbbde5f2021-05-10 18:19:46 +0100244 mbedtls_transparent_test_driver_aead_operation_t *operation,
Paul Elliott4bbe82b2021-04-27 12:11:56 +0100245 size_t ad_length,
Gilles Peskine449bd832023-01-11 14:50:10 +0100246 size_t plaintext_length)
Paul Elliott4bbe82b2021-04-27 12:11:56 +0100247{
Paul Elliottfcb5cdc2021-06-23 09:40:12 +0100248 mbedtls_test_driver_aead_hooks.hits_set_lengths++;
Paul Elliott4bbe82b2021-04-27 12:11:56 +0100249
Gilles Peskine449bd832023-01-11 14:50:10 +0100250 if (mbedtls_test_driver_aead_hooks.forced_status != PSA_SUCCESS) {
Przemek Stekielbd99a022022-10-02 21:01:23 +0200251 mbedtls_test_driver_aead_hooks.driver_status =
Gilles Peskine449bd832023-01-11 14:50:10 +0100252 mbedtls_test_driver_aead_hooks.forced_status;
253 } else {
254#if defined(MBEDTLS_TEST_LIBTESTDRIVER1) && \
255 defined(LIBTESTDRIVER1_MBEDTLS_PSA_BUILTIN_AEAD)
256 mbedtls_test_driver_aead_hooks.driver_status =
257 libtestdriver1_mbedtls_psa_aead_set_lengths(operation, ad_length,
258 plaintext_length);
Przemek Stekielbd99a022022-10-02 21:01:23 +0200259#elif defined(MBEDTLS_PSA_BUILTIN_AEAD)
Paul Elliottdff6c5d2021-09-28 11:00:20 +0100260 mbedtls_test_driver_aead_hooks.driver_status =
Gilles Peskine449bd832023-01-11 14:50:10 +0100261 mbedtls_psa_aead_set_lengths(operation, ad_length,
262 plaintext_length);
Ronald Cron73c9d9e2021-04-09 11:09:54 +0200263#else
264 (void) operation;
265 (void) ad_length;
266 (void) plaintext_length;
267 mbedtls_test_driver_aead_hooks.driver_status = PSA_ERROR_NOT_SUPPORTED;
268#endif
Paul Elliott4bbe82b2021-04-27 12:11:56 +0100269 }
270
Gilles Peskine449bd832023-01-11 14:50:10 +0100271 return mbedtls_test_driver_aead_hooks.driver_status;
Paul Elliott4bbe82b2021-04-27 12:11:56 +0100272}
273
Paul Elliotta218ceb2021-05-07 15:10:31 +0100274psa_status_t mbedtls_test_transparent_aead_update_ad(
Paul Elliottcbbde5f2021-05-10 18:19:46 +0100275 mbedtls_transparent_test_driver_aead_operation_t *operation,
Paul Elliott4bbe82b2021-04-27 12:11:56 +0100276 const uint8_t *input,
Gilles Peskine449bd832023-01-11 14:50:10 +0100277 size_t input_length)
Paul Elliott4bbe82b2021-04-27 12:11:56 +0100278{
Paul Elliottfcb5cdc2021-06-23 09:40:12 +0100279 mbedtls_test_driver_aead_hooks.hits_update_ad++;
Paul Elliott4bbe82b2021-04-27 12:11:56 +0100280
Gilles Peskine449bd832023-01-11 14:50:10 +0100281 if (mbedtls_test_driver_aead_hooks.forced_status != PSA_SUCCESS) {
Przemek Stekielbd99a022022-10-02 21:01:23 +0200282 mbedtls_test_driver_aead_hooks.driver_status =
Gilles Peskine449bd832023-01-11 14:50:10 +0100283 mbedtls_test_driver_aead_hooks.forced_status;
284 } else {
285#if defined(MBEDTLS_TEST_LIBTESTDRIVER1) && \
286 defined(LIBTESTDRIVER1_MBEDTLS_PSA_BUILTIN_AEAD)
287 mbedtls_test_driver_aead_hooks.driver_status =
288 libtestdriver1_mbedtls_psa_aead_update_ad(operation, input, input_length);
Przemek Stekielbd99a022022-10-02 21:01:23 +0200289#elif defined(MBEDTLS_PSA_BUILTIN_AEAD)
Paul Elliotta218ceb2021-05-07 15:10:31 +0100290 mbedtls_test_driver_aead_hooks.driver_status =
Gilles Peskine449bd832023-01-11 14:50:10 +0100291 mbedtls_psa_aead_update_ad(operation, input, input_length);
Ronald Cron73c9d9e2021-04-09 11:09:54 +0200292#else
293 (void) operation;
294 (void) input;
295 (void) input_length;
296 mbedtls_test_driver_aead_hooks.driver_status = PSA_ERROR_NOT_SUPPORTED;
297#endif
Paul Elliott4bbe82b2021-04-27 12:11:56 +0100298 }
299
Gilles Peskine449bd832023-01-11 14:50:10 +0100300 return mbedtls_test_driver_aead_hooks.driver_status;
Paul Elliott4bbe82b2021-04-27 12:11:56 +0100301}
302
Paul Elliotta218ceb2021-05-07 15:10:31 +0100303psa_status_t mbedtls_test_transparent_aead_update(
Gilles Peskine449bd832023-01-11 14:50:10 +0100304 mbedtls_transparent_test_driver_aead_operation_t *operation,
305 const uint8_t *input,
306 size_t input_length,
307 uint8_t *output,
308 size_t output_size,
309 size_t *output_length)
Paul Elliott4bbe82b2021-04-27 12:11:56 +0100310{
Paul Elliottfcb5cdc2021-06-23 09:40:12 +0100311 mbedtls_test_driver_aead_hooks.hits_update++;
Paul Elliott4bbe82b2021-04-27 12:11:56 +0100312
Gilles Peskine449bd832023-01-11 14:50:10 +0100313 if (mbedtls_test_driver_aead_hooks.forced_status != PSA_SUCCESS) {
Przemek Stekielbd99a022022-10-02 21:01:23 +0200314 mbedtls_test_driver_aead_hooks.driver_status =
Gilles Peskine449bd832023-01-11 14:50:10 +0100315 mbedtls_test_driver_aead_hooks.forced_status;
316 } else {
317#if defined(MBEDTLS_TEST_LIBTESTDRIVER1) && \
318 defined(LIBTESTDRIVER1_MBEDTLS_PSA_BUILTIN_AEAD)
319 mbedtls_test_driver_aead_hooks.driver_status =
320 libtestdriver1_mbedtls_psa_aead_update(operation, input,
321 input_length, output,
322 output_size, output_length);
Przemek Stekielbd99a022022-10-02 21:01:23 +0200323#elif defined(MBEDTLS_PSA_BUILTIN_AEAD)
Paul Elliotta218ceb2021-05-07 15:10:31 +0100324 mbedtls_test_driver_aead_hooks.driver_status =
Gilles Peskine449bd832023-01-11 14:50:10 +0100325 mbedtls_psa_aead_update(operation, input, input_length, output,
326 output_size, output_length);
Ronald Cron73c9d9e2021-04-09 11:09:54 +0200327#else
328 (void) operation;
329 (void) input;
330 (void) input_length;
331 (void) output;
332 (void) output_size;
333 (void) output_length;
334 mbedtls_test_driver_aead_hooks.driver_status = PSA_ERROR_NOT_SUPPORTED;
335#endif
Paul Elliott4bbe82b2021-04-27 12:11:56 +0100336 }
337
Gilles Peskine449bd832023-01-11 14:50:10 +0100338 return mbedtls_test_driver_aead_hooks.driver_status;
Paul Elliott4bbe82b2021-04-27 12:11:56 +0100339}
340
Paul Elliotta218ceb2021-05-07 15:10:31 +0100341psa_status_t mbedtls_test_transparent_aead_finish(
Gilles Peskine449bd832023-01-11 14:50:10 +0100342 mbedtls_transparent_test_driver_aead_operation_t *operation,
343 uint8_t *ciphertext,
344 size_t ciphertext_size,
345 size_t *ciphertext_length,
346 uint8_t *tag,
347 size_t tag_size,
348 size_t *tag_length)
Paul Elliott4bbe82b2021-04-27 12:11:56 +0100349{
Gilles Peskine449bd832023-01-11 14:50:10 +0100350 mbedtls_test_driver_aead_hooks.hits_finish++;
Paul Elliott4bbe82b2021-04-27 12:11:56 +0100351
Gilles Peskine449bd832023-01-11 14:50:10 +0100352 if (mbedtls_test_driver_aead_hooks.forced_status != PSA_SUCCESS) {
Przemek Stekielbd99a022022-10-02 21:01:23 +0200353 mbedtls_test_driver_aead_hooks.driver_status =
Gilles Peskine449bd832023-01-11 14:50:10 +0100354 mbedtls_test_driver_aead_hooks.forced_status;
355 } else {
356#if defined(MBEDTLS_TEST_LIBTESTDRIVER1) && \
357 defined(LIBTESTDRIVER1_MBEDTLS_PSA_BUILTIN_AEAD)
358 mbedtls_test_driver_aead_hooks.driver_status =
359 libtestdriver1_mbedtls_psa_aead_finish(operation, ciphertext,
360 ciphertext_size, ciphertext_length,
361 tag, tag_size, tag_length);
Przemek Stekielbd99a022022-10-02 21:01:23 +0200362#elif defined(MBEDTLS_PSA_BUILTIN_AEAD)
Paul Elliotta218ceb2021-05-07 15:10:31 +0100363 mbedtls_test_driver_aead_hooks.driver_status =
Gilles Peskine449bd832023-01-11 14:50:10 +0100364 mbedtls_psa_aead_finish(operation, ciphertext, ciphertext_size,
365 ciphertext_length, tag, tag_size,
366 tag_length);
Ronald Cron73c9d9e2021-04-09 11:09:54 +0200367#else
368 (void) operation;
369 (void) ciphertext;
370 (void) ciphertext_size;
371 (void) ciphertext_length;
372 (void) tag;
373 (void) tag_size;
374 (void) tag_length;
375 mbedtls_test_driver_aead_hooks.driver_status = PSA_ERROR_NOT_SUPPORTED;
376#endif
Paul Elliott4bbe82b2021-04-27 12:11:56 +0100377 }
378
Gilles Peskine449bd832023-01-11 14:50:10 +0100379 return mbedtls_test_driver_aead_hooks.driver_status;
Paul Elliott4bbe82b2021-04-27 12:11:56 +0100380}
381
Paul Elliotta218ceb2021-05-07 15:10:31 +0100382psa_status_t mbedtls_test_transparent_aead_verify(
Gilles Peskine449bd832023-01-11 14:50:10 +0100383 mbedtls_transparent_test_driver_aead_operation_t *operation,
384 uint8_t *plaintext,
385 size_t plaintext_size,
386 size_t *plaintext_length,
387 const uint8_t *tag,
388 size_t tag_length)
Paul Elliott4bbe82b2021-04-27 12:11:56 +0100389{
Gilles Peskine449bd832023-01-11 14:50:10 +0100390 mbedtls_test_driver_aead_hooks.hits_verify++;
Paul Elliott4bbe82b2021-04-27 12:11:56 +0100391
Gilles Peskine449bd832023-01-11 14:50:10 +0100392 if (mbedtls_test_driver_aead_hooks.forced_status != PSA_SUCCESS) {
393 mbedtls_test_driver_aead_hooks.driver_status =
394 mbedtls_test_driver_aead_hooks.forced_status;
395 } else {
396 uint8_t check_tag[PSA_AEAD_TAG_MAX_SIZE];
397 size_t check_tag_length = 0;
Paul Elliott26f4aef2021-07-22 21:47:27 +0100398
Przemek Stekielbd99a022022-10-02 21:01:23 +0200399#if defined(MBEDTLS_TEST_LIBTESTDRIVER1) && \
Gilles Peskine449bd832023-01-11 14:50:10 +0100400 defined(LIBTESTDRIVER1_MBEDTLS_PSA_BUILTIN_AEAD)
Przemek Stekielbd99a022022-10-02 21:01:23 +0200401 mbedtls_test_driver_aead_hooks.driver_status =
Gilles Peskine449bd832023-01-11 14:50:10 +0100402 libtestdriver1_mbedtls_psa_aead_finish(operation,
403 plaintext,
404 plaintext_size,
405 plaintext_length,
406 check_tag,
407 sizeof(check_tag),
408 &check_tag_length);
Przemek Stekielbd99a022022-10-02 21:01:23 +0200409#elif defined(MBEDTLS_PSA_BUILTIN_AEAD)
Gilles Peskine449bd832023-01-11 14:50:10 +0100410 mbedtls_test_driver_aead_hooks.driver_status =
411 mbedtls_psa_aead_finish(operation,
412 plaintext,
413 plaintext_size,
414 plaintext_length,
415 check_tag,
416 sizeof(check_tag),
417 &check_tag_length);
Ronald Cron73c9d9e2021-04-09 11:09:54 +0200418#else
419 (void) operation;
420 (void) plaintext;
421 (void) plaintext_size;
422 (void) plaintext_length;
423 mbedtls_test_driver_aead_hooks.driver_status = PSA_ERROR_NOT_SUPPORTED;
424#endif
Paul Elliott26f4aef2021-07-22 21:47:27 +0100425
Gilles Peskine449bd832023-01-11 14:50:10 +0100426 if (mbedtls_test_driver_aead_hooks.driver_status == PSA_SUCCESS) {
427 if (tag_length != check_tag_length ||
Dave Rodgman33e1f422023-08-29 18:17:29 +0100428 mbedtls_ct_memcmp(tag, check_tag, tag_length)
Gilles Peskine449bd832023-01-11 14:50:10 +0100429 != 0) {
430 mbedtls_test_driver_aead_hooks.driver_status =
431 PSA_ERROR_INVALID_SIGNATURE;
432 }
433 }
Paul Elliott0f32b7d2021-09-20 18:46:03 +0100434
Gilles Peskine449bd832023-01-11 14:50:10 +0100435 mbedtls_platform_zeroize(check_tag, sizeof(check_tag));
Paul Elliott4bbe82b2021-04-27 12:11:56 +0100436 }
437
Gilles Peskine449bd832023-01-11 14:50:10 +0100438 return mbedtls_test_driver_aead_hooks.driver_status;
Paul Elliott4bbe82b2021-04-27 12:11:56 +0100439}
440
Paul Elliotta218ceb2021-05-07 15:10:31 +0100441psa_status_t mbedtls_test_transparent_aead_abort(
Gilles Peskine449bd832023-01-11 14:50:10 +0100442 mbedtls_transparent_test_driver_aead_operation_t *operation)
Paul Elliott4bbe82b2021-04-27 12:11:56 +0100443{
Gilles Peskine449bd832023-01-11 14:50:10 +0100444 mbedtls_test_driver_aead_hooks.hits_abort++;
Paul Elliott4bbe82b2021-04-27 12:11:56 +0100445
Gilles Peskine449bd832023-01-11 14:50:10 +0100446 if (mbedtls_test_driver_aead_hooks.forced_status != PSA_SUCCESS) {
Przemek Stekielbd99a022022-10-02 21:01:23 +0200447 mbedtls_test_driver_aead_hooks.driver_status =
Gilles Peskine449bd832023-01-11 14:50:10 +0100448 mbedtls_test_driver_aead_hooks.forced_status;
449 } else {
450#if defined(MBEDTLS_TEST_LIBTESTDRIVER1) && \
451 defined(LIBTESTDRIVER1_MBEDTLS_PSA_BUILTIN_AEAD)
452 mbedtls_test_driver_aead_hooks.driver_status =
453 libtestdriver1_mbedtls_psa_aead_abort(operation);
Przemek Stekielbd99a022022-10-02 21:01:23 +0200454#elif defined(MBEDTLS_PSA_BUILTIN_AEAD)
Paul Elliotta218ceb2021-05-07 15:10:31 +0100455 mbedtls_test_driver_aead_hooks.driver_status =
Gilles Peskine449bd832023-01-11 14:50:10 +0100456 mbedtls_psa_aead_abort(operation);
Ronald Cron73c9d9e2021-04-09 11:09:54 +0200457#else
458 (void) operation;
459 mbedtls_test_driver_aead_hooks.driver_status = PSA_ERROR_NOT_SUPPORTED;
460#endif
Paul Elliott4bbe82b2021-04-27 12:11:56 +0100461 }
462
Gilles Peskine449bd832023-01-11 14:50:10 +0100463 return mbedtls_test_driver_aead_hooks.driver_status;
Paul Elliott4bbe82b2021-04-27 12:11:56 +0100464}
465
Ronald Crone6e6b752023-01-16 16:56:51 +0100466#endif /* PSA_CRYPTO_DRIVER_TEST */