xref: /freebsd/crypto/openssl/include/internal/ssl_unwrap.h (revision e7be843b4a162e68651d3911f0357ed464915629)
1*e7be843bSPierre Pronchery /*
2*e7be843bSPierre Pronchery  * Copyright 2024-2025 The OpenSSL Project Authors. All Rights Reserved.
3*e7be843bSPierre Pronchery  *
4*e7be843bSPierre Pronchery  * Licensed under the Apache License 2.0 (the "License").  You may not use
5*e7be843bSPierre Pronchery  * this file except in compliance with the License.  You can obtain a copy
6*e7be843bSPierre Pronchery  * in the file LICENSE in the source distribution or at
7*e7be843bSPierre Pronchery  * https://www.openssl.org/source/license.html
8*e7be843bSPierre Pronchery  */
9*e7be843bSPierre Pronchery 
10*e7be843bSPierre Pronchery #ifndef OSSL_SSL_UNWRAP_H
11*e7be843bSPierre Pronchery # define OSSL_SSL_UNWRAP_H
12*e7be843bSPierre Pronchery 
13*e7be843bSPierre Pronchery # include <openssl/ssl.h>
14*e7be843bSPierre Pronchery # include "internal/quic_predef.h"
15*e7be843bSPierre Pronchery 
16*e7be843bSPierre Pronchery # define SSL_CONNECTION_FROM_SSL_ONLY_int(ssl, c) \
17*e7be843bSPierre Pronchery     ((ssl) == NULL ? NULL                         \
18*e7be843bSPierre Pronchery      : ((ssl)->type == SSL_TYPE_SSL_CONNECTION    \
19*e7be843bSPierre Pronchery        ? (c SSL_CONNECTION *)(ssl)                \
20*e7be843bSPierre Pronchery        : NULL))
21*e7be843bSPierre Pronchery # define SSL_CONNECTION_NO_CONST
22*e7be843bSPierre Pronchery # define SSL_CONNECTION_FROM_SSL_ONLY(ssl) \
23*e7be843bSPierre Pronchery     SSL_CONNECTION_FROM_SSL_ONLY_int(ssl, SSL_CONNECTION_NO_CONST)
24*e7be843bSPierre Pronchery # define SSL_CONNECTION_FROM_CONST_SSL_ONLY(ssl) \
25*e7be843bSPierre Pronchery     SSL_CONNECTION_FROM_SSL_ONLY_int(ssl, const)
26*e7be843bSPierre Pronchery # define SSL_CONNECTION_GET_CTX(sc) ((sc)->ssl.ctx)
27*e7be843bSPierre Pronchery # define SSL_CONNECTION_GET_SSL(sc) (&(sc)->ssl)
28*e7be843bSPierre Pronchery # define SSL_CONNECTION_GET_USER_SSL(sc) ((sc)->user_ssl)
29*e7be843bSPierre Pronchery # ifndef OPENSSL_NO_QUIC
30*e7be843bSPierre Pronchery struct ssl_connection_st *ossl_quic_obj_get0_handshake_layer(QUIC_OBJ *obj);
31*e7be843bSPierre Pronchery #  define SSL_CONNECTION_FROM_SSL_int(ssl, c)                                           \
32*e7be843bSPierre Pronchery     ((ssl) == NULL ? NULL                                                               \
33*e7be843bSPierre Pronchery      : ((ssl)->type == SSL_TYPE_SSL_CONNECTION                                          \
34*e7be843bSPierre Pronchery         ? (c SSL_CONNECTION *)(ssl)                                                     \
35*e7be843bSPierre Pronchery         : (SSL_TYPE_IS_QUIC((ssl)->type)                                                \
36*e7be843bSPierre Pronchery           ? (c SSL_CONNECTION *)ossl_quic_obj_get0_handshake_layer((QUIC_OBJ *)(ssl))   \
37*e7be843bSPierre Pronchery           : NULL)))
38*e7be843bSPierre Pronchery #  define SSL_CONNECTION_FROM_SSL(ssl) \
39*e7be843bSPierre Pronchery     SSL_CONNECTION_FROM_SSL_int(ssl, SSL_CONNECTION_NO_CONST)
40*e7be843bSPierre Pronchery #  define SSL_CONNECTION_FROM_CONST_SSL(ssl) \
41*e7be843bSPierre Pronchery     SSL_CONNECTION_FROM_SSL_int(ssl, const)
42*e7be843bSPierre Pronchery # else
43*e7be843bSPierre Pronchery #  define SSL_CONNECTION_FROM_SSL(ssl) \
44*e7be843bSPierre Pronchery     SSL_CONNECTION_FROM_SSL_ONLY_int(ssl, SSL_CONNECTION_NO_CONST)
45*e7be843bSPierre Pronchery #  define SSL_CONNECTION_FROM_CONST_SSL(ssl) \
46*e7be843bSPierre Pronchery     SSL_CONNECTION_FROM_SSL_ONLY_int(ssl, const)
47*e7be843bSPierre Pronchery # endif
48*e7be843bSPierre Pronchery 
49*e7be843bSPierre Pronchery # ifndef OPENSSL_NO_QUIC
50*e7be843bSPierre Pronchery 
51*e7be843bSPierre Pronchery #  define IS_QUIC_METHOD(m) \
52*e7be843bSPierre Pronchery     ((m) == OSSL_QUIC_client_method() || \
53*e7be843bSPierre Pronchery      (m) == OSSL_QUIC_client_thread_method() || \
54*e7be843bSPierre Pronchery      (m) == OSSL_QUIC_server_method())
55*e7be843bSPierre Pronchery 
56*e7be843bSPierre Pronchery #  define IS_QUIC_CTX(ctx)          IS_QUIC_METHOD((ctx)->method)
57*e7be843bSPierre Pronchery 
58*e7be843bSPierre Pronchery #  define QUIC_CONNECTION_FROM_SSL_int(ssl, c)   \
59*e7be843bSPierre Pronchery      ((ssl) == NULL ? NULL                       \
60*e7be843bSPierre Pronchery       : ((ssl)->type == SSL_TYPE_QUIC_CONNECTION \
61*e7be843bSPierre Pronchery          ? (c QUIC_CONNECTION *)(ssl)            \
62*e7be843bSPierre Pronchery          : NULL))
63*e7be843bSPierre Pronchery 
64*e7be843bSPierre Pronchery #  define QUIC_XSO_FROM_SSL_int(ssl, c)                             \
65*e7be843bSPierre Pronchery     ((ssl) == NULL                                                  \
66*e7be843bSPierre Pronchery      ? NULL                                                         \
67*e7be843bSPierre Pronchery      : (((ssl)->type == SSL_TYPE_QUIC_XSO                           \
68*e7be843bSPierre Pronchery         ? (c QUIC_XSO *)(ssl)                                       \
69*e7be843bSPierre Pronchery         : ((ssl)->type == SSL_TYPE_QUIC_CONNECTION                  \
70*e7be843bSPierre Pronchery            ? (c QUIC_XSO *)((QUIC_CONNECTION *)(ssl))->default_xso  \
71*e7be843bSPierre Pronchery            : NULL))))
72*e7be843bSPierre Pronchery 
73*e7be843bSPierre Pronchery #  define SSL_CONNECTION_FROM_QUIC_SSL_int(ssl, c)               \
74*e7be843bSPierre Pronchery      ((ssl) == NULL ? NULL                                       \
75*e7be843bSPierre Pronchery       : ((ssl)->type == SSL_TYPE_QUIC_CONNECTION                 \
76*e7be843bSPierre Pronchery          ? (c SSL_CONNECTION *)((c QUIC_CONNECTION *)(ssl))->tls \
77*e7be843bSPierre Pronchery          : NULL))
78*e7be843bSPierre Pronchery 
79*e7be843bSPierre Pronchery #  define QUIC_LISTENER_FROM_SSL_int(ssl, c)                            \
80*e7be843bSPierre Pronchery     ((ssl) == NULL                                                      \
81*e7be843bSPierre Pronchery      ? NULL                                                             \
82*e7be843bSPierre Pronchery      : ((ssl)->type == SSL_TYPE_QUIC_LISTENER                           \
83*e7be843bSPierre Pronchery         ? (c QUIC_LISTENER *)(ssl)                                      \
84*e7be843bSPierre Pronchery         : NULL))
85*e7be843bSPierre Pronchery 
86*e7be843bSPierre Pronchery #  define QUIC_DOMAIN_FROM_SSL_int(ssl, c)                              \
87*e7be843bSPierre Pronchery     ((ssl) == NULL                                                      \
88*e7be843bSPierre Pronchery      ? NULL                                                             \
89*e7be843bSPierre Pronchery      : ((ssl)->type == SSL_TYPE_QUIC_DOMAIN                             \
90*e7be843bSPierre Pronchery         ? (c QUIC_DOMAIN *)(ssl)                                        \
91*e7be843bSPierre Pronchery         : NULL))
92*e7be843bSPierre Pronchery 
93*e7be843bSPierre Pronchery #  define IS_QUIC_CS(ssl) ((ssl) != NULL                                \
94*e7be843bSPierre Pronchery                            && ((ssl)->type == SSL_TYPE_QUIC_CONNECTION  \
95*e7be843bSPierre Pronchery                                || (ssl)->type == SSL_TYPE_QUIC_XSO))
96*e7be843bSPierre Pronchery 
97*e7be843bSPierre Pronchery #  define IS_QUIC(ssl)                                                  \
98*e7be843bSPierre Pronchery     ((ssl) != NULL && SSL_TYPE_IS_QUIC((ssl)->type))
99*e7be843bSPierre Pronchery 
100*e7be843bSPierre Pronchery # else
101*e7be843bSPierre Pronchery 
102*e7be843bSPierre Pronchery #  define QUIC_CONNECTION_FROM_SSL_int(ssl, c) NULL
103*e7be843bSPierre Pronchery #  define QUIC_XSO_FROM_SSL_int(ssl, c) NULL
104*e7be843bSPierre Pronchery #  define QUIC_LISTENER_FROM_SSL_int(ssl, c) NULL
105*e7be843bSPierre Pronchery #  define SSL_CONNECTION_FROM_QUIC_SSL_int(ssl, c) NULL
106*e7be843bSPierre Pronchery #  define IS_QUIC(ssl) 0
107*e7be843bSPierre Pronchery #  define IS_QUIC_CS(ssl) 0
108*e7be843bSPierre Pronchery #  define IS_QUIC_CTX(ctx) 0
109*e7be843bSPierre Pronchery #  define IS_QUIC_METHOD(m) 0
110*e7be843bSPierre Pronchery 
111*e7be843bSPierre Pronchery # endif
112*e7be843bSPierre Pronchery 
113*e7be843bSPierre Pronchery # define QUIC_CONNECTION_FROM_SSL(ssl) \
114*e7be843bSPierre Pronchery     QUIC_CONNECTION_FROM_SSL_int(ssl, SSL_CONNECTION_NO_CONST)
115*e7be843bSPierre Pronchery # define QUIC_CONNECTION_FROM_CONST_SSL(ssl) \
116*e7be843bSPierre Pronchery     QUIC_CONNECTION_FROM_SSL_int(ssl, const)
117*e7be843bSPierre Pronchery # define QUIC_XSO_FROM_SSL(ssl) \
118*e7be843bSPierre Pronchery     QUIC_XSO_FROM_SSL_int(ssl, SSL_CONNECTION_NO_CONST)
119*e7be843bSPierre Pronchery # define QUIC_XSO_FROM_CONST_SSL(ssl) \
120*e7be843bSPierre Pronchery     QUIC_XSO_FROM_SSL_int(ssl, const)
121*e7be843bSPierre Pronchery # define QUIC_LISTENER_FROM_SSL(ssl) \
122*e7be843bSPierre Pronchery     QUIC_LISTENER_FROM_SSL_int(ssl, SSL_CONNECTION_NO_CONST)
123*e7be843bSPierre Pronchery # define QUIC_LISTENER_FROM_CONST_SSL(ssl) \
124*e7be843bSPierre Pronchery     QUIC_LISTENER_FROM_SSL_int(ssl, const)
125*e7be843bSPierre Pronchery # define SSL_CONNECTION_FROM_QUIC_SSL(ssl) \
126*e7be843bSPierre Pronchery     SSL_CONNECTION_FROM_QUIC_SSL_int(ssl, SSL_CONNECTION_NO_CONST)
127*e7be843bSPierre Pronchery # define SSL_CONNECTION_FROM_CONST_QUIC_SSL(ssl) \
128*e7be843bSPierre Pronchery     SSL_CONNECTION_FROM_CONST_QUIC_SSL_int(ssl, const)
129*e7be843bSPierre Pronchery 
130*e7be843bSPierre Pronchery #endif
131