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