mirror of
https://github.com/curl/curl.git
synced 2026-04-15 01:11:40 +03:00
curl_ntlm_core: use wolfCrypt DES API with wolfSSL
Replacing the last uses of the OpenSSL compatibility API, and dropping the redefinition of external symbols. Closes #21247
This commit is contained in:
parent
f974a00aba
commit
a0d5d8fea3
7 changed files with 61 additions and 70 deletions
|
|
@ -673,15 +673,15 @@ ${SIZEOF_TIME_T_CODE}
|
|||
/* if wolfSSL has the wolfSSL_UseALPN function. */
|
||||
#cmakedefine HAVE_WOLFSSL_USEALPN 1
|
||||
|
||||
/* if wolfSSL has the wolfSSL_DES_ecb_encrypt function. */
|
||||
#cmakedefine HAVE_WOLFSSL_DES_ECB_ENCRYPT 1
|
||||
|
||||
/* if wolfSSL has the wolfSSL_BIO_new function. */
|
||||
#cmakedefine HAVE_WOLFSSL_BIO_NEW 1
|
||||
|
||||
/* if wolfSSL has the wolfSSL_BIO_set_shutdown function. */
|
||||
#cmakedefine HAVE_WOLFSSL_BIO_SET_SHUTDOWN 1
|
||||
|
||||
/* if wolfSSL has the wc_Des_EcbEncrypt function. */
|
||||
#cmakedefine HAVE_WC_DES_ECBENCRYPT 1
|
||||
|
||||
/* if libssh is in use */
|
||||
#cmakedefine USE_LIBSSH 1
|
||||
|
||||
|
|
|
|||
|
|
@ -49,59 +49,30 @@
|
|||
in NTLM type-3 messages.
|
||||
*/
|
||||
|
||||
#ifdef USE_MBEDTLS
|
||||
#include <mbedtls/version.h>
|
||||
#if MBEDTLS_VERSION_NUMBER < 0x03020000
|
||||
#error "mbedTLS 3.2.0 or later required"
|
||||
#endif
|
||||
#endif
|
||||
|
||||
#if defined(USE_OPENSSL) && defined(HAVE_DES_ECB_ENCRYPT)
|
||||
# define USE_OPENSSL_DES
|
||||
#elif defined(USE_WOLFSSL) && defined(HAVE_WOLFSSL_DES_ECB_ENCRYPT)
|
||||
# define USE_OPENSSL_DES
|
||||
#elif defined(USE_MBEDTLS) && defined(HAVE_MBEDTLS_DES_CRYPT_ECB)
|
||||
# define USE_MBEDTLS_DES
|
||||
#endif
|
||||
|
||||
#ifdef USE_OPENSSL_DES
|
||||
|
||||
#ifdef USE_OPENSSL
|
||||
# include <openssl/des.h>
|
||||
# ifdef OPENSSL_IS_AWSLC /* for versions 1.2.0 to 1.30.1 */
|
||||
# define DES_set_key_unchecked (void)DES_set_key
|
||||
# endif
|
||||
# define DESKEY(x) &x
|
||||
#else
|
||||
# define USE_OPENSSL_DES
|
||||
|
||||
#elif defined(USE_WOLFSSL) && defined(HAVE_WC_DES_ECBENCRYPT)
|
||||
|
||||
# include <wolfssl/options.h>
|
||||
# include <wolfssl/openssl/des.h>
|
||||
# include <wolfssl/version.h>
|
||||
# ifdef OPENSSL_COEXIST
|
||||
# define DES_key_schedule WOLFSSL_DES_key_schedule
|
||||
# define DES_cblock WOLFSSL_DES_cblock
|
||||
# define DES_set_odd_parity wolfSSL_DES_set_odd_parity
|
||||
# define DES_set_key wolfSSL_DES_set_key
|
||||
# define DES_set_key_unchecked wolfSSL_DES_set_key_unchecked
|
||||
# define DES_ecb_encrypt wolfSSL_DES_ecb_encrypt
|
||||
# define DESKEY(x) ((WOLFSSL_DES_key_schedule *)(x))
|
||||
# if LIBWOLFSSL_VERSION_HEX >= 0x05007006
|
||||
# define DES_ENCRYPT WC_DES_ENCRYPT
|
||||
# define DES_DECRYPT WC_DES_DECRYPT
|
||||
# endif
|
||||
# else
|
||||
# define DESKEY(x) &x
|
||||
# endif
|
||||
#endif
|
||||
# include <wolfssl/wolfcrypt/des3.h>
|
||||
# define USE_WOLFSSL_DES
|
||||
|
||||
#elif defined(USE_GNUTLS)
|
||||
|
||||
# include <nettle/des.h>
|
||||
# define USE_CURL_DES_SET_ODD_PARITY
|
||||
|
||||
#elif defined(USE_MBEDTLS_DES)
|
||||
|
||||
#elif defined(USE_MBEDTLS) && defined(HAVE_MBEDTLS_DES_CRYPT_ECB)
|
||||
# include <mbedtls/version.h>
|
||||
# if MBEDTLS_VERSION_NUMBER < 0x03020000
|
||||
# error "mbedTLS 3.2.0 or later required"
|
||||
# endif
|
||||
# include <mbedtls/des.h>
|
||||
|
||||
# define USE_MBEDTLS_DES
|
||||
#elif defined(USE_OS400CRYPTO)
|
||||
# include "cipher.mih" /* mih/cipher */
|
||||
# define USE_CURL_DES_SET_ODD_PARITY
|
||||
|
|
@ -192,8 +163,19 @@ static void setup_des_key(const unsigned char *key_56, DES_key_schedule *ks)
|
|||
DES_set_key_unchecked(&key, ks);
|
||||
}
|
||||
|
||||
#elif defined(USE_GNUTLS)
|
||||
#elif defined(USE_WOLFSSL_DES)
|
||||
static void setup_des_key(const unsigned char *key_56, Des *des)
|
||||
{
|
||||
byte key[8];
|
||||
|
||||
/* Expand the 56-bit key to 64 bits */
|
||||
extend_key_56_to_64(key_56, (char *)key);
|
||||
|
||||
/* Set the key */
|
||||
wc_Des_SetKey(des, key, NULL, 0);
|
||||
}
|
||||
|
||||
#elif defined(USE_GNUTLS)
|
||||
static void setup_des_key(const unsigned char *key_56, struct des_ctx *des)
|
||||
{
|
||||
char key[8];
|
||||
|
|
@ -209,7 +191,6 @@ static void setup_des_key(const unsigned char *key_56, struct des_ctx *des)
|
|||
}
|
||||
|
||||
#elif defined(USE_MBEDTLS_DES)
|
||||
|
||||
static bool encrypt_des(const unsigned char *in, unsigned char *out,
|
||||
const unsigned char *key_56)
|
||||
{
|
||||
|
|
@ -229,7 +210,6 @@ static bool encrypt_des(const unsigned char *in, unsigned char *out,
|
|||
}
|
||||
|
||||
#elif defined(USE_OS400CRYPTO)
|
||||
|
||||
static bool encrypt_des(const unsigned char *in, unsigned char *out,
|
||||
const unsigned char *key_56)
|
||||
{
|
||||
|
|
@ -253,7 +233,6 @@ static bool encrypt_des(const unsigned char *in, unsigned char *out,
|
|||
}
|
||||
|
||||
#elif defined(USE_WIN32_CRYPTO)
|
||||
|
||||
static bool encrypt_des(const unsigned char *in, unsigned char *out,
|
||||
const unsigned char *key_56)
|
||||
{
|
||||
|
|
@ -316,17 +295,25 @@ void Curl_ntlm_core_lm_resp(const unsigned char *keys,
|
|||
#ifdef USE_OPENSSL_DES
|
||||
DES_key_schedule ks;
|
||||
|
||||
setup_des_key(keys, DESKEY(ks));
|
||||
setup_des_key(keys, &ks);
|
||||
DES_ecb_encrypt((DES_cblock *)CURL_UNCONST(plaintext),
|
||||
(DES_cblock *)results, DESKEY(ks), DES_ENCRYPT);
|
||||
(DES_cblock *)results, &ks, DES_ENCRYPT);
|
||||
|
||||
setup_des_key(keys + 7, DESKEY(ks));
|
||||
setup_des_key(keys + 7, &ks);
|
||||
DES_ecb_encrypt((DES_cblock *)CURL_UNCONST(plaintext),
|
||||
(DES_cblock *)(results + 8), DESKEY(ks), DES_ENCRYPT);
|
||||
(DES_cblock *)(results + 8), &ks, DES_ENCRYPT);
|
||||
|
||||
setup_des_key(keys + 14, DESKEY(ks));
|
||||
setup_des_key(keys + 14, &ks);
|
||||
DES_ecb_encrypt((DES_cblock *)CURL_UNCONST(plaintext),
|
||||
(DES_cblock *)(results + 16), DESKEY(ks), DES_ENCRYPT);
|
||||
(DES_cblock *)(results + 16), &ks, DES_ENCRYPT);
|
||||
#elif defined(USE_WOLFSSL_DES)
|
||||
Des des;
|
||||
setup_des_key(keys, &des);
|
||||
wc_Des_EcbEncrypt(&des, results, plaintext, DES_KEY_SIZE);
|
||||
setup_des_key(keys + 7, &des);
|
||||
wc_Des_EcbEncrypt(&des, results + 8, plaintext, DES_KEY_SIZE);
|
||||
setup_des_key(keys + 14, &des);
|
||||
wc_Des_EcbEncrypt(&des, results + 16, plaintext, DES_KEY_SIZE);
|
||||
#elif defined(USE_GNUTLS)
|
||||
struct des_ctx des;
|
||||
setup_des_key(keys, &des);
|
||||
|
|
@ -364,17 +351,22 @@ CURLcode Curl_ntlm_core_mk_lm_hash(const char *password,
|
|||
|
||||
{
|
||||
/* Create LanManager hashed password. */
|
||||
|
||||
#ifdef USE_OPENSSL_DES
|
||||
DES_key_schedule ks;
|
||||
|
||||
setup_des_key(pw, DESKEY(ks));
|
||||
setup_des_key(pw, &ks);
|
||||
DES_ecb_encrypt((DES_cblock *)CURL_UNCONST(magic),
|
||||
(DES_cblock *)lmbuffer, DESKEY(ks), DES_ENCRYPT);
|
||||
(DES_cblock *)lmbuffer, &ks, DES_ENCRYPT);
|
||||
|
||||
setup_des_key(pw + 7, DESKEY(ks));
|
||||
setup_des_key(pw + 7, &ks);
|
||||
DES_ecb_encrypt((DES_cblock *)CURL_UNCONST(magic),
|
||||
(DES_cblock *)(lmbuffer + 8), DESKEY(ks), DES_ENCRYPT);
|
||||
(DES_cblock *)(lmbuffer + 8), &ks, DES_ENCRYPT);
|
||||
#elif defined(USE_WOLFSSL_DES)
|
||||
Des des;
|
||||
setup_des_key(pw, &des);
|
||||
wc_Des_EcbEncrypt(&des, lmbuffer, magic, DES_KEY_SIZE);
|
||||
setup_des_key(pw + 7, &des);
|
||||
wc_Des_EcbEncrypt(&des, lmbuffer + 8, magic, DES_KEY_SIZE);
|
||||
#elif defined(USE_GNUTLS)
|
||||
struct des_ctx des;
|
||||
setup_des_key(pw, &des);
|
||||
|
|
|
|||
|
|
@ -767,7 +767,7 @@
|
|||
defined(USE_GNUTLS) || \
|
||||
(defined(USE_MBEDTLS) && defined(HAVE_MBEDTLS_DES_CRYPT_ECB)) || \
|
||||
defined(USE_OS400CRYPTO) || defined(USE_WIN32_CRYPTO) || \
|
||||
(defined(USE_WOLFSSL) && defined(HAVE_WOLFSSL_DES_ECB_ENCRYPT))
|
||||
(defined(USE_WOLFSSL) && defined(HAVE_WC_DES_ECBENCRYPT))
|
||||
# define USE_CURL_NTLM_CORE
|
||||
# endif
|
||||
# if defined(USE_CURL_NTLM_CORE) || defined(USE_WINDOWS_SSPI)
|
||||
|
|
|
|||
Loading…
Add table
Add a link
Reference in a new issue