ssl_unwrap.h revision 1.1.1.1 1 /*
2 * Copyright 2024-2025 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_SSL_UNWRAP_H
11 # define OSSL_SSL_UNWRAP_H
12
13 # include <openssl/ssl.h>
14 # include "internal/quic_predef.h"
15
16 # define SSL_CONNECTION_FROM_SSL_ONLY_int(ssl, c) \
17 ((ssl) == NULL ? NULL \
18 : ((ssl)->type == SSL_TYPE_SSL_CONNECTION \
19 ? (c SSL_CONNECTION *)(ssl) \
20 : NULL))
21 # define SSL_CONNECTION_NO_CONST
22 # define SSL_CONNECTION_FROM_SSL_ONLY(ssl) \
23 SSL_CONNECTION_FROM_SSL_ONLY_int(ssl, SSL_CONNECTION_NO_CONST)
24 # define SSL_CONNECTION_FROM_CONST_SSL_ONLY(ssl) \
25 SSL_CONNECTION_FROM_SSL_ONLY_int(ssl, const)
26 # define SSL_CONNECTION_GET_CTX(sc) ((sc)->ssl.ctx)
27 # define SSL_CONNECTION_GET_SSL(sc) (&(sc)->ssl)
28 # define SSL_CONNECTION_GET_USER_SSL(sc) ((sc)->user_ssl)
29 # ifndef OPENSSL_NO_QUIC
30 struct ssl_connection_st *ossl_quic_obj_get0_handshake_layer(QUIC_OBJ *obj);
31 # define SSL_CONNECTION_FROM_SSL_int(ssl, c) \
32 ((ssl) == NULL ? NULL \
33 : ((ssl)->type == SSL_TYPE_SSL_CONNECTION \
34 ? (c SSL_CONNECTION *)(ssl) \
35 : (SSL_TYPE_IS_QUIC((ssl)->type) \
36 ? (c SSL_CONNECTION *)ossl_quic_obj_get0_handshake_layer((QUIC_OBJ *)(ssl)) \
37 : NULL)))
38 # define SSL_CONNECTION_FROM_SSL(ssl) \
39 SSL_CONNECTION_FROM_SSL_int(ssl, SSL_CONNECTION_NO_CONST)
40 # define SSL_CONNECTION_FROM_CONST_SSL(ssl) \
41 SSL_CONNECTION_FROM_SSL_int(ssl, const)
42 # else
43 # define SSL_CONNECTION_FROM_SSL(ssl) \
44 SSL_CONNECTION_FROM_SSL_ONLY_int(ssl, SSL_CONNECTION_NO_CONST)
45 # define SSL_CONNECTION_FROM_CONST_SSL(ssl) \
46 SSL_CONNECTION_FROM_SSL_ONLY_int(ssl, const)
47 # endif
48
49 # ifndef OPENSSL_NO_QUIC
50
51 # define IS_QUIC_METHOD(m) \
52 ((m) == OSSL_QUIC_client_method() || \
53 (m) == OSSL_QUIC_client_thread_method() || \
54 (m) == OSSL_QUIC_server_method())
55
56 # define IS_QUIC_CTX(ctx) IS_QUIC_METHOD((ctx)->method)
57
58 # define QUIC_CONNECTION_FROM_SSL_int(ssl, c) \
59 ((ssl) == NULL ? NULL \
60 : ((ssl)->type == SSL_TYPE_QUIC_CONNECTION \
61 ? (c QUIC_CONNECTION *)(ssl) \
62 : NULL))
63
64 # define QUIC_XSO_FROM_SSL_int(ssl, c) \
65 ((ssl) == NULL \
66 ? NULL \
67 : (((ssl)->type == SSL_TYPE_QUIC_XSO \
68 ? (c QUIC_XSO *)(ssl) \
69 : ((ssl)->type == SSL_TYPE_QUIC_CONNECTION \
70 ? (c QUIC_XSO *)((QUIC_CONNECTION *)(ssl))->default_xso \
71 : NULL))))
72
73 # define SSL_CONNECTION_FROM_QUIC_SSL_int(ssl, c) \
74 ((ssl) == NULL ? NULL \
75 : ((ssl)->type == SSL_TYPE_QUIC_CONNECTION \
76 ? (c SSL_CONNECTION *)((c QUIC_CONNECTION *)(ssl))->tls \
77 : NULL))
78
79 # define QUIC_LISTENER_FROM_SSL_int(ssl, c) \
80 ((ssl) == NULL \
81 ? NULL \
82 : ((ssl)->type == SSL_TYPE_QUIC_LISTENER \
83 ? (c QUIC_LISTENER *)(ssl) \
84 : NULL))
85
86 # define QUIC_DOMAIN_FROM_SSL_int(ssl, c) \
87 ((ssl) == NULL \
88 ? NULL \
89 : ((ssl)->type == SSL_TYPE_QUIC_DOMAIN \
90 ? (c QUIC_DOMAIN *)(ssl) \
91 : NULL))
92
93 # define IS_QUIC_CS(ssl) ((ssl) != NULL \
94 && ((ssl)->type == SSL_TYPE_QUIC_CONNECTION \
95 || (ssl)->type == SSL_TYPE_QUIC_XSO))
96
97 # define IS_QUIC(ssl) \
98 ((ssl) != NULL && SSL_TYPE_IS_QUIC((ssl)->type))
99
100 # else
101
102 # define QUIC_CONNECTION_FROM_SSL_int(ssl, c) NULL
103 # define QUIC_XSO_FROM_SSL_int(ssl, c) NULL
104 # define QUIC_LISTENER_FROM_SSL_int(ssl, c) NULL
105 # define SSL_CONNECTION_FROM_QUIC_SSL_int(ssl, c) NULL
106 # define IS_QUIC(ssl) 0
107 # define IS_QUIC_CS(ssl) 0
108 # define IS_QUIC_CTX(ctx) 0
109 # define IS_QUIC_METHOD(m) 0
110
111 # endif
112
113 # define QUIC_CONNECTION_FROM_SSL(ssl) \
114 QUIC_CONNECTION_FROM_SSL_int(ssl, SSL_CONNECTION_NO_CONST)
115 # define QUIC_CONNECTION_FROM_CONST_SSL(ssl) \
116 QUIC_CONNECTION_FROM_SSL_int(ssl, const)
117 # define QUIC_XSO_FROM_SSL(ssl) \
118 QUIC_XSO_FROM_SSL_int(ssl, SSL_CONNECTION_NO_CONST)
119 # define QUIC_XSO_FROM_CONST_SSL(ssl) \
120 QUIC_XSO_FROM_SSL_int(ssl, const)
121 # define QUIC_LISTENER_FROM_SSL(ssl) \
122 QUIC_LISTENER_FROM_SSL_int(ssl, SSL_CONNECTION_NO_CONST)
123 # define QUIC_LISTENER_FROM_CONST_SSL(ssl) \
124 QUIC_LISTENER_FROM_SSL_int(ssl, const)
125 # define SSL_CONNECTION_FROM_QUIC_SSL(ssl) \
126 SSL_CONNECTION_FROM_QUIC_SSL_int(ssl, SSL_CONNECTION_NO_CONST)
127 # define SSL_CONNECTION_FROM_CONST_QUIC_SSL(ssl) \
128 SSL_CONNECTION_FROM_CONST_QUIC_SSL_int(ssl, const)
129
130 #endif
131