xref: /optee_os/lib/libmbedtls/mbedtls/library/debug.c (revision 32b3180828fa15a49ccc86ecb4be9d274c140c89)
1817466cbSJens Wiklander /*
2817466cbSJens Wiklander  *  Debugging routines
3817466cbSJens Wiklander  *
47901324dSJerome Forissier  *  Copyright The Mbed TLS Contributors
57901324dSJerome Forissier  *  SPDX-License-Identifier: Apache-2.0
6817466cbSJens Wiklander  *
7817466cbSJens Wiklander  *  Licensed under the Apache License, Version 2.0 (the "License"); you may
8817466cbSJens Wiklander  *  not use this file except in compliance with the License.
9817466cbSJens Wiklander  *  You may obtain a copy of the License at
10817466cbSJens Wiklander  *
11817466cbSJens Wiklander  *  http://www.apache.org/licenses/LICENSE-2.0
12817466cbSJens Wiklander  *
13817466cbSJens Wiklander  *  Unless required by applicable law or agreed to in writing, software
14817466cbSJens Wiklander  *  distributed under the License is distributed on an "AS IS" BASIS, WITHOUT
15817466cbSJens Wiklander  *  WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
16817466cbSJens Wiklander  *  See the License for the specific language governing permissions and
17817466cbSJens Wiklander  *  limitations under the License.
18817466cbSJens Wiklander  */
19817466cbSJens Wiklander 
207901324dSJerome Forissier #include "common.h"
21817466cbSJens Wiklander 
22817466cbSJens Wiklander #if defined(MBEDTLS_DEBUG_C)
23817466cbSJens Wiklander 
24817466cbSJens Wiklander #include "mbedtls/platform.h"
25817466cbSJens Wiklander 
26817466cbSJens Wiklander #include "mbedtls/debug.h"
2711fa71b9SJerome Forissier #include "mbedtls/error.h"
28817466cbSJens Wiklander 
29817466cbSJens Wiklander #include <stdarg.h>
30817466cbSJens Wiklander #include <stdio.h>
31817466cbSJens Wiklander #include <string.h>
32817466cbSJens Wiklander 
33817466cbSJens Wiklander #define DEBUG_BUF_SIZE      512
34817466cbSJens Wiklander 
35817466cbSJens Wiklander static int debug_threshold = 0;
36817466cbSJens Wiklander 
37817466cbSJens Wiklander void mbedtls_debug_set_threshold(int threshold)
38817466cbSJens Wiklander {
39817466cbSJens Wiklander     debug_threshold = threshold;
40817466cbSJens Wiklander }
41817466cbSJens Wiklander 
42817466cbSJens Wiklander /*
43817466cbSJens Wiklander  * All calls to f_dbg must be made via this function
44817466cbSJens Wiklander  */
45817466cbSJens Wiklander static inline void debug_send_line(const mbedtls_ssl_context *ssl, int level,
46817466cbSJens Wiklander                                    const char *file, int line,
47817466cbSJens Wiklander                                    const char *str)
48817466cbSJens Wiklander {
49817466cbSJens Wiklander     /*
50817466cbSJens Wiklander      * If in a threaded environment, we need a thread identifier.
51817466cbSJens Wiklander      * Since there is no portable way to get one, use the address of the ssl
52817466cbSJens Wiklander      * context instead, as it shouldn't be shared between threads.
53817466cbSJens Wiklander      */
54817466cbSJens Wiklander #if defined(MBEDTLS_THREADING_C)
55817466cbSJens Wiklander     char idstr[20 + DEBUG_BUF_SIZE]; /* 0x + 16 nibbles + ': ' */
56817466cbSJens Wiklander     mbedtls_snprintf(idstr, sizeof(idstr), "%p: %s", (void *) ssl, str);
57817466cbSJens Wiklander     ssl->conf->f_dbg(ssl->conf->p_dbg, level, file, line, idstr);
58817466cbSJens Wiklander #else
59817466cbSJens Wiklander     ssl->conf->f_dbg(ssl->conf->p_dbg, level, file, line, str);
60817466cbSJens Wiklander #endif
61817466cbSJens Wiklander }
62817466cbSJens Wiklander 
637901324dSJerome Forissier MBEDTLS_PRINTF_ATTRIBUTE(5, 6)
64817466cbSJens Wiklander void mbedtls_debug_print_msg(const mbedtls_ssl_context *ssl, int level,
65817466cbSJens Wiklander                              const char *file, int line,
66817466cbSJens Wiklander                              const char *format, ...)
67817466cbSJens Wiklander {
68817466cbSJens Wiklander     va_list argp;
69817466cbSJens Wiklander     char str[DEBUG_BUF_SIZE];
7011fa71b9SJerome Forissier     int ret = MBEDTLS_ERR_ERROR_CORRUPTION_DETECTED;
71817466cbSJens Wiklander 
725b25c76aSJerome Forissier     if (NULL == ssl              ||
735b25c76aSJerome Forissier         NULL == ssl->conf        ||
745b25c76aSJerome Forissier         NULL == ssl->conf->f_dbg ||
75*32b31808SJens Wiklander         level > debug_threshold) {
76817466cbSJens Wiklander         return;
775b25c76aSJerome Forissier     }
78817466cbSJens Wiklander 
79817466cbSJens Wiklander     va_start(argp, format);
8011fa71b9SJerome Forissier     ret = mbedtls_vsnprintf(str, DEBUG_BUF_SIZE, format, argp);
81817466cbSJens Wiklander     va_end(argp);
82817466cbSJens Wiklander 
83*32b31808SJens Wiklander     if (ret >= 0 && ret < DEBUG_BUF_SIZE - 1) {
84817466cbSJens Wiklander         str[ret]     = '\n';
85817466cbSJens Wiklander         str[ret + 1] = '\0';
86817466cbSJens Wiklander     }
87817466cbSJens Wiklander 
88817466cbSJens Wiklander     debug_send_line(ssl, level, file, line, str);
89817466cbSJens Wiklander }
90817466cbSJens Wiklander 
91817466cbSJens Wiklander void mbedtls_debug_print_ret(const mbedtls_ssl_context *ssl, int level,
92817466cbSJens Wiklander                              const char *file, int line,
93817466cbSJens Wiklander                              const char *text, int ret)
94817466cbSJens Wiklander {
95817466cbSJens Wiklander     char str[DEBUG_BUF_SIZE];
96817466cbSJens Wiklander 
975b25c76aSJerome Forissier     if (NULL == ssl              ||
985b25c76aSJerome Forissier         NULL == ssl->conf        ||
995b25c76aSJerome Forissier         NULL == ssl->conf->f_dbg ||
100*32b31808SJens Wiklander         level > debug_threshold) {
101817466cbSJens Wiklander         return;
1025b25c76aSJerome Forissier     }
103817466cbSJens Wiklander 
104817466cbSJens Wiklander     /*
105817466cbSJens Wiklander      * With non-blocking I/O and examples that just retry immediately,
106817466cbSJens Wiklander      * the logs would be quickly flooded with WANT_READ, so ignore that.
107*32b31808SJens Wiklander      * Don't ignore WANT_WRITE however, since it is usually rare.
108817466cbSJens Wiklander      */
109*32b31808SJens Wiklander     if (ret == MBEDTLS_ERR_SSL_WANT_READ) {
110817466cbSJens Wiklander         return;
111*32b31808SJens Wiklander     }
112817466cbSJens Wiklander 
113817466cbSJens Wiklander     mbedtls_snprintf(str, sizeof(str), "%s() returned %d (-0x%04x)\n",
1147901324dSJerome Forissier                      text, ret, (unsigned int) -ret);
115817466cbSJens Wiklander 
116817466cbSJens Wiklander     debug_send_line(ssl, level, file, line, str);
117817466cbSJens Wiklander }
118817466cbSJens Wiklander 
119817466cbSJens Wiklander void mbedtls_debug_print_buf(const mbedtls_ssl_context *ssl, int level,
120817466cbSJens Wiklander                              const char *file, int line, const char *text,
121817466cbSJens Wiklander                              const unsigned char *buf, size_t len)
122817466cbSJens Wiklander {
123817466cbSJens Wiklander     char str[DEBUG_BUF_SIZE];
124817466cbSJens Wiklander     char txt[17];
125817466cbSJens Wiklander     size_t i, idx = 0;
126817466cbSJens Wiklander 
1275b25c76aSJerome Forissier     if (NULL == ssl              ||
1285b25c76aSJerome Forissier         NULL == ssl->conf        ||
1295b25c76aSJerome Forissier         NULL == ssl->conf->f_dbg ||
130*32b31808SJens Wiklander         level > debug_threshold) {
131817466cbSJens Wiklander         return;
1325b25c76aSJerome Forissier     }
133817466cbSJens Wiklander 
134817466cbSJens Wiklander     mbedtls_snprintf(str + idx, sizeof(str) - idx, "dumping '%s' (%u bytes)\n",
135817466cbSJens Wiklander                      text, (unsigned int) len);
136817466cbSJens Wiklander 
137817466cbSJens Wiklander     debug_send_line(ssl, level, file, line, str);
138817466cbSJens Wiklander 
139817466cbSJens Wiklander     idx = 0;
140817466cbSJens Wiklander     memset(txt, 0, sizeof(txt));
141*32b31808SJens Wiklander     for (i = 0; i < len; i++) {
142*32b31808SJens Wiklander         if (i >= 4096) {
143817466cbSJens Wiklander             break;
144*32b31808SJens Wiklander         }
145817466cbSJens Wiklander 
146*32b31808SJens Wiklander         if (i % 16 == 0) {
147*32b31808SJens Wiklander             if (i > 0) {
148817466cbSJens Wiklander                 mbedtls_snprintf(str + idx, sizeof(str) - idx, "  %s\n", txt);
149817466cbSJens Wiklander                 debug_send_line(ssl, level, file, line, str);
150817466cbSJens Wiklander 
151817466cbSJens Wiklander                 idx = 0;
152817466cbSJens Wiklander                 memset(txt, 0, sizeof(txt));
153817466cbSJens Wiklander             }
154817466cbSJens Wiklander 
155817466cbSJens Wiklander             idx += mbedtls_snprintf(str + idx, sizeof(str) - idx, "%04x: ",
156817466cbSJens Wiklander                                     (unsigned int) i);
157817466cbSJens Wiklander 
158817466cbSJens Wiklander         }
159817466cbSJens Wiklander 
160817466cbSJens Wiklander         idx += mbedtls_snprintf(str + idx, sizeof(str) - idx, " %02x",
161817466cbSJens Wiklander                                 (unsigned int) buf[i]);
162817466cbSJens Wiklander         txt[i % 16] = (buf[i] > 31 && buf[i] < 127) ? buf[i] : '.';
163817466cbSJens Wiklander     }
164817466cbSJens Wiklander 
165*32b31808SJens Wiklander     if (len > 0) {
166*32b31808SJens Wiklander         for (/* i = i */; i % 16 != 0; i++) {
167817466cbSJens Wiklander             idx += mbedtls_snprintf(str + idx, sizeof(str) - idx, "   ");
168*32b31808SJens Wiklander         }
169817466cbSJens Wiklander 
170817466cbSJens Wiklander         mbedtls_snprintf(str + idx, sizeof(str) - idx, "  %s\n", txt);
171817466cbSJens Wiklander         debug_send_line(ssl, level, file, line, str);
172817466cbSJens Wiklander     }
173817466cbSJens Wiklander }
174817466cbSJens Wiklander 
175817466cbSJens Wiklander #if defined(MBEDTLS_ECP_C)
176817466cbSJens Wiklander void mbedtls_debug_print_ecp(const mbedtls_ssl_context *ssl, int level,
177817466cbSJens Wiklander                              const char *file, int line,
178817466cbSJens Wiklander                              const char *text, const mbedtls_ecp_point *X)
179817466cbSJens Wiklander {
180817466cbSJens Wiklander     char str[DEBUG_BUF_SIZE];
181817466cbSJens Wiklander 
1825b25c76aSJerome Forissier     if (NULL == ssl              ||
1835b25c76aSJerome Forissier         NULL == ssl->conf        ||
1845b25c76aSJerome Forissier         NULL == ssl->conf->f_dbg ||
185*32b31808SJens Wiklander         level > debug_threshold) {
186817466cbSJens Wiklander         return;
1875b25c76aSJerome Forissier     }
188817466cbSJens Wiklander 
189817466cbSJens Wiklander     mbedtls_snprintf(str, sizeof(str), "%s(X)", text);
190817466cbSJens Wiklander     mbedtls_debug_print_mpi(ssl, level, file, line, str, &X->X);
191817466cbSJens Wiklander 
192817466cbSJens Wiklander     mbedtls_snprintf(str, sizeof(str), "%s(Y)", text);
193817466cbSJens Wiklander     mbedtls_debug_print_mpi(ssl, level, file, line, str, &X->Y);
194817466cbSJens Wiklander }
195817466cbSJens Wiklander #endif /* MBEDTLS_ECP_C */
196817466cbSJens Wiklander 
197817466cbSJens Wiklander #if defined(MBEDTLS_BIGNUM_C)
198817466cbSJens Wiklander void mbedtls_debug_print_mpi(const mbedtls_ssl_context *ssl, int level,
199817466cbSJens Wiklander                              const char *file, int line,
200817466cbSJens Wiklander                              const char *text, const mbedtls_mpi *X)
201817466cbSJens Wiklander {
202817466cbSJens Wiklander     char str[DEBUG_BUF_SIZE];
2037901324dSJerome Forissier     size_t bitlen;
2047901324dSJerome Forissier     size_t idx = 0;
205817466cbSJens Wiklander 
2065b25c76aSJerome Forissier     if (NULL == ssl              ||
2075b25c76aSJerome Forissier         NULL == ssl->conf        ||
2085b25c76aSJerome Forissier         NULL == ssl->conf->f_dbg ||
2095b25c76aSJerome Forissier         NULL == X                ||
210*32b31808SJens Wiklander         level > debug_threshold) {
211817466cbSJens Wiklander         return;
2125b25c76aSJerome Forissier     }
213817466cbSJens Wiklander 
2147901324dSJerome Forissier     bitlen = mbedtls_mpi_bitlen(X);
215817466cbSJens Wiklander 
2167901324dSJerome Forissier     mbedtls_snprintf(str, sizeof(str), "value of '%s' (%u bits) is:\n",
2177901324dSJerome Forissier                      text, (unsigned) bitlen);
218817466cbSJens Wiklander     debug_send_line(ssl, level, file, line, str);
219817466cbSJens Wiklander 
220*32b31808SJens Wiklander     if (bitlen == 0) {
2217901324dSJerome Forissier         str[0] = ' '; str[1] = '0'; str[2] = '0';
2227901324dSJerome Forissier         idx = 3;
223*32b31808SJens Wiklander     } else {
2247901324dSJerome Forissier         int n;
225*32b31808SJens Wiklander         for (n = (int) ((bitlen - 1) / 8); n >= 0; n--) {
2267901324dSJerome Forissier             size_t limb_offset = n / sizeof(mbedtls_mpi_uint);
2277901324dSJerome Forissier             size_t offset_in_limb = n % sizeof(mbedtls_mpi_uint);
2287901324dSJerome Forissier             unsigned char octet =
2297901324dSJerome Forissier                 (X->p[limb_offset] >> (offset_in_limb * 8)) & 0xff;
2307901324dSJerome Forissier             mbedtls_snprintf(str + idx, sizeof(str) - idx, " %02x", octet);
2317901324dSJerome Forissier             idx += 3;
2327901324dSJerome Forissier             /* Wrap lines after 16 octets that each take 3 columns */
233*32b31808SJens Wiklander             if (idx >= 3 * 16) {
234817466cbSJens Wiklander                 mbedtls_snprintf(str + idx, sizeof(str) - idx, "\n");
235817466cbSJens Wiklander                 debug_send_line(ssl, level, file, line, str);
236817466cbSJens Wiklander                 idx = 0;
237817466cbSJens Wiklander             }
238817466cbSJens Wiklander         }
239817466cbSJens Wiklander     }
240817466cbSJens Wiklander 
241*32b31808SJens Wiklander     if (idx != 0) {
242817466cbSJens Wiklander         mbedtls_snprintf(str + idx, sizeof(str) - idx, "\n");
243817466cbSJens Wiklander         debug_send_line(ssl, level, file, line, str);
244817466cbSJens Wiklander     }
2457901324dSJerome Forissier }
246817466cbSJens Wiklander #endif /* MBEDTLS_BIGNUM_C */
247817466cbSJens Wiklander 
248*32b31808SJens Wiklander #if defined(MBEDTLS_X509_CRT_PARSE_C) && !defined(MBEDTLS_X509_REMOVE_INFO)
249817466cbSJens Wiklander static void debug_print_pk(const mbedtls_ssl_context *ssl, int level,
250817466cbSJens Wiklander                            const char *file, int line,
251817466cbSJens Wiklander                            const char *text, const mbedtls_pk_context *pk)
252817466cbSJens Wiklander {
253817466cbSJens Wiklander     size_t i;
254817466cbSJens Wiklander     mbedtls_pk_debug_item items[MBEDTLS_PK_DEBUG_MAX_ITEMS];
255817466cbSJens Wiklander     char name[16];
256817466cbSJens Wiklander 
257817466cbSJens Wiklander     memset(items, 0, sizeof(items));
258817466cbSJens Wiklander 
259*32b31808SJens Wiklander     if (mbedtls_pk_debug(pk, items) != 0) {
260817466cbSJens Wiklander         debug_send_line(ssl, level, file, line,
261817466cbSJens Wiklander                         "invalid PK context\n");
262817466cbSJens Wiklander         return;
263817466cbSJens Wiklander     }
264817466cbSJens Wiklander 
265*32b31808SJens Wiklander     for (i = 0; i < MBEDTLS_PK_DEBUG_MAX_ITEMS; i++) {
266*32b31808SJens Wiklander         if (items[i].type == MBEDTLS_PK_DEBUG_NONE) {
267817466cbSJens Wiklander             return;
268*32b31808SJens Wiklander         }
269817466cbSJens Wiklander 
270817466cbSJens Wiklander         mbedtls_snprintf(name, sizeof(name), "%s%s", text, items[i].name);
271817466cbSJens Wiklander         name[sizeof(name) - 1] = '\0';
272817466cbSJens Wiklander 
273*32b31808SJens Wiklander         if (items[i].type == MBEDTLS_PK_DEBUG_MPI) {
274817466cbSJens Wiklander             mbedtls_debug_print_mpi(ssl, level, file, line, name, items[i].value);
275*32b31808SJens Wiklander         } else
276817466cbSJens Wiklander #if defined(MBEDTLS_ECP_C)
277*32b31808SJens Wiklander         if (items[i].type == MBEDTLS_PK_DEBUG_ECP) {
278817466cbSJens Wiklander             mbedtls_debug_print_ecp(ssl, level, file, line, name, items[i].value);
279*32b31808SJens Wiklander         } else
280817466cbSJens Wiklander #endif
281*32b31808SJens Wiklander         { debug_send_line(ssl, level, file, line,
282*32b31808SJens Wiklander                           "should not happen\n"); }
283817466cbSJens Wiklander     }
284817466cbSJens Wiklander }
285817466cbSJens Wiklander 
286817466cbSJens Wiklander static void debug_print_line_by_line(const mbedtls_ssl_context *ssl, int level,
287817466cbSJens Wiklander                                      const char *file, int line, const char *text)
288817466cbSJens Wiklander {
289817466cbSJens Wiklander     char str[DEBUG_BUF_SIZE];
290817466cbSJens Wiklander     const char *start, *cur;
291817466cbSJens Wiklander 
292817466cbSJens Wiklander     start = text;
293*32b31808SJens Wiklander     for (cur = text; *cur != '\0'; cur++) {
294*32b31808SJens Wiklander         if (*cur == '\n') {
295817466cbSJens Wiklander             size_t len = cur - start + 1;
296*32b31808SJens Wiklander             if (len > DEBUG_BUF_SIZE - 1) {
297817466cbSJens Wiklander                 len = DEBUG_BUF_SIZE - 1;
298*32b31808SJens Wiklander             }
299817466cbSJens Wiklander 
300817466cbSJens Wiklander             memcpy(str, start, len);
301817466cbSJens Wiklander             str[len] = '\0';
302817466cbSJens Wiklander 
303817466cbSJens Wiklander             debug_send_line(ssl, level, file, line, str);
304817466cbSJens Wiklander 
305817466cbSJens Wiklander             start = cur + 1;
306817466cbSJens Wiklander         }
307817466cbSJens Wiklander     }
308817466cbSJens Wiklander }
309817466cbSJens Wiklander 
310817466cbSJens Wiklander void mbedtls_debug_print_crt(const mbedtls_ssl_context *ssl, int level,
311817466cbSJens Wiklander                              const char *file, int line,
312817466cbSJens Wiklander                              const char *text, const mbedtls_x509_crt *crt)
313817466cbSJens Wiklander {
314817466cbSJens Wiklander     char str[DEBUG_BUF_SIZE];
315817466cbSJens Wiklander     int i = 0;
316817466cbSJens Wiklander 
3175b25c76aSJerome Forissier     if (NULL == ssl              ||
3185b25c76aSJerome Forissier         NULL == ssl->conf        ||
3195b25c76aSJerome Forissier         NULL == ssl->conf->f_dbg ||
3205b25c76aSJerome Forissier         NULL == crt              ||
321*32b31808SJens Wiklander         level > debug_threshold) {
322817466cbSJens Wiklander         return;
3235b25c76aSJerome Forissier     }
324817466cbSJens Wiklander 
325*32b31808SJens Wiklander     while (crt != NULL) {
326817466cbSJens Wiklander         char buf[1024];
327817466cbSJens Wiklander 
328817466cbSJens Wiklander         mbedtls_snprintf(str, sizeof(str), "%s #%d:\n", text, ++i);
329817466cbSJens Wiklander         debug_send_line(ssl, level, file, line, str);
330817466cbSJens Wiklander 
331817466cbSJens Wiklander         mbedtls_x509_crt_info(buf, sizeof(buf) - 1, "", crt);
332817466cbSJens Wiklander         debug_print_line_by_line(ssl, level, file, line, buf);
333817466cbSJens Wiklander 
334817466cbSJens Wiklander         debug_print_pk(ssl, level, file, line, "crt->", &crt->pk);
335817466cbSJens Wiklander 
336817466cbSJens Wiklander         crt = crt->next;
337817466cbSJens Wiklander     }
338817466cbSJens Wiklander }
339*32b31808SJens Wiklander #endif /* MBEDTLS_X509_CRT_PARSE_C && MBEDTLS_X509_REMOVE_INFO */
340817466cbSJens Wiklander 
3413d3b0591SJens Wiklander #if defined(MBEDTLS_ECDH_C)
3423d3b0591SJens Wiklander static void mbedtls_debug_printf_ecdh_internal(const mbedtls_ssl_context *ssl,
3433d3b0591SJens Wiklander                                                int level, const char *file,
3443d3b0591SJens Wiklander                                                int line,
3453d3b0591SJens Wiklander                                                const mbedtls_ecdh_context *ecdh,
3463d3b0591SJens Wiklander                                                mbedtls_debug_ecdh_attr attr)
3473d3b0591SJens Wiklander {
3483d3b0591SJens Wiklander #if defined(MBEDTLS_ECDH_LEGACY_CONTEXT)
3493d3b0591SJens Wiklander     const mbedtls_ecdh_context *ctx = ecdh;
3503d3b0591SJens Wiklander #else
3513d3b0591SJens Wiklander     const mbedtls_ecdh_context_mbed *ctx = &ecdh->ctx.mbed_ecdh;
3523d3b0591SJens Wiklander #endif
3533d3b0591SJens Wiklander 
354*32b31808SJens Wiklander     switch (attr) {
3553d3b0591SJens Wiklander         case MBEDTLS_DEBUG_ECDH_Q:
3563d3b0591SJens Wiklander             mbedtls_debug_print_ecp(ssl, level, file, line, "ECDH: Q",
3573d3b0591SJens Wiklander                                     &ctx->Q);
3583d3b0591SJens Wiklander             break;
3593d3b0591SJens Wiklander         case MBEDTLS_DEBUG_ECDH_QP:
3603d3b0591SJens Wiklander             mbedtls_debug_print_ecp(ssl, level, file, line, "ECDH: Qp",
3613d3b0591SJens Wiklander                                     &ctx->Qp);
3623d3b0591SJens Wiklander             break;
3633d3b0591SJens Wiklander         case MBEDTLS_DEBUG_ECDH_Z:
3643d3b0591SJens Wiklander             mbedtls_debug_print_mpi(ssl, level, file, line, "ECDH: z",
3653d3b0591SJens Wiklander                                     &ctx->z);
3663d3b0591SJens Wiklander             break;
3673d3b0591SJens Wiklander         default:
3683d3b0591SJens Wiklander             break;
3693d3b0591SJens Wiklander     }
3703d3b0591SJens Wiklander }
3713d3b0591SJens Wiklander 
3723d3b0591SJens Wiklander void mbedtls_debug_printf_ecdh(const mbedtls_ssl_context *ssl, int level,
3733d3b0591SJens Wiklander                                const char *file, int line,
3743d3b0591SJens Wiklander                                const mbedtls_ecdh_context *ecdh,
3753d3b0591SJens Wiklander                                mbedtls_debug_ecdh_attr attr)
3763d3b0591SJens Wiklander {
3773d3b0591SJens Wiklander #if defined(MBEDTLS_ECDH_LEGACY_CONTEXT)
3783d3b0591SJens Wiklander     mbedtls_debug_printf_ecdh_internal(ssl, level, file, line, ecdh, attr);
3793d3b0591SJens Wiklander #else
380*32b31808SJens Wiklander     switch (ecdh->var) {
3813d3b0591SJens Wiklander         default:
3823d3b0591SJens Wiklander             mbedtls_debug_printf_ecdh_internal(ssl, level, file, line, ecdh,
3833d3b0591SJens Wiklander                                                attr);
3843d3b0591SJens Wiklander     }
3853d3b0591SJens Wiklander #endif
3863d3b0591SJens Wiklander }
3873d3b0591SJens Wiklander #endif /* MBEDTLS_ECDH_C */
3883d3b0591SJens Wiklander 
389817466cbSJens Wiklander #endif /* MBEDTLS_DEBUG_C */
390