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