1/* BEGIN_HEADER */ 2#include "mbedtls/debug.h" 3#include "string.h" 4 5struct buffer_data { 6 char buf[2000]; 7 char *ptr; 8}; 9 10void string_debug(void *data, int level, const char *file, int line, const char *str) 11{ 12 struct buffer_data *buffer = (struct buffer_data *) data; 13 char *p = buffer->ptr; 14 ((void) level); 15 16 memcpy(p, file, strlen(file)); 17 p += strlen(file); 18 19 *p++ = '('; 20 *p++ = '0' + (line / 1000) % 10; 21 *p++ = '0' + (line / 100) % 10; 22 *p++ = '0' + (line / 10) % 10; 23 *p++ = '0' + (line / 1) % 10; 24 *p++ = ')'; 25 *p++ = ':'; 26 *p++ = ' '; 27 28#if defined(MBEDTLS_THREADING_C) 29 /* Skip "thread ID" (up to the first space) as it is not predictable */ 30 while (*str++ != ' ') { 31 ; 32 } 33#endif 34 35 memcpy(p, str, strlen(str)); 36 p += strlen(str); 37 38 /* Detect if debug messages output partial lines and mark them */ 39 if (p[-1] != '\n') { 40 *p++ = '*'; 41 } 42 43 buffer->ptr = p; 44} 45/* END_HEADER */ 46 47/* BEGIN_DEPENDENCIES 48 * depends_on:MBEDTLS_DEBUG_C:MBEDTLS_SSL_TLS_C 49 * END_DEPENDENCIES 50 */ 51 52/* BEGIN_CASE */ 53void debug_print_msg_threshold(int threshold, int level, char *file, 54 int line, char *result_str) 55{ 56 mbedtls_ssl_context ssl; 57 mbedtls_ssl_config conf; 58 struct buffer_data buffer; 59 60 mbedtls_ssl_init(&ssl); 61 mbedtls_ssl_config_init(&conf); 62 memset(buffer.buf, 0, 2000); 63 buffer.ptr = buffer.buf; 64 USE_PSA_INIT(); 65 66 TEST_ASSERT(mbedtls_ssl_setup(&ssl, &conf) == 0); 67 68 mbedtls_debug_set_threshold(threshold); 69 mbedtls_ssl_conf_dbg(&conf, string_debug, &buffer); 70 71 mbedtls_debug_print_msg(&ssl, level, file, line, 72 "Text message, 2 == %d", 2); 73 74 TEST_ASSERT(strcmp(buffer.buf, result_str) == 0); 75 76exit: 77 mbedtls_ssl_free(&ssl); 78 mbedtls_ssl_config_free(&conf); 79 USE_PSA_DONE(); 80} 81/* END_CASE */ 82 83/* BEGIN_CASE */ 84void mbedtls_debug_print_ret(char *file, int line, char *text, int value, 85 char *result_str) 86{ 87 mbedtls_ssl_context ssl; 88 mbedtls_ssl_config conf; 89 struct buffer_data buffer; 90 91 mbedtls_ssl_init(&ssl); 92 mbedtls_ssl_config_init(&conf); 93 memset(buffer.buf, 0, 2000); 94 buffer.ptr = buffer.buf; 95 USE_PSA_INIT(); 96 97 TEST_ASSERT(mbedtls_ssl_setup(&ssl, &conf) == 0); 98 99 mbedtls_ssl_conf_dbg(&conf, string_debug, &buffer); 100 101 mbedtls_debug_print_ret(&ssl, 0, file, line, text, value); 102 103 TEST_ASSERT(strcmp(buffer.buf, result_str) == 0); 104 105exit: 106 mbedtls_ssl_free(&ssl); 107 mbedtls_ssl_config_free(&conf); 108 USE_PSA_DONE(); 109} 110/* END_CASE */ 111 112/* BEGIN_CASE */ 113void mbedtls_debug_print_buf(char *file, int line, char *text, 114 data_t *data, char *result_str) 115{ 116 mbedtls_ssl_context ssl; 117 mbedtls_ssl_config conf; 118 struct buffer_data buffer; 119 120 mbedtls_ssl_init(&ssl); 121 mbedtls_ssl_config_init(&conf); 122 memset(buffer.buf, 0, 2000); 123 buffer.ptr = buffer.buf; 124 USE_PSA_INIT(); 125 126 TEST_ASSERT(mbedtls_ssl_setup(&ssl, &conf) == 0); 127 128 mbedtls_ssl_conf_dbg(&conf, string_debug, &buffer); 129 130 mbedtls_debug_print_buf(&ssl, 0, file, line, text, data->x, data->len); 131 132 TEST_ASSERT(strcmp(buffer.buf, result_str) == 0); 133 134exit: 135 mbedtls_ssl_free(&ssl); 136 mbedtls_ssl_config_free(&conf); 137 USE_PSA_DONE(); 138} 139/* END_CASE */ 140 141/* BEGIN_CASE depends_on:MBEDTLS_FS_IO:MBEDTLS_X509_CRT_PARSE_C */ 142void mbedtls_debug_print_crt(char *crt_file, char *file, int line, 143 char *prefix, char *result_str) 144{ 145 mbedtls_x509_crt crt; 146 mbedtls_ssl_context ssl; 147 mbedtls_ssl_config conf; 148 struct buffer_data buffer; 149 150 mbedtls_ssl_init(&ssl); 151 mbedtls_ssl_config_init(&conf); 152 mbedtls_x509_crt_init(&crt); 153 USE_PSA_INIT(); 154 155 memset(buffer.buf, 0, 2000); 156 buffer.ptr = buffer.buf; 157 158 TEST_ASSERT(mbedtls_ssl_setup(&ssl, &conf) == 0); 159 160 mbedtls_ssl_conf_dbg(&conf, string_debug, &buffer); 161 162 TEST_ASSERT(mbedtls_x509_crt_parse_file(&crt, crt_file) == 0); 163 mbedtls_debug_print_crt(&ssl, 0, file, line, prefix, &crt); 164 165 TEST_ASSERT(strcmp(buffer.buf, result_str) == 0); 166 167exit: 168 mbedtls_x509_crt_free(&crt); 169 mbedtls_ssl_free(&ssl); 170 mbedtls_ssl_config_free(&conf); 171 USE_PSA_DONE(); 172} 173/* END_CASE */ 174 175/* BEGIN_CASE depends_on:MBEDTLS_BIGNUM_C */ 176void mbedtls_debug_print_mpi(char *value, char *file, int line, 177 char *prefix, char *result_str) 178{ 179 mbedtls_ssl_context ssl; 180 mbedtls_ssl_config conf; 181 struct buffer_data buffer; 182 mbedtls_mpi val; 183 184 mbedtls_ssl_init(&ssl); 185 mbedtls_ssl_config_init(&conf); 186 mbedtls_mpi_init(&val); 187 memset(buffer.buf, 0, 2000); 188 buffer.ptr = buffer.buf; 189 USE_PSA_INIT(); 190 191 TEST_ASSERT(mbedtls_ssl_setup(&ssl, &conf) == 0); 192 193 TEST_ASSERT(mbedtls_test_read_mpi(&val, value) == 0); 194 195 mbedtls_ssl_conf_dbg(&conf, string_debug, &buffer); 196 197 mbedtls_debug_print_mpi(&ssl, 0, file, line, prefix, &val); 198 199 TEST_ASSERT(strcmp(buffer.buf, result_str) == 0); 200 201exit: 202 mbedtls_mpi_free(&val); 203 mbedtls_ssl_free(&ssl); 204 mbedtls_ssl_config_free(&conf); 205 USE_PSA_DONE(); 206} 207/* END_CASE */ 208 209/* BEGIN_CASE */ 210void check_mbedtls_calloc_overallocation(int num, int size) 211{ 212 unsigned char *buf; 213 buf = mbedtls_calloc((size_t) num * SIZE_MAX/2, (size_t) size * SIZE_MAX/2); 214 /* Dummy usage of the pointer to prevent optimizing it */ 215 mbedtls_printf("calloc pointer : %p\n", buf); 216 TEST_ASSERT(buf == NULL); 217 218exit: 219 mbedtls_free(buf); 220} 221/* END_CASE */ 222