Merge pull request #3822 from TakayukiMatsuo/os_ecdh

Add CTX_set_ecdh_auto
This commit is contained in:
Chris Conlon
2021-03-09 15:15:38 -07:00
committed by GitHub
5 changed files with 87 additions and 2 deletions

View File

@@ -54348,4 +54348,41 @@ int wolfSSL_set_ephemeral_key(WOLFSSL* ssl, int keyAlgo,
#endif /* WOLFSSL_STATIC_EPHEMERAL */
#if defined(OPENSSL_EXTRA)
/* wolfSSL_THREADID_current is provided as a compat API with
* CRYPTO_THREADID_current to register current thread id into given id object.
* However, CRYPTO_THREADID_current API has been deprecated and no longer
* exists in the OpenSSL 1.0.0 or later.This API only works as a stub
* like as existing wolfSSL_THREADID_set_numeric.
*/
void wolfSSL_THREADID_current(WOLFSSL_CRYPTO_THREADID* id)
{
(void)id;
return;
}
/* wolfSSL_THREADID_hash is provided as a compatible API with
* CRYPTO_THREADID_hash which returns a hash value calcurated from the
* specified thread id. However, CRYPTO_THREADID_hash API has been
* deprecated and no longer exists in the OpenSSL 1.0.0 or later.
* This API only works as a stub to returns 0. This behavior is
* equivalent to the latest OpenSSL CRYPTO_THREADID_hash.
*/
unsigned long wolfSSL_THREADID_hash(const WOLFSSL_CRYPTO_THREADID* id)
{
(void)id;
return 0UL;
}
/* wolfSSL_CTX_set_ecdh_auto is provided as compatible API with
* SSL_CTX_set_ecdh_auto to enable auto ecdh curve selection functionality.
* Since this functionality is enabled by default in wolfSSL,
* this API exists as a stub.
*/
int wolfSSL_CTX_set_ecdh_auto(WOLFSSL_CTX* ctx, int onoff)
{
(void)ctx;
(void)onoff;
return WOLFSSL_SUCCESS;
}
#endif /* OPENSSL_EXTRA */
#endif /* !WOLFCRYPT_ONLY */

View File

@@ -40912,6 +40912,38 @@ static void test_export_keying_material(void)
}
#endif /* HAVE_KEYING_MATERIAL */
static int test_wolfSSL_THREADID_hash(void)
{
int ret = 0;
WOLFSSL_CRYPTO_THREADID id;
unsigned long res;
#if defined(OPENSSL_EXTRA)
printf(testingFmt, "wolfSSL_THREADID_hash");
res = wolfSSL_THREADID_hash(NULL);
AssertTrue( res == 0UL);
res = wolfSSL_THREADID_hash(&id);
AssertTrue( res == 0UL);
printf(resultFmt, passed);
#endif /* OPENSSL_EXTRA */
(void)id;
(void)res;
return ret;
}
static int test_wolfSSL_CTX_set_ecdh_auto(void)
{
int ret = 0;
WOLFSSL_CTX* ctx = NULL;
#if defined(OPENSSL_EXTRA)
printf(testingFmt, "wolfSSL_CTX_set_ecdh_auto");
AssertIntEQ( wolfSSL_CTX_set_ecdh_auto(NULL,0),1);
AssertIntEQ( wolfSSL_CTX_set_ecdh_auto(NULL,1),1);
AssertIntEQ( wolfSSL_CTX_set_ecdh_auto(ctx,0),1);
AssertIntEQ( wolfSSL_CTX_set_ecdh_auto(ctx,1),1);
printf(resultFmt, passed);
#endif /* OPENSSL_EXTRA */
(void)ctx;
return ret;
}
static void test_wolfSSL_CTX_get_min_proto_version(void)
{
#if defined(OPENSSL_EXTRA) || defined(OPENSSL_ALL)
@@ -41162,6 +41194,8 @@ void ApiTest(void)
test_wolfSSL_CTX_add_client_CA();
test_wolfSSL_CTX_set_srp_username();
test_wolfSSL_CTX_set_srp_password();
test_wolfSSL_CTX_set_ecdh_auto();
test_wolfSSL_THREADID_hash();
test_wolfSSL_RAND_bytes();
test_wolfSSL_pseudo_rand();
test_wolfSSL_PKCS8_Compat();

View File

@@ -50,7 +50,13 @@ WOLFSSL_API void *wolfSSL_OPENSSL_malloc(size_t a);
WOLFSSL_API int wolfSSL_OPENSSL_init_crypto(word64 opts, const OPENSSL_INIT_SETTINGS *settings);
#endif
#define CRYPTO_THREADID void
typedef struct WOLFSSL_CRYPTO_THREADID {
int dummy;
}WOLFSSL_CRYPTO_THREADID;
typedef struct crypto_threadid_st CRYPTO_THREADID;
#define crypto_threadid_st WOLFSSL_CRYPTO_THREADID
#define CRYPTO_THREADID WOLFSSL_CRYPTO_THREADID
#define SSLeay_version wolfSSLeay_version
#define SSLeay wolfSSLeay
@@ -88,6 +94,8 @@ typedef void (CRYPTO_free_func)(void*parent, void*ptr, CRYPTO_EX_DATA *ad, int i
long argl, void* argp);
#define CRYPTO_THREADID_set_callback wolfSSL_THREADID_set_callback
#define CRYPTO_THREADID_set_numeric wolfSSL_THREADID_set_numeric
#define CRYPTO_THREADID_current wolfSSL_THREADID_current
#define CRYPTO_THREADID_hash wolfSSL_THREADID_hash
#define CRYPTO_r_lock wc_LockMutex_ex
#define CRYPTO_unlock wc_LockMutex_ex

View File

@@ -191,6 +191,7 @@ typedef STACK_OF(ACCESS_DESCRIPTION) AUTHORITY_INFO_ACCESS;
#define i2d_PKCS8PrivateKey_bio wolfSSL_PEM_write_bio_PKCS8PrivateKey
#define PKCS8_PRIV_KEY_INFO_free wolfSSL_EVP_PKEY_free
#define d2i_PKCS12_fp wolfSSL_d2i_PKCS12_fp
#define SSL_CTX_set_ecdh_auto wolfSSL_CTX_set_ecdh_auto
#define i2d_PUBKEY wolfSSL_i2d_PUBKEY
#define d2i_PUBKEY wolfSSL_d2i_PUBKEY
@@ -1280,7 +1281,6 @@ wolfSSL_X509_STORE_set_verify_cb((WOLFSSL_X509_STORE *)(s), (WOLFSSL_X509_STORE_
#define OPENSSL_cleanse wolfSSL_OPENSSL_cleanse
#define SSL_CTX_get_timeout wolfSSL_SSL_CTX_get_timeout
#define SSL_CTX_set_tmp_ecdh wolfSSL_SSL_CTX_set_tmp_ecdh
#define SSL_CTX_set_ecdh_auto(...)
#define SSL_CTX_remove_session wolfSSL_SSL_CTX_remove_session
#define SSL_get_rbio wolfSSL_SSL_get_rbio
#define SSL_get_wbio wolfSSL_SSL_get_wbio

View File

@@ -882,6 +882,7 @@ WOLFSSL_API WOLFSSL_CTX* wolfSSL_CTX_new_ex(WOLFSSL_METHOD* method, void* heap);
WOLFSSL_ABI WOLFSSL_API WOLFSSL_CTX* wolfSSL_CTX_new(WOLFSSL_METHOD*);
#ifdef OPENSSL_EXTRA
WOLFSSL_API int wolfSSL_CTX_up_ref(WOLFSSL_CTX*);
WOLFSSL_API int wolfSSL_CTX_set_ecdh_auto(WOLFSSL_CTX* ctx, int onoff);
#endif
WOLFSSL_ABI WOLFSSL_API WOLFSSL* wolfSSL_new(WOLFSSL_CTX*);
WOLFSSL_API WOLFSSL_CTX* wolfSSL_get_SSL_CTX(WOLFSSL* ssl);
@@ -3890,6 +3891,9 @@ WOLFSSL_API void wolfSSL_print_all_errors_fp(XFILE fp);
WOLFSSL_API void wolfSSL_THREADID_set_callback(void (*threadid_func)(void*));
WOLFSSL_API void wolfSSL_THREADID_set_numeric(void* id, unsigned long val);
WOLFSSL_API void wolfSSL_THREADID_current(WOLFSSL_CRYPTO_THREADID* id);
WOLFSSL_API unsigned long wolfSSL_THREADID_hash(
const WOLFSSL_CRYPTO_THREADID* id);
WOLFSSL_API WOLF_STACK_OF(WOLFSSL_X509)* wolfSSL_X509_STORE_get1_certs(
WOLFSSL_X509_STORE_CTX*, WOLFSSL_X509_NAME*);
@@ -4179,6 +4183,8 @@ WOLFSSL_API int wolfSSL_set_ephemeral_key(WOLFSSL* ssl, int keyAlgo,
const char* key, unsigned int keySz, int format);
#endif
#ifdef __cplusplus
} /* extern "C" */
#endif