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#include "mbedtls/build_info.h"
12
13#if defined(PSA_CRYPTO_DRIVER_TEST)
14#include <psa/crypto_driver_common.h>
15#include <psa/crypto.h>
16
17#include "mbedtls/cipher.h"
18
19typedef 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;
26    psa_status_t forced_status_encrypt;
27    psa_status_t forced_status_set_iv;
28    /* Count the amount of times one of the cipher driver functions is called. */
29    unsigned long hits;
30    unsigned long hits_encrypt;
31    unsigned long hits_set_iv;
32} mbedtls_test_driver_cipher_hooks_t;
33
34#define MBEDTLS_TEST_DRIVER_CIPHER_INIT { NULL, 0, \
35                                          PSA_SUCCESS, PSA_SUCCESS, PSA_SUCCESS, \
36                                          0, 0, 0 }
37static inline mbedtls_test_driver_cipher_hooks_t
38mbedtls_test_driver_cipher_hooks_init(void)
39{
40    const mbedtls_test_driver_cipher_hooks_t v = MBEDTLS_TEST_DRIVER_CIPHER_INIT;
41    return v;
42}
43
44extern mbedtls_test_driver_cipher_hooks_t mbedtls_test_driver_cipher_hooks;
45
46psa_status_t mbedtls_test_transparent_cipher_encrypt(
47    const psa_key_attributes_t *attributes,
48    const uint8_t *key, size_t key_length,
49    psa_algorithm_t alg,
50    const uint8_t *iv, size_t iv_length,
51    const uint8_t *input, size_t input_length,
52    uint8_t *output, size_t output_size, size_t *output_length);
53
54psa_status_t mbedtls_test_transparent_cipher_decrypt(
55    const psa_key_attributes_t *attributes,
56    const uint8_t *key, size_t key_length,
57    psa_algorithm_t alg,
58    const uint8_t *input, size_t input_length,
59    uint8_t *output, size_t output_size, size_t *output_length);
60
61psa_status_t mbedtls_test_transparent_cipher_encrypt_setup(
62    mbedtls_transparent_test_driver_cipher_operation_t *operation,
63    const psa_key_attributes_t *attributes,
64    const uint8_t *key, size_t key_length,
65    psa_algorithm_t alg);
66
67psa_status_t mbedtls_test_transparent_cipher_decrypt_setup(
68    mbedtls_transparent_test_driver_cipher_operation_t *operation,
69    const psa_key_attributes_t *attributes,
70    const uint8_t *key, size_t key_length,
71    psa_algorithm_t alg);
72
73psa_status_t mbedtls_test_transparent_cipher_abort(
74    mbedtls_transparent_test_driver_cipher_operation_t *operation);
75
76psa_status_t mbedtls_test_transparent_cipher_set_iv(
77    mbedtls_transparent_test_driver_cipher_operation_t *operation,
78    const uint8_t *iv, size_t iv_length);
79
80psa_status_t mbedtls_test_transparent_cipher_update(
81    mbedtls_transparent_test_driver_cipher_operation_t *operation,
82    const uint8_t *input, size_t input_length,
83    uint8_t *output, size_t output_size, size_t *output_length);
84
85psa_status_t mbedtls_test_transparent_cipher_finish(
86    mbedtls_transparent_test_driver_cipher_operation_t *operation,
87    uint8_t *output, size_t output_size, size_t *output_length);
88
89/*
90 * opaque versions
91 */
92psa_status_t mbedtls_test_opaque_cipher_encrypt(
93    const psa_key_attributes_t *attributes,
94    const uint8_t *key, size_t key_length,
95    psa_algorithm_t alg,
96    const uint8_t *iv, size_t iv_length,
97    const uint8_t *input, size_t input_length,
98    uint8_t *output, size_t output_size, size_t *output_length);
99
100psa_status_t mbedtls_test_opaque_cipher_decrypt(
101    const psa_key_attributes_t *attributes,
102    const uint8_t *key, size_t key_length,
103    psa_algorithm_t alg,
104    const uint8_t *input, size_t input_length,
105    uint8_t *output, size_t output_size, size_t *output_length);
106
107psa_status_t mbedtls_test_opaque_cipher_encrypt_setup(
108    mbedtls_opaque_test_driver_cipher_operation_t *operation,
109    const psa_key_attributes_t *attributes,
110    const uint8_t *key, size_t key_length,
111    psa_algorithm_t alg);
112
113psa_status_t mbedtls_test_opaque_cipher_decrypt_setup(
114    mbedtls_opaque_test_driver_cipher_operation_t *operation,
115    const psa_key_attributes_t *attributes,
116    const uint8_t *key, size_t key_length,
117    psa_algorithm_t alg);
118
119psa_status_t mbedtls_test_opaque_cipher_abort(
120    mbedtls_opaque_test_driver_cipher_operation_t *operation);
121
122psa_status_t mbedtls_test_opaque_cipher_set_iv(
123    mbedtls_opaque_test_driver_cipher_operation_t *operation,
124    const uint8_t *iv, size_t iv_length);
125
126psa_status_t mbedtls_test_opaque_cipher_update(
127    mbedtls_opaque_test_driver_cipher_operation_t *operation,
128    const uint8_t *input, size_t input_length,
129    uint8_t *output, size_t output_size, size_t *output_length);
130
131psa_status_t mbedtls_test_opaque_cipher_finish(
132    mbedtls_opaque_test_driver_cipher_operation_t *operation,
133    uint8_t *output, size_t output_size, size_t *output_length);
134
135#endif /* PSA_CRYPTO_DRIVER_TEST */
136#endif /* PSA_CRYPTO_TEST_DRIVERS_CIPHER_H */
137