blob: 76ec12a22f64fe05cfe31e2f3ae29737278049fb [file] [log] [blame]
Ronald Cronfa036c82021-03-23 09:33:25 +01001/*
2 * Test driver for hash entry points.
3 */
4/* Copyright The Mbed TLS Contributors
Dave Rodgman16799db2023-11-02 19:47:20 +00005 * SPDX-License-Identifier: Apache-2.0 OR GPL-2.0-or-later
Ronald Cronfa036c82021-03-23 09:33:25 +01006 */
7
Mateusz Starzykb4a01292021-05-27 14:49:25 +02008#include <test/helpers.h>
Ronald Cronfa036c82021-03-23 09:33:25 +01009
Ronald Crone6e6b752023-01-16 16:56:51 +010010#if defined(PSA_CRYPTO_DRIVER_TEST)
Ronald Cronfa036c82021-03-23 09:33:25 +010011#include "psa_crypto_hash.h"
12
13#include "test/drivers/hash.h"
14
Ronald Cron7975fae2021-09-13 14:50:42 +020015#if defined(MBEDTLS_TEST_LIBTESTDRIVER1)
16#include "libtestdriver1/library/psa_crypto_hash.h"
17#endif
18
Ronald Cron7f13fa22021-04-13 12:41:34 +020019mbedtls_test_driver_hash_hooks_t
20 mbedtls_test_driver_hash_hooks = MBEDTLS_TEST_DRIVER_HASH_INIT;
Ronald Cronfa036c82021-03-23 09:33:25 +010021
Ronald Cron7f13fa22021-04-13 12:41:34 +020022psa_status_t mbedtls_test_transparent_hash_compute(
Ronald Cronfa036c82021-03-23 09:33:25 +010023 psa_algorithm_t alg,
24 const uint8_t *input, size_t input_length,
Gilles Peskine449bd832023-01-11 14:50:10 +010025 uint8_t *hash, size_t hash_size, size_t *hash_length)
Ronald Cronfa036c82021-03-23 09:33:25 +010026{
Ronald Cron7f13fa22021-04-13 12:41:34 +020027 mbedtls_test_driver_hash_hooks.hits++;
Ronald Cronfa036c82021-03-23 09:33:25 +010028
Gilles Peskine449bd832023-01-11 14:50:10 +010029 if (mbedtls_test_driver_hash_hooks.forced_status != PSA_SUCCESS) {
30 mbedtls_test_driver_hash_hooks.driver_status =
31 mbedtls_test_driver_hash_hooks.forced_status;
32 } else {
Ronald Cron7975fae2021-09-13 14:50:42 +020033#if defined(MBEDTLS_TEST_LIBTESTDRIVER1) && \
Gilles Peskine449bd832023-01-11 14:50:10 +010034 defined(LIBTESTDRIVER1_MBEDTLS_PSA_BUILTIN_HASH)
Ronald Cron7f13fa22021-04-13 12:41:34 +020035 mbedtls_test_driver_hash_hooks.driver_status =
Ronald Cron40170d92021-03-13 18:19:08 +010036 libtestdriver1_mbedtls_psa_hash_compute(
Ronald Cronfa036c82021-03-23 09:33:25 +010037 alg, input, input_length,
Gilles Peskine449bd832023-01-11 14:50:10 +010038 hash, hash_size, hash_length);
Ronald Cron73c9d9e2021-04-09 11:09:54 +020039#elif defined(MBEDTLS_PSA_BUILTIN_HASH)
40 mbedtls_test_driver_hash_hooks.driver_status =
41 mbedtls_psa_hash_compute(
42 alg, input, input_length,
Gilles Peskine449bd832023-01-11 14:50:10 +010043 hash, hash_size, hash_length);
Ronald Cron73c9d9e2021-04-09 11:09:54 +020044#else
45 (void) alg;
46 (void) input;
47 (void) input_length;
48 (void) hash;
49 (void) hash_size;
50 (void) hash_length;
51 mbedtls_test_driver_hash_hooks.driver_status = PSA_ERROR_NOT_SUPPORTED;
52#endif
Ronald Cronfa036c82021-03-23 09:33:25 +010053 }
54
Gilles Peskine449bd832023-01-11 14:50:10 +010055 return mbedtls_test_driver_hash_hooks.driver_status;
Ronald Cronfa036c82021-03-23 09:33:25 +010056}
57
Ronald Cron7f13fa22021-04-13 12:41:34 +020058psa_status_t mbedtls_test_transparent_hash_setup(
Ronald Cronfa036c82021-03-23 09:33:25 +010059 mbedtls_transparent_test_driver_hash_operation_t *operation,
Gilles Peskine449bd832023-01-11 14:50:10 +010060 psa_algorithm_t alg)
Ronald Cronfa036c82021-03-23 09:33:25 +010061{
Ronald Cron7f13fa22021-04-13 12:41:34 +020062 mbedtls_test_driver_hash_hooks.hits++;
Ronald Cronfa036c82021-03-23 09:33:25 +010063
Gilles Peskine449bd832023-01-11 14:50:10 +010064 if (mbedtls_test_driver_hash_hooks.forced_status != PSA_SUCCESS) {
Ronald Cron7f13fa22021-04-13 12:41:34 +020065 mbedtls_test_driver_hash_hooks.driver_status =
Gilles Peskine449bd832023-01-11 14:50:10 +010066 mbedtls_test_driver_hash_hooks.forced_status;
67 } else {
68#if defined(MBEDTLS_TEST_LIBTESTDRIVER1) && \
69 defined(LIBTESTDRIVER1_MBEDTLS_PSA_BUILTIN_HASH)
70 mbedtls_test_driver_hash_hooks.driver_status =
71 libtestdriver1_mbedtls_psa_hash_setup(operation, alg);
Ronald Cron73c9d9e2021-04-09 11:09:54 +020072#elif defined(MBEDTLS_PSA_BUILTIN_HASH)
73 mbedtls_test_driver_hash_hooks.driver_status =
Gilles Peskine449bd832023-01-11 14:50:10 +010074 mbedtls_psa_hash_setup(operation, alg);
Ronald Cron73c9d9e2021-04-09 11:09:54 +020075#else
76 (void) operation;
77 (void) alg;
78 mbedtls_test_driver_hash_hooks.driver_status = PSA_ERROR_NOT_SUPPORTED;
79#endif
Ronald Cronfa036c82021-03-23 09:33:25 +010080 }
81
Gilles Peskine449bd832023-01-11 14:50:10 +010082 return mbedtls_test_driver_hash_hooks.driver_status;
Ronald Cronfa036c82021-03-23 09:33:25 +010083}
84
Ronald Cron7f13fa22021-04-13 12:41:34 +020085psa_status_t mbedtls_test_transparent_hash_clone(
Ronald Cronfa036c82021-03-23 09:33:25 +010086 const mbedtls_transparent_test_driver_hash_operation_t *source_operation,
Gilles Peskine449bd832023-01-11 14:50:10 +010087 mbedtls_transparent_test_driver_hash_operation_t *target_operation)
Ronald Cronfa036c82021-03-23 09:33:25 +010088{
Ronald Cron7f13fa22021-04-13 12:41:34 +020089 mbedtls_test_driver_hash_hooks.hits++;
Ronald Cronfa036c82021-03-23 09:33:25 +010090
Gilles Peskine449bd832023-01-11 14:50:10 +010091 if (mbedtls_test_driver_hash_hooks.forced_status != PSA_SUCCESS) {
Ronald Cron7f13fa22021-04-13 12:41:34 +020092 mbedtls_test_driver_hash_hooks.driver_status =
Gilles Peskine449bd832023-01-11 14:50:10 +010093 mbedtls_test_driver_hash_hooks.forced_status;
94 } else {
95#if defined(MBEDTLS_TEST_LIBTESTDRIVER1) && \
96 defined(LIBTESTDRIVER1_MBEDTLS_PSA_BUILTIN_HASH)
97 mbedtls_test_driver_hash_hooks.driver_status =
98 libtestdriver1_mbedtls_psa_hash_clone(source_operation,
99 target_operation);
Ronald Cron73c9d9e2021-04-09 11:09:54 +0200100#elif defined(MBEDTLS_PSA_BUILTIN_HASH)
101 mbedtls_test_driver_hash_hooks.driver_status =
Gilles Peskine449bd832023-01-11 14:50:10 +0100102 mbedtls_psa_hash_clone(source_operation, target_operation);
Ronald Cron73c9d9e2021-04-09 11:09:54 +0200103#else
104 (void) source_operation;
105 (void) target_operation;
106 mbedtls_test_driver_hash_hooks.driver_status = PSA_ERROR_NOT_SUPPORTED;
107#endif
Ronald Cronfa036c82021-03-23 09:33:25 +0100108 }
109
Gilles Peskine449bd832023-01-11 14:50:10 +0100110 return mbedtls_test_driver_hash_hooks.driver_status;
Ronald Cronfa036c82021-03-23 09:33:25 +0100111}
112
Ronald Cron7f13fa22021-04-13 12:41:34 +0200113psa_status_t mbedtls_test_transparent_hash_update(
Ronald Cronfa036c82021-03-23 09:33:25 +0100114 mbedtls_transparent_test_driver_hash_operation_t *operation,
115 const uint8_t *input,
Gilles Peskine449bd832023-01-11 14:50:10 +0100116 size_t input_length)
Ronald Cronfa036c82021-03-23 09:33:25 +0100117{
Ronald Cron7f13fa22021-04-13 12:41:34 +0200118 mbedtls_test_driver_hash_hooks.hits++;
Ronald Cronfa036c82021-03-23 09:33:25 +0100119
Gilles Peskine449bd832023-01-11 14:50:10 +0100120 if (mbedtls_test_driver_hash_hooks.forced_status != PSA_SUCCESS) {
121 mbedtls_test_driver_hash_hooks.driver_status =
122 mbedtls_test_driver_hash_hooks.forced_status;
123 } else {
Ronald Cron7975fae2021-09-13 14:50:42 +0200124#if defined(MBEDTLS_TEST_LIBTESTDRIVER1) && \
Gilles Peskine449bd832023-01-11 14:50:10 +0100125 defined(LIBTESTDRIVER1_MBEDTLS_PSA_BUILTIN_HASH)
Ronald Cron7f13fa22021-04-13 12:41:34 +0200126 mbedtls_test_driver_hash_hooks.driver_status =
Ronald Cron40170d92021-03-13 18:19:08 +0100127 libtestdriver1_mbedtls_psa_hash_update(
Gilles Peskine449bd832023-01-11 14:50:10 +0100128 operation, input, input_length);
Ronald Cron73c9d9e2021-04-09 11:09:54 +0200129#elif defined(MBEDTLS_PSA_BUILTIN_HASH)
130 mbedtls_test_driver_hash_hooks.driver_status =
Gilles Peskine449bd832023-01-11 14:50:10 +0100131 mbedtls_psa_hash_update(operation, input, input_length);
Ronald Cron73c9d9e2021-04-09 11:09:54 +0200132#else
133 (void) operation;
134 (void) input;
135 (void) input_length;
136 mbedtls_test_driver_hash_hooks.driver_status = PSA_ERROR_NOT_SUPPORTED;
137#endif
Ronald Cronfa036c82021-03-23 09:33:25 +0100138 }
139
Gilles Peskine449bd832023-01-11 14:50:10 +0100140 return mbedtls_test_driver_hash_hooks.driver_status;
Ronald Cronfa036c82021-03-23 09:33:25 +0100141}
142
Ronald Cron7f13fa22021-04-13 12:41:34 +0200143psa_status_t mbedtls_test_transparent_hash_finish(
Ronald Cronfa036c82021-03-23 09:33:25 +0100144 mbedtls_transparent_test_driver_hash_operation_t *operation,
145 uint8_t *hash,
146 size_t hash_size,
Gilles Peskine449bd832023-01-11 14:50:10 +0100147 size_t *hash_length)
Ronald Cronfa036c82021-03-23 09:33:25 +0100148{
Ronald Cron7f13fa22021-04-13 12:41:34 +0200149 mbedtls_test_driver_hash_hooks.hits++;
Ronald Cronfa036c82021-03-23 09:33:25 +0100150
Gilles Peskine449bd832023-01-11 14:50:10 +0100151 if (mbedtls_test_driver_hash_hooks.forced_status != PSA_SUCCESS) {
152 mbedtls_test_driver_hash_hooks.driver_status =
153 mbedtls_test_driver_hash_hooks.forced_status;
154 } else {
Ronald Cron7975fae2021-09-13 14:50:42 +0200155#if defined(MBEDTLS_TEST_LIBTESTDRIVER1) && \
Gilles Peskine449bd832023-01-11 14:50:10 +0100156 defined(LIBTESTDRIVER1_MBEDTLS_PSA_BUILTIN_HASH)
Ronald Cron7f13fa22021-04-13 12:41:34 +0200157 mbedtls_test_driver_hash_hooks.driver_status =
Ronald Cron40170d92021-03-13 18:19:08 +0100158 libtestdriver1_mbedtls_psa_hash_finish(
Gilles Peskine449bd832023-01-11 14:50:10 +0100159 operation, hash, hash_size, hash_length);
Ronald Cron73c9d9e2021-04-09 11:09:54 +0200160#elif defined(MBEDTLS_PSA_BUILTIN_HASH)
161 mbedtls_test_driver_hash_hooks.driver_status =
Gilles Peskine449bd832023-01-11 14:50:10 +0100162 mbedtls_psa_hash_finish(operation, hash, hash_size, hash_length);
Ronald Cron73c9d9e2021-04-09 11:09:54 +0200163#else
164 (void) operation;
165 (void) hash;
166 (void) hash_size;
167 (void) hash_length;
168 mbedtls_test_driver_hash_hooks.driver_status = PSA_ERROR_NOT_SUPPORTED;
169#endif
Ronald Cronfa036c82021-03-23 09:33:25 +0100170 }
171
Gilles Peskine449bd832023-01-11 14:50:10 +0100172 return mbedtls_test_driver_hash_hooks.driver_status;
Ronald Cronfa036c82021-03-23 09:33:25 +0100173}
174
Ronald Cron7f13fa22021-04-13 12:41:34 +0200175psa_status_t mbedtls_test_transparent_hash_abort(
Gilles Peskine449bd832023-01-11 14:50:10 +0100176 mbedtls_transparent_test_driver_hash_operation_t *operation)
Ronald Cronfa036c82021-03-23 09:33:25 +0100177{
Ronald Cron7f13fa22021-04-13 12:41:34 +0200178 mbedtls_test_driver_hash_hooks.hits++;
Ronald Cronfa036c82021-03-23 09:33:25 +0100179
Gilles Peskine449bd832023-01-11 14:50:10 +0100180 if (mbedtls_test_driver_hash_hooks.forced_status != PSA_SUCCESS) {
Ronald Cron7f13fa22021-04-13 12:41:34 +0200181 mbedtls_test_driver_hash_hooks.driver_status =
Gilles Peskine449bd832023-01-11 14:50:10 +0100182 mbedtls_test_driver_hash_hooks.forced_status;
183 } else {
184#if defined(MBEDTLS_TEST_LIBTESTDRIVER1) && \
185 defined(LIBTESTDRIVER1_MBEDTLS_PSA_BUILTIN_HASH)
186 mbedtls_test_driver_hash_hooks.driver_status =
187 libtestdriver1_mbedtls_psa_hash_abort(operation);
Ronald Cron73c9d9e2021-04-09 11:09:54 +0200188#elif defined(MBEDTLS_PSA_BUILTIN_HASH)
189 mbedtls_test_driver_hash_hooks.driver_status =
Gilles Peskine449bd832023-01-11 14:50:10 +0100190 mbedtls_psa_hash_abort(operation);
Ronald Cron73c9d9e2021-04-09 11:09:54 +0200191#else
192 (void) operation;
193 mbedtls_test_driver_hash_hooks.driver_status = PSA_ERROR_NOT_SUPPORTED;
194#endif
Ronald Cronfa036c82021-03-23 09:33:25 +0100195 }
196
Gilles Peskine449bd832023-01-11 14:50:10 +0100197 return mbedtls_test_driver_hash_hooks.driver_status;
Ronald Cronfa036c82021-03-23 09:33:25 +0100198}
Ronald Crone6e6b752023-01-16 16:56:51 +0100199#endif /* PSA_CRYPTO_DRIVER_TEST */