Coverage Report

Created: 2025-08-25 06:30

/src/openssl/ssl/ssl_lib.c
Line
Count
Source (jump to first uncovered line)
1
/*
2
 * Copyright 1995-2025 The OpenSSL Project Authors. All Rights Reserved.
3
 * Copyright (c) 2002, Oracle and/or its affiliates. All rights reserved
4
 * Copyright 2005 Nokia. All rights reserved.
5
 *
6
 * Licensed under the Apache License 2.0 (the "License").  You may not use
7
 * this file except in compliance with the License.  You can obtain a copy
8
 * in the file LICENSE in the source distribution or at
9
 * https://www.openssl.org/source/license.html
10
 */
11
12
#include "internal/e_os.h"
13
#include "internal/e_winsock.h"
14
#include "ssl_local.h"
15
16
#include <openssl/objects.h>
17
#include <openssl/x509v3.h>
18
#include <openssl/rand.h>
19
#include <openssl/ocsp.h>
20
#include <openssl/dh.h>
21
#include <openssl/engine.h>
22
#include <openssl/async.h>
23
#include <openssl/ct.h>
24
#include <openssl/trace.h>
25
#include <openssl/core_names.h>
26
#include <openssl/provider.h>
27
#include "internal/cryptlib.h"
28
#include "internal/nelem.h"
29
#include "internal/refcount.h"
30
#include "internal/thread_once.h"
31
#include "internal/ktls.h"
32
#include "internal/to_hex.h"
33
#include "internal/ssl_unwrap.h"
34
#include "quic/quic_local.h"
35
36
#ifndef OPENSSL_NO_SSLKEYLOG
37
# include <sys/stat.h>
38
# include <fcntl.h>
39
#endif
40
41
static int ssl_undefined_function_3(SSL_CONNECTION *sc, unsigned char *r,
42
                                    unsigned char *s, size_t t, size_t *u)
43
0
{
44
0
    return ssl_undefined_function(SSL_CONNECTION_GET_SSL(sc));
45
0
}
46
47
static int ssl_undefined_function_4(SSL_CONNECTION *sc, int r)
48
0
{
49
0
    return ssl_undefined_function(SSL_CONNECTION_GET_SSL(sc));
50
0
}
51
52
static size_t ssl_undefined_function_5(SSL_CONNECTION *sc, const char *r,
53
                                       size_t s, unsigned char *t)
54
0
{
55
0
    return ssl_undefined_function(SSL_CONNECTION_GET_SSL(sc));
56
0
}
57
58
static int ssl_undefined_function_6(int r)
59
0
{
60
0
    return ssl_undefined_function(NULL);
61
0
}
62
63
static int ssl_undefined_function_7(SSL_CONNECTION *sc, unsigned char *r,
64
                                    size_t s, const char *t, size_t u,
65
                                    const unsigned char *v, size_t w, int x)
66
0
{
67
0
    return ssl_undefined_function(SSL_CONNECTION_GET_SSL(sc));
68
0
}
69
70
static int ssl_undefined_function_8(SSL_CONNECTION *sc)
71
0
{
72
0
    return ssl_undefined_function(SSL_CONNECTION_GET_SSL(sc));
73
0
}
74
75
const SSL3_ENC_METHOD ssl3_undef_enc_method = {
76
    ssl_undefined_function_8,
77
    ssl_undefined_function_3,
78
    ssl_undefined_function_4,
79
    ssl_undefined_function_5,
80
    NULL,                       /* client_finished_label */
81
    0,                          /* client_finished_label_len */
82
    NULL,                       /* server_finished_label */
83
    0,                          /* server_finished_label_len */
84
    ssl_undefined_function_6,
85
    ssl_undefined_function_7,
86
};
87
88
struct ssl_async_args {
89
    SSL *s;
90
    void *buf;
91
    size_t num;
92
    enum { READFUNC, WRITEFUNC, OTHERFUNC } type;
93
    union {
94
        int (*func_read) (SSL *, void *, size_t, size_t *);
95
        int (*func_write) (SSL *, const void *, size_t, size_t *);
96
        int (*func_other) (SSL *);
97
    } f;
98
};
99
100
static const struct {
101
    uint8_t mtype;
102
    uint8_t ord;
103
    int nid;
104
} dane_mds[] = {
105
    {
106
        DANETLS_MATCHING_FULL, 0, NID_undef
107
    },
108
    {
109
        DANETLS_MATCHING_2256, 1, NID_sha256
110
    },
111
    {
112
        DANETLS_MATCHING_2512, 2, NID_sha512
113
    },
114
};
115
116
static int dane_ctx_enable(struct dane_ctx_st *dctx)
117
0
{
118
0
    const EVP_MD **mdevp;
119
0
    uint8_t *mdord;
120
0
    uint8_t mdmax = DANETLS_MATCHING_LAST;
121
0
    int n = ((int)mdmax) + 1;   /* int to handle PrivMatch(255) */
122
0
    size_t i;
123
124
0
    if (dctx->mdevp != NULL)
125
0
        return 1;
126
127
0
    mdevp = OPENSSL_calloc(n, sizeof(*mdevp));
128
0
    mdord = OPENSSL_calloc(n, sizeof(*mdord));
129
130
0
    if (mdord == NULL || mdevp == NULL) {
131
0
        OPENSSL_free(mdord);
132
0
        OPENSSL_free(mdevp);
133
0
        return 0;
134
0
    }
135
136
    /* Install default entries */
137
0
    for (i = 0; i < OSSL_NELEM(dane_mds); ++i) {
138
0
        const EVP_MD *md;
139
140
0
        if (dane_mds[i].nid == NID_undef ||
141
0
            (md = EVP_get_digestbynid(dane_mds[i].nid)) == NULL)
142
0
            continue;
143
0
        mdevp[dane_mds[i].mtype] = md;
144
0
        mdord[dane_mds[i].mtype] = dane_mds[i].ord;
145
0
    }
146
147
0
    dctx->mdevp = mdevp;
148
0
    dctx->mdord = mdord;
149
0
    dctx->mdmax = mdmax;
150
151
0
    return 1;
152
0
}
153
154
static void dane_ctx_final(struct dane_ctx_st *dctx)
155
0
{
156
0
    OPENSSL_free(dctx->mdevp);
157
0
    dctx->mdevp = NULL;
158
159
0
    OPENSSL_free(dctx->mdord);
160
0
    dctx->mdord = NULL;
161
0
    dctx->mdmax = 0;
162
0
}
163
164
static void tlsa_free(danetls_record *t)
165
0
{
166
0
    if (t == NULL)
167
0
        return;
168
0
    OPENSSL_free(t->data);
169
0
    EVP_PKEY_free(t->spki);
170
0
    OPENSSL_free(t);
171
0
}
172
173
static void dane_final(SSL_DANE *dane)
174
0
{
175
0
    sk_danetls_record_pop_free(dane->trecs, tlsa_free);
176
0
    dane->trecs = NULL;
177
178
0
    OSSL_STACK_OF_X509_free(dane->certs);
179
0
    dane->certs = NULL;
180
181
0
    X509_free(dane->mcert);
182
0
    dane->mcert = NULL;
183
0
    dane->mtlsa = NULL;
184
0
    dane->mdpth = -1;
185
0
    dane->pdpth = -1;
186
0
}
187
188
/*
189
 * dane_copy - Copy dane configuration, sans verification state.
190
 */
191
static int ssl_dane_dup(SSL_CONNECTION *to, SSL_CONNECTION *from)
192
0
{
193
0
    int num;
194
0
    int i;
195
196
0
    if (!DANETLS_ENABLED(&from->dane))
197
0
        return 1;
198
199
0
    num = sk_danetls_record_num(from->dane.trecs);
200
0
    dane_final(&to->dane);
201
0
    to->dane.flags = from->dane.flags;
202
0
    to->dane.dctx = &SSL_CONNECTION_GET_CTX(to)->dane;
203
0
    to->dane.trecs = sk_danetls_record_new_reserve(NULL, num);
204
205
0
    if (to->dane.trecs == NULL) {
206
0
        ERR_raise(ERR_LIB_SSL, ERR_R_CRYPTO_LIB);
207
0
        return 0;
208
0
    }
209
210
0
    for (i = 0; i < num; ++i) {
211
0
        danetls_record *t = sk_danetls_record_value(from->dane.trecs, i);
212
213
0
        if (SSL_dane_tlsa_add(SSL_CONNECTION_GET_SSL(to), t->usage,
214
0
                              t->selector, t->mtype, t->data, t->dlen) <= 0)
215
0
            return 0;
216
0
    }
217
0
    return 1;
218
0
}
219
220
static int dane_mtype_set(struct dane_ctx_st *dctx,
221
                          const EVP_MD *md, uint8_t mtype, uint8_t ord)
222
0
{
223
0
    int i;
224
225
0
    if (mtype == DANETLS_MATCHING_FULL && md != NULL) {
226
0
        ERR_raise(ERR_LIB_SSL, SSL_R_DANE_CANNOT_OVERRIDE_MTYPE_FULL);
227
0
        return 0;
228
0
    }
229
230
0
    if (mtype > dctx->mdmax) {
231
0
        const EVP_MD **mdevp;
232
0
        uint8_t *mdord;
233
0
        int n = ((int)mtype) + 1;
234
235
0
        mdevp = OPENSSL_realloc_array(dctx->mdevp, n, sizeof(*mdevp));
236
0
        if (mdevp == NULL)
237
0
            return -1;
238
0
        dctx->mdevp = mdevp;
239
240
0
        mdord = OPENSSL_realloc_array(dctx->mdord, n, sizeof(*mdord));
241
0
        if (mdord == NULL)
242
0
            return -1;
243
0
        dctx->mdord = mdord;
244
245
        /* Zero-fill any gaps */
246
0
        for (i = dctx->mdmax + 1; i < mtype; ++i) {
247
0
            mdevp[i] = NULL;
248
0
            mdord[i] = 0;
249
0
        }
250
251
0
        dctx->mdmax = mtype;
252
0
    }
253
254
0
    dctx->mdevp[mtype] = md;
255
    /* Coerce ordinal of disabled matching types to 0 */
256
0
    dctx->mdord[mtype] = (md == NULL) ? 0 : ord;
257
258
0
    return 1;
259
0
}
260
261
static const EVP_MD *tlsa_md_get(SSL_DANE *dane, uint8_t mtype)
262
0
{
263
0
    if (mtype > dane->dctx->mdmax)
264
0
        return NULL;
265
0
    return dane->dctx->mdevp[mtype];
266
0
}
267
268
static int dane_tlsa_add(SSL_DANE *dane,
269
                         uint8_t usage,
270
                         uint8_t selector,
271
                         uint8_t mtype, const unsigned char *data, size_t dlen)
272
0
{
273
0
    danetls_record *t;
274
0
    const EVP_MD *md = NULL;
275
0
    int ilen = (int)dlen;
276
0
    int i;
277
0
    int num;
278
0
    int mdsize;
279
280
0
    if (dane->trecs == NULL) {
281
0
        ERR_raise(ERR_LIB_SSL, SSL_R_DANE_NOT_ENABLED);
282
0
        return -1;
283
0
    }
284
285
0
    if (ilen < 0 || dlen != (size_t)ilen) {
286
0
        ERR_raise(ERR_LIB_SSL, SSL_R_DANE_TLSA_BAD_DATA_LENGTH);
287
0
        return 0;
288
0
    }
289
290
0
    if (usage > DANETLS_USAGE_LAST) {
291
0
        ERR_raise(ERR_LIB_SSL, SSL_R_DANE_TLSA_BAD_CERTIFICATE_USAGE);
292
0
        return 0;
293
0
    }
294
295
0
    if (selector > DANETLS_SELECTOR_LAST) {
296
0
        ERR_raise(ERR_LIB_SSL, SSL_R_DANE_TLSA_BAD_SELECTOR);
297
0
        return 0;
298
0
    }
299
300
0
    if (mtype != DANETLS_MATCHING_FULL) {
301
0
        md = tlsa_md_get(dane, mtype);
302
0
        if (md == NULL) {
303
0
            ERR_raise(ERR_LIB_SSL, SSL_R_DANE_TLSA_BAD_MATCHING_TYPE);
304
0
            return 0;
305
0
        }
306
0
    }
307
308
0
    if (md != NULL) {
309
0
        mdsize = EVP_MD_get_size(md);
310
0
        if (mdsize <= 0 || dlen != (size_t)mdsize) {
311
0
            ERR_raise(ERR_LIB_SSL, SSL_R_DANE_TLSA_BAD_DIGEST_LENGTH);
312
0
            return 0;
313
0
        }
314
0
    }
315
0
    if (!data) {
316
0
        ERR_raise(ERR_LIB_SSL, SSL_R_DANE_TLSA_NULL_DATA);
317
0
        return 0;
318
0
    }
319
320
0
    if ((t = OPENSSL_zalloc(sizeof(*t))) == NULL)
321
0
        return -1;
322
323
0
    t->usage = usage;
324
0
    t->selector = selector;
325
0
    t->mtype = mtype;
326
0
    t->data = OPENSSL_malloc(dlen);
327
0
    if (t->data == NULL) {
328
0
        tlsa_free(t);
329
0
        return -1;
330
0
    }
331
0
    memcpy(t->data, data, dlen);
332
0
    t->dlen = dlen;
333
334
    /* Validate and cache full certificate or public key */
335
0
    if (mtype == DANETLS_MATCHING_FULL) {
336
0
        const unsigned char *p = data;
337
0
        X509 *cert = NULL;
338
0
        EVP_PKEY *pkey = NULL;
339
340
0
        switch (selector) {
341
0
        case DANETLS_SELECTOR_CERT:
342
0
            if (!d2i_X509(&cert, &p, ilen) || p < data ||
343
0
                dlen != (size_t)(p - data)) {
344
0
                X509_free(cert);
345
0
                tlsa_free(t);
346
0
                ERR_raise(ERR_LIB_SSL, SSL_R_DANE_TLSA_BAD_CERTIFICATE);
347
0
                return 0;
348
0
            }
349
0
            if (X509_get0_pubkey(cert) == NULL) {
350
0
                X509_free(cert);
351
0
                tlsa_free(t);
352
0
                ERR_raise(ERR_LIB_SSL, SSL_R_DANE_TLSA_BAD_CERTIFICATE);
353
0
                return 0;
354
0
            }
355
356
0
            if ((DANETLS_USAGE_BIT(usage) & DANETLS_TA_MASK) == 0) {
357
                /*
358
                 * The Full(0) certificate decodes to a seemingly valid X.509
359
                 * object with a plausible key, so the TLSA record is well
360
                 * formed.  However, we don't actually need the certificate for
361
                 * usages PKIX-EE(1) or DANE-EE(3), because at least the EE
362
                 * certificate is always presented by the peer.  We discard the
363
                 * certificate, and just use the TLSA data as an opaque blob
364
                 * for matching the raw presented DER octets.
365
                 *
366
                 * DO NOT FREE `t` here, it will be added to the TLSA record
367
                 * list below!
368
                 */
369
0
                X509_free(cert);
370
0
                break;
371
0
            }
372
373
            /*
374
             * For usage DANE-TA(2), we support authentication via "2 0 0" TLSA
375
             * records that contain full certificates of trust-anchors that are
376
             * not present in the wire chain.  For usage PKIX-TA(0), we augment
377
             * the chain with untrusted Full(0) certificates from DNS, in case
378
             * they are missing from the chain.
379
             */
380
0
            if ((dane->certs == NULL &&
381
0
                 (dane->certs = sk_X509_new_null()) == NULL) ||
382
0
                !sk_X509_push(dane->certs, cert)) {
383
0
                ERR_raise(ERR_LIB_SSL, ERR_R_CRYPTO_LIB);
384
0
                X509_free(cert);
385
0
                tlsa_free(t);
386
0
                return -1;
387
0
            }
388
0
            break;
389
390
0
        case DANETLS_SELECTOR_SPKI:
391
0
            if (!d2i_PUBKEY(&pkey, &p, ilen) || p < data ||
392
0
                dlen != (size_t)(p - data)) {
393
0
                EVP_PKEY_free(pkey);
394
0
                tlsa_free(t);
395
0
                ERR_raise(ERR_LIB_SSL, SSL_R_DANE_TLSA_BAD_PUBLIC_KEY);
396
0
                return 0;
397
0
            }
398
399
            /*
400
             * For usage DANE-TA(2), we support authentication via "2 1 0" TLSA
401
             * records that contain full bare keys of trust-anchors that are
402
             * not present in the wire chain.
403
             */
404
0
            if (usage == DANETLS_USAGE_DANE_TA)
405
0
                t->spki = pkey;
406
0
            else
407
0
                EVP_PKEY_free(pkey);
408
0
            break;
409
0
        }
410
0
    }
411
412
    /*-
413
     * Find the right insertion point for the new record.
414
     *
415
     * See crypto/x509/x509_vfy.c.  We sort DANE-EE(3) records first, so that
416
     * they can be processed first, as they require no chain building, and no
417
     * expiration or hostname checks.  Because DANE-EE(3) is numerically
418
     * largest, this is accomplished via descending sort by "usage".
419
     *
420
     * We also sort in descending order by matching ordinal to simplify
421
     * the implementation of digest agility in the verification code.
422
     *
423
     * The choice of order for the selector is not significant, so we
424
     * use the same descending order for consistency.
425
     */
426
0
    num = sk_danetls_record_num(dane->trecs);
427
0
    for (i = 0; i < num; ++i) {
428
0
        danetls_record *rec = sk_danetls_record_value(dane->trecs, i);
429
430
0
        if (rec->usage > usage)
431
0
            continue;
432
0
        if (rec->usage < usage)
433
0
            break;
434
0
        if (rec->selector > selector)
435
0
            continue;
436
0
        if (rec->selector < selector)
437
0
            break;
438
0
        if (dane->dctx->mdord[rec->mtype] > dane->dctx->mdord[mtype])
439
0
            continue;
440
0
        break;
441
0
    }
442
443
0
    if (!sk_danetls_record_insert(dane->trecs, t, i)) {
444
0
        tlsa_free(t);
445
0
        ERR_raise(ERR_LIB_SSL, ERR_R_CRYPTO_LIB);
446
0
        return -1;
447
0
    }
448
0
    dane->umask |= DANETLS_USAGE_BIT(usage);
449
450
0
    return 1;
451
0
}
452
453
/*
454
 * Return 0 if there is only one version configured and it was disabled
455
 * at configure time.  Return 1 otherwise.
456
 */
457
static int ssl_check_allowed_versions(int min_version, int max_version)
458
0
{
459
0
    int minisdtls = 0, maxisdtls = 0;
460
461
    /* Figure out if we're doing DTLS versions or TLS versions */
462
0
    if (min_version == DTLS1_BAD_VER
463
0
        || min_version >> 8 == DTLS1_VERSION_MAJOR)
464
0
        minisdtls = 1;
465
0
    if (max_version == DTLS1_BAD_VER
466
0
        || max_version >> 8 == DTLS1_VERSION_MAJOR)
467
0
        maxisdtls = 1;
468
    /* A wildcard version of 0 could be DTLS or TLS. */
469
0
    if ((minisdtls && !maxisdtls && max_version != 0)
470
0
        || (maxisdtls && !minisdtls && min_version != 0)) {
471
        /* Mixing DTLS and TLS versions will lead to sadness; deny it. */
472
0
        return 0;
473
0
    }
474
475
0
    if (minisdtls || maxisdtls) {
476
        /* Do DTLS version checks. */
477
0
        if (min_version == 0)
478
            /* Ignore DTLS1_BAD_VER */
479
0
            min_version = DTLS1_VERSION;
480
0
        if (max_version == 0)
481
0
            max_version = DTLS1_2_VERSION;
482
#ifdef OPENSSL_NO_DTLS1_2
483
        if (max_version == DTLS1_2_VERSION)
484
            max_version = DTLS1_VERSION;
485
#endif
486
#ifdef OPENSSL_NO_DTLS1
487
        if (min_version == DTLS1_VERSION)
488
            min_version = DTLS1_2_VERSION;
489
#endif
490
        /* Done massaging versions; do the check. */
491
0
        if (0
492
#ifdef OPENSSL_NO_DTLS1
493
            || (DTLS_VERSION_GE(min_version, DTLS1_VERSION)
494
                && DTLS_VERSION_GE(DTLS1_VERSION, max_version))
495
#endif
496
#ifdef OPENSSL_NO_DTLS1_2
497
            || (DTLS_VERSION_GE(min_version, DTLS1_2_VERSION)
498
                && DTLS_VERSION_GE(DTLS1_2_VERSION, max_version))
499
#endif
500
0
            )
501
0
            return 0;
502
0
    } else {
503
        /* Regular TLS version checks. */
504
0
        if (min_version == 0)
505
0
            min_version = SSL3_VERSION;
506
0
        if (max_version == 0)
507
0
            max_version = TLS1_3_VERSION;
508
#ifdef OPENSSL_NO_TLS1_3
509
        if (max_version == TLS1_3_VERSION)
510
            max_version = TLS1_2_VERSION;
511
#endif
512
#ifdef OPENSSL_NO_TLS1_2
513
        if (max_version == TLS1_2_VERSION)
514
            max_version = TLS1_1_VERSION;
515
#endif
516
#ifdef OPENSSL_NO_TLS1_1
517
        if (max_version == TLS1_1_VERSION)
518
            max_version = TLS1_VERSION;
519
#endif
520
#ifdef OPENSSL_NO_TLS1
521
        if (max_version == TLS1_VERSION)
522
            max_version = SSL3_VERSION;
523
#endif
524
#ifdef OPENSSL_NO_SSL3
525
        if (min_version == SSL3_VERSION)
526
            min_version = TLS1_VERSION;
527
#endif
528
#ifdef OPENSSL_NO_TLS1
529
        if (min_version == TLS1_VERSION)
530
            min_version = TLS1_1_VERSION;
531
#endif
532
#ifdef OPENSSL_NO_TLS1_1
533
        if (min_version == TLS1_1_VERSION)
534
            min_version = TLS1_2_VERSION;
535
#endif
536
#ifdef OPENSSL_NO_TLS1_2
537
        if (min_version == TLS1_2_VERSION)
538
            min_version = TLS1_3_VERSION;
539
#endif
540
        /* Done massaging versions; do the check. */
541
0
        if (0
542
#ifdef OPENSSL_NO_SSL3
543
            || (min_version <= SSL3_VERSION && SSL3_VERSION <= max_version)
544
#endif
545
#ifdef OPENSSL_NO_TLS1
546
            || (min_version <= TLS1_VERSION && TLS1_VERSION <= max_version)
547
#endif
548
#ifdef OPENSSL_NO_TLS1_1
549
            || (min_version <= TLS1_1_VERSION && TLS1_1_VERSION <= max_version)
550
#endif
551
#ifdef OPENSSL_NO_TLS1_2
552
            || (min_version <= TLS1_2_VERSION && TLS1_2_VERSION <= max_version)
553
#endif
554
#ifdef OPENSSL_NO_TLS1_3
555
            || (min_version <= TLS1_3_VERSION && TLS1_3_VERSION <= max_version)
556
#endif
557
0
            )
558
0
            return 0;
559
0
    }
560
0
    return 1;
561
0
}
562
563
#if defined(__TANDEM) && defined(OPENSSL_VPROC)
564
/*
565
 * Define a VPROC function for HP NonStop build ssl library.
566
 * This is used by platform version identification tools.
567
 * Do not inline this procedure or make it static.
568
 */
569
# define OPENSSL_VPROC_STRING_(x)    x##_SSL
570
# define OPENSSL_VPROC_STRING(x)     OPENSSL_VPROC_STRING_(x)
571
# define OPENSSL_VPROC_FUNC          OPENSSL_VPROC_STRING(OPENSSL_VPROC)
572
void OPENSSL_VPROC_FUNC(void) {}
573
#endif
574
575
int SSL_clear(SSL *s)
576
0
{
577
0
    if (s->method == NULL) {
578
0
        ERR_raise(ERR_LIB_SSL, SSL_R_NO_METHOD_SPECIFIED);
579
0
        return 0;
580
0
    }
581
582
0
    return s->method->ssl_reset(s);
583
0
}
584
585
int ossl_ssl_connection_reset(SSL *s)
586
0
{
587
0
    SSL_CONNECTION *sc = SSL_CONNECTION_FROM_SSL(s);
588
589
0
    if (sc == NULL)
590
0
        return 0;
591
592
0
    if (ssl_clear_bad_session(sc)) {
593
0
        SSL_SESSION_free(sc->session);
594
0
        sc->session = NULL;
595
0
    }
596
0
    SSL_SESSION_free(sc->psksession);
597
0
    sc->psksession = NULL;
598
0
    OPENSSL_free(sc->psksession_id);
599
0
    sc->psksession_id = NULL;
600
0
    sc->psksession_id_len = 0;
601
0
    sc->hello_retry_request = SSL_HRR_NONE;
602
0
    sc->sent_tickets = 0;
603
604
0
    sc->error = 0;
605
0
    sc->hit = 0;
606
0
    sc->shutdown = 0;
607
608
0
    if (sc->renegotiate) {
609
0
        ERR_raise(ERR_LIB_SSL, ERR_R_INTERNAL_ERROR);
610
0
        return 0;
611
0
    }
612
613
0
    ossl_statem_clear(sc);
614
615
0
    sc->version = s->method->version;
616
0
    sc->client_version = sc->version;
617
0
    sc->rwstate = SSL_NOTHING;
618
619
0
    BUF_MEM_free(sc->init_buf);
620
0
    sc->init_buf = NULL;
621
0
    sc->first_packet = 0;
622
623
0
    sc->key_update = SSL_KEY_UPDATE_NONE;
624
0
    memset(sc->ext.compress_certificate_from_peer, 0,
625
0
           sizeof(sc->ext.compress_certificate_from_peer));
626
0
    sc->ext.compress_certificate_sent = 0;
627
628
0
    EVP_MD_CTX_free(sc->pha_dgst);
629
0
    sc->pha_dgst = NULL;
630
631
    /* Reset DANE verification result state */
632
0
    sc->dane.mdpth = -1;
633
0
    sc->dane.pdpth = -1;
634
0
    X509_free(sc->dane.mcert);
635
0
    sc->dane.mcert = NULL;
636
0
    sc->dane.mtlsa = NULL;
637
638
    /* Clear the verification result peername */
639
0
    X509_VERIFY_PARAM_move_peername(sc->param, NULL);
640
641
    /* Clear any shared connection state */
642
0
    OPENSSL_free(sc->shared_sigalgs);
643
0
    sc->shared_sigalgs = NULL;
644
0
    sc->shared_sigalgslen = 0;
645
646
    /*
647
     * Check to see if we were changed into a different method, if so, revert
648
     * back.
649
     */
650
0
    if (s->method != s->defltmeth) {
651
0
        s->method->ssl_deinit(s);
652
0
        s->method = s->defltmeth;
653
0
        if (!s->method->ssl_init(s))
654
0
            return 0;
655
0
    } else {
656
0
        if (!s->method->ssl_clear(s))
657
0
            return 0;
658
0
    }
659
660
0
    ossl_quic_tls_clear(sc->qtls);
661
662
0
    if (!RECORD_LAYER_reset(&sc->rlayer))
663
0
        return 0;
664
665
0
    return 1;
666
0
}
667
668
#ifndef OPENSSL_NO_DEPRECATED_3_0
669
/** Used to change an SSL_CTXs default SSL method type */
670
int SSL_CTX_set_ssl_version(SSL_CTX *ctx, const SSL_METHOD *meth)
671
0
{
672
0
    STACK_OF(SSL_CIPHER) *sk;
673
674
0
    if (IS_QUIC_CTX(ctx)) {
675
0
        ERR_raise(ERR_LIB_SSL, SSL_R_WRONG_SSL_VERSION);
676
0
        return 0;
677
0
    }
678
679
0
    ctx->method = meth;
680
681
0
    if (!SSL_CTX_set_ciphersuites(ctx, OSSL_default_ciphersuites())) {
682
0
        ERR_raise(ERR_LIB_SSL, SSL_R_SSL_LIBRARY_HAS_NO_CIPHERS);
683
0
        return 0;
684
0
    }
685
0
    sk = ssl_create_cipher_list(ctx,
686
0
                                ctx->tls13_ciphersuites,
687
0
                                &(ctx->cipher_list),
688
0
                                &(ctx->cipher_list_by_id),
689
0
                                OSSL_default_cipher_list(), ctx->cert);
690
0
    if ((sk == NULL) || (sk_SSL_CIPHER_num(sk) <= 0)) {
691
0
        ERR_raise(ERR_LIB_SSL, SSL_R_SSL_LIBRARY_HAS_NO_CIPHERS);
692
0
        return 0;
693
0
    }
694
0
    return 1;
695
0
}
696
#endif
697
698
SSL *SSL_new(SSL_CTX *ctx)
699
0
{
700
0
    if (ctx == NULL) {
701
0
        ERR_raise(ERR_LIB_SSL, SSL_R_NULL_SSL_CTX);
702
0
        return NULL;
703
0
    }
704
0
    if (ctx->method == NULL) {
705
0
        ERR_raise(ERR_LIB_SSL, SSL_R_SSL_CTX_HAS_NO_DEFAULT_SSL_VERSION);
706
0
        return NULL;
707
0
    }
708
0
    return ctx->method->ssl_new(ctx);
709
0
}
710
711
int ossl_ssl_init(SSL *ssl, SSL_CTX *ctx, const SSL_METHOD *method, int type)
712
0
{
713
0
    if (!SSL_CTX_up_ref(ctx))
714
0
        return 0;
715
716
0
    ssl->lock = CRYPTO_THREAD_lock_new();
717
718
0
    if (ssl->lock == NULL || !CRYPTO_NEW_REF(&ssl->references, 1))
719
0
        goto err;
720
721
0
    if (!CRYPTO_new_ex_data(CRYPTO_EX_INDEX_SSL, ssl, &ssl->ex_data)) {
722
0
        CRYPTO_FREE_REF(&ssl->references);
723
0
        goto err;
724
0
    }
725
726
0
    ssl->ctx = ctx;
727
0
    ssl->type = type;
728
0
    ssl->defltmeth = ssl->method = method;
729
730
0
    return 1;
731
732
0
err:
733
0
    CRYPTO_THREAD_lock_free(ssl->lock);
734
0
    ssl->lock = NULL;
735
0
    SSL_CTX_free(ctx);
736
0
    return 0;
737
0
}
738
739
SSL *ossl_ssl_connection_new_int(SSL_CTX *ctx, SSL *user_ssl,
740
                                 const SSL_METHOD *method)
741
0
{
742
0
    SSL_CONNECTION *s;
743
0
    SSL *ssl;
744
745
0
    s = OPENSSL_zalloc(sizeof(*s));
746
0
    if (s == NULL)
747
0
        return NULL;
748
749
0
    ssl = &s->ssl;
750
0
    s->user_ssl = (user_ssl == NULL) ? ssl : user_ssl;
751
752
0
    if (!ossl_ssl_init(ssl, ctx, method, SSL_TYPE_SSL_CONNECTION)) {
753
0
        OPENSSL_free(s);
754
0
        s = NULL;
755
0
        ssl = NULL;
756
0
        goto sslerr;
757
0
    }
758
759
0
    RECORD_LAYER_init(&s->rlayer, s);
760
761
0
    s->options = ctx->options;
762
763
0
    s->dane.flags = ctx->dane.flags;
764
0
    if (method->version == ctx->method->version) {
765
0
        s->min_proto_version = ctx->min_proto_version;
766
0
        s->max_proto_version = ctx->max_proto_version;
767
0
    }
768
769
0
    s->mode = ctx->mode;
770
0
    s->max_cert_list = ctx->max_cert_list;
771
0
    s->max_early_data = ctx->max_early_data;
772
0
    s->recv_max_early_data = ctx->recv_max_early_data;
773
774
0
    s->num_tickets = ctx->num_tickets;
775
0
    s->pha_enabled = ctx->pha_enabled;
776
777
    /* Shallow copy of the ciphersuites stack */
778
0
    s->tls13_ciphersuites = sk_SSL_CIPHER_dup(ctx->tls13_ciphersuites);
779
0
    if (s->tls13_ciphersuites == NULL)
780
0
        goto cerr;
781
782
    /*
783
     * Earlier library versions used to copy the pointer to the CERT, not
784
     * its contents; only when setting new parameters for the per-SSL
785
     * copy, ssl_cert_new would be called (and the direct reference to
786
     * the per-SSL_CTX settings would be lost, but those still were
787
     * indirectly accessed for various purposes, and for that reason they
788
     * used to be known as s->ctx->default_cert). Now we don't look at the
789
     * SSL_CTX's CERT after having duplicated it once.
790
     */
791
0
    s->cert = ssl_cert_dup(ctx->cert);
792
0
    if (s->cert == NULL)
793
0
        goto sslerr;
794
795
0
    RECORD_LAYER_set_read_ahead(&s->rlayer, ctx->read_ahead);
796
0
    s->msg_callback = ctx->msg_callback;
797
0
    s->msg_callback_arg = ctx->msg_callback_arg;
798
0
    s->verify_mode = ctx->verify_mode;
799
0
    s->not_resumable_session_cb = ctx->not_resumable_session_cb;
800
0
    s->rlayer.record_padding_cb = ctx->record_padding_cb;
801
0
    s->rlayer.record_padding_arg = ctx->record_padding_arg;
802
0
    s->rlayer.block_padding = ctx->block_padding;
803
0
    s->rlayer.hs_padding = ctx->hs_padding;
804
0
    s->sid_ctx_length = ctx->sid_ctx_length;
805
0
    if (!ossl_assert(s->sid_ctx_length <= sizeof(s->sid_ctx)))
806
0
        goto err;
807
0
    memcpy(&s->sid_ctx, &ctx->sid_ctx, sizeof(s->sid_ctx));
808
0
    s->verify_callback = ctx->default_verify_callback;
809
0
    s->generate_session_id = ctx->generate_session_id;
810
811
0
    s->param = X509_VERIFY_PARAM_new();
812
0
    if (s->param == NULL)
813
0
        goto asn1err;
814
0
    X509_VERIFY_PARAM_inherit(s->param, ctx->param);
815
0
    s->quiet_shutdown = IS_QUIC_CTX(ctx) ? 0 : ctx->quiet_shutdown;
816
817
0
    if (!IS_QUIC_CTX(ctx))
818
0
        s->ext.max_fragment_len_mode = ctx->ext.max_fragment_len_mode;
819
820
0
    s->max_send_fragment = ctx->max_send_fragment;
821
0
    s->split_send_fragment = ctx->split_send_fragment;
822
0
    s->max_pipelines = ctx->max_pipelines;
823
0
    s->rlayer.default_read_buf_len = ctx->default_read_buf_len;
824
825
0
    s->ext.debug_cb = 0;
826
0
    s->ext.debug_arg = NULL;
827
0
    s->ext.ticket_expected = 0;
828
0
    s->ext.status_type = ctx->ext.status_type;
829
0
    s->ext.status_expected = 0;
830
0
    s->ext.ocsp.ids = NULL;
831
0
    s->ext.ocsp.exts = NULL;
832
0
    s->ext.ocsp.resp = NULL;
833
0
    s->ext.ocsp.resp_len = 0;
834
0
    s->ext.ocsp.resp_ex = NULL;
835
836
0
    if (!SSL_CTX_up_ref(ctx))
837
0
        goto err;
838
839
0
    s->session_ctx = ctx;
840
0
    if (ctx->ext.ecpointformats != NULL) {
841
0
        s->ext.ecpointformats =
842
0
            OPENSSL_memdup(ctx->ext.ecpointformats,
843
0
                           ctx->ext.ecpointformats_len);
844
0
        if (s->ext.ecpointformats == NULL) {
845
0
            s->ext.ecpointformats_len = 0;
846
0
            goto err;
847
0
        }
848
0
        s->ext.ecpointformats_len =
849
0
            ctx->ext.ecpointformats_len;
850
0
    }
851
0
    if (ctx->ext.supportedgroups != NULL) {
852
0
        size_t add = 0;
853
854
0
        if (ctx->ext.supportedgroups_len == 0)
855
            /* Add 1 so allocation won't fail */
856
0
            add = 1;
857
0
        s->ext.supportedgroups =
858
0
            OPENSSL_memdup(ctx->ext.supportedgroups,
859
0
                           (ctx->ext.supportedgroups_len + add)
860
0
                           * sizeof(*ctx->ext.supportedgroups));
861
0
        if (s->ext.supportedgroups == NULL) {
862
0
            s->ext.supportedgroups_len = 0;
863
0
            goto err;
864
0
        }
865
0
        s->ext.supportedgroups_len = ctx->ext.supportedgroups_len;
866
0
    }
867
0
    if (ctx->ext.keyshares != NULL) {
868
0
        size_t add = 0;
869
870
0
        if (ctx->ext.keyshares_len == 0)
871
            /* Add 1 so allocation won't fail */
872
0
            add = 1;
873
0
        s->ext.keyshares =
874
0
            OPENSSL_memdup(ctx->ext.keyshares,
875
0
                           (ctx->ext.keyshares_len + add)
876
0
                           * sizeof(*ctx->ext.keyshares));
877
0
        if (s->ext.keyshares == NULL) {
878
0
            s->ext.keyshares_len = 0;
879
0
            goto err;
880
0
        }
881
0
        s->ext.keyshares_len = ctx->ext.keyshares_len;
882
0
    }
883
0
    if (ctx->ext.tuples != NULL) {
884
0
        size_t add = 0;
885
886
0
        if (ctx->ext.tuples_len == 0)
887
            /* Add 1 so allocation won't fail */
888
0
            add = 1;
889
0
        s->ext.tuples =
890
0
            OPENSSL_memdup(ctx->ext.tuples,
891
0
                           (ctx->ext.tuples_len + add)
892
0
                           * sizeof(*ctx->ext.tuples));
893
0
        if (s->ext.tuples == NULL) {
894
0
            s->ext.tuples_len = 0;
895
0
            goto err;
896
0
        }
897
0
        s->ext.tuples_len = ctx->ext.tuples_len;
898
0
    }
899
900
0
#ifndef OPENSSL_NO_NEXTPROTONEG
901
0
    s->ext.npn = NULL;
902
0
#endif
903
904
0
    if (ctx->ext.alpn != NULL) {
905
0
        s->ext.alpn = OPENSSL_malloc(ctx->ext.alpn_len);
906
0
        if (s->ext.alpn == NULL) {
907
0
            s->ext.alpn_len = 0;
908
0
            goto err;
909
0
        }
910
0
        memcpy(s->ext.alpn, ctx->ext.alpn, ctx->ext.alpn_len);
911
0
        s->ext.alpn_len = ctx->ext.alpn_len;
912
0
    }
913
914
0
    s->verified_chain = NULL;
915
0
    s->verify_result = X509_V_OK;
916
917
0
    s->default_passwd_callback = ctx->default_passwd_callback;
918
0
    s->default_passwd_callback_userdata = ctx->default_passwd_callback_userdata;
919
920
0
    s->key_update = SSL_KEY_UPDATE_NONE;
921
922
0
    if (!IS_QUIC_CTX(ctx)) {
923
0
        s->allow_early_data_cb = ctx->allow_early_data_cb;
924
0
        s->allow_early_data_cb_data = ctx->allow_early_data_cb_data;
925
0
    }
926
927
0
    if (!method->ssl_init(ssl))
928
0
        goto sslerr;
929
930
0
    s->server = (method->ssl_accept == ssl_undefined_function) ? 0 : 1;
931
932
0
    if (!method->ssl_reset(ssl))
933
0
        goto sslerr;
934
935
0
#ifndef OPENSSL_NO_PSK
936
0
    s->psk_client_callback = ctx->psk_client_callback;
937
0
    s->psk_server_callback = ctx->psk_server_callback;
938
0
#endif
939
0
    s->psk_find_session_cb = ctx->psk_find_session_cb;
940
0
    s->psk_use_session_cb = ctx->psk_use_session_cb;
941
942
0
    s->async_cb = ctx->async_cb;
943
0
    s->async_cb_arg = ctx->async_cb_arg;
944
945
0
    s->job = NULL;
946
947
#ifndef OPENSSL_NO_COMP_ALG
948
    memcpy(s->cert_comp_prefs, ctx->cert_comp_prefs, sizeof(s->cert_comp_prefs));
949
#endif
950
0
    if (ctx->client_cert_type != NULL) {
951
0
        s->client_cert_type = OPENSSL_memdup(ctx->client_cert_type,
952
0
                                             ctx->client_cert_type_len);
953
0
        if (s->client_cert_type == NULL)
954
0
            goto sslerr;
955
0
        s->client_cert_type_len = ctx->client_cert_type_len;
956
0
    }
957
0
    if (ctx->server_cert_type != NULL) {
958
0
        s->server_cert_type = OPENSSL_memdup(ctx->server_cert_type,
959
0
                                             ctx->server_cert_type_len);
960
0
        if (s->server_cert_type == NULL)
961
0
            goto sslerr;
962
0
        s->server_cert_type_len = ctx->server_cert_type_len;
963
0
    }
964
965
0
#ifndef OPENSSL_NO_CT
966
0
    if (!SSL_set_ct_validation_callback(ssl, ctx->ct_validation_callback,
967
0
                                        ctx->ct_validation_callback_arg))
968
0
        goto sslerr;
969
0
#endif
970
971
0
    s->ssl_pkey_num = SSL_PKEY_NUM + ctx->sigalg_list_len;
972
0
    return ssl;
973
0
 cerr:
974
0
    ERR_raise(ERR_LIB_SSL, ERR_R_CRYPTO_LIB);
975
0
    goto err;
976
0
 asn1err:
977
0
    ERR_raise(ERR_LIB_SSL, ERR_R_ASN1_LIB);
978
0
    goto err;
979
0
 sslerr:
980
0
    ERR_raise(ERR_LIB_SSL, ERR_R_SSL_LIB);
981
0
 err:
982
0
    SSL_free(ssl);
983
0
    return NULL;
984
0
}
985
986
SSL *ossl_ssl_connection_new(SSL_CTX *ctx)
987
0
{
988
0
    return ossl_ssl_connection_new_int(ctx, NULL, ctx->method);
989
0
}
990
991
int SSL_is_dtls(const SSL *s)
992
0
{
993
0
    SSL_CONNECTION *sc = SSL_CONNECTION_FROM_SSL(s);
994
995
0
#ifndef OPENSSL_NO_QUIC
996
0
    if (s->type == SSL_TYPE_QUIC_CONNECTION || s->type == SSL_TYPE_QUIC_XSO)
997
0
        return 0;
998
0
#endif
999
1000
0
    if (sc == NULL)
1001
0
        return 0;
1002
1003
0
    return SSL_CONNECTION_IS_DTLS(sc) ? 1 : 0;
1004
0
}
1005
1006
int SSL_is_tls(const SSL *s)
1007
0
{
1008
0
    SSL_CONNECTION *sc = SSL_CONNECTION_FROM_SSL(s);
1009
1010
0
#ifndef OPENSSL_NO_QUIC
1011
0
    if (s->type == SSL_TYPE_QUIC_CONNECTION || s->type == SSL_TYPE_QUIC_XSO)
1012
0
        return 0;
1013
0
#endif
1014
1015
0
    if (sc == NULL)
1016
0
        return 0;
1017
1018
0
    return SSL_CONNECTION_IS_DTLS(sc) ? 0 : 1;
1019
0
}
1020
1021
int SSL_is_quic(const SSL *s)
1022
0
{
1023
0
    return IS_QUIC(s);
1024
0
}
1025
1026
int SSL_up_ref(SSL *s)
1027
0
{
1028
0
    int i;
1029
1030
0
    if (CRYPTO_UP_REF(&s->references, &i) <= 0)
1031
0
        return 0;
1032
1033
0
    REF_PRINT_COUNT("SSL", i, s);
1034
0
    REF_ASSERT_ISNT(i < 2);
1035
0
    return ((i > 1) ? 1 : 0);
1036
0
}
1037
1038
int SSL_CTX_set_session_id_context(SSL_CTX *ctx, const unsigned char *sid_ctx,
1039
                                   unsigned int sid_ctx_len)
1040
0
{
1041
0
    if (sid_ctx_len > SSL_MAX_SID_CTX_LENGTH) {
1042
0
        ERR_raise(ERR_LIB_SSL, SSL_R_SSL_SESSION_ID_CONTEXT_TOO_LONG);
1043
0
        return 0;
1044
0
    }
1045
0
    ctx->sid_ctx_length = sid_ctx_len;
1046
0
    memcpy(ctx->sid_ctx, sid_ctx, sid_ctx_len);
1047
1048
0
    return 1;
1049
0
}
1050
1051
int SSL_set_session_id_context(SSL *ssl, const unsigned char *sid_ctx,
1052
                               unsigned int sid_ctx_len)
1053
0
{
1054
0
    SSL_CONNECTION *sc = SSL_CONNECTION_FROM_SSL(ssl);
1055
1056
0
    if (sc == NULL)
1057
0
        return 0;
1058
1059
0
    if (sid_ctx_len > SSL_MAX_SID_CTX_LENGTH) {
1060
0
        ERR_raise(ERR_LIB_SSL, SSL_R_SSL_SESSION_ID_CONTEXT_TOO_LONG);
1061
0
        return 0;
1062
0
    }
1063
0
    sc->sid_ctx_length = sid_ctx_len;
1064
0
    memcpy(sc->sid_ctx, sid_ctx, sid_ctx_len);
1065
1066
0
    return 1;
1067
0
}
1068
1069
int SSL_CTX_set_generate_session_id(SSL_CTX *ctx, GEN_SESSION_CB cb)
1070
0
{
1071
0
    if (!CRYPTO_THREAD_write_lock(ctx->lock))
1072
0
        return 0;
1073
0
    ctx->generate_session_id = cb;
1074
0
    CRYPTO_THREAD_unlock(ctx->lock);
1075
0
    return 1;
1076
0
}
1077
1078
int SSL_set_generate_session_id(SSL *ssl, GEN_SESSION_CB cb)
1079
0
{
1080
0
    SSL_CONNECTION *sc = SSL_CONNECTION_FROM_SSL(ssl);
1081
1082
0
    if (sc == NULL || !CRYPTO_THREAD_write_lock(ssl->lock))
1083
0
        return 0;
1084
0
    sc->generate_session_id = cb;
1085
0
    CRYPTO_THREAD_unlock(ssl->lock);
1086
0
    return 1;
1087
0
}
1088
1089
int SSL_has_matching_session_id(const SSL *ssl, const unsigned char *id,
1090
                                unsigned int id_len)
1091
0
{
1092
    /*
1093
     * A quick examination of SSL_SESSION_hash and SSL_SESSION_cmp shows how
1094
     * we can "construct" a session to give us the desired check - i.e. to
1095
     * find if there's a session in the hash table that would conflict with
1096
     * any new session built out of this id/id_len and the ssl_version in use
1097
     * by this SSL.
1098
     */
1099
0
    SSL_SESSION r, *p;
1100
0
    const SSL_CONNECTION *sc = SSL_CONNECTION_FROM_CONST_SSL(ssl);
1101
1102
0
    if (sc == NULL || id_len > sizeof(r.session_id))
1103
0
        return 0;
1104
1105
0
    r.ssl_version = sc->version;
1106
0
    r.session_id_length = id_len;
1107
0
    memcpy(r.session_id, id, id_len);
1108
1109
0
    if (!CRYPTO_THREAD_read_lock(sc->session_ctx->lock))
1110
0
        return 0;
1111
0
    p = lh_SSL_SESSION_retrieve(sc->session_ctx->sessions, &r);
1112
0
    CRYPTO_THREAD_unlock(sc->session_ctx->lock);
1113
0
    return (p != NULL);
1114
0
}
1115
1116
int SSL_CTX_set_purpose(SSL_CTX *s, int purpose)
1117
0
{
1118
0
    return X509_VERIFY_PARAM_set_purpose(s->param, purpose);
1119
0
}
1120
1121
int SSL_set_purpose(SSL *s, int purpose)
1122
0
{
1123
0
    SSL_CONNECTION *sc = SSL_CONNECTION_FROM_SSL(s);
1124
1125
0
    if (sc == NULL)
1126
0
        return 0;
1127
1128
0
    return X509_VERIFY_PARAM_set_purpose(sc->param, purpose);
1129
0
}
1130
1131
int SSL_CTX_set_trust(SSL_CTX *s, int trust)
1132
0
{
1133
0
    return X509_VERIFY_PARAM_set_trust(s->param, trust);
1134
0
}
1135
1136
int SSL_set_trust(SSL *s, int trust)
1137
0
{
1138
0
    SSL_CONNECTION *sc = SSL_CONNECTION_FROM_SSL(s);
1139
1140
0
    if (sc == NULL)
1141
0
        return 0;
1142
1143
0
    return X509_VERIFY_PARAM_set_trust(sc->param, trust);
1144
0
}
1145
1146
int SSL_set1_host(SSL *s, const char *host)
1147
0
{
1148
0
    SSL_CONNECTION *sc = SSL_CONNECTION_FROM_SSL(s);
1149
1150
0
    if (sc == NULL)
1151
0
        return 0;
1152
1153
    /* clear hostname(s) and IP address in any case, also if host parses as an IP address */
1154
0
    (void)X509_VERIFY_PARAM_set1_host(sc->param, NULL, 0);
1155
0
    (void)X509_VERIFY_PARAM_set1_ip(sc->param, NULL, 0);
1156
0
    if (host == NULL)
1157
0
        return 1;
1158
1159
    /* If a host is provided and parses as an IP address, treat it as such. */
1160
0
    return X509_VERIFY_PARAM_set1_ip_asc(sc->param, host)
1161
0
        || X509_VERIFY_PARAM_set1_host(sc->param, host, 0);
1162
0
}
1163
1164
int SSL_add1_host(SSL *s, const char *host)
1165
0
{
1166
0
    SSL_CONNECTION *sc = SSL_CONNECTION_FROM_SSL(s);
1167
1168
0
    if (sc == NULL)
1169
0
        return 0;
1170
1171
    /* If a host is provided and parses as an IP address, treat it as such. */
1172
0
    if (host != NULL) {
1173
0
        ASN1_OCTET_STRING *ip;
1174
0
        char *old_ip;
1175
1176
0
        ip = a2i_IPADDRESS(host);
1177
0
        if (ip != NULL) {
1178
            /* We didn't want it; only to check if it *is* an IP address */
1179
0
            ASN1_OCTET_STRING_free(ip);
1180
1181
0
            old_ip = X509_VERIFY_PARAM_get1_ip_asc(sc->param);
1182
0
            if (old_ip != NULL) {
1183
0
                OPENSSL_free(old_ip);
1184
                /* There can be only one IP address */
1185
0
                ERR_raise_data(ERR_LIB_SSL, ERR_R_PASSED_INVALID_ARGUMENT,
1186
0
                               "IP address was already set");
1187
0
                return 0;
1188
0
            }
1189
1190
0
            return X509_VERIFY_PARAM_set1_ip_asc(sc->param, host);
1191
0
        }
1192
0
    }
1193
1194
0
    return X509_VERIFY_PARAM_add1_host(sc->param, host, 0);
1195
0
}
1196
1197
void SSL_set_hostflags(SSL *s, unsigned int flags)
1198
0
{
1199
0
    SSL_CONNECTION *sc = SSL_CONNECTION_FROM_SSL(s);
1200
1201
0
    if (sc == NULL)
1202
0
        return;
1203
1204
0
    X509_VERIFY_PARAM_set_hostflags(sc->param, flags);
1205
0
}
1206
1207
const char *SSL_get0_peername(SSL *s)
1208
0
{
1209
0
    SSL_CONNECTION *sc = SSL_CONNECTION_FROM_SSL(s);
1210
1211
0
    if (sc == NULL)
1212
0
        return NULL;
1213
1214
0
    return X509_VERIFY_PARAM_get0_peername(sc->param);
1215
0
}
1216
1217
int SSL_CTX_dane_enable(SSL_CTX *ctx)
1218
0
{
1219
0
    return dane_ctx_enable(&ctx->dane);
1220
0
}
1221
1222
unsigned long SSL_CTX_dane_set_flags(SSL_CTX *ctx, unsigned long flags)
1223
0
{
1224
0
    unsigned long orig = ctx->dane.flags;
1225
1226
0
    ctx->dane.flags |= flags;
1227
0
    return orig;
1228
0
}
1229
1230
unsigned long SSL_CTX_dane_clear_flags(SSL_CTX *ctx, unsigned long flags)
1231
0
{
1232
0
    unsigned long orig = ctx->dane.flags;
1233
1234
0
    ctx->dane.flags &= ~flags;
1235
0
    return orig;
1236
0
}
1237
1238
int SSL_dane_enable(SSL *s, const char *basedomain)
1239
0
{
1240
0
    SSL_DANE *dane;
1241
0
    SSL_CONNECTION *sc = SSL_CONNECTION_FROM_SSL(s);
1242
1243
0
    if (sc == NULL)
1244
0
        return 0;
1245
1246
0
    dane = &sc->dane;
1247
0
    if (s->ctx->dane.mdmax == 0) {
1248
0
        ERR_raise(ERR_LIB_SSL, SSL_R_CONTEXT_NOT_DANE_ENABLED);
1249
0
        return 0;
1250
0
    }
1251
0
    if (dane->trecs != NULL) {
1252
0
        ERR_raise(ERR_LIB_SSL, SSL_R_DANE_ALREADY_ENABLED);
1253
0
        return 0;
1254
0
    }
1255
1256
    /*
1257
     * Default SNI name.  This rejects empty names, while set1_host below
1258
     * accepts them and disables hostname checks.  To avoid side-effects with
1259
     * invalid input, set the SNI name first.
1260
     */
1261
0
    if (sc->ext.hostname == NULL) {
1262
0
        if (!SSL_set_tlsext_host_name(s, basedomain)) {
1263
0
            ERR_raise(ERR_LIB_SSL, SSL_R_ERROR_SETTING_TLSA_BASE_DOMAIN);
1264
0
            return -1;
1265
0
        }
1266
0
    }
1267
1268
    /* Primary RFC6125 reference identifier */
1269
0
    if (!X509_VERIFY_PARAM_set1_host(sc->param, basedomain, 0)) {
1270
0
        ERR_raise(ERR_LIB_SSL, SSL_R_ERROR_SETTING_TLSA_BASE_DOMAIN);
1271
0
        return -1;
1272
0
    }
1273
1274
0
    dane->mdpth = -1;
1275
0
    dane->pdpth = -1;
1276
0
    dane->dctx = &s->ctx->dane;
1277
0
    dane->trecs = sk_danetls_record_new_null();
1278
1279
0
    if (dane->trecs == NULL) {
1280
0
        ERR_raise(ERR_LIB_SSL, ERR_R_CRYPTO_LIB);
1281
0
        return -1;
1282
0
    }
1283
0
    return 1;
1284
0
}
1285
1286
unsigned long SSL_dane_set_flags(SSL *ssl, unsigned long flags)
1287
0
{
1288
0
    unsigned long orig;
1289
0
    SSL_CONNECTION *sc = SSL_CONNECTION_FROM_SSL(ssl);
1290
1291
0
    if (sc == NULL)
1292
0
        return 0;
1293
1294
0
    orig = sc->dane.flags;
1295
1296
0
    sc->dane.flags |= flags;
1297
0
    return orig;
1298
0
}
1299
1300
unsigned long SSL_dane_clear_flags(SSL *ssl, unsigned long flags)
1301
0
{
1302
0
    unsigned long orig;
1303
0
    SSL_CONNECTION *sc = SSL_CONNECTION_FROM_SSL(ssl);
1304
1305
0
    if (sc == NULL)
1306
0
        return 0;
1307
1308
0
    orig = sc->dane.flags;
1309
1310
0
    sc->dane.flags &= ~flags;
1311
0
    return orig;
1312
0
}
1313
1314
int SSL_get0_dane_authority(SSL *s, X509 **mcert, EVP_PKEY **mspki)
1315
0
{
1316
0
    SSL_DANE *dane;
1317
0
    SSL_CONNECTION *sc = SSL_CONNECTION_FROM_SSL(s);
1318
1319
0
    if (sc == NULL)
1320
0
        return -1;
1321
1322
0
    dane = &sc->dane;
1323
1324
0
    if (!DANETLS_ENABLED(dane) || sc->verify_result != X509_V_OK)
1325
0
        return -1;
1326
0
    if (dane->mtlsa) {
1327
0
        if (mcert)
1328
0
            *mcert = dane->mcert;
1329
0
        if (mspki)
1330
0
            *mspki = (dane->mcert == NULL) ? dane->mtlsa->spki : NULL;
1331
0
    }
1332
0
    return dane->mdpth;
1333
0
}
1334
1335
int SSL_get0_dane_tlsa(SSL *s, uint8_t *usage, uint8_t *selector,
1336
                       uint8_t *mtype, const unsigned char **data, size_t *dlen)
1337
0
{
1338
0
    SSL_DANE *dane;
1339
0
    SSL_CONNECTION *sc = SSL_CONNECTION_FROM_SSL(s);
1340
1341
0
    if (sc == NULL)
1342
0
        return -1;
1343
1344
0
    dane = &sc->dane;
1345
1346
0
    if (!DANETLS_ENABLED(dane) || sc->verify_result != X509_V_OK)
1347
0
        return -1;
1348
0
    if (dane->mtlsa) {
1349
0
        if (usage)
1350
0
            *usage = dane->mtlsa->usage;
1351
0
        if (selector)
1352
0
            *selector = dane->mtlsa->selector;
1353
0
        if (mtype)
1354
0
            *mtype = dane->mtlsa->mtype;
1355
0
        if (data)
1356
0
            *data = dane->mtlsa->data;
1357
0
        if (dlen)
1358
0
            *dlen = dane->mtlsa->dlen;
1359
0
    }
1360
0
    return dane->mdpth;
1361
0
}
1362
1363
SSL_DANE *SSL_get0_dane(SSL *s)
1364
0
{
1365
0
    SSL_CONNECTION *sc = SSL_CONNECTION_FROM_SSL(s);
1366
1367
0
    if (sc == NULL)
1368
0
        return NULL;
1369
1370
0
    return &sc->dane;
1371
0
}
1372
1373
int SSL_dane_tlsa_add(SSL *s, uint8_t usage, uint8_t selector,
1374
                      uint8_t mtype, const unsigned char *data, size_t dlen)
1375
0
{
1376
0
    SSL_CONNECTION *sc = SSL_CONNECTION_FROM_SSL(s);
1377
1378
0
    if (sc == NULL)
1379
0
        return 0;
1380
1381
0
    return dane_tlsa_add(&sc->dane, usage, selector, mtype, data, dlen);
1382
0
}
1383
1384
int SSL_CTX_dane_mtype_set(SSL_CTX *ctx, const EVP_MD *md, uint8_t mtype,
1385
                           uint8_t ord)
1386
0
{
1387
0
    return dane_mtype_set(&ctx->dane, md, mtype, ord);
1388
0
}
1389
1390
int SSL_CTX_set1_param(SSL_CTX *ctx, X509_VERIFY_PARAM *vpm)
1391
0
{
1392
0
    return X509_VERIFY_PARAM_set1(ctx->param, vpm);
1393
0
}
1394
1395
int SSL_set1_param(SSL *ssl, X509_VERIFY_PARAM *vpm)
1396
0
{
1397
0
    SSL_CONNECTION *sc = SSL_CONNECTION_FROM_SSL(ssl);
1398
1399
0
    if (sc == NULL)
1400
0
        return 0;
1401
1402
0
    return X509_VERIFY_PARAM_set1(sc->param, vpm);
1403
0
}
1404
1405
X509_VERIFY_PARAM *SSL_CTX_get0_param(SSL_CTX *ctx)
1406
0
{
1407
0
    return ctx->param;
1408
0
}
1409
1410
X509_VERIFY_PARAM *SSL_get0_param(SSL *ssl)
1411
0
{
1412
0
    SSL_CONNECTION *sc = SSL_CONNECTION_FROM_SSL(ssl);
1413
1414
0
    if (sc == NULL)
1415
0
        return NULL;
1416
1417
0
    return sc->param;
1418
0
}
1419
1420
void SSL_certs_clear(SSL *s)
1421
0
{
1422
0
    SSL_CONNECTION *sc = SSL_CONNECTION_FROM_SSL(s);
1423
1424
0
    if (sc == NULL)
1425
0
        return;
1426
1427
0
    ssl_cert_clear_certs(sc->cert);
1428
0
}
1429
1430
void SSL_free(SSL *s)
1431
0
{
1432
0
    int i;
1433
1434
0
    if (s == NULL)
1435
0
        return;
1436
0
    CRYPTO_DOWN_REF(&s->references, &i);
1437
0
    REF_PRINT_COUNT("SSL", i, s);
1438
0
    if (i > 0)
1439
0
        return;
1440
0
    REF_ASSERT_ISNT(i < 0);
1441
1442
0
    if (s->method != NULL)
1443
0
        s->method->ssl_free(s);
1444
1445
0
    CRYPTO_free_ex_data(CRYPTO_EX_INDEX_SSL, s, &s->ex_data);
1446
0
    SSL_CTX_free(s->ctx);
1447
0
    CRYPTO_THREAD_lock_free(s->lock);
1448
0
    CRYPTO_FREE_REF(&s->references);
1449
1450
0
    OPENSSL_free(s);
1451
0
}
1452
1453
void ossl_ssl_connection_free(SSL *ssl)
1454
0
{
1455
0
    SSL_CONNECTION *s;
1456
1457
0
    s = SSL_CONNECTION_FROM_SSL_ONLY(ssl);
1458
0
    if (s == NULL)
1459
0
        return;
1460
1461
    /*
1462
     * Ignore return values. This could result in user callbacks being called
1463
     * e.g. for the QUIC TLS record layer. So we do this early before we have
1464
     * freed other things.
1465
     */
1466
0
    ssl_free_wbio_buffer(s);
1467
0
    RECORD_LAYER_clear(&s->rlayer);
1468
1469
0
    X509_VERIFY_PARAM_free(s->param);
1470
0
    dane_final(&s->dane);
1471
1472
0
    BUF_MEM_free(s->init_buf);
1473
1474
    /* add extra stuff */
1475
0
    sk_SSL_CIPHER_free(s->cipher_list);
1476
0
    sk_SSL_CIPHER_free(s->cipher_list_by_id);
1477
0
    sk_SSL_CIPHER_free(s->tls13_ciphersuites);
1478
0
    sk_SSL_CIPHER_free(s->peer_ciphers);
1479
1480
    /* Make the next call work :-) */
1481
0
    if (s->session != NULL) {
1482
0
        ssl_clear_bad_session(s);
1483
0
        SSL_SESSION_free(s->session);
1484
0
    }
1485
0
    SSL_SESSION_free(s->psksession);
1486
0
    OPENSSL_free(s->psksession_id);
1487
1488
0
    ssl_cert_free(s->cert);
1489
0
    OPENSSL_free(s->shared_sigalgs);
1490
    /* Free up if allocated */
1491
1492
0
    OPENSSL_free(s->ext.hostname);
1493
0
    SSL_CTX_free(s->session_ctx);
1494
0
    OPENSSL_free(s->ext.ecpointformats);
1495
0
    OPENSSL_free(s->ext.peer_ecpointformats);
1496
0
    OPENSSL_free(s->ext.supportedgroups);
1497
0
    OPENSSL_free(s->ext.keyshares);
1498
0
    OPENSSL_free(s->ext.tuples);
1499
0
    OPENSSL_free(s->ext.peer_supportedgroups);
1500
0
    sk_X509_EXTENSION_pop_free(s->ext.ocsp.exts, X509_EXTENSION_free);
1501
1502
0
#ifndef OPENSSL_NO_OCSP
1503
0
    OPENSSL_free(s->ext.ocsp.resp);
1504
0
    s->ext.ocsp.resp = NULL;
1505
0
    s->ext.ocsp.resp_len = 0;
1506
1507
0
    sk_OCSP_RESPID_pop_free(s->ext.ocsp.ids, OCSP_RESPID_free);
1508
0
    sk_OCSP_RESPONSE_pop_free(s->ext.ocsp.resp_ex, OCSP_RESPONSE_free);
1509
0
    s->ext.ocsp.resp_ex = NULL;
1510
0
#endif
1511
0
#ifndef OPENSSL_NO_CT
1512
0
    SCT_LIST_free(s->scts);
1513
0
    OPENSSL_free(s->ext.scts);
1514
0
#endif
1515
0
    OPENSSL_free(s->ext.alpn);
1516
0
    OPENSSL_free(s->ext.tls13_cookie);
1517
0
    if (s->clienthello != NULL)
1518
0
        OPENSSL_free(s->clienthello->pre_proc_exts);
1519
0
    OPENSSL_free(s->clienthello);
1520
0
    OPENSSL_free(s->pha_context);
1521
0
    EVP_MD_CTX_free(s->pha_dgst);
1522
1523
0
    sk_X509_NAME_pop_free(s->ca_names, X509_NAME_free);
1524
0
    sk_X509_NAME_pop_free(s->client_ca_names, X509_NAME_free);
1525
1526
0
    OPENSSL_free(s->client_cert_type);
1527
0
    OPENSSL_free(s->server_cert_type);
1528
1529
0
    OSSL_STACK_OF_X509_free(s->verified_chain);
1530
1531
0
    if (ssl->method != NULL)
1532
0
        ssl->method->ssl_deinit(ssl);
1533
1534
0
    ASYNC_WAIT_CTX_free(s->waitctx);
1535
1536
0
#if !defined(OPENSSL_NO_NEXTPROTONEG)
1537
0
    OPENSSL_free(s->ext.npn);
1538
0
#endif
1539
1540
0
#ifndef OPENSSL_NO_SRTP
1541
0
    sk_SRTP_PROTECTION_PROFILE_free(s->srtp_profiles);
1542
0
#endif
1543
1544
    /*
1545
     * We do this late. We want to ensure that any other references we held to
1546
     * these BIOs are freed first *before* we call BIO_free_all(), because
1547
     * BIO_free_all() will only free each BIO in the chain if the number of
1548
     * references to the first BIO have dropped to 0
1549
     */
1550
0
    BIO_free_all(s->wbio);
1551
0
    s->wbio = NULL;
1552
0
    BIO_free_all(s->rbio);
1553
0
    s->rbio = NULL;
1554
0
    OPENSSL_free(s->s3.tmp.valid_flags);
1555
0
}
1556
1557
void SSL_set0_rbio(SSL *s, BIO *rbio)
1558
0
{
1559
0
    SSL_CONNECTION *sc = SSL_CONNECTION_FROM_SSL(s);
1560
1561
0
#ifndef OPENSSL_NO_QUIC
1562
0
    if (IS_QUIC(s)) {
1563
0
        ossl_quic_conn_set0_net_rbio(s, rbio);
1564
0
        return;
1565
0
    }
1566
0
#endif
1567
1568
0
    if (sc == NULL)
1569
0
        return;
1570
1571
0
    BIO_free_all(sc->rbio);
1572
0
    sc->rbio = rbio;
1573
0
    sc->rlayer.rrlmethod->set1_bio(sc->rlayer.rrl, sc->rbio);
1574
0
}
1575
1576
void SSL_set0_wbio(SSL *s, BIO *wbio)
1577
0
{
1578
0
    SSL_CONNECTION *sc = SSL_CONNECTION_FROM_SSL(s);
1579
1580
0
#ifndef OPENSSL_NO_QUIC
1581
0
    if (IS_QUIC(s)) {
1582
0
        ossl_quic_conn_set0_net_wbio(s, wbio);
1583
0
        return;
1584
0
    }
1585
0
#endif
1586
1587
0
    if (sc == NULL)
1588
0
        return;
1589
1590
    /*
1591
     * If the output buffering BIO is still in place, remove it
1592
     */
1593
0
    if (sc->bbio != NULL)
1594
0
        sc->wbio = BIO_pop(sc->wbio);
1595
1596
0
    BIO_free_all(sc->wbio);
1597
0
    sc->wbio = wbio;
1598
1599
    /* Re-attach |bbio| to the new |wbio|. */
1600
0
    if (sc->bbio != NULL)
1601
0
        sc->wbio = BIO_push(sc->bbio, sc->wbio);
1602
1603
0
    sc->rlayer.wrlmethod->set1_bio(sc->rlayer.wrl, sc->wbio);
1604
0
}
1605
1606
void SSL_set_bio(SSL *s, BIO *rbio, BIO *wbio)
1607
0
{
1608
    /*
1609
     * For historical reasons, this function has many different cases in
1610
     * ownership handling.
1611
     */
1612
1613
    /* If nothing has changed, do nothing */
1614
0
    if (rbio == SSL_get_rbio(s) && wbio == SSL_get_wbio(s))
1615
0
        return;
1616
1617
    /*
1618
     * If the two arguments are equal then one fewer reference is granted by the
1619
     * caller than we want to take
1620
     */
1621
0
    if (rbio != NULL && rbio == wbio) {
1622
0
        if (!BIO_up_ref(rbio))
1623
0
            return;
1624
0
    }
1625
1626
    /*
1627
     * If only the wbio is changed only adopt one reference.
1628
     */
1629
0
    if (rbio == SSL_get_rbio(s)) {
1630
0
        SSL_set0_wbio(s, wbio);
1631
0
        return;
1632
0
    }
1633
    /*
1634
     * There is an asymmetry here for historical reasons. If only the rbio is
1635
     * changed AND the rbio and wbio were originally different, then we only
1636
     * adopt one reference.
1637
     */
1638
0
    if (wbio == SSL_get_wbio(s) && SSL_get_rbio(s) != SSL_get_wbio(s)) {
1639
0
        SSL_set0_rbio(s, rbio);
1640
0
        return;
1641
0
    }
1642
1643
    /* Otherwise, adopt both references. */
1644
0
    SSL_set0_rbio(s, rbio);
1645
0
    SSL_set0_wbio(s, wbio);
1646
0
}
1647
1648
BIO *SSL_get_rbio(const SSL *s)
1649
0
{
1650
0
    const SSL_CONNECTION *sc = SSL_CONNECTION_FROM_CONST_SSL(s);
1651
1652
0
#ifndef OPENSSL_NO_QUIC
1653
0
    if (IS_QUIC(s))
1654
0
        return ossl_quic_conn_get_net_rbio(s);
1655
0
#endif
1656
1657
0
    if (sc == NULL)
1658
0
        return NULL;
1659
1660
0
    return sc->rbio;
1661
0
}
1662
1663
BIO *SSL_get_wbio(const SSL *s)
1664
0
{
1665
0
    const SSL_CONNECTION *sc = SSL_CONNECTION_FROM_CONST_SSL(s);
1666
1667
0
#ifndef OPENSSL_NO_QUIC
1668
0
    if (IS_QUIC(s))
1669
0
        return ossl_quic_conn_get_net_wbio(s);
1670
0
#endif
1671
1672
0
    if (sc == NULL)
1673
0
        return NULL;
1674
1675
0
    if (sc->bbio != NULL) {
1676
        /*
1677
         * If |bbio| is active, the true caller-configured BIO is its
1678
         * |next_bio|.
1679
         */
1680
0
        return BIO_next(sc->bbio);
1681
0
    }
1682
0
    return sc->wbio;
1683
0
}
1684
1685
int SSL_get_fd(const SSL *s)
1686
0
{
1687
0
    return SSL_get_rfd(s);
1688
0
}
1689
1690
int SSL_get_rfd(const SSL *s)
1691
0
{
1692
0
    int ret = -1;
1693
0
    BIO *b, *r;
1694
1695
0
    b = SSL_get_rbio(s);
1696
0
    r = BIO_find_type(b, BIO_TYPE_DESCRIPTOR);
1697
0
    if (r != NULL)
1698
0
        BIO_get_fd(r, &ret);
1699
0
    return ret;
1700
0
}
1701
1702
int SSL_get_wfd(const SSL *s)
1703
0
{
1704
0
    int ret = -1;
1705
0
    BIO *b, *r;
1706
1707
0
    b = SSL_get_wbio(s);
1708
0
    r = BIO_find_type(b, BIO_TYPE_DESCRIPTOR);
1709
0
    if (r != NULL)
1710
0
        BIO_get_fd(r, &ret);
1711
0
    return ret;
1712
0
}
1713
1714
#ifndef OPENSSL_NO_SOCK
1715
static const BIO_METHOD *fd_method(SSL *s)
1716
0
{
1717
0
#ifndef OPENSSL_NO_DGRAM
1718
0
    if (IS_QUIC(s))
1719
0
        return BIO_s_datagram();
1720
0
#endif
1721
1722
0
    return BIO_s_socket();
1723
0
}
1724
1725
int SSL_set_fd(SSL *s, int fd)
1726
0
{
1727
0
    int ret = 0;
1728
0
    BIO *bio = NULL;
1729
1730
0
    if (s->type == SSL_TYPE_QUIC_XSO) {
1731
0
        ERR_raise(ERR_LIB_SSL, SSL_R_CONN_USE_ONLY);
1732
0
        goto err;
1733
0
    }
1734
1735
0
    bio = BIO_new(fd_method(s));
1736
1737
0
    if (bio == NULL) {
1738
0
        ERR_raise(ERR_LIB_SSL, ERR_R_BUF_LIB);
1739
0
        goto err;
1740
0
    }
1741
0
    BIO_set_fd(bio, fd, BIO_NOCLOSE);
1742
0
    SSL_set_bio(s, bio, bio);
1743
#ifndef OPENSSL_NO_KTLS
1744
    /*
1745
     * The new socket is created successfully regardless of ktls_enable.
1746
     * ktls_enable doesn't change any functionality of the socket, except
1747
     * changing the setsockopt to enable the processing of ktls_start.
1748
     * Thus, it is not a problem to call it for non-TLS sockets.
1749
     */
1750
    ktls_enable(fd);
1751
#endif /* OPENSSL_NO_KTLS */
1752
0
    ret = 1;
1753
0
 err:
1754
0
    return ret;
1755
0
}
1756
1757
int SSL_set_wfd(SSL *s, int fd)
1758
0
{
1759
0
    BIO *rbio = SSL_get_rbio(s);
1760
0
    int desired_type = IS_QUIC(s) ? BIO_TYPE_DGRAM : BIO_TYPE_SOCKET;
1761
1762
0
    if (s->type == SSL_TYPE_QUIC_XSO) {
1763
0
        ERR_raise(ERR_LIB_SSL, SSL_R_CONN_USE_ONLY);
1764
0
        return 0;
1765
0
    }
1766
1767
0
    if (rbio == NULL || BIO_method_type(rbio) != desired_type
1768
0
        || (int)BIO_get_fd(rbio, NULL) != fd) {
1769
0
        BIO *bio = BIO_new(fd_method(s));
1770
1771
0
        if (bio == NULL) {
1772
0
            ERR_raise(ERR_LIB_SSL, ERR_R_BUF_LIB);
1773
0
            return 0;
1774
0
        }
1775
0
        BIO_set_fd(bio, fd, BIO_NOCLOSE);
1776
0
        SSL_set0_wbio(s, bio);
1777
#ifndef OPENSSL_NO_KTLS
1778
        /*
1779
         * The new socket is created successfully regardless of ktls_enable.
1780
         * ktls_enable doesn't change any functionality of the socket, except
1781
         * changing the setsockopt to enable the processing of ktls_start.
1782
         * Thus, it is not a problem to call it for non-TLS sockets.
1783
         */
1784
        ktls_enable(fd);
1785
#endif /* OPENSSL_NO_KTLS */
1786
0
    } else {
1787
0
        if (!BIO_up_ref(rbio))
1788
0
            return 0;
1789
0
        SSL_set0_wbio(s, rbio);
1790
0
    }
1791
0
    return 1;
1792
0
}
1793
1794
int SSL_set_rfd(SSL *s, int fd)
1795
0
{
1796
0
    BIO *wbio = SSL_get_wbio(s);
1797
0
    int desired_type = IS_QUIC(s) ? BIO_TYPE_DGRAM : BIO_TYPE_SOCKET;
1798
1799
0
    if (s->type == SSL_TYPE_QUIC_XSO) {
1800
0
        ERR_raise(ERR_LIB_SSL, SSL_R_CONN_USE_ONLY);
1801
0
        return 0;
1802
0
    }
1803
1804
0
    if (wbio == NULL || BIO_method_type(wbio) != desired_type
1805
0
        || ((int)BIO_get_fd(wbio, NULL) != fd)) {
1806
0
        BIO *bio = BIO_new(fd_method(s));
1807
1808
0
        if (bio == NULL) {
1809
0
            ERR_raise(ERR_LIB_SSL, ERR_R_BUF_LIB);
1810
0
            return 0;
1811
0
        }
1812
0
        BIO_set_fd(bio, fd, BIO_NOCLOSE);
1813
0
        SSL_set0_rbio(s, bio);
1814
0
    } else {
1815
0
        if (!BIO_up_ref(wbio))
1816
0
            return 0;
1817
0
        SSL_set0_rbio(s, wbio);
1818
0
    }
1819
1820
0
    return 1;
1821
0
}
1822
#endif
1823
1824
/* return length of latest Finished message we sent, copy to 'buf' */
1825
size_t SSL_get_finished(const SSL *s, void *buf, size_t count)
1826
0
{
1827
0
    size_t ret = 0;
1828
0
    const SSL_CONNECTION *sc = SSL_CONNECTION_FROM_CONST_SSL(s);
1829
1830
0
    if (sc == NULL)
1831
0
        return 0;
1832
1833
0
    ret = sc->s3.tmp.finish_md_len;
1834
0
    if (count > ret)
1835
0
        count = ret;
1836
0
    memcpy(buf, sc->s3.tmp.finish_md, count);
1837
0
    return ret;
1838
0
}
1839
1840
/* return length of latest Finished message we expected, copy to 'buf' */
1841
size_t SSL_get_peer_finished(const SSL *s, void *buf, size_t count)
1842
0
{
1843
0
    size_t ret = 0;
1844
0
    const SSL_CONNECTION *sc = SSL_CONNECTION_FROM_CONST_SSL(s);
1845
1846
0
    if (sc == NULL)
1847
0
        return 0;
1848
1849
0
    ret = sc->s3.tmp.peer_finish_md_len;
1850
0
    if (count > ret)
1851
0
        count = ret;
1852
0
    memcpy(buf, sc->s3.tmp.peer_finish_md, count);
1853
0
    return ret;
1854
0
}
1855
1856
int SSL_get_verify_mode(const SSL *s)
1857
0
{
1858
0
    const SSL_CONNECTION *sc = SSL_CONNECTION_FROM_CONST_SSL(s);
1859
1860
0
    if (sc == NULL)
1861
0
        return 0;
1862
1863
0
    return sc->verify_mode;
1864
0
}
1865
1866
int SSL_get_verify_depth(const SSL *s)
1867
0
{
1868
0
    const SSL_CONNECTION *sc = SSL_CONNECTION_FROM_CONST_SSL(s);
1869
1870
0
    if (sc == NULL)
1871
0
        return 0;
1872
1873
0
    return X509_VERIFY_PARAM_get_depth(sc->param);
1874
0
}
1875
1876
0
int (*SSL_get_verify_callback(const SSL *s)) (int, X509_STORE_CTX *) {
1877
0
    const SSL_CONNECTION *sc = SSL_CONNECTION_FROM_CONST_SSL(s);
1878
1879
0
    if (sc == NULL)
1880
0
        return NULL;
1881
1882
0
    return sc->verify_callback;
1883
0
}
1884
1885
int SSL_CTX_get_verify_mode(const SSL_CTX *ctx)
1886
0
{
1887
0
    return ctx->verify_mode;
1888
0
}
1889
1890
int SSL_CTX_get_verify_depth(const SSL_CTX *ctx)
1891
0
{
1892
0
    return X509_VERIFY_PARAM_get_depth(ctx->param);
1893
0
}
1894
1895
0
int (*SSL_CTX_get_verify_callback(const SSL_CTX *ctx)) (int, X509_STORE_CTX *) {
1896
0
    return ctx->default_verify_callback;
1897
0
}
1898
1899
void SSL_set_verify(SSL *s, int mode,
1900
                    int (*callback) (int ok, X509_STORE_CTX *ctx))
1901
0
{
1902
0
    SSL_CONNECTION *sc = SSL_CONNECTION_FROM_SSL(s);
1903
1904
0
    if (sc == NULL)
1905
0
        return;
1906
1907
0
    sc->verify_mode = mode;
1908
0
    if (callback != NULL)
1909
0
        sc->verify_callback = callback;
1910
0
}
1911
1912
void SSL_set_verify_depth(SSL *s, int depth)
1913
0
{
1914
0
    SSL_CONNECTION *sc = SSL_CONNECTION_FROM_SSL(s);
1915
1916
0
    if (sc == NULL)
1917
0
        return;
1918
1919
0
    X509_VERIFY_PARAM_set_depth(sc->param, depth);
1920
0
}
1921
1922
void SSL_set_read_ahead(SSL *s, int yes)
1923
0
{
1924
0
    SSL_CONNECTION *sc = SSL_CONNECTION_FROM_SSL_ONLY(s);
1925
0
    OSSL_PARAM options[2], *opts = options;
1926
1927
0
    if (sc == NULL)
1928
0
        return;
1929
1930
0
    RECORD_LAYER_set_read_ahead(&sc->rlayer, yes);
1931
1932
0
    *opts++ = OSSL_PARAM_construct_int(OSSL_LIBSSL_RECORD_LAYER_PARAM_READ_AHEAD,
1933
0
                                       &sc->rlayer.read_ahead);
1934
0
    *opts = OSSL_PARAM_construct_end();
1935
1936
    /* Ignore return value */
1937
0
    sc->rlayer.rrlmethod->set_options(sc->rlayer.rrl, options);
1938
0
}
1939
1940
int SSL_get_read_ahead(const SSL *s)
1941
0
{
1942
0
    const SSL_CONNECTION *sc = SSL_CONNECTION_FROM_CONST_SSL_ONLY(s);
1943
1944
0
    if (sc == NULL)
1945
0
        return 0;
1946
1947
0
    return RECORD_LAYER_get_read_ahead(&sc->rlayer);
1948
0
}
1949
1950
int SSL_pending(const SSL *s)
1951
0
{
1952
0
    size_t pending = s->method->ssl_pending(s);
1953
1954
    /*
1955
     * SSL_pending cannot work properly if read-ahead is enabled
1956
     * (SSL_[CTX_]ctrl(..., SSL_CTRL_SET_READ_AHEAD, 1, NULL)), and it is
1957
     * impossible to fix since SSL_pending cannot report errors that may be
1958
     * observed while scanning the new data. (Note that SSL_pending() is
1959
     * often used as a boolean value, so we'd better not return -1.)
1960
     *
1961
     * SSL_pending also cannot work properly if the value >INT_MAX. In that case
1962
     * we just return INT_MAX.
1963
     */
1964
0
    return pending < INT_MAX ? (int)pending : INT_MAX;
1965
0
}
1966
1967
int SSL_has_pending(const SSL *s)
1968
0
{
1969
    /*
1970
     * Similar to SSL_pending() but returns a 1 to indicate that we have
1971
     * processed or unprocessed data available or 0 otherwise (as opposed to the
1972
     * number of bytes available). Unlike SSL_pending() this will take into
1973
     * account read_ahead data. A 1 return simply indicates that we have data.
1974
     * That data may not result in any application data, or we may fail to parse
1975
     * the records for some reason.
1976
     */
1977
0
    const SSL_CONNECTION *sc;
1978
1979
0
#ifndef OPENSSL_NO_QUIC
1980
0
    if (IS_QUIC(s))
1981
0
        return ossl_quic_has_pending(s);
1982
0
#endif
1983
1984
0
    sc = SSL_CONNECTION_FROM_CONST_SSL(s);
1985
1986
    /* Check buffered app data if any first */
1987
0
    if (SSL_CONNECTION_IS_DTLS(sc)) {
1988
0
        TLS_RECORD *rdata;
1989
0
        pitem *item, *iter;
1990
1991
0
        iter = pqueue_iterator(sc->rlayer.d->buffered_app_data);
1992
0
        while ((item = pqueue_next(&iter)) != NULL) {
1993
0
            rdata = item->data;
1994
0
            if (rdata->length > 0)
1995
0
                return 1;
1996
0
        }
1997
0
    }
1998
1999
0
    if (RECORD_LAYER_processed_read_pending(&sc->rlayer))
2000
0
        return 1;
2001
2002
0
    return RECORD_LAYER_read_pending(&sc->rlayer);
2003
0
}
2004
2005
X509 *SSL_get1_peer_certificate(const SSL *s)
2006
0
{
2007
0
    X509 *r = SSL_get0_peer_certificate(s);
2008
2009
0
    if (r != NULL && !X509_up_ref(r))
2010
0
        return NULL;
2011
2012
0
    return r;
2013
0
}
2014
2015
X509 *SSL_get0_peer_certificate(const SSL *s)
2016
0
{
2017
0
    const SSL_CONNECTION *sc = SSL_CONNECTION_FROM_CONST_SSL(s);
2018
2019
0
    if (sc == NULL)
2020
0
        return NULL;
2021
2022
0
    if (sc->session == NULL)
2023
0
        return NULL;
2024
0
    else
2025
0
        return sc->session->peer;
2026
0
}
2027
2028
STACK_OF(X509) *SSL_get_peer_cert_chain(const SSL *s)
2029
0
{
2030
0
    STACK_OF(X509) *r;
2031
0
    const SSL_CONNECTION *sc = SSL_CONNECTION_FROM_CONST_SSL(s);
2032
2033
0
    if (sc == NULL)
2034
0
        return NULL;
2035
2036
0
    if (sc->session == NULL)
2037
0
        r = NULL;
2038
0
    else
2039
0
        r = sc->session->peer_chain;
2040
2041
    /*
2042
     * If we are a client, cert_chain includes the peer's own certificate; if
2043
     * we are a server, it does not.
2044
     */
2045
2046
0
    return r;
2047
0
}
2048
2049
/*
2050
 * Now in theory, since the calling process own 't' it should be safe to
2051
 * modify.  We need to be able to read f without being hassled
2052
 */
2053
int SSL_copy_session_id(SSL *t, const SSL *f)
2054
0
{
2055
0
    int i;
2056
    /* TODO(QUIC FUTURE): Not allowed for QUIC currently. */
2057
0
    SSL_CONNECTION *tsc = SSL_CONNECTION_FROM_SSL_ONLY(t);
2058
0
    const SSL_CONNECTION *fsc = SSL_CONNECTION_FROM_CONST_SSL_ONLY(f);
2059
2060
0
    if (tsc == NULL || fsc == NULL)
2061
0
        return 0;
2062
2063
    /* Do we need to do SSL locking? */
2064
0
    if (!SSL_set_session(t, SSL_get_session(f))) {
2065
0
        return 0;
2066
0
    }
2067
2068
    /*
2069
     * what if we are setup for one protocol version but want to talk another
2070
     */
2071
0
    if (t->method != f->method) {
2072
0
        t->method->ssl_deinit(t);
2073
0
        t->method = f->method;
2074
0
        if (t->method->ssl_init(t) == 0)
2075
0
            return 0;
2076
0
    }
2077
2078
0
    CRYPTO_UP_REF(&fsc->cert->references, &i);
2079
0
    ssl_cert_free(tsc->cert);
2080
0
    tsc->cert = fsc->cert;
2081
0
    if (!SSL_set_session_id_context(t, fsc->sid_ctx, (int)fsc->sid_ctx_length)) {
2082
0
        return 0;
2083
0
    }
2084
2085
0
    return 1;
2086
0
}
2087
2088
/* Fix this so it checks all the valid key/cert options */
2089
int SSL_CTX_check_private_key(const SSL_CTX *ctx)
2090
0
{
2091
0
    if ((ctx == NULL) || (ctx->cert->key->x509 == NULL)) {
2092
0
        ERR_raise(ERR_LIB_SSL, SSL_R_NO_CERTIFICATE_ASSIGNED);
2093
0
        return 0;
2094
0
    }
2095
0
    if (ctx->cert->key->privatekey == NULL) {
2096
0
        ERR_raise(ERR_LIB_SSL, SSL_R_NO_PRIVATE_KEY_ASSIGNED);
2097
0
        return 0;
2098
0
    }
2099
0
    return X509_check_private_key
2100
0
            (ctx->cert->key->x509, ctx->cert->key->privatekey);
2101
0
}
2102
2103
/* Fix this function so that it takes an optional type parameter */
2104
int SSL_check_private_key(const SSL *ssl)
2105
0
{
2106
0
    const SSL_CONNECTION *sc;
2107
2108
0
    if ((sc = SSL_CONNECTION_FROM_CONST_SSL(ssl)) == NULL) {
2109
0
        ERR_raise(ERR_LIB_SSL, ERR_R_PASSED_NULL_PARAMETER);
2110
0
        return 0;
2111
0
    }
2112
0
    if (sc->cert->key->x509 == NULL) {
2113
0
        ERR_raise(ERR_LIB_SSL, SSL_R_NO_CERTIFICATE_ASSIGNED);
2114
0
        return 0;
2115
0
    }
2116
0
    if (sc->cert->key->privatekey == NULL) {
2117
0
        ERR_raise(ERR_LIB_SSL, SSL_R_NO_PRIVATE_KEY_ASSIGNED);
2118
0
        return 0;
2119
0
    }
2120
0
    return X509_check_private_key(sc->cert->key->x509,
2121
0
                                   sc->cert->key->privatekey);
2122
0
}
2123
2124
int SSL_waiting_for_async(SSL *s)
2125
0
{
2126
0
    SSL_CONNECTION *sc = SSL_CONNECTION_FROM_SSL(s);
2127
2128
0
    if (sc == NULL)
2129
0
        return 0;
2130
2131
0
    if (sc->job)
2132
0
        return 1;
2133
2134
0
    return 0;
2135
0
}
2136
2137
int SSL_get_all_async_fds(SSL *s, OSSL_ASYNC_FD *fds, size_t *numfds)
2138
0
{
2139
0
    ASYNC_WAIT_CTX *ctx;
2140
0
    SSL_CONNECTION *sc = SSL_CONNECTION_FROM_SSL(s);
2141
2142
0
    if (sc == NULL)
2143
0
        return 0;
2144
2145
0
    if ((ctx = sc->waitctx) == NULL)
2146
0
        return 0;
2147
0
    return ASYNC_WAIT_CTX_get_all_fds(ctx, fds, numfds);
2148
0
}
2149
2150
int SSL_get_changed_async_fds(SSL *s, OSSL_ASYNC_FD *addfd, size_t *numaddfds,
2151
                              OSSL_ASYNC_FD *delfd, size_t *numdelfds)
2152
0
{
2153
0
    ASYNC_WAIT_CTX *ctx;
2154
0
    SSL_CONNECTION *sc = SSL_CONNECTION_FROM_SSL(s);
2155
2156
0
    if (sc == NULL)
2157
0
        return 0;
2158
2159
0
    if ((ctx = sc->waitctx) == NULL)
2160
0
        return 0;
2161
0
    return ASYNC_WAIT_CTX_get_changed_fds(ctx, addfd, numaddfds, delfd,
2162
0
                                          numdelfds);
2163
0
}
2164
2165
int SSL_CTX_set_async_callback(SSL_CTX *ctx, SSL_async_callback_fn callback)
2166
0
{
2167
0
    ctx->async_cb = callback;
2168
0
    return 1;
2169
0
}
2170
2171
int SSL_CTX_set_async_callback_arg(SSL_CTX *ctx, void *arg)
2172
0
{
2173
0
    ctx->async_cb_arg = arg;
2174
0
    return 1;
2175
0
}
2176
2177
int SSL_set_async_callback(SSL *s, SSL_async_callback_fn callback)
2178
0
{
2179
0
    SSL_CONNECTION *sc = SSL_CONNECTION_FROM_SSL(s);
2180
2181
0
    if (sc == NULL)
2182
0
        return 0;
2183
2184
0
    sc->async_cb = callback;
2185
0
    return 1;
2186
0
}
2187
2188
int SSL_set_async_callback_arg(SSL *s, void *arg)
2189
0
{
2190
0
    SSL_CONNECTION *sc = SSL_CONNECTION_FROM_SSL(s);
2191
2192
0
    if (sc == NULL)
2193
0
        return 0;
2194
2195
0
    sc->async_cb_arg = arg;
2196
0
    return 1;
2197
0
}
2198
2199
int SSL_get_async_status(SSL *s, int *status)
2200
0
{
2201
0
    ASYNC_WAIT_CTX *ctx;
2202
0
    SSL_CONNECTION *sc = SSL_CONNECTION_FROM_SSL(s);
2203
2204
0
    if (sc == NULL)
2205
0
        return 0;
2206
2207
0
    if ((ctx = sc->waitctx) == NULL)
2208
0
        return 0;
2209
0
    *status = ASYNC_WAIT_CTX_get_status(ctx);
2210
0
    return 1;
2211
0
}
2212
2213
int SSL_accept(SSL *s)
2214
0
{
2215
0
    SSL_CONNECTION *sc = SSL_CONNECTION_FROM_SSL(s);
2216
2217
0
#ifndef OPENSSL_NO_QUIC
2218
0
    if (IS_QUIC(s))
2219
0
        return s->method->ssl_accept(s);
2220
0
#endif
2221
2222
0
    if (sc == NULL)
2223
0
        return 0;
2224
2225
0
    if (sc->handshake_func == NULL) {
2226
        /* Not properly initialized yet */
2227
0
        SSL_set_accept_state(s);
2228
0
    }
2229
2230
0
    return SSL_do_handshake(s);
2231
0
}
2232
2233
int SSL_connect(SSL *s)
2234
0
{
2235
0
    SSL_CONNECTION *sc = SSL_CONNECTION_FROM_SSL(s);
2236
2237
0
#ifndef OPENSSL_NO_QUIC
2238
0
    if (IS_QUIC(s))
2239
0
        return s->method->ssl_connect(s);
2240
0
#endif
2241
2242
0
    if (sc == NULL)
2243
0
        return 0;
2244
2245
0
    if (sc->handshake_func == NULL) {
2246
        /* Not properly initialized yet */
2247
0
        SSL_set_connect_state(s);
2248
0
    }
2249
2250
0
    return SSL_do_handshake(s);
2251
0
}
2252
2253
long SSL_get_default_timeout(const SSL *s)
2254
0
{
2255
0
    return (long int)ossl_time2seconds(s->method->get_timeout());
2256
0
}
2257
2258
static int ssl_async_wait_ctx_cb(void *arg)
2259
0
{
2260
0
    SSL *s = (SSL *)arg;
2261
0
    SSL_CONNECTION *sc = SSL_CONNECTION_FROM_SSL(s);
2262
2263
0
    if (sc == NULL)
2264
0
        return 0;
2265
2266
0
    return sc->async_cb(s, sc->async_cb_arg);
2267
0
}
2268
2269
static int ssl_start_async_job(SSL *s, struct ssl_async_args *args,
2270
                               int (*func) (void *))
2271
0
{
2272
0
    int ret;
2273
0
    SSL_CONNECTION *sc = SSL_CONNECTION_FROM_SSL(s);
2274
2275
0
    if (sc == NULL)
2276
0
        return 0;
2277
2278
0
    if (sc->waitctx == NULL) {
2279
0
        sc->waitctx = ASYNC_WAIT_CTX_new();
2280
0
        if (sc->waitctx == NULL)
2281
0
            return -1;
2282
0
        if (sc->async_cb != NULL
2283
0
            && !ASYNC_WAIT_CTX_set_callback
2284
0
                 (sc->waitctx, ssl_async_wait_ctx_cb, s))
2285
0
            return -1;
2286
0
    }
2287
2288
0
    sc->rwstate = SSL_NOTHING;
2289
0
    switch (ASYNC_start_job(&sc->job, sc->waitctx, &ret, func, args,
2290
0
                            sizeof(struct ssl_async_args))) {
2291
0
    case ASYNC_ERR:
2292
0
        sc->rwstate = SSL_NOTHING;
2293
0
        ERR_raise(ERR_LIB_SSL, SSL_R_FAILED_TO_INIT_ASYNC);
2294
0
        return -1;
2295
0
    case ASYNC_PAUSE:
2296
0
        sc->rwstate = SSL_ASYNC_PAUSED;
2297
0
        return -1;
2298
0
    case ASYNC_NO_JOBS:
2299
0
        sc->rwstate = SSL_ASYNC_NO_JOBS;
2300
0
        return -1;
2301
0
    case ASYNC_FINISH:
2302
0
        sc->job = NULL;
2303
0
        return ret;
2304
0
    default:
2305
0
        sc->rwstate = SSL_NOTHING;
2306
0
        ERR_raise(ERR_LIB_SSL, ERR_R_INTERNAL_ERROR);
2307
        /* Shouldn't happen */
2308
0
        return -1;
2309
0
    }
2310
0
}
2311
2312
static int ssl_io_intern(void *vargs)
2313
0
{
2314
0
    struct ssl_async_args *args;
2315
0
    SSL *s;
2316
0
    void *buf;
2317
0
    size_t num;
2318
0
    SSL_CONNECTION *sc;
2319
2320
0
    args = (struct ssl_async_args *)vargs;
2321
0
    s = args->s;
2322
0
    buf = args->buf;
2323
0
    num = args->num;
2324
0
    if ((sc = SSL_CONNECTION_FROM_SSL(s)) == NULL)
2325
0
        return -1;
2326
2327
0
    switch (args->type) {
2328
0
    case READFUNC:
2329
0
        return args->f.func_read(s, buf, num, &sc->asyncrw);
2330
0
    case WRITEFUNC:
2331
0
        return args->f.func_write(s, buf, num, &sc->asyncrw);
2332
0
    case OTHERFUNC:
2333
0
        return args->f.func_other(s);
2334
0
    }
2335
0
    return -1;
2336
0
}
2337
2338
int ssl_read_internal(SSL *s, void *buf, size_t num, size_t *readbytes)
2339
0
{
2340
0
    SSL_CONNECTION *sc = SSL_CONNECTION_FROM_SSL(s);
2341
2342
0
#ifndef OPENSSL_NO_QUIC
2343
0
    if (IS_QUIC(s))
2344
0
        return s->method->ssl_read(s, buf, num, readbytes);
2345
0
#endif
2346
2347
0
    if (sc == NULL)
2348
0
        return -1;
2349
2350
0
    if (sc->handshake_func == NULL) {
2351
0
        ERR_raise(ERR_LIB_SSL, SSL_R_UNINITIALIZED);
2352
0
        return -1;
2353
0
    }
2354
2355
0
    if (sc->shutdown & SSL_RECEIVED_SHUTDOWN) {
2356
0
        sc->rwstate = SSL_NOTHING;
2357
0
        return 0;
2358
0
    }
2359
2360
0
    if (sc->early_data_state == SSL_EARLY_DATA_CONNECT_RETRY
2361
0
                || sc->early_data_state == SSL_EARLY_DATA_ACCEPT_RETRY) {
2362
0
        ERR_raise(ERR_LIB_SSL, ERR_R_SHOULD_NOT_HAVE_BEEN_CALLED);
2363
0
        return 0;
2364
0
    }
2365
    /*
2366
     * If we are a client and haven't received the ServerHello etc then we
2367
     * better do that
2368
     */
2369
0
    if (!ossl_statem_check_finish_init(sc, 0))
2370
0
        return -1;
2371
2372
0
    if ((sc->mode & SSL_MODE_ASYNC) && ASYNC_get_current_job() == NULL) {
2373
0
        struct ssl_async_args args;
2374
0
        int ret;
2375
2376
0
        args.s = s;
2377
0
        args.buf = buf;
2378
0
        args.num = num;
2379
0
        args.type = READFUNC;
2380
0
        args.f.func_read = s->method->ssl_read;
2381
2382
0
        ret = ssl_start_async_job(s, &args, ssl_io_intern);
2383
0
        *readbytes = sc->asyncrw;
2384
0
        return ret;
2385
0
    } else {
2386
0
        return s->method->ssl_read(s, buf, num, readbytes);
2387
0
    }
2388
0
}
2389
2390
int SSL_read(SSL *s, void *buf, int num)
2391
0
{
2392
0
    int ret;
2393
0
    size_t readbytes;
2394
2395
0
    if (num < 0) {
2396
0
        ERR_raise(ERR_LIB_SSL, SSL_R_BAD_LENGTH);
2397
0
        return -1;
2398
0
    }
2399
2400
0
    ret = ssl_read_internal(s, buf, (size_t)num, &readbytes);
2401
2402
    /*
2403
     * The cast is safe here because ret should be <= INT_MAX because num is
2404
     * <= INT_MAX
2405
     */
2406
0
    if (ret > 0)
2407
0
        ret = (int)readbytes;
2408
2409
0
    return ret;
2410
0
}
2411
2412
int SSL_read_ex(SSL *s, void *buf, size_t num, size_t *readbytes)
2413
0
{
2414
0
    int ret = ssl_read_internal(s, buf, num, readbytes);
2415
2416
0
    if (ret < 0)
2417
0
        ret = 0;
2418
0
    return ret;
2419
0
}
2420
2421
int SSL_read_early_data(SSL *s, void *buf, size_t num, size_t *readbytes)
2422
0
{
2423
0
    int ret;
2424
0
    SSL_CONNECTION *sc = SSL_CONNECTION_FROM_SSL_ONLY(s);
2425
2426
    /* TODO(QUIC 0RTT): 0-RTT support */
2427
0
    if (sc == NULL || !sc->server) {
2428
0
        ERR_raise(ERR_LIB_SSL, ERR_R_SHOULD_NOT_HAVE_BEEN_CALLED);
2429
0
        return SSL_READ_EARLY_DATA_ERROR;
2430
0
    }
2431
2432
0
    switch (sc->early_data_state) {
2433
0
    case SSL_EARLY_DATA_NONE:
2434
0
        if (!SSL_in_before(s)) {
2435
0
            ERR_raise(ERR_LIB_SSL, ERR_R_SHOULD_NOT_HAVE_BEEN_CALLED);
2436
0
            return SSL_READ_EARLY_DATA_ERROR;
2437
0
        }
2438
        /* fall through */
2439
2440
0
    case SSL_EARLY_DATA_ACCEPT_RETRY:
2441
0
        sc->early_data_state = SSL_EARLY_DATA_ACCEPTING;
2442
0
        ret = SSL_accept(s);
2443
0
        if (ret <= 0) {
2444
            /* NBIO or error */
2445
0
            sc->early_data_state = SSL_EARLY_DATA_ACCEPT_RETRY;
2446
0
            return SSL_READ_EARLY_DATA_ERROR;
2447
0
        }
2448
        /* fall through */
2449
2450
0
    case SSL_EARLY_DATA_READ_RETRY:
2451
0
        if (sc->ext.early_data == SSL_EARLY_DATA_ACCEPTED) {
2452
0
            sc->early_data_state = SSL_EARLY_DATA_READING;
2453
0
            ret = SSL_read_ex(s, buf, num, readbytes);
2454
            /*
2455
             * State machine will update early_data_state to
2456
             * SSL_EARLY_DATA_FINISHED_READING if we get an EndOfEarlyData
2457
             * message
2458
             */
2459
0
            if (ret > 0 || (ret <= 0 && sc->early_data_state
2460
0
                                        != SSL_EARLY_DATA_FINISHED_READING)) {
2461
0
                sc->early_data_state = SSL_EARLY_DATA_READ_RETRY;
2462
0
                return ret > 0 ? SSL_READ_EARLY_DATA_SUCCESS
2463
0
                               : SSL_READ_EARLY_DATA_ERROR;
2464
0
            }
2465
0
        } else {
2466
0
            sc->early_data_state = SSL_EARLY_DATA_FINISHED_READING;
2467
0
        }
2468
0
        *readbytes = 0;
2469
0
        return SSL_READ_EARLY_DATA_FINISH;
2470
2471
0
    default:
2472
0
        ERR_raise(ERR_LIB_SSL, ERR_R_SHOULD_NOT_HAVE_BEEN_CALLED);
2473
0
        return SSL_READ_EARLY_DATA_ERROR;
2474
0
    }
2475
0
}
2476
2477
int SSL_get_early_data_status(const SSL *s)
2478
0
{
2479
0
    const SSL_CONNECTION *sc = SSL_CONNECTION_FROM_CONST_SSL_ONLY(s);
2480
2481
    /* TODO(QUIC 0RTT): 0-RTT support */
2482
0
    if (sc == NULL)
2483
0
        return 0;
2484
2485
0
    return sc->ext.early_data;
2486
0
}
2487
2488
static int ssl_peek_internal(SSL *s, void *buf, size_t num, size_t *readbytes)
2489
0
{
2490
0
    SSL_CONNECTION *sc = SSL_CONNECTION_FROM_SSL(s);
2491
2492
0
#ifndef OPENSSL_NO_QUIC
2493
0
    if (IS_QUIC(s))
2494
0
        return s->method->ssl_peek(s, buf, num, readbytes);
2495
0
#endif
2496
2497
0
    if (sc == NULL)
2498
0
        return 0;
2499
2500
0
    if (sc->handshake_func == NULL) {
2501
0
        ERR_raise(ERR_LIB_SSL, SSL_R_UNINITIALIZED);
2502
0
        return -1;
2503
0
    }
2504
2505
0
    if (sc->shutdown & SSL_RECEIVED_SHUTDOWN) {
2506
0
        return 0;
2507
0
    }
2508
0
    if ((sc->mode & SSL_MODE_ASYNC) && ASYNC_get_current_job() == NULL) {
2509
0
        struct ssl_async_args args;
2510
0
        int ret;
2511
2512
0
        args.s = s;
2513
0
        args.buf = buf;
2514
0
        args.num = num;
2515
0
        args.type = READFUNC;
2516
0
        args.f.func_read = s->method->ssl_peek;
2517
2518
0
        ret = ssl_start_async_job(s, &args, ssl_io_intern);
2519
0
        *readbytes = sc->asyncrw;
2520
0
        return ret;
2521
0
    } else {
2522
0
        return s->method->ssl_peek(s, buf, num, readbytes);
2523
0
    }
2524
0
}
2525
2526
int SSL_peek(SSL *s, void *buf, int num)
2527
0
{
2528
0
    int ret;
2529
0
    size_t readbytes;
2530
2531
0
    if (num < 0) {
2532
0
        ERR_raise(ERR_LIB_SSL, SSL_R_BAD_LENGTH);
2533
0
        return -1;
2534
0
    }
2535
2536
0
    ret = ssl_peek_internal(s, buf, (size_t)num, &readbytes);
2537
2538
    /*
2539
     * The cast is safe here because ret should be <= INT_MAX because num is
2540
     * <= INT_MAX
2541
     */
2542
0
    if (ret > 0)
2543
0
        ret = (int)readbytes;
2544
2545
0
    return ret;
2546
0
}
2547
2548
2549
int SSL_peek_ex(SSL *s, void *buf, size_t num, size_t *readbytes)
2550
0
{
2551
0
    int ret = ssl_peek_internal(s, buf, num, readbytes);
2552
2553
0
    if (ret < 0)
2554
0
        ret = 0;
2555
0
    return ret;
2556
0
}
2557
2558
int ssl_write_internal(SSL *s, const void *buf, size_t num,
2559
                       uint64_t flags, size_t *written)
2560
0
{
2561
0
    SSL_CONNECTION *sc = SSL_CONNECTION_FROM_SSL(s);
2562
2563
0
#ifndef OPENSSL_NO_QUIC
2564
0
    if (IS_QUIC(s))
2565
0
        return ossl_quic_write_flags(s, buf, num, flags, written);
2566
0
#endif
2567
2568
0
    if (sc == NULL)
2569
0
        return 0;
2570
2571
0
    if (sc->handshake_func == NULL) {
2572
0
        ERR_raise(ERR_LIB_SSL, SSL_R_UNINITIALIZED);
2573
0
        return -1;
2574
0
    }
2575
2576
0
    if (sc->shutdown & SSL_SENT_SHUTDOWN) {
2577
0
        sc->rwstate = SSL_NOTHING;
2578
0
        ERR_raise(ERR_LIB_SSL, SSL_R_PROTOCOL_IS_SHUTDOWN);
2579
0
        return -1;
2580
0
    }
2581
2582
0
    if (flags != 0) {
2583
0
        ERR_raise(ERR_LIB_SSL, SSL_R_UNSUPPORTED_WRITE_FLAG);
2584
0
        return -1;
2585
0
    }
2586
2587
0
    if (sc->early_data_state == SSL_EARLY_DATA_CONNECT_RETRY
2588
0
                || sc->early_data_state == SSL_EARLY_DATA_ACCEPT_RETRY
2589
0
                || sc->early_data_state == SSL_EARLY_DATA_READ_RETRY) {
2590
0
        ERR_raise(ERR_LIB_SSL, ERR_R_SHOULD_NOT_HAVE_BEEN_CALLED);
2591
0
        return 0;
2592
0
    }
2593
    /* If we are a client and haven't sent the Finished we better do that */
2594
0
    if (!ossl_statem_check_finish_init(sc, 1))
2595
0
        return -1;
2596
2597
0
    if ((sc->mode & SSL_MODE_ASYNC) && ASYNC_get_current_job() == NULL) {
2598
0
        int ret;
2599
0
        struct ssl_async_args args;
2600
2601
0
        args.s = s;
2602
0
        args.buf = (void *)buf;
2603
0
        args.num = num;
2604
0
        args.type = WRITEFUNC;
2605
0
        args.f.func_write = s->method->ssl_write;
2606
2607
0
        ret = ssl_start_async_job(s, &args, ssl_io_intern);
2608
0
        *written = sc->asyncrw;
2609
0
        return ret;
2610
0
    } else {
2611
0
        return s->method->ssl_write(s, buf, num, written);
2612
0
    }
2613
0
}
2614
2615
ossl_ssize_t SSL_sendfile(SSL *s, int fd, off_t offset, size_t size, int flags)
2616
0
{
2617
0
    ossl_ssize_t ret;
2618
0
    SSL_CONNECTION *sc = SSL_CONNECTION_FROM_SSL_ONLY(s);
2619
2620
0
    if (sc == NULL)
2621
0
        return 0;
2622
2623
0
    if (sc->handshake_func == NULL) {
2624
0
        ERR_raise(ERR_LIB_SSL, SSL_R_UNINITIALIZED);
2625
0
        return -1;
2626
0
    }
2627
2628
0
    if (sc->shutdown & SSL_SENT_SHUTDOWN) {
2629
0
        sc->rwstate = SSL_NOTHING;
2630
0
        ERR_raise(ERR_LIB_SSL, SSL_R_PROTOCOL_IS_SHUTDOWN);
2631
0
        return -1;
2632
0
    }
2633
2634
0
    if (!BIO_get_ktls_send(sc->wbio)) {
2635
0
        ERR_raise(ERR_LIB_SSL, SSL_R_UNINITIALIZED);
2636
0
        return -1;
2637
0
    }
2638
2639
    /* If we have an alert to send, lets send it */
2640
0
    if (sc->s3.alert_dispatch > 0) {
2641
0
        ret = (ossl_ssize_t)s->method->ssl_dispatch_alert(s);
2642
0
        if (ret <= 0) {
2643
            /* SSLfatal() already called if appropriate */
2644
0
            return ret;
2645
0
        }
2646
        /* if it went, fall through and send more stuff */
2647
0
    }
2648
2649
0
    sc->rwstate = SSL_WRITING;
2650
0
    if (BIO_flush(sc->wbio) <= 0) {
2651
0
        if (!BIO_should_retry(sc->wbio)) {
2652
0
            sc->rwstate = SSL_NOTHING;
2653
0
        } else {
2654
0
#ifdef EAGAIN
2655
0
            set_sys_error(EAGAIN);
2656
0
#endif
2657
0
        }
2658
0
        return -1;
2659
0
    }
2660
2661
0
#ifdef OPENSSL_NO_KTLS
2662
0
    ERR_raise_data(ERR_LIB_SSL, ERR_R_INTERNAL_ERROR,
2663
0
                   "can't call ktls_sendfile(), ktls disabled");
2664
0
    return -1;
2665
#else
2666
    ret = ktls_sendfile(SSL_get_wfd(s), fd, offset, size, flags);
2667
    if (ret < 0) {
2668
#if defined(EAGAIN) && defined(EINTR) && defined(EBUSY)
2669
        if ((get_last_sys_error() == EAGAIN) ||
2670
            (get_last_sys_error() == EINTR) ||
2671
            (get_last_sys_error() == EBUSY))
2672
            BIO_set_retry_write(sc->wbio);
2673
        else
2674
#endif
2675
            ERR_raise_data(ERR_LIB_SYS, get_last_sys_error(),
2676
                           "ktls_sendfile failure");
2677
        return ret;
2678
    }
2679
    sc->rwstate = SSL_NOTHING;
2680
    return ret;
2681
#endif
2682
0
}
2683
2684
int SSL_write(SSL *s, const void *buf, int num)
2685
0
{
2686
0
    int ret;
2687
0
    size_t written;
2688
2689
0
    if (num < 0) {
2690
0
        ERR_raise(ERR_LIB_SSL, SSL_R_BAD_LENGTH);
2691
0
        return -1;
2692
0
    }
2693
2694
0
    ret = ssl_write_internal(s, buf, (size_t)num, 0, &written);
2695
2696
    /*
2697
     * The cast is safe here because ret should be <= INT_MAX because num is
2698
     * <= INT_MAX
2699
     */
2700
0
    if (ret > 0)
2701
0
        ret = (int)written;
2702
2703
0
    return ret;
2704
0
}
2705
2706
int SSL_write_ex(SSL *s, const void *buf, size_t num, size_t *written)
2707
0
{
2708
0
    return SSL_write_ex2(s, buf, num, 0, written);
2709
0
}
2710
2711
int SSL_write_ex2(SSL *s, const void *buf, size_t num, uint64_t flags,
2712
                  size_t *written)
2713
0
{
2714
0
    int ret = ssl_write_internal(s, buf, num, flags, written);
2715
2716
0
    if (ret < 0)
2717
0
        ret = 0;
2718
0
    return ret;
2719
0
}
2720
2721
int SSL_write_early_data(SSL *s, const void *buf, size_t num, size_t *written)
2722
0
{
2723
0
    int ret, early_data_state;
2724
0
    size_t writtmp;
2725
0
    uint32_t partialwrite;
2726
0
    SSL_CONNECTION *sc = SSL_CONNECTION_FROM_SSL_ONLY(s);
2727
2728
    /* TODO(QUIC 0RTT): This will need special handling for QUIC */
2729
0
    if (sc == NULL)
2730
0
        return 0;
2731
2732
0
    switch (sc->early_data_state) {
2733
0
    case SSL_EARLY_DATA_NONE:
2734
0
        if (sc->server
2735
0
                || !SSL_in_before(s)
2736
0
                || ((sc->session == NULL || sc->session->ext.max_early_data == 0)
2737
0
                     && (sc->psk_use_session_cb == NULL))) {
2738
0
            ERR_raise(ERR_LIB_SSL, ERR_R_SHOULD_NOT_HAVE_BEEN_CALLED);
2739
0
            return 0;
2740
0
        }
2741
        /* fall through */
2742
2743
0
    case SSL_EARLY_DATA_CONNECT_RETRY:
2744
0
        sc->early_data_state = SSL_EARLY_DATA_CONNECTING;
2745
0
        ret = SSL_connect(s);
2746
0
        if (ret <= 0) {
2747
            /* NBIO or error */
2748
0
            sc->early_data_state = SSL_EARLY_DATA_CONNECT_RETRY;
2749
0
            return 0;
2750
0
        }
2751
        /* fall through */
2752
2753
0
    case SSL_EARLY_DATA_WRITE_RETRY:
2754
0
        sc->early_data_state = SSL_EARLY_DATA_WRITING;
2755
        /*
2756
         * We disable partial write for early data because we don't keep track
2757
         * of how many bytes we've written between the SSL_write_ex() call and
2758
         * the flush if the flush needs to be retried)
2759
         */
2760
0
        partialwrite = sc->mode & SSL_MODE_ENABLE_PARTIAL_WRITE;
2761
0
        sc->mode &= ~SSL_MODE_ENABLE_PARTIAL_WRITE;
2762
0
        ret = SSL_write_ex(s, buf, num, &writtmp);
2763
0
        sc->mode |= partialwrite;
2764
0
        if (!ret) {
2765
0
            sc->early_data_state = SSL_EARLY_DATA_WRITE_RETRY;
2766
0
            return ret;
2767
0
        }
2768
0
        sc->early_data_state = SSL_EARLY_DATA_WRITE_FLUSH;
2769
        /* fall through */
2770
2771
0
    case SSL_EARLY_DATA_WRITE_FLUSH:
2772
        /* The buffering BIO is still in place so we need to flush it */
2773
0
        if (statem_flush(sc) != 1)
2774
0
            return 0;
2775
0
        *written = num;
2776
0
        sc->early_data_state = SSL_EARLY_DATA_WRITE_RETRY;
2777
0
        return 1;
2778
2779
0
    case SSL_EARLY_DATA_FINISHED_READING:
2780
0
    case SSL_EARLY_DATA_READ_RETRY:
2781
0
        early_data_state = sc->early_data_state;
2782
        /* We are a server writing to an unauthenticated client */
2783
0
        sc->early_data_state = SSL_EARLY_DATA_UNAUTH_WRITING;
2784
0
        ret = SSL_write_ex(s, buf, num, written);
2785
        /* The buffering BIO is still in place */
2786
0
        if (ret)
2787
0
            (void)BIO_flush(sc->wbio);
2788
0
        sc->early_data_state = early_data_state;
2789
0
        return ret;
2790
2791
0
    default:
2792
0
        ERR_raise(ERR_LIB_SSL, ERR_R_SHOULD_NOT_HAVE_BEEN_CALLED);
2793
0
        return 0;
2794
0
    }
2795
0
}
2796
2797
int SSL_shutdown(SSL *s)
2798
0
{
2799
    /*
2800
     * Note that this function behaves differently from what one might
2801
     * expect.  Return values are 0 for no success (yet), 1 for success; but
2802
     * calling it once is usually not enough, even if blocking I/O is used
2803
     * (see ssl3_shutdown).
2804
     */
2805
0
    SSL_CONNECTION *sc = SSL_CONNECTION_FROM_SSL(s);
2806
2807
0
#ifndef OPENSSL_NO_QUIC
2808
0
    if (IS_QUIC(s))
2809
0
        return ossl_quic_conn_shutdown(s, 0, NULL, 0);
2810
0
#endif
2811
2812
0
    if (sc == NULL)
2813
0
        return -1;
2814
2815
0
    if (sc->handshake_func == NULL) {
2816
0
        ERR_raise(ERR_LIB_SSL, SSL_R_UNINITIALIZED);
2817
0
        return -1;
2818
0
    }
2819
2820
0
    if (!SSL_in_init(s)) {
2821
0
        if ((sc->mode & SSL_MODE_ASYNC) && ASYNC_get_current_job() == NULL) {
2822
0
            struct ssl_async_args args;
2823
2824
0
            memset(&args, 0, sizeof(args));
2825
0
            args.s = s;
2826
0
            args.type = OTHERFUNC;
2827
0
            args.f.func_other = s->method->ssl_shutdown;
2828
2829
0
            return ssl_start_async_job(s, &args, ssl_io_intern);
2830
0
        } else {
2831
0
            return s->method->ssl_shutdown(s);
2832
0
        }
2833
0
    } else {
2834
0
        ERR_raise(ERR_LIB_SSL, SSL_R_SHUTDOWN_WHILE_IN_INIT);
2835
0
        return -1;
2836
0
    }
2837
0
}
2838
2839
int SSL_key_update(SSL *s, int updatetype)
2840
0
{
2841
0
    SSL_CONNECTION *sc = SSL_CONNECTION_FROM_SSL(s);
2842
2843
0
#ifndef OPENSSL_NO_QUIC
2844
0
    if (IS_QUIC(s))
2845
0
        return ossl_quic_key_update(s, updatetype);
2846
0
#endif
2847
2848
0
    if (sc == NULL)
2849
0
        return 0;
2850
2851
0
    if (!SSL_CONNECTION_IS_TLS13(sc)) {
2852
0
        ERR_raise(ERR_LIB_SSL, SSL_R_WRONG_SSL_VERSION);
2853
0
        return 0;
2854
0
    }
2855
2856
0
    if (updatetype != SSL_KEY_UPDATE_NOT_REQUESTED
2857
0
            && updatetype != SSL_KEY_UPDATE_REQUESTED) {
2858
0
        ERR_raise(ERR_LIB_SSL, SSL_R_INVALID_KEY_UPDATE_TYPE);
2859
0
        return 0;
2860
0
    }
2861
2862
0
    if (!SSL_is_init_finished(s)) {
2863
0
        ERR_raise(ERR_LIB_SSL, SSL_R_STILL_IN_INIT);
2864
0
        return 0;
2865
0
    }
2866
2867
0
    if (RECORD_LAYER_write_pending(&sc->rlayer)) {
2868
0
        ERR_raise(ERR_LIB_SSL, SSL_R_BAD_WRITE_RETRY);
2869
0
        return 0;
2870
0
    }
2871
2872
0
    ossl_statem_set_in_init(sc, 1);
2873
0
    sc->key_update = updatetype;
2874
0
    return 1;
2875
0
}
2876
2877
int SSL_get_key_update_type(const SSL *s)
2878
0
{
2879
0
    const SSL_CONNECTION *sc = SSL_CONNECTION_FROM_CONST_SSL(s);
2880
2881
0
#ifndef OPENSSL_NO_QUIC
2882
0
    if (IS_QUIC(s))
2883
0
        return ossl_quic_get_key_update_type(s);
2884
0
#endif
2885
2886
0
    if (sc == NULL)
2887
0
        return 0;
2888
2889
0
    return sc->key_update;
2890
0
}
2891
2892
/*
2893
 * Can we accept a renegotiation request?  If yes, set the flag and
2894
 * return 1 if yes. If not, raise error and return 0.
2895
 */
2896
static int can_renegotiate(const SSL_CONNECTION *sc)
2897
0
{
2898
0
    if (SSL_CONNECTION_IS_TLS13(sc)) {
2899
0
        ERR_raise(ERR_LIB_SSL, SSL_R_WRONG_SSL_VERSION);
2900
0
        return 0;
2901
0
    }
2902
2903
0
    if ((sc->options & SSL_OP_NO_RENEGOTIATION) != 0) {
2904
0
        ERR_raise(ERR_LIB_SSL, SSL_R_NO_RENEGOTIATION);
2905
0
        return 0;
2906
0
    }
2907
2908
0
    return 1;
2909
0
}
2910
2911
int SSL_renegotiate(SSL *s)
2912
0
{
2913
0
    SSL_CONNECTION *sc = SSL_CONNECTION_FROM_SSL_ONLY(s);
2914
2915
0
    if (sc == NULL)
2916
0
        return 0;
2917
2918
0
    if (!can_renegotiate(sc))
2919
0
        return 0;
2920
2921
0
    sc->renegotiate = 1;
2922
0
    sc->new_session = 1;
2923
0
    return s->method->ssl_renegotiate(s);
2924
0
}
2925
2926
int SSL_renegotiate_abbreviated(SSL *s)
2927
0
{
2928
0
    SSL_CONNECTION *sc = SSL_CONNECTION_FROM_SSL_ONLY(s);
2929
2930
0
    if (sc == NULL)
2931
0
        return 0;
2932
2933
0
    if (!can_renegotiate(sc))
2934
0
        return 0;
2935
2936
0
    sc->renegotiate = 1;
2937
0
    sc->new_session = 0;
2938
0
    return s->method->ssl_renegotiate(s);
2939
0
}
2940
2941
int SSL_renegotiate_pending(const SSL *s)
2942
0
{
2943
0
    SSL_CONNECTION *sc = SSL_CONNECTION_FROM_SSL_ONLY(s);
2944
2945
0
    if (sc == NULL)
2946
0
        return 0;
2947
2948
    /*
2949
     * becomes true when negotiation is requested; false again once a
2950
     * handshake has finished
2951
     */
2952
0
    return (sc->renegotiate != 0);
2953
0
}
2954
2955
int SSL_new_session_ticket(SSL *s)
2956
0
{
2957
0
    SSL_CONNECTION *sc = SSL_CONNECTION_FROM_SSL(s);
2958
2959
0
    if (sc == NULL)
2960
0
        return 0;
2961
2962
    /* If we are in init because we're sending tickets, okay to send more. */
2963
0
    if ((SSL_in_init(s) && sc->ext.extra_tickets_expected == 0)
2964
0
            || SSL_IS_FIRST_HANDSHAKE(sc) || !sc->server
2965
0
            || !SSL_CONNECTION_IS_TLS13(sc))
2966
0
        return 0;
2967
0
    sc->ext.extra_tickets_expected++;
2968
0
    if (!RECORD_LAYER_write_pending(&sc->rlayer) && !SSL_in_init(s))
2969
0
        ossl_statem_set_in_init(sc, 1);
2970
0
    return 1;
2971
0
}
2972
2973
long SSL_ctrl(SSL *s, int cmd, long larg, void *parg)
2974
0
{
2975
0
    return ossl_ctrl_internal(s, cmd, larg, parg, /*no_quic=*/0);
2976
0
}
2977
2978
long ossl_ctrl_internal(SSL *s, int cmd, long larg, void *parg, int no_quic)
2979
0
{
2980
0
    long l;
2981
0
    SSL_CONNECTION *sc = SSL_CONNECTION_FROM_SSL(s);
2982
2983
    /*
2984
     * Routing of ctrl calls for QUIC is a little counterintuitive:
2985
     *
2986
     *   - Firstly (no_quic=0), we pass the ctrl directly to our QUIC
2987
     *     implementation in case it wants to handle the ctrl specially.
2988
     *
2989
     *   - If our QUIC implementation does not care about the ctrl, it
2990
     *     will reenter this function with no_quic=1 and we will try to handle
2991
     *     it directly using the QCSO SSL object stub (not the handshake layer
2992
     *     SSL object). This is important for e.g. the version configuration
2993
     *     ctrls below, which must use s->defltmeth (and not sc->defltmeth).
2994
     *
2995
     *   - If we don't handle a ctrl here specially, then processing is
2996
     *     redirected to the handshake layer SSL object.
2997
     */
2998
0
    if (!no_quic && IS_QUIC(s))
2999
0
        return s->method->ssl_ctrl(s, cmd, larg, parg);
3000
3001
0
    if (sc == NULL)
3002
0
        return 0;
3003
3004
0
    switch (cmd) {
3005
0
    case SSL_CTRL_GET_READ_AHEAD:
3006
0
        return RECORD_LAYER_get_read_ahead(&sc->rlayer);
3007
0
    case SSL_CTRL_SET_READ_AHEAD:
3008
0
        l = RECORD_LAYER_get_read_ahead(&sc->rlayer);
3009
0
        RECORD_LAYER_set_read_ahead(&sc->rlayer, larg);
3010
0
        return l;
3011
3012
0
    case SSL_CTRL_MODE:
3013
0
    {
3014
0
        OSSL_PARAM options[2], *opts = options;
3015
3016
0
        sc->mode |= larg;
3017
3018
0
        *opts++ = OSSL_PARAM_construct_uint32(OSSL_LIBSSL_RECORD_LAYER_PARAM_MODE,
3019
0
                                              &sc->mode);
3020
0
        *opts = OSSL_PARAM_construct_end();
3021
3022
        /* Ignore return value */
3023
0
        sc->rlayer.rrlmethod->set_options(sc->rlayer.rrl, options);
3024
3025
0
        return sc->mode;
3026
0
    }
3027
0
    case SSL_CTRL_CLEAR_MODE:
3028
0
        return (sc->mode &= ~larg);
3029
0
    case SSL_CTRL_GET_MAX_CERT_LIST:
3030
0
        return (long)sc->max_cert_list;
3031
0
    case SSL_CTRL_SET_MAX_CERT_LIST:
3032
0
        if (larg < 0)
3033
0
            return 0;
3034
0
        l = (long)sc->max_cert_list;
3035
0
        sc->max_cert_list = (size_t)larg;
3036
0
        return l;
3037
0
    case SSL_CTRL_SET_MAX_SEND_FRAGMENT:
3038
0
        if (larg < 512 || larg > SSL3_RT_MAX_PLAIN_LENGTH)
3039
0
            return 0;
3040
#ifndef OPENSSL_NO_KTLS
3041
        if (sc->wbio != NULL && BIO_get_ktls_send(sc->wbio))
3042
            return 0;
3043
#endif /* OPENSSL_NO_KTLS */
3044
0
        sc->max_send_fragment = larg;
3045
0
        if (sc->max_send_fragment < sc->split_send_fragment)
3046
0
            sc->split_send_fragment = sc->max_send_fragment;
3047
0
        sc->rlayer.wrlmethod->set_max_frag_len(sc->rlayer.wrl, larg);
3048
0
        return 1;
3049
0
    case SSL_CTRL_SET_SPLIT_SEND_FRAGMENT:
3050
0
        if ((size_t)larg > sc->max_send_fragment || larg == 0)
3051
0
            return 0;
3052
0
        sc->split_send_fragment = larg;
3053
0
        return 1;
3054
0
    case SSL_CTRL_SET_MAX_PIPELINES:
3055
0
        if (larg < 1 || larg > SSL_MAX_PIPELINES)
3056
0
            return 0;
3057
0
        sc->max_pipelines = larg;
3058
0
        if (sc->rlayer.rrlmethod->set_max_pipelines != NULL)
3059
0
            sc->rlayer.rrlmethod->set_max_pipelines(sc->rlayer.rrl, (size_t)larg);
3060
0
        return 1;
3061
0
    case SSL_CTRL_GET_RI_SUPPORT:
3062
0
        return sc->s3.send_connection_binding;
3063
0
    case SSL_CTRL_SET_RETRY_VERIFY:
3064
0
        sc->rwstate = SSL_RETRY_VERIFY;
3065
0
        return 1;
3066
0
    case SSL_CTRL_CERT_FLAGS:
3067
0
        return (sc->cert->cert_flags |= larg);
3068
0
    case SSL_CTRL_CLEAR_CERT_FLAGS:
3069
0
        return (sc->cert->cert_flags &= ~larg);
3070
3071
0
    case SSL_CTRL_GET_RAW_CIPHERLIST:
3072
0
        if (parg) {
3073
0
            if (sc->s3.tmp.ciphers_raw == NULL)
3074
0
                return 0;
3075
0
            *(unsigned char **)parg = sc->s3.tmp.ciphers_raw;
3076
0
            return (int)sc->s3.tmp.ciphers_rawlen;
3077
0
        } else {
3078
0
            return TLS_CIPHER_LEN;
3079
0
        }
3080
0
    case SSL_CTRL_GET_EXTMS_SUPPORT:
3081
0
        if (!sc->session || SSL_in_init(s) || ossl_statem_get_in_handshake(sc))
3082
0
            return -1;
3083
0
        if (sc->session->flags & SSL_SESS_FLAG_EXTMS)
3084
0
            return 1;
3085
0
        else
3086
0
            return 0;
3087
0
    case SSL_CTRL_SET_MIN_PROTO_VERSION:
3088
0
        return ssl_check_allowed_versions(larg, sc->max_proto_version)
3089
0
               && ssl_set_version_bound(s->defltmeth->version, (int)larg,
3090
0
                                        &sc->min_proto_version);
3091
0
    case SSL_CTRL_GET_MIN_PROTO_VERSION:
3092
0
        return sc->min_proto_version;
3093
0
    case SSL_CTRL_SET_MAX_PROTO_VERSION:
3094
0
        return ssl_check_allowed_versions(sc->min_proto_version, larg)
3095
0
               && ssl_set_version_bound(s->defltmeth->version, (int)larg,
3096
0
                                        &sc->max_proto_version);
3097
0
    case SSL_CTRL_GET_MAX_PROTO_VERSION:
3098
0
        return sc->max_proto_version;
3099
0
    default:
3100
0
        if (IS_QUIC(s))
3101
0
            return SSL_ctrl((SSL *)sc, cmd, larg, parg);
3102
0
        else
3103
0
            return s->method->ssl_ctrl(s, cmd, larg, parg);
3104
0
    }
3105
0
}
3106
3107
long SSL_callback_ctrl(SSL *s, int cmd, void (*fp) (void))
3108
0
{
3109
0
    return s->method->ssl_callback_ctrl(s, cmd, fp);
3110
0
}
3111
3112
LHASH_OF(SSL_SESSION) *SSL_CTX_sessions(SSL_CTX *ctx)
3113
0
{
3114
0
    return ctx->sessions;
3115
0
}
3116
3117
static int ssl_tsan_load(SSL_CTX *ctx, TSAN_QUALIFIER int *stat)
3118
0
{
3119
0
    int res = 0;
3120
3121
0
    if (ssl_tsan_lock(ctx)) {
3122
0
        res = tsan_load(stat);
3123
0
        ssl_tsan_unlock(ctx);
3124
0
    }
3125
0
    return res;
3126
0
}
3127
3128
long SSL_CTX_ctrl(SSL_CTX *ctx, int cmd, long larg, void *parg)
3129
0
{
3130
0
    long l;
3131
3132
    /* For some cases with ctx == NULL or larg == 1 perform syntax checks */
3133
0
    if (cmd == SSL_CTRL_SET_GROUPS_LIST && larg == 1)
3134
0
        return tls1_set_groups_list(ctx, NULL, NULL, NULL, NULL, NULL, NULL, parg);
3135
0
    if (ctx == NULL) {
3136
0
        switch (cmd) {
3137
0
        case SSL_CTRL_SET_SIGALGS_LIST:
3138
0
        case SSL_CTRL_SET_CLIENT_SIGALGS_LIST:
3139
0
            return tls1_set_sigalgs_list(ctx, NULL, parg, 0);
3140
0
        default:
3141
0
            return 0;
3142
0
        }
3143
0
    }
3144
3145
0
    switch (cmd) {
3146
0
    case SSL_CTRL_GET_READ_AHEAD:
3147
0
        return ctx->read_ahead;
3148
0
    case SSL_CTRL_SET_READ_AHEAD:
3149
0
        l = ctx->read_ahead;
3150
0
        ctx->read_ahead = larg;
3151
0
        return l;
3152
3153
0
    case SSL_CTRL_SET_MSG_CALLBACK_ARG:
3154
0
        ctx->msg_callback_arg = parg;
3155
0
        return 1;
3156
3157
0
    case SSL_CTRL_GET_MAX_CERT_LIST:
3158
0
        return (long)ctx->max_cert_list;
3159
0
    case SSL_CTRL_SET_MAX_CERT_LIST:
3160
0
        if (larg < 0)
3161
0
            return 0;
3162
0
        l = (long)ctx->max_cert_list;
3163
0
        ctx->max_cert_list = (size_t)larg;
3164
0
        return l;
3165
3166
0
    case SSL_CTRL_SET_SESS_CACHE_SIZE:
3167
0
        if (larg < 0)
3168
0
            return 0;
3169
0
        l = (long)ctx->session_cache_size;
3170
0
        ctx->session_cache_size = (size_t)larg;
3171
0
        return l;
3172
0
    case SSL_CTRL_GET_SESS_CACHE_SIZE:
3173
0
        return (long)ctx->session_cache_size;
3174
0
    case SSL_CTRL_SET_SESS_CACHE_MODE:
3175
0
        l = ctx->session_cache_mode;
3176
0
        ctx->session_cache_mode = larg;
3177
0
        return l;
3178
0
    case SSL_CTRL_GET_SESS_CACHE_MODE:
3179
0
        return ctx->session_cache_mode;
3180
3181
0
    case SSL_CTRL_SESS_NUMBER:
3182
0
        return lh_SSL_SESSION_num_items(ctx->sessions);
3183
0
    case SSL_CTRL_SESS_CONNECT:
3184
0
        return ssl_tsan_load(ctx, &ctx->stats.sess_connect);
3185
0
    case SSL_CTRL_SESS_CONNECT_GOOD:
3186
0
        return ssl_tsan_load(ctx, &ctx->stats.sess_connect_good);
3187
0
    case SSL_CTRL_SESS_CONNECT_RENEGOTIATE:
3188
0
        return ssl_tsan_load(ctx, &ctx->stats.sess_connect_renegotiate);
3189
0
    case SSL_CTRL_SESS_ACCEPT:
3190
0
        return ssl_tsan_load(ctx, &ctx->stats.sess_accept);
3191
0
    case SSL_CTRL_SESS_ACCEPT_GOOD:
3192
0
        return ssl_tsan_load(ctx, &ctx->stats.sess_accept_good);
3193
0
    case SSL_CTRL_SESS_ACCEPT_RENEGOTIATE:
3194
0
        return ssl_tsan_load(ctx, &ctx->stats.sess_accept_renegotiate);
3195
0
    case SSL_CTRL_SESS_HIT:
3196
0
        return ssl_tsan_load(ctx, &ctx->stats.sess_hit);
3197
0
    case SSL_CTRL_SESS_CB_HIT:
3198
0
        return ssl_tsan_load(ctx, &ctx->stats.sess_cb_hit);
3199
0
    case SSL_CTRL_SESS_MISSES:
3200
0
        return ssl_tsan_load(ctx, &ctx->stats.sess_miss);
3201
0
    case SSL_CTRL_SESS_TIMEOUTS:
3202
0
        return ssl_tsan_load(ctx, &ctx->stats.sess_timeout);
3203
0
    case SSL_CTRL_SESS_CACHE_FULL:
3204
0
        return ssl_tsan_load(ctx, &ctx->stats.sess_cache_full);
3205
0
    case SSL_CTRL_MODE:
3206
0
        return (ctx->mode |= larg);
3207
0
    case SSL_CTRL_CLEAR_MODE:
3208
0
        return (ctx->mode &= ~larg);
3209
0
    case SSL_CTRL_SET_MAX_SEND_FRAGMENT:
3210
0
        if (larg < 512 || larg > SSL3_RT_MAX_PLAIN_LENGTH)
3211
0
            return 0;
3212
0
        ctx->max_send_fragment = larg;
3213
0
        if (ctx->max_send_fragment < ctx->split_send_fragment)
3214
0
            ctx->split_send_fragment = ctx->max_send_fragment;
3215
0
        return 1;
3216
0
    case SSL_CTRL_SET_SPLIT_SEND_FRAGMENT:
3217
0
        if ((size_t)larg > ctx->max_send_fragment || larg == 0)
3218
0
            return 0;
3219
0
        ctx->split_send_fragment = larg;
3220
0
        return 1;
3221
0
    case SSL_CTRL_SET_MAX_PIPELINES:
3222
0
        if (larg < 1 || larg > SSL_MAX_PIPELINES)
3223
0
            return 0;
3224
0
        ctx->max_pipelines = larg;
3225
0
        return 1;
3226
0
    case SSL_CTRL_CERT_FLAGS:
3227
0
        return (ctx->cert->cert_flags |= larg);
3228
0
    case SSL_CTRL_CLEAR_CERT_FLAGS:
3229
0
        return (ctx->cert->cert_flags &= ~larg);
3230
0
    case SSL_CTRL_SET_MIN_PROTO_VERSION:
3231
0
        return ssl_check_allowed_versions(larg, ctx->max_proto_version)
3232
0
               && ssl_set_version_bound(ctx->method->version, (int)larg,
3233
0
                                        &ctx->min_proto_version);
3234
0
    case SSL_CTRL_GET_MIN_PROTO_VERSION:
3235
0
        return ctx->min_proto_version;
3236
0
    case SSL_CTRL_SET_MAX_PROTO_VERSION:
3237
0
        return ssl_check_allowed_versions(ctx->min_proto_version, larg)
3238
0
               && ssl_set_version_bound(ctx->method->version, (int)larg,
3239
0
                                        &ctx->max_proto_version);
3240
0
    case SSL_CTRL_GET_MAX_PROTO_VERSION:
3241
0
        return ctx->max_proto_version;
3242
0
    default:
3243
0
        return ctx->method->ssl_ctx_ctrl(ctx, cmd, larg, parg);
3244
0
    }
3245
0
}
3246
3247
long SSL_CTX_callback_ctrl(SSL_CTX *ctx, int cmd, void (*fp) (void))
3248
0
{
3249
0
    switch (cmd) {
3250
0
    case SSL_CTRL_SET_MSG_CALLBACK:
3251
0
        ctx->msg_callback = (void (*)
3252
0
                             (int write_p, int version, int content_type,
3253
0
                              const void *buf, size_t len, SSL *ssl,
3254
0
                              void *arg))(fp);
3255
0
        return 1;
3256
3257
0
    default:
3258
0
        return ctx->method->ssl_ctx_callback_ctrl(ctx, cmd, fp);
3259
0
    }
3260
0
}
3261
3262
int ssl_cipher_id_cmp(const SSL_CIPHER *a, const SSL_CIPHER *b)
3263
0
{
3264
0
    if (a->id > b->id)
3265
0
        return 1;
3266
0
    if (a->id < b->id)
3267
0
        return -1;
3268
0
    return 0;
3269
0
}
3270
3271
int ssl_cipher_ptr_id_cmp(const SSL_CIPHER *const *ap,
3272
                          const SSL_CIPHER *const *bp)
3273
0
{
3274
0
    if ((*ap)->id > (*bp)->id)
3275
0
        return 1;
3276
0
    if ((*ap)->id < (*bp)->id)
3277
0
        return -1;
3278
0
    return 0;
3279
0
}
3280
3281
/*
3282
 * return a STACK of the ciphers available for the SSL and in order of
3283
 * preference
3284
 */
3285
STACK_OF(SSL_CIPHER) *SSL_get_ciphers(const SSL *s)
3286
0
{
3287
0
    const SSL_CONNECTION *sc = SSL_CONNECTION_FROM_CONST_SSL(s);
3288
3289
0
    if (sc != NULL) {
3290
0
        if (sc->cipher_list != NULL) {
3291
0
            return sc->cipher_list;
3292
0
        } else if ((s->ctx != NULL) && (s->ctx->cipher_list != NULL)) {
3293
0
            return s->ctx->cipher_list;
3294
0
        }
3295
0
    }
3296
0
    return NULL;
3297
0
}
3298
3299
STACK_OF(SSL_CIPHER) *SSL_get_client_ciphers(const SSL *s)
3300
0
{
3301
0
    const SSL_CONNECTION *sc = SSL_CONNECTION_FROM_CONST_SSL(s);
3302
3303
0
    if (sc == NULL || !sc->server)
3304
0
        return NULL;
3305
0
    return sc->peer_ciphers;
3306
0
}
3307
3308
STACK_OF(SSL_CIPHER) *SSL_get1_supported_ciphers(SSL *s)
3309
0
{
3310
0
    STACK_OF(SSL_CIPHER) *sk = NULL, *ciphers;
3311
0
    int i;
3312
0
    SSL_CONNECTION *sc = SSL_CONNECTION_FROM_SSL(s);
3313
3314
0
    if (sc == NULL)
3315
0
        return NULL;
3316
3317
0
    ciphers = SSL_get_ciphers(s);
3318
0
    if (!ciphers)
3319
0
        return NULL;
3320
0
    if (!ssl_set_client_disabled(sc))
3321
0
        return NULL;
3322
0
    for (i = 0; i < sk_SSL_CIPHER_num(ciphers); i++) {
3323
0
        const SSL_CIPHER *c = sk_SSL_CIPHER_value(ciphers, i);
3324
0
        if (!ssl_cipher_disabled(sc, c, SSL_SECOP_CIPHER_SUPPORTED, 0)) {
3325
0
            if (!sk)
3326
0
                sk = sk_SSL_CIPHER_new_null();
3327
0
            if (!sk)
3328
0
                return NULL;
3329
0
            if (!sk_SSL_CIPHER_push(sk, c)) {
3330
0
                sk_SSL_CIPHER_free(sk);
3331
0
                return NULL;
3332
0
            }
3333
0
        }
3334
0
    }
3335
0
    return sk;
3336
0
}
3337
3338
/** return a STACK of the ciphers available for the SSL and in order of
3339
 * algorithm id */
3340
STACK_OF(SSL_CIPHER) *ssl_get_ciphers_by_id(SSL_CONNECTION *s)
3341
0
{
3342
0
    if (s != NULL) {
3343
0
        if (s->cipher_list_by_id != NULL)
3344
0
            return s->cipher_list_by_id;
3345
0
        else if (s->ssl.ctx != NULL
3346
0
                 && s->ssl.ctx->cipher_list_by_id != NULL)
3347
0
            return s->ssl.ctx->cipher_list_by_id;
3348
0
    }
3349
0
    return NULL;
3350
0
}
3351
3352
/** The old interface to get the same thing as SSL_get_ciphers() */
3353
const char *SSL_get_cipher_list(const SSL *s, int n)
3354
0
{
3355
0
    const SSL_CIPHER *c;
3356
0
    STACK_OF(SSL_CIPHER) *sk;
3357
3358
0
    if (s == NULL)
3359
0
        return NULL;
3360
0
    sk = SSL_get_ciphers(s);
3361
0
    if ((sk == NULL) || (sk_SSL_CIPHER_num(sk) <= n))
3362
0
        return NULL;
3363
0
    c = sk_SSL_CIPHER_value(sk, n);
3364
0
    if (c == NULL)
3365
0
        return NULL;
3366
0
    return c->name;
3367
0
}
3368
3369
/** return a STACK of the ciphers available for the SSL_CTX and in order of
3370
 * preference */
3371
STACK_OF(SSL_CIPHER) *SSL_CTX_get_ciphers(const SSL_CTX *ctx)
3372
0
{
3373
0
    if (ctx != NULL)
3374
0
        return ctx->cipher_list;
3375
0
    return NULL;
3376
0
}
3377
3378
/*
3379
 * Distinguish between ciphers controlled by set_ciphersuite() and
3380
 * set_cipher_list() when counting.
3381
 */
3382
static int cipher_list_tls12_num(STACK_OF(SSL_CIPHER) *sk)
3383
0
{
3384
0
    int i, num = 0;
3385
0
    const SSL_CIPHER *c;
3386
3387
0
    if (sk == NULL)
3388
0
        return 0;
3389
0
    for (i = 0; i < sk_SSL_CIPHER_num(sk); ++i) {
3390
0
        c = sk_SSL_CIPHER_value(sk, i);
3391
0
        if (c->min_tls >= TLS1_3_VERSION)
3392
0
            continue;
3393
0
        num++;
3394
0
    }
3395
0
    return num;
3396
0
}
3397
3398
/** specify the ciphers to be used by default by the SSL_CTX */
3399
int SSL_CTX_set_cipher_list(SSL_CTX *ctx, const char *str)
3400
0
{
3401
0
    STACK_OF(SSL_CIPHER) *sk;
3402
3403
0
    sk = ssl_create_cipher_list(ctx, ctx->tls13_ciphersuites,
3404
0
                                &ctx->cipher_list, &ctx->cipher_list_by_id, str,
3405
0
                                ctx->cert);
3406
    /*
3407
     * ssl_create_cipher_list may return an empty stack if it was unable to
3408
     * find a cipher matching the given rule string (for example if the rule
3409
     * string specifies a cipher which has been disabled). This is not an
3410
     * error as far as ssl_create_cipher_list is concerned, and hence
3411
     * ctx->cipher_list and ctx->cipher_list_by_id has been updated.
3412
     */
3413
0
    if (sk == NULL)
3414
0
        return 0;
3415
0
    if (ctx->method->num_ciphers() > 0 && cipher_list_tls12_num(sk) == 0) {
3416
0
        ERR_raise(ERR_LIB_SSL, SSL_R_NO_CIPHER_MATCH);
3417
0
        return 0;
3418
0
    }
3419
0
    return 1;
3420
0
}
3421
3422
/** specify the ciphers to be used by the SSL */
3423
int SSL_set_cipher_list(SSL *s, const char *str)
3424
0
{
3425
0
    STACK_OF(SSL_CIPHER) *sk;
3426
0
    SSL_CONNECTION *sc = SSL_CONNECTION_FROM_SSL(s);
3427
0
    SSL_CTX *ctx;
3428
3429
0
    if (sc == NULL)
3430
0
        return 0;
3431
3432
0
    ctx = s->ctx;
3433
0
    sk = ssl_create_cipher_list(ctx, sc->tls13_ciphersuites,
3434
0
                                &sc->cipher_list, &sc->cipher_list_by_id, str,
3435
0
                                sc->cert);
3436
    /* see comment in SSL_CTX_set_cipher_list */
3437
0
    if (sk == NULL)
3438
0
        return 0;
3439
0
    if (ctx->method->num_ciphers() > 0 && cipher_list_tls12_num(sk) == 0) {
3440
0
        ERR_raise(ERR_LIB_SSL, SSL_R_NO_CIPHER_MATCH);
3441
0
        return 0;
3442
0
    }
3443
0
    return 1;
3444
0
}
3445
3446
char *SSL_get_shared_ciphers(const SSL *s, char *buf, int size)
3447
0
{
3448
0
    char *p;
3449
0
    STACK_OF(SSL_CIPHER) *clntsk, *srvrsk;
3450
0
    const SSL_CIPHER *c;
3451
0
    int i;
3452
0
    const SSL_CONNECTION *sc = SSL_CONNECTION_FROM_CONST_SSL(s);
3453
3454
0
    if (sc == NULL)
3455
0
        return NULL;
3456
3457
0
    if (!sc->server
3458
0
            || sc->peer_ciphers == NULL
3459
0
            || size < 2)
3460
0
        return NULL;
3461
3462
0
    p = buf;
3463
0
    clntsk = sc->peer_ciphers;
3464
0
    srvrsk = SSL_get_ciphers(s);
3465
0
    if (clntsk == NULL || srvrsk == NULL)
3466
0
        return NULL;
3467
3468
0
    if (sk_SSL_CIPHER_num(clntsk) == 0 || sk_SSL_CIPHER_num(srvrsk) == 0)
3469
0
        return NULL;
3470
3471
0
    for (i = 0; i < sk_SSL_CIPHER_num(clntsk); i++) {
3472
0
        int n;
3473
3474
0
        c = sk_SSL_CIPHER_value(clntsk, i);
3475
0
        if (sk_SSL_CIPHER_find(srvrsk, c) < 0)
3476
0
            continue;
3477
3478
0
        n = (int)OPENSSL_strnlen(c->name, size);
3479
0
        if (n >= size) {
3480
0
            if (p != buf)
3481
0
                --p;
3482
0
            *p = '\0';
3483
0
            return buf;
3484
0
        }
3485
0
        memcpy(p, c->name, n);
3486
0
        p += n;
3487
0
        *(p++) = ':';
3488
0
        size -= n + 1;
3489
0
    }
3490
0
    p[-1] = '\0';
3491
0
    return buf;
3492
0
}
3493
3494
/**
3495
 * Return the requested servername (SNI) value. Note that the behaviour varies
3496
 * depending on:
3497
 * - whether this is called by the client or the server,
3498
 * - if we are before or during/after the handshake,
3499
 * - if a resumption or normal handshake is being attempted/has occurred
3500
 * - whether we have negotiated TLSv1.2 (or below) or TLSv1.3
3501
 *
3502
 * Note that only the host_name type is defined (RFC 3546).
3503
 */
3504
const char *SSL_get_servername(const SSL *s, const int type)
3505
0
{
3506
0
    const SSL_CONNECTION *sc = SSL_CONNECTION_FROM_CONST_SSL(s);
3507
0
    int server;
3508
3509
0
    if (sc == NULL)
3510
0
        return NULL;
3511
3512
    /*
3513
     * If we don't know if we are the client or the server yet then we assume
3514
     * client.
3515
     */
3516
0
    server = sc->handshake_func == NULL ? 0 : sc->server;
3517
3518
0
    if (type != TLSEXT_NAMETYPE_host_name)
3519
0
        return NULL;
3520
3521
0
    if (server) {
3522
        /**
3523
         * Server side
3524
         * In TLSv1.3 on the server SNI is not associated with the session
3525
         * but in TLSv1.2 or below it is.
3526
         *
3527
         * Before the handshake:
3528
         *  - return NULL
3529
         *
3530
         * During/after the handshake (TLSv1.2 or below resumption occurred):
3531
         * - If a servername was accepted by the server in the original
3532
         *   handshake then it will return that servername, or NULL otherwise.
3533
         *
3534
         * During/after the handshake (TLSv1.2 or below resumption did not occur):
3535
         * - The function will return the servername requested by the client in
3536
         *   this handshake or NULL if none was requested.
3537
         */
3538
0
         if (sc->hit && !SSL_CONNECTION_IS_TLS13(sc))
3539
0
            return sc->session->ext.hostname;
3540
0
    } else {
3541
        /**
3542
         * Client side
3543
         *
3544
         * Before the handshake:
3545
         *  - If a servername has been set via a call to
3546
         *    SSL_set_tlsext_host_name() then it will return that servername
3547
         *  - If one has not been set, but a TLSv1.2 resumption is being
3548
         *    attempted and the session from the original handshake had a
3549
         *    servername accepted by the server then it will return that
3550
         *    servername
3551
         *  - Otherwise it returns NULL
3552
         *
3553
         * During/after the handshake (TLSv1.2 or below resumption occurred):
3554
         * - If the session from the original handshake had a servername accepted
3555
         *   by the server then it will return that servername.
3556
         * - Otherwise it returns the servername set via
3557
         *   SSL_set_tlsext_host_name() (or NULL if it was not called).
3558
         *
3559
         * During/after the handshake (TLSv1.2 or below resumption did not occur):
3560
         * - It will return the servername set via SSL_set_tlsext_host_name()
3561
         *   (or NULL if it was not called).
3562
         */
3563
0
        if (SSL_in_before(s)) {
3564
0
            if (sc->ext.hostname == NULL
3565
0
                    && sc->session != NULL
3566
0
                    && sc->session->ssl_version != TLS1_3_VERSION)
3567
0
                return sc->session->ext.hostname;
3568
0
        } else {
3569
0
            if (!SSL_CONNECTION_IS_TLS13(sc) && sc->hit
3570
0
                && sc->session->ext.hostname != NULL)
3571
0
                return sc->session->ext.hostname;
3572
0
        }
3573
0
    }
3574
3575
0
    return sc->ext.hostname;
3576
0
}
3577
3578
int SSL_get_servername_type(const SSL *s)
3579
0
{
3580
0
    if (SSL_get_servername(s, TLSEXT_NAMETYPE_host_name) != NULL)
3581
0
        return TLSEXT_NAMETYPE_host_name;
3582
0
    return -1;
3583
0
}
3584
3585
/*
3586
 * SSL_select_next_proto implements the standard protocol selection. It is
3587
 * expected that this function is called from the callback set by
3588
 * SSL_CTX_set_next_proto_select_cb. The protocol data is assumed to be a
3589
 * vector of 8-bit, length prefixed byte strings. The length byte itself is
3590
 * not included in the length. A byte string of length 0 is invalid. No byte
3591
 * string may be truncated. The current, but experimental algorithm for
3592
 * selecting the protocol is: 1) If the server doesn't support NPN then this
3593
 * is indicated to the callback. In this case, the client application has to
3594
 * abort the connection or have a default application level protocol. 2) If
3595
 * the server supports NPN, but advertises an empty list then the client
3596
 * selects the first protocol in its list, but indicates via the API that this
3597
 * fallback case was enacted. 3) Otherwise, the client finds the first
3598
 * protocol in the server's list that it supports and selects this protocol.
3599
 * This is because it's assumed that the server has better information about
3600
 * which protocol a client should use. 4) If the client doesn't support any
3601
 * of the server's advertised protocols, then this is treated the same as
3602
 * case 2. It returns either OPENSSL_NPN_NEGOTIATED if a common protocol was
3603
 * found, or OPENSSL_NPN_NO_OVERLAP if the fallback case was reached.
3604
 */
3605
int SSL_select_next_proto(unsigned char **out, unsigned char *outlen,
3606
                          const unsigned char *server,
3607
                          unsigned int server_len,
3608
                          const unsigned char *client, unsigned int client_len)
3609
0
{
3610
0
    PACKET cpkt, csubpkt, spkt, ssubpkt;
3611
3612
0
    if (!PACKET_buf_init(&cpkt, client, client_len)
3613
0
            || !PACKET_get_length_prefixed_1(&cpkt, &csubpkt)
3614
0
            || PACKET_remaining(&csubpkt) == 0) {
3615
0
        *out = NULL;
3616
0
        *outlen = 0;
3617
0
        return OPENSSL_NPN_NO_OVERLAP;
3618
0
    }
3619
3620
    /*
3621
     * Set the default opportunistic protocol. Will be overwritten if we find
3622
     * a match.
3623
     */
3624
0
    *out = (unsigned char *)PACKET_data(&csubpkt);
3625
0
    *outlen = (unsigned char)PACKET_remaining(&csubpkt);
3626
3627
    /*
3628
     * For each protocol in server preference order, see if we support it.
3629
     */
3630
0
    if (PACKET_buf_init(&spkt, server, server_len)) {
3631
0
        while (PACKET_get_length_prefixed_1(&spkt, &ssubpkt)) {
3632
0
            if (PACKET_remaining(&ssubpkt) == 0)
3633
0
                continue; /* Invalid - ignore it */
3634
0
            if (PACKET_buf_init(&cpkt, client, client_len)) {
3635
0
                while (PACKET_get_length_prefixed_1(&cpkt, &csubpkt)) {
3636
0
                    if (PACKET_equal(&csubpkt, PACKET_data(&ssubpkt),
3637
0
                                     PACKET_remaining(&ssubpkt))) {
3638
                        /* We found a match */
3639
0
                        *out = (unsigned char *)PACKET_data(&ssubpkt);
3640
0
                        *outlen = (unsigned char)PACKET_remaining(&ssubpkt);
3641
0
                        return OPENSSL_NPN_NEGOTIATED;
3642
0
                    }
3643
0
                }
3644
                /* Ignore spurious trailing bytes in the client list */
3645
0
            } else {
3646
                /* This should never happen */
3647
0
                return OPENSSL_NPN_NO_OVERLAP;
3648
0
            }
3649
0
        }
3650
        /* Ignore spurious trailing bytes in the server list */
3651
0
    }
3652
3653
    /*
3654
     * There's no overlap between our protocols and the server's list. We use
3655
     * the default opportunistic protocol selected earlier
3656
     */
3657
0
    return OPENSSL_NPN_NO_OVERLAP;
3658
0
}
3659
3660
#ifndef OPENSSL_NO_NEXTPROTONEG
3661
/*
3662
 * SSL_get0_next_proto_negotiated sets *data and *len to point to the
3663
 * client's requested protocol for this connection and returns 0. If the
3664
 * client didn't request any protocol, then *data is set to NULL. Note that
3665
 * the client can request any protocol it chooses. The value returned from
3666
 * this function need not be a member of the list of supported protocols
3667
 * provided by the callback.
3668
 */
3669
void SSL_get0_next_proto_negotiated(const SSL *s, const unsigned char **data,
3670
                                    unsigned *len)
3671
0
{
3672
0
    const SSL_CONNECTION *sc = SSL_CONNECTION_FROM_CONST_SSL(s);
3673
3674
0
    if (sc == NULL) {
3675
        /* We have no other way to indicate error */
3676
0
        *data = NULL;
3677
0
        *len = 0;
3678
0
        return;
3679
0
    }
3680
3681
0
    *data = sc->ext.npn;
3682
0
    if (*data == NULL) {
3683
0
        *len = 0;
3684
0
    } else {
3685
0
        *len = (unsigned int)sc->ext.npn_len;
3686
0
    }
3687
0
}
3688
3689
/*
3690
 * SSL_CTX_set_npn_advertised_cb sets a callback that is called when
3691
 * a TLS server needs a list of supported protocols for Next Protocol
3692
 * Negotiation. The returned list must be in wire format.  The list is
3693
 * returned by setting |out| to point to it and |outlen| to its length. This
3694
 * memory will not be modified, but one should assume that the SSL* keeps a
3695
 * reference to it. The callback should return SSL_TLSEXT_ERR_OK if it
3696
 * wishes to advertise. Otherwise, no such extension will be included in the
3697
 * ServerHello.
3698
 */
3699
void SSL_CTX_set_npn_advertised_cb(SSL_CTX *ctx,
3700
                                   SSL_CTX_npn_advertised_cb_func cb,
3701
                                   void *arg)
3702
0
{
3703
0
    if (IS_QUIC_CTX(ctx))
3704
        /* NPN not allowed for QUIC */
3705
0
        return;
3706
3707
0
    ctx->ext.npn_advertised_cb = cb;
3708
0
    ctx->ext.npn_advertised_cb_arg = arg;
3709
0
}
3710
3711
/*
3712
 * SSL_CTX_set_next_proto_select_cb sets a callback that is called when a
3713
 * client needs to select a protocol from the server's provided list. |out|
3714
 * must be set to point to the selected protocol (which may be within |in|).
3715
 * The length of the protocol name must be written into |outlen|. The
3716
 * server's advertised protocols are provided in |in| and |inlen|. The
3717
 * callback can assume that |in| is syntactically valid. The client must
3718
 * select a protocol. It is fatal to the connection if this callback returns
3719
 * a value other than SSL_TLSEXT_ERR_OK.
3720
 */
3721
void SSL_CTX_set_npn_select_cb(SSL_CTX *ctx,
3722
                               SSL_CTX_npn_select_cb_func cb,
3723
                               void *arg)
3724
0
{
3725
0
    if (IS_QUIC_CTX(ctx))
3726
        /* NPN not allowed for QUIC */
3727
0
        return;
3728
3729
0
    ctx->ext.npn_select_cb = cb;
3730
0
    ctx->ext.npn_select_cb_arg = arg;
3731
0
}
3732
#endif
3733
3734
static int alpn_value_ok(const unsigned char *protos, unsigned int protos_len)
3735
0
{
3736
0
    unsigned int idx;
3737
3738
0
    if (protos_len < 2 || protos == NULL)
3739
0
        return 0;
3740
3741
0
    for (idx = 0; idx < protos_len; idx += protos[idx] + 1) {
3742
0
        if (protos[idx] == 0)
3743
0
            return 0;
3744
0
    }
3745
0
    return idx == protos_len;
3746
0
}
3747
/*
3748
 * SSL_CTX_set_alpn_protos sets the ALPN protocol list on |ctx| to |protos|.
3749
 * |protos| must be in wire-format (i.e. a series of non-empty, 8-bit
3750
 * length-prefixed strings). Returns 0 on success.
3751
 */
3752
int SSL_CTX_set_alpn_protos(SSL_CTX *ctx, const unsigned char *protos,
3753
                            unsigned int protos_len)
3754
0
{
3755
0
    unsigned char *alpn;
3756
3757
0
    if (protos_len == 0 || protos == NULL) {
3758
0
        OPENSSL_free(ctx->ext.alpn);
3759
0
        ctx->ext.alpn = NULL;
3760
0
        ctx->ext.alpn_len = 0;
3761
0
        return 0;
3762
0
    }
3763
    /* Not valid per RFC */
3764
0
    if (!alpn_value_ok(protos, protos_len))
3765
0
        return 1;
3766
3767
0
    alpn = OPENSSL_memdup(protos, protos_len);
3768
0
    if (alpn == NULL)
3769
0
        return 1;
3770
0
    OPENSSL_free(ctx->ext.alpn);
3771
0
    ctx->ext.alpn = alpn;
3772
0
    ctx->ext.alpn_len = protos_len;
3773
3774
0
    return 0;
3775
0
}
3776
3777
/*
3778
 * SSL_set_alpn_protos sets the ALPN protocol list on |ssl| to |protos|.
3779
 * |protos| must be in wire-format (i.e. a series of non-empty, 8-bit
3780
 * length-prefixed strings). Returns 0 on success.
3781
 */
3782
int SSL_set_alpn_protos(SSL *ssl, const unsigned char *protos,
3783
                        unsigned int protos_len)
3784
0
{
3785
0
    unsigned char *alpn;
3786
0
    SSL_CONNECTION *sc = SSL_CONNECTION_FROM_SSL(ssl);
3787
3788
0
    if (sc == NULL)
3789
0
        return 1;
3790
3791
0
    if (protos_len == 0 || protos == NULL) {
3792
0
        OPENSSL_free(sc->ext.alpn);
3793
0
        sc->ext.alpn = NULL;
3794
0
        sc->ext.alpn_len = 0;
3795
0
        return 0;
3796
0
    }
3797
    /* Not valid per RFC */
3798
0
    if (!alpn_value_ok(protos, protos_len))
3799
0
        return 1;
3800
3801
0
    alpn = OPENSSL_memdup(protos, protos_len);
3802
0
    if (alpn == NULL)
3803
0
        return 1;
3804
0
    OPENSSL_free(sc->ext.alpn);
3805
0
    sc->ext.alpn = alpn;
3806
0
    sc->ext.alpn_len = protos_len;
3807
3808
0
    return 0;
3809
0
}
3810
3811
/*
3812
 * SSL_CTX_set_alpn_select_cb sets a callback function on |ctx| that is
3813
 * called during ClientHello processing in order to select an ALPN protocol
3814
 * from the client's list of offered protocols.
3815
 */
3816
void SSL_CTX_set_alpn_select_cb(SSL_CTX *ctx,
3817
                                SSL_CTX_alpn_select_cb_func cb,
3818
                                void *arg)
3819
0
{
3820
0
    ctx->ext.alpn_select_cb = cb;
3821
0
    ctx->ext.alpn_select_cb_arg = arg;
3822
0
}
3823
3824
/*
3825
 * SSL_get0_alpn_selected gets the selected ALPN protocol (if any) from |ssl|.
3826
 * On return it sets |*data| to point to |*len| bytes of protocol name
3827
 * (not including the leading length-prefix byte). If the server didn't
3828
 * respond with a negotiated protocol then |*len| will be zero.
3829
 */
3830
void SSL_get0_alpn_selected(const SSL *ssl, const unsigned char **data,
3831
                            unsigned int *len)
3832
0
{
3833
0
    const SSL_CONNECTION *sc = SSL_CONNECTION_FROM_CONST_SSL(ssl);
3834
3835
0
    if (sc == NULL) {
3836
        /* We have no other way to indicate error */
3837
0
        *data = NULL;
3838
0
        *len = 0;
3839
0
        return;
3840
0
    }
3841
3842
0
    *data = sc->s3.alpn_selected;
3843
0
    if (*data == NULL)
3844
0
        *len = 0;
3845
0
    else
3846
0
        *len = (unsigned int)sc->s3.alpn_selected_len;
3847
0
}
3848
3849
int SSL_export_keying_material(SSL *s, unsigned char *out, size_t olen,
3850
                               const char *label, size_t llen,
3851
                               const unsigned char *context, size_t contextlen,
3852
                               int use_context)
3853
0
{
3854
0
    SSL_CONNECTION *sc = SSL_CONNECTION_FROM_SSL(s);
3855
3856
0
    if (sc == NULL)
3857
0
        return -1;
3858
3859
0
    if (sc->session == NULL
3860
0
        || (sc->version < TLS1_VERSION && sc->version != DTLS1_BAD_VER))
3861
0
        return -1;
3862
3863
0
    return sc->ssl.method->ssl3_enc->export_keying_material(sc, out, olen, label,
3864
0
                                                            llen, context,
3865
0
                                                            contextlen,
3866
0
                                                            use_context);
3867
0
}
3868
3869
int SSL_export_keying_material_early(SSL *s, unsigned char *out, size_t olen,
3870
                                     const char *label, size_t llen,
3871
                                     const unsigned char *context,
3872
                                     size_t contextlen)
3873
0
{
3874
0
    SSL_CONNECTION *sc = SSL_CONNECTION_FROM_SSL(s);
3875
3876
0
    if (sc == NULL)
3877
0
        return -1;
3878
3879
0
    if (sc->version != TLS1_3_VERSION)
3880
0
        return 0;
3881
3882
0
    return tls13_export_keying_material_early(sc, out, olen, label, llen,
3883
0
                                              context, contextlen);
3884
0
}
3885
3886
static unsigned long ssl_session_hash(const SSL_SESSION *a)
3887
0
{
3888
0
    const unsigned char *session_id = a->session_id;
3889
0
    unsigned long l;
3890
0
    unsigned char tmp_storage[4];
3891
3892
0
    if (a->session_id_length < sizeof(tmp_storage)) {
3893
0
        memset(tmp_storage, 0, sizeof(tmp_storage));
3894
0
        memcpy(tmp_storage, a->session_id, a->session_id_length);
3895
0
        session_id = tmp_storage;
3896
0
    }
3897
3898
0
    l = (unsigned long)
3899
0
        ((unsigned long)session_id[0]) |
3900
0
        ((unsigned long)session_id[1] << 8L) |
3901
0
        ((unsigned long)session_id[2] << 16L) |
3902
0
        ((unsigned long)session_id[3] << 24L);
3903
0
    return l;
3904
0
}
3905
3906
/*
3907
 * NB: If this function (or indeed the hash function which uses a sort of
3908
 * coarser function than this one) is changed, ensure
3909
 * SSL_CTX_has_matching_session_id() is checked accordingly. It relies on
3910
 * being able to construct an SSL_SESSION that will collide with any existing
3911
 * session with a matching session ID.
3912
 */
3913
static int ssl_session_cmp(const SSL_SESSION *a, const SSL_SESSION *b)
3914
0
{
3915
0
    if (a->ssl_version != b->ssl_version)
3916
0
        return 1;
3917
0
    if (a->session_id_length != b->session_id_length)
3918
0
        return 1;
3919
0
    return memcmp(a->session_id, b->session_id, a->session_id_length);
3920
0
}
3921
3922
#ifndef OPENSSL_NO_SSLKEYLOG
3923
/**
3924
 * @brief Static initialization for a one-time action to initialize the SSL key log.
3925
 */
3926
static CRYPTO_ONCE ssl_keylog_once = CRYPTO_ONCE_STATIC_INIT;
3927
3928
/**
3929
 * @brief Pointer to a read-write lock used to protect access to the key log.
3930
 */
3931
static CRYPTO_RWLOCK *keylog_lock = NULL;
3932
3933
/**
3934
 * @brief Pointer to a BIO structure used for writing the key log information.
3935
 */
3936
static BIO *keylog_bio = NULL;
3937
3938
/**
3939
 * @brief Initializes the SSLKEYLOGFILE lock.
3940
 *
3941
 * @return 1 on success, 0 on failure.
3942
 */
3943
DEFINE_RUN_ONCE_STATIC(ssl_keylog_init)
3944
{
3945
    keylog_lock = CRYPTO_THREAD_lock_new();
3946
    if (keylog_lock == NULL)
3947
        return 0;
3948
    return 1;
3949
}
3950
3951
/**
3952
 * @brief checks when a BIO refcount has reached zero, and sets
3953
 * keylog_cb to NULL if it has
3954
 *
3955
 * @returns 1 always
3956
 */
3957
static long check_keylog_bio_free(BIO *b, int oper, const char *argp,
3958
                                  size_t len, int argi, long argl, int ret,
3959
                                  size_t *processed)
3960
{
3961
3962
    /*
3963
     * Note we _dont_ take the keylog_lock here
3964
     * This is intentional, because we only free the keylog lock
3965
     * During SSL_CTX_free, in which we already posess the lock, so
3966
     * Theres no need to grab it again here
3967
     */
3968
    if (oper == BIO_CB_FREE)
3969
        keylog_bio = NULL;
3970
    return ret;
3971
}
3972
3973
/**
3974
 * @brief records ssl secrets to a file
3975
 */
3976
static void do_sslkeylogfile(const SSL *ssl, const char *line)
3977
{
3978
    if (keylog_lock == NULL)
3979
        return;
3980
3981
    if (!CRYPTO_THREAD_write_lock(keylog_lock))
3982
        return;
3983
    if (keylog_bio != NULL) {
3984
        BIO_printf(keylog_bio, "%s\n", line);
3985
        (void)BIO_flush(keylog_bio);
3986
    }
3987
    CRYPTO_THREAD_unlock(keylog_lock);
3988
}
3989
#endif
3990
3991
/*
3992
 * These wrapper functions should remain rather than redeclaring
3993
 * SSL_SESSION_hash and SSL_SESSION_cmp for void* types and casting each
3994
 * variable. The reason is that the functions aren't static, they're exposed
3995
 * via ssl.h.
3996
 */
3997
3998
#ifndef OPENSSL_NO_SSLKEYLOG
3999
static BIO *get_sslkeylog_bio(const char *keylogfile)
4000
{
4001
# ifdef _POSIX_C_SOURCE
4002
    BIO *b;
4003
    int fdno = -1;
4004
    FILE *fp = NULL;
4005
4006
    fdno = open(keylogfile, O_WRONLY | O_CREAT | O_APPEND,  0600);
4007
    if (fdno < 0)
4008
        return NULL;
4009
4010
    fp = fdopen(fdno, "a");
4011
    if (fp == NULL) {
4012
        close(fdno);
4013
        return NULL;
4014
    }
4015
4016
    if ((b = BIO_new_fp(fp, BIO_CLOSE)) == NULL)
4017
        fclose(fp);
4018
    return b;
4019
# else
4020
    return BIO_new_file(keylogfile, "a");
4021
# endif
4022
}
4023
#endif
4024
4025
SSL_CTX *SSL_CTX_new_ex(OSSL_LIB_CTX *libctx, const char *propq,
4026
                        const SSL_METHOD *meth)
4027
0
{
4028
0
    SSL_CTX *ret = NULL;
4029
#ifndef OPENSSL_NO_SSLKEYLOG
4030
    const char *keylogfile = ossl_safe_getenv("SSLKEYLOGFILE");
4031
#endif
4032
#ifndef OPENSSL_NO_COMP_ALG
4033
    int i;
4034
#endif
4035
4036
0
    if (meth == NULL) {
4037
0
        ERR_raise(ERR_LIB_SSL, SSL_R_NULL_SSL_METHOD_PASSED);
4038
0
        return NULL;
4039
0
    }
4040
4041
0
    if (!OPENSSL_init_ssl(OPENSSL_INIT_LOAD_SSL_STRINGS, NULL))
4042
0
        return NULL;
4043
4044
    /* Doing this for the run once effect */
4045
0
    if (SSL_get_ex_data_X509_STORE_CTX_idx() < 0) {
4046
0
        ERR_raise(ERR_LIB_SSL, SSL_R_X509_VERIFICATION_SETUP_PROBLEMS);
4047
0
        goto err;
4048
0
    }
4049
4050
0
    ret = OPENSSL_zalloc(sizeof(*ret));
4051
0
    if (ret == NULL)
4052
0
        return NULL;
4053
4054
    /* Init the reference counting before any call to SSL_CTX_free */
4055
0
    if (!CRYPTO_NEW_REF(&ret->references, 1)) {
4056
0
        OPENSSL_free(ret);
4057
0
        return NULL;
4058
0
    }
4059
4060
0
    ret->lock = CRYPTO_THREAD_lock_new();
4061
0
    if (ret->lock == NULL) {
4062
0
        ERR_raise(ERR_LIB_SSL, ERR_R_CRYPTO_LIB);
4063
0
        goto err;
4064
0
    }
4065
4066
#ifdef TSAN_REQUIRES_LOCKING
4067
    ret->tsan_lock = CRYPTO_THREAD_lock_new();
4068
    if (ret->tsan_lock == NULL) {
4069
        ERR_raise(ERR_LIB_SSL, ERR_R_CRYPTO_LIB);
4070
        goto err;
4071
    }
4072
#endif
4073
4074
0
    ret->libctx = libctx;
4075
0
    if (propq != NULL) {
4076
0
        ret->propq = OPENSSL_strdup(propq);
4077
0
        if (ret->propq == NULL)
4078
0
            goto err;
4079
0
    }
4080
4081
0
    ret->method = meth;
4082
0
    ret->min_proto_version = 0;
4083
0
    ret->max_proto_version = 0;
4084
0
    ret->mode = SSL_MODE_AUTO_RETRY;
4085
0
    ret->session_cache_mode = SSL_SESS_CACHE_SERVER;
4086
0
    ret->session_cache_size = SSL_SESSION_CACHE_MAX_SIZE_DEFAULT;
4087
    /* We take the system default. */
4088
0
    ret->session_timeout = meth->get_timeout();
4089
0
    ret->max_cert_list = SSL_MAX_CERT_LIST_DEFAULT;
4090
0
    ret->verify_mode = SSL_VERIFY_NONE;
4091
4092
0
    ret->sessions = lh_SSL_SESSION_new(ssl_session_hash, ssl_session_cmp);
4093
0
    if (ret->sessions == NULL) {
4094
0
        ERR_raise(ERR_LIB_SSL, ERR_R_CRYPTO_LIB);
4095
0
        goto err;
4096
0
    }
4097
0
    ret->cert_store = X509_STORE_new();
4098
0
    if (ret->cert_store == NULL) {
4099
0
        ERR_raise(ERR_LIB_SSL, ERR_R_X509_LIB);
4100
0
        goto err;
4101
0
    }
4102
0
#ifndef OPENSSL_NO_CT
4103
0
    ret->ctlog_store = CTLOG_STORE_new_ex(libctx, propq);
4104
0
    if (ret->ctlog_store == NULL) {
4105
0
        ERR_raise(ERR_LIB_SSL, ERR_R_CT_LIB);
4106
0
        goto err;
4107
0
    }
4108
0
#endif
4109
4110
    /* initialize cipher/digest methods table */
4111
0
    if (!ssl_load_ciphers(ret)) {
4112
0
        ERR_raise(ERR_LIB_SSL, ERR_R_SSL_LIB);
4113
0
        goto err;
4114
0
    }
4115
4116
0
    if (!ssl_load_groups(ret)) {
4117
0
        ERR_raise(ERR_LIB_SSL, ERR_R_SSL_LIB);
4118
0
        goto err;
4119
0
    }
4120
4121
    /* load provider sigalgs */
4122
0
    if (!ssl_load_sigalgs(ret)) {
4123
0
        ERR_raise(ERR_LIB_SSL, ERR_R_SSL_LIB);
4124
0
        goto err;
4125
0
    }
4126
4127
    /* initialise sig algs */
4128
0
    if (!ssl_setup_sigalgs(ret)) {
4129
0
        ERR_raise(ERR_LIB_SSL, ERR_R_SSL_LIB);
4130
0
        goto err;
4131
0
    }
4132
4133
0
    if (!SSL_CTX_set_ciphersuites(ret, OSSL_default_ciphersuites())) {
4134
0
        ERR_raise(ERR_LIB_SSL, ERR_R_SSL_LIB);
4135
0
        goto err;
4136
0
    }
4137
4138
0
    if ((ret->cert = ssl_cert_new(SSL_PKEY_NUM + ret->sigalg_list_len)) == NULL) {
4139
0
        ERR_raise(ERR_LIB_SSL, ERR_R_SSL_LIB);
4140
0
        goto err;
4141
0
    }
4142
4143
0
    if (!ssl_create_cipher_list(ret,
4144
0
                                ret->tls13_ciphersuites,
4145
0
                                &ret->cipher_list, &ret->cipher_list_by_id,
4146
0
                                OSSL_default_cipher_list(), ret->cert)
4147
0
        || sk_SSL_CIPHER_num(ret->cipher_list) <= 0) {
4148
0
        ERR_raise(ERR_LIB_SSL, SSL_R_LIBRARY_HAS_NO_CIPHERS);
4149
0
        goto err;
4150
0
    }
4151
4152
0
    ret->param = X509_VERIFY_PARAM_new();
4153
0
    if (ret->param == NULL) {
4154
0
        ERR_raise(ERR_LIB_SSL, ERR_R_X509_LIB);
4155
0
        goto err;
4156
0
    }
4157
4158
    /*
4159
     * If these aren't available from the provider we'll get NULL returns.
4160
     * That's fine but will cause errors later if SSLv3 is negotiated
4161
     */
4162
0
    ret->md5 = ssl_evp_md_fetch(libctx, NID_md5, propq);
4163
0
    ret->sha1 = ssl_evp_md_fetch(libctx, NID_sha1, propq);
4164
4165
0
    if ((ret->ca_names = sk_X509_NAME_new_null()) == NULL) {
4166
0
        ERR_raise(ERR_LIB_SSL, ERR_R_CRYPTO_LIB);
4167
0
        goto err;
4168
0
    }
4169
4170
0
    if ((ret->client_ca_names = sk_X509_NAME_new_null()) == NULL) {
4171
0
        ERR_raise(ERR_LIB_SSL, ERR_R_CRYPTO_LIB);
4172
0
        goto err;
4173
0
    }
4174
4175
0
    if (!CRYPTO_new_ex_data(CRYPTO_EX_INDEX_SSL_CTX, ret, &ret->ex_data)) {
4176
0
        ERR_raise(ERR_LIB_SSL, ERR_R_CRYPTO_LIB);
4177
0
        goto err;
4178
0
    }
4179
4180
0
    if ((ret->ext.secure = OPENSSL_secure_zalloc(sizeof(*ret->ext.secure))) == NULL)
4181
0
        goto err;
4182
4183
    /* No compression for DTLS */
4184
0
    if (!(meth->ssl3_enc->enc_flags & SSL_ENC_FLAG_DTLS))
4185
0
        ret->comp_methods = SSL_COMP_get_compression_methods();
4186
4187
0
    ret->max_send_fragment = SSL3_RT_MAX_PLAIN_LENGTH;
4188
0
    ret->split_send_fragment = SSL3_RT_MAX_PLAIN_LENGTH;
4189
4190
    /* Setup RFC5077 ticket keys */
4191
0
    if ((RAND_bytes_ex(libctx, ret->ext.tick_key_name,
4192
0
                       sizeof(ret->ext.tick_key_name), 0) <= 0)
4193
0
        || (RAND_priv_bytes_ex(libctx, ret->ext.secure->tick_hmac_key,
4194
0
                               sizeof(ret->ext.secure->tick_hmac_key), 0) <= 0)
4195
0
        || (RAND_priv_bytes_ex(libctx, ret->ext.secure->tick_aes_key,
4196
0
                               sizeof(ret->ext.secure->tick_aes_key), 0) <= 0))
4197
0
        ret->options |= SSL_OP_NO_TICKET;
4198
4199
0
    if (RAND_priv_bytes_ex(libctx, ret->ext.cookie_hmac_key,
4200
0
                           sizeof(ret->ext.cookie_hmac_key), 0) <= 0) {
4201
0
        ERR_raise(ERR_LIB_SSL, ERR_R_RAND_LIB);
4202
0
        goto err;
4203
0
    }
4204
4205
0
#ifndef OPENSSL_NO_SRP
4206
0
    if (!ssl_ctx_srp_ctx_init_intern(ret)) {
4207
0
        ERR_raise(ERR_LIB_SSL, ERR_R_SSL_LIB);
4208
0
        goto err;
4209
0
    }
4210
0
#endif
4211
0
#ifndef OPENSSL_NO_ENGINE
4212
# ifdef OPENSSL_SSL_CLIENT_ENGINE_AUTO
4213
#  define eng_strx(x)     #x
4214
#  define eng_str(x)      eng_strx(x)
4215
    /* Use specific client engine automatically... ignore errors */
4216
    {
4217
        ENGINE *eng;
4218
        eng = ENGINE_by_id(eng_str(OPENSSL_SSL_CLIENT_ENGINE_AUTO));
4219
        if (!eng) {
4220
            ERR_clear_error();
4221
            ENGINE_load_builtin_engines();
4222
            eng = ENGINE_by_id(eng_str(OPENSSL_SSL_CLIENT_ENGINE_AUTO));
4223
        }
4224
        if (!eng || !SSL_CTX_set_client_cert_engine(ret, eng))
4225
            ERR_clear_error();
4226
    }
4227
# endif
4228
0
#endif
4229
4230
#ifndef OPENSSL_NO_COMP_ALG
4231
    /*
4232
     * Set the default order: brotli, zlib, zstd
4233
     * Including only those enabled algorithms
4234
     */
4235
    memset(ret->cert_comp_prefs, 0, sizeof(ret->cert_comp_prefs));
4236
    i = 0;
4237
    if (ossl_comp_has_alg(TLSEXT_comp_cert_brotli))
4238
        ret->cert_comp_prefs[i++] = TLSEXT_comp_cert_brotli;
4239
    if (ossl_comp_has_alg(TLSEXT_comp_cert_zlib))
4240
        ret->cert_comp_prefs[i++] = TLSEXT_comp_cert_zlib;
4241
    if (ossl_comp_has_alg(TLSEXT_comp_cert_zstd))
4242
        ret->cert_comp_prefs[i++] = TLSEXT_comp_cert_zstd;
4243
#endif
4244
    /*
4245
     * Disable compression by default to prevent CRIME. Applications can
4246
     * re-enable compression by configuring
4247
     * SSL_CTX_clear_options(ctx, SSL_OP_NO_COMPRESSION);
4248
     * or by using the SSL_CONF library. Similarly we also enable TLSv1.3
4249
     * middlebox compatibility by default. This may be disabled by default in
4250
     * a later OpenSSL version.
4251
     */
4252
0
    ret->options |= SSL_OP_NO_COMPRESSION | SSL_OP_ENABLE_MIDDLEBOX_COMPAT;
4253
4254
0
    ret->ext.status_type = TLSEXT_STATUSTYPE_nothing;
4255
4256
    /*
4257
     * We cannot usefully set a default max_early_data here (which gets
4258
     * propagated in SSL_new(), for the following reason: setting the
4259
     * SSL field causes tls_construct_stoc_early_data() to tell the
4260
     * client that early data will be accepted when constructing a TLS 1.3
4261
     * session ticket, and the client will accordingly send us early data
4262
     * when using that ticket (if the client has early data to send).
4263
     * However, in order for the early data to actually be consumed by
4264
     * the application, the application must also have calls to
4265
     * SSL_read_early_data(); otherwise we'll just skip past the early data
4266
     * and ignore it.  So, since the application must add calls to
4267
     * SSL_read_early_data(), we also require them to add
4268
     * calls to SSL_CTX_set_max_early_data() in order to use early data,
4269
     * eliminating the bandwidth-wasting early data in the case described
4270
     * above.
4271
     */
4272
0
    ret->max_early_data = 0;
4273
4274
    /*
4275
     * Default recv_max_early_data is a fully loaded single record. Could be
4276
     * split across multiple records in practice. We set this differently to
4277
     * max_early_data so that, in the default case, we do not advertise any
4278
     * support for early_data, but if a client were to send us some (e.g.
4279
     * because of an old, stale ticket) then we will tolerate it and skip over
4280
     * it.
4281
     */
4282
0
    ret->recv_max_early_data = SSL3_RT_MAX_PLAIN_LENGTH;
4283
4284
    /* By default we send two session tickets automatically in TLSv1.3 */
4285
0
    ret->num_tickets = 2;
4286
4287
0
# ifndef OPENSSL_NO_QUIC
4288
    /* only create a cache for client CTX-es */
4289
0
    if (meth == OSSL_QUIC_client_method())
4290
0
        if ((ret->tokencache = ossl_quic_new_token_store()) == NULL)
4291
0
            goto err;
4292
0
    ret->domain_flags = 0;
4293
0
    if (IS_QUIC_METHOD(meth)) {
4294
0
#  if defined(OPENSSL_THREADS)
4295
0
        if (meth == OSSL_QUIC_client_thread_method())
4296
0
            ret->domain_flags
4297
0
                = SSL_DOMAIN_FLAG_MULTI_THREAD
4298
0
                | SSL_DOMAIN_FLAG_THREAD_ASSISTED
4299
0
                | SSL_DOMAIN_FLAG_BLOCKING;
4300
0
        else
4301
0
            ret->domain_flags
4302
0
                = SSL_DOMAIN_FLAG_MULTI_THREAD
4303
0
                | SSL_DOMAIN_FLAG_LEGACY_BLOCKING;
4304
#  else
4305
        ret->domain_flags
4306
            = SSL_DOMAIN_FLAG_SINGLE_THREAD
4307
            | SSL_DOMAIN_FLAG_LEGACY_BLOCKING;
4308
#  endif
4309
0
    }
4310
0
# endif
4311
4312
0
    if (!ssl_ctx_system_config(ret)) {
4313
0
        ERR_raise(ERR_LIB_SSL, SSL_R_ERROR_IN_SYSTEM_DEFAULT_CONFIG);
4314
0
        goto err;
4315
0
    }
4316
4317
#ifndef OPENSSL_NO_SSLKEYLOG
4318
    if (keylogfile != NULL && strlen(keylogfile) != 0) {
4319
        /* Make sure we have a global lock allocated */
4320
        if (!RUN_ONCE(&ssl_keylog_once, ssl_keylog_init)) {
4321
            /* use a trace message as a warning */
4322
            OSSL_TRACE(TLS, "Unable to initalize keylog data\n");
4323
            goto out;
4324
        }
4325
4326
        /* Grab our global lock */
4327
        if (!CRYPTO_THREAD_write_lock(keylog_lock)) {
4328
            OSSL_TRACE(TLS, "Unable to acquire keylog write lock\n");
4329
            goto out;
4330
        } else {
4331
            /*
4332
             * If the bio for the requested keylog file hasn't been
4333
             * created yet, go ahead and create it, and set it to append
4334
             * if its already there.
4335
             */
4336
            if (keylog_bio == NULL) {
4337
                keylog_bio = get_sslkeylog_bio(keylogfile);
4338
                if (keylog_bio == NULL) {
4339
                    OSSL_TRACE(TLS, "Unable to create keylog bio\n");
4340
                    goto out;
4341
                }
4342
                BIO_set_callback_ex(keylog_bio, check_keylog_bio_free);
4343
            } else {
4344
                /* up our refcount for the already-created case */
4345
                BIO_up_ref(keylog_bio);
4346
            }
4347
            /* If we have a bio now, assign the callback handler */
4348
            if (keylog_bio != NULL)
4349
                ret->do_sslkeylog = 1;
4350
            /* unlock, and we're done */
4351
            CRYPTO_THREAD_unlock(keylog_lock);
4352
        }
4353
    }
4354
out:
4355
#endif
4356
0
    return ret;
4357
0
 err:
4358
0
    SSL_CTX_free(ret);
4359
#ifndef OPENSSL_NO_SSLKEYLOG
4360
    BIO_free(keylog_bio);
4361
#endif
4362
0
    return NULL;
4363
0
}
4364
4365
SSL_CTX *SSL_CTX_new(const SSL_METHOD *meth)
4366
0
{
4367
0
    return SSL_CTX_new_ex(NULL, NULL, meth);
4368
0
}
4369
4370
int SSL_CTX_up_ref(SSL_CTX *ctx)
4371
0
{
4372
0
    int i;
4373
4374
0
    if (CRYPTO_UP_REF(&ctx->references, &i) <= 0)
4375
0
        return 0;
4376
4377
0
    REF_PRINT_COUNT("SSL_CTX", i, ctx);
4378
0
    REF_ASSERT_ISNT(i < 2);
4379
0
    return ((i > 1) ? 1 : 0);
4380
0
}
4381
4382
void SSL_CTX_free(SSL_CTX *a)
4383
0
{
4384
0
    int i;
4385
0
    size_t j;
4386
4387
0
    if (a == NULL)
4388
0
        return;
4389
4390
0
    CRYPTO_DOWN_REF(&a->references, &i);
4391
0
    REF_PRINT_COUNT("SSL_CTX", i, a);
4392
0
    if (i > 0)
4393
0
        return;
4394
0
    REF_ASSERT_ISNT(i < 0);
4395
4396
#ifndef OPENSSL_NO_SSLKEYLOG
4397
    if (keylog_lock != NULL && CRYPTO_THREAD_write_lock(keylog_lock)) {
4398
        if (a->do_sslkeylog == 1)
4399
            BIO_free(keylog_bio);
4400
        a->do_sslkeylog = 0;
4401
        CRYPTO_THREAD_unlock(keylog_lock);
4402
    }
4403
#endif
4404
4405
0
    X509_VERIFY_PARAM_free(a->param);
4406
0
    dane_ctx_final(&a->dane);
4407
4408
    /*
4409
     * Free internal session cache. However: the remove_cb() may reference
4410
     * the ex_data of SSL_CTX, thus the ex_data store can only be removed
4411
     * after the sessions were flushed.
4412
     * As the ex_data handling routines might also touch the session cache,
4413
     * the most secure solution seems to be: empty (flush) the cache, then
4414
     * free ex_data, then finally free the cache.
4415
     * (See ticket [openssl.org #212].)
4416
     */
4417
0
    if (a->sessions != NULL)
4418
0
        SSL_CTX_flush_sessions_ex(a, 0);
4419
4420
0
    CRYPTO_free_ex_data(CRYPTO_EX_INDEX_SSL_CTX, a, &a->ex_data);
4421
0
    lh_SSL_SESSION_free(a->sessions);
4422
0
    X509_STORE_free(a->cert_store);
4423
0
#ifndef OPENSSL_NO_CT
4424
0
    CTLOG_STORE_free(a->ctlog_store);
4425
0
#endif
4426
0
    sk_SSL_CIPHER_free(a->cipher_list);
4427
0
    sk_SSL_CIPHER_free(a->cipher_list_by_id);
4428
0
    sk_SSL_CIPHER_free(a->tls13_ciphersuites);
4429
0
    ssl_cert_free(a->cert);
4430
0
    sk_X509_NAME_pop_free(a->ca_names, X509_NAME_free);
4431
0
    sk_X509_NAME_pop_free(a->client_ca_names, X509_NAME_free);
4432
0
    OSSL_STACK_OF_X509_free(a->extra_certs);
4433
0
    a->comp_methods = NULL;
4434
0
#ifndef OPENSSL_NO_SRTP
4435
0
    sk_SRTP_PROTECTION_PROFILE_free(a->srtp_profiles);
4436
0
#endif
4437
0
#ifndef OPENSSL_NO_SRP
4438
0
    ssl_ctx_srp_ctx_free_intern(a);
4439
0
#endif
4440
0
#ifndef OPENSSL_NO_ENGINE
4441
0
    tls_engine_finish(a->client_cert_engine);
4442
0
#endif
4443
4444
0
    OPENSSL_free(a->ext.ecpointformats);
4445
0
    OPENSSL_free(a->ext.supportedgroups);
4446
0
    OPENSSL_free(a->ext.keyshares);
4447
0
    OPENSSL_free(a->ext.tuples);
4448
0
    OPENSSL_free(a->ext.alpn);
4449
0
    OPENSSL_secure_free(a->ext.secure);
4450
4451
0
    ssl_evp_md_free(a->md5);
4452
0
    ssl_evp_md_free(a->sha1);
4453
4454
0
    for (j = 0; j < SSL_ENC_NUM_IDX; j++)
4455
0
        ssl_evp_cipher_free(a->ssl_cipher_methods[j]);
4456
0
    for (j = 0; j < SSL_MD_NUM_IDX; j++)
4457
0
        ssl_evp_md_free(a->ssl_digest_methods[j]);
4458
0
    for (j = 0; j < a->group_list_len; j++) {
4459
0
        OPENSSL_free(a->group_list[j].tlsname);
4460
0
        OPENSSL_free(a->group_list[j].realname);
4461
0
        OPENSSL_free(a->group_list[j].algorithm);
4462
0
    }
4463
0
    OPENSSL_free(a->group_list);
4464
0
    for (j = 0; j < a->sigalg_list_len; j++) {
4465
0
        OPENSSL_free(a->sigalg_list[j].name);
4466
0
        OPENSSL_free(a->sigalg_list[j].sigalg_name);
4467
0
        OPENSSL_free(a->sigalg_list[j].sigalg_oid);
4468
0
        OPENSSL_free(a->sigalg_list[j].sig_name);
4469
0
        OPENSSL_free(a->sigalg_list[j].sig_oid);
4470
0
        OPENSSL_free(a->sigalg_list[j].hash_name);
4471
0
        OPENSSL_free(a->sigalg_list[j].hash_oid);
4472
0
        OPENSSL_free(a->sigalg_list[j].keytype);
4473
0
        OPENSSL_free(a->sigalg_list[j].keytype_oid);
4474
0
    }
4475
0
    OPENSSL_free(a->sigalg_list);
4476
0
    OPENSSL_free(a->ssl_cert_info);
4477
4478
0
    OPENSSL_free(a->sigalg_lookup_cache);
4479
0
    OPENSSL_free(a->tls12_sigalgs);
4480
4481
0
    OPENSSL_free(a->client_cert_type);
4482
0
    OPENSSL_free(a->server_cert_type);
4483
4484
0
    CRYPTO_THREAD_lock_free(a->lock);
4485
0
    CRYPTO_FREE_REF(&a->references);
4486
#ifdef TSAN_REQUIRES_LOCKING
4487
    CRYPTO_THREAD_lock_free(a->tsan_lock);
4488
#endif
4489
4490
0
    OPENSSL_free(a->propq);
4491
0
#ifndef OPENSSL_NO_QLOG
4492
0
    OPENSSL_free(a->qlog_title);
4493
0
#endif
4494
4495
0
#ifndef OPENSSL_NO_QUIC
4496
0
    ossl_quic_free_token_store(a->tokencache);
4497
0
#endif
4498
4499
0
    OPENSSL_free(a);
4500
0
}
4501
4502
void SSL_CTX_set_default_passwd_cb(SSL_CTX *ctx, pem_password_cb *cb)
4503
0
{
4504
0
    ctx->default_passwd_callback = cb;
4505
0
}
4506
4507
void SSL_CTX_set_default_passwd_cb_userdata(SSL_CTX *ctx, void *u)
4508
0
{
4509
0
    ctx->default_passwd_callback_userdata = u;
4510
0
}
4511
4512
pem_password_cb *SSL_CTX_get_default_passwd_cb(SSL_CTX *ctx)
4513
0
{
4514
0
    return ctx->default_passwd_callback;
4515
0
}
4516
4517
void *SSL_CTX_get_default_passwd_cb_userdata(SSL_CTX *ctx)
4518
0
{
4519
0
    return ctx->default_passwd_callback_userdata;
4520
0
}
4521
4522
void SSL_set_default_passwd_cb(SSL *s, pem_password_cb *cb)
4523
0
{
4524
0
    SSL_CONNECTION *sc = SSL_CONNECTION_FROM_SSL(s);
4525
4526
0
    if (sc == NULL)
4527
0
        return;
4528
4529
0
    sc->default_passwd_callback = cb;
4530
0
}
4531
4532
void SSL_set_default_passwd_cb_userdata(SSL *s, void *u)
4533
0
{
4534
0
    SSL_CONNECTION *sc = SSL_CONNECTION_FROM_SSL(s);
4535
4536
0
    if (sc == NULL)
4537
0
        return;
4538
4539
0
    sc->default_passwd_callback_userdata = u;
4540
0
}
4541
4542
pem_password_cb *SSL_get_default_passwd_cb(SSL *s)
4543
0
{
4544
0
    SSL_CONNECTION *sc = SSL_CONNECTION_FROM_SSL(s);
4545
4546
0
    if (sc == NULL)
4547
0
        return NULL;
4548
4549
0
    return sc->default_passwd_callback;
4550
0
}
4551
4552
void *SSL_get_default_passwd_cb_userdata(SSL *s)
4553
0
{
4554
0
    SSL_CONNECTION *sc = SSL_CONNECTION_FROM_SSL(s);
4555
4556
0
    if (sc == NULL)
4557
0
        return NULL;
4558
4559
0
    return sc->default_passwd_callback_userdata;
4560
0
}
4561
4562
void SSL_CTX_set_cert_verify_callback(SSL_CTX *ctx,
4563
                                      int (*cb) (X509_STORE_CTX *, void *),
4564
                                      void *arg)
4565
0
{
4566
0
    ctx->app_verify_callback = cb;
4567
0
    ctx->app_verify_arg = arg;
4568
0
}
4569
4570
void SSL_CTX_set_verify(SSL_CTX *ctx, int mode,
4571
                        int (*cb) (int, X509_STORE_CTX *))
4572
0
{
4573
0
    ctx->verify_mode = mode;
4574
0
    ctx->default_verify_callback = cb;
4575
0
}
4576
4577
void SSL_CTX_set_verify_depth(SSL_CTX *ctx, int depth)
4578
0
{
4579
0
    X509_VERIFY_PARAM_set_depth(ctx->param, depth);
4580
0
}
4581
4582
void SSL_CTX_set_cert_cb(SSL_CTX *c, int (*cb) (SSL *ssl, void *arg), void *arg)
4583
0
{
4584
0
    ssl_cert_set_cert_cb(c->cert, cb, arg);
4585
0
}
4586
4587
void SSL_set_cert_cb(SSL *s, int (*cb) (SSL *ssl, void *arg), void *arg)
4588
0
{
4589
0
    SSL_CONNECTION *sc = SSL_CONNECTION_FROM_SSL(s);
4590
4591
0
    if (sc == NULL)
4592
0
        return;
4593
4594
0
    ssl_cert_set_cert_cb(sc->cert, cb, arg);
4595
0
}
4596
4597
void ssl_set_masks(SSL_CONNECTION *s)
4598
0
{
4599
0
    CERT *c = s->cert;
4600
0
    uint32_t *pvalid = s->s3.tmp.valid_flags;
4601
0
    int rsa_enc, rsa_sign, dh_tmp, dsa_sign;
4602
0
    unsigned long mask_k, mask_a;
4603
0
    int have_ecc_cert, ecdsa_ok;
4604
4605
0
    if (c == NULL)
4606
0
        return;
4607
4608
0
    dh_tmp = (c->dh_tmp != NULL
4609
0
              || c->dh_tmp_cb != NULL
4610
0
              || c->dh_tmp_auto);
4611
4612
0
    rsa_enc = pvalid[SSL_PKEY_RSA] & CERT_PKEY_VALID;
4613
0
    rsa_sign = pvalid[SSL_PKEY_RSA] & CERT_PKEY_VALID;
4614
0
    dsa_sign = pvalid[SSL_PKEY_DSA_SIGN] & CERT_PKEY_VALID;
4615
0
    have_ecc_cert = pvalid[SSL_PKEY_ECC] & CERT_PKEY_VALID;
4616
0
    mask_k = 0;
4617
0
    mask_a = 0;
4618
4619
0
    OSSL_TRACE4(TLS_CIPHER, "dh_tmp=%d rsa_enc=%d rsa_sign=%d dsa_sign=%d\n",
4620
0
               dh_tmp, rsa_enc, rsa_sign, dsa_sign);
4621
4622
0
#ifndef OPENSSL_NO_GOST
4623
0
    if (ssl_has_cert(s, SSL_PKEY_GOST12_512)) {
4624
0
        mask_k |= SSL_kGOST | SSL_kGOST18;
4625
0
        mask_a |= SSL_aGOST12;
4626
0
    }
4627
0
    if (ssl_has_cert(s, SSL_PKEY_GOST12_256)) {
4628
0
        mask_k |= SSL_kGOST | SSL_kGOST18;
4629
0
        mask_a |= SSL_aGOST12;
4630
0
    }
4631
0
    if (ssl_has_cert(s, SSL_PKEY_GOST01)) {
4632
0
        mask_k |= SSL_kGOST;
4633
0
        mask_a |= SSL_aGOST01;
4634
0
    }
4635
0
#endif
4636
4637
0
    if (rsa_enc)
4638
0
        mask_k |= SSL_kRSA;
4639
4640
0
    if (dh_tmp)
4641
0
        mask_k |= SSL_kDHE;
4642
4643
    /*
4644
     * If we only have an RSA-PSS certificate allow RSA authentication
4645
     * if TLS 1.2 and peer supports it.
4646
     */
4647
4648
0
    if (rsa_enc || rsa_sign || (ssl_has_cert(s, SSL_PKEY_RSA_PSS_SIGN)
4649
0
                && pvalid[SSL_PKEY_RSA_PSS_SIGN] & CERT_PKEY_EXPLICIT_SIGN
4650
0
                && TLS1_get_version(&s->ssl) == TLS1_2_VERSION))
4651
0
        mask_a |= SSL_aRSA;
4652
4653
0
    if (dsa_sign) {
4654
0
        mask_a |= SSL_aDSS;
4655
0
    }
4656
4657
0
    mask_a |= SSL_aNULL;
4658
4659
    /*
4660
     * You can do anything with an RPK key, since there's no cert to restrict it
4661
     * But we need to check for private keys
4662
     */
4663
0
    if (pvalid[SSL_PKEY_RSA] & CERT_PKEY_RPK) {
4664
0
        mask_a |= SSL_aRSA;
4665
0
        mask_k |= SSL_kRSA;
4666
0
    }
4667
0
    if (pvalid[SSL_PKEY_ECC] & CERT_PKEY_RPK)
4668
0
        mask_a |= SSL_aECDSA;
4669
0
    if (TLS1_get_version(&s->ssl) == TLS1_2_VERSION) {
4670
0
        if (pvalid[SSL_PKEY_RSA_PSS_SIGN] & CERT_PKEY_RPK)
4671
0
            mask_a |= SSL_aRSA;
4672
0
        if (pvalid[SSL_PKEY_ED25519] & CERT_PKEY_RPK
4673
0
                || pvalid[SSL_PKEY_ED448] & CERT_PKEY_RPK)
4674
0
            mask_a |= SSL_aECDSA;
4675
0
    }
4676
4677
    /*
4678
     * An ECC certificate may be usable for ECDH and/or ECDSA cipher suites
4679
     * depending on the key usage extension.
4680
     */
4681
0
    if (have_ecc_cert) {
4682
0
        uint32_t ex_kusage;
4683
0
        ex_kusage = X509_get_key_usage(c->pkeys[SSL_PKEY_ECC].x509);
4684
0
        ecdsa_ok = ex_kusage & X509v3_KU_DIGITAL_SIGNATURE;
4685
0
        if (!(pvalid[SSL_PKEY_ECC] & CERT_PKEY_SIGN))
4686
0
            ecdsa_ok = 0;
4687
0
        if (ecdsa_ok)
4688
0
            mask_a |= SSL_aECDSA;
4689
0
    }
4690
    /* Allow Ed25519 for TLS 1.2 if peer supports it */
4691
0
    if (!(mask_a & SSL_aECDSA) && ssl_has_cert(s, SSL_PKEY_ED25519)
4692
0
            && pvalid[SSL_PKEY_ED25519] & CERT_PKEY_EXPLICIT_SIGN
4693
0
            && TLS1_get_version(&s->ssl) == TLS1_2_VERSION)
4694
0
            mask_a |= SSL_aECDSA;
4695
4696
    /* Allow Ed448 for TLS 1.2 if peer supports it */
4697
0
    if (!(mask_a & SSL_aECDSA) && ssl_has_cert(s, SSL_PKEY_ED448)
4698
0
            && pvalid[SSL_PKEY_ED448] & CERT_PKEY_EXPLICIT_SIGN
4699
0
            && TLS1_get_version(&s->ssl) == TLS1_2_VERSION)
4700
0
            mask_a |= SSL_aECDSA;
4701
4702
0
    mask_k |= SSL_kECDHE;
4703
4704
0
#ifndef OPENSSL_NO_PSK
4705
0
    mask_k |= SSL_kPSK;
4706
0
    mask_a |= SSL_aPSK;
4707
0
    if (mask_k & SSL_kRSA)
4708
0
        mask_k |= SSL_kRSAPSK;
4709
0
    if (mask_k & SSL_kDHE)
4710
0
        mask_k |= SSL_kDHEPSK;
4711
0
    if (mask_k & SSL_kECDHE)
4712
0
        mask_k |= SSL_kECDHEPSK;
4713
0
#endif
4714
4715
0
    s->s3.tmp.mask_k = mask_k;
4716
0
    s->s3.tmp.mask_a = mask_a;
4717
0
}
4718
4719
int ssl_check_srvr_ecc_cert_and_alg(X509 *x, SSL_CONNECTION *s)
4720
0
{
4721
0
    if (s->s3.tmp.new_cipher->algorithm_auth & SSL_aECDSA) {
4722
        /* key usage, if present, must allow signing */
4723
0
        if (!(X509_get_key_usage(x) & X509v3_KU_DIGITAL_SIGNATURE)) {
4724
0
            ERR_raise(ERR_LIB_SSL, SSL_R_ECC_CERT_NOT_FOR_SIGNING);
4725
0
            return 0;
4726
0
        }
4727
0
    }
4728
0
    return 1;                   /* all checks are ok */
4729
0
}
4730
4731
int ssl_get_server_cert_serverinfo(SSL_CONNECTION *s,
4732
                                   const unsigned char **serverinfo,
4733
                                   size_t *serverinfo_length)
4734
0
{
4735
0
    CERT_PKEY *cpk = s->s3.tmp.cert;
4736
0
    *serverinfo_length = 0;
4737
4738
0
    if (cpk == NULL || cpk->serverinfo == NULL)
4739
0
        return 0;
4740
4741
0
    *serverinfo = cpk->serverinfo;
4742
0
    *serverinfo_length = cpk->serverinfo_length;
4743
0
    return 1;
4744
0
}
4745
4746
void ssl_update_cache(SSL_CONNECTION *s, int mode)
4747
0
{
4748
0
    int i;
4749
4750
    /*
4751
     * If the session_id_length is 0, we are not supposed to cache it, and it
4752
     * would be rather hard to do anyway :-). Also if the session has already
4753
     * been marked as not_resumable we should not cache it for later reuse.
4754
     */
4755
0
    if (s->session->session_id_length == 0 || s->session->not_resumable)
4756
0
        return;
4757
4758
    /*
4759
     * If sid_ctx_length is 0 there is no specific application context
4760
     * associated with this session, so when we try to resume it and
4761
     * SSL_VERIFY_PEER is requested to verify the client identity, we have no
4762
     * indication that this is actually a session for the proper application
4763
     * context, and the *handshake* will fail, not just the resumption attempt.
4764
     * Do not cache (on the server) these sessions that are not resumable
4765
     * (clients can set SSL_VERIFY_PEER without needing a sid_ctx set).
4766
     */
4767
0
    if (s->server && s->session->sid_ctx_length == 0
4768
0
            && (s->verify_mode & SSL_VERIFY_PEER) != 0)
4769
0
        return;
4770
4771
0
    i = s->session_ctx->session_cache_mode;
4772
0
    if ((i & mode) != 0
4773
0
        && (!s->hit || SSL_CONNECTION_IS_TLS13(s))) {
4774
        /*
4775
         * Add the session to the internal cache. In server side TLSv1.3 we
4776
         * normally don't do this because by default it's a full stateless ticket
4777
         * with only a dummy session id so there is no reason to cache it,
4778
         * unless:
4779
         * - we are doing early_data, in which case we cache so that we can
4780
         *   detect replays
4781
         * - the application has set a remove_session_cb so needs to know about
4782
         *   session timeout events
4783
         * - SSL_OP_NO_TICKET is set in which case it is a stateful ticket
4784
         */
4785
0
        if ((i & SSL_SESS_CACHE_NO_INTERNAL_STORE) == 0
4786
0
                && (!SSL_CONNECTION_IS_TLS13(s)
4787
0
                    || !s->server
4788
0
                    || (s->max_early_data > 0
4789
0
                        && (s->options & SSL_OP_NO_ANTI_REPLAY) == 0)
4790
0
                    || s->session_ctx->remove_session_cb != NULL
4791
0
                    || (s->options & SSL_OP_NO_TICKET) != 0))
4792
0
            SSL_CTX_add_session(s->session_ctx, s->session);
4793
4794
        /*
4795
         * Add the session to the external cache. We do this even in server side
4796
         * TLSv1.3 without early data because some applications just want to
4797
         * know about the creation of a session and aren't doing a full cache.
4798
         */
4799
0
        if (s->session_ctx->new_session_cb != NULL && SSL_SESSION_up_ref(s->session)) {
4800
0
            if (!s->session_ctx->new_session_cb(SSL_CONNECTION_GET_USER_SSL(s),
4801
0
                                                s->session))
4802
0
                SSL_SESSION_free(s->session);
4803
0
        }
4804
0
    }
4805
4806
    /* auto flush every 255 connections */
4807
0
    if ((!(i & SSL_SESS_CACHE_NO_AUTO_CLEAR)) && ((i & mode) == mode)) {
4808
0
        TSAN_QUALIFIER int *stat;
4809
4810
0
        if (mode & SSL_SESS_CACHE_CLIENT)
4811
0
            stat = &s->session_ctx->stats.sess_connect_good;
4812
0
        else
4813
0
            stat = &s->session_ctx->stats.sess_accept_good;
4814
0
        if ((ssl_tsan_load(s->session_ctx, stat) & 0xff) == 0xff)
4815
0
            SSL_CTX_flush_sessions_ex(s->session_ctx, time(NULL));
4816
0
    }
4817
0
}
4818
4819
const SSL_METHOD *SSL_CTX_get_ssl_method(const SSL_CTX *ctx)
4820
0
{
4821
0
    return ctx->method;
4822
0
}
4823
4824
const SSL_METHOD *SSL_get_ssl_method(const SSL *s)
4825
0
{
4826
0
    return s->method;
4827
0
}
4828
4829
int SSL_set_ssl_method(SSL *s, const SSL_METHOD *meth)
4830
0
{
4831
0
    int ret = 1;
4832
0
    SSL_CONNECTION *sc = SSL_CONNECTION_FROM_SSL(s);
4833
4834
    /* Not allowed for QUIC */
4835
0
    if (sc == NULL
4836
0
        || (s->type != SSL_TYPE_SSL_CONNECTION && s->method != meth)
4837
0
        || (s->type == SSL_TYPE_SSL_CONNECTION && IS_QUIC_METHOD(meth)))
4838
0
        return 0;
4839
4840
0
    if (s->method != meth) {
4841
0
        const SSL_METHOD *sm = s->method;
4842
0
        int (*hf) (SSL *) = sc->handshake_func;
4843
4844
0
        if (sm->version == meth->version)
4845
0
            s->method = meth;
4846
0
        else {
4847
0
            sm->ssl_deinit(s);
4848
0
            s->method = meth;
4849
0
            ret = s->method->ssl_init(s);
4850
0
        }
4851
4852
0
        if (hf == sm->ssl_connect)
4853
0
            sc->handshake_func = meth->ssl_connect;
4854
0
        else if (hf == sm->ssl_accept)
4855
0
            sc->handshake_func = meth->ssl_accept;
4856
0
    }
4857
0
    return ret;
4858
0
}
4859
4860
int SSL_get_error(const SSL *s, int i)
4861
0
{
4862
0
    return ossl_ssl_get_error(s, i, /*check_err=*/1);
4863
0
}
4864
4865
int ossl_ssl_get_error(const SSL *s, int i, int check_err)
4866
0
{
4867
0
    int reason;
4868
0
    unsigned long l;
4869
0
    BIO *bio;
4870
0
    const SSL_CONNECTION *sc = SSL_CONNECTION_FROM_CONST_SSL(s);
4871
4872
0
    if (i > 0)
4873
0
        return SSL_ERROR_NONE;
4874
4875
0
#ifndef OPENSSL_NO_QUIC
4876
0
    if (IS_QUIC(s)) {
4877
0
        reason = ossl_quic_get_error(s, i);
4878
0
        if (reason != SSL_ERROR_NONE)
4879
0
            return reason;
4880
0
    }
4881
0
#endif
4882
4883
0
    if (sc == NULL)
4884
0
        return SSL_ERROR_SSL;
4885
4886
    /*
4887
     * Make things return SSL_ERROR_SYSCALL when doing SSL_do_handshake etc,
4888
     * where we do encode the error
4889
     */
4890
0
    if (check_err && (l = ERR_peek_error()) != 0) {
4891
0
        if (ERR_GET_LIB(l) == ERR_LIB_SYS)
4892
0
            return SSL_ERROR_SYSCALL;
4893
0
        else
4894
0
            return SSL_ERROR_SSL;
4895
0
    }
4896
4897
0
#ifndef OPENSSL_NO_QUIC
4898
0
    if (!IS_QUIC(s))
4899
0
#endif
4900
0
    {
4901
0
        if (SSL_want_read(s)) {
4902
0
            bio = SSL_get_rbio(s);
4903
0
            if (BIO_should_read(bio))
4904
0
                return SSL_ERROR_WANT_READ;
4905
0
            else if (BIO_should_write(bio))
4906
                /*
4907
                 * This one doesn't make too much sense ... We never try to
4908
                 * write to the rbio, and an application program where rbio and
4909
                 * wbio are separate couldn't even know what it should wait for.
4910
                 * However if we ever set s->rwstate incorrectly (so that we
4911
                 * have SSL_want_read(s) instead of SSL_want_write(s)) and rbio
4912
                 * and wbio *are* the same, this test works around that bug; so
4913
                 * it might be safer to keep it.
4914
                 */
4915
0
                return SSL_ERROR_WANT_WRITE;
4916
0
            else if (BIO_should_io_special(bio)) {
4917
0
                reason = BIO_get_retry_reason(bio);
4918
0
                if (reason == BIO_RR_CONNECT)
4919
0
                    return SSL_ERROR_WANT_CONNECT;
4920
0
                else if (reason == BIO_RR_ACCEPT)
4921
0
                    return SSL_ERROR_WANT_ACCEPT;
4922
0
                else
4923
0
                    return SSL_ERROR_SYSCALL; /* unknown */
4924
0
            }
4925
0
        }
4926
4927
0
        if (SSL_want_write(s)) {
4928
            /*
4929
             * Access wbio directly - in order to use the buffered bio if
4930
             * present
4931
             */
4932
0
            bio = sc->wbio;
4933
0
            if (BIO_should_write(bio))
4934
0
                return SSL_ERROR_WANT_WRITE;
4935
0
            else if (BIO_should_read(bio))
4936
                /*
4937
                 * See above (SSL_want_read(s) with BIO_should_write(bio))
4938
                 */
4939
0
                return SSL_ERROR_WANT_READ;
4940
0
            else if (BIO_should_io_special(bio)) {
4941
0
                reason = BIO_get_retry_reason(bio);
4942
0
                if (reason == BIO_RR_CONNECT)
4943
0
                    return SSL_ERROR_WANT_CONNECT;
4944
0
                else if (reason == BIO_RR_ACCEPT)
4945
0
                    return SSL_ERROR_WANT_ACCEPT;
4946
0
                else
4947
0
                    return SSL_ERROR_SYSCALL;
4948
0
            }
4949
0
        }
4950
0
    }
4951
4952
0
    if (SSL_want_x509_lookup(s))
4953
0
        return SSL_ERROR_WANT_X509_LOOKUP;
4954
0
    if (SSL_want_retry_verify(s))
4955
0
        return SSL_ERROR_WANT_RETRY_VERIFY;
4956
0
    if (SSL_want_async(s))
4957
0
        return SSL_ERROR_WANT_ASYNC;
4958
0
    if (SSL_want_async_job(s))
4959
0
        return SSL_ERROR_WANT_ASYNC_JOB;
4960
0
    if (SSL_want_client_hello_cb(s))
4961
0
        return SSL_ERROR_WANT_CLIENT_HELLO_CB;
4962
4963
0
    if ((sc->shutdown & SSL_RECEIVED_SHUTDOWN) &&
4964
0
        (sc->s3.warn_alert == SSL_AD_CLOSE_NOTIFY))
4965
0
        return SSL_ERROR_ZERO_RETURN;
4966
4967
0
    return SSL_ERROR_SYSCALL;
4968
0
}
4969
4970
static int ssl_do_handshake_intern(void *vargs)
4971
0
{
4972
0
    struct ssl_async_args *args = (struct ssl_async_args *)vargs;
4973
0
    SSL *s = args->s;
4974
0
    SSL_CONNECTION *sc = SSL_CONNECTION_FROM_SSL(s);
4975
4976
0
    if (sc == NULL)
4977
0
        return -1;
4978
4979
0
    return sc->handshake_func(s);
4980
0
}
4981
4982
int SSL_do_handshake(SSL *s)
4983
0
{
4984
0
    int ret = 1;
4985
0
    SSL_CONNECTION *sc = SSL_CONNECTION_FROM_SSL(s);
4986
4987
0
#ifndef OPENSSL_NO_QUIC
4988
0
    if (IS_QUIC(s))
4989
0
        return ossl_quic_do_handshake(s);
4990
0
#endif
4991
4992
0
    if (sc == NULL)
4993
0
        return -1;
4994
4995
0
    if (sc->handshake_func == NULL) {
4996
0
        ERR_raise(ERR_LIB_SSL, SSL_R_CONNECTION_TYPE_NOT_SET);
4997
0
        return -1;
4998
0
    }
4999
5000
0
    if (!ossl_statem_check_finish_init(sc, -1))
5001
0
        return -1;
5002
5003
0
    s->method->ssl_renegotiate_check(s, 0);
5004
5005
0
    if (SSL_in_init(s) || SSL_in_before(s)) {
5006
0
        if ((sc->mode & SSL_MODE_ASYNC) && ASYNC_get_current_job() == NULL) {
5007
0
            struct ssl_async_args args;
5008
5009
0
            memset(&args, 0, sizeof(args));
5010
0
            args.s = s;
5011
5012
0
            ret = ssl_start_async_job(s, &args, ssl_do_handshake_intern);
5013
0
        } else {
5014
0
            ret = sc->handshake_func(s);
5015
0
        }
5016
0
    }
5017
5018
0
    return ret;
5019
0
}
5020
5021
void SSL_set_accept_state(SSL *s)
5022
0
{
5023
0
    SSL_CONNECTION *sc = SSL_CONNECTION_FROM_SSL_ONLY(s);
5024
5025
0
#ifndef OPENSSL_NO_QUIC
5026
0
    if (IS_QUIC(s)) {
5027
        /* We suppress errors because this is a void function */
5028
0
        (void)ossl_quic_set_accept_state(s, 0 /* suppress errors */);
5029
0
        return;
5030
0
    }
5031
0
#endif
5032
5033
0
    sc->server = 1;
5034
0
    sc->shutdown = 0;
5035
0
    ossl_statem_clear(sc);
5036
0
    sc->handshake_func = s->method->ssl_accept;
5037
    /* Ignore return value. Its a void public API function */
5038
0
    RECORD_LAYER_reset(&sc->rlayer);
5039
0
}
5040
5041
void SSL_set_connect_state(SSL *s)
5042
0
{
5043
0
    SSL_CONNECTION *sc = SSL_CONNECTION_FROM_SSL_ONLY(s);
5044
5045
0
#ifndef OPENSSL_NO_QUIC
5046
0
    if (IS_QUIC(s)) {
5047
        /* We suppress errors because this is a void function */
5048
0
        (void)ossl_quic_set_connect_state(s, 0 /* suppress errors */);
5049
0
        return;
5050
0
    }
5051
0
#endif
5052
5053
0
    sc->server = 0;
5054
0
    sc->shutdown = 0;
5055
0
    ossl_statem_clear(sc);
5056
0
    sc->handshake_func = s->method->ssl_connect;
5057
    /* Ignore return value. Its a void public API function */
5058
0
    RECORD_LAYER_reset(&sc->rlayer);
5059
0
}
5060
5061
int ssl_undefined_function(SSL *s)
5062
0
{
5063
0
    ERR_raise(ERR_LIB_SSL, ERR_R_SHOULD_NOT_HAVE_BEEN_CALLED);
5064
0
    return 0;
5065
0
}
5066
5067
int ssl_undefined_void_function(void)
5068
0
{
5069
0
    ERR_raise(ERR_LIB_SSL, ERR_R_SHOULD_NOT_HAVE_BEEN_CALLED);
5070
0
    return 0;
5071
0
}
5072
5073
const char *ssl_protocol_to_string(int version)
5074
0
{
5075
0
    switch (version) {
5076
0
    case TLS1_3_VERSION:
5077
0
        return "TLSv1.3";
5078
5079
0
    case TLS1_2_VERSION:
5080
0
        return "TLSv1.2";
5081
5082
0
    case TLS1_1_VERSION:
5083
0
        return "TLSv1.1";
5084
5085
0
    case TLS1_VERSION:
5086
0
        return "TLSv1";
5087
5088
0
    case SSL3_VERSION:
5089
0
        return "SSLv3";
5090
5091
0
    case DTLS1_BAD_VER:
5092
0
        return "DTLSv0.9";
5093
5094
0
    case DTLS1_VERSION:
5095
0
        return "DTLSv1";
5096
5097
0
    case DTLS1_2_VERSION:
5098
0
        return "DTLSv1.2";
5099
5100
0
    default:
5101
0
        return "unknown";
5102
0
    }
5103
0
}
5104
5105
const char *SSL_get_version(const SSL *s)
5106
0
{
5107
0
    const SSL_CONNECTION *sc = SSL_CONNECTION_FROM_CONST_SSL(s);
5108
5109
0
#ifndef OPENSSL_NO_QUIC
5110
    /* We only support QUICv1 - so if its QUIC its QUICv1 */
5111
0
    if (s->type == SSL_TYPE_QUIC_CONNECTION || s->type == SSL_TYPE_QUIC_XSO)
5112
0
        return "QUICv1";
5113
0
#endif
5114
5115
0
    if (sc == NULL)
5116
0
        return NULL;
5117
5118
0
    return ssl_protocol_to_string(sc->version);
5119
0
}
5120
5121
__owur int SSL_get_handshake_rtt(const SSL *s, uint64_t *rtt)
5122
0
{
5123
0
    const SSL_CONNECTION *sc = SSL_CONNECTION_FROM_CONST_SSL(s);
5124
5125
0
    if (sc == NULL)
5126
0
        return -1;
5127
0
    if (sc->ts_msg_write.t <= 0 || sc->ts_msg_read.t <= 0)
5128
0
        return 0; /* data not (yet) available */
5129
0
    if (sc->ts_msg_read.t < sc->ts_msg_write.t)
5130
0
        return -1;
5131
5132
0
    *rtt = ossl_time2us(ossl_time_subtract(sc->ts_msg_read, sc->ts_msg_write));
5133
0
    return 1;
5134
0
}
5135
5136
static int dup_ca_names(STACK_OF(X509_NAME) **dst, STACK_OF(X509_NAME) *src)
5137
0
{
5138
0
    STACK_OF(X509_NAME) *sk;
5139
0
    X509_NAME *xn;
5140
0
    int i;
5141
5142
0
    if (src == NULL) {
5143
0
        *dst = NULL;
5144
0
        return 1;
5145
0
    }
5146
5147
0
    if ((sk = sk_X509_NAME_new_null()) == NULL)
5148
0
        return 0;
5149
0
    for (i = 0; i < sk_X509_NAME_num(src); i++) {
5150
0
        xn = X509_NAME_dup(sk_X509_NAME_value(src, i));
5151
0
        if (xn == NULL) {
5152
0
            sk_X509_NAME_pop_free(sk, X509_NAME_free);
5153
0
            return 0;
5154
0
        }
5155
0
        if (sk_X509_NAME_insert(sk, xn, i) == 0) {
5156
0
            X509_NAME_free(xn);
5157
0
            sk_X509_NAME_pop_free(sk, X509_NAME_free);
5158
0
            return 0;
5159
0
        }
5160
0
    }
5161
0
    *dst = sk;
5162
5163
0
    return 1;
5164
0
}
5165
5166
SSL *SSL_dup(SSL *s)
5167
0
{
5168
0
    SSL *ret;
5169
0
    int i;
5170
    /* TODO(QUIC FUTURE): Add an SSL_METHOD function for duplication */
5171
0
    SSL_CONNECTION *retsc;
5172
0
    SSL_CONNECTION *sc = SSL_CONNECTION_FROM_SSL_ONLY(s);
5173
5174
0
    if (sc == NULL)
5175
0
        return NULL;
5176
5177
    /* If we're not quiescent, just up_ref! */
5178
0
    if (!SSL_in_init(s) || !SSL_in_before(s)) {
5179
0
        CRYPTO_UP_REF(&s->references, &i);
5180
0
        return s;
5181
0
    }
5182
5183
    /*
5184
     * Otherwise, copy configuration state, and session if set.
5185
     */
5186
0
    if ((ret = SSL_new(SSL_get_SSL_CTX(s))) == NULL)
5187
0
        return NULL;
5188
0
    if ((retsc = SSL_CONNECTION_FROM_SSL_ONLY(ret)) == NULL)
5189
0
        goto err;
5190
5191
0
    if (sc->session != NULL) {
5192
        /*
5193
         * Arranges to share the same session via up_ref.  This "copies"
5194
         * session-id, SSL_METHOD, sid_ctx, and 'cert'
5195
         */
5196
0
        if (!SSL_copy_session_id(ret, s))
5197
0
            goto err;
5198
0
    } else {
5199
        /*
5200
         * No session has been established yet, so we have to expect that
5201
         * s->cert or ret->cert will be changed later -- they should not both
5202
         * point to the same object, and thus we can't use
5203
         * SSL_copy_session_id.
5204
         */
5205
0
        if (!SSL_set_ssl_method(ret, s->method))
5206
0
            goto err;
5207
5208
0
        if (sc->cert != NULL) {
5209
0
            ssl_cert_free(retsc->cert);
5210
0
            retsc->cert = ssl_cert_dup(sc->cert);
5211
0
            if (retsc->cert == NULL)
5212
0
                goto err;
5213
0
        }
5214
5215
0
        if (!SSL_set_session_id_context(ret, sc->sid_ctx,
5216
0
                                        (int)sc->sid_ctx_length))
5217
0
            goto err;
5218
0
    }
5219
5220
0
    if (!ssl_dane_dup(retsc, sc))
5221
0
        goto err;
5222
0
    retsc->version = sc->version;
5223
0
    retsc->options = sc->options;
5224
0
    retsc->min_proto_version = sc->min_proto_version;
5225
0
    retsc->max_proto_version = sc->max_proto_version;
5226
0
    retsc->mode = sc->mode;
5227
0
    SSL_set_max_cert_list(ret, SSL_get_max_cert_list(s));
5228
0
    SSL_set_read_ahead(ret, SSL_get_read_ahead(s));
5229
0
    retsc->msg_callback = sc->msg_callback;
5230
0
    retsc->msg_callback_arg = sc->msg_callback_arg;
5231
0
    SSL_set_verify(ret, SSL_get_verify_mode(s), SSL_get_verify_callback(s));
5232
0
    SSL_set_verify_depth(ret, SSL_get_verify_depth(s));
5233
0
    retsc->generate_session_id = sc->generate_session_id;
5234
5235
0
    SSL_set_info_callback(ret, SSL_get_info_callback(s));
5236
5237
    /* copy app data, a little dangerous perhaps */
5238
0
    if (!CRYPTO_dup_ex_data(CRYPTO_EX_INDEX_SSL, &ret->ex_data, &s->ex_data))
5239
0
        goto err;
5240
5241
0
    retsc->server = sc->server;
5242
0
    if (sc->handshake_func) {
5243
0
        if (sc->server)
5244
0
            SSL_set_accept_state(ret);
5245
0
        else
5246
0
            SSL_set_connect_state(ret);
5247
0
    }
5248
0
    retsc->shutdown = sc->shutdown;
5249
0
    retsc->hit = sc->hit;
5250
5251
0
    retsc->default_passwd_callback = sc->default_passwd_callback;
5252
0
    retsc->default_passwd_callback_userdata = sc->default_passwd_callback_userdata;
5253
5254
0
    X509_VERIFY_PARAM_inherit(retsc->param, sc->param);
5255
5256
    /* dup the cipher_list and cipher_list_by_id stacks */
5257
0
    if (sc->cipher_list != NULL) {
5258
0
        if ((retsc->cipher_list = sk_SSL_CIPHER_dup(sc->cipher_list)) == NULL)
5259
0
            goto err;
5260
0
    }
5261
0
    if (sc->cipher_list_by_id != NULL)
5262
0
        if ((retsc->cipher_list_by_id = sk_SSL_CIPHER_dup(sc->cipher_list_by_id))
5263
0
            == NULL)
5264
0
            goto err;
5265
5266
    /* Dup the client_CA list */
5267
0
    if (!dup_ca_names(&retsc->ca_names, sc->ca_names)
5268
0
            || !dup_ca_names(&retsc->client_ca_names, sc->client_ca_names))
5269
0
        goto err;
5270
5271
0
    return ret;
5272
5273
0
 err:
5274
0
    SSL_free(ret);
5275
0
    return NULL;
5276
0
}
5277
5278
X509 *SSL_get_certificate(const SSL *s)
5279
0
{
5280
0
    SSL_CONNECTION *sc = SSL_CONNECTION_FROM_SSL(s);
5281
5282
0
    if (sc == NULL)
5283
0
        return NULL;
5284
5285
0
    if (sc->cert != NULL)
5286
0
        return sc->cert->key->x509;
5287
0
    else
5288
0
        return NULL;
5289
0
}
5290
5291
EVP_PKEY *SSL_get_privatekey(const SSL *s)
5292
0
{
5293
0
    const SSL_CONNECTION *sc = SSL_CONNECTION_FROM_CONST_SSL(s);
5294
5295
0
    if (sc == NULL)
5296
0
        return NULL;
5297
5298
0
    if (sc->cert != NULL)
5299
0
        return sc->cert->key->privatekey;
5300
0
    else
5301
0
        return NULL;
5302
0
}
5303
5304
X509 *SSL_CTX_get0_certificate(const SSL_CTX *ctx)
5305
0
{
5306
0
    if (ctx->cert != NULL)
5307
0
        return ctx->cert->key->x509;
5308
0
    else
5309
0
        return NULL;
5310
0
}
5311
5312
EVP_PKEY *SSL_CTX_get0_privatekey(const SSL_CTX *ctx)
5313
0
{
5314
0
    if (ctx->cert != NULL)
5315
0
        return ctx->cert->key->privatekey;
5316
0
    else
5317
0
        return NULL;
5318
0
}
5319
5320
const SSL_CIPHER *SSL_get_current_cipher(const SSL *s)
5321
0
{
5322
0
    const SSL_CONNECTION *sc = SSL_CONNECTION_FROM_CONST_SSL(s);
5323
5324
0
    if (sc == NULL)
5325
0
        return NULL;
5326
5327
0
    if ((sc->session != NULL) && (sc->session->cipher != NULL))
5328
0
        return sc->session->cipher;
5329
0
    return NULL;
5330
0
}
5331
5332
const SSL_CIPHER *SSL_get_pending_cipher(const SSL *s)
5333
0
{
5334
0
    const SSL_CONNECTION *sc = SSL_CONNECTION_FROM_CONST_SSL(s);
5335
5336
0
    if (sc == NULL)
5337
0
        return NULL;
5338
5339
0
    return sc->s3.tmp.new_cipher;
5340
0
}
5341
5342
const COMP_METHOD *SSL_get_current_compression(const SSL *s)
5343
0
{
5344
0
#ifndef OPENSSL_NO_COMP
5345
0
    const SSL_CONNECTION *sc = SSL_CONNECTION_FROM_CONST_SSL_ONLY(s);
5346
5347
0
    if (sc == NULL)
5348
0
        return NULL;
5349
5350
0
    return sc->rlayer.wrlmethod->get_compression(sc->rlayer.wrl);
5351
#else
5352
    return NULL;
5353
#endif
5354
0
}
5355
5356
const COMP_METHOD *SSL_get_current_expansion(const SSL *s)
5357
0
{
5358
0
#ifndef OPENSSL_NO_COMP
5359
0
    const SSL_CONNECTION *sc = SSL_CONNECTION_FROM_CONST_SSL_ONLY(s);
5360
5361
0
    if (sc == NULL)
5362
0
        return NULL;
5363
5364
0
    return sc->rlayer.rrlmethod->get_compression(sc->rlayer.rrl);
5365
#else
5366
    return NULL;
5367
#endif
5368
0
}
5369
5370
int ssl_init_wbio_buffer(SSL_CONNECTION *s)
5371
0
{
5372
0
    BIO *bbio;
5373
5374
0
    if (s->bbio != NULL) {
5375
        /* Already buffered. */
5376
0
        return 1;
5377
0
    }
5378
5379
0
    bbio = BIO_new(BIO_f_buffer());
5380
0
    if (bbio == NULL || BIO_set_read_buffer_size(bbio, 1) <= 0) {
5381
0
        BIO_free(bbio);
5382
0
        ERR_raise(ERR_LIB_SSL, ERR_R_BUF_LIB);
5383
0
        return 0;
5384
0
    }
5385
0
    s->bbio = bbio;
5386
0
    s->wbio = BIO_push(bbio, s->wbio);
5387
5388
0
    s->rlayer.wrlmethod->set1_bio(s->rlayer.wrl, s->wbio);
5389
5390
0
    return 1;
5391
0
}
5392
5393
int ssl_free_wbio_buffer(SSL_CONNECTION *s)
5394
0
{
5395
    /* callers ensure s is never null */
5396
0
    if (s->bbio == NULL)
5397
0
        return 1;
5398
5399
0
    s->wbio = BIO_pop(s->wbio);
5400
0
    s->rlayer.wrlmethod->set1_bio(s->rlayer.wrl, s->wbio);
5401
5402
0
    BIO_free(s->bbio);
5403
0
    s->bbio = NULL;
5404
5405
0
    return 1;
5406
0
}
5407
5408
void SSL_CTX_set_quiet_shutdown(SSL_CTX *ctx, int mode)
5409
0
{
5410
0
    ctx->quiet_shutdown = mode;
5411
0
}
5412
5413
int SSL_CTX_get_quiet_shutdown(const SSL_CTX *ctx)
5414
0
{
5415
0
    return ctx->quiet_shutdown;
5416
0
}
5417
5418
void SSL_set_quiet_shutdown(SSL *s, int mode)
5419
0
{
5420
0
    SSL_CONNECTION *sc = SSL_CONNECTION_FROM_SSL_ONLY(s);
5421
5422
    /* Not supported with QUIC */
5423
0
    if (sc == NULL)
5424
0
        return;
5425
5426
0
    sc->quiet_shutdown = mode;
5427
0
}
5428
5429
int SSL_get_quiet_shutdown(const SSL *s)
5430
0
{
5431
0
    const SSL_CONNECTION *sc = SSL_CONNECTION_FROM_CONST_SSL_ONLY(s);
5432
5433
    /* Not supported with QUIC */
5434
0
    if (sc == NULL)
5435
0
        return 0;
5436
5437
0
    return sc->quiet_shutdown;
5438
0
}
5439
5440
void SSL_set_shutdown(SSL *s, int mode)
5441
0
{
5442
0
    SSL_CONNECTION *sc = SSL_CONNECTION_FROM_SSL_ONLY(s);
5443
5444
    /* Not supported with QUIC */
5445
0
    if (sc == NULL)
5446
0
        return;
5447
5448
0
    sc->shutdown = mode;
5449
0
}
5450
5451
int SSL_get_shutdown(const SSL *s)
5452
0
{
5453
0
    const SSL_CONNECTION *sc = SSL_CONNECTION_FROM_CONST_SSL_ONLY(s);
5454
5455
0
#ifndef OPENSSL_NO_QUIC
5456
    /* QUIC: Just indicate whether the connection was shutdown cleanly. */
5457
0
    if (IS_QUIC(s))
5458
0
        return ossl_quic_get_shutdown(s);
5459
0
#endif
5460
5461
0
    if (sc == NULL)
5462
0
        return 0;
5463
5464
0
    return sc->shutdown;
5465
0
}
5466
5467
int SSL_version(const SSL *s)
5468
0
{
5469
0
    const SSL_CONNECTION *sc = SSL_CONNECTION_FROM_CONST_SSL(s);
5470
5471
0
#ifndef OPENSSL_NO_QUIC
5472
    /* We only support QUICv1 - so if its QUIC its QUICv1 */
5473
0
    if (s->type == SSL_TYPE_QUIC_CONNECTION || s->type == SSL_TYPE_QUIC_XSO)
5474
0
        return OSSL_QUIC1_VERSION;
5475
0
#endif
5476
0
    if (sc == NULL)
5477
0
        return 0;
5478
5479
0
    return sc->version;
5480
0
}
5481
5482
int SSL_client_version(const SSL *s)
5483
0
{
5484
0
    const SSL_CONNECTION *sc = SSL_CONNECTION_FROM_CONST_SSL(s);
5485
5486
0
#ifndef OPENSSL_NO_QUIC
5487
    /* We only support QUICv1 - so if its QUIC its QUICv1 */
5488
0
    if (s->type == SSL_TYPE_QUIC_CONNECTION || s->type == SSL_TYPE_QUIC_XSO)
5489
0
        return OSSL_QUIC1_VERSION;
5490
0
#endif
5491
0
    if (sc == NULL)
5492
0
        return 0;
5493
5494
0
    return sc->client_version;
5495
0
}
5496
5497
SSL_CTX *SSL_get_SSL_CTX(const SSL *ssl)
5498
0
{
5499
0
    return ssl->ctx;
5500
0
}
5501
5502
SSL_CTX *SSL_set_SSL_CTX(SSL *ssl, SSL_CTX *ctx)
5503
0
{
5504
0
    CERT *new_cert;
5505
0
    SSL_CONNECTION *sc = SSL_CONNECTION_FROM_SSL_ONLY(ssl);
5506
5507
    /* TODO(QUIC FUTURE): Add support for QUIC */
5508
0
    if (sc == NULL)
5509
0
        return NULL;
5510
5511
0
    if (ssl->ctx == ctx)
5512
0
        return ssl->ctx;
5513
0
    if (ctx == NULL)
5514
0
        ctx = sc->session_ctx;
5515
0
    new_cert = ssl_cert_dup(ctx->cert);
5516
0
    if (new_cert == NULL)
5517
0
        goto err;
5518
0
    if (!custom_exts_copy_conn(&new_cert->custext, &sc->cert->custext))
5519
0
        goto err;
5520
0
    if (!custom_exts_copy_flags(&new_cert->custext, &sc->cert->custext))
5521
0
        goto err;
5522
5523
    /*
5524
     * Program invariant: |sid_ctx| has fixed size (SSL_MAX_SID_CTX_LENGTH),
5525
     * so setter APIs must prevent invalid lengths from entering the system.
5526
     */
5527
0
    if (!ossl_assert(sc->sid_ctx_length <= sizeof(sc->sid_ctx)))
5528
0
        goto err;
5529
0
    if (!SSL_CTX_up_ref(ctx))
5530
0
        goto err;
5531
5532
    /*
5533
     * If the session ID context matches that of the parent SSL_CTX,
5534
     * inherit it from the new SSL_CTX as well. If however the context does
5535
     * not match (i.e., it was set per-ssl with SSL_set_session_id_context),
5536
     * leave it unchanged.
5537
     */
5538
0
    if ((ssl->ctx != NULL) &&
5539
0
        (sc->sid_ctx_length == ssl->ctx->sid_ctx_length) &&
5540
0
        (memcmp(sc->sid_ctx, ssl->ctx->sid_ctx, sc->sid_ctx_length) == 0)) {
5541
0
        sc->sid_ctx_length = ctx->sid_ctx_length;
5542
0
        memcpy(&sc->sid_ctx, &ctx->sid_ctx, sizeof(sc->sid_ctx));
5543
0
    }
5544
5545
0
    ssl_cert_free(sc->cert);
5546
0
    sc->cert = new_cert;
5547
0
    SSL_CTX_free(ssl->ctx);     /* decrement reference count */
5548
0
    ssl->ctx = ctx;
5549
5550
0
    return ssl->ctx;
5551
5552
0
err:
5553
0
    ssl_cert_free(new_cert);
5554
0
    return NULL;
5555
0
}
5556
5557
int SSL_CTX_set_default_verify_paths(SSL_CTX *ctx)
5558
0
{
5559
0
    return X509_STORE_set_default_paths_ex(ctx->cert_store, ctx->libctx,
5560
0
                                           ctx->propq);
5561
0
}
5562
5563
int SSL_CTX_set_default_verify_dir(SSL_CTX *ctx)
5564
0
{
5565
0
    X509_LOOKUP *lookup;
5566
5567
0
    lookup = X509_STORE_add_lookup(ctx->cert_store, X509_LOOKUP_hash_dir());
5568
0
    if (lookup == NULL)
5569
0
        return 0;
5570
5571
    /* We ignore errors, in case the directory doesn't exist */
5572
0
    ERR_set_mark();
5573
5574
0
    X509_LOOKUP_add_dir(lookup, NULL, X509_FILETYPE_DEFAULT);
5575
5576
0
    ERR_pop_to_mark();
5577
5578
0
    return 1;
5579
0
}
5580
5581
int SSL_CTX_set_default_verify_file(SSL_CTX *ctx)
5582
0
{
5583
0
    X509_LOOKUP *lookup;
5584
5585
0
    lookup = X509_STORE_add_lookup(ctx->cert_store, X509_LOOKUP_file());
5586
0
    if (lookup == NULL)
5587
0
        return 0;
5588
5589
    /* We ignore errors, in case the file doesn't exist */
5590
0
    ERR_set_mark();
5591
5592
0
    X509_LOOKUP_load_file_ex(lookup, NULL, X509_FILETYPE_DEFAULT, ctx->libctx,
5593
0
                             ctx->propq);
5594
5595
0
    ERR_pop_to_mark();
5596
5597
0
    return 1;
5598
0
}
5599
5600
int SSL_CTX_set_default_verify_store(SSL_CTX *ctx)
5601
0
{
5602
0
    X509_LOOKUP *lookup;
5603
5604
0
    lookup = X509_STORE_add_lookup(ctx->cert_store, X509_LOOKUP_store());
5605
0
    if (lookup == NULL)
5606
0
        return 0;
5607
5608
    /* We ignore errors, in case the directory doesn't exist */
5609
0
    ERR_set_mark();
5610
5611
0
    X509_LOOKUP_add_store_ex(lookup, NULL, ctx->libctx, ctx->propq);
5612
5613
0
    ERR_pop_to_mark();
5614
5615
0
    return 1;
5616
0
}
5617
5618
int SSL_CTX_load_verify_file(SSL_CTX *ctx, const char *CAfile)
5619
0
{
5620
0
    return X509_STORE_load_file_ex(ctx->cert_store, CAfile, ctx->libctx,
5621
0
                                   ctx->propq);
5622
0
}
5623
5624
int SSL_CTX_load_verify_dir(SSL_CTX *ctx, const char *CApath)
5625
0
{
5626
0
    return X509_STORE_load_path(ctx->cert_store, CApath);
5627
0
}
5628
5629
int SSL_CTX_load_verify_store(SSL_CTX *ctx, const char *CAstore)
5630
0
{
5631
0
    return X509_STORE_load_store_ex(ctx->cert_store, CAstore, ctx->libctx,
5632
0
                                    ctx->propq);
5633
0
}
5634
5635
int SSL_CTX_load_verify_locations(SSL_CTX *ctx, const char *CAfile,
5636
                                  const char *CApath)
5637
0
{
5638
0
    if (CAfile == NULL && CApath == NULL)
5639
0
        return 0;
5640
0
    if (CAfile != NULL && !SSL_CTX_load_verify_file(ctx, CAfile))
5641
0
        return 0;
5642
0
    if (CApath != NULL && !SSL_CTX_load_verify_dir(ctx, CApath))
5643
0
        return 0;
5644
0
    return 1;
5645
0
}
5646
5647
void SSL_set_info_callback(SSL *ssl,
5648
                           void (*cb) (const SSL *ssl, int type, int val))
5649
0
{
5650
0
    SSL_CONNECTION *sc = SSL_CONNECTION_FROM_SSL(ssl);
5651
5652
0
    if (sc == NULL)
5653
0
        return;
5654
5655
0
    sc->info_callback = cb;
5656
0
}
5657
5658
/*
5659
 * One compiler (Diab DCC) doesn't like argument names in returned function
5660
 * pointer.
5661
 */
5662
void (*SSL_get_info_callback(const SSL *ssl)) (const SSL * /* ssl */ ,
5663
                                               int /* type */ ,
5664
0
                                               int /* val */ ) {
5665
0
    const SSL_CONNECTION *sc = SSL_CONNECTION_FROM_CONST_SSL(ssl);
5666
5667
0
    if (sc == NULL)
5668
0
        return NULL;
5669
5670
0
    return sc->info_callback;
5671
0
}
5672
5673
void SSL_set_verify_result(SSL *ssl, long arg)
5674
0
{
5675
0
    SSL_CONNECTION *sc = SSL_CONNECTION_FROM_SSL(ssl);
5676
5677
0
    if (sc == NULL)
5678
0
        return;
5679
5680
0
    sc->verify_result = arg;
5681
0
}
5682
5683
long SSL_get_verify_result(const SSL *ssl)
5684
0
{
5685
0
    const SSL_CONNECTION *sc = SSL_CONNECTION_FROM_CONST_SSL(ssl);
5686
5687
0
    if (sc == NULL)
5688
0
        return 0;
5689
5690
0
    return sc->verify_result;
5691
0
}
5692
5693
size_t SSL_get_client_random(const SSL *ssl, unsigned char *out, size_t outlen)
5694
0
{
5695
0
    const SSL_CONNECTION *sc = SSL_CONNECTION_FROM_CONST_SSL(ssl);
5696
5697
0
    if (sc == NULL)
5698
0
        return 0;
5699
5700
0
    if (outlen == 0)
5701
0
        return sizeof(sc->s3.client_random);
5702
0
    if (outlen > sizeof(sc->s3.client_random))
5703
0
        outlen = sizeof(sc->s3.client_random);
5704
0
    memcpy(out, sc->s3.client_random, outlen);
5705
0
    return outlen;
5706
0
}
5707
5708
size_t SSL_get_server_random(const SSL *ssl, unsigned char *out, size_t outlen)
5709
0
{
5710
0
    const SSL_CONNECTION *sc = SSL_CONNECTION_FROM_CONST_SSL(ssl);
5711
5712
0
    if (sc == NULL)
5713
0
        return 0;
5714
5715
0
    if (outlen == 0)
5716
0
        return sizeof(sc->s3.server_random);
5717
0
    if (outlen > sizeof(sc->s3.server_random))
5718
0
        outlen = sizeof(sc->s3.server_random);
5719
0
    memcpy(out, sc->s3.server_random, outlen);
5720
0
    return outlen;
5721
0
}
5722
5723
size_t SSL_SESSION_get_master_key(const SSL_SESSION *session,
5724
                                  unsigned char *out, size_t outlen)
5725
0
{
5726
0
    if (outlen == 0)
5727
0
        return session->master_key_length;
5728
0
    if (outlen > session->master_key_length)
5729
0
        outlen = session->master_key_length;
5730
0
    memcpy(out, session->master_key, outlen);
5731
0
    return outlen;
5732
0
}
5733
5734
int SSL_SESSION_set1_master_key(SSL_SESSION *sess, const unsigned char *in,
5735
                                size_t len)
5736
0
{
5737
0
    if (len > sizeof(sess->master_key))
5738
0
        return 0;
5739
5740
0
    memcpy(sess->master_key, in, len);
5741
0
    sess->master_key_length = len;
5742
0
    return 1;
5743
0
}
5744
5745
5746
int SSL_set_ex_data(SSL *s, int idx, void *arg)
5747
0
{
5748
0
    return CRYPTO_set_ex_data(&s->ex_data, idx, arg);
5749
0
}
5750
5751
void *SSL_get_ex_data(const SSL *s, int idx)
5752
0
{
5753
0
    return CRYPTO_get_ex_data(&s->ex_data, idx);
5754
0
}
5755
5756
int SSL_CTX_set_ex_data(SSL_CTX *s, int idx, void *arg)
5757
0
{
5758
0
    return CRYPTO_set_ex_data(&s->ex_data, idx, arg);
5759
0
}
5760
5761
void *SSL_CTX_get_ex_data(const SSL_CTX *s, int idx)
5762
0
{
5763
0
    return CRYPTO_get_ex_data(&s->ex_data, idx);
5764
0
}
5765
5766
X509_STORE *SSL_CTX_get_cert_store(const SSL_CTX *ctx)
5767
0
{
5768
0
    return ctx->cert_store;
5769
0
}
5770
5771
void SSL_CTX_set_cert_store(SSL_CTX *ctx, X509_STORE *store)
5772
0
{
5773
0
    X509_STORE_free(ctx->cert_store);
5774
0
    ctx->cert_store = store;
5775
0
}
5776
5777
void SSL_CTX_set1_cert_store(SSL_CTX *ctx, X509_STORE *store)
5778
0
{
5779
0
    if (store != NULL && !X509_STORE_up_ref(store))
5780
0
        return;
5781
5782
0
    SSL_CTX_set_cert_store(ctx, store);
5783
0
}
5784
5785
int SSL_want(const SSL *s)
5786
0
{
5787
0
    const SSL_CONNECTION *sc = SSL_CONNECTION_FROM_CONST_SSL(s);
5788
5789
0
#ifndef OPENSSL_NO_QUIC
5790
0
    if (IS_QUIC(s))
5791
0
        return ossl_quic_want(s);
5792
0
#endif
5793
5794
0
    if (sc == NULL)
5795
0
        return SSL_NOTHING;
5796
5797
0
    return sc->rwstate;
5798
0
}
5799
5800
#ifndef OPENSSL_NO_PSK
5801
int SSL_CTX_use_psk_identity_hint(SSL_CTX *ctx, const char *identity_hint)
5802
0
{
5803
0
    if (identity_hint != NULL && strlen(identity_hint) > PSK_MAX_IDENTITY_LEN) {
5804
0
        ERR_raise(ERR_LIB_SSL, SSL_R_DATA_LENGTH_TOO_LONG);
5805
0
        return 0;
5806
0
    }
5807
0
    OPENSSL_free(ctx->cert->psk_identity_hint);
5808
0
    if (identity_hint != NULL) {
5809
0
        ctx->cert->psk_identity_hint = OPENSSL_strdup(identity_hint);
5810
0
        if (ctx->cert->psk_identity_hint == NULL)
5811
0
            return 0;
5812
0
    } else
5813
0
        ctx->cert->psk_identity_hint = NULL;
5814
0
    return 1;
5815
0
}
5816
5817
int SSL_use_psk_identity_hint(SSL *s, const char *identity_hint)
5818
0
{
5819
0
    SSL_CONNECTION *sc = SSL_CONNECTION_FROM_SSL(s);
5820
5821
0
    if (sc == NULL)
5822
0
        return 0;
5823
5824
0
    if (identity_hint != NULL && strlen(identity_hint) > PSK_MAX_IDENTITY_LEN) {
5825
0
        ERR_raise(ERR_LIB_SSL, SSL_R_DATA_LENGTH_TOO_LONG);
5826
0
        return 0;
5827
0
    }
5828
0
    OPENSSL_free(sc->cert->psk_identity_hint);
5829
0
    if (identity_hint != NULL) {
5830
0
        sc->cert->psk_identity_hint = OPENSSL_strdup(identity_hint);
5831
0
        if (sc->cert->psk_identity_hint == NULL)
5832
0
            return 0;
5833
0
    } else
5834
0
        sc->cert->psk_identity_hint = NULL;
5835
0
    return 1;
5836
0
}
5837
5838
const char *SSL_get_psk_identity_hint(const SSL *s)
5839
0
{
5840
0
    const SSL_CONNECTION *sc = SSL_CONNECTION_FROM_CONST_SSL(s);
5841
5842
0
    if (sc == NULL || sc->session == NULL)
5843
0
        return NULL;
5844
5845
0
    return sc->session->psk_identity_hint;
5846
0
}
5847
5848
const char *SSL_get_psk_identity(const SSL *s)
5849
0
{
5850
0
    const SSL_CONNECTION *sc = SSL_CONNECTION_FROM_CONST_SSL(s);
5851
5852
0
    if (sc == NULL || sc->session == NULL)
5853
0
        return NULL;
5854
5855
0
    return sc->session->psk_identity;
5856
0
}
5857
5858
void SSL_set_psk_client_callback(SSL *s, SSL_psk_client_cb_func cb)
5859
0
{
5860
0
    SSL_CONNECTION *sc = SSL_CONNECTION_FROM_SSL(s);
5861
5862
0
    if (sc == NULL)
5863
0
        return;
5864
5865
0
    sc->psk_client_callback = cb;
5866
0
}
5867
5868
void SSL_CTX_set_psk_client_callback(SSL_CTX *ctx, SSL_psk_client_cb_func cb)
5869
0
{
5870
0
    ctx->psk_client_callback = cb;
5871
0
}
5872
5873
void SSL_set_psk_server_callback(SSL *s, SSL_psk_server_cb_func cb)
5874
0
{
5875
0
    SSL_CONNECTION *sc = SSL_CONNECTION_FROM_SSL(s);
5876
5877
0
    if (sc == NULL)
5878
0
        return;
5879
5880
0
    sc->psk_server_callback = cb;
5881
0
}
5882
5883
void SSL_CTX_set_psk_server_callback(SSL_CTX *ctx, SSL_psk_server_cb_func cb)
5884
0
{
5885
0
    ctx->psk_server_callback = cb;
5886
0
}
5887
#endif
5888
5889
void SSL_set_psk_find_session_callback(SSL *s, SSL_psk_find_session_cb_func cb)
5890
0
{
5891
0
    SSL_CONNECTION *sc = SSL_CONNECTION_FROM_SSL(s);
5892
5893
0
    if (sc == NULL)
5894
0
        return;
5895
5896
0
    sc->psk_find_session_cb = cb;
5897
0
}
5898
5899
void SSL_CTX_set_psk_find_session_callback(SSL_CTX *ctx,
5900
                                           SSL_psk_find_session_cb_func cb)
5901
0
{
5902
0
    ctx->psk_find_session_cb = cb;
5903
0
}
5904
5905
void SSL_set_psk_use_session_callback(SSL *s, SSL_psk_use_session_cb_func cb)
5906
0
{
5907
0
    SSL_CONNECTION *sc = SSL_CONNECTION_FROM_SSL(s);
5908
5909
0
    if (sc == NULL)
5910
0
        return;
5911
5912
0
    sc->psk_use_session_cb = cb;
5913
0
}
5914
5915
void SSL_CTX_set_psk_use_session_callback(SSL_CTX *ctx,
5916
                                           SSL_psk_use_session_cb_func cb)
5917
0
{
5918
0
    ctx->psk_use_session_cb = cb;
5919
0
}
5920
5921
void SSL_CTX_set_msg_callback(SSL_CTX *ctx,
5922
                              void (*cb) (int write_p, int version,
5923
                                          int content_type, const void *buf,
5924
                                          size_t len, SSL *ssl, void *arg))
5925
0
{
5926
0
    SSL_CTX_callback_ctrl(ctx, SSL_CTRL_SET_MSG_CALLBACK, (void (*)(void))cb);
5927
0
}
5928
5929
void SSL_set_msg_callback(SSL *ssl,
5930
                          void (*cb) (int write_p, int version,
5931
                                      int content_type, const void *buf,
5932
                                      size_t len, SSL *ssl, void *arg))
5933
0
{
5934
0
    SSL_callback_ctrl(ssl, SSL_CTRL_SET_MSG_CALLBACK, (void (*)(void))cb);
5935
0
}
5936
5937
void SSL_CTX_set_not_resumable_session_callback(SSL_CTX *ctx,
5938
                                                int (*cb) (SSL *ssl,
5939
                                                           int
5940
                                                           is_forward_secure))
5941
0
{
5942
0
    SSL_CTX_callback_ctrl(ctx, SSL_CTRL_SET_NOT_RESUMABLE_SESS_CB,
5943
0
                          (void (*)(void))cb);
5944
0
}
5945
5946
void SSL_set_not_resumable_session_callback(SSL *ssl,
5947
                                            int (*cb) (SSL *ssl,
5948
                                                       int is_forward_secure))
5949
0
{
5950
0
    SSL_callback_ctrl(ssl, SSL_CTRL_SET_NOT_RESUMABLE_SESS_CB,
5951
0
                      (void (*)(void))cb);
5952
0
}
5953
5954
void SSL_CTX_set_record_padding_callback(SSL_CTX *ctx,
5955
                                         size_t (*cb) (SSL *ssl, int type,
5956
                                                       size_t len, void *arg))
5957
0
{
5958
0
    ctx->record_padding_cb = cb;
5959
0
}
5960
5961
void SSL_CTX_set_record_padding_callback_arg(SSL_CTX *ctx, void *arg)
5962
0
{
5963
0
    ctx->record_padding_arg = arg;
5964
0
}
5965
5966
void *SSL_CTX_get_record_padding_callback_arg(const SSL_CTX *ctx)
5967
0
{
5968
0
    return ctx->record_padding_arg;
5969
0
}
5970
5971
int SSL_CTX_set_block_padding_ex(SSL_CTX *ctx, size_t app_block_size,
5972
                                 size_t hs_block_size)
5973
0
{
5974
0
    if (IS_QUIC_CTX(ctx) && (app_block_size > 1 || hs_block_size > 1))
5975
0
        return 0;
5976
5977
    /* block size of 0 or 1 is basically no padding */
5978
0
    if (app_block_size == 1) {
5979
0
        ctx->block_padding = 0;
5980
0
    } else if (app_block_size <= SSL3_RT_MAX_PLAIN_LENGTH) {
5981
0
        ctx->block_padding = app_block_size;
5982
0
    } else {
5983
0
        return 0;
5984
0
    }
5985
0
    if (hs_block_size == 1) {
5986
0
        ctx->hs_padding = 0;
5987
0
    } else if (hs_block_size <= SSL3_RT_MAX_PLAIN_LENGTH) {
5988
0
        ctx->hs_padding = hs_block_size;
5989
0
    } else {
5990
0
        return 0;
5991
0
    }
5992
0
    return 1;
5993
0
}
5994
5995
int SSL_CTX_set_block_padding(SSL_CTX *ctx, size_t block_size)
5996
0
{
5997
0
    return SSL_CTX_set_block_padding_ex(ctx, block_size, block_size);
5998
0
}
5999
6000
int SSL_set_record_padding_callback(SSL *ssl,
6001
                                     size_t (*cb) (SSL *ssl, int type,
6002
                                                   size_t len, void *arg))
6003
0
{
6004
0
    BIO *b;
6005
0
    SSL_CONNECTION *sc = SSL_CONNECTION_FROM_SSL_ONLY(ssl);
6006
6007
0
    if (sc == NULL)
6008
0
        return 0;
6009
6010
0
    b = SSL_get_wbio(ssl);
6011
0
    if (b == NULL || !BIO_get_ktls_send(b)) {
6012
0
        sc->rlayer.record_padding_cb = cb;
6013
0
        return 1;
6014
0
    }
6015
0
    return 0;
6016
0
}
6017
6018
void SSL_set_record_padding_callback_arg(SSL *ssl, void *arg)
6019
0
{
6020
0
    SSL_CONNECTION *sc = SSL_CONNECTION_FROM_SSL(ssl);
6021
6022
0
    if (sc == NULL)
6023
0
        return;
6024
6025
0
    sc->rlayer.record_padding_arg = arg;
6026
0
}
6027
6028
void *SSL_get_record_padding_callback_arg(const SSL *ssl)
6029
0
{
6030
0
    const SSL_CONNECTION *sc = SSL_CONNECTION_FROM_CONST_SSL(ssl);
6031
6032
0
    if (sc == NULL)
6033
0
        return NULL;
6034
6035
0
    return sc->rlayer.record_padding_arg;
6036
0
}
6037
6038
int SSL_set_block_padding_ex(SSL *ssl, size_t app_block_size,
6039
                             size_t hs_block_size)
6040
0
{
6041
0
    SSL_CONNECTION *sc = SSL_CONNECTION_FROM_SSL(ssl);
6042
6043
0
    if (sc == NULL
6044
0
        || (IS_QUIC(ssl)
6045
0
            && (app_block_size > 1 || hs_block_size > 1)))
6046
0
        return 0;
6047
6048
    /* block size of 0 or 1 is basically no padding */
6049
0
    if (app_block_size == 1) {
6050
0
        sc->rlayer.block_padding = 0;
6051
0
    } else if (app_block_size <= SSL3_RT_MAX_PLAIN_LENGTH) {
6052
0
        sc->rlayer.block_padding = app_block_size;
6053
0
    } else {
6054
0
        return 0;
6055
0
    }
6056
0
    if (hs_block_size == 1) {
6057
0
        sc->rlayer.hs_padding = 0;
6058
0
    } else if (hs_block_size <= SSL3_RT_MAX_PLAIN_LENGTH) {
6059
0
        sc->rlayer.hs_padding = hs_block_size;
6060
0
    } else {
6061
0
        return 0;
6062
0
    }
6063
0
    return 1;
6064
0
}
6065
6066
int SSL_set_block_padding(SSL *ssl, size_t block_size)
6067
0
{
6068
0
    return SSL_set_block_padding_ex(ssl, block_size, block_size);
6069
0
}
6070
6071
int SSL_set_num_tickets(SSL *s, size_t num_tickets)
6072
0
{
6073
0
    SSL_CONNECTION *sc = SSL_CONNECTION_FROM_SSL(s);
6074
6075
0
    if (sc == NULL)
6076
0
        return 0;
6077
6078
0
    sc->num_tickets = num_tickets;
6079
6080
0
    return 1;
6081
0
}
6082
6083
size_t SSL_get_num_tickets(const SSL *s)
6084
0
{
6085
0
    const SSL_CONNECTION *sc = SSL_CONNECTION_FROM_CONST_SSL(s);
6086
6087
0
    if (sc == NULL)
6088
0
        return 0;
6089
6090
0
    return sc->num_tickets;
6091
0
}
6092
6093
int SSL_CTX_set_num_tickets(SSL_CTX *ctx, size_t num_tickets)
6094
0
{
6095
0
    ctx->num_tickets = num_tickets;
6096
6097
0
    return 1;
6098
0
}
6099
6100
size_t SSL_CTX_get_num_tickets(const SSL_CTX *ctx)
6101
0
{
6102
0
    return ctx->num_tickets;
6103
0
}
6104
6105
/* Retrieve handshake hashes */
6106
int ssl_handshake_hash(SSL_CONNECTION *s,
6107
                       unsigned char *out, size_t outlen,
6108
                       size_t *hashlen)
6109
0
{
6110
0
    EVP_MD_CTX *ctx = NULL;
6111
0
    EVP_MD_CTX *hdgst = s->s3.handshake_dgst;
6112
0
    int hashleni = EVP_MD_CTX_get_size(hdgst);
6113
0
    int ret = 0;
6114
6115
0
    if (hashleni < 0 || (size_t)hashleni > outlen) {
6116
0
        SSLfatal(s, SSL_AD_INTERNAL_ERROR, ERR_R_INTERNAL_ERROR);
6117
0
        goto err;
6118
0
    }
6119
6120
0
    ctx = EVP_MD_CTX_new();
6121
0
    if (ctx == NULL) {
6122
0
        SSLfatal(s, SSL_AD_INTERNAL_ERROR, ERR_R_INTERNAL_ERROR);
6123
0
        goto err;
6124
0
    }
6125
6126
0
    if (!EVP_MD_CTX_copy_ex(ctx, hdgst)
6127
0
        || EVP_DigestFinal_ex(ctx, out, NULL) <= 0) {
6128
0
        SSLfatal(s, SSL_AD_INTERNAL_ERROR, ERR_R_INTERNAL_ERROR);
6129
0
        goto err;
6130
0
    }
6131
6132
0
    *hashlen = hashleni;
6133
6134
0
    ret = 1;
6135
0
 err:
6136
0
    EVP_MD_CTX_free(ctx);
6137
0
    return ret;
6138
0
}
6139
6140
int SSL_session_reused(const SSL *s)
6141
0
{
6142
0
    const SSL_CONNECTION *sc = SSL_CONNECTION_FROM_CONST_SSL(s);
6143
6144
0
    if (sc == NULL)
6145
0
        return 0;
6146
6147
0
    return sc->hit;
6148
0
}
6149
6150
int SSL_is_server(const SSL *s)
6151
0
{
6152
0
    const SSL_CONNECTION *sc = SSL_CONNECTION_FROM_CONST_SSL(s);
6153
6154
0
    if (sc == NULL)
6155
0
        return 0;
6156
6157
0
    return sc->server;
6158
0
}
6159
6160
#ifndef OPENSSL_NO_DEPRECATED_1_1_0
6161
void SSL_set_debug(SSL *s, int debug)
6162
0
{
6163
    /* Old function was do-nothing anyway... */
6164
0
    (void)s;
6165
0
    (void)debug;
6166
0
}
6167
#endif
6168
6169
void SSL_set_security_level(SSL *s, int level)
6170
0
{
6171
0
    SSL_CONNECTION *sc = SSL_CONNECTION_FROM_SSL(s);
6172
6173
0
    if (sc == NULL)
6174
0
        return;
6175
6176
0
    sc->cert->sec_level = level;
6177
0
}
6178
6179
int SSL_get_security_level(const SSL *s)
6180
0
{
6181
0
    const SSL_CONNECTION *sc = SSL_CONNECTION_FROM_CONST_SSL(s);
6182
6183
0
    if (sc == NULL)
6184
0
        return 0;
6185
6186
0
    return sc->cert->sec_level;
6187
0
}
6188
6189
void SSL_set_security_callback(SSL *s,
6190
                               int (*cb) (const SSL *s, const SSL_CTX *ctx,
6191
                                          int op, int bits, int nid,
6192
                                          void *other, void *ex))
6193
0
{
6194
0
    SSL_CONNECTION *sc = SSL_CONNECTION_FROM_SSL(s);
6195
6196
0
    if (sc == NULL)
6197
0
        return;
6198
6199
0
    sc->cert->sec_cb = cb;
6200
0
}
6201
6202
int (*SSL_get_security_callback(const SSL *s)) (const SSL *s,
6203
                                                const SSL_CTX *ctx, int op,
6204
                                                int bits, int nid, void *other,
6205
0
                                                void *ex) {
6206
0
    const SSL_CONNECTION *sc = SSL_CONNECTION_FROM_CONST_SSL(s);
6207
6208
0
    if (sc == NULL)
6209
0
        return NULL;
6210
6211
0
    return sc->cert->sec_cb;
6212
0
}
6213
6214
void SSL_set0_security_ex_data(SSL *s, void *ex)
6215
0
{
6216
0
    SSL_CONNECTION *sc = SSL_CONNECTION_FROM_SSL(s);
6217
6218
0
    if (sc == NULL)
6219
0
        return;
6220
6221
0
    sc->cert->sec_ex = ex;
6222
0
}
6223
6224
void *SSL_get0_security_ex_data(const SSL *s)
6225
0
{
6226
0
    const SSL_CONNECTION *sc = SSL_CONNECTION_FROM_CONST_SSL(s);
6227
6228
0
    if (sc == NULL)
6229
0
        return NULL;
6230
6231
0
    return sc->cert->sec_ex;
6232
0
}
6233
6234
void SSL_CTX_set_security_level(SSL_CTX *ctx, int level)
6235
0
{
6236
0
    ctx->cert->sec_level = level;
6237
0
}
6238
6239
int SSL_CTX_get_security_level(const SSL_CTX *ctx)
6240
0
{
6241
0
    return ctx->cert->sec_level;
6242
0
}
6243
6244
void SSL_CTX_set_security_callback(SSL_CTX *ctx,
6245
                                   int (*cb) (const SSL *s, const SSL_CTX *ctx,
6246
                                              int op, int bits, int nid,
6247
                                              void *other, void *ex))
6248
0
{
6249
0
    ctx->cert->sec_cb = cb;
6250
0
}
6251
6252
int (*SSL_CTX_get_security_callback(const SSL_CTX *ctx)) (const SSL *s,
6253
                                                          const SSL_CTX *ctx,
6254
                                                          int op, int bits,
6255
                                                          int nid,
6256
                                                          void *other,
6257
0
                                                          void *ex) {
6258
0
    return ctx->cert->sec_cb;
6259
0
}
6260
6261
void SSL_CTX_set0_security_ex_data(SSL_CTX *ctx, void *ex)
6262
0
{
6263
0
    ctx->cert->sec_ex = ex;
6264
0
}
6265
6266
void *SSL_CTX_get0_security_ex_data(const SSL_CTX *ctx)
6267
0
{
6268
0
    return ctx->cert->sec_ex;
6269
0
}
6270
6271
uint64_t SSL_CTX_get_options(const SSL_CTX *ctx)
6272
0
{
6273
0
    return ctx->options;
6274
0
}
6275
6276
uint64_t SSL_get_options(const SSL *s)
6277
0
{
6278
0
    const SSL_CONNECTION *sc = SSL_CONNECTION_FROM_CONST_SSL(s);
6279
6280
0
#ifndef OPENSSL_NO_QUIC
6281
0
    if (IS_QUIC(s))
6282
0
        return ossl_quic_get_options(s);
6283
0
#endif
6284
6285
0
    if (sc == NULL)
6286
0
        return 0;
6287
6288
0
    return sc->options;
6289
0
}
6290
6291
uint64_t SSL_CTX_set_options(SSL_CTX *ctx, uint64_t op)
6292
0
{
6293
0
    return ctx->options |= op;
6294
0
}
6295
6296
uint64_t SSL_set_options(SSL *s, uint64_t op)
6297
0
{
6298
0
    SSL_CONNECTION *sc;
6299
0
    OSSL_PARAM options[2], *opts = options;
6300
6301
0
#ifndef OPENSSL_NO_QUIC
6302
0
    if (IS_QUIC(s))
6303
0
        return ossl_quic_set_options(s, op);
6304
0
#endif
6305
6306
0
    sc = SSL_CONNECTION_FROM_SSL(s);
6307
0
    if (sc == NULL)
6308
0
        return 0;
6309
6310
0
    sc->options |= op;
6311
6312
0
    *opts++ = OSSL_PARAM_construct_uint64(OSSL_LIBSSL_RECORD_LAYER_PARAM_OPTIONS,
6313
0
                                          &sc->options);
6314
0
    *opts = OSSL_PARAM_construct_end();
6315
6316
    /* Ignore return value */
6317
0
    sc->rlayer.rrlmethod->set_options(sc->rlayer.rrl, options);
6318
0
    sc->rlayer.wrlmethod->set_options(sc->rlayer.wrl, options);
6319
6320
0
    return sc->options;
6321
0
}
6322
6323
uint64_t SSL_CTX_clear_options(SSL_CTX *ctx, uint64_t op)
6324
0
{
6325
0
    return ctx->options &= ~op;
6326
0
}
6327
6328
uint64_t SSL_clear_options(SSL *s, uint64_t op)
6329
0
{
6330
0
    SSL_CONNECTION *sc = SSL_CONNECTION_FROM_SSL(s);
6331
0
    OSSL_PARAM options[2], *opts = options;
6332
6333
0
#ifndef OPENSSL_NO_QUIC
6334
0
    if (IS_QUIC(s))
6335
0
        return ossl_quic_clear_options(s, op);
6336
0
#endif
6337
6338
0
    if (sc == NULL)
6339
0
        return 0;
6340
6341
0
    sc->options &= ~op;
6342
6343
0
    *opts++ = OSSL_PARAM_construct_uint64(OSSL_LIBSSL_RECORD_LAYER_PARAM_OPTIONS,
6344
0
                                          &sc->options);
6345
0
    *opts = OSSL_PARAM_construct_end();
6346
6347
    /* Ignore return value */
6348
0
    sc->rlayer.rrlmethod->set_options(sc->rlayer.rrl, options);
6349
0
    sc->rlayer.wrlmethod->set_options(sc->rlayer.wrl, options);
6350
6351
0
    return sc->options;
6352
0
}
6353
6354
STACK_OF(X509) *SSL_get0_verified_chain(const SSL *s)
6355
0
{
6356
0
    const SSL_CONNECTION *sc = SSL_CONNECTION_FROM_CONST_SSL(s);
6357
6358
0
    if (sc == NULL)
6359
0
        return NULL;
6360
6361
0
    return sc->verified_chain;
6362
0
}
6363
6364
IMPLEMENT_OBJ_BSEARCH_GLOBAL_CMP_FN(SSL_CIPHER, SSL_CIPHER, ssl_cipher_id);
6365
6366
#ifndef OPENSSL_NO_CT
6367
6368
/*
6369
 * Moves SCTs from the |src| stack to the |dst| stack.
6370
 * The source of each SCT will be set to |origin|.
6371
 * If |dst| points to a NULL pointer, a new stack will be created and owned by
6372
 * the caller.
6373
 * Returns the number of SCTs moved, or a negative integer if an error occurs.
6374
 * The |dst| stack is created and possibly partially populated even in case
6375
 * of error, likewise the |src| stack may be left in an intermediate state.
6376
 */
6377
static int ct_move_scts(STACK_OF(SCT) **dst, STACK_OF(SCT) *src,
6378
                        sct_source_t origin)
6379
0
{
6380
0
    int scts_moved = 0;
6381
0
    SCT *sct = NULL;
6382
6383
0
    if (*dst == NULL) {
6384
0
        *dst = sk_SCT_new_null();
6385
0
        if (*dst == NULL) {
6386
0
            ERR_raise(ERR_LIB_SSL, ERR_R_CRYPTO_LIB);
6387
0
            goto err;
6388
0
        }
6389
0
    }
6390
6391
0
    while ((sct = sk_SCT_pop(src)) != NULL) {
6392
0
        if (SCT_set_source(sct, origin) != 1)
6393
0
            goto err;
6394
6395
0
        if (!sk_SCT_push(*dst, sct))
6396
0
            goto err;
6397
0
        scts_moved += 1;
6398
0
    }
6399
6400
0
    return scts_moved;
6401
0
 err:
6402
0
    SCT_free(sct);
6403
0
    return -1;
6404
0
}
6405
6406
/*
6407
 * Look for data collected during ServerHello and parse if found.
6408
 * Returns the number of SCTs extracted.
6409
 */
6410
static int ct_extract_tls_extension_scts(SSL_CONNECTION *s)
6411
0
{
6412
0
    int scts_extracted = 0;
6413
6414
0
    if (s->ext.scts != NULL) {
6415
0
        const unsigned char *p = s->ext.scts;
6416
0
        STACK_OF(SCT) *scts = o2i_SCT_LIST(NULL, &p, s->ext.scts_len);
6417
6418
0
        scts_extracted = ct_move_scts(&s->scts, scts, SCT_SOURCE_TLS_EXTENSION);
6419
6420
0
        SCT_LIST_free(scts);
6421
0
    }
6422
6423
0
    return scts_extracted;
6424
0
}
6425
6426
/*
6427
 * Checks for an OCSP response and then attempts to extract any SCTs found if it
6428
 * contains an SCT X509 extension. They will be stored in |s->scts|.
6429
 * Returns:
6430
 * - The number of SCTs extracted, assuming an OCSP response exists.
6431
 * - 0 if no OCSP response exists or it contains no SCTs.
6432
 * - A negative integer if an error occurs.
6433
 */
6434
static int ct_extract_ocsp_response_scts(SSL_CONNECTION *s)
6435
0
{
6436
0
# ifndef OPENSSL_NO_OCSP
6437
0
    int scts_extracted = 0;
6438
0
    OCSP_BASICRESP *br = NULL;
6439
0
    OCSP_RESPONSE *rsp = NULL;
6440
0
    STACK_OF(SCT) *scts = NULL;
6441
0
    int ret;
6442
0
    int i, j;
6443
6444
0
    if (s->ext.ocsp.resp_ex == NULL)
6445
0
        goto err;
6446
6447
0
    for (j = 0; j < sk_OCSP_RESPONSE_num(s->ext.ocsp.resp_ex); j++) {
6448
0
        rsp = sk_OCSP_RESPONSE_value(s->ext.ocsp.resp_ex, j);
6449
0
        if (rsp == NULL)
6450
0
            goto err;
6451
6452
0
        br = OCSP_response_get1_basic(rsp);
6453
0
        if (br == NULL)
6454
0
            goto err;
6455
6456
0
        for (i = 0; i < OCSP_resp_count(br); ++i) {
6457
0
            OCSP_SINGLERESP *single = OCSP_resp_get0(br, i);
6458
6459
0
            if (single == NULL)
6460
0
                continue;
6461
6462
0
            scts = OCSP_SINGLERESP_get1_ext_d2i(single,
6463
0
                                                NID_ct_cert_scts, NULL, NULL);
6464
0
            if (scts == NULL)  {
6465
0
                scts_extracted = -1;
6466
0
                goto err;
6467
0
            }
6468
6469
0
            ret = ct_move_scts(&s->scts, scts,
6470
0
                               SCT_SOURCE_OCSP_STAPLED_RESPONSE);
6471
6472
0
            SCT_LIST_free(scts);
6473
6474
0
            if (ret < 0) {
6475
0
                scts_extracted = -1;
6476
0
                goto err;
6477
0
            }
6478
6479
0
            scts_extracted += ret;
6480
0
        }
6481
6482
0
        OCSP_BASICRESP_free(br);
6483
        /* to assure that is not freed twice */
6484
0
        br = NULL;
6485
0
    }
6486
0
 err:
6487
0
    OCSP_BASICRESP_free(br);
6488
0
    return scts_extracted;
6489
# else
6490
    /* Behave as if no OCSP response exists */
6491
    return 0;
6492
# endif
6493
0
}
6494
6495
/*
6496
 * Attempts to extract SCTs from the peer certificate.
6497
 * Return the number of SCTs extracted, or a negative integer if an error
6498
 * occurs.
6499
 */
6500
static int ct_extract_x509v3_extension_scts(SSL_CONNECTION *s)
6501
0
{
6502
0
    int scts_extracted = 0;
6503
0
    X509 *cert = s->session != NULL ? s->session->peer : NULL;
6504
6505
0
    if (cert != NULL) {
6506
0
        STACK_OF(SCT) *scts =
6507
0
            X509_get_ext_d2i(cert, NID_ct_precert_scts, NULL, NULL);
6508
6509
0
        scts_extracted =
6510
0
            ct_move_scts(&s->scts, scts, SCT_SOURCE_X509V3_EXTENSION);
6511
6512
0
        SCT_LIST_free(scts);
6513
0
    }
6514
6515
0
    return scts_extracted;
6516
0
}
6517
6518
/*
6519
 * Attempts to find all received SCTs by checking TLS extensions, the OCSP
6520
 * response (if it exists) and X509v3 extensions in the certificate.
6521
 * Returns NULL if an error occurs.
6522
 */
6523
const STACK_OF(SCT) *SSL_get0_peer_scts(SSL *s)
6524
0
{
6525
0
    SSL_CONNECTION *sc = SSL_CONNECTION_FROM_SSL(s);
6526
6527
0
    if (sc == NULL)
6528
0
        return NULL;
6529
6530
0
    if (!sc->scts_parsed) {
6531
0
        if (ct_extract_tls_extension_scts(sc) < 0 ||
6532
0
            ct_extract_ocsp_response_scts(sc) < 0 ||
6533
0
            ct_extract_x509v3_extension_scts(sc) < 0)
6534
0
            goto err;
6535
6536
0
        sc->scts_parsed = 1;
6537
0
    }
6538
0
    return sc->scts;
6539
0
 err:
6540
0
    return NULL;
6541
0
}
6542
6543
static int ct_permissive(const CT_POLICY_EVAL_CTX *ctx,
6544
                         const STACK_OF(SCT) *scts, void *unused_arg)
6545
0
{
6546
0
    return 1;
6547
0
}
6548
6549
static int ct_strict(const CT_POLICY_EVAL_CTX *ctx,
6550
                     const STACK_OF(SCT) *scts, void *unused_arg)
6551
0
{
6552
0
    int count = scts != NULL ? sk_SCT_num(scts) : 0;
6553
0
    int i;
6554
6555
0
    for (i = 0; i < count; ++i) {
6556
0
        SCT *sct = sk_SCT_value(scts, i);
6557
0
        int status = SCT_get_validation_status(sct);
6558
6559
0
        if (status == SCT_VALIDATION_STATUS_VALID)
6560
0
            return 1;
6561
0
    }
6562
0
    ERR_raise(ERR_LIB_SSL, SSL_R_NO_VALID_SCTS);
6563
0
    return 0;
6564
0
}
6565
6566
int SSL_set_ct_validation_callback(SSL *s, ssl_ct_validation_cb callback,
6567
                                   void *arg)
6568
0
{
6569
0
    SSL_CONNECTION *sc = SSL_CONNECTION_FROM_SSL(s);
6570
6571
0
    if (sc == NULL)
6572
0
        return 0;
6573
6574
    /*
6575
     * Since code exists that uses the custom extension handler for CT, look
6576
     * for this and throw an error if they have already registered to use CT.
6577
     */
6578
0
    if (callback != NULL && SSL_CTX_has_client_custom_ext(s->ctx,
6579
0
                                                          TLSEXT_TYPE_signed_certificate_timestamp))
6580
0
    {
6581
0
        ERR_raise(ERR_LIB_SSL, SSL_R_CUSTOM_EXT_HANDLER_ALREADY_INSTALLED);
6582
0
        return 0;
6583
0
    }
6584
6585
0
    if (callback != NULL) {
6586
        /*
6587
         * If we are validating CT, then we MUST accept SCTs served via OCSP
6588
         */
6589
0
        if (!SSL_set_tlsext_status_type(s, TLSEXT_STATUSTYPE_ocsp))
6590
0
            return 0;
6591
0
    }
6592
6593
0
    sc->ct_validation_callback = callback;
6594
0
    sc->ct_validation_callback_arg = arg;
6595
6596
0
    return 1;
6597
0
}
6598
6599
int SSL_CTX_set_ct_validation_callback(SSL_CTX *ctx,
6600
                                       ssl_ct_validation_cb callback, void *arg)
6601
0
{
6602
    /*
6603
     * Since code exists that uses the custom extension handler for CT, look for
6604
     * this and throw an error if they have already registered to use CT.
6605
     */
6606
0
    if (callback != NULL && SSL_CTX_has_client_custom_ext(ctx,
6607
0
                                                          TLSEXT_TYPE_signed_certificate_timestamp))
6608
0
    {
6609
0
        ERR_raise(ERR_LIB_SSL, SSL_R_CUSTOM_EXT_HANDLER_ALREADY_INSTALLED);
6610
0
        return 0;
6611
0
    }
6612
6613
0
    ctx->ct_validation_callback = callback;
6614
0
    ctx->ct_validation_callback_arg = arg;
6615
0
    return 1;
6616
0
}
6617
6618
int SSL_ct_is_enabled(const SSL *s)
6619
0
{
6620
0
    const SSL_CONNECTION *sc = SSL_CONNECTION_FROM_CONST_SSL(s);
6621
6622
0
    if (sc == NULL)
6623
0
        return 0;
6624
6625
0
    return sc->ct_validation_callback != NULL;
6626
0
}
6627
6628
int SSL_CTX_ct_is_enabled(const SSL_CTX *ctx)
6629
0
{
6630
0
    return ctx->ct_validation_callback != NULL;
6631
0
}
6632
6633
int ssl_validate_ct(SSL_CONNECTION *s)
6634
0
{
6635
0
    int ret = 0;
6636
0
    X509 *cert = s->session != NULL ? s->session->peer : NULL;
6637
0
    X509 *issuer;
6638
0
    SSL_DANE *dane = &s->dane;
6639
0
    CT_POLICY_EVAL_CTX *ctx = NULL;
6640
0
    const STACK_OF(SCT) *scts;
6641
6642
    /*
6643
     * If no callback is set, the peer is anonymous, or its chain is invalid,
6644
     * skip SCT validation - just return success.  Applications that continue
6645
     * handshakes without certificates, with unverified chains, or pinned leaf
6646
     * certificates are outside the scope of the WebPKI and CT.
6647
     *
6648
     * The above exclusions notwithstanding the vast majority of peers will
6649
     * have rather ordinary certificate chains validated by typical
6650
     * applications that perform certificate verification and therefore will
6651
     * process SCTs when enabled.
6652
     */
6653
0
    if (s->ct_validation_callback == NULL || cert == NULL ||
6654
0
        s->verify_result != X509_V_OK ||
6655
0
        s->verified_chain == NULL || sk_X509_num(s->verified_chain) <= 1)
6656
0
        return 1;
6657
6658
    /*
6659
     * CT not applicable for chains validated via DANE-TA(2) or DANE-EE(3)
6660
     * trust-anchors.  See https://tools.ietf.org/html/rfc7671#section-4.2
6661
     */
6662
0
    if (DANETLS_ENABLED(dane) && dane->mtlsa != NULL) {
6663
0
        switch (dane->mtlsa->usage) {
6664
0
        case DANETLS_USAGE_DANE_TA:
6665
0
        case DANETLS_USAGE_DANE_EE:
6666
0
            return 1;
6667
0
        }
6668
0
    }
6669
6670
0
    ctx = CT_POLICY_EVAL_CTX_new_ex(SSL_CONNECTION_GET_CTX(s)->libctx,
6671
0
                                    SSL_CONNECTION_GET_CTX(s)->propq);
6672
0
    if (ctx == NULL) {
6673
0
        SSLfatal(s, SSL_AD_INTERNAL_ERROR, ERR_R_CT_LIB);
6674
0
        goto end;
6675
0
    }
6676
6677
0
    issuer = sk_X509_value(s->verified_chain, 1);
6678
0
    CT_POLICY_EVAL_CTX_set1_cert(ctx, cert);
6679
0
    CT_POLICY_EVAL_CTX_set1_issuer(ctx, issuer);
6680
0
    CT_POLICY_EVAL_CTX_set_shared_CTLOG_STORE(ctx,
6681
0
            SSL_CONNECTION_GET_CTX(s)->ctlog_store);
6682
0
    CT_POLICY_EVAL_CTX_set_time(
6683
0
            ctx, (uint64_t)SSL_SESSION_get_time_ex(s->session) * 1000);
6684
6685
0
    scts = SSL_get0_peer_scts(SSL_CONNECTION_GET_SSL(s));
6686
6687
    /*
6688
     * This function returns success (> 0) only when all the SCTs are valid, 0
6689
     * when some are invalid, and < 0 on various internal errors (out of
6690
     * memory, etc.).  Having some, or even all, invalid SCTs is not sufficient
6691
     * reason to abort the handshake, that decision is up to the callback.
6692
     * Therefore, we error out only in the unexpected case that the return
6693
     * value is negative.
6694
     *
6695
     * XXX: One might well argue that the return value of this function is an
6696
     * unfortunate design choice.  Its job is only to determine the validation
6697
     * status of each of the provided SCTs.  So long as it correctly separates
6698
     * the wheat from the chaff it should return success.  Failure in this case
6699
     * ought to correspond to an inability to carry out its duties.
6700
     */
6701
0
    if (SCT_LIST_validate(scts, ctx) < 0) {
6702
0
        SSLfatal(s, SSL_AD_HANDSHAKE_FAILURE, SSL_R_SCT_VERIFICATION_FAILED);
6703
0
        goto end;
6704
0
    }
6705
6706
0
    ret = s->ct_validation_callback(ctx, scts, s->ct_validation_callback_arg);
6707
0
    if (ret < 0)
6708
0
        ret = 0;                /* This function returns 0 on failure */
6709
0
    if (!ret)
6710
0
        SSLfatal(s, SSL_AD_HANDSHAKE_FAILURE, SSL_R_CALLBACK_FAILED);
6711
6712
0
 end:
6713
0
    CT_POLICY_EVAL_CTX_free(ctx);
6714
    /*
6715
     * With SSL_VERIFY_NONE the session may be cached and reused despite a
6716
     * failure return code here.  Also the application may wish the complete
6717
     * the handshake, and then disconnect cleanly at a higher layer, after
6718
     * checking the verification status of the completed connection.
6719
     *
6720
     * We therefore force a certificate verification failure which will be
6721
     * visible via SSL_get_verify_result() and cached as part of any resumed
6722
     * session.
6723
     *
6724
     * Note: the permissive callback is for information gathering only, always
6725
     * returns success, and does not affect verification status.  Only the
6726
     * strict callback or a custom application-specified callback can trigger
6727
     * connection failure or record a verification error.
6728
     */
6729
0
    if (ret <= 0)
6730
0
        s->verify_result = X509_V_ERR_NO_VALID_SCTS;
6731
0
    return ret;
6732
0
}
6733
6734
int SSL_CTX_enable_ct(SSL_CTX *ctx, int validation_mode)
6735
0
{
6736
0
    switch (validation_mode) {
6737
0
    default:
6738
0
        ERR_raise(ERR_LIB_SSL, SSL_R_INVALID_CT_VALIDATION_TYPE);
6739
0
        return 0;
6740
0
    case SSL_CT_VALIDATION_PERMISSIVE:
6741
0
        return SSL_CTX_set_ct_validation_callback(ctx, ct_permissive, NULL);
6742
0
    case SSL_CT_VALIDATION_STRICT:
6743
0
        return SSL_CTX_set_ct_validation_callback(ctx, ct_strict, NULL);
6744
0
    }
6745
0
}
6746
6747
int SSL_enable_ct(SSL *s, int validation_mode)
6748
0
{
6749
0
    switch (validation_mode) {
6750
0
    default:
6751
0
        ERR_raise(ERR_LIB_SSL, SSL_R_INVALID_CT_VALIDATION_TYPE);
6752
0
        return 0;
6753
0
    case SSL_CT_VALIDATION_PERMISSIVE:
6754
0
        return SSL_set_ct_validation_callback(s, ct_permissive, NULL);
6755
0
    case SSL_CT_VALIDATION_STRICT:
6756
0
        return SSL_set_ct_validation_callback(s, ct_strict, NULL);
6757
0
    }
6758
0
}
6759
6760
int SSL_CTX_set_default_ctlog_list_file(SSL_CTX *ctx)
6761
0
{
6762
0
    return CTLOG_STORE_load_default_file(ctx->ctlog_store);
6763
0
}
6764
6765
int SSL_CTX_set_ctlog_list_file(SSL_CTX *ctx, const char *path)
6766
0
{
6767
0
    return CTLOG_STORE_load_file(ctx->ctlog_store, path);
6768
0
}
6769
6770
void SSL_CTX_set0_ctlog_store(SSL_CTX *ctx, CTLOG_STORE *logs)
6771
0
{
6772
0
    CTLOG_STORE_free(ctx->ctlog_store);
6773
0
    ctx->ctlog_store = logs;
6774
0
}
6775
6776
const CTLOG_STORE *SSL_CTX_get0_ctlog_store(const SSL_CTX *ctx)
6777
0
{
6778
0
    return ctx->ctlog_store;
6779
0
}
6780
6781
#endif  /* OPENSSL_NO_CT */
6782
6783
void SSL_CTX_set_client_hello_cb(SSL_CTX *c, SSL_client_hello_cb_fn cb,
6784
                                 void *arg)
6785
0
{
6786
0
    c->client_hello_cb = cb;
6787
0
    c->client_hello_cb_arg = arg;
6788
0
}
6789
6790
void SSL_CTX_set_new_pending_conn_cb(SSL_CTX *c, SSL_new_pending_conn_cb_fn cb,
6791
                                     void *arg)
6792
0
{
6793
0
    c->new_pending_conn_cb = cb;
6794
0
    c->new_pending_conn_arg = arg;
6795
0
}
6796
6797
int SSL_client_hello_isv2(SSL *s)
6798
0
{
6799
0
    const SSL_CONNECTION *sc = SSL_CONNECTION_FROM_SSL(s);
6800
6801
0
    if (sc == NULL)
6802
0
        return 0;
6803
6804
0
    if (sc->clienthello == NULL)
6805
0
        return 0;
6806
0
    return sc->clienthello->isv2;
6807
0
}
6808
6809
unsigned int SSL_client_hello_get0_legacy_version(SSL *s)
6810
0
{
6811
0
    const SSL_CONNECTION *sc = SSL_CONNECTION_FROM_SSL(s);
6812
6813
0
    if (sc == NULL)
6814
0
        return 0;
6815
6816
0
    if (sc->clienthello == NULL)
6817
0
        return 0;
6818
0
    return sc->clienthello->legacy_version;
6819
0
}
6820
6821
size_t SSL_client_hello_get0_random(SSL *s, const unsigned char **out)
6822
0
{
6823
0
    const SSL_CONNECTION *sc = SSL_CONNECTION_FROM_SSL(s);
6824
6825
0
    if (sc == NULL)
6826
0
        return 0;
6827
6828
0
    if (sc->clienthello == NULL)
6829
0
        return 0;
6830
0
    if (out != NULL)
6831
0
        *out = sc->clienthello->random;
6832
0
    return SSL3_RANDOM_SIZE;
6833
0
}
6834
6835
size_t SSL_client_hello_get0_session_id(SSL *s, const unsigned char **out)
6836
0
{
6837
0
    const SSL_CONNECTION *sc = SSL_CONNECTION_FROM_SSL(s);
6838
6839
0
    if (sc == NULL)
6840
0
        return 0;
6841
6842
0
    if (sc->clienthello == NULL)
6843
0
        return 0;
6844
0
    if (out != NULL)
6845
0
        *out = sc->clienthello->session_id;
6846
0
    return sc->clienthello->session_id_len;
6847
0
}
6848
6849
size_t SSL_client_hello_get0_ciphers(SSL *s, const unsigned char **out)
6850
0
{
6851
0
    const SSL_CONNECTION *sc = SSL_CONNECTION_FROM_SSL(s);
6852
6853
0
    if (sc == NULL)
6854
0
        return 0;
6855
6856
0
    if (sc->clienthello == NULL)
6857
0
        return 0;
6858
0
    if (out != NULL)
6859
0
        *out = PACKET_data(&sc->clienthello->ciphersuites);
6860
0
    return PACKET_remaining(&sc->clienthello->ciphersuites);
6861
0
}
6862
6863
size_t SSL_client_hello_get0_compression_methods(SSL *s, const unsigned char **out)
6864
0
{
6865
0
    const SSL_CONNECTION *sc = SSL_CONNECTION_FROM_SSL(s);
6866
6867
0
    if (sc == NULL)
6868
0
        return 0;
6869
6870
0
    if (sc->clienthello == NULL)
6871
0
        return 0;
6872
0
    if (out != NULL)
6873
0
        *out = sc->clienthello->compressions;
6874
0
    return sc->clienthello->compressions_len;
6875
0
}
6876
6877
int SSL_client_hello_get1_extensions_present(SSL *s, int **out, size_t *outlen)
6878
0
{
6879
0
    RAW_EXTENSION *ext;
6880
0
    int *present;
6881
0
    size_t num = 0, i;
6882
0
    const SSL_CONNECTION *sc = SSL_CONNECTION_FROM_SSL(s);
6883
6884
0
    if (sc == NULL)
6885
0
        return 0;
6886
6887
0
    if (sc->clienthello == NULL || out == NULL || outlen == NULL)
6888
0
        return 0;
6889
0
    for (i = 0; i < sc->clienthello->pre_proc_exts_len; i++) {
6890
0
        ext = sc->clienthello->pre_proc_exts + i;
6891
0
        if (ext->present)
6892
0
            num++;
6893
0
    }
6894
0
    if (num == 0) {
6895
0
        *out = NULL;
6896
0
        *outlen = 0;
6897
0
        return 1;
6898
0
    }
6899
0
    if ((present = OPENSSL_malloc_array(num, sizeof(*present))) == NULL)
6900
0
        return 0;
6901
0
    for (i = 0; i < sc->clienthello->pre_proc_exts_len; i++) {
6902
0
        ext = sc->clienthello->pre_proc_exts + i;
6903
0
        if (ext->present) {
6904
0
            if (ext->received_order >= num)
6905
0
                goto err;
6906
0
            present[ext->received_order] = ext->type;
6907
0
        }
6908
0
    }
6909
0
    *out = present;
6910
0
    *outlen = num;
6911
0
    return 1;
6912
0
 err:
6913
0
    OPENSSL_free(present);
6914
0
    return 0;
6915
0
}
6916
6917
int SSL_client_hello_get_extension_order(SSL *s, uint16_t *exts, size_t *num_exts)
6918
0
{
6919
0
    RAW_EXTENSION *ext;
6920
0
    size_t num = 0, i;
6921
0
    const SSL_CONNECTION *sc = SSL_CONNECTION_FROM_SSL(s);
6922
6923
0
    if (sc == NULL)
6924
0
        return 0;
6925
6926
0
    if (sc->clienthello == NULL || num_exts == NULL)
6927
0
        return 0;
6928
0
    for (i = 0; i < sc->clienthello->pre_proc_exts_len; i++) {
6929
0
        ext = sc->clienthello->pre_proc_exts + i;
6930
0
        if (ext->present)
6931
0
            num++;
6932
0
    }
6933
0
    if (num == 0) {
6934
0
        *num_exts = 0;
6935
0
        return 1;
6936
0
    }
6937
0
    if (exts == NULL) {
6938
0
        *num_exts = num;
6939
0
        return 1;
6940
0
    }
6941
0
    if (*num_exts < num)
6942
0
        return 0;
6943
0
    for (i = 0; i < sc->clienthello->pre_proc_exts_len; i++) {
6944
0
        ext = sc->clienthello->pre_proc_exts + i;
6945
0
        if (ext->present) {
6946
0
            if (ext->received_order >= num)
6947
0
                return 0;
6948
0
            exts[ext->received_order] = ext->type;
6949
0
        }
6950
0
    }
6951
0
    *num_exts = num;
6952
0
    return 1;
6953
0
}
6954
6955
int SSL_client_hello_get0_ext(SSL *s, unsigned int type, const unsigned char **out,
6956
                       size_t *outlen)
6957
0
{
6958
0
    size_t i;
6959
0
    RAW_EXTENSION *r;
6960
0
    const SSL_CONNECTION *sc = SSL_CONNECTION_FROM_SSL(s);
6961
6962
0
    if (sc == NULL)
6963
0
        return 0;
6964
6965
0
    if (sc->clienthello == NULL)
6966
0
        return 0;
6967
0
    for (i = 0; i < sc->clienthello->pre_proc_exts_len; ++i) {
6968
0
        r = sc->clienthello->pre_proc_exts + i;
6969
0
        if (r->present && r->type == type) {
6970
0
            if (out != NULL)
6971
0
                *out = PACKET_data(&r->data);
6972
0
            if (outlen != NULL)
6973
0
                *outlen = PACKET_remaining(&r->data);
6974
0
            return 1;
6975
0
        }
6976
0
    }
6977
0
    return 0;
6978
0
}
6979
6980
int SSL_free_buffers(SSL *ssl)
6981
0
{
6982
0
    RECORD_LAYER *rl;
6983
0
    SSL_CONNECTION *sc = SSL_CONNECTION_FROM_SSL_ONLY(ssl);
6984
6985
0
    if (sc == NULL)
6986
0
        return 0;
6987
6988
0
    rl = &sc->rlayer;
6989
6990
0
    return rl->rrlmethod->free_buffers(rl->rrl)
6991
0
           && rl->wrlmethod->free_buffers(rl->wrl);
6992
0
}
6993
6994
int SSL_alloc_buffers(SSL *ssl)
6995
0
{
6996
0
    RECORD_LAYER *rl;
6997
0
    SSL_CONNECTION *sc = SSL_CONNECTION_FROM_SSL(ssl);
6998
6999
0
    if (sc == NULL)
7000
0
        return 0;
7001
7002
    /* QUIC always has buffers allocated. */
7003
0
    if (IS_QUIC(ssl))
7004
0
        return 1;
7005
7006
0
    rl = &sc->rlayer;
7007
7008
0
    return rl->rrlmethod->alloc_buffers(rl->rrl)
7009
0
           && rl->wrlmethod->alloc_buffers(rl->wrl);
7010
0
}
7011
7012
void SSL_CTX_set_keylog_callback(SSL_CTX *ctx, SSL_CTX_keylog_cb_func cb)
7013
0
{
7014
0
    ctx->keylog_callback = cb;
7015
0
}
7016
7017
SSL_CTX_keylog_cb_func SSL_CTX_get_keylog_callback(const SSL_CTX *ctx)
7018
0
{
7019
0
    return ctx->keylog_callback;
7020
0
}
7021
7022
static int nss_keylog_int(const char *prefix,
7023
                          SSL_CONNECTION *sc,
7024
                          const uint8_t *parameter_1,
7025
                          size_t parameter_1_len,
7026
                          const uint8_t *parameter_2,
7027
                          size_t parameter_2_len)
7028
0
{
7029
0
    char *out = NULL;
7030
0
    char *cursor = NULL;
7031
0
    size_t out_len = 0, i, prefix_len;
7032
0
    SSL_CTX *sctx = SSL_CONNECTION_GET_CTX(sc);
7033
7034
#ifndef OPENSSL_NO_SSLKEYLOG
7035
    if (sctx->keylog_callback == NULL && sctx->do_sslkeylog == 0)
7036
        return 1;
7037
#else
7038
0
    if (sctx->keylog_callback == NULL)
7039
0
        return 1;
7040
0
#endif
7041
7042
    /*
7043
     * Our output buffer will contain the following strings, rendered with
7044
     * space characters in between, terminated by a NULL character: first the
7045
     * prefix, then the first parameter, then the second parameter. The
7046
     * meaning of each parameter depends on the specific key material being
7047
     * logged. Note that the first and second parameters are encoded in
7048
     * hexadecimal, so we need a buffer that is twice their lengths.
7049
     */
7050
0
    prefix_len = strlen(prefix);
7051
0
    out_len = prefix_len + (2 * parameter_1_len) + (2 * parameter_2_len) + 3;
7052
0
    if ((out = cursor = OPENSSL_malloc(out_len)) == NULL)
7053
0
        return 0;
7054
7055
0
    memcpy(cursor, prefix, prefix_len);
7056
0
    cursor += prefix_len;
7057
0
    *cursor++ = ' ';
7058
7059
0
    for (i = 0; i < parameter_1_len; ++i)
7060
0
        cursor += ossl_to_lowerhex(cursor, parameter_1[i]);
7061
0
    *cursor++ = ' ';
7062
7063
0
    for (i = 0; i < parameter_2_len; ++i)
7064
0
        cursor += ossl_to_lowerhex(cursor, parameter_2[i]);
7065
0
    *cursor = '\0';
7066
7067
#ifndef OPENSSL_NO_SSLKEYLOG
7068
    if (sctx->do_sslkeylog == 1)
7069
        do_sslkeylogfile(SSL_CONNECTION_GET_SSL(sc), (const char *)out);
7070
#endif
7071
0
    if (sctx->keylog_callback != NULL)
7072
0
        sctx->keylog_callback(SSL_CONNECTION_GET_USER_SSL(sc), (const char *)out);
7073
0
    OPENSSL_clear_free(out, out_len);
7074
0
    return 1;
7075
0
}
7076
7077
int ssl_log_rsa_client_key_exchange(SSL_CONNECTION *sc,
7078
                                    const uint8_t *encrypted_premaster,
7079
                                    size_t encrypted_premaster_len,
7080
                                    const uint8_t *premaster,
7081
                                    size_t premaster_len)
7082
0
{
7083
0
    if (encrypted_premaster_len < 8) {
7084
0
        SSLfatal(sc, SSL_AD_INTERNAL_ERROR, ERR_R_INTERNAL_ERROR);
7085
0
        return 0;
7086
0
    }
7087
7088
    /* We only want the first 8 bytes of the encrypted premaster as a tag. */
7089
0
    return nss_keylog_int("RSA",
7090
0
                          sc,
7091
0
                          encrypted_premaster,
7092
0
                          8,
7093
0
                          premaster,
7094
0
                          premaster_len);
7095
0
}
7096
7097
int ssl_log_secret(SSL_CONNECTION *sc,
7098
                   const char *label,
7099
                   const uint8_t *secret,
7100
                   size_t secret_len)
7101
0
{
7102
0
    return nss_keylog_int(label,
7103
0
                          sc,
7104
0
                          sc->s3.client_random,
7105
0
                          SSL3_RANDOM_SIZE,
7106
0
                          secret,
7107
0
                          secret_len);
7108
0
}
7109
7110
0
#define SSLV2_CIPHER_LEN    3
7111
7112
int ssl_cache_cipherlist(SSL_CONNECTION *s, PACKET *cipher_suites, int sslv2format)
7113
0
{
7114
0
    int n;
7115
7116
0
    n = sslv2format ? SSLV2_CIPHER_LEN : TLS_CIPHER_LEN;
7117
7118
0
    if (PACKET_remaining(cipher_suites) == 0) {
7119
0
        SSLfatal(s, SSL_AD_DECODE_ERROR, SSL_R_NO_CIPHERS_SPECIFIED);
7120
0
        return 0;
7121
0
    }
7122
7123
0
    if (PACKET_remaining(cipher_suites) % n != 0) {
7124
0
        SSLfatal(s, SSL_AD_DECODE_ERROR, SSL_R_ERROR_IN_RECEIVED_CIPHER_LIST);
7125
0
        return 0;
7126
0
    }
7127
7128
0
    OPENSSL_free(s->s3.tmp.ciphers_raw);
7129
0
    s->s3.tmp.ciphers_raw = NULL;
7130
0
    s->s3.tmp.ciphers_rawlen = 0;
7131
7132
0
    if (sslv2format) {
7133
0
        size_t numciphers = PACKET_remaining(cipher_suites) / n;
7134
0
        PACKET sslv2ciphers = *cipher_suites;
7135
0
        unsigned int leadbyte;
7136
0
        unsigned char *raw;
7137
7138
        /*
7139
         * We store the raw ciphers list in SSLv3+ format so we need to do some
7140
         * preprocessing to convert the list first. If there are any SSLv2 only
7141
         * ciphersuites with a non-zero leading byte then we are going to
7142
         * slightly over allocate because we won't store those. But that isn't a
7143
         * problem.
7144
         */
7145
0
        raw = OPENSSL_malloc_array(numciphers, TLS_CIPHER_LEN);
7146
0
        s->s3.tmp.ciphers_raw = raw;
7147
0
        if (raw == NULL) {
7148
0
            SSLfatal(s, SSL_AD_INTERNAL_ERROR, ERR_R_CRYPTO_LIB);
7149
0
            return 0;
7150
0
        }
7151
0
        for (s->s3.tmp.ciphers_rawlen = 0;
7152
0
             PACKET_remaining(&sslv2ciphers) > 0;
7153
0
             raw += TLS_CIPHER_LEN) {
7154
0
            if (!PACKET_get_1(&sslv2ciphers, &leadbyte)
7155
0
                    || (leadbyte == 0
7156
0
                        && !PACKET_copy_bytes(&sslv2ciphers, raw,
7157
0
                                              TLS_CIPHER_LEN))
7158
0
                    || (leadbyte != 0
7159
0
                        && !PACKET_forward(&sslv2ciphers, TLS_CIPHER_LEN))) {
7160
0
                SSLfatal(s, SSL_AD_DECODE_ERROR, SSL_R_BAD_PACKET);
7161
0
                OPENSSL_free(s->s3.tmp.ciphers_raw);
7162
0
                s->s3.tmp.ciphers_raw = NULL;
7163
0
                s->s3.tmp.ciphers_rawlen = 0;
7164
0
                return 0;
7165
0
            }
7166
0
            if (leadbyte == 0)
7167
0
                s->s3.tmp.ciphers_rawlen += TLS_CIPHER_LEN;
7168
0
        }
7169
0
    } else if (!PACKET_memdup(cipher_suites, &s->s3.tmp.ciphers_raw,
7170
0
                           &s->s3.tmp.ciphers_rawlen)) {
7171
0
        SSLfatal(s, SSL_AD_INTERNAL_ERROR, ERR_R_INTERNAL_ERROR);
7172
0
        return 0;
7173
0
    }
7174
0
    return 1;
7175
0
}
7176
7177
int SSL_bytes_to_cipher_list(SSL *s, const unsigned char *bytes, size_t len,
7178
                             int isv2format, STACK_OF(SSL_CIPHER) **sk,
7179
                             STACK_OF(SSL_CIPHER) **scsvs)
7180
0
{
7181
0
    PACKET pkt;
7182
0
    SSL_CONNECTION *sc = SSL_CONNECTION_FROM_SSL(s);
7183
7184
0
    if (sc == NULL)
7185
0
        return 0;
7186
7187
0
    if (!PACKET_buf_init(&pkt, bytes, len))
7188
0
        return 0;
7189
0
    return ossl_bytes_to_cipher_list(sc, &pkt, sk, scsvs, isv2format, 0);
7190
0
}
7191
7192
int ossl_bytes_to_cipher_list(SSL_CONNECTION *s, PACKET *cipher_suites,
7193
                              STACK_OF(SSL_CIPHER) **skp,
7194
                              STACK_OF(SSL_CIPHER) **scsvs_out,
7195
                              int sslv2format, int fatal)
7196
0
{
7197
0
    const SSL_CIPHER *c;
7198
0
    STACK_OF(SSL_CIPHER) *sk = NULL;
7199
0
    STACK_OF(SSL_CIPHER) *scsvs = NULL;
7200
0
    int n;
7201
    /* 3 = SSLV2_CIPHER_LEN > TLS_CIPHER_LEN = 2. */
7202
0
    unsigned char cipher[SSLV2_CIPHER_LEN];
7203
7204
0
    n = sslv2format ? SSLV2_CIPHER_LEN : TLS_CIPHER_LEN;
7205
7206
0
    if (PACKET_remaining(cipher_suites) == 0) {
7207
0
        if (fatal)
7208
0
            SSLfatal(s, SSL_AD_ILLEGAL_PARAMETER, SSL_R_NO_CIPHERS_SPECIFIED);
7209
0
        else
7210
0
            ERR_raise(ERR_LIB_SSL, SSL_R_NO_CIPHERS_SPECIFIED);
7211
0
        return 0;
7212
0
    }
7213
7214
0
    if (PACKET_remaining(cipher_suites) % n != 0) {
7215
0
        if (fatal)
7216
0
            SSLfatal(s, SSL_AD_DECODE_ERROR,
7217
0
                     SSL_R_ERROR_IN_RECEIVED_CIPHER_LIST);
7218
0
        else
7219
0
            ERR_raise(ERR_LIB_SSL, SSL_R_ERROR_IN_RECEIVED_CIPHER_LIST);
7220
0
        return 0;
7221
0
    }
7222
7223
0
    sk = sk_SSL_CIPHER_new_null();
7224
0
    scsvs = sk_SSL_CIPHER_new_null();
7225
0
    if (sk == NULL || scsvs == NULL) {
7226
0
        if (fatal)
7227
0
            SSLfatal(s, SSL_AD_INTERNAL_ERROR, ERR_R_CRYPTO_LIB);
7228
0
        else
7229
0
            ERR_raise(ERR_LIB_SSL, ERR_R_CRYPTO_LIB);
7230
0
        goto err;
7231
0
    }
7232
7233
0
    while (PACKET_copy_bytes(cipher_suites, cipher, n)) {
7234
        /*
7235
         * SSLv3 ciphers wrapped in an SSLv2-compatible ClientHello have the
7236
         * first byte set to zero, while true SSLv2 ciphers have a non-zero
7237
         * first byte. We don't support any true SSLv2 ciphers, so skip them.
7238
         */
7239
0
        if (sslv2format && cipher[0] != '\0')
7240
0
            continue;
7241
7242
        /* For SSLv2-compat, ignore leading 0-byte. */
7243
0
        c = ssl_get_cipher_by_char(s, sslv2format ? &cipher[1] : cipher, 1);
7244
0
        if (c != NULL) {
7245
0
            if ((c->valid && !sk_SSL_CIPHER_push(sk, c)) ||
7246
0
                (!c->valid && !sk_SSL_CIPHER_push(scsvs, c))) {
7247
0
                if (fatal)
7248
0
                    SSLfatal(s, SSL_AD_INTERNAL_ERROR, ERR_R_CRYPTO_LIB);
7249
0
                else
7250
0
                    ERR_raise(ERR_LIB_SSL, ERR_R_CRYPTO_LIB);
7251
0
                goto err;
7252
0
            }
7253
0
        }
7254
0
    }
7255
0
    if (PACKET_remaining(cipher_suites) > 0) {
7256
0
        if (fatal)
7257
0
            SSLfatal(s, SSL_AD_DECODE_ERROR, SSL_R_BAD_LENGTH);
7258
0
        else
7259
0
            ERR_raise(ERR_LIB_SSL, SSL_R_BAD_LENGTH);
7260
0
        goto err;
7261
0
    }
7262
7263
0
    if (skp != NULL)
7264
0
        *skp = sk;
7265
0
    else
7266
0
        sk_SSL_CIPHER_free(sk);
7267
0
    if (scsvs_out != NULL)
7268
0
        *scsvs_out = scsvs;
7269
0
    else
7270
0
        sk_SSL_CIPHER_free(scsvs);
7271
0
    return 1;
7272
0
 err:
7273
0
    sk_SSL_CIPHER_free(sk);
7274
0
    sk_SSL_CIPHER_free(scsvs);
7275
0
    return 0;
7276
0
}
7277
7278
int SSL_CTX_set_max_early_data(SSL_CTX *ctx, uint32_t max_early_data)
7279
0
{
7280
0
    ctx->max_early_data = max_early_data;
7281
7282
0
    return 1;
7283
0
}
7284
7285
uint32_t SSL_CTX_get_max_early_data(const SSL_CTX *ctx)
7286
0
{
7287
0
    return ctx->max_early_data;
7288
0
}
7289
7290
int SSL_set_max_early_data(SSL *s, uint32_t max_early_data)
7291
0
{
7292
0
    SSL_CONNECTION *sc = SSL_CONNECTION_FROM_SSL_ONLY(s);
7293
7294
0
    if (sc == NULL)
7295
0
        return 0;
7296
7297
0
    sc->max_early_data = max_early_data;
7298
7299
0
    return 1;
7300
0
}
7301
7302
uint32_t SSL_get_max_early_data(const SSL *s)
7303
0
{
7304
0
    const SSL_CONNECTION *sc = SSL_CONNECTION_FROM_CONST_SSL(s);
7305
7306
0
    if (sc == NULL)
7307
0
        return 0;
7308
7309
0
    return sc->max_early_data;
7310
0
}
7311
7312
int SSL_CTX_set_recv_max_early_data(SSL_CTX *ctx, uint32_t recv_max_early_data)
7313
0
{
7314
0
    ctx->recv_max_early_data = recv_max_early_data;
7315
7316
0
    return 1;
7317
0
}
7318
7319
uint32_t SSL_CTX_get_recv_max_early_data(const SSL_CTX *ctx)
7320
0
{
7321
0
    return ctx->recv_max_early_data;
7322
0
}
7323
7324
int SSL_set_recv_max_early_data(SSL *s, uint32_t recv_max_early_data)
7325
0
{
7326
0
    SSL_CONNECTION *sc = SSL_CONNECTION_FROM_SSL_ONLY(s);
7327
7328
0
    if (sc == NULL)
7329
0
        return 0;
7330
7331
0
    sc->recv_max_early_data = recv_max_early_data;
7332
7333
0
    return 1;
7334
0
}
7335
7336
uint32_t SSL_get_recv_max_early_data(const SSL *s)
7337
0
{
7338
0
    const SSL_CONNECTION *sc = SSL_CONNECTION_FROM_CONST_SSL(s);
7339
7340
0
    if (sc == NULL)
7341
0
        return 0;
7342
7343
0
    return sc->recv_max_early_data;
7344
0
}
7345
7346
__owur unsigned int ssl_get_max_send_fragment(const SSL_CONNECTION *sc)
7347
0
{
7348
    /* Return any active Max Fragment Len extension */
7349
0
    if (sc->session != NULL && USE_MAX_FRAGMENT_LENGTH_EXT(sc->session))
7350
0
        return GET_MAX_FRAGMENT_LENGTH(sc->session);
7351
7352
    /* return current SSL connection setting */
7353
0
    return (unsigned int)sc->max_send_fragment;
7354
0
}
7355
7356
__owur unsigned int ssl_get_split_send_fragment(const SSL_CONNECTION *sc)
7357
0
{
7358
    /* Return a value regarding an active Max Fragment Len extension */
7359
0
    if (sc->session != NULL && USE_MAX_FRAGMENT_LENGTH_EXT(sc->session)
7360
0
        && sc->split_send_fragment > GET_MAX_FRAGMENT_LENGTH(sc->session))
7361
0
        return GET_MAX_FRAGMENT_LENGTH(sc->session);
7362
7363
    /* else limit |split_send_fragment| to current |max_send_fragment| */
7364
0
    if (sc->split_send_fragment > sc->max_send_fragment)
7365
0
        return (unsigned int)sc->max_send_fragment;
7366
7367
    /* return current SSL connection setting */
7368
0
    return (unsigned int)sc->split_send_fragment;
7369
0
}
7370
7371
int SSL_stateless(SSL *s)
7372
0
{
7373
0
    int ret;
7374
0
    SSL_CONNECTION *sc = SSL_CONNECTION_FROM_SSL_ONLY(s);
7375
7376
0
    if (sc == NULL)
7377
0
        return 0;
7378
7379
    /* Ensure there is no state left over from a previous invocation */
7380
0
    if (!SSL_clear(s))
7381
0
        return 0;
7382
7383
0
    ERR_clear_error();
7384
7385
0
    sc->s3.flags |= TLS1_FLAGS_STATELESS;
7386
0
    ret = SSL_accept(s);
7387
0
    sc->s3.flags &= ~TLS1_FLAGS_STATELESS;
7388
7389
0
    if (ret > 0 && sc->ext.cookieok)
7390
0
        return 1;
7391
7392
0
    if (sc->hello_retry_request == SSL_HRR_PENDING && !ossl_statem_in_error(sc))
7393
0
        return 0;
7394
7395
0
    return -1;
7396
0
}
7397
7398
void SSL_CTX_set_post_handshake_auth(SSL_CTX *ctx, int val)
7399
0
{
7400
0
    ctx->pha_enabled = val;
7401
0
}
7402
7403
void SSL_set_post_handshake_auth(SSL *ssl, int val)
7404
0
{
7405
0
    SSL_CONNECTION *sc = SSL_CONNECTION_FROM_SSL_ONLY(ssl);
7406
7407
0
    if (sc == NULL)
7408
0
        return;
7409
7410
0
    sc->pha_enabled = val;
7411
0
}
7412
7413
int SSL_verify_client_post_handshake(SSL *ssl)
7414
0
{
7415
0
    SSL_CONNECTION *sc = SSL_CONNECTION_FROM_SSL(ssl);
7416
7417
0
#ifndef OPENSSL_NO_QUIC
7418
0
    if (IS_QUIC(ssl)) {
7419
0
        ERR_raise(ERR_LIB_SSL, SSL_R_WRONG_SSL_VERSION);
7420
0
        return 0;
7421
0
    }
7422
0
#endif
7423
7424
0
    if (sc == NULL)
7425
0
        return 0;
7426
7427
0
    if (!SSL_CONNECTION_IS_TLS13(sc)) {
7428
0
        ERR_raise(ERR_LIB_SSL, SSL_R_WRONG_SSL_VERSION);
7429
0
        return 0;
7430
0
    }
7431
0
    if (!sc->server) {
7432
0
        ERR_raise(ERR_LIB_SSL, SSL_R_NOT_SERVER);
7433
0
        return 0;
7434
0
    }
7435
7436
0
    if (!SSL_is_init_finished(ssl)) {
7437
0
        ERR_raise(ERR_LIB_SSL, SSL_R_STILL_IN_INIT);
7438
0
        return 0;
7439
0
    }
7440
7441
0
    switch (sc->post_handshake_auth) {
7442
0
    case SSL_PHA_NONE:
7443
0
        ERR_raise(ERR_LIB_SSL, SSL_R_EXTENSION_NOT_RECEIVED);
7444
0
        return 0;
7445
0
    default:
7446
0
    case SSL_PHA_EXT_SENT:
7447
0
        ERR_raise(ERR_LIB_SSL, ERR_R_INTERNAL_ERROR);
7448
0
        return 0;
7449
0
    case SSL_PHA_EXT_RECEIVED:
7450
0
        break;
7451
0
    case SSL_PHA_REQUEST_PENDING:
7452
0
        ERR_raise(ERR_LIB_SSL, SSL_R_REQUEST_PENDING);
7453
0
        return 0;
7454
0
    case SSL_PHA_REQUESTED:
7455
0
        ERR_raise(ERR_LIB_SSL, SSL_R_REQUEST_SENT);
7456
0
        return 0;
7457
0
    }
7458
7459
0
    sc->post_handshake_auth = SSL_PHA_REQUEST_PENDING;
7460
7461
    /* checks verify_mode and algorithm_auth */
7462
0
    if (!send_certificate_request(sc)) {
7463
0
        sc->post_handshake_auth = SSL_PHA_EXT_RECEIVED; /* restore on error */
7464
0
        ERR_raise(ERR_LIB_SSL, SSL_R_INVALID_CONFIG);
7465
0
        return 0;
7466
0
    }
7467
7468
0
    ossl_statem_set_in_init(sc, 1);
7469
0
    return 1;
7470
0
}
7471
7472
int SSL_CTX_set_session_ticket_cb(SSL_CTX *ctx,
7473
                                  SSL_CTX_generate_session_ticket_fn gen_cb,
7474
                                  SSL_CTX_decrypt_session_ticket_fn dec_cb,
7475
                                  void *arg)
7476
0
{
7477
0
    ctx->generate_ticket_cb = gen_cb;
7478
0
    ctx->decrypt_ticket_cb = dec_cb;
7479
0
    ctx->ticket_cb_data = arg;
7480
0
    return 1;
7481
0
}
7482
7483
void SSL_CTX_set_allow_early_data_cb(SSL_CTX *ctx,
7484
                                     SSL_allow_early_data_cb_fn cb,
7485
                                     void *arg)
7486
0
{
7487
0
    ctx->allow_early_data_cb = cb;
7488
0
    ctx->allow_early_data_cb_data = arg;
7489
0
}
7490
7491
void SSL_set_allow_early_data_cb(SSL *s,
7492
                                 SSL_allow_early_data_cb_fn cb,
7493
                                 void *arg)
7494
0
{
7495
0
    SSL_CONNECTION *sc = SSL_CONNECTION_FROM_SSL_ONLY(s);
7496
7497
0
    if (sc == NULL)
7498
0
        return;
7499
7500
0
    sc->allow_early_data_cb = cb;
7501
0
    sc->allow_early_data_cb_data = arg;
7502
0
}
7503
7504
const EVP_CIPHER *ssl_evp_cipher_fetch(OSSL_LIB_CTX *libctx,
7505
                                       int nid,
7506
                                       const char *properties)
7507
0
{
7508
0
    const EVP_CIPHER *ciph;
7509
7510
0
    ciph = tls_get_cipher_from_engine(nid);
7511
0
    if (ciph != NULL)
7512
0
        return ciph;
7513
7514
    /*
7515
     * If there is no engine cipher then we do an explicit fetch. This may fail
7516
     * and that could be ok
7517
     */
7518
0
    ERR_set_mark();
7519
0
    ciph = EVP_CIPHER_fetch(libctx, OBJ_nid2sn(nid), properties);
7520
0
    if (ciph != NULL) {
7521
0
        OSSL_PARAM params[2];
7522
0
        int decrypt_only = 0;
7523
7524
0
        params[0] = OSSL_PARAM_construct_int(OSSL_CIPHER_PARAM_DECRYPT_ONLY,
7525
0
                                             &decrypt_only);
7526
0
        params[1] = OSSL_PARAM_construct_end();
7527
0
        if (EVP_CIPHER_get_params((EVP_CIPHER *)ciph, params)
7528
0
            && decrypt_only) {
7529
            /* If a cipher is decrypt-only, it is unusable */
7530
0
            EVP_CIPHER_free((EVP_CIPHER *)ciph);
7531
0
            ciph = NULL;
7532
0
        }
7533
0
    }
7534
0
    ERR_pop_to_mark();
7535
0
    return ciph;
7536
0
}
7537
7538
7539
int ssl_evp_cipher_up_ref(const EVP_CIPHER *cipher)
7540
0
{
7541
    /* Don't up-ref an implicit EVP_CIPHER */
7542
0
    if (EVP_CIPHER_get0_provider(cipher) == NULL)
7543
0
        return 1;
7544
7545
    /*
7546
     * The cipher was explicitly fetched and therefore it is safe to cast
7547
     * away the const
7548
     */
7549
0
    return EVP_CIPHER_up_ref((EVP_CIPHER *)cipher);
7550
0
}
7551
7552
void ssl_evp_cipher_free(const EVP_CIPHER *cipher)
7553
0
{
7554
0
    if (cipher == NULL)
7555
0
        return;
7556
7557
0
    if (EVP_CIPHER_get0_provider(cipher) != NULL) {
7558
        /*
7559
         * The cipher was explicitly fetched and therefore it is safe to cast
7560
         * away the const
7561
         */
7562
0
        EVP_CIPHER_free((EVP_CIPHER *)cipher);
7563
0
    }
7564
0
}
7565
7566
const EVP_MD *ssl_evp_md_fetch(OSSL_LIB_CTX *libctx,
7567
                               int nid,
7568
                               const char *properties)
7569
0
{
7570
0
    const EVP_MD *md;
7571
7572
0
    md = tls_get_digest_from_engine(nid);
7573
0
    if (md != NULL)
7574
0
        return md;
7575
7576
    /* Otherwise we do an explicit fetch */
7577
0
    ERR_set_mark();
7578
0
    md = EVP_MD_fetch(libctx, OBJ_nid2sn(nid), properties);
7579
0
    ERR_pop_to_mark();
7580
0
    return md;
7581
0
}
7582
7583
int ssl_evp_md_up_ref(const EVP_MD *md)
7584
0
{
7585
    /* Don't up-ref an implicit EVP_MD */
7586
0
    if (EVP_MD_get0_provider(md) == NULL)
7587
0
        return 1;
7588
7589
    /*
7590
     * The digest was explicitly fetched and therefore it is safe to cast
7591
     * away the const
7592
     */
7593
0
    return EVP_MD_up_ref((EVP_MD *)md);
7594
0
}
7595
7596
void ssl_evp_md_free(const EVP_MD *md)
7597
0
{
7598
0
    if (md == NULL)
7599
0
        return;
7600
7601
0
    if (EVP_MD_get0_provider(md) != NULL) {
7602
        /*
7603
         * The digest was explicitly fetched and therefore it is safe to cast
7604
         * away the const
7605
         */
7606
0
        EVP_MD_free((EVP_MD *)md);
7607
0
    }
7608
0
}
7609
7610
int SSL_set0_tmp_dh_pkey(SSL *s, EVP_PKEY *dhpkey)
7611
0
{
7612
0
    SSL_CONNECTION *sc = SSL_CONNECTION_FROM_SSL(s);
7613
7614
0
    if (sc == NULL)
7615
0
        return 0;
7616
7617
0
    if (!ssl_security(sc, SSL_SECOP_TMP_DH,
7618
0
                      EVP_PKEY_get_security_bits(dhpkey), 0, dhpkey)) {
7619
0
        ERR_raise(ERR_LIB_SSL, SSL_R_DH_KEY_TOO_SMALL);
7620
0
        return 0;
7621
0
    }
7622
0
    EVP_PKEY_free(sc->cert->dh_tmp);
7623
0
    sc->cert->dh_tmp = dhpkey;
7624
0
    return 1;
7625
0
}
7626
7627
int SSL_CTX_set0_tmp_dh_pkey(SSL_CTX *ctx, EVP_PKEY *dhpkey)
7628
0
{
7629
0
    if (!ssl_ctx_security(ctx, SSL_SECOP_TMP_DH,
7630
0
                          EVP_PKEY_get_security_bits(dhpkey), 0, dhpkey)) {
7631
0
        ERR_raise(ERR_LIB_SSL, SSL_R_DH_KEY_TOO_SMALL);
7632
0
        return 0;
7633
0
    }
7634
0
    EVP_PKEY_free(ctx->cert->dh_tmp);
7635
0
    ctx->cert->dh_tmp = dhpkey;
7636
0
    return 1;
7637
0
}
7638
7639
/* QUIC-specific methods which are supported on QUIC connections only. */
7640
int SSL_handle_events(SSL *s)
7641
0
{
7642
0
    SSL_CONNECTION *sc;
7643
7644
0
#ifndef OPENSSL_NO_QUIC
7645
0
    if (IS_QUIC(s))
7646
0
        return ossl_quic_handle_events(s);
7647
0
#endif
7648
7649
0
    sc = SSL_CONNECTION_FROM_SSL_ONLY(s);
7650
0
    if (sc != NULL && SSL_CONNECTION_IS_DTLS(sc))
7651
        /*
7652
         * DTLSv1_handle_timeout returns 0 if the timer wasn't expired yet,
7653
         * which we consider a success case. Theoretically DTLSv1_handle_timeout
7654
         * can also return 0 if s is NULL or not a DTLS object, but we've
7655
         * already ruled out those possibilities above, so this is not possible
7656
         * here. Thus the only failure cases are where DTLSv1_handle_timeout
7657
         * returns -1.
7658
         */
7659
0
        return DTLSv1_handle_timeout(s) >= 0;
7660
7661
0
    return 1;
7662
0
}
7663
7664
int SSL_get_event_timeout(SSL *s, struct timeval *tv, int *is_infinite)
7665
0
{
7666
0
    SSL_CONNECTION *sc;
7667
7668
0
#ifndef OPENSSL_NO_QUIC
7669
0
    if (IS_QUIC(s))
7670
0
        return ossl_quic_get_event_timeout(s, tv, is_infinite);
7671
0
#endif
7672
7673
0
    sc = SSL_CONNECTION_FROM_SSL_ONLY(s);
7674
0
    if (sc != NULL && SSL_CONNECTION_IS_DTLS(sc)
7675
0
        && DTLSv1_get_timeout(s, tv)) {
7676
0
        *is_infinite = 0;
7677
0
        return 1;
7678
0
    }
7679
7680
0
    tv->tv_sec  = 1000000;
7681
0
    tv->tv_usec = 0;
7682
0
    *is_infinite = 1;
7683
0
    return 1;
7684
0
}
7685
7686
int SSL_get_rpoll_descriptor(SSL *s, BIO_POLL_DESCRIPTOR *desc)
7687
0
{
7688
0
    SSL_CONNECTION *sc = SSL_CONNECTION_FROM_SSL(s);
7689
7690
0
#ifndef OPENSSL_NO_QUIC
7691
0
    if (IS_QUIC(s))
7692
0
        return ossl_quic_get_rpoll_descriptor(s, desc);
7693
0
#endif
7694
7695
0
    if (sc == NULL || sc->rbio == NULL)
7696
0
        return 0;
7697
7698
0
    return BIO_get_rpoll_descriptor(sc->rbio, desc);
7699
0
}
7700
7701
int SSL_get_wpoll_descriptor(SSL *s, BIO_POLL_DESCRIPTOR *desc)
7702
0
{
7703
0
    SSL_CONNECTION *sc = SSL_CONNECTION_FROM_SSL(s);
7704
7705
0
#ifndef OPENSSL_NO_QUIC
7706
0
    if (IS_QUIC(s))
7707
0
        return ossl_quic_get_wpoll_descriptor(s, desc);
7708
0
#endif
7709
7710
0
    if (sc == NULL || sc->wbio == NULL)
7711
0
        return 0;
7712
7713
0
    return BIO_get_wpoll_descriptor(sc->wbio, desc);
7714
0
}
7715
7716
int SSL_net_read_desired(SSL *s)
7717
0
{
7718
0
#ifndef OPENSSL_NO_QUIC
7719
0
    if (!IS_QUIC(s))
7720
0
        return SSL_want_read(s);
7721
7722
0
    return ossl_quic_get_net_read_desired(s);
7723
#else
7724
    return SSL_want_read(s);
7725
#endif
7726
0
}
7727
7728
int SSL_net_write_desired(SSL *s)
7729
0
{
7730
0
#ifndef OPENSSL_NO_QUIC
7731
0
    if (!IS_QUIC(s))
7732
0
        return SSL_want_write(s);
7733
7734
0
    return ossl_quic_get_net_write_desired(s);
7735
#else
7736
    return SSL_want_write(s);
7737
#endif
7738
0
}
7739
7740
int SSL_set_blocking_mode(SSL *s, int blocking)
7741
0
{
7742
0
#ifndef OPENSSL_NO_QUIC
7743
0
    if (!IS_QUIC(s))
7744
0
        return 0;
7745
7746
0
    return ossl_quic_conn_set_blocking_mode(s, blocking);
7747
#else
7748
    return 0;
7749
#endif
7750
0
}
7751
7752
int SSL_get_blocking_mode(SSL *s)
7753
0
{
7754
0
#ifndef OPENSSL_NO_QUIC
7755
0
    if (!IS_QUIC(s))
7756
0
        return -1;
7757
7758
0
    return ossl_quic_conn_get_blocking_mode(s);
7759
#else
7760
    return -1;
7761
#endif
7762
0
}
7763
7764
int SSL_set1_initial_peer_addr(SSL *s, const BIO_ADDR *peer_addr)
7765
0
{
7766
0
#ifndef OPENSSL_NO_QUIC
7767
0
    if (!IS_QUIC(s))
7768
0
        return 0;
7769
7770
0
    return ossl_quic_conn_set_initial_peer_addr(s, peer_addr);
7771
#else
7772
    return 0;
7773
#endif
7774
0
}
7775
7776
int SSL_shutdown_ex(SSL *ssl, uint64_t flags,
7777
                    const SSL_SHUTDOWN_EX_ARGS *args,
7778
                    size_t args_len)
7779
0
{
7780
0
#ifndef OPENSSL_NO_QUIC
7781
0
    if (!IS_QUIC(ssl))
7782
0
        return SSL_shutdown(ssl);
7783
7784
0
    return ossl_quic_conn_shutdown(ssl, flags, args, args_len);
7785
#else
7786
    return SSL_shutdown(ssl);
7787
#endif
7788
0
}
7789
7790
int SSL_stream_conclude(SSL *ssl, uint64_t flags)
7791
0
{
7792
0
#ifndef OPENSSL_NO_QUIC
7793
0
    if (!IS_QUIC(ssl))
7794
0
        return 0;
7795
7796
0
    return ossl_quic_conn_stream_conclude(ssl);
7797
#else
7798
    return 0;
7799
#endif
7800
0
}
7801
7802
SSL *SSL_new_stream(SSL *s, uint64_t flags)
7803
0
{
7804
0
#ifndef OPENSSL_NO_QUIC
7805
0
    if (!IS_QUIC(s))
7806
0
        return NULL;
7807
7808
0
    return ossl_quic_conn_stream_new(s, flags);
7809
#else
7810
    return NULL;
7811
#endif
7812
0
}
7813
7814
SSL *SSL_get0_connection(SSL *s)
7815
0
{
7816
0
#ifndef OPENSSL_NO_QUIC
7817
0
    if (!IS_QUIC(s))
7818
0
        return s;
7819
7820
0
    return ossl_quic_get0_connection(s);
7821
#else
7822
    return s;
7823
#endif
7824
0
}
7825
7826
int SSL_is_connection(SSL *s)
7827
0
{
7828
0
    return SSL_get0_connection(s) == s;
7829
0
}
7830
7831
SSL *SSL_get0_listener(SSL *s)
7832
0
{
7833
0
#ifndef OPENSSL_NO_QUIC
7834
0
    if (!IS_QUIC(s))
7835
0
        return NULL;
7836
7837
0
    return ossl_quic_get0_listener(s);
7838
#else
7839
    return NULL;
7840
#endif
7841
0
}
7842
7843
SSL *SSL_get0_domain(SSL *s)
7844
0
{
7845
0
#ifndef OPENSSL_NO_QUIC
7846
0
    if (!IS_QUIC(s))
7847
0
        return NULL;
7848
7849
0
    return ossl_quic_get0_domain(s);
7850
#else
7851
    return NULL;
7852
#endif
7853
0
}
7854
7855
int SSL_is_listener(SSL *s)
7856
0
{
7857
0
    return SSL_get0_listener(s) == s;
7858
0
}
7859
7860
int SSL_is_domain(SSL *s)
7861
0
{
7862
0
    return SSL_get0_domain(s) == s;
7863
0
}
7864
7865
int SSL_get_stream_type(SSL *s)
7866
0
{
7867
0
#ifndef OPENSSL_NO_QUIC
7868
0
    if (!IS_QUIC(s))
7869
0
        return SSL_STREAM_TYPE_BIDI;
7870
7871
0
    return ossl_quic_get_stream_type(s);
7872
#else
7873
    return SSL_STREAM_TYPE_BIDI;
7874
#endif
7875
0
}
7876
7877
uint64_t SSL_get_stream_id(SSL *s)
7878
0
{
7879
0
#ifndef OPENSSL_NO_QUIC
7880
0
    if (!IS_QUIC(s))
7881
0
        return UINT64_MAX;
7882
7883
0
    return ossl_quic_get_stream_id(s);
7884
#else
7885
    return UINT64_MAX;
7886
#endif
7887
0
}
7888
7889
int SSL_is_stream_local(SSL *s)
7890
0
{
7891
0
#ifndef OPENSSL_NO_QUIC
7892
0
    if (!IS_QUIC(s))
7893
0
        return -1;
7894
7895
0
    return ossl_quic_is_stream_local(s);
7896
#else
7897
    return -1;
7898
#endif
7899
0
}
7900
7901
int SSL_set_default_stream_mode(SSL *s, uint32_t mode)
7902
0
{
7903
0
#ifndef OPENSSL_NO_QUIC
7904
0
    if (!IS_QUIC(s))
7905
0
        return 0;
7906
7907
0
    return ossl_quic_set_default_stream_mode(s, mode);
7908
#else
7909
    return 0;
7910
#endif
7911
0
}
7912
7913
int SSL_set_incoming_stream_policy(SSL *s, int policy, uint64_t aec)
7914
0
{
7915
0
#ifndef OPENSSL_NO_QUIC
7916
0
    if (!IS_QUIC(s))
7917
0
        return 0;
7918
7919
0
    return ossl_quic_set_incoming_stream_policy(s, policy, aec);
7920
#else
7921
    return 0;
7922
#endif
7923
0
}
7924
7925
SSL *SSL_accept_stream(SSL *s, uint64_t flags)
7926
0
{
7927
0
#ifndef OPENSSL_NO_QUIC
7928
0
    if (!IS_QUIC(s))
7929
0
        return NULL;
7930
7931
0
    return ossl_quic_accept_stream(s, flags);
7932
#else
7933
    return NULL;
7934
#endif
7935
0
}
7936
7937
size_t SSL_get_accept_stream_queue_len(SSL *s)
7938
0
{
7939
0
#ifndef OPENSSL_NO_QUIC
7940
0
    if (!IS_QUIC(s))
7941
0
        return 0;
7942
7943
0
    return ossl_quic_get_accept_stream_queue_len(s);
7944
#else
7945
    return 0;
7946
#endif
7947
0
}
7948
7949
int SSL_stream_reset(SSL *s,
7950
                     const SSL_STREAM_RESET_ARGS *args,
7951
                     size_t args_len)
7952
0
{
7953
0
#ifndef OPENSSL_NO_QUIC
7954
0
    if (!IS_QUIC(s))
7955
0
        return 0;
7956
7957
0
    return ossl_quic_stream_reset(s, args, args_len);
7958
#else
7959
    return 0;
7960
#endif
7961
0
}
7962
7963
int SSL_get_stream_read_state(SSL *s)
7964
0
{
7965
0
#ifndef OPENSSL_NO_QUIC
7966
0
    if (!IS_QUIC(s))
7967
0
        return SSL_STREAM_STATE_NONE;
7968
7969
0
    return ossl_quic_get_stream_read_state(s);
7970
#else
7971
    return SSL_STREAM_STATE_NONE;
7972
#endif
7973
0
}
7974
7975
int SSL_get_stream_write_state(SSL *s)
7976
0
{
7977
0
#ifndef OPENSSL_NO_QUIC
7978
0
    if (!IS_QUIC(s))
7979
0
        return SSL_STREAM_STATE_NONE;
7980
7981
0
    return ossl_quic_get_stream_write_state(s);
7982
#else
7983
    return SSL_STREAM_STATE_NONE;
7984
#endif
7985
0
}
7986
7987
int SSL_get_stream_read_error_code(SSL *s, uint64_t *app_error_code)
7988
0
{
7989
0
#ifndef OPENSSL_NO_QUIC
7990
0
    if (!IS_QUIC(s))
7991
0
        return -1;
7992
7993
0
    return ossl_quic_get_stream_read_error_code(s, app_error_code);
7994
#else
7995
    return -1;
7996
#endif
7997
0
}
7998
7999
int SSL_get_stream_write_error_code(SSL *s, uint64_t *app_error_code)
8000
0
{
8001
0
#ifndef OPENSSL_NO_QUIC
8002
0
    if (!IS_QUIC(s))
8003
0
        return -1;
8004
8005
0
    return ossl_quic_get_stream_write_error_code(s, app_error_code);
8006
#else
8007
    return -1;
8008
#endif
8009
0
}
8010
8011
int SSL_get_conn_close_info(SSL *s, SSL_CONN_CLOSE_INFO *info,
8012
                            size_t info_len)
8013
0
{
8014
0
#ifndef OPENSSL_NO_QUIC
8015
0
    if (!IS_QUIC(s))
8016
0
        return -1;
8017
8018
0
    return ossl_quic_get_conn_close_info(s, info, info_len);
8019
#else
8020
    return -1;
8021
#endif
8022
0
}
8023
8024
int SSL_get_value_uint(SSL *s, uint32_t class_, uint32_t id,
8025
                       uint64_t *value)
8026
0
{
8027
0
#ifndef OPENSSL_NO_QUIC
8028
0
    if (IS_QUIC(s))
8029
0
        return ossl_quic_get_value_uint(s, class_, id, value);
8030
0
#endif
8031
8032
0
    ERR_raise(ERR_LIB_SSL, SSL_R_UNSUPPORTED_PROTOCOL);
8033
0
    return 0;
8034
0
}
8035
8036
int SSL_set_value_uint(SSL *s, uint32_t class_, uint32_t id,
8037
                       uint64_t value)
8038
0
{
8039
0
#ifndef OPENSSL_NO_QUIC
8040
0
    if (IS_QUIC(s))
8041
0
        return ossl_quic_set_value_uint(s, class_, id, value);
8042
0
#endif
8043
8044
0
    ERR_raise(ERR_LIB_SSL, SSL_R_UNSUPPORTED_PROTOCOL);
8045
0
    return 0;
8046
0
}
8047
8048
SSL *SSL_new_listener(SSL_CTX *ctx, uint64_t flags)
8049
0
{
8050
0
#ifndef OPENSSL_NO_QUIC
8051
0
    if (!IS_QUIC_CTX(ctx))
8052
0
        return NULL;
8053
8054
0
    return ossl_quic_new_listener(ctx, flags);
8055
#else
8056
    return NULL;
8057
#endif
8058
0
}
8059
8060
SSL *SSL_new_listener_from(SSL *ssl, uint64_t flags)
8061
0
{
8062
0
#ifndef OPENSSL_NO_QUIC
8063
0
    if (!IS_QUIC(ssl))
8064
0
        return NULL;
8065
8066
0
    return ossl_quic_new_listener_from(ssl, flags);
8067
#else
8068
    return NULL;
8069
#endif
8070
0
}
8071
8072
SSL *SSL_new_from_listener(SSL *ssl, uint64_t flags)
8073
0
{
8074
0
#ifndef OPENSSL_NO_QUIC
8075
0
    if (!IS_QUIC(ssl))
8076
0
        return NULL;
8077
8078
0
    return ossl_quic_new_from_listener(ssl, flags);
8079
#else
8080
    return NULL;
8081
#endif
8082
0
}
8083
8084
SSL *SSL_accept_connection(SSL *ssl, uint64_t flags)
8085
0
{
8086
0
#ifndef OPENSSL_NO_QUIC
8087
0
    if (!IS_QUIC(ssl))
8088
0
        return NULL;
8089
8090
0
    return ossl_quic_accept_connection(ssl, flags);
8091
#else
8092
    return NULL;
8093
#endif
8094
0
}
8095
8096
size_t SSL_get_accept_connection_queue_len(SSL *ssl)
8097
0
{
8098
0
#ifndef OPENSSL_NO_QUIC
8099
0
    if (!IS_QUIC(ssl))
8100
0
        return 0;
8101
8102
0
    return ossl_quic_get_accept_connection_queue_len(ssl);
8103
#else
8104
    return 0;
8105
#endif
8106
0
}
8107
8108
int SSL_listen(SSL *ssl)
8109
0
{
8110
0
#ifndef OPENSSL_NO_QUIC
8111
0
    if (!IS_QUIC(ssl))
8112
0
        return 0;
8113
8114
0
    return ossl_quic_listen(ssl);
8115
#else
8116
    return 0;
8117
#endif
8118
0
}
8119
8120
SSL *SSL_new_domain(SSL_CTX *ctx, uint64_t flags)
8121
0
{
8122
0
#ifndef OPENSSL_NO_QUIC
8123
0
    if (!IS_QUIC_CTX(ctx))
8124
0
        return NULL;
8125
8126
0
    return ossl_quic_new_domain(ctx, flags);
8127
#else
8128
    return NULL;
8129
#endif
8130
0
}
8131
8132
int ossl_adjust_domain_flags(uint64_t domain_flags, uint64_t *p_domain_flags)
8133
0
{
8134
0
    if ((domain_flags & ~OSSL_QUIC_SUPPORTED_DOMAIN_FLAGS) != 0) {
8135
0
        ERR_raise_data(ERR_LIB_SSL, ERR_R_UNSUPPORTED,
8136
0
                       "unsupported domain flag requested");
8137
0
        return 0;
8138
0
    }
8139
8140
0
    if ((domain_flags & SSL_DOMAIN_FLAG_THREAD_ASSISTED) != 0)
8141
0
        domain_flags |= SSL_DOMAIN_FLAG_MULTI_THREAD;
8142
8143
0
    if ((domain_flags & (SSL_DOMAIN_FLAG_MULTI_THREAD
8144
0
                         | SSL_DOMAIN_FLAG_SINGLE_THREAD)) == 0)
8145
0
        domain_flags |= SSL_DOMAIN_FLAG_MULTI_THREAD;
8146
8147
0
    if ((domain_flags & SSL_DOMAIN_FLAG_SINGLE_THREAD) != 0
8148
0
        && (domain_flags & SSL_DOMAIN_FLAG_MULTI_THREAD) != 0) {
8149
0
        ERR_raise_data(ERR_LIB_SSL, ERR_R_PASSED_INVALID_ARGUMENT,
8150
0
                       "mutually exclusive domain flags specified");
8151
0
        return 0;
8152
0
    }
8153
8154
    /*
8155
     * Note: We treat MULTI_THREAD as a no-op in non-threaded builds, but
8156
     * not THREAD_ASSISTED.
8157
     */
8158
# ifndef OPENSSL_THREADS
8159
    if ((domain_flags & SSL_DOMAIN_FLAG_THREAD_ASSISTED) != 0) {
8160
        ERR_raise_data(ERR_LIB_SSL, ERR_R_UNSUPPORTED,
8161
                       "thread assisted mode not available in this build");
8162
        return 0;
8163
    }
8164
# endif
8165
8166
0
    *p_domain_flags = domain_flags;
8167
0
    return 1;
8168
0
}
8169
8170
int SSL_CTX_set_domain_flags(SSL_CTX *ctx, uint64_t domain_flags)
8171
0
{
8172
0
#ifndef OPENSSL_NO_QUIC
8173
0
    if (IS_QUIC_CTX(ctx)) {
8174
0
        if (!ossl_adjust_domain_flags(domain_flags, &domain_flags))
8175
0
            return 0;
8176
8177
0
        ctx->domain_flags = domain_flags;
8178
0
        return 1;
8179
0
    }
8180
0
#endif
8181
8182
0
    ERR_raise_data(ERR_LIB_SSL, ERR_R_UNSUPPORTED,
8183
0
                   "domain flags unsupported on this kind of SSL_CTX");
8184
0
    return 0;
8185
0
}
8186
8187
int SSL_CTX_get_domain_flags(const SSL_CTX *ctx, uint64_t *domain_flags)
8188
0
{
8189
0
#ifndef OPENSSL_NO_QUIC
8190
0
    if (IS_QUIC_CTX(ctx)) {
8191
0
        if (domain_flags != NULL)
8192
0
            *domain_flags = ctx->domain_flags;
8193
8194
0
        return 1;
8195
0
    }
8196
0
#endif
8197
8198
0
    ERR_raise_data(ERR_LIB_SSL, ERR_R_UNSUPPORTED,
8199
0
                   "domain flags unsupported on this kind of SSL_CTX");
8200
0
    return 0;
8201
0
}
8202
8203
int SSL_get_domain_flags(const SSL *ssl, uint64_t *domain_flags)
8204
0
{
8205
0
#ifndef OPENSSL_NO_QUIC
8206
0
    if (IS_QUIC(ssl))
8207
0
        return ossl_quic_get_domain_flags(ssl, domain_flags);
8208
0
#endif
8209
8210
0
    return 0;
8211
0
}
8212
8213
int SSL_add_expected_rpk(SSL *s, EVP_PKEY *rpk)
8214
0
{
8215
0
    unsigned char *data = NULL;
8216
0
    SSL_DANE *dane = SSL_get0_dane(s);
8217
0
    int ret;
8218
8219
0
    if (dane == NULL || dane->dctx == NULL)
8220
0
        return 0;
8221
0
    if ((ret = i2d_PUBKEY(rpk, &data)) <= 0)
8222
0
        return 0;
8223
8224
0
    ret = SSL_dane_tlsa_add(s, DANETLS_USAGE_DANE_EE,
8225
0
                            DANETLS_SELECTOR_SPKI,
8226
0
                            DANETLS_MATCHING_FULL,
8227
0
                            data, (size_t)ret) > 0;
8228
0
    OPENSSL_free(data);
8229
0
    return ret;
8230
0
}
8231
8232
EVP_PKEY *SSL_get0_peer_rpk(const SSL *s)
8233
0
{
8234
0
    SSL_CONNECTION *sc = SSL_CONNECTION_FROM_SSL(s);
8235
8236
0
    if (sc == NULL || sc->session == NULL)
8237
0
        return NULL;
8238
0
    return sc->session->peer_rpk;
8239
0
}
8240
8241
int SSL_get_negotiated_client_cert_type(const SSL *s)
8242
0
{
8243
0
    SSL_CONNECTION *sc = SSL_CONNECTION_FROM_SSL(s);
8244
8245
0
    if (sc == NULL)
8246
0
        return 0;
8247
8248
0
    return sc->ext.client_cert_type;
8249
0
}
8250
8251
int SSL_get_negotiated_server_cert_type(const SSL *s)
8252
0
{
8253
0
    SSL_CONNECTION *sc = SSL_CONNECTION_FROM_SSL(s);
8254
8255
0
    if (sc == NULL)
8256
0
        return 0;
8257
8258
0
    return sc->ext.server_cert_type;
8259
0
}
8260
8261
static int validate_cert_type(const unsigned char *val, size_t len)
8262
0
{
8263
0
    size_t i;
8264
0
    int saw_rpk = 0;
8265
0
    int saw_x509 = 0;
8266
8267
0
    if (val == NULL && len == 0)
8268
0
        return 1;
8269
8270
0
    if (val == NULL || len == 0)
8271
0
        return 0;
8272
8273
0
    for (i = 0; i < len; i++) {
8274
0
        switch (val[i]) {
8275
0
        case TLSEXT_cert_type_rpk:
8276
0
            if (saw_rpk)
8277
0
                return 0;
8278
0
            saw_rpk = 1;
8279
0
            break;
8280
0
        case TLSEXT_cert_type_x509:
8281
0
            if (saw_x509)
8282
0
                return 0;
8283
0
            saw_x509 = 1;
8284
0
            break;
8285
0
        case TLSEXT_cert_type_pgp:
8286
0
        case TLSEXT_cert_type_1609dot2:
8287
0
        default:
8288
0
            return 0;
8289
0
        }
8290
0
    }
8291
0
    return 1;
8292
0
}
8293
8294
static int set_cert_type(unsigned char **cert_type,
8295
                         size_t *cert_type_len,
8296
                         const unsigned char *val,
8297
                         size_t len)
8298
0
{
8299
0
    unsigned char *tmp = NULL;
8300
8301
0
    if (!validate_cert_type(val, len))
8302
0
        return 0;
8303
8304
0
    if (val != NULL && (tmp = OPENSSL_memdup(val, len)) == NULL)
8305
0
        return 0;
8306
8307
0
    OPENSSL_free(*cert_type);
8308
0
    *cert_type = tmp;
8309
0
    *cert_type_len = len;
8310
0
    return 1;
8311
0
}
8312
8313
int SSL_set1_client_cert_type(SSL *s, const unsigned char *val, size_t len)
8314
0
{
8315
0
    SSL_CONNECTION *sc = SSL_CONNECTION_FROM_SSL(s);
8316
8317
0
    if (sc == NULL)
8318
0
        return 0;
8319
8320
0
    return set_cert_type(&sc->client_cert_type, &sc->client_cert_type_len,
8321
0
                         val, len);
8322
0
}
8323
8324
int SSL_set1_server_cert_type(SSL *s, const unsigned char *val, size_t len)
8325
0
{
8326
0
    SSL_CONNECTION *sc = SSL_CONNECTION_FROM_SSL(s);
8327
8328
0
    if (sc == NULL)
8329
0
        return 0;
8330
8331
0
    return set_cert_type(&sc->server_cert_type, &sc->server_cert_type_len,
8332
0
                         val, len);
8333
0
}
8334
8335
int SSL_CTX_set1_client_cert_type(SSL_CTX *ctx, const unsigned char *val, size_t len)
8336
0
{
8337
0
    return set_cert_type(&ctx->client_cert_type, &ctx->client_cert_type_len,
8338
0
                         val, len);
8339
0
}
8340
8341
int SSL_CTX_set1_server_cert_type(SSL_CTX *ctx, const unsigned char *val, size_t len)
8342
0
{
8343
0
    return set_cert_type(&ctx->server_cert_type, &ctx->server_cert_type_len,
8344
0
                         val, len);
8345
0
}
8346
8347
int SSL_get0_client_cert_type(const SSL *s, unsigned char **t, size_t *len)
8348
0
{
8349
0
    const SSL_CONNECTION *sc = SSL_CONNECTION_FROM_CONST_SSL(s);
8350
8351
0
    if (t == NULL || len == NULL || sc == NULL)
8352
0
        return 0;
8353
8354
0
    *t = sc->client_cert_type;
8355
0
    *len = sc->client_cert_type_len;
8356
0
    return 1;
8357
0
}
8358
8359
int SSL_get0_server_cert_type(const SSL *s, unsigned char **t, size_t *len)
8360
0
{
8361
0
    const SSL_CONNECTION *sc = SSL_CONNECTION_FROM_CONST_SSL(s);
8362
8363
0
    if (t == NULL || len == NULL || sc == NULL)
8364
0
        return 0;
8365
8366
0
    *t = sc->server_cert_type;
8367
0
    *len = sc->server_cert_type_len;
8368
0
    return 1;
8369
0
}
8370
8371
int SSL_CTX_get0_client_cert_type(const SSL_CTX *ctx, unsigned char **t, size_t *len)
8372
0
{
8373
0
    if (t == NULL || len == NULL)
8374
0
        return 0;
8375
8376
0
    *t = ctx->client_cert_type;
8377
0
    *len = ctx->client_cert_type_len;
8378
0
    return 1;
8379
0
}
8380
8381
int SSL_CTX_get0_server_cert_type(const SSL_CTX *ctx, unsigned char **t, size_t *len)
8382
0
{
8383
0
    if (t == NULL || len == NULL)
8384
0
        return 0;
8385
8386
0
    *t = ctx->server_cert_type;
8387
0
    *len = ctx->server_cert_type_len;
8388
0
    return 1;
8389
0
}