1 /*
2 * Test driver for cipher functions
3 */
4 /* Copyright The Mbed TLS Contributors
5 * SPDX-License-Identifier: Apache-2.0 OR GPL-2.0-or-later
6 */
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>
19 #include <psa/crypto.h>
20
21 #include "mbedtls/cipher.h"
22
23 typedef 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;
30 /* Count the amount of times one of the cipher driver functions is called. */
31 unsigned long hits;
32 } mbedtls_test_driver_cipher_hooks_t;
33
34 #define MBEDTLS_TEST_DRIVER_CIPHER_INIT { NULL, 0, PSA_SUCCESS, 0 }
35 static inline mbedtls_test_driver_cipher_hooks_t
mbedtls_test_driver_cipher_hooks_init(void)36 mbedtls_test_driver_cipher_hooks_init(void)
37 {
38 const mbedtls_test_driver_cipher_hooks_t v = MBEDTLS_TEST_DRIVER_CIPHER_INIT;
39 return v;
40 }
41
42 extern mbedtls_test_driver_cipher_hooks_t mbedtls_test_driver_cipher_hooks;
43
44 psa_status_t mbedtls_test_transparent_cipher_encrypt(
45 const psa_key_attributes_t *attributes,
46 const uint8_t *key, size_t key_length,
47 psa_algorithm_t alg,
48 const uint8_t *iv, size_t iv_length,
49 const uint8_t *input, size_t input_length,
50 uint8_t *output, size_t output_size, size_t *output_length);
51
52 psa_status_t mbedtls_test_transparent_cipher_decrypt(
53 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
59 psa_status_t mbedtls_test_transparent_cipher_encrypt_setup(
60 mbedtls_transparent_test_driver_cipher_operation_t *operation,
61 const psa_key_attributes_t *attributes,
62 const uint8_t *key, size_t key_length,
63 psa_algorithm_t alg);
64
65 psa_status_t mbedtls_test_transparent_cipher_decrypt_setup(
66 mbedtls_transparent_test_driver_cipher_operation_t *operation,
67 const psa_key_attributes_t *attributes,
68 const uint8_t *key, size_t key_length,
69 psa_algorithm_t alg);
70
71 psa_status_t mbedtls_test_transparent_cipher_abort(
72 mbedtls_transparent_test_driver_cipher_operation_t *operation);
73
74 psa_status_t mbedtls_test_transparent_cipher_set_iv(
75 mbedtls_transparent_test_driver_cipher_operation_t *operation,
76 const uint8_t *iv, size_t iv_length);
77
78 psa_status_t mbedtls_test_transparent_cipher_update(
79 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);
82
83 psa_status_t mbedtls_test_transparent_cipher_finish(
84 mbedtls_transparent_test_driver_cipher_operation_t *operation,
85 uint8_t *output, size_t output_size, size_t *output_length);
86
87 /*
88 * opaque versions
89 */
90 psa_status_t mbedtls_test_opaque_cipher_encrypt(
91 const psa_key_attributes_t *attributes,
92 const uint8_t *key, size_t key_length,
93 psa_algorithm_t alg,
94 const uint8_t *iv, size_t iv_length,
95 const uint8_t *input, size_t input_length,
96 uint8_t *output, size_t output_size, size_t *output_length);
97
98 psa_status_t mbedtls_test_opaque_cipher_decrypt(
99 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
105 psa_status_t mbedtls_test_opaque_cipher_encrypt_setup(
106 mbedtls_opaque_test_driver_cipher_operation_t *operation,
107 const psa_key_attributes_t *attributes,
108 const uint8_t *key, size_t key_length,
109 psa_algorithm_t alg);
110
111 psa_status_t mbedtls_test_opaque_cipher_decrypt_setup(
112 mbedtls_opaque_test_driver_cipher_operation_t *operation,
113 const psa_key_attributes_t *attributes,
114 const uint8_t *key, size_t key_length,
115 psa_algorithm_t alg);
116
117 psa_status_t mbedtls_test_opaque_cipher_abort(
118 mbedtls_opaque_test_driver_cipher_operation_t *operation);
119
120 psa_status_t mbedtls_test_opaque_cipher_set_iv(
121 mbedtls_opaque_test_driver_cipher_operation_t *operation,
122 const uint8_t *iv, size_t iv_length);
123
124 psa_status_t mbedtls_test_opaque_cipher_update(
125 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);
128
129 psa_status_t mbedtls_test_opaque_cipher_finish(
130 mbedtls_opaque_test_driver_cipher_operation_t *operation,
131 uint8_t *output, size_t output_size, size_t *output_length);
132
133 #endif /* PSA_CRYPTO_DRIVER_TEST */
134 #endif /* PSA_CRYPTO_TEST_DRIVERS_CIPHER_H */
135