• Home
  • Line#
  • Scopes#
  • Navigate#
  • Raw
  • Download
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