deprecated openssl3 function

This commit is contained in:
Ailin Nemui 2024-04-01 22:03:33 +02:00
parent b18832bf3b
commit 455dcb18ec

View File

@ -28,6 +28,7 @@
#include <irssi/src/core/tls.h> #include <irssi/src/core/tls.h>
#include <openssl/crypto.h> #include <openssl/crypto.h>
#include <openssl/objects.h>
#include <openssl/x509.h> #include <openssl/x509.h>
#include <openssl/x509v3.h> #include <openssl/x509v3.h>
#include <openssl/pem.h> #include <openssl/pem.h>
@ -751,44 +752,49 @@ static void set_server_temporary_key_info(TLS_REC *tls, SSL *ssl)
#ifdef SSL_get_server_tmp_key #ifdef SSL_get_server_tmp_key
/* Show ephemeral key information. */ /* Show ephemeral key information. */
EVP_PKEY *ephemeral_key = NULL; EVP_PKEY *ephemeral_key = NULL;
/* OPENSSL_NO_EC is for solaris 11.3 (2016), github ticket #598 */
#ifndef OPENSSL_NO_EC
EC_KEY *ec_key = NULL;
#endif
char *ephemeral_key_algorithm = NULL; char *ephemeral_key_algorithm = NULL;
char *cname = NULL;
int nid;
g_return_if_fail(tls != NULL); g_return_if_fail(tls != NULL);
g_return_if_fail(ssl != NULL); g_return_if_fail(ssl != NULL);
if (SSL_get_server_tmp_key(ssl, &ephemeral_key)) { if (SSL_get_server_tmp_key(ssl, &ephemeral_key)) {
switch (EVP_PKEY_id(ephemeral_key)) { int keytype = EVP_PKEY_id(ephemeral_key);
case EVP_PKEY_DH: switch (keytype) {
tls_rec_set_ephemeral_key_algorithm(tls, "DH"); case EVP_PKEY_DH:
tls_rec_set_ephemeral_key_size(tls, EVP_PKEY_bits(ephemeral_key)); tls_rec_set_ephemeral_key_algorithm(tls, "DH");
break; tls_rec_set_ephemeral_key_size(tls, EVP_PKEY_bits(ephemeral_key));
break;
/* OPENSSL_NO_EC is for solaris 11.3 (2016), github ticket #598 */
#ifndef OPENSSL_NO_EC #ifndef OPENSSL_NO_EC
case EVP_PKEY_EC: case EVP_PKEY_EC: {
ec_key = EVP_PKEY_get1_EC_KEY(ephemeral_key); #if (OPENSSL_VERSION_NUMBER >= 0x30000000L)
nid = EC_GROUP_get_curve_name(EC_KEY_get0_group(ec_key)); char cname[50];
EC_KEY_free(ec_key); EVP_PKEY_get_group_name(ephemeral_key, cname, sizeof(cname), NULL);
cname = (char *)OBJ_nid2sn(nid); #else
ephemeral_key_algorithm = g_strdup_printf("ECDH: %s", cname); EC_KEY *ec_key = NULL;
char *cname = NULL;
int nid;
tls_rec_set_ephemeral_key_algorithm(tls, ephemeral_key_algorithm); ec_key = EVP_PKEY_get1_EC_KEY(ephemeral_key);
tls_rec_set_ephemeral_key_size(tls, EVP_PKEY_bits(ephemeral_key)); nid = EC_GROUP_get_curve_name(EC_KEY_get0_group(ec_key));
EC_KEY_free(ec_key);
cname = (char *) OBJ_nid2sn(nid);
#endif
ephemeral_key_algorithm = g_strdup_printf("ECDH: %s", cname);
g_free_and_null(ephemeral_key_algorithm); tls_rec_set_ephemeral_key_algorithm(tls, ephemeral_key_algorithm);
break; tls_rec_set_ephemeral_key_size(tls, EVP_PKEY_bits(ephemeral_key));
g_free_and_null(ephemeral_key_algorithm);
break;
}
#endif #endif
default: default:
tls_rec_set_ephemeral_key_algorithm(tls, "Unknown"); tls_rec_set_ephemeral_key_algorithm(tls, OBJ_nid2ln(keytype));
tls_rec_set_ephemeral_key_size(tls, EVP_PKEY_bits(ephemeral_key)); tls_rec_set_ephemeral_key_size(tls, EVP_PKEY_bits(ephemeral_key));
break; break;
} }
EVP_PKEY_free(ephemeral_key); EVP_PKEY_free(ephemeral_key);