blob: 2e299da723814807534562f2a13537799940a771 [file] [log] [blame]
Steven Cooreman37941cb2020-07-28 18:49:51 +02001/*
2 * Test driver for cipher functions
3 */
Steven Cooreman3ec40182020-09-02 16:27:46 +02004/* 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
Steven Cooreman37941cb2020-07-28 18:49:51 +02006 */
7
8#ifndef PSA_CRYPTO_TEST_DRIVERS_CIPHER_H
9#define PSA_CRYPTO_TEST_DRIVERS_CIPHER_H
10
Bence Szépkútic662b362021-05-27 11:25:03 +020011#include "mbedtls/build_info.h"
Steven Cooreman37941cb2020-07-28 18:49:51 +020012
13#if defined(PSA_CRYPTO_DRIVER_TEST)
14#include <psa/crypto_driver_common.h>
Ronald Cron8d310ad2020-12-15 15:17:20 +010015#include <psa/crypto.h>
Steven Cooreman37941cb2020-07-28 18:49:51 +020016
17#include "mbedtls/cipher.h"
Steven Cooreman37941cb2020-07-28 18:49:51 +020018
Steven Cooremanacb5a102020-09-08 14:06:57 +020019typedef struct {
20 /* If non-null, on success, copy this to the output. */
21 void *forced_output;
22 size_t forced_output_length;
23 /* If not PSA_SUCCESS, return this error code instead of processing the
24 * function call. */
25 psa_status_t forced_status;
Steven Cooreman5240e8b2020-09-09 11:51:45 +020026 /* Count the amount of times one of the cipher driver functions is called. */
Steven Cooremanacb5a102020-09-08 14:06:57 +020027 unsigned long hits;
Valerio Setti6ef82ae2023-11-13 10:32:34 +010028 unsigned long cipher_encrypt_hits;
Ronald Cron7f13fa22021-04-13 12:41:34 +020029} mbedtls_test_driver_cipher_hooks_t;
Steven Cooreman37941cb2020-07-28 18:49:51 +020030
Valerio Setti6ef82ae2023-11-13 10:32:34 +010031#define MBEDTLS_TEST_DRIVER_CIPHER_INIT { NULL, 0, PSA_SUCCESS, 0, 0 }
Ronald Cron7f13fa22021-04-13 12:41:34 +020032static inline mbedtls_test_driver_cipher_hooks_t
Gilles Peskine449bd832023-01-11 14:50:10 +010033mbedtls_test_driver_cipher_hooks_init(void)
Steven Cooremanacb5a102020-09-08 14:06:57 +020034{
Ronald Cron7f13fa22021-04-13 12:41:34 +020035 const mbedtls_test_driver_cipher_hooks_t v = MBEDTLS_TEST_DRIVER_CIPHER_INIT;
Gilles Peskine449bd832023-01-11 14:50:10 +010036 return v;
Steven Cooremanacb5a102020-09-08 14:06:57 +020037}
38
Ronald Cron7f13fa22021-04-13 12:41:34 +020039extern mbedtls_test_driver_cipher_hooks_t mbedtls_test_driver_cipher_hooks;
Steven Cooreman37941cb2020-07-28 18:49:51 +020040
Ronald Cron7f13fa22021-04-13 12:41:34 +020041psa_status_t mbedtls_test_transparent_cipher_encrypt(
Steven Cooreman37941cb2020-07-28 18:49:51 +020042 const psa_key_attributes_t *attributes,
43 const uint8_t *key, size_t key_length,
44 psa_algorithm_t alg,
Ronald Cron9b674282021-07-09 09:19:35 +020045 const uint8_t *iv, size_t iv_length,
Steven Cooreman37941cb2020-07-28 18:49:51 +020046 const uint8_t *input, size_t input_length,
47 uint8_t *output, size_t output_size, size_t *output_length);
48
Ronald Cron7f13fa22021-04-13 12:41:34 +020049psa_status_t mbedtls_test_transparent_cipher_decrypt(
Steven Cooreman37941cb2020-07-28 18:49:51 +020050 const psa_key_attributes_t *attributes,
51 const uint8_t *key, size_t key_length,
52 psa_algorithm_t alg,
53 const uint8_t *input, size_t input_length,
54 uint8_t *output, size_t output_size, size_t *output_length);
55
Ronald Cron7f13fa22021-04-13 12:41:34 +020056psa_status_t mbedtls_test_transparent_cipher_encrypt_setup(
Ronald Cron7cb9c3d2021-03-10 12:21:48 +010057 mbedtls_transparent_test_driver_cipher_operation_t *operation,
Steven Cooreman37941cb2020-07-28 18:49:51 +020058 const psa_key_attributes_t *attributes,
59 const uint8_t *key, size_t key_length,
60 psa_algorithm_t alg);
61
Ronald Cron7f13fa22021-04-13 12:41:34 +020062psa_status_t mbedtls_test_transparent_cipher_decrypt_setup(
Ronald Cron7cb9c3d2021-03-10 12:21:48 +010063 mbedtls_transparent_test_driver_cipher_operation_t *operation,
Steven Cooreman37941cb2020-07-28 18:49:51 +020064 const psa_key_attributes_t *attributes,
65 const uint8_t *key, size_t key_length,
66 psa_algorithm_t alg);
67
Ronald Cron7f13fa22021-04-13 12:41:34 +020068psa_status_t mbedtls_test_transparent_cipher_abort(
Gilles Peskine449bd832023-01-11 14:50:10 +010069 mbedtls_transparent_test_driver_cipher_operation_t *operation);
Steven Cooreman37941cb2020-07-28 18:49:51 +020070
Ronald Cron7f13fa22021-04-13 12:41:34 +020071psa_status_t mbedtls_test_transparent_cipher_set_iv(
Ronald Cron7cb9c3d2021-03-10 12:21:48 +010072 mbedtls_transparent_test_driver_cipher_operation_t *operation,
73 const uint8_t *iv, size_t iv_length);
Steven Cooreman37941cb2020-07-28 18:49:51 +020074
Ronald Cron7f13fa22021-04-13 12:41:34 +020075psa_status_t mbedtls_test_transparent_cipher_update(
Ronald Cron7cb9c3d2021-03-10 12:21:48 +010076 mbedtls_transparent_test_driver_cipher_operation_t *operation,
77 const uint8_t *input, size_t input_length,
78 uint8_t *output, size_t output_size, size_t *output_length);
Steven Cooreman37941cb2020-07-28 18:49:51 +020079
Ronald Cron7f13fa22021-04-13 12:41:34 +020080psa_status_t mbedtls_test_transparent_cipher_finish(
Ronald Cron7cb9c3d2021-03-10 12:21:48 +010081 mbedtls_transparent_test_driver_cipher_operation_t *operation,
82 uint8_t *output, size_t output_size, size_t *output_length);
Steven Cooreman37941cb2020-07-28 18:49:51 +020083
84/*
85 * opaque versions
86 */
Ronald Cron7f13fa22021-04-13 12:41:34 +020087psa_status_t mbedtls_test_opaque_cipher_encrypt(
Steven Cooreman37941cb2020-07-28 18:49:51 +020088 const psa_key_attributes_t *attributes,
89 const uint8_t *key, size_t key_length,
90 psa_algorithm_t alg,
Ronald Cron9b674282021-07-09 09:19:35 +020091 const uint8_t *iv, size_t iv_length,
Steven Cooreman37941cb2020-07-28 18:49:51 +020092 const uint8_t *input, size_t input_length,
93 uint8_t *output, size_t output_size, size_t *output_length);
94
Ronald Cron7f13fa22021-04-13 12:41:34 +020095psa_status_t mbedtls_test_opaque_cipher_decrypt(
Steven Cooreman37941cb2020-07-28 18:49:51 +020096 const psa_key_attributes_t *attributes,
97 const uint8_t *key, size_t key_length,
98 psa_algorithm_t alg,
99 const uint8_t *input, size_t input_length,
100 uint8_t *output, size_t output_size, size_t *output_length);
101
Ronald Cron7f13fa22021-04-13 12:41:34 +0200102psa_status_t mbedtls_test_opaque_cipher_encrypt_setup(
Ronald Cron7cb9c3d2021-03-10 12:21:48 +0100103 mbedtls_opaque_test_driver_cipher_operation_t *operation,
Steven Cooreman37941cb2020-07-28 18:49:51 +0200104 const psa_key_attributes_t *attributes,
105 const uint8_t *key, size_t key_length,
106 psa_algorithm_t alg);
107
Ronald Cron7f13fa22021-04-13 12:41:34 +0200108psa_status_t mbedtls_test_opaque_cipher_decrypt_setup(
Ronald Cron7cb9c3d2021-03-10 12:21:48 +0100109 mbedtls_opaque_test_driver_cipher_operation_t *operation,
Steven Cooreman37941cb2020-07-28 18:49:51 +0200110 const psa_key_attributes_t *attributes,
111 const uint8_t *key, size_t key_length,
112 psa_algorithm_t alg);
113
Ronald Cron7f13fa22021-04-13 12:41:34 +0200114psa_status_t mbedtls_test_opaque_cipher_abort(
Ronald Cron7cb9c3d2021-03-10 12:21:48 +0100115 mbedtls_opaque_test_driver_cipher_operation_t *operation);
Steven Cooreman37941cb2020-07-28 18:49:51 +0200116
Ronald Cron7f13fa22021-04-13 12:41:34 +0200117psa_status_t mbedtls_test_opaque_cipher_set_iv(
Ronald Cron7cb9c3d2021-03-10 12:21:48 +0100118 mbedtls_opaque_test_driver_cipher_operation_t *operation,
119 const uint8_t *iv, size_t iv_length);
Steven Cooreman37941cb2020-07-28 18:49:51 +0200120
Ronald Cron7f13fa22021-04-13 12:41:34 +0200121psa_status_t mbedtls_test_opaque_cipher_update(
Ronald Cron7cb9c3d2021-03-10 12:21:48 +0100122 mbedtls_opaque_test_driver_cipher_operation_t *operation,
123 const uint8_t *input, size_t input_length,
124 uint8_t *output, size_t output_size, size_t *output_length);
Steven Cooreman37941cb2020-07-28 18:49:51 +0200125
Ronald Cron7f13fa22021-04-13 12:41:34 +0200126psa_status_t mbedtls_test_opaque_cipher_finish(
Ronald Cron7cb9c3d2021-03-10 12:21:48 +0100127 mbedtls_opaque_test_driver_cipher_operation_t *operation,
128 uint8_t *output, size_t output_size, size_t *output_length);
Steven Cooreman37941cb2020-07-28 18:49:51 +0200129
130#endif /* PSA_CRYPTO_DRIVER_TEST */
131#endif /* PSA_CRYPTO_TEST_DRIVERS_CIPHER_H */