Fix CVE-2017-6891 in minitasn1 code
[platform/upstream/gnutls.git] / lib / debug.c
1 /*
2  * Copyright (C) 2001-2012 Free Software Foundation, Inc.
3  *
4  * Author: Nikos Mavrogiannopoulos
5  *
6  * This file is part of GnuTLS.
7  *
8  * The GnuTLS is free software; you can redistribute it and/or
9  * modify it under the terms of the GNU Lesser General Public License
10  * as published by the Free Software Foundation; either version 2.1 of
11  * the License, or (at your option) any later version.
12  *
13  * This library is distributed in the hope that it will be useful, but
14  * WITHOUT ANY WARRANTY; without even the implied warranty of
15  * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
16  * Lesser General Public License for more details.
17  *
18  * You should have received a copy of the GNU Lesser General Public License
19  * along with this program.  If not, see <http://www.gnu.org/licenses/>
20  *
21  */
22
23 #include "gnutls_int.h"
24 #include "gnutls_errors.h"
25 #include <stdio.h>
26 #include <stdlib.h>
27 #include "debug.h"
28 #include <gnutls_mpi.h>
29
30 #ifdef DEBUG
31 void _gnutls_dump_mpi(const char *prefix, bigint_t a)
32 {
33         char buf[400];
34         char buf_hex[2 * sizeof(buf) + 1];
35         size_t n = sizeof buf;
36
37         if (_gnutls_mpi_print(a, buf, &n))
38                 strcpy(buf, "[can't print value]");     /* Flawfinder: ignore */
39         _gnutls_debug_log("MPI: length: %d\n\t%s%s\n", (int) n, prefix,
40                           _gnutls_bin2hex(buf, n, buf_hex, sizeof(buf_hex),
41                                           NULL));
42 }
43
44 void
45 _gnutls_dump_vector(const char *prefix, const uint8_t * a, size_t a_size)
46 {
47         char buf_hex[2 * a_size + 1];
48
49         _gnutls_debug_log("Vector: length: %d\n\t%s%s\n", (int) a_size,
50                           prefix, _gnutls_bin2hex(a, a_size, buf_hex,
51                                                   sizeof(buf_hex), NULL));
52 }
53 #endif
54
55 const char *_gnutls_packet2str(content_type_t packet)
56 {
57         switch (packet) {
58         case GNUTLS_CHANGE_CIPHER_SPEC:
59                 return "ChangeCipherSpec";
60         case GNUTLS_ALERT:
61                 return "Alert";
62         case GNUTLS_HANDSHAKE:
63                 return "Handshake";
64         case GNUTLS_APPLICATION_DATA:
65                 return "Application Data";
66         case GNUTLS_HEARTBEAT:
67                 return "HeartBeat";
68         default:
69                 return "Unknown Packet";
70         }
71 }
72
73 /**
74  * gnutls_handshake_description_get_name:
75  * @type: is a handshake message description
76  *
77  * Convert a #gnutls_handshake_description_t value to a string.
78  *
79  * Returns: a string that contains the name of the specified handshake
80  *   message or %NULL.
81  **/
82 const char
83     *gnutls_handshake_description_get_name(gnutls_handshake_description_t
84                                            type)
85 {
86         switch (type) {
87         case GNUTLS_HANDSHAKE_HELLO_REQUEST:
88                 return "HELLO REQUEST";
89                 break;
90         case GNUTLS_HANDSHAKE_CLIENT_HELLO:
91                 return "CLIENT HELLO";
92                 break;
93         case GNUTLS_HANDSHAKE_CLIENT_HELLO_V2:
94                 return "SSL2 CLIENT HELLO";
95                 break;
96         case GNUTLS_HANDSHAKE_SERVER_HELLO:
97                 return "SERVER HELLO";
98                 break;
99         case GNUTLS_HANDSHAKE_HELLO_VERIFY_REQUEST:
100                 return "HELLO VERIFY REQUEST";
101                 break;
102         case GNUTLS_HANDSHAKE_CERTIFICATE_PKT:
103                 return "CERTIFICATE";
104                 break;
105         case GNUTLS_HANDSHAKE_SERVER_KEY_EXCHANGE:
106                 return "SERVER KEY EXCHANGE";
107                 break;
108         case GNUTLS_HANDSHAKE_CERTIFICATE_REQUEST:
109                 return "CERTIFICATE REQUEST";
110                 break;
111         case GNUTLS_HANDSHAKE_SERVER_HELLO_DONE:
112                 return "SERVER HELLO DONE";
113                 break;
114         case GNUTLS_HANDSHAKE_CERTIFICATE_VERIFY:
115                 return "CERTIFICATE VERIFY";
116                 break;
117         case GNUTLS_HANDSHAKE_CLIENT_KEY_EXCHANGE:
118                 return "CLIENT KEY EXCHANGE";
119                 break;
120         case GNUTLS_HANDSHAKE_FINISHED:
121                 return "FINISHED";
122                 break;
123         case GNUTLS_HANDSHAKE_SUPPLEMENTAL:
124                 return "SUPPLEMENTAL";
125                 break;
126         case GNUTLS_HANDSHAKE_CERTIFICATE_STATUS:
127                 return "CERTIFICATE STATUS";
128                 break;
129         case GNUTLS_HANDSHAKE_NEW_SESSION_TICKET:
130                 return "NEW SESSION TICKET";
131                 break;
132         case GNUTLS_HANDSHAKE_CHANGE_CIPHER_SPEC:
133                 return "CHANGE CIPHER SPEC";
134                 break;
135         default:
136                 return "Unknown Handshake packet";
137         }
138 }