blob: 8eb5547f473cc2d17fff097098d38396da0abcf8 [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
Przemek Stekielbd99a022022-10-02 21:01:23 +020028#if defined(MBEDTLS_TEST_LIBTESTDRIVER1)
29#include "libtestdriver1/library/psa_crypto_aead.h"
30#endif
31
Ronald Cron7f13fa22021-04-13 12:41:34 +020032mbedtls_test_driver_aead_hooks_t
33 mbedtls_test_driver_aead_hooks = MBEDTLS_TEST_DRIVER_AEAD_INIT;
Ronald Cronbfe551d2021-03-23 09:33:25 +010034
Ronald Cron7f13fa22021-04-13 12:41:34 +020035psa_status_t mbedtls_test_transparent_aead_encrypt(
Ronald Cronde822812021-03-17 16:08:20 +010036 const psa_key_attributes_t *attributes,
37 const uint8_t *key_buffer, size_t key_buffer_size,
38 psa_algorithm_t alg,
39 const uint8_t *nonce, size_t nonce_length,
40 const uint8_t *additional_data, size_t additional_data_length,
41 const uint8_t *plaintext, size_t plaintext_length,
Gilles Peskine449bd832023-01-11 14:50:10 +010042 uint8_t *ciphertext, size_t ciphertext_size, size_t *ciphertext_length)
Ronald Cronde822812021-03-17 16:08:20 +010043{
Paul Elliottfcb5cdc2021-06-23 09:40:12 +010044 mbedtls_test_driver_aead_hooks.hits_encrypt++;
Ronald Cronbfe551d2021-03-23 09:33:25 +010045
Gilles Peskine449bd832023-01-11 14:50:10 +010046 if (mbedtls_test_driver_aead_hooks.forced_status != PSA_SUCCESS) {
47 mbedtls_test_driver_aead_hooks.driver_status =
48 mbedtls_test_driver_aead_hooks.forced_status;
49 } else {
Przemek Stekielbd99a022022-10-02 21:01:23 +020050#if defined(MBEDTLS_TEST_LIBTESTDRIVER1) && \
Gilles Peskine449bd832023-01-11 14:50:10 +010051 defined(LIBTESTDRIVER1_MBEDTLS_PSA_BUILTIN_AEAD)
Przemek Stekielbd99a022022-10-02 21:01:23 +020052 mbedtls_test_driver_aead_hooks.driver_status =
53 libtestdriver1_mbedtls_psa_aead_encrypt(
Gilles Peskine449bd832023-01-11 14:50:10 +010054 (const libtestdriver1_psa_key_attributes_t *) attributes,
Przemek Stekielbd99a022022-10-02 21:01:23 +020055 key_buffer, key_buffer_size,
56 alg,
57 nonce, nonce_length,
58 additional_data, additional_data_length,
59 plaintext, plaintext_length,
Gilles Peskine449bd832023-01-11 14:50:10 +010060 ciphertext, ciphertext_size, ciphertext_length);
Przemek Stekielbd99a022022-10-02 21:01:23 +020061#elif defined(MBEDTLS_PSA_BUILTIN_AEAD)
Ronald Cron7f13fa22021-04-13 12:41:34 +020062 mbedtls_test_driver_aead_hooks.driver_status =
Ronald Cronbfe551d2021-03-23 09:33:25 +010063 mbedtls_psa_aead_encrypt(
Ronald Cronde822812021-03-17 16:08:20 +010064 attributes, key_buffer, key_buffer_size,
65 alg,
66 nonce, nonce_length,
67 additional_data, additional_data_length,
68 plaintext, plaintext_length,
Gilles Peskine449bd832023-01-11 14:50:10 +010069 ciphertext, ciphertext_size, ciphertext_length);
Ronald Cron73c9d9e2021-04-09 11:09:54 +020070#else
71 (void) attributes;
72 (void) key_buffer;
73 (void) key_buffer_size;
74 (void) alg;
75 (void) nonce;
76 (void) nonce_length;
77 (void) additional_data;
78 (void) additional_data_length;
79 (void) plaintext;
80 (void) plaintext_length;
81 (void) ciphertext;
82 (void) ciphertext_size;
83 (void) ciphertext_length;
84 mbedtls_test_driver_aead_hooks.driver_status = PSA_ERROR_NOT_SUPPORTED;
85#endif
Ronald Cronbfe551d2021-03-23 09:33:25 +010086 }
87
Gilles Peskine449bd832023-01-11 14:50:10 +010088 return mbedtls_test_driver_aead_hooks.driver_status;
Ronald Cronde822812021-03-17 16:08:20 +010089}
90
Ronald Cron7f13fa22021-04-13 12:41:34 +020091psa_status_t mbedtls_test_transparent_aead_decrypt(
Ronald Cronde822812021-03-17 16:08:20 +010092 const psa_key_attributes_t *attributes,
93 const uint8_t *key_buffer, size_t key_buffer_size,
94 psa_algorithm_t alg,
95 const uint8_t *nonce, size_t nonce_length,
96 const uint8_t *additional_data, size_t additional_data_length,
97 const uint8_t *ciphertext, size_t ciphertext_length,
Gilles Peskine449bd832023-01-11 14:50:10 +010098 uint8_t *plaintext, size_t plaintext_size, size_t *plaintext_length)
Ronald Cronde822812021-03-17 16:08:20 +010099{
Paul Elliottfcb5cdc2021-06-23 09:40:12 +0100100 mbedtls_test_driver_aead_hooks.hits_decrypt++;
Ronald Cronbfe551d2021-03-23 09:33:25 +0100101
Gilles Peskine449bd832023-01-11 14:50:10 +0100102 if (mbedtls_test_driver_aead_hooks.forced_status != PSA_SUCCESS) {
103 mbedtls_test_driver_aead_hooks.driver_status =
104 mbedtls_test_driver_aead_hooks.forced_status;
105 } else {
Przemek Stekielbd99a022022-10-02 21:01:23 +0200106#if defined(MBEDTLS_TEST_LIBTESTDRIVER1) && \
Gilles Peskine449bd832023-01-11 14:50:10 +0100107 defined(LIBTESTDRIVER1_MBEDTLS_PSA_BUILTIN_AEAD)
Przemek Stekielbd99a022022-10-02 21:01:23 +0200108 mbedtls_test_driver_aead_hooks.driver_status =
109 libtestdriver1_mbedtls_psa_aead_decrypt(
Gilles Peskine449bd832023-01-11 14:50:10 +0100110 (const libtestdriver1_psa_key_attributes_t *) attributes,
Przemek Stekielbd99a022022-10-02 21:01:23 +0200111 key_buffer, key_buffer_size,
112 alg,
113 nonce, nonce_length,
114 additional_data, additional_data_length,
115 ciphertext, ciphertext_length,
Gilles Peskine449bd832023-01-11 14:50:10 +0100116 plaintext, plaintext_size, plaintext_length);
Przemek Stekielbd99a022022-10-02 21:01:23 +0200117#elif defined(MBEDTLS_PSA_BUILTIN_AEAD)
Ronald Cron7f13fa22021-04-13 12:41:34 +0200118 mbedtls_test_driver_aead_hooks.driver_status =
Ronald Cronbfe551d2021-03-23 09:33:25 +0100119 mbedtls_psa_aead_decrypt(
Ronald Cronde822812021-03-17 16:08:20 +0100120 attributes, key_buffer, key_buffer_size,
121 alg,
122 nonce, nonce_length,
123 additional_data, additional_data_length,
124 ciphertext, ciphertext_length,
Gilles Peskine449bd832023-01-11 14:50:10 +0100125 plaintext, plaintext_size, plaintext_length);
Ronald Cron73c9d9e2021-04-09 11:09:54 +0200126#else
127 (void) attributes;
128 (void) key_buffer;
129 (void) key_buffer_size;
130 (void) alg;
131 (void) nonce;
132 (void) nonce_length;
133 (void) additional_data;
134 (void) additional_data_length;
135 (void) ciphertext;
136 (void) ciphertext_length;
137 (void) plaintext;
138 (void) plaintext_size;
139 (void) plaintext_length;
140 mbedtls_test_driver_aead_hooks.driver_status = PSA_ERROR_NOT_SUPPORTED;
141#endif
Ronald Cronbfe551d2021-03-23 09:33:25 +0100142 }
143
Gilles Peskine449bd832023-01-11 14:50:10 +0100144 return mbedtls_test_driver_aead_hooks.driver_status;
Ronald Cronde822812021-03-17 16:08:20 +0100145}
146
Paul Elliotta218ceb2021-05-07 15:10:31 +0100147psa_status_t mbedtls_test_transparent_aead_encrypt_setup(
Paul Elliottcbbde5f2021-05-10 18:19:46 +0100148 mbedtls_transparent_test_driver_aead_operation_t *operation,
Paul Elliott4bbe82b2021-04-27 12:11:56 +0100149 const psa_key_attributes_t *attributes,
150 const uint8_t *key_buffer, size_t key_buffer_size,
Gilles Peskine449bd832023-01-11 14:50:10 +0100151 psa_algorithm_t alg)
Paul Elliott4bbe82b2021-04-27 12:11:56 +0100152{
Paul Elliottfcb5cdc2021-06-23 09:40:12 +0100153 mbedtls_test_driver_aead_hooks.hits_encrypt_setup++;
Paul Elliott4bbe82b2021-04-27 12:11:56 +0100154
Gilles Peskine449bd832023-01-11 14:50:10 +0100155 if (mbedtls_test_driver_aead_hooks.forced_status != PSA_SUCCESS) {
Przemek Stekielbd99a022022-10-02 21:01:23 +0200156 mbedtls_test_driver_aead_hooks.driver_status =
Gilles Peskine449bd832023-01-11 14:50:10 +0100157 mbedtls_test_driver_aead_hooks.forced_status;
158 } else {
159#if defined(MBEDTLS_TEST_LIBTESTDRIVER1) && \
160 defined(LIBTESTDRIVER1_MBEDTLS_PSA_BUILTIN_AEAD)
161 mbedtls_test_driver_aead_hooks.driver_status =
162 libtestdriver1_mbedtls_psa_aead_encrypt_setup(operation,
163 (const libtestdriver1_psa_key_attributes_t
164 *) attributes,
165 key_buffer,
166 key_buffer_size, alg);
Przemek Stekielbd99a022022-10-02 21:01:23 +0200167#elif defined(MBEDTLS_PSA_BUILTIN_AEAD)
Paul Elliotta218ceb2021-05-07 15:10:31 +0100168 mbedtls_test_driver_aead_hooks.driver_status =
Gilles Peskine449bd832023-01-11 14:50:10 +0100169 mbedtls_psa_aead_encrypt_setup(operation, attributes, key_buffer,
170 key_buffer_size, alg);
Ronald Cron73c9d9e2021-04-09 11:09:54 +0200171#else
172 (void) operation;
173 (void) attributes;
174 (void) key_buffer;
175 (void) key_buffer_size;
176 (void) alg;
177 mbedtls_test_driver_aead_hooks.driver_status = PSA_ERROR_NOT_SUPPORTED;
178#endif
Paul Elliott4bbe82b2021-04-27 12:11:56 +0100179 }
180
Gilles Peskine449bd832023-01-11 14:50:10 +0100181 return mbedtls_test_driver_aead_hooks.driver_status;
Paul Elliott4bbe82b2021-04-27 12:11:56 +0100182}
183
Paul Elliotta218ceb2021-05-07 15:10:31 +0100184psa_status_t mbedtls_test_transparent_aead_decrypt_setup(
Paul Elliottcbbde5f2021-05-10 18:19:46 +0100185 mbedtls_transparent_test_driver_aead_operation_t *operation,
Paul Elliott4bbe82b2021-04-27 12:11:56 +0100186 const psa_key_attributes_t *attributes,
187 const uint8_t *key_buffer, size_t key_buffer_size,
Gilles Peskine449bd832023-01-11 14:50:10 +0100188 psa_algorithm_t alg)
Paul Elliott4bbe82b2021-04-27 12:11:56 +0100189{
Paul Elliottfcb5cdc2021-06-23 09:40:12 +0100190 mbedtls_test_driver_aead_hooks.hits_decrypt_setup++;
Paul Elliott4bbe82b2021-04-27 12:11:56 +0100191
Gilles Peskine449bd832023-01-11 14:50:10 +0100192 if (mbedtls_test_driver_aead_hooks.forced_status != PSA_SUCCESS) {
Przemek Stekielbd99a022022-10-02 21:01:23 +0200193 mbedtls_test_driver_aead_hooks.driver_status =
Gilles Peskine449bd832023-01-11 14:50:10 +0100194 mbedtls_test_driver_aead_hooks.forced_status;
195 } else {
196#if defined(MBEDTLS_TEST_LIBTESTDRIVER1) && \
197 defined(LIBTESTDRIVER1_MBEDTLS_PSA_BUILTIN_AEAD)
198 mbedtls_test_driver_aead_hooks.driver_status =
199 libtestdriver1_mbedtls_psa_aead_decrypt_setup(operation,
200 (const libtestdriver1_psa_key_attributes_t
201 *) attributes,
202 key_buffer, key_buffer_size, alg);
Przemek Stekielbd99a022022-10-02 21:01:23 +0200203#elif defined(MBEDTLS_PSA_BUILTIN_AEAD)
Paul Elliotta218ceb2021-05-07 15:10:31 +0100204 mbedtls_test_driver_aead_hooks.driver_status =
Gilles Peskine449bd832023-01-11 14:50:10 +0100205 mbedtls_psa_aead_decrypt_setup(operation, attributes, key_buffer,
206 key_buffer_size, alg);
Ronald Cron73c9d9e2021-04-09 11:09:54 +0200207#else
208 (void) operation;
209 (void) attributes;
210 (void) key_buffer;
211 (void) key_buffer_size;
212 (void) alg;
213 mbedtls_test_driver_aead_hooks.driver_status = PSA_ERROR_NOT_SUPPORTED;
214#endif
Paul Elliott4bbe82b2021-04-27 12:11:56 +0100215 }
216
Gilles Peskine449bd832023-01-11 14:50:10 +0100217 return mbedtls_test_driver_aead_hooks.driver_status;
Paul Elliott4bbe82b2021-04-27 12:11:56 +0100218}
219
Paul Elliotta218ceb2021-05-07 15:10:31 +0100220psa_status_t mbedtls_test_transparent_aead_set_nonce(
Paul Elliottcbbde5f2021-05-10 18:19:46 +0100221 mbedtls_transparent_test_driver_aead_operation_t *operation,
Paul Elliott4bbe82b2021-04-27 12:11:56 +0100222 const uint8_t *nonce,
Gilles Peskine449bd832023-01-11 14:50:10 +0100223 size_t nonce_length)
Paul Elliott4bbe82b2021-04-27 12:11:56 +0100224{
Paul Elliottfcb5cdc2021-06-23 09:40:12 +0100225 mbedtls_test_driver_aead_hooks.hits_set_nonce++;
Paul Elliott4bbe82b2021-04-27 12:11:56 +0100226
Gilles Peskine449bd832023-01-11 14:50:10 +0100227 if (mbedtls_test_driver_aead_hooks.forced_status != PSA_SUCCESS) {
Przemek Stekielbd99a022022-10-02 21:01:23 +0200228 mbedtls_test_driver_aead_hooks.driver_status =
Gilles Peskine449bd832023-01-11 14:50:10 +0100229 mbedtls_test_driver_aead_hooks.forced_status;
230 } else {
231#if defined(MBEDTLS_TEST_LIBTESTDRIVER1) && \
232 defined(LIBTESTDRIVER1_MBEDTLS_PSA_BUILTIN_AEAD)
233 mbedtls_test_driver_aead_hooks.driver_status =
234 libtestdriver1_mbedtls_psa_aead_set_nonce(operation, nonce, nonce_length);
Przemek Stekielbd99a022022-10-02 21:01:23 +0200235#elif defined(MBEDTLS_PSA_BUILTIN_AEAD)
Paul Elliotta218ceb2021-05-07 15:10:31 +0100236 mbedtls_test_driver_aead_hooks.driver_status =
Gilles Peskine449bd832023-01-11 14:50:10 +0100237 mbedtls_psa_aead_set_nonce(operation, nonce, nonce_length);
Ronald Cron73c9d9e2021-04-09 11:09:54 +0200238#else
239 (void) operation;
240 (void) nonce;
241 (void) nonce_length;
242 mbedtls_test_driver_aead_hooks.driver_status = PSA_ERROR_NOT_SUPPORTED;
243#endif
Paul Elliott4bbe82b2021-04-27 12:11:56 +0100244 }
245
Gilles Peskine449bd832023-01-11 14:50:10 +0100246 return mbedtls_test_driver_aead_hooks.driver_status;
Paul Elliott4bbe82b2021-04-27 12:11:56 +0100247}
248
Paul Elliotta218ceb2021-05-07 15:10:31 +0100249psa_status_t mbedtls_test_transparent_aead_set_lengths(
Paul Elliottcbbde5f2021-05-10 18:19:46 +0100250 mbedtls_transparent_test_driver_aead_operation_t *operation,
Paul Elliott4bbe82b2021-04-27 12:11:56 +0100251 size_t ad_length,
Gilles Peskine449bd832023-01-11 14:50:10 +0100252 size_t plaintext_length)
Paul Elliott4bbe82b2021-04-27 12:11:56 +0100253{
Paul Elliottfcb5cdc2021-06-23 09:40:12 +0100254 mbedtls_test_driver_aead_hooks.hits_set_lengths++;
Paul Elliott4bbe82b2021-04-27 12:11:56 +0100255
Gilles Peskine449bd832023-01-11 14:50:10 +0100256 if (mbedtls_test_driver_aead_hooks.forced_status != PSA_SUCCESS) {
Przemek Stekielbd99a022022-10-02 21:01:23 +0200257 mbedtls_test_driver_aead_hooks.driver_status =
Gilles Peskine449bd832023-01-11 14:50:10 +0100258 mbedtls_test_driver_aead_hooks.forced_status;
259 } else {
260#if defined(MBEDTLS_TEST_LIBTESTDRIVER1) && \
261 defined(LIBTESTDRIVER1_MBEDTLS_PSA_BUILTIN_AEAD)
262 mbedtls_test_driver_aead_hooks.driver_status =
263 libtestdriver1_mbedtls_psa_aead_set_lengths(operation, ad_length,
264 plaintext_length);
Przemek Stekielbd99a022022-10-02 21:01:23 +0200265#elif defined(MBEDTLS_PSA_BUILTIN_AEAD)
Paul Elliottdff6c5d2021-09-28 11:00:20 +0100266 mbedtls_test_driver_aead_hooks.driver_status =
Gilles Peskine449bd832023-01-11 14:50:10 +0100267 mbedtls_psa_aead_set_lengths(operation, ad_length,
268 plaintext_length);
Ronald Cron73c9d9e2021-04-09 11:09:54 +0200269#else
270 (void) operation;
271 (void) ad_length;
272 (void) plaintext_length;
273 mbedtls_test_driver_aead_hooks.driver_status = PSA_ERROR_NOT_SUPPORTED;
274#endif
Paul Elliott4bbe82b2021-04-27 12:11:56 +0100275 }
276
Gilles Peskine449bd832023-01-11 14:50:10 +0100277 return mbedtls_test_driver_aead_hooks.driver_status;
Paul Elliott4bbe82b2021-04-27 12:11:56 +0100278}
279
Paul Elliotta218ceb2021-05-07 15:10:31 +0100280psa_status_t mbedtls_test_transparent_aead_update_ad(
Paul Elliottcbbde5f2021-05-10 18:19:46 +0100281 mbedtls_transparent_test_driver_aead_operation_t *operation,
Paul Elliott4bbe82b2021-04-27 12:11:56 +0100282 const uint8_t *input,
Gilles Peskine449bd832023-01-11 14:50:10 +0100283 size_t input_length)
Paul Elliott4bbe82b2021-04-27 12:11:56 +0100284{
Paul Elliottfcb5cdc2021-06-23 09:40:12 +0100285 mbedtls_test_driver_aead_hooks.hits_update_ad++;
Paul Elliott4bbe82b2021-04-27 12:11:56 +0100286
Gilles Peskine449bd832023-01-11 14:50:10 +0100287 if (mbedtls_test_driver_aead_hooks.forced_status != PSA_SUCCESS) {
Przemek Stekielbd99a022022-10-02 21:01:23 +0200288 mbedtls_test_driver_aead_hooks.driver_status =
Gilles Peskine449bd832023-01-11 14:50:10 +0100289 mbedtls_test_driver_aead_hooks.forced_status;
290 } else {
291#if defined(MBEDTLS_TEST_LIBTESTDRIVER1) && \
292 defined(LIBTESTDRIVER1_MBEDTLS_PSA_BUILTIN_AEAD)
293 mbedtls_test_driver_aead_hooks.driver_status =
294 libtestdriver1_mbedtls_psa_aead_update_ad(operation, input, input_length);
Przemek Stekielbd99a022022-10-02 21:01:23 +0200295#elif defined(MBEDTLS_PSA_BUILTIN_AEAD)
Paul Elliotta218ceb2021-05-07 15:10:31 +0100296 mbedtls_test_driver_aead_hooks.driver_status =
Gilles Peskine449bd832023-01-11 14:50:10 +0100297 mbedtls_psa_aead_update_ad(operation, input, input_length);
Ronald Cron73c9d9e2021-04-09 11:09:54 +0200298#else
299 (void) operation;
300 (void) input;
301 (void) input_length;
302 mbedtls_test_driver_aead_hooks.driver_status = PSA_ERROR_NOT_SUPPORTED;
303#endif
Paul Elliott4bbe82b2021-04-27 12:11:56 +0100304 }
305
Gilles Peskine449bd832023-01-11 14:50:10 +0100306 return mbedtls_test_driver_aead_hooks.driver_status;
Paul Elliott4bbe82b2021-04-27 12:11:56 +0100307}
308
Paul Elliotta218ceb2021-05-07 15:10:31 +0100309psa_status_t mbedtls_test_transparent_aead_update(
Gilles Peskine449bd832023-01-11 14:50:10 +0100310 mbedtls_transparent_test_driver_aead_operation_t *operation,
311 const uint8_t *input,
312 size_t input_length,
313 uint8_t *output,
314 size_t output_size,
315 size_t *output_length)
Paul Elliott4bbe82b2021-04-27 12:11:56 +0100316{
Paul Elliottfcb5cdc2021-06-23 09:40:12 +0100317 mbedtls_test_driver_aead_hooks.hits_update++;
Paul Elliott4bbe82b2021-04-27 12:11:56 +0100318
Gilles Peskine449bd832023-01-11 14:50:10 +0100319 if (mbedtls_test_driver_aead_hooks.forced_status != PSA_SUCCESS) {
Przemek Stekielbd99a022022-10-02 21:01:23 +0200320 mbedtls_test_driver_aead_hooks.driver_status =
Gilles Peskine449bd832023-01-11 14:50:10 +0100321 mbedtls_test_driver_aead_hooks.forced_status;
322 } else {
323#if defined(MBEDTLS_TEST_LIBTESTDRIVER1) && \
324 defined(LIBTESTDRIVER1_MBEDTLS_PSA_BUILTIN_AEAD)
325 mbedtls_test_driver_aead_hooks.driver_status =
326 libtestdriver1_mbedtls_psa_aead_update(operation, input,
327 input_length, output,
328 output_size, output_length);
Przemek Stekielbd99a022022-10-02 21:01:23 +0200329#elif defined(MBEDTLS_PSA_BUILTIN_AEAD)
Paul Elliotta218ceb2021-05-07 15:10:31 +0100330 mbedtls_test_driver_aead_hooks.driver_status =
Gilles Peskine449bd832023-01-11 14:50:10 +0100331 mbedtls_psa_aead_update(operation, input, input_length, output,
332 output_size, output_length);
Ronald Cron73c9d9e2021-04-09 11:09:54 +0200333#else
334 (void) operation;
335 (void) input;
336 (void) input_length;
337 (void) output;
338 (void) output_size;
339 (void) output_length;
340 mbedtls_test_driver_aead_hooks.driver_status = PSA_ERROR_NOT_SUPPORTED;
341#endif
Paul Elliott4bbe82b2021-04-27 12:11:56 +0100342 }
343
Gilles Peskine449bd832023-01-11 14:50:10 +0100344 return mbedtls_test_driver_aead_hooks.driver_status;
Paul Elliott4bbe82b2021-04-27 12:11:56 +0100345}
346
Paul Elliotta218ceb2021-05-07 15:10:31 +0100347psa_status_t mbedtls_test_transparent_aead_finish(
Gilles Peskine449bd832023-01-11 14:50:10 +0100348 mbedtls_transparent_test_driver_aead_operation_t *operation,
349 uint8_t *ciphertext,
350 size_t ciphertext_size,
351 size_t *ciphertext_length,
352 uint8_t *tag,
353 size_t tag_size,
354 size_t *tag_length)
Paul Elliott4bbe82b2021-04-27 12:11:56 +0100355{
Gilles Peskine449bd832023-01-11 14:50:10 +0100356 mbedtls_test_driver_aead_hooks.hits_finish++;
Paul Elliott4bbe82b2021-04-27 12:11:56 +0100357
Gilles Peskine449bd832023-01-11 14:50:10 +0100358 if (mbedtls_test_driver_aead_hooks.forced_status != PSA_SUCCESS) {
Przemek Stekielbd99a022022-10-02 21:01:23 +0200359 mbedtls_test_driver_aead_hooks.driver_status =
Gilles Peskine449bd832023-01-11 14:50:10 +0100360 mbedtls_test_driver_aead_hooks.forced_status;
361 } else {
362#if defined(MBEDTLS_TEST_LIBTESTDRIVER1) && \
363 defined(LIBTESTDRIVER1_MBEDTLS_PSA_BUILTIN_AEAD)
364 mbedtls_test_driver_aead_hooks.driver_status =
365 libtestdriver1_mbedtls_psa_aead_finish(operation, ciphertext,
366 ciphertext_size, ciphertext_length,
367 tag, tag_size, tag_length);
Przemek Stekielbd99a022022-10-02 21:01:23 +0200368#elif defined(MBEDTLS_PSA_BUILTIN_AEAD)
Paul Elliotta218ceb2021-05-07 15:10:31 +0100369 mbedtls_test_driver_aead_hooks.driver_status =
Gilles Peskine449bd832023-01-11 14:50:10 +0100370 mbedtls_psa_aead_finish(operation, ciphertext, ciphertext_size,
371 ciphertext_length, tag, tag_size,
372 tag_length);
Ronald Cron73c9d9e2021-04-09 11:09:54 +0200373#else
374 (void) operation;
375 (void) ciphertext;
376 (void) ciphertext_size;
377 (void) ciphertext_length;
378 (void) tag;
379 (void) tag_size;
380 (void) tag_length;
381 mbedtls_test_driver_aead_hooks.driver_status = PSA_ERROR_NOT_SUPPORTED;
382#endif
Paul Elliott4bbe82b2021-04-27 12:11:56 +0100383 }
384
Gilles Peskine449bd832023-01-11 14:50:10 +0100385 return mbedtls_test_driver_aead_hooks.driver_status;
Paul Elliott4bbe82b2021-04-27 12:11:56 +0100386}
387
Paul Elliotta218ceb2021-05-07 15:10:31 +0100388psa_status_t mbedtls_test_transparent_aead_verify(
Gilles Peskine449bd832023-01-11 14:50:10 +0100389 mbedtls_transparent_test_driver_aead_operation_t *operation,
390 uint8_t *plaintext,
391 size_t plaintext_size,
392 size_t *plaintext_length,
393 const uint8_t *tag,
394 size_t tag_length)
Paul Elliott4bbe82b2021-04-27 12:11:56 +0100395{
Gilles Peskine449bd832023-01-11 14:50:10 +0100396 mbedtls_test_driver_aead_hooks.hits_verify++;
Paul Elliott4bbe82b2021-04-27 12:11:56 +0100397
Gilles Peskine449bd832023-01-11 14:50:10 +0100398 if (mbedtls_test_driver_aead_hooks.forced_status != PSA_SUCCESS) {
399 mbedtls_test_driver_aead_hooks.driver_status =
400 mbedtls_test_driver_aead_hooks.forced_status;
401 } else {
402 uint8_t check_tag[PSA_AEAD_TAG_MAX_SIZE];
403 size_t check_tag_length = 0;
Paul Elliott26f4aef2021-07-22 21:47:27 +0100404
Przemek Stekielbd99a022022-10-02 21:01:23 +0200405#if defined(MBEDTLS_TEST_LIBTESTDRIVER1) && \
Gilles Peskine449bd832023-01-11 14:50:10 +0100406 defined(LIBTESTDRIVER1_MBEDTLS_PSA_BUILTIN_AEAD)
Przemek Stekielbd99a022022-10-02 21:01:23 +0200407 mbedtls_test_driver_aead_hooks.driver_status =
Gilles Peskine449bd832023-01-11 14:50:10 +0100408 libtestdriver1_mbedtls_psa_aead_finish(operation,
409 plaintext,
410 plaintext_size,
411 plaintext_length,
412 check_tag,
413 sizeof(check_tag),
414 &check_tag_length);
Przemek Stekielbd99a022022-10-02 21:01:23 +0200415#elif defined(MBEDTLS_PSA_BUILTIN_AEAD)
Gilles Peskine449bd832023-01-11 14:50:10 +0100416 mbedtls_test_driver_aead_hooks.driver_status =
417 mbedtls_psa_aead_finish(operation,
418 plaintext,
419 plaintext_size,
420 plaintext_length,
421 check_tag,
422 sizeof(check_tag),
423 &check_tag_length);
Ronald Cron73c9d9e2021-04-09 11:09:54 +0200424#else
425 (void) operation;
426 (void) plaintext;
427 (void) plaintext_size;
428 (void) plaintext_length;
429 mbedtls_test_driver_aead_hooks.driver_status = PSA_ERROR_NOT_SUPPORTED;
430#endif
Paul Elliott26f4aef2021-07-22 21:47:27 +0100431
Gilles Peskine449bd832023-01-11 14:50:10 +0100432 if (mbedtls_test_driver_aead_hooks.driver_status == PSA_SUCCESS) {
433 if (tag_length != check_tag_length ||
434 mbedtls_psa_safer_memcmp(tag, check_tag, tag_length)
435 != 0) {
436 mbedtls_test_driver_aead_hooks.driver_status =
437 PSA_ERROR_INVALID_SIGNATURE;
438 }
439 }
Paul Elliott0f32b7d2021-09-20 18:46:03 +0100440
Gilles Peskine449bd832023-01-11 14:50:10 +0100441 mbedtls_platform_zeroize(check_tag, sizeof(check_tag));
Paul Elliott4bbe82b2021-04-27 12:11:56 +0100442 }
443
Gilles Peskine449bd832023-01-11 14:50:10 +0100444 return mbedtls_test_driver_aead_hooks.driver_status;
Paul Elliott4bbe82b2021-04-27 12:11:56 +0100445}
446
Paul Elliotta218ceb2021-05-07 15:10:31 +0100447psa_status_t mbedtls_test_transparent_aead_abort(
Gilles Peskine449bd832023-01-11 14:50:10 +0100448 mbedtls_transparent_test_driver_aead_operation_t *operation)
Paul Elliott4bbe82b2021-04-27 12:11:56 +0100449{
Gilles Peskine449bd832023-01-11 14:50:10 +0100450 mbedtls_test_driver_aead_hooks.hits_abort++;
Paul Elliott4bbe82b2021-04-27 12:11:56 +0100451
Gilles Peskine449bd832023-01-11 14:50:10 +0100452 if (mbedtls_test_driver_aead_hooks.forced_status != PSA_SUCCESS) {
Przemek Stekielbd99a022022-10-02 21:01:23 +0200453 mbedtls_test_driver_aead_hooks.driver_status =
Gilles Peskine449bd832023-01-11 14:50:10 +0100454 mbedtls_test_driver_aead_hooks.forced_status;
455 } else {
456#if defined(MBEDTLS_TEST_LIBTESTDRIVER1) && \
457 defined(LIBTESTDRIVER1_MBEDTLS_PSA_BUILTIN_AEAD)
458 mbedtls_test_driver_aead_hooks.driver_status =
459 libtestdriver1_mbedtls_psa_aead_abort(operation);
Przemek Stekielbd99a022022-10-02 21:01:23 +0200460#elif defined(MBEDTLS_PSA_BUILTIN_AEAD)
Paul Elliotta218ceb2021-05-07 15:10:31 +0100461 mbedtls_test_driver_aead_hooks.driver_status =
Gilles Peskine449bd832023-01-11 14:50:10 +0100462 mbedtls_psa_aead_abort(operation);
Ronald Cron73c9d9e2021-04-09 11:09:54 +0200463#else
464 (void) operation;
465 mbedtls_test_driver_aead_hooks.driver_status = PSA_ERROR_NOT_SUPPORTED;
466#endif
Paul Elliott4bbe82b2021-04-27 12:11:56 +0100467 }
468
Gilles Peskine449bd832023-01-11 14:50:10 +0100469 return mbedtls_test_driver_aead_hooks.driver_status;
Paul Elliott4bbe82b2021-04-27 12:11:56 +0100470}
471
Ronald Crone6e6b752023-01-16 16:56:51 +0100472#endif /* PSA_CRYPTO_DRIVER_TEST */