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