1 /*
2 * Test driver for MAC entry points.
3 */
4 /* Copyright The Mbed TLS Contributors
5 * SPDX-License-Identifier: Apache-2.0
6 *
7 * Licensed under the Apache License, Version 2.0 (the "License"); you may
8 * not use this file except in compliance with the License.
9 * You may obtain a copy of the License at
10 *
11 * http://www.apache.org/licenses/LICENSE-2.0
12 *
13 * Unless required by applicable law or agreed to in writing, software
14 * distributed under the License is distributed on an "AS IS" BASIS, WITHOUT
15 * WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
16 * See the License for the specific language governing permissions and
17 * limitations under the License.
18 */
19
20 #include <test/helpers.h>
21
22 #if defined(MBEDTLS_PSA_CRYPTO_DRIVERS) && defined(PSA_CRYPTO_DRIVER_TEST)
23 #include "psa_crypto_mac.h"
24
25 #include "test/drivers/mac.h"
26
27 mbedtls_test_driver_mac_hooks_t mbedtls_test_driver_mac_hooks =
28 MBEDTLS_TEST_DRIVER_MAC_INIT;
29
mbedtls_test_transparent_mac_compute(const psa_key_attributes_t * attributes,const uint8_t * key_buffer,size_t key_buffer_size,psa_algorithm_t alg,const uint8_t * input,size_t input_length,uint8_t * mac,size_t mac_size,size_t * mac_length)30 psa_status_t mbedtls_test_transparent_mac_compute(
31 const psa_key_attributes_t *attributes,
32 const uint8_t *key_buffer,
33 size_t key_buffer_size,
34 psa_algorithm_t alg,
35 const uint8_t *input,
36 size_t input_length,
37 uint8_t *mac,
38 size_t mac_size,
39 size_t *mac_length )
40 {
41 mbedtls_test_driver_mac_hooks.hits++;
42
43 if( mbedtls_test_driver_mac_hooks.forced_status != PSA_SUCCESS )
44 {
45 mbedtls_test_driver_mac_hooks.driver_status =
46 mbedtls_test_driver_mac_hooks.forced_status;
47 }
48 else
49 {
50 mbedtls_test_driver_mac_hooks.driver_status =
51 mbedtls_transparent_test_driver_mac_compute(
52 attributes, key_buffer, key_buffer_size, alg,
53 input, input_length,
54 mac, mac_size, mac_length );
55 }
56
57 return( mbedtls_test_driver_mac_hooks.driver_status );
58 }
59
mbedtls_test_transparent_mac_sign_setup(mbedtls_transparent_test_driver_mac_operation_t * operation,const psa_key_attributes_t * attributes,const uint8_t * key_buffer,size_t key_buffer_size,psa_algorithm_t alg)60 psa_status_t mbedtls_test_transparent_mac_sign_setup(
61 mbedtls_transparent_test_driver_mac_operation_t *operation,
62 const psa_key_attributes_t *attributes,
63 const uint8_t *key_buffer,
64 size_t key_buffer_size,
65 psa_algorithm_t alg )
66 {
67 mbedtls_test_driver_mac_hooks.hits++;
68
69 if( mbedtls_test_driver_mac_hooks.forced_status != PSA_SUCCESS )
70 {
71 mbedtls_test_driver_mac_hooks.driver_status =
72 mbedtls_test_driver_mac_hooks.forced_status;
73 }
74 else
75 {
76 mbedtls_test_driver_mac_hooks.driver_status =
77 mbedtls_transparent_test_driver_mac_sign_setup(
78 operation, attributes, key_buffer, key_buffer_size, alg );
79 }
80
81 return( mbedtls_test_driver_mac_hooks.driver_status );
82 }
83
mbedtls_test_transparent_mac_verify_setup(mbedtls_transparent_test_driver_mac_operation_t * operation,const psa_key_attributes_t * attributes,const uint8_t * key_buffer,size_t key_buffer_size,psa_algorithm_t alg)84 psa_status_t mbedtls_test_transparent_mac_verify_setup(
85 mbedtls_transparent_test_driver_mac_operation_t *operation,
86 const psa_key_attributes_t *attributes,
87 const uint8_t *key_buffer,
88 size_t key_buffer_size,
89 psa_algorithm_t alg )
90 {
91 mbedtls_test_driver_mac_hooks.hits++;
92
93 if( mbedtls_test_driver_mac_hooks.forced_status != PSA_SUCCESS )
94 {
95 mbedtls_test_driver_mac_hooks.driver_status =
96 mbedtls_test_driver_mac_hooks.forced_status;
97 }
98 else
99 {
100 mbedtls_test_driver_mac_hooks.driver_status =
101 mbedtls_transparent_test_driver_mac_verify_setup(
102 operation, attributes, key_buffer, key_buffer_size, alg );
103 }
104
105 return( mbedtls_test_driver_mac_hooks.driver_status );
106 }
107
mbedtls_test_transparent_mac_update(mbedtls_transparent_test_driver_mac_operation_t * operation,const uint8_t * input,size_t input_length)108 psa_status_t mbedtls_test_transparent_mac_update(
109 mbedtls_transparent_test_driver_mac_operation_t *operation,
110 const uint8_t *input,
111 size_t input_length )
112 {
113 mbedtls_test_driver_mac_hooks.hits++;
114
115 if( mbedtls_test_driver_mac_hooks.forced_status != PSA_SUCCESS )
116 {
117 mbedtls_test_driver_mac_hooks.driver_status =
118 mbedtls_test_driver_mac_hooks.forced_status;
119 }
120 else
121 {
122 mbedtls_test_driver_mac_hooks.driver_status =
123 mbedtls_transparent_test_driver_mac_update(
124 operation, input, input_length );
125 }
126
127 return( mbedtls_test_driver_mac_hooks.driver_status );
128 }
129
mbedtls_test_transparent_mac_sign_finish(mbedtls_transparent_test_driver_mac_operation_t * operation,uint8_t * mac,size_t mac_size,size_t * mac_length)130 psa_status_t mbedtls_test_transparent_mac_sign_finish(
131 mbedtls_transparent_test_driver_mac_operation_t *operation,
132 uint8_t *mac,
133 size_t mac_size,
134 size_t *mac_length )
135 {
136 mbedtls_test_driver_mac_hooks.hits++;
137
138 if( mbedtls_test_driver_mac_hooks.forced_status != PSA_SUCCESS )
139 {
140 mbedtls_test_driver_mac_hooks.driver_status =
141 mbedtls_test_driver_mac_hooks.forced_status;
142 }
143 else
144 {
145 mbedtls_test_driver_mac_hooks.driver_status =
146 mbedtls_transparent_test_driver_mac_sign_finish(
147 operation, mac, mac_size, mac_length );
148 }
149
150 return( mbedtls_test_driver_mac_hooks.driver_status );
151 }
152
mbedtls_test_transparent_mac_verify_finish(mbedtls_transparent_test_driver_mac_operation_t * operation,const uint8_t * mac,size_t mac_length)153 psa_status_t mbedtls_test_transparent_mac_verify_finish(
154 mbedtls_transparent_test_driver_mac_operation_t *operation,
155 const uint8_t *mac,
156 size_t mac_length )
157 {
158 mbedtls_test_driver_mac_hooks.hits++;
159
160 if( mbedtls_test_driver_mac_hooks.forced_status != PSA_SUCCESS )
161 {
162 mbedtls_test_driver_mac_hooks.driver_status =
163 mbedtls_test_driver_mac_hooks.forced_status;
164 }
165 else
166 {
167 mbedtls_test_driver_mac_hooks.driver_status =
168 mbedtls_transparent_test_driver_mac_verify_finish(
169 operation, mac, mac_length );
170 }
171
172 return( mbedtls_test_driver_mac_hooks.driver_status );
173 }
174
mbedtls_test_transparent_mac_abort(mbedtls_transparent_test_driver_mac_operation_t * operation)175 psa_status_t mbedtls_test_transparent_mac_abort(
176 mbedtls_transparent_test_driver_mac_operation_t *operation )
177 {
178 mbedtls_test_driver_mac_hooks.hits++;
179
180 if( mbedtls_test_driver_mac_hooks.forced_status != PSA_SUCCESS )
181 {
182 mbedtls_test_driver_mac_hooks.driver_status =
183 mbedtls_test_driver_mac_hooks.forced_status;
184 }
185 else
186 {
187 mbedtls_test_driver_mac_hooks.driver_status =
188 mbedtls_transparent_test_driver_mac_abort( operation );
189 }
190
191 return( mbedtls_test_driver_mac_hooks.driver_status );
192 }
193
mbedtls_test_opaque_mac_compute(const psa_key_attributes_t * attributes,const uint8_t * key_buffer,size_t key_buffer_size,psa_algorithm_t alg,const uint8_t * input,size_t input_length,uint8_t * mac,size_t mac_size,size_t * mac_length)194 psa_status_t mbedtls_test_opaque_mac_compute(
195 const psa_key_attributes_t *attributes,
196 const uint8_t *key_buffer,
197 size_t key_buffer_size,
198 psa_algorithm_t alg,
199 const uint8_t *input,
200 size_t input_length,
201 uint8_t *mac,
202 size_t mac_size,
203 size_t *mac_length )
204 {
205 mbedtls_test_driver_mac_hooks.hits++;
206
207 if( mbedtls_test_driver_mac_hooks.forced_status != PSA_SUCCESS )
208 {
209 mbedtls_test_driver_mac_hooks.driver_status =
210 mbedtls_test_driver_mac_hooks.forced_status;
211 }
212 else
213 {
214 mbedtls_test_driver_mac_hooks.driver_status =
215 mbedtls_opaque_test_driver_mac_compute(
216 attributes, key_buffer, key_buffer_size, alg,
217 input, input_length,
218 mac, mac_size, mac_length );
219 }
220
221 return( mbedtls_test_driver_mac_hooks.driver_status );
222 }
223
mbedtls_test_opaque_mac_sign_setup(mbedtls_opaque_test_driver_mac_operation_t * operation,const psa_key_attributes_t * attributes,const uint8_t * key_buffer,size_t key_buffer_size,psa_algorithm_t alg)224 psa_status_t mbedtls_test_opaque_mac_sign_setup(
225 mbedtls_opaque_test_driver_mac_operation_t *operation,
226 const psa_key_attributes_t *attributes,
227 const uint8_t *key_buffer,
228 size_t key_buffer_size,
229 psa_algorithm_t alg )
230 {
231 mbedtls_test_driver_mac_hooks.hits++;
232
233 if( mbedtls_test_driver_mac_hooks.forced_status != PSA_SUCCESS )
234 {
235 mbedtls_test_driver_mac_hooks.driver_status =
236 mbedtls_test_driver_mac_hooks.forced_status;
237 }
238 else
239 {
240 mbedtls_test_driver_mac_hooks.driver_status =
241 mbedtls_opaque_test_driver_mac_sign_setup(
242 operation, attributes, key_buffer, key_buffer_size, alg );
243 }
244
245 return( mbedtls_test_driver_mac_hooks.driver_status );
246 }
247
mbedtls_test_opaque_mac_verify_setup(mbedtls_opaque_test_driver_mac_operation_t * operation,const psa_key_attributes_t * attributes,const uint8_t * key_buffer,size_t key_buffer_size,psa_algorithm_t alg)248 psa_status_t mbedtls_test_opaque_mac_verify_setup(
249 mbedtls_opaque_test_driver_mac_operation_t *operation,
250 const psa_key_attributes_t *attributes,
251 const uint8_t *key_buffer,
252 size_t key_buffer_size,
253 psa_algorithm_t alg )
254 {
255 mbedtls_test_driver_mac_hooks.hits++;
256
257 if( mbedtls_test_driver_mac_hooks.forced_status != PSA_SUCCESS )
258 {
259 mbedtls_test_driver_mac_hooks.driver_status =
260 mbedtls_test_driver_mac_hooks.forced_status;
261 }
262 else
263 {
264 mbedtls_test_driver_mac_hooks.driver_status =
265 mbedtls_opaque_test_driver_mac_verify_setup(
266 operation, attributes, key_buffer, key_buffer_size, alg );
267 }
268
269 return( mbedtls_test_driver_mac_hooks.driver_status );
270 }
271
mbedtls_test_opaque_mac_update(mbedtls_opaque_test_driver_mac_operation_t * operation,const uint8_t * input,size_t input_length)272 psa_status_t mbedtls_test_opaque_mac_update(
273 mbedtls_opaque_test_driver_mac_operation_t *operation,
274 const uint8_t *input,
275 size_t input_length )
276 {
277 mbedtls_test_driver_mac_hooks.hits++;
278
279 if( mbedtls_test_driver_mac_hooks.forced_status != PSA_SUCCESS )
280 {
281 mbedtls_test_driver_mac_hooks.driver_status =
282 mbedtls_test_driver_mac_hooks.forced_status;
283 }
284 else
285 {
286 mbedtls_test_driver_mac_hooks.driver_status =
287 mbedtls_opaque_test_driver_mac_update(
288 operation, input, input_length );
289 }
290
291 return( mbedtls_test_driver_mac_hooks.driver_status );
292 }
293
mbedtls_test_opaque_mac_sign_finish(mbedtls_opaque_test_driver_mac_operation_t * operation,uint8_t * mac,size_t mac_size,size_t * mac_length)294 psa_status_t mbedtls_test_opaque_mac_sign_finish(
295 mbedtls_opaque_test_driver_mac_operation_t *operation,
296 uint8_t *mac,
297 size_t mac_size,
298 size_t *mac_length )
299 {
300 mbedtls_test_driver_mac_hooks.hits++;
301
302 if( mbedtls_test_driver_mac_hooks.forced_status != PSA_SUCCESS )
303 {
304 mbedtls_test_driver_mac_hooks.driver_status =
305 mbedtls_test_driver_mac_hooks.forced_status;
306 }
307 else
308 {
309 mbedtls_test_driver_mac_hooks.driver_status =
310 mbedtls_opaque_test_driver_mac_sign_finish(
311 operation, mac, mac_size, mac_length );
312 }
313
314 return( mbedtls_test_driver_mac_hooks.driver_status );
315 }
316
mbedtls_test_opaque_mac_verify_finish(mbedtls_opaque_test_driver_mac_operation_t * operation,const uint8_t * mac,size_t mac_length)317 psa_status_t mbedtls_test_opaque_mac_verify_finish(
318 mbedtls_opaque_test_driver_mac_operation_t *operation,
319 const uint8_t *mac,
320 size_t mac_length )
321 {
322 mbedtls_test_driver_mac_hooks.hits++;
323
324 if( mbedtls_test_driver_mac_hooks.forced_status != PSA_SUCCESS )
325 {
326 mbedtls_test_driver_mac_hooks.driver_status =
327 mbedtls_test_driver_mac_hooks.forced_status;
328 }
329 else
330 {
331 mbedtls_test_driver_mac_hooks.driver_status =
332 mbedtls_opaque_test_driver_mac_verify_finish(
333 operation, mac, mac_length );
334 }
335
336 return( mbedtls_test_driver_mac_hooks.driver_status );
337 }
338
mbedtls_test_opaque_mac_abort(mbedtls_opaque_test_driver_mac_operation_t * operation)339 psa_status_t mbedtls_test_opaque_mac_abort(
340 mbedtls_opaque_test_driver_mac_operation_t *operation )
341 {
342 mbedtls_test_driver_mac_hooks.hits++;
343
344 if( mbedtls_test_driver_mac_hooks.forced_status != PSA_SUCCESS )
345 {
346 mbedtls_test_driver_mac_hooks.driver_status =
347 mbedtls_test_driver_mac_hooks.forced_status;
348 }
349 else
350 {
351 mbedtls_test_driver_mac_hooks.driver_status =
352 mbedtls_opaque_test_driver_mac_abort( operation );
353 }
354
355 return( mbedtls_test_driver_mac_hooks.driver_status );
356 }
357
358 #endif /* MBEDTLS_PSA_CRYPTO_DRIVERS && PSA_CRYPTO_DRIVER_TEST */
359