Coverage Report

Created: 2025-06-13 06:58

/src/openssl31/ssl/tls_depr.c
Line
Count
Source (jump to first uncovered line)
1
/*
2
 * Copyright 2020-2021 The OpenSSL Project Authors. All Rights Reserved.
3
 *
4
 * Licensed under the Apache License 2.0 (the "License").  You may not use
5
 * this file except in compliance with the License.  You can obtain a copy
6
 * in the file LICENSE in the source distribution or at
7
 * https://www.openssl.org/source/license.html
8
 */
9
10
/* We need to use some engine and HMAC deprecated APIs */
11
#define OPENSSL_SUPPRESS_DEPRECATED
12
13
#include <openssl/engine.h>
14
#include "ssl_local.h"
15
16
/*
17
 * Engine APIs are only used to support applications that still use ENGINEs.
18
 * Once ENGINE is removed completely, all of this code can also be removed.
19
 */
20
21
#ifndef OPENSSL_NO_ENGINE
22
void tls_engine_finish(ENGINE *e)
23
634k
{
24
634k
    ENGINE_finish(e);
25
634k
}
26
#endif
27
28
const EVP_CIPHER *tls_get_cipher_from_engine(int nid)
29
1.82M
{
30
1.82M
    const EVP_CIPHER *ret = NULL;
31
1.82M
#ifndef OPENSSL_NO_ENGINE
32
1.82M
    ENGINE *eng;
33
34
    /*
35
     * If there is an Engine available for this cipher we use the "implicit"
36
     * form to ensure we use that engine later.
37
     */
38
1.82M
    eng = ENGINE_get_cipher_engine(nid);
39
1.82M
    if (eng != NULL) {
40
0
        ret = ENGINE_get_cipher(eng, nid);
41
0
        ENGINE_finish(eng);
42
0
    }
43
1.82M
#endif
44
1.82M
    return ret;
45
1.82M
}
46
47
const EVP_MD *tls_get_digest_from_engine(int nid)
48
1.27M
{
49
1.27M
    const EVP_MD *ret = NULL;
50
1.27M
#ifndef OPENSSL_NO_ENGINE
51
1.27M
    ENGINE *eng;
52
53
    /*
54
     * If there is an Engine available for this digest we use the "implicit"
55
     * form to ensure we use that engine later.
56
     */
57
1.27M
    eng = ENGINE_get_digest_engine(nid);
58
1.27M
    if (eng != NULL) {
59
0
        ret = ENGINE_get_digest(eng, nid);
60
0
        ENGINE_finish(eng);
61
0
    }
62
1.27M
#endif
63
1.27M
    return ret;
64
1.27M
}
65
66
#ifndef OPENSSL_NO_ENGINE
67
int tls_engine_load_ssl_client_cert(SSL *s, X509 **px509, EVP_PKEY **ppkey)
68
0
{
69
0
    return ENGINE_load_ssl_client_cert(s->ctx->client_cert_engine, s,
70
0
                                       SSL_get_client_CA_list(s),
71
0
                                       px509, ppkey, NULL, NULL, NULL);
72
0
}
73
#endif
74
75
#ifndef OPENSSL_NO_ENGINE
76
int SSL_CTX_set_client_cert_engine(SSL_CTX *ctx, ENGINE *e)
77
0
{
78
0
    if (!ENGINE_init(e)) {
79
0
        ERR_raise(ERR_LIB_SSL, ERR_R_ENGINE_LIB);
80
0
        return 0;
81
0
    }
82
0
    if (!ENGINE_get_ssl_client_cert_function(e)) {
83
0
        ERR_raise(ERR_LIB_SSL, SSL_R_NO_CLIENT_CERT_METHOD);
84
0
        ENGINE_finish(e);
85
0
        return 0;
86
0
    }
87
0
    ctx->client_cert_engine = e;
88
0
    return 1;
89
0
}
90
#endif
91
92
/*
93
 * The HMAC APIs below are only used to support the deprecated public API
94
 * macro SSL_CTX_set_tlsext_ticket_key_cb(). The application supplied callback
95
 * takes an HMAC_CTX in its argument list. The preferred alternative is
96
 * SSL_CTX_set_tlsext_ticket_key_evp_cb(). Once
97
 * SSL_CTX_set_tlsext_ticket_key_cb() is removed, then all of this code can also
98
 * be removed.
99
 */
