1
0
mirror of https://github.com/openbsd/src.git synced 2025-01-10 06:47:55 -08:00

Provide a TLS 1.3 capable client method.

ok tb@
This commit is contained in:
jsing 2019-02-14 17:50:07 +00:00
parent e044e6cdae
commit efee3f2f19
3 changed files with 50 additions and 5 deletions

View File

@ -1,4 +1,4 @@
/* $OpenBSD: ssl_locl.h,v 1.235 2019/02/10 13:04:29 jsing Exp $ */
/* $OpenBSD: ssl_locl.h,v 1.236 2019/02/14 17:50:07 jsing Exp $ */
/* Copyright (C) 1995-1998 Eric Young (eay@cryptsoft.com)
* All rights reserved.
*
@ -1065,6 +1065,8 @@ uint16_t ssl_max_server_version(SSL *s);
int ssl_cipher_is_permitted(const SSL_CIPHER *cipher, uint16_t min_ver,
uint16_t max_ver);
const SSL_METHOD *tls_legacy_client_method(void);
const SSL_METHOD *dtls1_get_client_method(int ver);
const SSL_METHOD *dtls1_get_server_method(int ver);
const SSL_METHOD *tls1_get_client_method(int ver);

View File

@ -1,4 +1,4 @@
/* $OpenBSD: ssl_methods.c,v 1.1 2018/11/05 05:45:15 jsing Exp $ */
/* $OpenBSD: ssl_methods.c,v 1.2 2019/02/14 17:50:07 jsing Exp $ */
/* Copyright (C) 1995-1998 Eric Young (eay@cryptsoft.com)
* All rights reserved.
*
@ -57,6 +57,7 @@
*/
#include "ssl_locl.h"
#include "tls13_internal.h"
static const SSL_METHOD_INTERNAL DTLSv1_client_method_internal_data = {
.version = DTLS1_VERSION,
@ -189,7 +190,38 @@ dtls1_get_server_method(int ver)
return (NULL);
}
#ifdef LIBRESSL_HAS_TLS13
static const SSL_METHOD_INTERNAL TLS_client_method_internal_data = {
.version = TLS1_3_VERSION,
.min_version = TLS1_VERSION,
.max_version = TLS1_3_VERSION,
.ssl_new = tls1_new,
.ssl_clear = tls1_clear,
.ssl_free = tls1_free,
.ssl_accept = ssl_undefined_function,
.ssl_connect = tls13_legacy_connect,
.get_ssl_method = tls1_get_client_method,
.get_timeout = tls1_default_timeout,
.ssl_version = ssl_undefined_void_function,
.ssl_renegotiate = ssl_undefined_function,
.ssl_renegotiate_check = ssl_ok,
.ssl_get_message = ssl3_get_message,
.ssl_read_bytes = tls13_legacy_read_bytes,
.ssl_write_bytes = tls13_legacy_write_bytes,
.ssl3_enc = &TLSv1_2_enc_data,
};
static const SSL_METHOD TLS_client_method_data = {
.ssl_dispatch_alert = ssl3_dispatch_alert,
.num_ciphers = ssl3_num_ciphers,
.get_cipher = ssl3_get_cipher,
.get_cipher_by_char = ssl3_get_cipher_by_char,
.put_cipher_by_char = ssl3_put_cipher_by_char,
.internal = &TLS_client_method_internal_data,
};
#endif
static const SSL_METHOD_INTERNAL TLS_legacy_client_method_internal_data = {
.version = TLS1_2_VERSION,
.min_version = TLS1_VERSION,
.max_version = TLS1_2_VERSION,
@ -209,13 +241,13 @@ static const SSL_METHOD_INTERNAL TLS_client_method_internal_data = {
.ssl3_enc = &TLSv1_2_enc_data,
};
static const SSL_METHOD TLS_client_method_data = {
static const SSL_METHOD TLS_legacy_client_method_data = {
.ssl_dispatch_alert = ssl3_dispatch_alert,
.num_ciphers = ssl3_num_ciphers,
.get_cipher = ssl3_get_cipher,
.get_cipher_by_char = ssl3_get_cipher_by_char,
.put_cipher_by_char = ssl3_put_cipher_by_char,
.internal = &TLS_client_method_internal_data,
.internal = &TLS_legacy_client_method_internal_data,
};
static const SSL_METHOD_INTERNAL TLSv1_client_method_internal_data = {
@ -326,7 +358,17 @@ SSLv23_client_method(void)
const SSL_METHOD *
TLS_client_method(void)
{
#ifdef LIBRESSL_HAS_TLS13
return (&TLS_client_method_data);
#else
return tls_legacy_client_method();
#endif
}
const SSL_METHOD *
tls_legacy_client_method(void)
{
return (&TLS_legacy_client_method_data);
}
const SSL_METHOD *

View File

@ -1,4 +1,4 @@
/* $OpenBSD: tls13_internal.h,v 1.17 2019/02/09 15:20:05 jsing Exp $ */
/* $OpenBSD: tls13_internal.h,v 1.18 2019/02/14 17:50:07 jsing Exp $ */
/*
* Copyright (c) 2018 Bob Beck <beck@openbsd.org>
* Copyright (c) 2018 Theo Buehler <tb@openbsd.org>
@ -171,6 +171,7 @@ const EVP_MD *tls13_cipher_hash(const SSL_CIPHER *cipher);
/*
* Legacy interfaces.
*/
int tls13_legacy_connect(SSL *ssl);
int tls13_legacy_return_code(SSL *ssl, ssize_t ret);
ssize_t tls13_legacy_wire_read_cb(void *buf, size_t n, void *arg);
ssize_t tls13_legacy_wire_write_cb(const void *buf, size_t n, void *arg);