blob: 54aec932253f15ff66ba5aa7054504740ecc2061 [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)
David Horstmann8660e4b2024-09-06 14:55:05 +010016#if MBEDTLS_VERSION_MAJOR < 4
Ronald Cron7975fae2021-09-13 14:50:42 +020017#include "libtestdriver1/library/psa_crypto_hash.h"
David Horstmann8660e4b2024-09-06 14:55:05 +010018#else
19#include "libtestdriver1/tf-psa-crypto/drivers/builtin/src/psa_crypto_hash.h"
20#endif
Ronald Cron7975fae2021-09-13 14:50:42 +020021#endif
22
Ronald Cron7f13fa22021-04-13 12:41:34 +020023mbedtls_test_driver_hash_hooks_t
24 mbedtls_test_driver_hash_hooks = MBEDTLS_TEST_DRIVER_HASH_INIT;
Ronald Cronfa036c82021-03-23 09:33:25 +010025
Ronald Cron7f13fa22021-04-13 12:41:34 +020026psa_status_t mbedtls_test_transparent_hash_compute(
Ronald Cronfa036c82021-03-23 09:33:25 +010027 psa_algorithm_t alg,
28 const uint8_t *input, size_t input_length,
Gilles Peskine449bd832023-01-11 14:50:10 +010029 uint8_t *hash, size_t hash_size, size_t *hash_length)
Ronald Cronfa036c82021-03-23 09:33:25 +010030{
Ronald Cron7f13fa22021-04-13 12:41:34 +020031 mbedtls_test_driver_hash_hooks.hits++;
Ronald Cronfa036c82021-03-23 09:33:25 +010032
Gilles Peskine449bd832023-01-11 14:50:10 +010033 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 {
Ronald Cron7975fae2021-09-13 14:50:42 +020037#if defined(MBEDTLS_TEST_LIBTESTDRIVER1) && \
Gilles Peskine449bd832023-01-11 14:50:10 +010038 defined(LIBTESTDRIVER1_MBEDTLS_PSA_BUILTIN_HASH)
Ronald Cron7f13fa22021-04-13 12:41:34 +020039 mbedtls_test_driver_hash_hooks.driver_status =
Ronald Cron40170d92021-03-13 18:19:08 +010040 libtestdriver1_mbedtls_psa_hash_compute(
Ronald Cronfa036c82021-03-23 09:33:25 +010041 alg, input, input_length,
Gilles Peskine449bd832023-01-11 14:50:10 +010042 hash, hash_size, hash_length);
Ronald Cron73c9d9e2021-04-09 11:09:54 +020043#elif defined(MBEDTLS_PSA_BUILTIN_HASH)
44 mbedtls_test_driver_hash_hooks.driver_status =
45 mbedtls_psa_hash_compute(
46 alg, input, input_length,
Gilles Peskine449bd832023-01-11 14:50:10 +010047 hash, hash_size, hash_length);
Ronald Cron73c9d9e2021-04-09 11:09:54 +020048#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
Ronald Cronfa036c82021-03-23 09:33:25 +010057 }
58
Gilles Peskine449bd832023-01-11 14:50:10 +010059 return mbedtls_test_driver_hash_hooks.driver_status;
Ronald Cronfa036c82021-03-23 09:33:25 +010060}
61
Ronald Cron7f13fa22021-04-13 12:41:34 +020062psa_status_t mbedtls_test_transparent_hash_setup(
Ronald Cronfa036c82021-03-23 09:33:25 +010063 mbedtls_transparent_test_driver_hash_operation_t *operation,
Gilles Peskine449bd832023-01-11 14:50:10 +010064 psa_algorithm_t alg)
Ronald Cronfa036c82021-03-23 09:33:25 +010065{
Ronald Cron7f13fa22021-04-13 12:41:34 +020066 mbedtls_test_driver_hash_hooks.hits++;
Ronald Cronfa036c82021-03-23 09:33:25 +010067
Gilles Peskine449bd832023-01-11 14:50:10 +010068 if (mbedtls_test_driver_hash_hooks.forced_status != PSA_SUCCESS) {
Ronald Cron7f13fa22021-04-13 12:41:34 +020069 mbedtls_test_driver_hash_hooks.driver_status =
Gilles Peskine449bd832023-01-11 14:50:10 +010070 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);
Ronald Cron73c9d9e2021-04-09 11:09:54 +020076#elif defined(MBEDTLS_PSA_BUILTIN_HASH)
77 mbedtls_test_driver_hash_hooks.driver_status =
Gilles Peskine449bd832023-01-11 14:50:10 +010078 mbedtls_psa_hash_setup(operation, alg);
Ronald Cron73c9d9e2021-04-09 11:09:54 +020079#else
80 (void) operation;
81 (void) alg;
82 mbedtls_test_driver_hash_hooks.driver_status = PSA_ERROR_NOT_SUPPORTED;
83#endif
Ronald Cronfa036c82021-03-23 09:33:25 +010084 }
85
Gilles Peskine449bd832023-01-11 14:50:10 +010086 return mbedtls_test_driver_hash_hooks.driver_status;
Ronald Cronfa036c82021-03-23 09:33:25 +010087}
88
Ronald Cron7f13fa22021-04-13 12:41:34 +020089psa_status_t mbedtls_test_transparent_hash_clone(
Ronald Cronfa036c82021-03-23 09:33:25 +010090 const mbedtls_transparent_test_driver_hash_operation_t *source_operation,
Gilles Peskine449bd832023-01-11 14:50:10 +010091 mbedtls_transparent_test_driver_hash_operation_t *target_operation)
Ronald Cronfa036c82021-03-23 09:33:25 +010092{
Ronald Cron7f13fa22021-04-13 12:41:34 +020093 mbedtls_test_driver_hash_hooks.hits++;
Ronald Cronfa036c82021-03-23 09:33:25 +010094
Gilles Peskine449bd832023-01-11 14:50:10 +010095 if (mbedtls_test_driver_hash_hooks.forced_status != PSA_SUCCESS) {
Ronald Cron7f13fa22021-04-13 12:41:34 +020096 mbedtls_test_driver_hash_hooks.driver_status =
Gilles Peskine449bd832023-01-11 14:50:10 +010097 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);
Ronald Cron73c9d9e2021-04-09 11:09:54 +0200104#elif defined(MBEDTLS_PSA_BUILTIN_HASH)
105 mbedtls_test_driver_hash_hooks.driver_status =
Gilles Peskine449bd832023-01-11 14:50:10 +0100106 mbedtls_psa_hash_clone(source_operation, target_operation);
Ronald Cron73c9d9e2021-04-09 11:09:54 +0200107#else
108 (void) source_operation;
109 (void) target_operation;
110 mbedtls_test_driver_hash_hooks.driver_status = PSA_ERROR_NOT_SUPPORTED;
111#endif
Ronald Cronfa036c82021-03-23 09:33:25 +0100112 }
113
Gilles Peskine449bd832023-01-11 14:50:10 +0100114 return mbedtls_test_driver_hash_hooks.driver_status;
Ronald Cronfa036c82021-03-23 09:33:25 +0100115}
116
Ronald Cron7f13fa22021-04-13 12:41:34 +0200117psa_status_t mbedtls_test_transparent_hash_update(
Ronald Cronfa036c82021-03-23 09:33:25 +0100118 mbedtls_transparent_test_driver_hash_operation_t *operation,
119 const uint8_t *input,
Gilles Peskine449bd832023-01-11 14:50:10 +0100120 size_t input_length)
Ronald Cronfa036c82021-03-23 09:33:25 +0100121{
Ronald Cron7f13fa22021-04-13 12:41:34 +0200122 mbedtls_test_driver_hash_hooks.hits++;
Ronald Cronfa036c82021-03-23 09:33:25 +0100123
Gilles Peskine449bd832023-01-11 14:50:10 +0100124 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 {
Ronald Cron7975fae2021-09-13 14:50:42 +0200128#if defined(MBEDTLS_TEST_LIBTESTDRIVER1) && \
Gilles Peskine449bd832023-01-11 14:50:10 +0100129 defined(LIBTESTDRIVER1_MBEDTLS_PSA_BUILTIN_HASH)
Ronald Cron7f13fa22021-04-13 12:41:34 +0200130 mbedtls_test_driver_hash_hooks.driver_status =
Ronald Cron40170d92021-03-13 18:19:08 +0100131 libtestdriver1_mbedtls_psa_hash_update(
Gilles Peskine449bd832023-01-11 14:50:10 +0100132 operation, input, input_length);
Ronald Cron73c9d9e2021-04-09 11:09:54 +0200133#elif defined(MBEDTLS_PSA_BUILTIN_HASH)
134 mbedtls_test_driver_hash_hooks.driver_status =
Gilles Peskine449bd832023-01-11 14:50:10 +0100135 mbedtls_psa_hash_update(operation, input, input_length);
Ronald Cron73c9d9e2021-04-09 11:09:54 +0200136#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
Ronald Cronfa036c82021-03-23 09:33:25 +0100142 }
143
Gilles Peskine449bd832023-01-11 14:50:10 +0100144 return mbedtls_test_driver_hash_hooks.driver_status;
Ronald Cronfa036c82021-03-23 09:33:25 +0100145}
146
Ronald Cron7f13fa22021-04-13 12:41:34 +0200147psa_status_t mbedtls_test_transparent_hash_finish(
Ronald Cronfa036c82021-03-23 09:33:25 +0100148 mbedtls_transparent_test_driver_hash_operation_t *operation,
149 uint8_t *hash,
150 size_t hash_size,
Gilles Peskine449bd832023-01-11 14:50:10 +0100151 size_t *hash_length)
Ronald Cronfa036c82021-03-23 09:33:25 +0100152{
Ronald Cron7f13fa22021-04-13 12:41:34 +0200153 mbedtls_test_driver_hash_hooks.hits++;
Ronald Cronfa036c82021-03-23 09:33:25 +0100154
Gilles Peskine449bd832023-01-11 14:50:10 +0100155 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 {
Ronald Cron7975fae2021-09-13 14:50:42 +0200159#if defined(MBEDTLS_TEST_LIBTESTDRIVER1) && \
Gilles Peskine449bd832023-01-11 14:50:10 +0100160 defined(LIBTESTDRIVER1_MBEDTLS_PSA_BUILTIN_HASH)
Ronald Cron7f13fa22021-04-13 12:41:34 +0200161 mbedtls_test_driver_hash_hooks.driver_status =
Ronald Cron40170d92021-03-13 18:19:08 +0100162 libtestdriver1_mbedtls_psa_hash_finish(
Gilles Peskine449bd832023-01-11 14:50:10 +0100163 operation, hash, hash_size, hash_length);
Ronald Cron73c9d9e2021-04-09 11:09:54 +0200164#elif defined(MBEDTLS_PSA_BUILTIN_HASH)
165 mbedtls_test_driver_hash_hooks.driver_status =
Gilles Peskine449bd832023-01-11 14:50:10 +0100166 mbedtls_psa_hash_finish(operation, hash, hash_size, hash_length);
Ronald Cron73c9d9e2021-04-09 11:09:54 +0200167#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
Ronald Cronfa036c82021-03-23 09:33:25 +0100174 }
175
Gilles Peskine449bd832023-01-11 14:50:10 +0100176 return mbedtls_test_driver_hash_hooks.driver_status;
Ronald Cronfa036c82021-03-23 09:33:25 +0100177}
178
Ronald Cron7f13fa22021-04-13 12:41:34 +0200179psa_status_t mbedtls_test_transparent_hash_abort(
Gilles Peskine449bd832023-01-11 14:50:10 +0100180 mbedtls_transparent_test_driver_hash_operation_t *operation)
Ronald Cronfa036c82021-03-23 09:33:25 +0100181{
Ronald Cron7f13fa22021-04-13 12:41:34 +0200182 mbedtls_test_driver_hash_hooks.hits++;
Ronald Cronfa036c82021-03-23 09:33:25 +0100183
Gilles Peskine449bd832023-01-11 14:50:10 +0100184 if (mbedtls_test_driver_hash_hooks.forced_status != PSA_SUCCESS) {
Ronald Cron7f13fa22021-04-13 12:41:34 +0200185 mbedtls_test_driver_hash_hooks.driver_status =
Gilles Peskine449bd832023-01-11 14:50:10 +0100186 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);
Ronald Cron73c9d9e2021-04-09 11:09:54 +0200192#elif defined(MBEDTLS_PSA_BUILTIN_HASH)
193 mbedtls_test_driver_hash_hooks.driver_status =
Gilles Peskine449bd832023-01-11 14:50:10 +0100194 mbedtls_psa_hash_abort(operation);
Ronald Cron73c9d9e2021-04-09 11:09:54 +0200195#else
196 (void) operation;
197 mbedtls_test_driver_hash_hooks.driver_status = PSA_ERROR_NOT_SUPPORTED;
198#endif
Ronald Cronfa036c82021-03-23 09:33:25 +0100199 }
200
Gilles Peskine449bd832023-01-11 14:50:10 +0100201 return mbedtls_test_driver_hash_hooks.driver_status;
Ronald Cronfa036c82021-03-23 09:33:25 +0100202}
Ronald Crone6e6b752023-01-16 16:56:51 +0100203#endif /* PSA_CRYPTO_DRIVER_TEST */