OpenVPN
src
openvpn
session_id.c
Go to the documentation of this file.
1
/*
2
* OpenVPN -- An application to securely tunnel IP networks
3
* over a single UDP port, with support for SSL/TLS-based
4
* session authentication and key exchange,
5
* packet encryption, packet authentication, and
6
* packet compression.
7
*
8
* Copyright (C) 2002-2026 OpenVPN Inc <sales@openvpn.net>
9
*
10
* This program is free software; you can redistribute it and/or modify
11
* it under the terms of the GNU General Public License version 2
12
* as published by the Free Software Foundation.
13
*
14
* This program is distributed in the hope that it will be useful,
15
* but WITHOUT ANY WARRANTY; without even the implied warranty of
16
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
17
* GNU General Public License for more details.
18
*
19
* You should have received a copy of the GNU General Public License along
20
* with this program; if not, see <https://www.gnu.org/licenses/>.
21
*/
22
23
/*
24
* Each session is identified by a random 8-byte session identifier.
25
*
26
* For efficiency, the session id is only transmitted over the control
27
* channel (which only sees traffic occasionally when keys are being
28
* negotiated). The data channel sees a smaller version of the session-id --
29
* it is called the key_id and is currently 2 bits long.
30
*/
31
32
#ifdef HAVE_CONFIG_H
33
#include "
config.h
"
34
#endif
35
36
#include "
syshead.h
"
37
38
#include "
error.h
"
39
#include "
common.h
"
40
#include "
crypto.h
"
41
#include "
session_id.h
"
42
43
#include "
memdbg.h
"
44
45
const
struct
session_id
x_session_id_zero
;
46
47
void
48
session_id_random
(
struct
session_id
*sid)
49
{
50
prng_bytes
(sid->
id
,
SID_SIZE
);
51
}
52
53
const
char
*
54
session_id_print
(
const
struct
session_id
*sid,
struct
gc_arena
*
gc
)
55
{
56
return
format_hex
(sid->
id
,
SID_SIZE
, 0,
gc
);
57
}
format_hex
static char * format_hex(const uint8_t *data, size_t size, size_t maxoutput, struct gc_arena *gc)
Format a binary buffer as a hex string with spaces every 4 bytes.
Definition
buffer.h:919
common.h
config.h
prng_bytes
void prng_bytes(uint8_t *output, int len)
Definition
crypto.c:1729
crypto.h
Data Channel Cryptography Module.
memdbg.h
session_id_random
void session_id_random(struct session_id *sid)
Definition
session_id.c:48
x_session_id_zero
const struct session_id x_session_id_zero
Definition
session_id.c:45
session_id_print
const char * session_id_print(const struct session_id *sid, struct gc_arena *gc)
Definition
session_id.c:54
session_id.h
SID_SIZE
#define SID_SIZE
Definition
session_id.h:44
gc_arena
Garbage collection arena used to keep track of dynamically allocated memory.
Definition
buffer.h:127
session_id
Definition
session_id.h:38
session_id::id
uint8_t id[8]
Definition
session_id.h:39
syshead.h
error.h
gc
struct gc_arena gc
Definition
test_ssl.c:122
Generated by
1.9.8