test_suite_debug.function 6.0 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224
  1. /* BEGIN_HEADER */
  2. #include "mbedtls/debug.h"
  3. #include "string.h"
  4. #include "mbedtls/legacy_or_psa.h"
  5. #include "mbedtls/pk.h"
  6. struct buffer_data {
  7. char buf[2000];
  8. char *ptr;
  9. };
  10. void 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. memcpy(p, file, strlen(file));
  16. p += strlen(file);
  17. *p++ = '(';
  18. *p++ = '0' + (line / 1000) % 10;
  19. *p++ = '0' + (line / 100) % 10;
  20. *p++ = '0' + (line / 10) % 10;
  21. *p++ = '0' + (line / 1) % 10;
  22. *p++ = ')';
  23. *p++ = ':';
  24. *p++ = ' ';
  25. #if defined(MBEDTLS_THREADING_C)
  26. /* Skip "thread ID" (up to the first space) as it is not predictable */
  27. while (*str++ != ' ') {
  28. ;
  29. }
  30. #endif
  31. memcpy(p, str, strlen(str));
  32. p += strlen(str);
  33. /* Detect if debug messages output partial lines and mark them */
  34. if (p[-1] != '\n') {
  35. *p++ = '*';
  36. }
  37. buffer->ptr = p;
  38. }
  39. /* END_HEADER */
  40. /* BEGIN_DEPENDENCIES
  41. * depends_on:MBEDTLS_DEBUG_C:MBEDTLS_SSL_TLS_C
  42. * END_DEPENDENCIES
  43. */
  44. /* BEGIN_CASE */
  45. void debug_print_msg_threshold(int threshold, int level, char *file,
  46. int line, char *result_str)
  47. {
  48. mbedtls_ssl_context ssl;
  49. mbedtls_ssl_config conf;
  50. struct buffer_data buffer;
  51. mbedtls_ssl_init(&ssl);
  52. mbedtls_ssl_config_init(&conf);
  53. memset(buffer.buf, 0, 2000);
  54. buffer.ptr = buffer.buf;
  55. mbedtls_ssl_config_defaults(&conf,
  56. MBEDTLS_SSL_IS_CLIENT,
  57. MBEDTLS_SSL_TRANSPORT_STREAM,
  58. MBEDTLS_SSL_PRESET_DEFAULT);
  59. mbedtls_ssl_conf_dbg(&conf, string_debug, &buffer);
  60. TEST_ASSERT(mbedtls_ssl_setup(&ssl, &conf) == 0);
  61. mbedtls_debug_set_threshold(threshold);
  62. mbedtls_debug_print_msg(&ssl, level, file, line,
  63. "Text message, 2 == %d", 2);
  64. TEST_ASSERT(strcmp(buffer.buf, result_str) == 0);
  65. exit:
  66. mbedtls_ssl_free(&ssl);
  67. mbedtls_ssl_config_free(&conf);
  68. }
  69. /* END_CASE */
  70. /* BEGIN_CASE */
  71. void mbedtls_debug_print_ret(char *file, int line, char *text, int value,
  72. char *result_str)
  73. {
  74. mbedtls_ssl_context ssl;
  75. mbedtls_ssl_config conf;
  76. struct buffer_data buffer;
  77. mbedtls_ssl_init(&ssl);
  78. mbedtls_ssl_config_init(&conf);
  79. memset(buffer.buf, 0, 2000);
  80. buffer.ptr = buffer.buf;
  81. mbedtls_ssl_config_defaults(&conf,
  82. MBEDTLS_SSL_IS_CLIENT,
  83. MBEDTLS_SSL_TRANSPORT_STREAM,
  84. MBEDTLS_SSL_PRESET_DEFAULT);
  85. mbedtls_ssl_conf_dbg(&conf, string_debug, &buffer);
  86. TEST_ASSERT(mbedtls_ssl_setup(&ssl, &conf) == 0);
  87. mbedtls_debug_print_ret(&ssl, 0, file, line, text, value);
  88. TEST_ASSERT(strcmp(buffer.buf, result_str) == 0);
  89. exit:
  90. mbedtls_ssl_free(&ssl);
  91. mbedtls_ssl_config_free(&conf);
  92. }
  93. /* END_CASE */
  94. /* BEGIN_CASE */
  95. void mbedtls_debug_print_buf(char *file, int line, char *text,
  96. data_t *data, char *result_str)
  97. {
  98. mbedtls_ssl_context ssl;
  99. mbedtls_ssl_config conf;
  100. struct buffer_data buffer;
  101. mbedtls_ssl_init(&ssl);
  102. mbedtls_ssl_config_init(&conf);
  103. memset(buffer.buf, 0, 2000);
  104. buffer.ptr = buffer.buf;
  105. mbedtls_ssl_config_defaults(&conf,
  106. MBEDTLS_SSL_IS_CLIENT,
  107. MBEDTLS_SSL_TRANSPORT_STREAM,
  108. MBEDTLS_SSL_PRESET_DEFAULT);
  109. mbedtls_ssl_conf_dbg(&conf, string_debug, &buffer);
  110. TEST_ASSERT(mbedtls_ssl_setup(&ssl, &conf) == 0);
  111. mbedtls_debug_print_buf(&ssl, 0, file, line, text, data->x, data->len);
  112. TEST_ASSERT(strcmp(buffer.buf, result_str) == 0);
  113. exit:
  114. mbedtls_ssl_free(&ssl);
  115. mbedtls_ssl_config_free(&conf);
  116. }
  117. /* END_CASE */
  118. /* BEGIN_CASE depends_on:MBEDTLS_FS_IO:MBEDTLS_X509_CRT_PARSE_C:!MBEDTLS_X509_REMOVE_INFO */
  119. void mbedtls_debug_print_crt(char *crt_file, char *file, int line,
  120. char *prefix, char *result_str)
  121. {
  122. mbedtls_x509_crt crt;
  123. mbedtls_ssl_context ssl;
  124. mbedtls_ssl_config conf;
  125. struct buffer_data buffer;
  126. mbedtls_ssl_init(&ssl);
  127. mbedtls_ssl_config_init(&conf);
  128. mbedtls_x509_crt_init(&crt);
  129. memset(buffer.buf, 0, 2000);
  130. buffer.ptr = buffer.buf;
  131. mbedtls_ssl_config_defaults(&conf,
  132. MBEDTLS_SSL_IS_CLIENT,
  133. MBEDTLS_SSL_TRANSPORT_STREAM,
  134. MBEDTLS_SSL_PRESET_DEFAULT);
  135. mbedtls_ssl_conf_dbg(&conf, string_debug, &buffer);
  136. TEST_ASSERT(mbedtls_ssl_setup(&ssl, &conf) == 0);
  137. TEST_ASSERT(mbedtls_x509_crt_parse_file(&crt, crt_file) == 0);
  138. mbedtls_debug_print_crt(&ssl, 0, file, line, prefix, &crt);
  139. TEST_ASSERT(strcmp(buffer.buf, result_str) == 0);
  140. exit:
  141. mbedtls_x509_crt_free(&crt);
  142. mbedtls_ssl_free(&ssl);
  143. mbedtls_ssl_config_free(&conf);
  144. }
  145. /* END_CASE */
  146. /* BEGIN_CASE depends_on:MBEDTLS_BIGNUM_C */
  147. void mbedtls_debug_print_mpi(char *value, char *file, int line,
  148. char *prefix, char *result_str)
  149. {
  150. mbedtls_ssl_context ssl;
  151. mbedtls_ssl_config conf;
  152. struct buffer_data buffer;
  153. mbedtls_mpi val;
  154. mbedtls_ssl_init(&ssl);
  155. mbedtls_ssl_config_init(&conf);
  156. mbedtls_mpi_init(&val);
  157. memset(buffer.buf, 0, 2000);
  158. buffer.ptr = buffer.buf;
  159. mbedtls_ssl_config_defaults(&conf,
  160. MBEDTLS_SSL_IS_CLIENT,
  161. MBEDTLS_SSL_TRANSPORT_STREAM,
  162. MBEDTLS_SSL_PRESET_DEFAULT);
  163. mbedtls_ssl_conf_dbg(&conf, string_debug, &buffer);
  164. TEST_ASSERT(mbedtls_ssl_setup(&ssl, &conf) == 0);
  165. TEST_ASSERT(mbedtls_test_read_mpi(&val, value) == 0);
  166. mbedtls_debug_print_mpi(&ssl, 0, file, line, prefix, &val);
  167. TEST_ASSERT(strcmp(buffer.buf, result_str) == 0);
  168. exit:
  169. mbedtls_mpi_free(&val);
  170. mbedtls_ssl_free(&ssl);
  171. mbedtls_ssl_config_free(&conf);
  172. }
  173. /* END_CASE */