1 | /*
|
---|
2 | * Copyright 2016-2022 The OpenSSL Project Authors. All Rights Reserved.
|
---|
3 | *
|
---|
4 | * Licensed under the Apache License 2.0 (the "License"). You may not use
|
---|
5 | * this file except in compliance with the License. You can obtain a copy
|
---|
6 | * in the file LICENSE in the source distribution or at
|
---|
7 | * https://www.openssl.org/source/license.html
|
---|
8 | */
|
---|
9 |
|
---|
10 | #ifndef OSSL_INTERNAL_BIO_H
|
---|
11 | # define OSSL_INTERNAL_BIO_H
|
---|
12 | # ifndef RT_WITHOUT_PRAGMA_ONCE /* VBOX */
|
---|
13 | # pragma once
|
---|
14 | # endif /* VBOX */
|
---|
15 |
|
---|
16 | # include <openssl/core.h>
|
---|
17 | # include <openssl/bio.h>
|
---|
18 |
|
---|
19 | struct bio_method_st {
|
---|
20 | int type;
|
---|
21 | char *name;
|
---|
22 | int (*bwrite) (BIO *, const char *, size_t, size_t *);
|
---|
23 | int (*bwrite_old) (BIO *, const char *, int);
|
---|
24 | int (*bread) (BIO *, char *, size_t, size_t *);
|
---|
25 | int (*bread_old) (BIO *, char *, int);
|
---|
26 | int (*bputs) (BIO *, const char *);
|
---|
27 | int (*bgets) (BIO *, char *, int);
|
---|
28 | long (*ctrl) (BIO *, int, long, void *);
|
---|
29 | int (*create) (BIO *);
|
---|
30 | int (*destroy) (BIO *);
|
---|
31 | long (*callback_ctrl) (BIO *, int, BIO_info_cb *);
|
---|
32 | };
|
---|
33 |
|
---|
34 | void bio_free_ex_data(BIO *bio);
|
---|
35 | void bio_cleanup(void);
|
---|
36 |
|
---|
37 |
|
---|
38 | /* Old style to new style BIO_METHOD conversion functions */
|
---|
39 | int bwrite_conv(BIO *bio, const char *data, size_t datal, size_t *written);
|
---|
40 | int bread_conv(BIO *bio, char *data, size_t datal, size_t *read);
|
---|
41 |
|
---|
42 | /* Changes to these internal BIOs must also update include/openssl/bio.h */
|
---|
43 | # define BIO_CTRL_SET_KTLS 72
|
---|
44 | # define BIO_CTRL_SET_KTLS_TX_SEND_CTRL_MSG 74
|
---|
45 | # define BIO_CTRL_CLEAR_KTLS_TX_CTRL_MSG 75
|
---|
46 |
|
---|
47 | /*
|
---|
48 | * This is used with socket BIOs:
|
---|
49 | * BIO_FLAGS_KTLS_TX means we are using ktls with this BIO for sending.
|
---|
50 | * BIO_FLAGS_KTLS_TX_CTRL_MSG means we are about to send a ctrl message next.
|
---|
51 | * BIO_FLAGS_KTLS_RX means we are using ktls with this BIO for receiving.
|
---|
52 | */
|
---|
53 | # define BIO_FLAGS_KTLS_TX_CTRL_MSG 0x1000
|
---|
54 | # define BIO_FLAGS_KTLS_RX 0x2000
|
---|
55 | # define BIO_FLAGS_KTLS_TX 0x4000
|
---|
56 |
|
---|
57 | /* KTLS related controls and flags */
|
---|
58 | # define BIO_set_ktls_flag(b, is_tx) \
|
---|
59 | BIO_set_flags(b, (is_tx) ? BIO_FLAGS_KTLS_TX : BIO_FLAGS_KTLS_RX)
|
---|
60 | # define BIO_should_ktls_flag(b, is_tx) \
|
---|
61 | BIO_test_flags(b, (is_tx) ? BIO_FLAGS_KTLS_TX : BIO_FLAGS_KTLS_RX)
|
---|
62 | # define BIO_set_ktls_ctrl_msg_flag(b) \
|
---|
63 | BIO_set_flags(b, BIO_FLAGS_KTLS_TX_CTRL_MSG)
|
---|
64 | # define BIO_should_ktls_ctrl_msg_flag(b) \
|
---|
65 | BIO_test_flags(b, BIO_FLAGS_KTLS_TX_CTRL_MSG)
|
---|
66 | # define BIO_clear_ktls_ctrl_msg_flag(b) \
|
---|
67 | BIO_clear_flags(b, BIO_FLAGS_KTLS_TX_CTRL_MSG)
|
---|
68 |
|
---|
69 | # define BIO_set_ktls(b, keyblob, is_tx) \
|
---|
70 | BIO_ctrl(b, BIO_CTRL_SET_KTLS, is_tx, keyblob)
|
---|
71 | # define BIO_set_ktls_ctrl_msg(b, record_type) \
|
---|
72 | BIO_ctrl(b, BIO_CTRL_SET_KTLS_TX_SEND_CTRL_MSG, record_type, NULL)
|
---|
73 | # define BIO_clear_ktls_ctrl_msg(b) \
|
---|
74 | BIO_ctrl(b, BIO_CTRL_CLEAR_KTLS_TX_CTRL_MSG, 0, NULL)
|
---|
75 |
|
---|
76 | /* Functions to allow the core to offer the CORE_BIO type to providers */
|
---|
77 | OSSL_CORE_BIO *ossl_core_bio_new_from_bio(BIO *bio);
|
---|
78 | OSSL_CORE_BIO *ossl_core_bio_new_file(const char *filename, const char *mode);
|
---|
79 | OSSL_CORE_BIO *ossl_core_bio_new_mem_buf(const void *buf, int len);
|
---|
80 | int ossl_core_bio_read_ex(OSSL_CORE_BIO *cb, void *data, size_t dlen,
|
---|
81 | size_t *readbytes);
|
---|
82 | int ossl_core_bio_write_ex(OSSL_CORE_BIO *cb, const void *data, size_t dlen,
|
---|
83 | size_t *written);
|
---|
84 | int ossl_core_bio_gets(OSSL_CORE_BIO *cb, char *buf, int size);
|
---|
85 | int ossl_core_bio_puts(OSSL_CORE_BIO *cb, const char *buf);
|
---|
86 | long ossl_core_bio_ctrl(OSSL_CORE_BIO *cb, int cmd, long larg, void *parg);
|
---|
87 | int ossl_core_bio_up_ref(OSSL_CORE_BIO *cb);
|
---|
88 | int ossl_core_bio_free(OSSL_CORE_BIO *cb);
|
---|
89 | int ossl_core_bio_vprintf(OSSL_CORE_BIO *cb, const char *format, va_list args);
|
---|
90 |
|
---|
91 | int ossl_bio_init_core(OSSL_LIB_CTX *libctx, const OSSL_DISPATCH *fns);
|
---|
92 |
|
---|
93 | #endif
|
---|