OpenVPN
ssl_mbedtls.h
Go to the documentation of this file.
1 /*
2  * OpenVPN -- An application to securely tunnel IP networks
3  * over a single TCP/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-2024 OpenVPN Inc <sales@openvpn.net>
9  * Copyright (C) 2010-2021 Fox Crypto B.V. <openvpn@foxcrypto.com>
10  *
11  * This program is free software; you can redistribute it and/or modify
12  * it under the terms of the GNU General Public License version 2
13  * as published by the Free Software Foundation.
14  *
15  * This program is distributed in the hope that it will be useful,
16  * but WITHOUT ANY WARRANTY; without even the implied warranty of
17  * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
18  * GNU General Public License for more details.
19  *
20  * You should have received a copy of the GNU General Public License along
21  * with this program; if not, write to the Free Software Foundation, Inc.,
22  * 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA.
23  */
24 
30 #ifndef SSL_MBEDTLS_H_
31 #define SSL_MBEDTLS_H_
32 
33 #include "syshead.h"
34 
35 #include <mbedtls/ssl.h>
36 #include <mbedtls/x509_crt.h>
37 #include <mbedtls/version.h>
38 
39 #if defined(ENABLE_PKCS11)
40 #include <pkcs11-helper-1.0/pkcs11h-certificate.h>
41 #endif
42 
43 #include "mbedtls_compat.h"
44 
45 typedef struct _buffer_entry buffer_entry;
46 
47 struct _buffer_entry {
48  size_t length;
49  uint8_t *data;
51 };
52 
53 typedef struct {
54  size_t data_start;
58 
59 typedef struct {
62 } bio_ctx;
63 
77 typedef bool (*external_sign_func)(
78  void *sign_ctx, const void *src, size_t src_size,
79  void *dst, size_t dst_size);
80 
85  void *sign_ctx;
86 };
87 
88 #ifdef HAVE_EXPORT_KEYING_MATERIAL
89 
92 struct tls_key_cache {
93  unsigned char client_server_random[64];
94  mbedtls_tls_prf_types tls_prf_type;
95  unsigned char master_secret[48];
96 };
97 #else /* ifdef HAVE_EXPORT_KEYING_MATERIAL */
98 struct tls_key_cache { };
99 #endif
100 
107 struct tls_root_ctx {
108  bool initialised;
110  int endpoint;
112  mbedtls_dhm_context *dhm_ctx;
113  mbedtls_x509_crt *crt_chain;
114  mbedtls_x509_crt *ca_chain;
115  mbedtls_pk_context *priv_key;
116  mbedtls_x509_crl *crl;
117  time_t crl_last_mtime;
119 #ifdef ENABLE_PKCS11
120  pkcs11h_certificate_t pkcs11_cert;
121 #endif
125  mbedtls_x509_crt_profile cert_profile;
126 };
127 
129  mbedtls_ssl_config *ssl_config;
130  mbedtls_ssl_context *ctx;
132 
134 };
135 
147  external_sign_func sign_func,
148  void *sign_ctx);
149 
150 static inline void
152 {
153 }
154 #endif /* SSL_MBEDTLS_H_ */
key_state_ssl
Definition: ssl_mbedtls.h:128
tls_root_ctx::external_key
struct external_context external_key
External key context.
Definition: ssl_mbedtls.h:122
external_context
Context used by external_pkcs1_sign()
Definition: ssl_mbedtls.h:82
tls_root_ctx::cert_profile
mbedtls_x509_crt_profile cert_profile
Allowed certificate types.
Definition: ssl_mbedtls.h:125
bio_ctx::out
endless_buffer out
Definition: ssl_mbedtls.h:61
tls_root_ctx::ca_chain
mbedtls_x509_crt * ca_chain
CA chain for remote verification.
Definition: ssl_mbedtls.h:114
tls_root_ctx::crl_last_mtime
time_t crl_last_mtime
CRL last modification time.
Definition: ssl_mbedtls.h:117
endless_buffer
Definition: ssl_mbedtls.h:53
external_context::signature_length
size_t signature_length
Definition: ssl_mbedtls.h:83
external_context::sign_ctx
void * sign_ctx
Definition: ssl_mbedtls.h:85
_buffer_entry::next_block
buffer_entry * next_block
Definition: ssl_mbedtls.h:50
tls_root_ctx::groups
mbedtls_compat_group_id * groups
List of allowed groups for this connection.
Definition: ssl_mbedtls.h:124
tls_root_ctx::dhm_ctx
mbedtls_dhm_context * dhm_ctx
Diffie-Helmann-Merkle context.
Definition: ssl_mbedtls.h:112
_buffer_entry
Definition: ssl_mbedtls.h:47
key_state_ssl::ssl_config
mbedtls_ssl_config * ssl_config
mbedTLS global ssl config
Definition: ssl_mbedtls.h:129
external_sign_func
bool(* external_sign_func)(void *sign_ctx, const void *src, size_t src_size, void *dst, size_t dst_size)
External signing function prototype.
Definition: ssl_mbedtls.h:77
tls_root_ctx::crl_last_size
off_t crl_last_size
size of last loaded CRL
Definition: ssl_mbedtls.h:118
_buffer_entry::length
size_t length
Definition: ssl_mbedtls.h:48
tls_root_ctx::priv_key
mbedtls_pk_context * priv_key
Local private key.
Definition: ssl_mbedtls.h:115
endless_buffer::first_block
buffer_entry * first_block
Definition: ssl_mbedtls.h:55
external_context::sign
external_sign_func sign
Definition: ssl_mbedtls.h:84
tls_root_ctx::crt_chain
mbedtls_x509_crt * crt_chain
Local Certificate chain.
Definition: ssl_mbedtls.h:113
tls_clear_error
static void tls_clear_error(void)
Definition: ssl_mbedtls.h:151
_buffer_entry::data
uint8_t * data
Definition: ssl_mbedtls.h:49
mbedtls_compat.h
tls_root_ctx::initialised
bool initialised
True if the context has been initialised.
Definition: ssl_mbedtls.h:108
tls_key_cache
Definition: ssl_mbedtls.h:98
syshead.h
tls_root_ctx::endpoint
int endpoint
Whether or not this is a server or a client.
Definition: ssl_mbedtls.h:110
endless_buffer::last_block
buffer_entry * last_block
Definition: ssl_mbedtls.h:56
tls_root_ctx::crl
mbedtls_x509_crl * crl
Certificate Revocation List.
Definition: ssl_mbedtls.h:116
bio_ctx
Definition: ssl_mbedtls.h:59
tls_root_ctx
Structure that wraps the TLS context.
Definition: ssl_mbedtls.h:107
key_state_ssl::bio_ctx
bio_ctx * bio_ctx
Definition: ssl_mbedtls.h:131
tls_root_ctx::allowed_ciphers
int * allowed_ciphers
List of allowed ciphers for this connection.
Definition: ssl_mbedtls.h:123
key_state_ssl::ctx
mbedtls_ssl_context * ctx
mbedTLS connection context
Definition: ssl_mbedtls.h:130
buffer_entry
Definition: buffer.h:1114
endless_buffer::data_start
size_t data_start
Definition: ssl_mbedtls.h:54
tls_ctx_use_external_signing_func
int tls_ctx_use_external_signing_func(struct tls_root_ctx *ctx, external_sign_func sign_func, void *sign_ctx)
Call the supplied signing function to create a TLS signature during the TLS handshake.
mbedtls_compat_group_id
mbedtls_ecp_group_id mbedtls_compat_group_id
Definition: mbedtls_compat.h:58
bio_ctx::in
endless_buffer in
Definition: ssl_mbedtls.h:60