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