mirror of
https://github.com/opnsense/src.git
synced 2026-04-15 14:29:58 -04:00
Migrate to OpenSSL 3.0 in advance of FreeBSD 14.0. OpenSSL 1.1.1 (the version we were previously using) will be EOL as of 2023-09-11. Most of the base system has already been updated for a seamless switch to OpenSSL 3.0. For many components we've added `-DOPENSSL_API_COMPAT=0x10100000L` to CFLAGS to specify the API version, which avoids deprecation warnings from OpenSSL 3.0. Changes have also been made to avoid OpenSSL APIs that were already deprecated in OpenSSL 1.1.1. The process of updating to contemporary APIs can continue after this merge. Additional changes are still required for libarchive and Kerberos- related libraries or tools; workarounds will immediately follow this commit. Fixes are in progress in the upstream projects and will be incorporated when those are next updated. There are some performance regressions in benchmarks (certain tests in `openssl speed`) and in some OpenSSL consumers in ports (e.g. haproxy). Investigation will continue for these. Netflix's testing showed no functional regression and a rather small, albeit statistically significant, increase in CPU consumption with OpenSSL 3.0. Thanks to ngie@ and des@ for updating base system components, to antoine@ and bofh@ for ports exp-runs and port fixes/workarounds, and to Netflix and everyone who tested prior to commit or contributed to this update in other ways. PR: 271615 PR: 271656 [exp-run] Relnotes: Yes Sponsored by: The FreeBSD Foundation
91 lines
3.6 KiB
C
91 lines
3.6 KiB
C
/*
|
|
* Copyright 2016-2022 The OpenSSL Project Authors. All Rights Reserved.
|
|
*
|
|
* Licensed under the Apache License 2.0 (the "License"). You may not use
|
|
* this file except in compliance with the License. You can obtain a copy
|
|
* in the file LICENSE in the source distribution or at
|
|
* https://www.openssl.org/source/license.html
|
|
*/
|
|
|
|
#ifndef OSSL_INTERNAL_BIO_H
|
|
# define OSSL_INTERNAL_BIO_H
|
|
# pragma once
|
|
|
|
# include <openssl/core.h>
|
|
# include <openssl/bio.h>
|
|
|
|
struct bio_method_st {
|
|
int type;
|
|
char *name;
|
|
int (*bwrite) (BIO *, const char *, size_t, size_t *);
|
|
int (*bwrite_old) (BIO *, const char *, int);
|
|
int (*bread) (BIO *, char *, size_t, size_t *);
|
|
int (*bread_old) (BIO *, char *, int);
|
|
int (*bputs) (BIO *, const char *);
|
|
int (*bgets) (BIO *, char *, int);
|
|
long (*ctrl) (BIO *, int, long, void *);
|
|
int (*create) (BIO *);
|
|
int (*destroy) (BIO *);
|
|
long (*callback_ctrl) (BIO *, int, BIO_info_cb *);
|
|
};
|
|
|
|
void bio_free_ex_data(BIO *bio);
|
|
void bio_cleanup(void);
|
|
|
|
|
|
/* Old style to new style BIO_METHOD conversion functions */
|
|
int bwrite_conv(BIO *bio, const char *data, size_t datal, size_t *written);
|
|
int bread_conv(BIO *bio, char *data, size_t datal, size_t *read);
|
|
|
|
/* Changes to these internal BIOs must also update include/openssl/bio.h */
|
|
# define BIO_CTRL_SET_KTLS 72
|
|
# define BIO_CTRL_SET_KTLS_TX_SEND_CTRL_MSG 74
|
|
# define BIO_CTRL_CLEAR_KTLS_TX_CTRL_MSG 75
|
|
|
|
/*
|
|
* This is used with socket BIOs:
|
|
* BIO_FLAGS_KTLS_TX means we are using ktls with this BIO for sending.
|
|
* BIO_FLAGS_KTLS_TX_CTRL_MSG means we are about to send a ctrl message next.
|
|
* BIO_FLAGS_KTLS_RX means we are using ktls with this BIO for receiving.
|
|
*/
|
|
# define BIO_FLAGS_KTLS_TX_CTRL_MSG 0x1000
|
|
# define BIO_FLAGS_KTLS_RX 0x2000
|
|
# define BIO_FLAGS_KTLS_TX 0x4000
|
|
|
|
/* KTLS related controls and flags */
|
|
# define BIO_set_ktls_flag(b, is_tx) \
|
|
BIO_set_flags(b, (is_tx) ? BIO_FLAGS_KTLS_TX : BIO_FLAGS_KTLS_RX)
|
|
# define BIO_should_ktls_flag(b, is_tx) \
|
|
BIO_test_flags(b, (is_tx) ? BIO_FLAGS_KTLS_TX : BIO_FLAGS_KTLS_RX)
|
|
# define BIO_set_ktls_ctrl_msg_flag(b) \
|
|
BIO_set_flags(b, BIO_FLAGS_KTLS_TX_CTRL_MSG)
|
|
# define BIO_should_ktls_ctrl_msg_flag(b) \
|
|
BIO_test_flags(b, BIO_FLAGS_KTLS_TX_CTRL_MSG)
|
|
# define BIO_clear_ktls_ctrl_msg_flag(b) \
|
|
BIO_clear_flags(b, BIO_FLAGS_KTLS_TX_CTRL_MSG)
|
|
|
|
# define BIO_set_ktls(b, keyblob, is_tx) \
|
|
BIO_ctrl(b, BIO_CTRL_SET_KTLS, is_tx, keyblob)
|
|
# define BIO_set_ktls_ctrl_msg(b, record_type) \
|
|
BIO_ctrl(b, BIO_CTRL_SET_KTLS_TX_SEND_CTRL_MSG, record_type, NULL)
|
|
# define BIO_clear_ktls_ctrl_msg(b) \
|
|
BIO_ctrl(b, BIO_CTRL_CLEAR_KTLS_TX_CTRL_MSG, 0, NULL)
|
|
|
|
/* Functions to allow the core to offer the CORE_BIO type to providers */
|
|
OSSL_CORE_BIO *ossl_core_bio_new_from_bio(BIO *bio);
|
|
OSSL_CORE_BIO *ossl_core_bio_new_file(const char *filename, const char *mode);
|
|
OSSL_CORE_BIO *ossl_core_bio_new_mem_buf(const void *buf, int len);
|
|
int ossl_core_bio_read_ex(OSSL_CORE_BIO *cb, void *data, size_t dlen,
|
|
size_t *readbytes);
|
|
int ossl_core_bio_write_ex(OSSL_CORE_BIO *cb, const void *data, size_t dlen,
|
|
size_t *written);
|
|
int ossl_core_bio_gets(OSSL_CORE_BIO *cb, char *buf, int size);
|
|
int ossl_core_bio_puts(OSSL_CORE_BIO *cb, const char *buf);
|
|
long ossl_core_bio_ctrl(OSSL_CORE_BIO *cb, int cmd, long larg, void *parg);
|
|
int ossl_core_bio_up_ref(OSSL_CORE_BIO *cb);
|
|
int ossl_core_bio_free(OSSL_CORE_BIO *cb);
|
|
int ossl_core_bio_vprintf(OSSL_CORE_BIO *cb, const char *format, va_list args);
|
|
|
|
int ossl_bio_init_core(OSSL_LIB_CTX *libctx, const OSSL_DISPATCH *fns);
|
|
|
|
#endif
|