Home | History | Annotate | Line # | Download | only in internal
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