blob: c875389c653053d3da15d78f0a3de1e76b91a833 [file] [log] [blame]
Paul Bakker33b43f12013-08-20 11:48:36 +02001/* BEGIN_HEADER */
Manuel Pégourié-Gonnard7f809972015-03-09 17:05:11 +00002#include "mbedtls/md.h"
Paul Bakker33b43f12013-08-20 11:48:36 +02003/* END_HEADER */
Paul Bakker17373852011-01-06 14:20:01 +00004
Paul Bakker33b43f12013-08-20 11:48:36 +02005/* BEGIN_DEPENDENCIES
Manuel Pégourié-Gonnard2cf5a7c2015-04-08 12:49:31 +02006 * depends_on:MBEDTLS_MD_C
Paul Bakker33b43f12013-08-20 11:48:36 +02007 * END_DEPENDENCIES
8 */
Paul Bakker5690efc2011-05-26 13:16:06 +00009
Paul Bakker33b43f12013-08-20 11:48:36 +020010/* BEGIN_CASE */
Gilles Peskine1b6c09a2023-01-11 14:52:35 +010011void mbedtls_md_process()
Manuel Pégourié-Gonnardf3013832014-03-29 15:54:50 +010012{
13 const int *md_type_ptr;
Manuel Pégourié-Gonnard2cf5a7c2015-04-08 12:49:31 +020014 const mbedtls_md_info_t *info;
15 mbedtls_md_context_t ctx;
Manuel Pégourié-Gonnardedb242f2014-04-02 17:52:04 +020016 unsigned char buf[150];
Manuel Pégourié-Gonnardf3013832014-03-29 15:54:50 +010017
Gilles Peskine1b6c09a2023-01-11 14:52:35 +010018 mbedtls_md_init(&ctx);
19 memset(buf, 0, sizeof(buf));
Manuel Pégourié-Gonnardedb242f2014-04-02 17:52:04 +020020
21 /*
Manuel Pégourié-Gonnard2cf5a7c2015-04-08 12:49:31 +020022 * Very minimal testing of mbedtls_md_process, just make sure the various
Manuel Pégourié-Gonnardedb242f2014-04-02 17:52:04 +020023 * xxx_process_wrap() function pointers are valid. (Testing that they
Shaun Case0e7791f2021-12-20 21:14:10 -080024 * indeed do the right thing would require messing with the internal
Manuel Pégourié-Gonnard2cf5a7c2015-04-08 12:49:31 +020025 * state of the underlying mbedtls_md/sha context.)
Manuel Pégourié-Gonnardedb242f2014-04-02 17:52:04 +020026 *
Manuel Pégourié-Gonnard2cf5a7c2015-04-08 12:49:31 +020027 * Also tests that mbedtls_md_list() only returns valid MDs.
Manuel Pégourié-Gonnardedb242f2014-04-02 17:52:04 +020028 */
Gilles Peskine1b6c09a2023-01-11 14:52:35 +010029 for (md_type_ptr = mbedtls_md_list(); *md_type_ptr != 0; md_type_ptr++) {
30 info = mbedtls_md_info_from_type(*md_type_ptr);
31 TEST_ASSERT(info != NULL);
32 TEST_ASSERT(mbedtls_md_setup(&ctx, info, 0) == 0);
33 TEST_ASSERT(mbedtls_md_starts(&ctx) == 0);
34 TEST_ASSERT(mbedtls_md_process(&ctx, buf) == 0);
35 mbedtls_md_free(&ctx);
Manuel Pégourié-Gonnardedb242f2014-04-02 17:52:04 +020036 }
Paul Bakkerbd51b262014-07-10 15:26:12 +020037
38exit:
Gilles Peskine1b6c09a2023-01-11 14:52:35 +010039 mbedtls_md_free(&ctx);
Manuel Pégourié-Gonnardf3013832014-03-29 15:54:50 +010040}
41/* END_CASE */
42
43/* BEGIN_CASE */
Gilles Peskine1b6c09a2023-01-11 14:52:35 +010044void md_null_args()
Manuel Pégourié-Gonnardb25f8162014-06-13 16:34:30 +020045{
Manuel Pégourié-Gonnard2cf5a7c2015-04-08 12:49:31 +020046 mbedtls_md_context_t ctx;
Gilles Peskine1b6c09a2023-01-11 14:52:35 +010047 const mbedtls_md_info_t *info = mbedtls_md_info_from_type(*(mbedtls_md_list()));
Manuel Pégourié-Gonnardb25f8162014-06-13 16:34:30 +020048 unsigned char buf[1] = { 0 };
49
Gilles Peskine1b6c09a2023-01-11 14:52:35 +010050 mbedtls_md_init(&ctx);
Manuel Pégourié-Gonnardb25f8162014-06-13 16:34:30 +020051
Gilles Peskine1b6c09a2023-01-11 14:52:35 +010052 TEST_ASSERT(mbedtls_md_get_size(NULL) == 0);
53 TEST_ASSERT(mbedtls_md_get_type(NULL) == MBEDTLS_MD_NONE);
54 TEST_ASSERT(mbedtls_md_get_name(NULL) == NULL);
Manuel Pégourié-Gonnardb25f8162014-06-13 16:34:30 +020055
Gilles Peskine1b6c09a2023-01-11 14:52:35 +010056 TEST_ASSERT(mbedtls_md_info_from_string(NULL) == NULL);
Manuel Pégourié-Gonnardb25f8162014-06-13 16:34:30 +020057
Gilles Peskine1b6c09a2023-01-11 14:52:35 +010058 TEST_ASSERT(mbedtls_md_setup(&ctx, NULL, 0) == MBEDTLS_ERR_MD_BAD_INPUT_DATA);
59 TEST_ASSERT(mbedtls_md_setup(NULL, info, 0) == MBEDTLS_ERR_MD_BAD_INPUT_DATA);
Manuel Pégourié-Gonnardb25f8162014-06-13 16:34:30 +020060
Gilles Peskine1b6c09a2023-01-11 14:52:35 +010061 TEST_ASSERT(mbedtls_md_starts(NULL) == MBEDTLS_ERR_MD_BAD_INPUT_DATA);
62 TEST_ASSERT(mbedtls_md_starts(&ctx) == MBEDTLS_ERR_MD_BAD_INPUT_DATA);
Manuel Pégourié-Gonnardb25f8162014-06-13 16:34:30 +020063
Gilles Peskine1b6c09a2023-01-11 14:52:35 +010064 TEST_ASSERT(mbedtls_md_update(NULL, buf, 1) == MBEDTLS_ERR_MD_BAD_INPUT_DATA);
65 TEST_ASSERT(mbedtls_md_update(&ctx, buf, 1) == MBEDTLS_ERR_MD_BAD_INPUT_DATA);
Manuel Pégourié-Gonnardb25f8162014-06-13 16:34:30 +020066
Gilles Peskine1b6c09a2023-01-11 14:52:35 +010067 TEST_ASSERT(mbedtls_md_finish(NULL, buf) == MBEDTLS_ERR_MD_BAD_INPUT_DATA);
68 TEST_ASSERT(mbedtls_md_finish(&ctx, buf) == MBEDTLS_ERR_MD_BAD_INPUT_DATA);
Manuel Pégourié-Gonnardb25f8162014-06-13 16:34:30 +020069
Gilles Peskine1b6c09a2023-01-11 14:52:35 +010070 TEST_ASSERT(mbedtls_md(NULL, buf, 1, buf) == MBEDTLS_ERR_MD_BAD_INPUT_DATA);
Manuel Pégourié-Gonnardb25f8162014-06-13 16:34:30 +020071
Manuel Pégourié-Gonnardbfffa902015-05-28 14:44:00 +020072#if defined(MBEDTLS_FS_IO)
Gilles Peskine1b6c09a2023-01-11 14:52:35 +010073 TEST_ASSERT(mbedtls_md_file(NULL, "", buf) == MBEDTLS_ERR_MD_BAD_INPUT_DATA);
Manuel Pégourié-Gonnardbfffa902015-05-28 14:44:00 +020074#endif
Manuel Pégourié-Gonnardb25f8162014-06-13 16:34:30 +020075
Gilles Peskine1b6c09a2023-01-11 14:52:35 +010076 TEST_ASSERT(mbedtls_md_hmac_starts(NULL, buf, 1)
77 == MBEDTLS_ERR_MD_BAD_INPUT_DATA);
78 TEST_ASSERT(mbedtls_md_hmac_starts(&ctx, buf, 1)
79 == MBEDTLS_ERR_MD_BAD_INPUT_DATA);
Manuel Pégourié-Gonnardb25f8162014-06-13 16:34:30 +020080
Gilles Peskine1b6c09a2023-01-11 14:52:35 +010081 TEST_ASSERT(mbedtls_md_hmac_update(NULL, buf, 1)
82 == MBEDTLS_ERR_MD_BAD_INPUT_DATA);
83 TEST_ASSERT(mbedtls_md_hmac_update(&ctx, buf, 1)
84 == MBEDTLS_ERR_MD_BAD_INPUT_DATA);
Manuel Pégourié-Gonnardb25f8162014-06-13 16:34:30 +020085
Gilles Peskine1b6c09a2023-01-11 14:52:35 +010086 TEST_ASSERT(mbedtls_md_hmac_finish(NULL, buf)
87 == MBEDTLS_ERR_MD_BAD_INPUT_DATA);
88 TEST_ASSERT(mbedtls_md_hmac_finish(&ctx, buf)
89 == MBEDTLS_ERR_MD_BAD_INPUT_DATA);
Manuel Pégourié-Gonnardb25f8162014-06-13 16:34:30 +020090
Gilles Peskine1b6c09a2023-01-11 14:52:35 +010091 TEST_ASSERT(mbedtls_md_hmac_reset(NULL) == MBEDTLS_ERR_MD_BAD_INPUT_DATA);
92 TEST_ASSERT(mbedtls_md_hmac_reset(&ctx) == MBEDTLS_ERR_MD_BAD_INPUT_DATA);
Manuel Pégourié-Gonnardb25f8162014-06-13 16:34:30 +020093
Gilles Peskine1b6c09a2023-01-11 14:52:35 +010094 TEST_ASSERT(mbedtls_md_hmac(NULL, buf, 1, buf, 1, buf)
95 == MBEDTLS_ERR_MD_BAD_INPUT_DATA);
Manuel Pégourié-Gonnardb25f8162014-06-13 16:34:30 +020096
Gilles Peskine1b6c09a2023-01-11 14:52:35 +010097 TEST_ASSERT(mbedtls_md_process(NULL, buf) == MBEDTLS_ERR_MD_BAD_INPUT_DATA);
98 TEST_ASSERT(mbedtls_md_process(&ctx, buf) == MBEDTLS_ERR_MD_BAD_INPUT_DATA);
Manuel Pégourié-Gonnard19d644b2015-03-26 12:42:35 +010099
100 /* Ok, this is not NULL arg but NULL return... */
Gilles Peskine1b6c09a2023-01-11 14:52:35 +0100101 TEST_ASSERT(mbedtls_md_info_from_type(MBEDTLS_MD_NONE) == NULL);
102 TEST_ASSERT(mbedtls_md_info_from_string("no such md") == NULL);
Manuel Pégourié-Gonnardb25f8162014-06-13 16:34:30 +0200103}
104/* END_CASE */
105
106/* BEGIN_CASE */
Gilles Peskine1b6c09a2023-01-11 14:52:35 +0100107void md_info(int md_type, char *md_name, int md_size)
Manuel Pégourié-Gonnardf3013832014-03-29 15:54:50 +0100108{
Manuel Pégourié-Gonnard2cf5a7c2015-04-08 12:49:31 +0200109 const mbedtls_md_info_t *md_info;
Manuel Pégourié-Gonnardf3013832014-03-29 15:54:50 +0100110 const int *md_type_ptr;
111 int found;
112
Gilles Peskine1b6c09a2023-01-11 14:52:35 +0100113 md_info = mbedtls_md_info_from_type(md_type);
114 TEST_ASSERT(md_info != NULL);
115 TEST_ASSERT(md_info == mbedtls_md_info_from_string(md_name));
Manuel Pégourié-Gonnardf3013832014-03-29 15:54:50 +0100116
Gilles Peskine1b6c09a2023-01-11 14:52:35 +0100117 TEST_ASSERT(mbedtls_md_get_type(md_info) == (mbedtls_md_type_t) md_type);
118 TEST_ASSERT(mbedtls_md_get_size(md_info) == (unsigned char) md_size);
119 TEST_ASSERT(strcmp(mbedtls_md_get_name(md_info), md_name) == 0);
Manuel Pégourié-Gonnardf3013832014-03-29 15:54:50 +0100120
121 found = 0;
Gilles Peskine1b6c09a2023-01-11 14:52:35 +0100122 for (md_type_ptr = mbedtls_md_list(); *md_type_ptr != 0; md_type_ptr++) {
123 if (*md_type_ptr == md_type) {
Manuel Pégourié-Gonnardf3013832014-03-29 15:54:50 +0100124 found = 1;
Gilles Peskine1b6c09a2023-01-11 14:52:35 +0100125 }
126 }
127 TEST_ASSERT(found == 1);
Manuel Pégourié-Gonnardf3013832014-03-29 15:54:50 +0100128}
129/* END_CASE */
130
131/* BEGIN_CASE */
Gilles Peskine1b6c09a2023-01-11 14:52:35 +0100132void md_text(char *text_md_name, char *text_src_string,
133 data_t *hash)
Paul Bakker17373852011-01-06 14:20:01 +0000134{
135 char md_name[100];
136 unsigned char src_str[1000];
Paul Bakker17373852011-01-06 14:20:01 +0000137 unsigned char output[100];
Manuel Pégourié-Gonnard2cf5a7c2015-04-08 12:49:31 +0200138 const mbedtls_md_info_t *md_info = NULL;
Paul Bakker17373852011-01-06 14:20:01 +0000139
Gilles Peskine1b6c09a2023-01-11 14:52:35 +0100140 memset(md_name, 0x00, 100);
141 memset(src_str, 0x00, 1000);
142 memset(output, 0x00, 100);
Paul Bakker17373852011-01-06 14:20:01 +0000143
Gilles Peskine1b6c09a2023-01-11 14:52:35 +0100144 strncpy((char *) src_str, text_src_string, sizeof(src_str) - 1);
145 strncpy((char *) md_name, text_md_name, sizeof(md_name) - 1);
Manuel Pégourié-Gonnard2cf5a7c2015-04-08 12:49:31 +0200146 md_info = mbedtls_md_info_from_string(md_name);
Gilles Peskine1b6c09a2023-01-11 14:52:35 +0100147 TEST_ASSERT(md_info != NULL);
Paul Bakker17373852011-01-06 14:20:01 +0000148
Gilles Peskine1b6c09a2023-01-11 14:52:35 +0100149 TEST_ASSERT(0 == mbedtls_md(md_info, src_str, strlen((char *) src_str), output));
Paul Bakker17373852011-01-06 14:20:01 +0000150
Gilles Peskine1b6c09a2023-01-11 14:52:35 +0100151 TEST_ASSERT(mbedtls_test_hexcmp(output, hash->x,
152 mbedtls_md_get_size(md_info),
153 hash->len) == 0);
Paul Bakker17373852011-01-06 14:20:01 +0000154}
Paul Bakker33b43f12013-08-20 11:48:36 +0200155/* END_CASE */
Paul Bakker17373852011-01-06 14:20:01 +0000156
Paul Bakker33b43f12013-08-20 11:48:36 +0200157/* BEGIN_CASE */
Gilles Peskine1b6c09a2023-01-11 14:52:35 +0100158void md_hex(char *text_md_name, data_t *src_str, data_t *hash)
Paul Bakker17373852011-01-06 14:20:01 +0000159{
160 char md_name[100];
Paul Bakker17373852011-01-06 14:20:01 +0000161 unsigned char output[100];
Manuel Pégourié-Gonnard2cf5a7c2015-04-08 12:49:31 +0200162 const mbedtls_md_info_t *md_info = NULL;
Paul Bakker17373852011-01-06 14:20:01 +0000163
Gilles Peskine1b6c09a2023-01-11 14:52:35 +0100164 memset(md_name, 0x00, 100);
165 memset(output, 0x00, 100);
Paul Bakker17373852011-01-06 14:20:01 +0000166
Gilles Peskine1b6c09a2023-01-11 14:52:35 +0100167 strncpy((char *) md_name, text_md_name, sizeof(md_name) - 1);
168 md_info = mbedtls_md_info_from_string(md_name);
169 TEST_ASSERT(md_info != NULL);
Paul Bakker17373852011-01-06 14:20:01 +0000170
Gilles Peskine1b6c09a2023-01-11 14:52:35 +0100171 TEST_ASSERT(0 == mbedtls_md(md_info, src_str->x, src_str->len, output));
Paul Bakker17373852011-01-06 14:20:01 +0000172
Paul Bakker17373852011-01-06 14:20:01 +0000173
Gilles Peskine1b6c09a2023-01-11 14:52:35 +0100174 TEST_ASSERT(mbedtls_test_hexcmp(output, hash->x,
175 mbedtls_md_get_size(md_info),
176 hash->len) == 0);
Paul Bakker17373852011-01-06 14:20:01 +0000177}
Paul Bakker33b43f12013-08-20 11:48:36 +0200178/* END_CASE */
Paul Bakker17373852011-01-06 14:20:01 +0000179
Paul Bakker33b43f12013-08-20 11:48:36 +0200180/* BEGIN_CASE */
Gilles Peskine1b6c09a2023-01-11 14:52:35 +0100181void md_text_multi(char *text_md_name, char *text_src_string,
182 data_t *hash)
Paul Bakker17373852011-01-06 14:20:01 +0000183{
184 char md_name[100];
185 unsigned char src_str[1000];
Paul Bakker17373852011-01-06 14:20:01 +0000186 unsigned char output[100];
Paul Bakkere35afa22016-07-13 17:09:14 +0100187 int halfway, len;
Paul Bakkerd2a2d612014-07-01 15:45:49 +0200188
Manuel Pégourié-Gonnard2cf5a7c2015-04-08 12:49:31 +0200189 const mbedtls_md_info_t *md_info = NULL;
Paul Bakker97c53c22016-07-13 17:20:22 +0100190 mbedtls_md_context_t ctx, ctx_copy;
Paul Bakkerd2a2d612014-07-01 15:45:49 +0200191
Gilles Peskine1b6c09a2023-01-11 14:52:35 +0100192 mbedtls_md_init(&ctx);
193 mbedtls_md_init(&ctx_copy);
Paul Bakker17373852011-01-06 14:20:01 +0000194
Gilles Peskine1b6c09a2023-01-11 14:52:35 +0100195 memset(md_name, 0x00, 100);
196 memset(src_str, 0x00, 1000);
197 memset(output, 0x00, 100);
Paul Bakker17373852011-01-06 14:20:01 +0000198
Gilles Peskine1b6c09a2023-01-11 14:52:35 +0100199 strncpy((char *) src_str, text_src_string, sizeof(src_str) - 1);
200 strncpy((char *) md_name, text_md_name, sizeof(md_name) - 1);
201 len = strlen((char *) src_str);
Paul Bakkere35afa22016-07-13 17:09:14 +0100202 halfway = len / 2;
203
Manuel Pégourié-Gonnard2cf5a7c2015-04-08 12:49:31 +0200204 md_info = mbedtls_md_info_from_string(md_name);
Gilles Peskine1b6c09a2023-01-11 14:52:35 +0100205 TEST_ASSERT(md_info != NULL);
206 TEST_ASSERT(0 == mbedtls_md_setup(&ctx, md_info, 0));
207 TEST_ASSERT(0 == mbedtls_md_setup(&ctx_copy, md_info, 0));
Paul Bakker17373852011-01-06 14:20:01 +0000208
Gilles Peskine1b6c09a2023-01-11 14:52:35 +0100209 TEST_ASSERT(0 == mbedtls_md_starts(&ctx));
210 TEST_ASSERT(ctx.md_ctx != NULL);
211 TEST_ASSERT(0 == mbedtls_md_update(&ctx, src_str, halfway));
212 TEST_ASSERT(0 == mbedtls_md_clone(&ctx_copy, &ctx));
Paul Bakker97c53c22016-07-13 17:20:22 +0100213
Gilles Peskine1b6c09a2023-01-11 14:52:35 +0100214 TEST_ASSERT(0 == mbedtls_md_update(&ctx, src_str + halfway, len - halfway));
215 TEST_ASSERT(0 == mbedtls_md_finish(&ctx, output));
216 TEST_ASSERT(mbedtls_test_hexcmp(output, hash->x,
217 mbedtls_md_get_size(md_info),
218 hash->len) == 0);
Paul Bakker17373852011-01-06 14:20:01 +0000219
Paul Bakker97c53c22016-07-13 17:20:22 +0100220 /* Test clone */
Gilles Peskine1b6c09a2023-01-11 14:52:35 +0100221 memset(output, 0x00, 100);
Paul Bakker97c53c22016-07-13 17:20:22 +0100222
Gilles Peskine1b6c09a2023-01-11 14:52:35 +0100223 TEST_ASSERT(0 == mbedtls_md_update(&ctx_copy, src_str + halfway, len - halfway));
224 TEST_ASSERT(0 == mbedtls_md_finish(&ctx_copy, output));
225 TEST_ASSERT(mbedtls_test_hexcmp(output, hash->x,
226 mbedtls_md_get_size(md_info),
227 hash->len) == 0);
Paul Bakkerbd51b262014-07-10 15:26:12 +0200228
229exit:
Gilles Peskine1b6c09a2023-01-11 14:52:35 +0100230 mbedtls_md_free(&ctx);
231 mbedtls_md_free(&ctx_copy);
Paul Bakker17373852011-01-06 14:20:01 +0000232}
Paul Bakker33b43f12013-08-20 11:48:36 +0200233/* END_CASE */
Paul Bakker17373852011-01-06 14:20:01 +0000234
Paul Bakker33b43f12013-08-20 11:48:36 +0200235/* BEGIN_CASE */
Gilles Peskine1b6c09a2023-01-11 14:52:35 +0100236void md_hex_multi(char *text_md_name, data_t *src_str, data_t *hash)
Paul Bakker17373852011-01-06 14:20:01 +0000237{
238 char md_name[100];
Paul Bakker17373852011-01-06 14:20:01 +0000239 unsigned char output[100];
Manuel Pégourié-Gonnard2cf5a7c2015-04-08 12:49:31 +0200240 const mbedtls_md_info_t *md_info = NULL;
Paul Bakker97c53c22016-07-13 17:20:22 +0100241 mbedtls_md_context_t ctx, ctx_copy;
Azim Khanf1aaec92017-05-30 14:23:15 +0100242 int halfway;
Paul Bakkerd2a2d612014-07-01 15:45:49 +0200243
Gilles Peskine1b6c09a2023-01-11 14:52:35 +0100244 mbedtls_md_init(&ctx);
245 mbedtls_md_init(&ctx_copy);
Paul Bakker17373852011-01-06 14:20:01 +0000246
Gilles Peskine1b6c09a2023-01-11 14:52:35 +0100247 memset(md_name, 0x00, 100);
248 memset(output, 0x00, 100);
Paul Bakker17373852011-01-06 14:20:01 +0000249
Gilles Peskine1b6c09a2023-01-11 14:52:35 +0100250 strncpy((char *) md_name, text_md_name, sizeof(md_name) - 1);
Manuel Pégourié-Gonnard2cf5a7c2015-04-08 12:49:31 +0200251 md_info = mbedtls_md_info_from_string(md_name);
Gilles Peskine1b6c09a2023-01-11 14:52:35 +0100252 TEST_ASSERT(md_info != NULL);
253 TEST_ASSERT(0 == mbedtls_md_setup(&ctx, md_info, 0));
254 TEST_ASSERT(0 == mbedtls_md_setup(&ctx_copy, md_info, 0));
Paul Bakker17373852011-01-06 14:20:01 +0000255
Azim Khand30ca132017-06-09 04:32:58 +0100256 halfway = src_str->len / 2;
Paul Bakkerd2a2d612014-07-01 15:45:49 +0200257
Gilles Peskine1b6c09a2023-01-11 14:52:35 +0100258 TEST_ASSERT(0 == mbedtls_md_starts(&ctx));
259 TEST_ASSERT(ctx.md_ctx != NULL);
260 TEST_ASSERT(0 == mbedtls_md_update(&ctx, src_str->x, halfway));
261 TEST_ASSERT(0 == mbedtls_md_clone(&ctx_copy, &ctx));
Paul Bakker97c53c22016-07-13 17:20:22 +0100262
Gilles Peskine1b6c09a2023-01-11 14:52:35 +0100263 TEST_ASSERT(0 == mbedtls_md_update(&ctx, src_str->x + halfway, src_str->len - halfway));
264 TEST_ASSERT(0 == mbedtls_md_finish(&ctx, output));
265 TEST_ASSERT(mbedtls_test_hexcmp(output, hash->x,
266 mbedtls_md_get_size(md_info),
267 hash->len) == 0);
Paul Bakker17373852011-01-06 14:20:01 +0000268
Paul Bakker97c53c22016-07-13 17:20:22 +0100269 /* Test clone */
Gilles Peskine1b6c09a2023-01-11 14:52:35 +0100270 memset(output, 0x00, 100);
Paul Bakker97c53c22016-07-13 17:20:22 +0100271
Gilles Peskine1b6c09a2023-01-11 14:52:35 +0100272 TEST_ASSERT(0 == mbedtls_md_update(&ctx_copy, src_str->x + halfway, src_str->len - halfway));
273 TEST_ASSERT(0 == mbedtls_md_finish(&ctx_copy, output));
274 TEST_ASSERT(mbedtls_test_hexcmp(output, hash->x,
275 mbedtls_md_get_size(md_info),
276 hash->len) == 0);
Paul Bakkerbd51b262014-07-10 15:26:12 +0200277
278exit:
Gilles Peskine1b6c09a2023-01-11 14:52:35 +0100279 mbedtls_md_free(&ctx);
280 mbedtls_md_free(&ctx_copy);
Paul Bakker17373852011-01-06 14:20:01 +0000281}
Paul Bakker33b43f12013-08-20 11:48:36 +0200282/* END_CASE */
Paul Bakker17373852011-01-06 14:20:01 +0000283
Paul Bakker33b43f12013-08-20 11:48:36 +0200284/* BEGIN_CASE */
Gilles Peskine1b6c09a2023-01-11 14:52:35 +0100285void mbedtls_md_hmac(char *text_md_name, int trunc_size,
286 data_t *key_str, data_t *src_str,
287 data_t *hash)
Paul Bakker17373852011-01-06 14:20:01 +0000288{
289 char md_name[100];
Paul Bakker17373852011-01-06 14:20:01 +0000290 unsigned char output[100];
Manuel Pégourié-Gonnard2cf5a7c2015-04-08 12:49:31 +0200291 const mbedtls_md_info_t *md_info = NULL;
Paul Bakker17373852011-01-06 14:20:01 +0000292
Gilles Peskine1b6c09a2023-01-11 14:52:35 +0100293 memset(md_name, 0x00, 100);
294 memset(output, 0x00, 100);
Paul Bakker17373852011-01-06 14:20:01 +0000295
Gilles Peskine1b6c09a2023-01-11 14:52:35 +0100296 strncpy((char *) md_name, text_md_name, sizeof(md_name) - 1);
297 md_info = mbedtls_md_info_from_string(md_name);
298 TEST_ASSERT(md_info != NULL);
Paul Bakker17373852011-01-06 14:20:01 +0000299
Paul Bakker17373852011-01-06 14:20:01 +0000300
Gilles Peskine1b6c09a2023-01-11 14:52:35 +0100301 TEST_ASSERT(mbedtls_md_hmac(md_info, key_str->x, key_str->len, src_str->x, src_str->len,
302 output) == 0);
Paul Bakker17373852011-01-06 14:20:01 +0000303
Gilles Peskine1b6c09a2023-01-11 14:52:35 +0100304 TEST_ASSERT(mbedtls_test_hexcmp(output, hash->x,
305 trunc_size, hash->len) == 0);
Paul Bakker17373852011-01-06 14:20:01 +0000306}
Paul Bakker33b43f12013-08-20 11:48:36 +0200307/* END_CASE */
Paul Bakker17373852011-01-06 14:20:01 +0000308
Paul Bakker33b43f12013-08-20 11:48:36 +0200309/* BEGIN_CASE */
Gilles Peskine1b6c09a2023-01-11 14:52:35 +0100310void md_hmac_multi(char *text_md_name, int trunc_size, data_t *key_str,
311 data_t *src_str, data_t *hash)
Paul Bakker17373852011-01-06 14:20:01 +0000312{
313 char md_name[100];
Paul Bakker17373852011-01-06 14:20:01 +0000314 unsigned char output[100];
Manuel Pégourié-Gonnard2cf5a7c2015-04-08 12:49:31 +0200315 const mbedtls_md_info_t *md_info = NULL;
316 mbedtls_md_context_t ctx;
Azim Khanf1aaec92017-05-30 14:23:15 +0100317 int halfway;
Paul Bakkerd2a2d612014-07-01 15:45:49 +0200318
Gilles Peskine1b6c09a2023-01-11 14:52:35 +0100319 mbedtls_md_init(&ctx);
Paul Bakker17373852011-01-06 14:20:01 +0000320
Gilles Peskine1b6c09a2023-01-11 14:52:35 +0100321 memset(md_name, 0x00, 100);
322 memset(output, 0x00, 100);
Paul Bakker17373852011-01-06 14:20:01 +0000323
Gilles Peskine1b6c09a2023-01-11 14:52:35 +0100324 strncpy((char *) md_name, text_md_name, sizeof(md_name) - 1);
325 md_info = mbedtls_md_info_from_string(md_name);
326 TEST_ASSERT(md_info != NULL);
327 TEST_ASSERT(0 == mbedtls_md_setup(&ctx, md_info, 1));
Paul Bakker17373852011-01-06 14:20:01 +0000328
Azim Khand30ca132017-06-09 04:32:58 +0100329 halfway = src_str->len / 2;
Paul Bakker17373852011-01-06 14:20:01 +0000330
Gilles Peskine1b6c09a2023-01-11 14:52:35 +0100331 TEST_ASSERT(0 == mbedtls_md_hmac_starts(&ctx, key_str->x, key_str->len));
332 TEST_ASSERT(ctx.md_ctx != NULL);
333 TEST_ASSERT(0 == mbedtls_md_hmac_update(&ctx, src_str->x, halfway));
334 TEST_ASSERT(0 == mbedtls_md_hmac_update(&ctx, src_str->x + halfway, src_str->len - halfway));
335 TEST_ASSERT(0 == mbedtls_md_hmac_finish(&ctx, output));
Manuel Pégourié-Gonnard59ba4e92014-03-29 14:43:44 +0100336
Gilles Peskine1b6c09a2023-01-11 14:52:35 +0100337 TEST_ASSERT(mbedtls_test_hexcmp(output, hash->x,
338 trunc_size, hash->len) == 0);
Manuel Pégourié-Gonnard59ba4e92014-03-29 14:43:44 +0100339
340 /* Test again, for reset() */
Gilles Peskine1b6c09a2023-01-11 14:52:35 +0100341 memset(output, 0x00, 100);
Manuel Pégourié-Gonnard59ba4e92014-03-29 14:43:44 +0100342
Gilles Peskine1b6c09a2023-01-11 14:52:35 +0100343 TEST_ASSERT(0 == mbedtls_md_hmac_reset(&ctx));
344 TEST_ASSERT(0 == mbedtls_md_hmac_update(&ctx, src_str->x, halfway));
345 TEST_ASSERT(0 == mbedtls_md_hmac_update(&ctx, src_str->x + halfway, src_str->len - halfway));
346 TEST_ASSERT(0 == mbedtls_md_hmac_finish(&ctx, output));
Paul Bakker33b43f12013-08-20 11:48:36 +0200347
Gilles Peskine1b6c09a2023-01-11 14:52:35 +0100348 TEST_ASSERT(mbedtls_test_hexcmp(output, hash->x,
349 trunc_size, hash->len) == 0);
Paul Bakkerbd51b262014-07-10 15:26:12 +0200350
351exit:
Gilles Peskine1b6c09a2023-01-11 14:52:35 +0100352 mbedtls_md_free(&ctx);
Paul Bakker17373852011-01-06 14:20:01 +0000353}
Paul Bakker33b43f12013-08-20 11:48:36 +0200354/* END_CASE */
Paul Bakker428b9ba2013-09-15 15:20:37 +0200355
Manuel Pégourié-Gonnard2cf5a7c2015-04-08 12:49:31 +0200356/* BEGIN_CASE depends_on:MBEDTLS_FS_IO */
Gilles Peskine1b6c09a2023-01-11 14:52:35 +0100357void mbedtls_md_file(char *text_md_name, char *filename,
358 data_t *hash)
Paul Bakker17373852011-01-06 14:20:01 +0000359{
360 char md_name[100];
Paul Bakker17373852011-01-06 14:20:01 +0000361 unsigned char output[100];
Manuel Pégourié-Gonnard2cf5a7c2015-04-08 12:49:31 +0200362 const mbedtls_md_info_t *md_info = NULL;
Paul Bakker17373852011-01-06 14:20:01 +0000363
Gilles Peskine1b6c09a2023-01-11 14:52:35 +0100364 memset(md_name, 0x00, 100);
365 memset(output, 0x00, 100);
Paul Bakker17373852011-01-06 14:20:01 +0000366
Gilles Peskine1b6c09a2023-01-11 14:52:35 +0100367 strncpy((char *) md_name, text_md_name, sizeof(md_name) - 1);
368 md_info = mbedtls_md_info_from_string(md_name);
369 TEST_ASSERT(md_info != NULL);
Paul Bakker17373852011-01-06 14:20:01 +0000370
Gilles Peskine1b6c09a2023-01-11 14:52:35 +0100371 TEST_ASSERT(mbedtls_md_file(md_info, filename, output) == 0);
Paul Bakker17373852011-01-06 14:20:01 +0000372
Gilles Peskine1b6c09a2023-01-11 14:52:35 +0100373 TEST_ASSERT(mbedtls_test_hexcmp(output, hash->x,
374 mbedtls_md_get_size(md_info),
375 hash->len) == 0);
Paul Bakker17373852011-01-06 14:20:01 +0000376}
Paul Bakker33b43f12013-08-20 11:48:36 +0200377/* END_CASE */