blob: aeec4e248884e6a75454e2c140c969ff2a27e787 [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 */
Mateusz Starzykc0eabdc2021-08-03 14:09:02 +020011void 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
Mateusz Starzykc0eabdc2021-08-03 14:09:02 +020018 mbedtls_md_init(&ctx);
Manuel Pégourié-Gonnardedb242f2014-04-02 17:52:04 +020019
20 /*
Manuel Pégourié-Gonnard2cf5a7c2015-04-08 12:49:31 +020021 * Very minimal testing of mbedtls_md_process, just make sure the various
Manuel Pégourié-Gonnardedb242f2014-04-02 17:52:04 +020022 * xxx_process_wrap() function pointers are valid. (Testing that they
23 * indeed do the right thing whould require messing with the internal
Manuel Pégourié-Gonnard2cf5a7c2015-04-08 12:49:31 +020024 * state of the underlying mbedtls_md/sha context.)
Manuel Pégourié-Gonnardedb242f2014-04-02 17:52:04 +020025 *
Manuel Pégourié-Gonnard2cf5a7c2015-04-08 12:49:31 +020026 * Also tests that mbedtls_md_list() only returns valid MDs.
Manuel Pégourié-Gonnardedb242f2014-04-02 17:52:04 +020027 */
Mateusz Starzykc0eabdc2021-08-03 14:09:02 +020028 for (md_type_ptr = mbedtls_md_list(); *md_type_ptr != 0; md_type_ptr++) {
29 info = mbedtls_md_info_from_type(*md_type_ptr);
30 TEST_ASSERT(info != NULL);
31 TEST_ASSERT(mbedtls_md_setup(&ctx, info, 0) == 0);
32 TEST_ASSERT(mbedtls_md_process(&ctx, buf) == 0);
33 mbedtls_md_free(&ctx);
Manuel Pégourié-Gonnardedb242f2014-04-02 17:52:04 +020034 }
Paul Bakkerbd51b262014-07-10 15:26:12 +020035
36exit:
Mateusz Starzykc0eabdc2021-08-03 14:09:02 +020037 mbedtls_md_free(&ctx);
Manuel Pégourié-Gonnardf3013832014-03-29 15:54:50 +010038}
39/* END_CASE */
40
41/* BEGIN_CASE */
Mateusz Starzykc0eabdc2021-08-03 14:09:02 +020042void md_null_args()
Manuel Pégourié-Gonnardb25f8162014-06-13 16:34:30 +020043{
Manuel Pégourié-Gonnard2cf5a7c2015-04-08 12:49:31 +020044 mbedtls_md_context_t ctx;
Mateusz Starzykc0eabdc2021-08-03 14:09:02 +020045 const mbedtls_md_info_t *info =
46 mbedtls_md_info_from_type(*(mbedtls_md_list()));
Manuel Pégourié-Gonnardb25f8162014-06-13 16:34:30 +020047 unsigned char buf[1] = { 0 };
48
Mateusz Starzykc0eabdc2021-08-03 14:09:02 +020049 mbedtls_md_init(&ctx);
Manuel Pégourié-Gonnardb25f8162014-06-13 16:34:30 +020050
Mateusz Starzykc0eabdc2021-08-03 14:09:02 +020051 TEST_ASSERT(mbedtls_md_get_size(NULL) == 0);
52 TEST_ASSERT(mbedtls_md_get_type(NULL) == MBEDTLS_MD_NONE);
53 TEST_ASSERT(mbedtls_md_get_name(NULL) == NULL);
Manuel Pégourié-Gonnardb25f8162014-06-13 16:34:30 +020054
Mateusz Starzykc0eabdc2021-08-03 14:09:02 +020055 TEST_ASSERT(mbedtls_md_info_from_string(NULL) == NULL);
Manuel Pégourié-Gonnardb25f8162014-06-13 16:34:30 +020056
Mateusz Starzykc0eabdc2021-08-03 14:09:02 +020057 TEST_ASSERT(mbedtls_md_setup(&ctx, NULL, 0) ==
58 MBEDTLS_ERR_MD_BAD_INPUT_DATA);
59 TEST_ASSERT(mbedtls_md_setup(NULL, info, 0) ==
60 MBEDTLS_ERR_MD_BAD_INPUT_DATA);
Manuel Pégourié-Gonnardb25f8162014-06-13 16:34:30 +020061
Mateusz Starzykc0eabdc2021-08-03 14:09:02 +020062 TEST_ASSERT(mbedtls_md_starts(NULL) == MBEDTLS_ERR_MD_BAD_INPUT_DATA);
63 TEST_ASSERT(mbedtls_md_starts(&ctx) == MBEDTLS_ERR_MD_BAD_INPUT_DATA);
Manuel Pégourié-Gonnardb25f8162014-06-13 16:34:30 +020064
Mateusz Starzykc0eabdc2021-08-03 14:09:02 +020065 TEST_ASSERT(mbedtls_md_update(NULL, buf, 1) ==
66 MBEDTLS_ERR_MD_BAD_INPUT_DATA);
67 TEST_ASSERT(mbedtls_md_update(&ctx, buf, 1) ==
68 MBEDTLS_ERR_MD_BAD_INPUT_DATA);
Manuel Pégourié-Gonnardb25f8162014-06-13 16:34:30 +020069
Mateusz Starzykc0eabdc2021-08-03 14:09:02 +020070 TEST_ASSERT(mbedtls_md_finish(NULL, buf) == MBEDTLS_ERR_MD_BAD_INPUT_DATA);
71 TEST_ASSERT(mbedtls_md_finish(&ctx, buf) == MBEDTLS_ERR_MD_BAD_INPUT_DATA);
Manuel Pégourié-Gonnardb25f8162014-06-13 16:34:30 +020072
Mateusz Starzykc0eabdc2021-08-03 14:09:02 +020073 TEST_ASSERT(mbedtls_md(NULL, buf, 1, buf) == MBEDTLS_ERR_MD_BAD_INPUT_DATA);
Manuel Pégourié-Gonnardb25f8162014-06-13 16:34:30 +020074
Manuel Pégourié-Gonnardbfffa902015-05-28 14:44:00 +020075#if defined(MBEDTLS_FS_IO)
Mateusz Starzykc0eabdc2021-08-03 14:09:02 +020076 TEST_ASSERT(mbedtls_md_file(NULL, "", buf) ==
77 MBEDTLS_ERR_MD_BAD_INPUT_DATA);
Manuel Pégourié-Gonnardbfffa902015-05-28 14:44:00 +020078#endif
Manuel Pégourié-Gonnardb25f8162014-06-13 16:34:30 +020079
Mateusz Starzykc0eabdc2021-08-03 14:09:02 +020080 TEST_ASSERT(mbedtls_md_hmac_starts(NULL, buf, 1) ==
81 MBEDTLS_ERR_MD_BAD_INPUT_DATA);
82 TEST_ASSERT(mbedtls_md_hmac_starts(&ctx, buf, 1) ==
83 MBEDTLS_ERR_MD_BAD_INPUT_DATA);
Manuel Pégourié-Gonnardb25f8162014-06-13 16:34:30 +020084
Mateusz Starzykc0eabdc2021-08-03 14:09:02 +020085 TEST_ASSERT(mbedtls_md_hmac_update(NULL, buf, 1) ==
86 MBEDTLS_ERR_MD_BAD_INPUT_DATA);
87 TEST_ASSERT(mbedtls_md_hmac_update(&ctx, buf, 1) ==
88 MBEDTLS_ERR_MD_BAD_INPUT_DATA);
Manuel Pégourié-Gonnardb25f8162014-06-13 16:34:30 +020089
Mateusz Starzykc0eabdc2021-08-03 14:09:02 +020090 TEST_ASSERT(mbedtls_md_hmac_finish(NULL, buf) ==
91 MBEDTLS_ERR_MD_BAD_INPUT_DATA);
92 TEST_ASSERT(mbedtls_md_hmac_finish(&ctx, buf) ==
93 MBEDTLS_ERR_MD_BAD_INPUT_DATA);
Manuel Pégourié-Gonnardb25f8162014-06-13 16:34:30 +020094
Mateusz Starzykc0eabdc2021-08-03 14:09:02 +020095 TEST_ASSERT(mbedtls_md_hmac_reset(NULL) == MBEDTLS_ERR_MD_BAD_INPUT_DATA);
96 TEST_ASSERT(mbedtls_md_hmac_reset(&ctx) == MBEDTLS_ERR_MD_BAD_INPUT_DATA);
Manuel Pégourié-Gonnardb25f8162014-06-13 16:34:30 +020097
Mateusz Starzykc0eabdc2021-08-03 14:09:02 +020098 TEST_ASSERT(mbedtls_md_hmac(NULL, buf, 1, buf, 1, buf) ==
99 MBEDTLS_ERR_MD_BAD_INPUT_DATA);
Manuel Pégourié-Gonnardb25f8162014-06-13 16:34:30 +0200100
Mateusz Starzykc0eabdc2021-08-03 14:09:02 +0200101 TEST_ASSERT(mbedtls_md_process(NULL, buf) == MBEDTLS_ERR_MD_BAD_INPUT_DATA);
102 TEST_ASSERT(mbedtls_md_process(&ctx, buf) == MBEDTLS_ERR_MD_BAD_INPUT_DATA);
Manuel Pégourié-Gonnard19d644b2015-03-26 12:42:35 +0100103
104 /* Ok, this is not NULL arg but NULL return... */
Mateusz Starzykc0eabdc2021-08-03 14:09:02 +0200105 TEST_ASSERT(mbedtls_md_info_from_type(MBEDTLS_MD_NONE) == NULL);
106 TEST_ASSERT(mbedtls_md_info_from_string("no such md") == NULL);
Manuel Pégourié-Gonnardb25f8162014-06-13 16:34:30 +0200107}
108/* END_CASE */
109
110/* BEGIN_CASE */
Mateusz Starzykc0eabdc2021-08-03 14:09:02 +0200111void md_info(int md_type, char *md_name, int md_size)
Manuel Pégourié-Gonnardf3013832014-03-29 15:54:50 +0100112{
Manuel Pégourié-Gonnard2cf5a7c2015-04-08 12:49:31 +0200113 const mbedtls_md_info_t *md_info;
Manuel Pégourié-Gonnardf3013832014-03-29 15:54:50 +0100114 const int *md_type_ptr;
115 int found;
116
Mateusz Starzykc0eabdc2021-08-03 14:09:02 +0200117 md_info = mbedtls_md_info_from_type(md_type);
118 TEST_ASSERT(md_info != NULL);
119 TEST_ASSERT(md_info == mbedtls_md_info_from_string(md_name));
Manuel Pégourié-Gonnardf3013832014-03-29 15:54:50 +0100120
Mateusz Starzykc0eabdc2021-08-03 14:09:02 +0200121 TEST_ASSERT(mbedtls_md_get_type(md_info) == (mbedtls_md_type_t)md_type);
122 TEST_ASSERT(mbedtls_md_get_size(md_info) == (unsigned char)md_size);
123 TEST_ASSERT(strcmp(mbedtls_md_get_name(md_info), md_name) == 0);
Manuel Pégourié-Gonnardf3013832014-03-29 15:54:50 +0100124
125 found = 0;
Mateusz Starzykc0eabdc2021-08-03 14:09:02 +0200126 for (md_type_ptr = mbedtls_md_list(); *md_type_ptr != 0; md_type_ptr++)
127 if (*md_type_ptr == md_type)
Manuel Pégourié-Gonnardf3013832014-03-29 15:54:50 +0100128 found = 1;
Mateusz Starzykc0eabdc2021-08-03 14:09:02 +0200129 TEST_ASSERT(found == 1);
Manuel Pégourié-Gonnardf3013832014-03-29 15:54:50 +0100130}
131/* END_CASE */
132
133/* BEGIN_CASE */
Mateusz Starzykc0eabdc2021-08-03 14:09:02 +0200134void md_text(char *text_md_name, char *text_src_string, data_t *hash)
Paul Bakker17373852011-01-06 14:20:01 +0000135{
136 char md_name[100];
137 unsigned char src_str[1000];
Paul Bakker17373852011-01-06 14:20:01 +0000138 unsigned char output[100];
Manuel Pégourié-Gonnard2cf5a7c2015-04-08 12:49:31 +0200139 const mbedtls_md_info_t *md_info = NULL;
Paul Bakker17373852011-01-06 14:20:01 +0000140
Mateusz Starzykc0eabdc2021-08-03 14:09:02 +0200141 memset(md_name, 0x00, 100);
142 memset(src_str, 0x00, 1000);
143 memset(output, 0x00, 100);
Paul Bakker17373852011-01-06 14:20:01 +0000144
Mateusz Starzykc0eabdc2021-08-03 14:09:02 +0200145 strncpy((char *)src_str, text_src_string, sizeof(src_str) - 1);
146 strncpy((char *)md_name, text_md_name, sizeof(md_name) - 1);
Manuel Pégourié-Gonnard2cf5a7c2015-04-08 12:49:31 +0200147 md_info = mbedtls_md_info_from_string(md_name);
Mateusz Starzykc0eabdc2021-08-03 14:09:02 +0200148 TEST_ASSERT(md_info != NULL);
Paul Bakker17373852011-01-06 14:20:01 +0000149
Mateusz Starzykc0eabdc2021-08-03 14:09:02 +0200150 TEST_ASSERT(0 ==
151 mbedtls_md(md_info, src_str, strlen((char *)src_str), output));
Paul Bakker17373852011-01-06 14:20:01 +0000152
Mateusz Starzykc0eabdc2021-08-03 14:09:02 +0200153 TEST_ASSERT(mbedtls_test_hexcmp(output, hash->x,
154 mbedtls_md_get_size(md_info),
155 hash->len) == 0);
Paul Bakker17373852011-01-06 14:20:01 +0000156}
Paul Bakker33b43f12013-08-20 11:48:36 +0200157/* END_CASE */
Paul Bakker17373852011-01-06 14:20:01 +0000158
Paul Bakker33b43f12013-08-20 11:48:36 +0200159/* BEGIN_CASE */
Mateusz Starzykc0eabdc2021-08-03 14:09:02 +0200160void md_hex(char *text_md_name, data_t *src_str, data_t *hash)
Paul Bakker17373852011-01-06 14:20:01 +0000161{
162 char md_name[100];
Paul Bakker17373852011-01-06 14:20:01 +0000163 unsigned char output[100];
Manuel Pégourié-Gonnard2cf5a7c2015-04-08 12:49:31 +0200164 const mbedtls_md_info_t *md_info = NULL;
Paul Bakker17373852011-01-06 14:20:01 +0000165
Mateusz Starzykc0eabdc2021-08-03 14:09:02 +0200166 memset(md_name, 0x00, 100);
167 memset(output, 0x00, 100);
Paul Bakker17373852011-01-06 14:20:01 +0000168
Mateusz Starzykc0eabdc2021-08-03 14:09:02 +0200169 strncpy((char *)md_name, text_md_name, sizeof(md_name) - 1);
170 md_info = mbedtls_md_info_from_string(md_name);
171 TEST_ASSERT(md_info != NULL);
Paul Bakker17373852011-01-06 14:20:01 +0000172
Mateusz Starzykc0eabdc2021-08-03 14:09:02 +0200173 TEST_ASSERT(0 == mbedtls_md(md_info, src_str->x, src_str->len, output));
Paul Bakker17373852011-01-06 14:20:01 +0000174
Mateusz Starzykc0eabdc2021-08-03 14:09:02 +0200175 TEST_ASSERT(mbedtls_test_hexcmp(output, hash->x,
176 mbedtls_md_get_size(md_info),
177 hash->len) == 0);
Paul Bakker17373852011-01-06 14:20:01 +0000178}
Paul Bakker33b43f12013-08-20 11:48:36 +0200179/* END_CASE */
Paul Bakker17373852011-01-06 14:20:01 +0000180
Paul Bakker33b43f12013-08-20 11:48:36 +0200181/* BEGIN_CASE */
Mateusz Starzykc0eabdc2021-08-03 14:09:02 +0200182void md_text_multi(char *text_md_name, char *text_src_string, 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
Mateusz Starzykc0eabdc2021-08-03 14:09:02 +0200192 mbedtls_md_init(&ctx);
193 mbedtls_md_init(&ctx_copy);
Paul Bakker17373852011-01-06 14:20:01 +0000194
Mateusz Starzykc0eabdc2021-08-03 14:09:02 +0200195 memset(md_name, 0x00, 100);
196 memset(src_str, 0x00, 1000);
197 memset(output, 0x00, 100);
Paul Bakker17373852011-01-06 14:20:01 +0000198
Mateusz Starzykc0eabdc2021-08-03 14:09:02 +0200199 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);
Mateusz Starzykc0eabdc2021-08-03 14:09:02 +0200205 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
Mateusz Starzykc0eabdc2021-08-03 14:09:02 +0200209 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
Mateusz Starzykc0eabdc2021-08-03 14:09:02 +0200214 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 */
Mateusz Starzykc0eabdc2021-08-03 14:09:02 +0200221 memset(output, 0x00, 100);
Paul Bakker97c53c22016-07-13 17:20:22 +0100222
Mateusz Starzykc0eabdc2021-08-03 14:09:02 +0200223 TEST_ASSERT(0 ==
224 mbedtls_md_update(&ctx_copy, src_str + halfway, len - halfway));
225 TEST_ASSERT(0 == mbedtls_md_finish(&ctx_copy, output));
226 TEST_ASSERT(mbedtls_test_hexcmp(output, hash->x,
227 mbedtls_md_get_size(md_info),
228 hash->len) == 0);
Paul Bakkerbd51b262014-07-10 15:26:12 +0200229
230exit:
Mateusz Starzykc0eabdc2021-08-03 14:09:02 +0200231 mbedtls_md_free(&ctx);
232 mbedtls_md_free(&ctx_copy);
Paul Bakker17373852011-01-06 14:20:01 +0000233}
Paul Bakker33b43f12013-08-20 11:48:36 +0200234/* END_CASE */
Paul Bakker17373852011-01-06 14:20:01 +0000235
Paul Bakker33b43f12013-08-20 11:48:36 +0200236/* BEGIN_CASE */
Mateusz Starzykc0eabdc2021-08-03 14:09:02 +0200237void md_hex_multi(char *text_md_name, data_t *src_str, data_t *hash)
Paul Bakker17373852011-01-06 14:20:01 +0000238{
239 char md_name[100];
Paul Bakker17373852011-01-06 14:20:01 +0000240 unsigned char output[100];
Manuel Pégourié-Gonnard2cf5a7c2015-04-08 12:49:31 +0200241 const mbedtls_md_info_t *md_info = NULL;
Paul Bakker97c53c22016-07-13 17:20:22 +0100242 mbedtls_md_context_t ctx, ctx_copy;
Azim Khanf1aaec92017-05-30 14:23:15 +0100243 int halfway;
Paul Bakkerd2a2d612014-07-01 15:45:49 +0200244
Mateusz Starzykc0eabdc2021-08-03 14:09:02 +0200245 mbedtls_md_init(&ctx);
246 mbedtls_md_init(&ctx_copy);
Paul Bakker17373852011-01-06 14:20:01 +0000247
Mateusz Starzykc0eabdc2021-08-03 14:09:02 +0200248 memset(md_name, 0x00, 100);
249 memset(output, 0x00, 100);
Paul Bakker17373852011-01-06 14:20:01 +0000250
Mateusz Starzykc0eabdc2021-08-03 14:09:02 +0200251 strncpy((char *)md_name, text_md_name, sizeof(md_name) - 1);
Manuel Pégourié-Gonnard2cf5a7c2015-04-08 12:49:31 +0200252 md_info = mbedtls_md_info_from_string(md_name);
Mateusz Starzykc0eabdc2021-08-03 14:09:02 +0200253 TEST_ASSERT(md_info != NULL);
254 TEST_ASSERT(0 == mbedtls_md_setup(&ctx, md_info, 0));
255 TEST_ASSERT(0 == mbedtls_md_setup(&ctx_copy, md_info, 0));
Paul Bakker17373852011-01-06 14:20:01 +0000256
Azim Khand30ca132017-06-09 04:32:58 +0100257 halfway = src_str->len / 2;
Paul Bakkerd2a2d612014-07-01 15:45:49 +0200258
Mateusz Starzykc0eabdc2021-08-03 14:09:02 +0200259 TEST_ASSERT(0 == mbedtls_md_starts(&ctx));
260 TEST_ASSERT(ctx.md_ctx != NULL);
261 TEST_ASSERT(0 == mbedtls_md_update(&ctx, src_str->x, halfway));
262 TEST_ASSERT(0 == mbedtls_md_clone(&ctx_copy, &ctx));
Paul Bakker97c53c22016-07-13 17:20:22 +0100263
Mateusz Starzykc0eabdc2021-08-03 14:09:02 +0200264 TEST_ASSERT(0 == mbedtls_md_update(&ctx, src_str->x + halfway,
265 src_str->len - halfway));
266 TEST_ASSERT(0 == mbedtls_md_finish(&ctx, output));
267 TEST_ASSERT(mbedtls_test_hexcmp(output, hash->x,
268 mbedtls_md_get_size(md_info),
269 hash->len) == 0);
Paul Bakker17373852011-01-06 14:20:01 +0000270
Paul Bakker97c53c22016-07-13 17:20:22 +0100271 /* Test clone */
Mateusz Starzykc0eabdc2021-08-03 14:09:02 +0200272 memset(output, 0x00, 100);
Paul Bakker97c53c22016-07-13 17:20:22 +0100273
Mateusz Starzykc0eabdc2021-08-03 14:09:02 +0200274 TEST_ASSERT(0 == mbedtls_md_update(&ctx_copy, src_str->x + halfway,
275 src_str->len - halfway));
276 TEST_ASSERT(0 == mbedtls_md_finish(&ctx_copy, output));
277 TEST_ASSERT(mbedtls_test_hexcmp(output, hash->x,
278 mbedtls_md_get_size(md_info),
279 hash->len) == 0);
Paul Bakkerbd51b262014-07-10 15:26:12 +0200280
281exit:
Mateusz Starzykc0eabdc2021-08-03 14:09:02 +0200282 mbedtls_md_free(&ctx);
283 mbedtls_md_free(&ctx_copy);
Paul Bakker17373852011-01-06 14:20:01 +0000284}
Paul Bakker33b43f12013-08-20 11:48:36 +0200285/* END_CASE */
Paul Bakker17373852011-01-06 14:20:01 +0000286
Paul Bakker33b43f12013-08-20 11:48:36 +0200287/* BEGIN_CASE */
Mateusz Starzykc0eabdc2021-08-03 14:09:02 +0200288void mbedtls_md_hmac(char *text_md_name,
289 int trunc_size,
290 data_t *key_str,
291 data_t *src_str,
292 data_t *hash)
Paul Bakker17373852011-01-06 14:20:01 +0000293{
294 char md_name[100];
Paul Bakker17373852011-01-06 14:20:01 +0000295 unsigned char output[100];
Manuel Pégourié-Gonnard2cf5a7c2015-04-08 12:49:31 +0200296 const mbedtls_md_info_t *md_info = NULL;
Paul Bakker17373852011-01-06 14:20:01 +0000297
Mateusz Starzykc0eabdc2021-08-03 14:09:02 +0200298 memset(md_name, 0x00, 100);
299 memset(output, 0x00, 100);
Paul Bakker17373852011-01-06 14:20:01 +0000300
Mateusz Starzykc0eabdc2021-08-03 14:09:02 +0200301 strncpy((char *)md_name, text_md_name, sizeof(md_name) - 1);
302 md_info = mbedtls_md_info_from_string(md_name);
303 TEST_ASSERT(md_info != NULL);
Paul Bakker17373852011-01-06 14:20:01 +0000304
Mateusz Starzykc0eabdc2021-08-03 14:09:02 +0200305 TEST_ASSERT(mbedtls_md_hmac(md_info, key_str->x, key_str->len, src_str->x,
306 src_str->len, output) == 0);
Paul Bakker17373852011-01-06 14:20:01 +0000307
Mateusz Starzykc0eabdc2021-08-03 14:09:02 +0200308 TEST_ASSERT(mbedtls_test_hexcmp(output, hash->x, trunc_size, hash->len) ==
309 0);
Paul Bakker17373852011-01-06 14:20:01 +0000310}
Paul Bakker33b43f12013-08-20 11:48:36 +0200311/* END_CASE */
Paul Bakker17373852011-01-06 14:20:01 +0000312
Paul Bakker33b43f12013-08-20 11:48:36 +0200313/* BEGIN_CASE */
Mateusz Starzykc0eabdc2021-08-03 14:09:02 +0200314void md_hmac_multi(char *text_md_name,
315 int trunc_size,
316 data_t *key_str,
317 data_t *src_str,
318 data_t *hash)
Paul Bakker17373852011-01-06 14:20:01 +0000319{
320 char md_name[100];
Paul Bakker17373852011-01-06 14:20:01 +0000321 unsigned char output[100];
Manuel Pégourié-Gonnard2cf5a7c2015-04-08 12:49:31 +0200322 const mbedtls_md_info_t *md_info = NULL;
323 mbedtls_md_context_t ctx;
Azim Khanf1aaec92017-05-30 14:23:15 +0100324 int halfway;
Paul Bakkerd2a2d612014-07-01 15:45:49 +0200325
Mateusz Starzykc0eabdc2021-08-03 14:09:02 +0200326 mbedtls_md_init(&ctx);
Paul Bakker17373852011-01-06 14:20:01 +0000327
Mateusz Starzykc0eabdc2021-08-03 14:09:02 +0200328 memset(md_name, 0x00, 100);
329 memset(output, 0x00, 100);
Paul Bakker17373852011-01-06 14:20:01 +0000330
Mateusz Starzykc0eabdc2021-08-03 14:09:02 +0200331 strncpy((char *)md_name, text_md_name, sizeof(md_name) - 1);
332 md_info = mbedtls_md_info_from_string(md_name);
333 TEST_ASSERT(md_info != NULL);
334 TEST_ASSERT(0 == mbedtls_md_setup(&ctx, md_info, 1));
Paul Bakker17373852011-01-06 14:20:01 +0000335
Azim Khand30ca132017-06-09 04:32:58 +0100336 halfway = src_str->len / 2;
Paul Bakker17373852011-01-06 14:20:01 +0000337
Mateusz Starzykc0eabdc2021-08-03 14:09:02 +0200338 TEST_ASSERT(0 == mbedtls_md_hmac_starts(&ctx, key_str->x, key_str->len));
339 TEST_ASSERT(ctx.md_ctx != NULL);
340 TEST_ASSERT(0 == mbedtls_md_hmac_update(&ctx, src_str->x, halfway));
341 TEST_ASSERT(0 == mbedtls_md_hmac_update(&ctx, src_str->x + halfway,
342 src_str->len - halfway));
343 TEST_ASSERT(0 == mbedtls_md_hmac_finish(&ctx, output));
Manuel Pégourié-Gonnard59ba4e92014-03-29 14:43:44 +0100344
Mateusz Starzykc0eabdc2021-08-03 14:09:02 +0200345 TEST_ASSERT(mbedtls_test_hexcmp(output, hash->x, trunc_size, hash->len) ==
346 0);
Manuel Pégourié-Gonnard59ba4e92014-03-29 14:43:44 +0100347
348 /* Test again, for reset() */
Mateusz Starzykc0eabdc2021-08-03 14:09:02 +0200349 memset(output, 0x00, 100);
Manuel Pégourié-Gonnard59ba4e92014-03-29 14:43:44 +0100350
Mateusz Starzykc0eabdc2021-08-03 14:09:02 +0200351 TEST_ASSERT(0 == mbedtls_md_hmac_reset(&ctx));
352 TEST_ASSERT(0 == mbedtls_md_hmac_update(&ctx, src_str->x, halfway));
353 TEST_ASSERT(0 == mbedtls_md_hmac_update(&ctx, src_str->x + halfway,
354 src_str->len - halfway));
355 TEST_ASSERT(0 == mbedtls_md_hmac_finish(&ctx, output));
Paul Bakker33b43f12013-08-20 11:48:36 +0200356
Mateusz Starzykc0eabdc2021-08-03 14:09:02 +0200357 TEST_ASSERT(mbedtls_test_hexcmp(output, hash->x, trunc_size, hash->len) ==
358 0);
Paul Bakkerbd51b262014-07-10 15:26:12 +0200359
360exit:
Mateusz Starzykc0eabdc2021-08-03 14:09:02 +0200361 mbedtls_md_free(&ctx);
Paul Bakker17373852011-01-06 14:20:01 +0000362}
Paul Bakker33b43f12013-08-20 11:48:36 +0200363/* END_CASE */
Paul Bakker428b9ba2013-09-15 15:20:37 +0200364
Manuel Pégourié-Gonnard2cf5a7c2015-04-08 12:49:31 +0200365/* BEGIN_CASE depends_on:MBEDTLS_FS_IO */
Mateusz Starzykc0eabdc2021-08-03 14:09:02 +0200366void mbedtls_md_file(char *text_md_name, char *filename, data_t *hash)
Paul Bakker17373852011-01-06 14:20:01 +0000367{
368 char md_name[100];
Paul Bakker17373852011-01-06 14:20:01 +0000369 unsigned char output[100];
Manuel Pégourié-Gonnard2cf5a7c2015-04-08 12:49:31 +0200370 const mbedtls_md_info_t *md_info = NULL;
Paul Bakker17373852011-01-06 14:20:01 +0000371
Mateusz Starzykc0eabdc2021-08-03 14:09:02 +0200372 memset(md_name, 0x00, 100);
373 memset(output, 0x00, 100);
Paul Bakker17373852011-01-06 14:20:01 +0000374
Mateusz Starzykc0eabdc2021-08-03 14:09:02 +0200375 strncpy((char *)md_name, text_md_name, sizeof(md_name) - 1);
376 md_info = mbedtls_md_info_from_string(md_name);
377 TEST_ASSERT(md_info != NULL);
Paul Bakker17373852011-01-06 14:20:01 +0000378
Mateusz Starzykc0eabdc2021-08-03 14:09:02 +0200379 TEST_ASSERT(mbedtls_md_file(md_info, filename, output) == 0);
Paul Bakker17373852011-01-06 14:20:01 +0000380
Mateusz Starzykc0eabdc2021-08-03 14:09:02 +0200381 TEST_ASSERT(mbedtls_test_hexcmp(output, hash->x,
382 mbedtls_md_get_size(md_info),
383 hash->len) == 0);
Paul Bakker17373852011-01-06 14:20:01 +0000384}
Paul Bakker33b43f12013-08-20 11:48:36 +0200385/* END_CASE */