blob: 3a2a01b4f38fefcb3fc88f446423f889fe57f3b2 [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 Rodgman7ff79652023-11-03 12:04:52 +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
11#if !defined(MBEDTLS_CONFIG_FILE)
12#include "mbedtls/config.h"
13#else
14#include MBEDTLS_CONFIG_FILE
15#endif
16
17#if defined(PSA_CRYPTO_DRIVER_TEST)
18#include <psa/crypto_driver_common.h>
Ronald Cron8d310ad2020-12-15 15:17:20 +010019#include <psa/crypto.h>
Steven Cooreman37941cb2020-07-28 18:49:51 +020020
21#include "mbedtls/cipher.h"
Steven Cooreman37941cb2020-07-28 18:49:51 +020022
Steven Cooremanacb5a102020-09-08 14:06:57 +020023typedef struct {
24 /* If non-null, on success, copy this to the output. */
25 void *forced_output;
26 size_t forced_output_length;
27 /* If not PSA_SUCCESS, return this error code instead of processing the
28 * function call. */
29 psa_status_t forced_status;
Steven Cooreman5240e8b2020-09-09 11:51:45 +020030 /* Count the amount of times one of the cipher driver functions is called. */
Steven Cooremanacb5a102020-09-08 14:06:57 +020031 unsigned long hits;
Ronald Cronc4bc12e2021-04-13 12:41:34 +020032} mbedtls_test_driver_cipher_hooks_t;
Steven Cooreman37941cb2020-07-28 18:49:51 +020033
Ronald Cronc4bc12e2021-04-13 12:41:34 +020034#define MBEDTLS_TEST_DRIVER_CIPHER_INIT { NULL, 0, PSA_SUCCESS, 0 }
35static inline mbedtls_test_driver_cipher_hooks_t
Gilles Peskine1b6c09a2023-01-11 14:52:35 +010036mbedtls_test_driver_cipher_hooks_init(void)
Steven Cooremanacb5a102020-09-08 14:06:57 +020037{
Ronald Cronc4bc12e2021-04-13 12:41:34 +020038 const mbedtls_test_driver_cipher_hooks_t v = MBEDTLS_TEST_DRIVER_CIPHER_INIT;
Gilles Peskine1b6c09a2023-01-11 14:52:35 +010039 return v;
Steven Cooremanacb5a102020-09-08 14:06:57 +020040}
41
Ronald Cronc4bc12e2021-04-13 12:41:34 +020042extern mbedtls_test_driver_cipher_hooks_t mbedtls_test_driver_cipher_hooks;
Steven Cooreman37941cb2020-07-28 18:49:51 +020043
Ronald Cronc4bc12e2021-04-13 12:41:34 +020044psa_status_t mbedtls_test_transparent_cipher_encrypt(
Steven Cooreman37941cb2020-07-28 18:49:51 +020045 const psa_key_attributes_t *attributes,
46 const uint8_t *key, size_t key_length,
47 psa_algorithm_t alg,
Ronald Crona8331692021-07-09 09:19:35 +020048 const uint8_t *iv, size_t iv_length,
Steven Cooreman37941cb2020-07-28 18:49:51 +020049 const uint8_t *input, size_t input_length,
50 uint8_t *output, size_t output_size, size_t *output_length);
51
Ronald Cronc4bc12e2021-04-13 12:41:34 +020052psa_status_t mbedtls_test_transparent_cipher_decrypt(
Steven Cooreman37941cb2020-07-28 18:49:51 +020053 const psa_key_attributes_t *attributes,
54 const uint8_t *key, size_t key_length,
55 psa_algorithm_t alg,
56 const uint8_t *input, size_t input_length,
57 uint8_t *output, size_t output_size, size_t *output_length);
58
Ronald Cronc4bc12e2021-04-13 12:41:34 +020059psa_status_t mbedtls_test_transparent_cipher_encrypt_setup(
Ronald Cron7cb9c3d2021-03-10 12:21:48 +010060 mbedtls_transparent_test_driver_cipher_operation_t *operation,
Steven Cooreman37941cb2020-07-28 18:49:51 +020061 const psa_key_attributes_t *attributes,
62 const uint8_t *key, size_t key_length,
63 psa_algorithm_t alg);
64
Ronald Cronc4bc12e2021-04-13 12:41:34 +020065psa_status_t mbedtls_test_transparent_cipher_decrypt_setup(
Ronald Cron7cb9c3d2021-03-10 12:21:48 +010066 mbedtls_transparent_test_driver_cipher_operation_t *operation,
Steven Cooreman37941cb2020-07-28 18:49:51 +020067 const psa_key_attributes_t *attributes,
68 const uint8_t *key, size_t key_length,
69 psa_algorithm_t alg);
70
Ronald Cronc4bc12e2021-04-13 12:41:34 +020071psa_status_t mbedtls_test_transparent_cipher_abort(
Gilles Peskine1b6c09a2023-01-11 14:52:35 +010072 mbedtls_transparent_test_driver_cipher_operation_t *operation);
Steven Cooreman37941cb2020-07-28 18:49:51 +020073
Ronald Cronc4bc12e2021-04-13 12:41:34 +020074psa_status_t mbedtls_test_transparent_cipher_set_iv(
Ronald Cron7cb9c3d2021-03-10 12:21:48 +010075 mbedtls_transparent_test_driver_cipher_operation_t *operation,
76 const uint8_t *iv, size_t iv_length);
Steven Cooreman37941cb2020-07-28 18:49:51 +020077
Ronald Cronc4bc12e2021-04-13 12:41:34 +020078psa_status_t mbedtls_test_transparent_cipher_update(
Ronald Cron7cb9c3d2021-03-10 12:21:48 +010079 mbedtls_transparent_test_driver_cipher_operation_t *operation,
80 const uint8_t *input, size_t input_length,
81 uint8_t *output, size_t output_size, size_t *output_length);
Steven Cooreman37941cb2020-07-28 18:49:51 +020082
Ronald Cronc4bc12e2021-04-13 12:41:34 +020083psa_status_t mbedtls_test_transparent_cipher_finish(
Ronald Cron7cb9c3d2021-03-10 12:21:48 +010084 mbedtls_transparent_test_driver_cipher_operation_t *operation,
85 uint8_t *output, size_t output_size, size_t *output_length);
Steven Cooreman37941cb2020-07-28 18:49:51 +020086
87/*
88 * opaque versions
89 */
Ronald Cronc4bc12e2021-04-13 12:41:34 +020090psa_status_t mbedtls_test_opaque_cipher_encrypt(
Steven Cooreman37941cb2020-07-28 18:49:51 +020091 const psa_key_attributes_t *attributes,
92 const uint8_t *key, size_t key_length,
93 psa_algorithm_t alg,
Ronald Crona8331692021-07-09 09:19:35 +020094 const uint8_t *iv, size_t iv_length,
Steven Cooreman37941cb2020-07-28 18:49:51 +020095 const uint8_t *input, size_t input_length,
96 uint8_t *output, size_t output_size, size_t *output_length);
97
Ronald Cronc4bc12e2021-04-13 12:41:34 +020098psa_status_t mbedtls_test_opaque_cipher_decrypt(
Steven Cooreman37941cb2020-07-28 18:49:51 +020099 const psa_key_attributes_t *attributes,
100 const uint8_t *key, size_t key_length,
101 psa_algorithm_t alg,
102 const uint8_t *input, size_t input_length,
103 uint8_t *output, size_t output_size, size_t *output_length);
104
Ronald Cronc4bc12e2021-04-13 12:41:34 +0200105psa_status_t mbedtls_test_opaque_cipher_encrypt_setup(
Ronald Cron7cb9c3d2021-03-10 12:21:48 +0100106 mbedtls_opaque_test_driver_cipher_operation_t *operation,
Steven Cooreman37941cb2020-07-28 18:49:51 +0200107 const psa_key_attributes_t *attributes,
108 const uint8_t *key, size_t key_length,
109 psa_algorithm_t alg);
110
Ronald Cronc4bc12e2021-04-13 12:41:34 +0200111psa_status_t mbedtls_test_opaque_cipher_decrypt_setup(
Ronald Cron7cb9c3d2021-03-10 12:21:48 +0100112 mbedtls_opaque_test_driver_cipher_operation_t *operation,
Steven Cooreman37941cb2020-07-28 18:49:51 +0200113 const psa_key_attributes_t *attributes,
114 const uint8_t *key, size_t key_length,
115 psa_algorithm_t alg);
116
Ronald Cronc4bc12e2021-04-13 12:41:34 +0200117psa_status_t mbedtls_test_opaque_cipher_abort(
Ronald Cron7cb9c3d2021-03-10 12:21:48 +0100118 mbedtls_opaque_test_driver_cipher_operation_t *operation);
Steven Cooreman37941cb2020-07-28 18:49:51 +0200119
Ronald Cronc4bc12e2021-04-13 12:41:34 +0200120psa_status_t mbedtls_test_opaque_cipher_set_iv(
Ronald Cron7cb9c3d2021-03-10 12:21:48 +0100121 mbedtls_opaque_test_driver_cipher_operation_t *operation,
122 const uint8_t *iv, size_t iv_length);
Steven Cooreman37941cb2020-07-28 18:49:51 +0200123
Ronald Cronc4bc12e2021-04-13 12:41:34 +0200124psa_status_t mbedtls_test_opaque_cipher_update(
Ronald Cron7cb9c3d2021-03-10 12:21:48 +0100125 mbedtls_opaque_test_driver_cipher_operation_t *operation,
126 const uint8_t *input, size_t input_length,
127 uint8_t *output, size_t output_size, size_t *output_length);
Steven Cooreman37941cb2020-07-28 18:49:51 +0200128
Ronald Cronc4bc12e2021-04-13 12:41:34 +0200129psa_status_t mbedtls_test_opaque_cipher_finish(
Ronald Cron7cb9c3d2021-03-10 12:21:48 +0100130 mbedtls_opaque_test_driver_cipher_operation_t *operation,
131 uint8_t *output, size_t output_size, size_t *output_length);
Steven Cooreman37941cb2020-07-28 18:49:51 +0200132
133#endif /* PSA_CRYPTO_DRIVER_TEST */
134#endif /* PSA_CRYPTO_TEST_DRIVERS_CIPHER_H */