1 /*
2 * Test driver for hash entry points.
3 */
4 /* Copyright The Mbed TLS Contributors
5 * SPDX-License-Identifier: Apache-2.0 OR GPL-2.0-or-later
6 */
7
8 #if !defined(MBEDTLS_CONFIG_FILE)
9 #include "mbedtls/config.h"
10 #else
11 #include MBEDTLS_CONFIG_FILE
12 #endif
13
14 #if defined(MBEDTLS_PSA_CRYPTO_DRIVERS) && defined(PSA_CRYPTO_DRIVER_TEST)
15 #include "psa_crypto_hash.h"
16
17 #include "test/drivers/hash.h"
18
19 #if defined(MBEDTLS_TEST_LIBTESTDRIVER1)
20 #include "libtestdriver1/library/psa_crypto_hash.h"
21 #endif
22
23 mbedtls_test_driver_hash_hooks_t
24 mbedtls_test_driver_hash_hooks = MBEDTLS_TEST_DRIVER_HASH_INIT;
25
mbedtls_test_transparent_hash_compute(psa_algorithm_t alg,const uint8_t * input,size_t input_length,uint8_t * hash,size_t hash_size,size_t * hash_length)26 psa_status_t mbedtls_test_transparent_hash_compute(
27 psa_algorithm_t alg,
28 const uint8_t *input, size_t input_length,
29 uint8_t *hash, size_t hash_size, size_t *hash_length)
30 {
31 mbedtls_test_driver_hash_hooks.hits++;
32
33 if (mbedtls_test_driver_hash_hooks.forced_status != PSA_SUCCESS) {
34 mbedtls_test_driver_hash_hooks.driver_status =
35 mbedtls_test_driver_hash_hooks.forced_status;
36 } else {
37 #if defined(MBEDTLS_TEST_LIBTESTDRIVER1) && \
38 defined(LIBTESTDRIVER1_MBEDTLS_PSA_BUILTIN_HASH)
39 mbedtls_test_driver_hash_hooks.driver_status =
40 libtestdriver1_mbedtls_psa_hash_compute(
41 alg, input, input_length,
42 hash, hash_size, hash_length);
43 #elif defined(MBEDTLS_PSA_BUILTIN_HASH)
44 mbedtls_test_driver_hash_hooks.driver_status =
45 mbedtls_psa_hash_compute(
46 alg, input, input_length,
47 hash, hash_size, hash_length);
48 #else
49 (void) alg;
50 (void) input;
51 (void) input_length;
52 (void) hash;
53 (void) hash_size;
54 (void) hash_length;
55 mbedtls_test_driver_hash_hooks.driver_status = PSA_ERROR_NOT_SUPPORTED;
56 #endif
57 }
58
59 return mbedtls_test_driver_hash_hooks.driver_status;
60 }
61
mbedtls_test_transparent_hash_setup(mbedtls_transparent_test_driver_hash_operation_t * operation,psa_algorithm_t alg)62 psa_status_t mbedtls_test_transparent_hash_setup(
63 mbedtls_transparent_test_driver_hash_operation_t *operation,
64 psa_algorithm_t alg)
65 {
66 mbedtls_test_driver_hash_hooks.hits++;
67
68 if (mbedtls_test_driver_hash_hooks.forced_status != PSA_SUCCESS) {
69 mbedtls_test_driver_hash_hooks.driver_status =
70 mbedtls_test_driver_hash_hooks.forced_status;
71 } else {
72 #if defined(MBEDTLS_TEST_LIBTESTDRIVER1) && \
73 defined(LIBTESTDRIVER1_MBEDTLS_PSA_BUILTIN_HASH)
74 mbedtls_test_driver_hash_hooks.driver_status =
75 libtestdriver1_mbedtls_psa_hash_setup(operation, alg);
76 #elif defined(MBEDTLS_PSA_BUILTIN_HASH)
77 mbedtls_test_driver_hash_hooks.driver_status =
78 mbedtls_psa_hash_setup(operation, alg);
79 #else
80 (void) operation;
81 (void) alg;
82 mbedtls_test_driver_hash_hooks.driver_status = PSA_ERROR_NOT_SUPPORTED;
83 #endif
84 }
85
86 return mbedtls_test_driver_hash_hooks.driver_status;
87 }
88
mbedtls_test_transparent_hash_clone(const mbedtls_transparent_test_driver_hash_operation_t * source_operation,mbedtls_transparent_test_driver_hash_operation_t * target_operation)89 psa_status_t mbedtls_test_transparent_hash_clone(
90 const mbedtls_transparent_test_driver_hash_operation_t *source_operation,
91 mbedtls_transparent_test_driver_hash_operation_t *target_operation)
92 {
93 mbedtls_test_driver_hash_hooks.hits++;
94
95 if (mbedtls_test_driver_hash_hooks.forced_status != PSA_SUCCESS) {
96 mbedtls_test_driver_hash_hooks.driver_status =
97 mbedtls_test_driver_hash_hooks.forced_status;
98 } else {
99 #if defined(MBEDTLS_TEST_LIBTESTDRIVER1) && \
100 defined(LIBTESTDRIVER1_MBEDTLS_PSA_BUILTIN_HASH)
101 mbedtls_test_driver_hash_hooks.driver_status =
102 libtestdriver1_mbedtls_psa_hash_clone(source_operation,
103 target_operation);
104 #elif defined(MBEDTLS_PSA_BUILTIN_HASH)
105 mbedtls_test_driver_hash_hooks.driver_status =
106 mbedtls_psa_hash_clone(source_operation, target_operation);
107 #else
108 (void) source_operation;
109 (void) target_operation;
110 mbedtls_test_driver_hash_hooks.driver_status = PSA_ERROR_NOT_SUPPORTED;
111 #endif
112 }
113
114 return mbedtls_test_driver_hash_hooks.driver_status;
115 }
116
mbedtls_test_transparent_hash_update(mbedtls_transparent_test_driver_hash_operation_t * operation,const uint8_t * input,size_t input_length)117 psa_status_t mbedtls_test_transparent_hash_update(
118 mbedtls_transparent_test_driver_hash_operation_t *operation,
119 const uint8_t *input,
120 size_t input_length)
121 {
122 mbedtls_test_driver_hash_hooks.hits++;
123
124 if (mbedtls_test_driver_hash_hooks.forced_status != PSA_SUCCESS) {
125 mbedtls_test_driver_hash_hooks.driver_status =
126 mbedtls_test_driver_hash_hooks.forced_status;
127 } else {
128 #if defined(MBEDTLS_TEST_LIBTESTDRIVER1) && \
129 defined(LIBTESTDRIVER1_MBEDTLS_PSA_BUILTIN_HASH)
130 mbedtls_test_driver_hash_hooks.driver_status =
131 libtestdriver1_mbedtls_psa_hash_update(
132 operation, input, input_length);
133 #elif defined(MBEDTLS_PSA_BUILTIN_HASH)
134 mbedtls_test_driver_hash_hooks.driver_status =
135 mbedtls_psa_hash_update(operation, input, input_length);
136 #else
137 (void) operation;
138 (void) input;
139 (void) input_length;
140 mbedtls_test_driver_hash_hooks.driver_status = PSA_ERROR_NOT_SUPPORTED;
141 #endif
142 }
143
144 return mbedtls_test_driver_hash_hooks.driver_status;
145 }
146
mbedtls_test_transparent_hash_finish(mbedtls_transparent_test_driver_hash_operation_t * operation,uint8_t * hash,size_t hash_size,size_t * hash_length)147 psa_status_t mbedtls_test_transparent_hash_finish(
148 mbedtls_transparent_test_driver_hash_operation_t *operation,
149 uint8_t *hash,
150 size_t hash_size,
151 size_t *hash_length)
152 {
153 mbedtls_test_driver_hash_hooks.hits++;
154
155 if (mbedtls_test_driver_hash_hooks.forced_status != PSA_SUCCESS) {
156 mbedtls_test_driver_hash_hooks.driver_status =
157 mbedtls_test_driver_hash_hooks.forced_status;
158 } else {
159 #if defined(MBEDTLS_TEST_LIBTESTDRIVER1) && \
160 defined(LIBTESTDRIVER1_MBEDTLS_PSA_BUILTIN_HASH)
161 mbedtls_test_driver_hash_hooks.driver_status =
162 libtestdriver1_mbedtls_psa_hash_finish(
163 operation, hash, hash_size, hash_length);
164 #elif defined(MBEDTLS_PSA_BUILTIN_HASH)
165 mbedtls_test_driver_hash_hooks.driver_status =
166 mbedtls_psa_hash_finish(operation, hash, hash_size, hash_length);
167 #else
168 (void) operation;
169 (void) hash;
170 (void) hash_size;
171 (void) hash_length;
172 mbedtls_test_driver_hash_hooks.driver_status = PSA_ERROR_NOT_SUPPORTED;
173 #endif
174 }
175
176 return mbedtls_test_driver_hash_hooks.driver_status;
177 }
178
mbedtls_test_transparent_hash_abort(mbedtls_transparent_test_driver_hash_operation_t * operation)179 psa_status_t mbedtls_test_transparent_hash_abort(
180 mbedtls_transparent_test_driver_hash_operation_t *operation)
181 {
182 mbedtls_test_driver_hash_hooks.hits++;
183
184 if (mbedtls_test_driver_hash_hooks.forced_status != PSA_SUCCESS) {
185 mbedtls_test_driver_hash_hooks.driver_status =
186 mbedtls_test_driver_hash_hooks.forced_status;
187 } else {
188 #if defined(MBEDTLS_TEST_LIBTESTDRIVER1) && \
189 defined(LIBTESTDRIVER1_MBEDTLS_PSA_BUILTIN_HASH)
190 mbedtls_test_driver_hash_hooks.driver_status =
191 libtestdriver1_mbedtls_psa_hash_abort(operation);
192 #elif defined(MBEDTLS_PSA_BUILTIN_HASH)
193 mbedtls_test_driver_hash_hooks.driver_status =
194 mbedtls_psa_hash_abort(operation);
195 #else
196 (void) operation;
197 mbedtls_test_driver_hash_hooks.driver_status = PSA_ERROR_NOT_SUPPORTED;
198 #endif
199 }
200
201 return mbedtls_test_driver_hash_hooks.driver_status;
202 }
203 #endif /* MBEDTLS_PSA_CRYPTO_DRIVERS && PSA_CRYPTO_DRIVER_TEST */
204