100
#ifndef OPENSSL_NO_DEPRECATED_3_0
101
int ssl_hmac_old_new(SSL_HMAC *ret)
102
0
{
103
0
    ret->old_ctx = HMAC_CTX_new();
104
0
    if (ret->old_ctx == NULL)
105
0
        return 0;
106
107
0
    return 1;
108
0
}
109
110
void ssl_hmac_old_free(SSL_HMAC *ctx)
111
1.20k
{
112
1.20k
    HMAC_CTX_free(ctx->old_ctx);
113
1.20k
}
114
115
int ssl_hmac_old_init(SSL_HMAC *ctx, void *key, size_t len, char *md)
116
0
{
117
0
    return HMAC_Init_ex(ctx->old_ctx, key, len, EVP_get_digestbyname(md), NULL);
118
0
}
119
120
int ssl_hmac_old_update(SSL_HMAC *ctx, const unsigned char *data, size_t len)
121
0
{
122
0
    return HMAC_Update(ctx->old_ctx, data, len);
123
0
}
124
125
int ssl_hmac_old_final(SSL_HMAC *ctx, unsigned char *md, size_t *len)
126
0
{
127
0
    unsigned int l;
128
129
0
    if (HMAC_Final(ctx->old_ctx, md, &l) > 0) {
130
0
        if (len != NULL)
131
0
            *len = l;
132
0
        return 1;
133
0
    }
134
135
0
    return 0;
136
0
}
137
138
size_t ssl_hmac_old_size(const SSL_HMAC *ctx)
139
0
{
140
0
    return HMAC_size(ctx->old_ctx);
141
0
}
142
143
HMAC_CTX *ssl_hmac_get0_HMAC_CTX(SSL_HMAC *ctx)
144
0
{
145
0
    return ctx->old_ctx;
146
0
}
147
148
/* Some deprecated public APIs pass DH objects */
149
EVP_PKEY *ssl_dh_to_pkey(DH *dh)
150
0
{
151
0
# ifndef OPENSSL_NO_DH
152
0
    EVP_PKEY *ret;
153
154
0
    if (dh == NULL)
155
0
        return NULL;
156
0
    ret = EVP_PKEY_new();
157
0
    if (EVP_PKEY_set1_DH(ret, dh) <= 0) {
158
0
        EVP_PKEY_free(ret);
159
0
        return NULL;
160
0
    }
161
0
    return ret;
162
# else
163
    return NULL;
164
# endif
165
0
}
166
167
/* Some deprecated public APIs pass EC_KEY objects */
168
int ssl_set_tmp_ecdh_groups(uint16_t **pext, size_t *pextlen,
169
                            void *key)
170
0
{
171
0
#  ifndef OPENSSL_NO_EC
172
0
    const EC_GROUP *group = EC_KEY_get0_group((const EC_KEY *)key);
173
0
    int nid;
174
175
0
    if (group == NULL) {
176
0
        ERR_raise(ERR_LIB_SSL, SSL_R_MISSING_PARAMETERS);
177
0
        return 0;
178
0
    }
179
0
    nid = EC_GROUP_get_curve_name(group);
180
0
    if (nid == NID_undef)
181
0
        return 0;
182
0
    return tls1_set_groups(pext, pextlen, &nid, 1);
183
#  else
184
    return 0;
185
#  endif
186
0
}
187
188
/*
189
 * Set the callback for generating temporary DH keys.
190
 * ctx: the SSL context.
191
 * dh: the callback
192
 */
193
# if !defined(OPENSSL_NO_DH)
194
void SSL_CTX_set_tmp_dh_callback(SSL_CTX *ctx,
195
                                 DH *(*dh) (SSL *ssl, int is_export,
196
                                            int keylength))
197
0
{
198
0
    SSL_CTX_callback_ctrl(ctx, SSL_CTRL_SET_TMP_DH_CB, (void (*)(void))dh);
199
0
}
200
201
void SSL_set_tmp_dh_callback(SSL *ssl, DH *(*dh) (SSL *ssl, int is_export,
202
                                                  int keylength))
203
0
{
204
0
    SSL_callback_ctrl(ssl, SSL_CTRL_SET_TMP_DH_CB, (void (*)(void))dh);
205
0
}
206
# endif
207
#endif /* OPENSSL_NO_DEPRECATED */