Reimplement external data as it was before: a fixed size vector. This makes external data implementation easier as it doesn't require allocation or cleanup. Only zeroing the entire structure that it is in (which happens in all structures anyway) and then calling the appropriate getter and setter functions to manipulate external data.

pull/2733/head
Juliusz Sosinowicz 2020-01-14 17:06:04 +01:00
parent 9a0d3ba369
commit e6547c75cd
9 changed files with 110 additions and 191 deletions

View File

@ -9553,7 +9553,10 @@ int DoVerifyCallback(WOLFSSL_CERT_MANAGER* cm, WOLFSSL* ssl, int ret,
store->certs = args->certs;
store->totalCerts = args->totalCerts;
#if defined(HAVE_EX_DATA) || defined(FORTRESS)
store->ex_data[0] = ssl;
if (wolfSSL_CRYPTO_set_ex_data(&store->ex_data, 0, ssl)
!= WOLFSSL_SUCCESS) {
WOLFSSL_MSG("Failed to store ssl context in WOLFSSL_X509_STORE_CTX");
}
#endif
if (ssl != NULL) {

185
src/ssl.c
View File

@ -23129,8 +23129,7 @@ int wolfSSL_BIO_set_ex_data(WOLFSSL_BIO *bio, int idx, void *data)
WOLFSSL_ENTER("wolfSSL_BIO_set_ex_data");
#ifdef HAVE_EX_DATA
if (bio != NULL && idx < MAX_EX_DATA) {
bio->ex_data[idx] = data;
return WOLFSSL_SUCCESS;
return wolfSSL_CRYPTO_set_ex_data(&bio->ex_data, idx, data);
}
#else
(void)bio;
@ -23152,7 +23151,7 @@ void *wolfSSL_BIO_get_ex_data(WOLFSSL_BIO *bio, int idx)
WOLFSSL_ENTER("wolfSSL_BIO_get_ex_data");
#ifdef HAVE_EX_DATA
if (bio != NULL && idx < MAX_EX_DATA && idx >= 0) {
return bio->ex_data[idx];
return wolfSSL_CRYPTO_get_ex_data(&bio->ex_data, idx);
}
#else
(void)bio;
@ -24223,15 +24222,6 @@ WOLFSSL_X509_STORE* wolfSSL_X509_STORE_new(void)
goto err_exit;
#endif
#if defined(WOLFSSL_QT) || defined(OPENSSL_ALL)
sk = wolfSSL_sk_new_null();
if (sk == NULL) {
WOLFSSL_MSG("WOLFSSL_STACK memory error");
goto err_exit;
}
store->ex_data.data = sk;
#endif
#ifdef OPENSSL_EXTRA
if ((store->param = (WOLFSSL_X509_VERIFY_PARAM*)XMALLOC(
sizeof(WOLFSSL_X509_VERIFY_PARAM),
@ -24264,10 +24254,6 @@ void wolfSSL_X509_STORE_free(WOLFSSL_X509_STORE* store)
#ifdef OPENSSL_EXTRA
if (store->param != NULL)
XFREE(store->param, NULL, DYNAMIC_TYPE_OPENSSL);
#endif
#if defined(WOLFSSL_QT) || defined(OPENSSL_ALL)
if (store->ex_data.data != NULL)
wolfSSL_sk_GENERIC_free(store->ex_data.data);
#endif
XFREE(store, NULL, DYNAMIC_TYPE_X509_STORE);
}
@ -24366,7 +24352,7 @@ int wolfSSL_X509_STORE_CTX_init(WOLFSSL_X509_STORE_CTX* ctx,
ctx->sesChain = NULL;
ctx->domain = NULL;
#if defined(HAVE_EX_DATA) || defined(FORTRESS)
XMEMSET(ctx->ex_data, 0, MAX_EX_DATA * sizeof(void*));
XMEMSET(&ctx->ex_data, 0, sizeof(ctx->ex_data));
#endif
ctx->userCtx = NULL;
ctx->error = 0;
@ -25494,7 +25480,7 @@ void* wolfSSL_X509_STORE_CTX_get_ex_data(WOLFSSL_X509_STORE_CTX* ctx, int idx)
WOLFSSL_ENTER("wolfSSL_X509_STORE_CTX_get_ex_data");
#if defined(HAVE_EX_DATA) || defined(FORTRESS)
if (ctx != NULL) {
return wolfSSL_CRYPTO_get_ex_data(ctx->ex_data, idx);
return wolfSSL_CRYPTO_get_ex_data(&ctx->ex_data, idx);
}
#else
(void)ctx;
@ -25513,7 +25499,7 @@ int wolfSSL_X509_STORE_CTX_set_ex_data(WOLFSSL_X509_STORE_CTX* ctx, int idx,
#if defined(HAVE_EX_DATA) || defined(FORTRESS)
if (ctx != NULL)
{
return wolfSSL_CRYPTO_set_ex_data(ctx->ex_data, idx, data);
return wolfSSL_CRYPTO_set_ex_data(&ctx->ex_data, idx, data);
}
#else
(void)ctx;
@ -29594,7 +29580,7 @@ static int SetDhInternal(WOLFSSL_DH* dh)
return ret;
}
#if !defined(NO_DH) && (defined(WOLFSSL_QT) || defined(OPENSSL_ALL))
#if !defined(NO_DH) && (defined(WOLFSSL_QT) || defined(OPENSSL_ALL) || defined(WOLFSSL_OPENSSH))
/* Set the members of DhKey into WOLFSSL_DH
* DhKey was populated from wc_DhKeyDecode
*/
@ -32711,15 +32697,6 @@ int wolfSSL_PEM_write_bio_RSAPrivateKey(WOLFSSL_BIO* bio, WOLFSSL_RSA* key,
return WOLFSSL_FAILURE;
}
/* Key to DER */
derSz = wc_RsaKeyToDer((RsaKey*)key->internal, derBuf, derMax);
if (derSz < 0) {
WOLFSSL_MSG("wc_RsaKeyToDer failed");
XFREE(derBuf, bio->heap, DYNAMIC_TYPE_TMP_BUFFER);
wolfSSL_EVP_PKEY_free(pkey);
return SSL_FAILURE;
}
pkey->pkey.ptr = (char*)XMALLOC(derSz, bio->heap,
DYNAMIC_TYPE_TMP_BUFFER);
if (pkey->pkey.ptr == NULL) {
@ -36765,8 +36742,8 @@ void* wolfSSL_RSA_get_ex_data(const WOLFSSL_RSA *rsa, int idx)
{
WOLFSSL_ENTER("wolfSSL_RSA_get_ex_data");
#ifdef HAVE_EX_DATA
if(rsa) {
return wolfSSL_CRYPTO_get_ex_data(rsa->ex_data, idx);
if (rsa) {
return wolfSSL_CRYPTO_get_ex_data(&rsa->ex_data, idx);
}
#else
(void)rsa;
@ -36779,8 +36756,8 @@ int wolfSSL_RSA_set_ex_data(WOLFSSL_RSA *rsa, int idx, void *data)
{
WOLFSSL_ENTER("wolfSSL_RSA_set_ex_data");
#ifdef HAVE_EX_DATA
if(rsa) {
return wolfSSL_CRYPTO_set_ex_data(rsa->ex_data, idx, data);
if (rsa) {
return wolfSSL_CRYPTO_set_ex_data(&rsa->ex_data, idx, data);
}
#else
(void)rsa;
@ -36942,7 +36919,7 @@ int wolfSSL_EC_KEY_LoadDer_ex(WOLFSSL_EC_KEY* key, const unsigned char* derBuf,
}
#endif /* HAVE_ECC */
#if !defined(NO_DH) && (defined(WOLFSSL_QT) || defined(OPENSSL_ALL))
#if !defined(NO_DH) && (defined(WOLFSSL_QT) || defined(OPENSSL_ALL) || defined(WOLFSSL_OPENSSH))
/* return WOLFSSL_SUCCESS if success, WOLFSSL_FATAL_ERROR if error */
int wolfSSL_DH_LoadDer(WOLFSSL_DH* dh, const unsigned char* derBuf, int derSz)
{
@ -40941,12 +40918,13 @@ int wolfSSL_CTX_use_PrivateKey(WOLFSSL_CTX *ctx, WOLFSSL_EVP_PKEY *pkey)
#endif /* !NO_CERTS */
#if defined(HAVE_EX_DATA) || defined(FORTRESS)
void* wolfSSL_CTX_get_ex_data(const WOLFSSL_CTX* ctx, int idx)
{
WOLFSSL_ENTER("wolfSSL_CTX_get_ex_data");
#ifdef HAVE_EX_DATA
if(ctx != NULL) {
return wolfSSL_CRYPTO_get_ex_data(ctx->ex_data, idx);
return wolfSSL_CRYPTO_get_ex_data(&ctx->ex_data, idx);
}
#else
(void)ctx;
@ -40970,36 +40948,6 @@ int wolfSSL_CTX_get_ex_new_index(long idx, void* arg, void* a, void* b,
return ctx_idx++;
}
void* wolfSSL_CRYPTO_get_ex_data(void * const* ex_data, int idx)
{
WOLFSSL_ENTER("wolfSSL_CTX_get_ex_data");
#ifdef MAX_EX_DATA
if(ex_data && idx < MAX_EX_DATA && idx >= 0) {
return ex_data[idx];
}
#else
(void)ex_data;
(void)idx;
#endif
return NULL;
}
int wolfSSL_CRYPTO_set_ex_data(void** ex_data, int idx, void *data)
{
WOLFSSL_ENTER("wolfSSL_CRYPTO_set_ex_data");
#ifdef MAX_EX_DATA
if (ex_data && idx < MAX_EX_DATA && idx >= 0) {
ex_data[idx] = data;
return WOLFSSL_SUCCESS;
}
#else
(void)ex_data;
(void)idx;
(void)data;
#endif
return WOLFSSL_FAILURE;
}
/* Return the index that can be used for the WOLFSSL structure to store
* application data.
*
@ -41028,7 +40976,7 @@ int wolfSSL_CTX_set_ex_data(WOLFSSL_CTX* ctx, int idx, void* data)
#ifdef HAVE_EX_DATA
if (ctx != NULL)
{
return wolfSSL_CRYPTO_set_ex_data(ctx->ex_data, idx, data);
return wolfSSL_CRYPTO_set_ex_data(&ctx->ex_data, idx, data);
}
#else
(void)ctx;
@ -41037,6 +40985,7 @@ int wolfSSL_CTX_set_ex_data(WOLFSSL_CTX* ctx, int idx, void* data)
#endif
return WOLFSSL_FAILURE;
}
#endif
/* Returns char* to app data stored in ex[0].
@ -41072,7 +41021,7 @@ int wolfSSL_set_ex_data(WOLFSSL* ssl, int idx, void* data)
#if defined(HAVE_EX_DATA) || defined(FORTRESS)
if (ssl != NULL)
{
return wolfSSL_CRYPTO_set_ex_data(ssl->ex_data, idx, data);
return wolfSSL_CRYPTO_set_ex_data(&ssl->ex_data, idx, data);
}
#else
WOLFSSL_MSG("HAVE_EX_DATA macro is not defined");
@ -41090,7 +41039,7 @@ void* wolfSSL_get_ex_data(const WOLFSSL* ssl, int idx)
WOLFSSL_ENTER("wolfSSL_get_ex_data");
#if defined(HAVE_EX_DATA) || defined(FORTRESS)
if (ssl != NULL) {
return wolfSSL_CRYPTO_get_ex_data(ssl->ex_data, idx);
return wolfSSL_CRYPTO_get_ex_data(&ssl->ex_data, idx);
}
#else
WOLFSSL_MSG("HAVE_EX_DATA macro is not defined");
@ -41464,7 +41413,7 @@ end:
}
#ifndef NO_FILESYSTEM
#if defined(WOLFSSL_QT) || defined(OPENSSL_ALL)
#if defined(WOLFSSL_QT) || defined(OPENSSL_ALL) || defined(WOLFSSL_OPENSSH)
/* Convert DH key parameters to DER format, write to output (outSz)
* If output is NULL then max expected size is set to outSz and LENGTH_ONLY_E is
* returned.
@ -42607,7 +42556,7 @@ int wolfSSL_SESSION_set_ex_data(WOLFSSL_SESSION* session, int idx, void* data)
WOLFSSL_ENTER("wolfSSL_SESSION_set_ex_data");
#ifdef HAVE_EX_DATA
if(session != NULL) {
return wolfSSL_CRYPTO_set_ex_data(session->ex_data, idx, data);
return wolfSSL_CRYPTO_set_ex_data(&session->ex_data, idx, data);
}
#else
(void)session;
@ -42641,7 +42590,7 @@ void* wolfSSL_SESSION_get_ex_data(const WOLFSSL_SESSION* session, int idx)
WOLFSSL_ENTER("wolfSSL_SESSION_get_ex_data");
#ifdef HAVE_EX_DATA
if (session != NULL) {
return wolfSSL_CRYPTO_get_ex_data(session->ex_data, idx);
return wolfSSL_CRYPTO_get_ex_data(&session->ex_data, idx);
}
#else
(void)session;
@ -44343,80 +44292,44 @@ int wolfSSL_X509_get_ex_new_index(int idx, void *arg, void *a, void *b, void *c)
return x509_idx++;
}
#if defined(WOLFSSL_QT) || defined(OPENSSL_ALL)
int wolfSSL_CRYPTO_set_ex_data(WOLFSSL_CRYPTO_EX_DATA* r, int idx, void* arg)
#if defined(HAVE_EX_DATA) || defined(FORTRESS)
void* wolfSSL_CRYPTO_get_ex_data(const WOLFSSL_CRYPTO_EX_DATA* ex_data, int idx)
{
WOLFSSL_ENTER("wolfSSL_CTX_get_ex_data");
#ifdef MAX_EX_DATA
if(ex_data && idx < MAX_EX_DATA && idx >= 0) {
return ex_data->ex_data[idx];
}
#else
(void)ex_data;
(void)idx;
#endif
return NULL;
}
int wolfSSL_CRYPTO_set_ex_data(WOLFSSL_CRYPTO_EX_DATA* ex_data, int idx, void *data)
{
WOLFSSL_STACK* sk;
WOLFSSL_ENTER("wolfSSL_CRYPTO_set_ex_data");
if (r == NULL || arg == NULL) {
WOLFSSL_MSG("Invalid Input: WOLFSSL_CRYPTO_EX_DATA");
return WOLFSSL_FAILURE;
#ifdef MAX_EX_DATA
if (ex_data && idx < MAX_EX_DATA && idx >= 0) {
ex_data->ex_data[idx] = data;
return WOLFSSL_SUCCESS;
}
sk = r->data;
if (sk == NULL || sk->num < (unsigned long)idx) {
WOLFSSL_MSG("Invalid Input: Stack");
return WOLFSSL_FAILURE;
}
/* Go to node at idx */
for (; sk != NULL && idx > 0; idx--)
sk = sk->next;
/* if node is tail of stack */
if (sk == NULL) {
WOLFSSL_MSG("idx exceeds stack size.");
return WOLFSSL_FAILURE;
}
/* Free any data */
if (sk->data.generic != NULL)
XFREE(sk->data.generic, NULL, DYNAMIC_TYPE_OPENSSL);
sk->data.generic = arg;
return WOLFSSL_SUCCESS;
#else
(void)ex_data;
(void)idx;
(void)data;
#endif
return WOLFSSL_FAILURE;
}
void* wolfSSL_CRYPTO_get_ex_data(const WOLFSSL_CRYPTO_EX_DATA* r, int idx)
{
void* ex_data;
WOLFSSL_STACK* sk;
WOLFSSL_ENTER("wolfSSL_CRYPTO_get_ex_data");
if (r == NULL) {
WOLFSSL_MSG("Invalid Input: WOLFSSL_CRYPTO_EX_DATA");
return NULL;
}
sk = r->data;
if (sk == NULL || sk->num < (unsigned long)idx) {
WOLFSSL_MSG("Invalid Input: Stack");
return NULL;
}
/* Go to node at idx */
for (; sk != NULL && idx > 0; idx--)
sk = sk->next;
/* if node is tail of stack */
if (sk == NULL) {
WOLFSSL_MSG("idx exceeds stack size.");
return NULL;
}
ex_data = sk->data.generic;
if (ex_data == NULL) {
WOLFSSL_MSG("Error getting ex_data");
}
return ex_data;
}
#endif /* WOLFSSL_QT || OPENSSL_ALL */
#endif /* defined(HAVE_EX_DATA) || defined(FORTRESS) */
void *wolfSSL_X509_get_ex_data(X509 *x509, int idx)
{
WOLFSSL_ENTER("wolfSSL_X509_get_ex_data");
#ifdef HAVE_EX_DATA
if (x509 != NULL) {
return wolfSSL_CRYPTO_get_ex_data(x509->ex_data, idx);
return wolfSSL_CRYPTO_get_ex_data(&x509->ex_data, idx);
}
#else
(void)x509;
@ -44431,7 +44344,7 @@ int wolfSSL_X509_set_ex_data(X509 *x509, int idx, void *data)
#ifdef HAVE_EX_DATA
if (x509 != NULL)
{
return wolfSSL_CRYPTO_set_ex_data(x509->ex_data, idx, data);
return wolfSSL_CRYPTO_set_ex_data(&x509->ex_data, idx, data);
}
#else
(void)x509;

View File

@ -10368,13 +10368,8 @@ int PemToDer(const unsigned char* buff, long longSz, int type,
/* keyFormat is Key_Sum enum */
if (keyFormat) {
#ifdef HAVE_ECC
*eccKey = (header == BEGIN_EC_PRIV
#ifdef OPENSSL_EXTRA
|| header == beginBuf
#endif
) ? 1 : 0;
#else
*eccKey = 0;
if (header == BEGIN_EC_PRIV)
*keyFormat = ECDSAk;
#endif
#if !defined(NO_DSA)
if (header == BEGIN_DSA_PRIV)

View File

@ -2740,7 +2740,7 @@ struct WOLFSSL_CTX {
void* userPRFArg; /* passed to prf callback */
#endif
#ifdef HAVE_EX_DATA
void* ex_data[MAX_EX_DATA];
WOLFSSL_CRYPTO_EX_DATA ex_data;
#endif
#if defined(HAVE_ALPN) && (defined(OPENSSL_ALL) || defined(WOLFSSL_NGINX) || defined(WOLFSSL_HAPROXY))
CallbackALPNSelect alpnSelect;
@ -3121,7 +3121,7 @@ struct WOLFSSL_SESSION {
byte isAlloced;
#endif
#ifdef HAVE_EX_DATA
void* ex_data[MAX_EX_DATA];
WOLFSSL_CRYPTO_EX_DATA ex_data;
#endif
};
@ -3597,7 +3597,7 @@ struct WOLFSSL_X509 {
#endif
#if defined(OPENSSL_EXTRA) || defined(OPENSSL_EXTRA_X509_SMALL)
#ifdef HAVE_EX_DATA
void* ex_data[MAX_EX_DATA];
WOLFSSL_CRYPTO_EX_DATA ex_data;
#endif
byte* authKeyId;
byte* subjKeyId;
@ -4007,7 +4007,7 @@ struct WOLFSSL {
#endif
byte keepCert; /* keep certificate after handshake */
#if defined(HAVE_EX_DATA) || defined(FORTRESS)
void* ex_data[MAX_EX_DATA]; /* external data, for Fortress */
WOLFSSL_CRYPTO_EX_DATA ex_data; /* external data, for Fortress */
#endif
int devId; /* async device id to use */
#ifdef HAVE_ONE_TIME_AUTH

View File

@ -25,6 +25,7 @@
#define WOLFSSL_ECDSA_H_
#include <wolfssl/openssl/bn.h>
#include <wolfssl/openssl/ec.h>
#ifdef __cplusplus

View File

@ -61,35 +61,6 @@ typedef struct WOLFSSL_RSA_METHOD {
typedef WOLFSSL_RSA_METHOD RSA_METHOD;
struct WOLFSSL_RSA {
#ifdef WC_RSA_BLINDING
WC_RNG* rng; /* for PrivateDecrypt blinding */
#endif
WOLFSSL_BIGNUM* n;
WOLFSSL_BIGNUM* e;
WOLFSSL_BIGNUM* d;
WOLFSSL_BIGNUM* p;
WOLFSSL_BIGNUM* q;
WOLFSSL_BIGNUM* dmp1; /* dP */
WOLFSSL_BIGNUM* dmq1; /* dQ */
WOLFSSL_BIGNUM* iqmp; /* u */
void* heap;
void* internal; /* our RSA */
char inSet; /* internal set from external ? */
char exSet; /* external set from internal ? */
char ownRng; /* flag for if the rng should be free'd */
#if defined(OPENSSL_EXTRA)
WOLFSSL_RSA_METHOD* meth;
#endif
#if defined(HAVE_EX_DATA)
void* ex_data[MAX_EX_DATA]; /* external data */
#endif
#if defined(OPENSSL_EXTRA) || defined(OPENSSL_ALL)
wolfSSL_Mutex refMutex; /* ref count mutex */
int refCount; /* reference count */
#endif
};
WOLFSSL_API WOLFSSL_RSA* wolfSSL_RSA_new(void);
WOLFSSL_API void wolfSSL_RSA_free(WOLFSSL_RSA*);

View File

@ -69,7 +69,6 @@
#include <openssl/err.h>
#include <openssl/ec.h>
#include <openssl/hmac.h>
#include <openssl/bn.h>
#endif
/* make sure old names are disabled */
@ -81,7 +80,6 @@
#endif
#elif (defined(OPENSSL_EXTRA) || defined(OPENSSL_EXTRA_X509_SMALL))
#include <wolfssl/openssl/bn.h>
#include <wolfssl/openssl/hmac.h>
/* We need the old SSL names */
@ -92,6 +90,8 @@
#undef NO_OLD_WC_NAMES
#endif
#endif
/* Needed for WOLFSSL_RSA struct */
#include <wolfssl/openssl/bn.h>
#ifdef __cplusplus
extern "C" {
@ -455,6 +455,12 @@ struct WOLFSSL_BIO_METHOD {
typedef long (*wolf_bio_info_cb)(WOLFSSL_BIO *bio, int event, const char *parg,
int iarg, long larg, long return_value);
#if defined(HAVE_EX_DATA) || defined(FORTRESS)
typedef struct WOLFSSL_CRYPTO_EX_DATA {
void* ex_data[MAX_EX_DATA];
} WOLFSSL_CRYPTO_EX_DATA;
#endif
struct WOLFSSL_BIO {
WOLFSSL_BUF_MEM* mem_buf;
WOLFSSL_BIO_METHOD* method;
@ -477,13 +483,38 @@ struct WOLFSSL_BIO {
byte init:1; /* bio has been initialized */
byte shutdown:1; /* close flag */
#ifdef HAVE_EX_DATA
void* ex_data[MAX_EX_DATA];
WOLFSSL_CRYPTO_EX_DATA ex_data;
#endif
};
typedef struct WOLFSSL_CRYPTO_EX_DATA {
WOLFSSL_STACK* data;
} WOLFSSL_CRYPTO_EX_DATA;
struct WOLFSSL_RSA {
#ifdef WC_RSA_BLINDING
WC_RNG* rng; /* for PrivateDecrypt blinding */
#endif
WOLFSSL_BIGNUM* n;
WOLFSSL_BIGNUM* e;
WOLFSSL_BIGNUM* d;
WOLFSSL_BIGNUM* p;
WOLFSSL_BIGNUM* q;
WOLFSSL_BIGNUM* dmp1; /* dP */
WOLFSSL_BIGNUM* dmq1; /* dQ */
WOLFSSL_BIGNUM* iqmp; /* u */
void* heap;
void* internal; /* our RSA */
char inSet; /* internal set from external ? */
char exSet; /* external set from internal ? */
char ownRng; /* flag for if the rng should be free'd */
#if defined(OPENSSL_EXTRA)
WOLFSSL_RSA_METHOD* meth;
#endif
#if defined(HAVE_EX_DATA)
WOLFSSL_CRYPTO_EX_DATA ex_data; /* external data */
#endif
#if defined(OPENSSL_EXTRA) || defined(OPENSSL_ALL)
wolfSSL_Mutex refMutex; /* ref count mutex */
int refCount; /* reference count */
#endif
};
typedef struct WOLFSSL_COMP_METHOD {
int type; /* stunnel dereference */
@ -513,6 +544,8 @@ struct WOLFSSL_X509_STORE {
#endif
#if defined(OPENSSL_ALL) || defined(WOLFSSL_QT)
WOLFSSL_X509_STORE_CTX_verify_cb verify_cb;
#endif
#ifdef HAVE_EX_DATA
WOLFSSL_CRYPTO_EX_DATA ex_data;
#endif
#if defined(OPENSSL_EXTRA) && defined(HAVE_CRL)
@ -578,7 +611,7 @@ struct WOLFSSL_X509_STORE_CTX {
#endif
char* domain; /* subject CN domain name */
#if defined(HAVE_EX_DATA) || defined(FORTRESS)
void* ex_data[MAX_EX_DATA]; /* external data */
WOLFSSL_CRYPTO_EX_DATA ex_data; /* external data */
#endif
#if defined(WOLFSSL_APACHE_HTTPD) || defined(OPENSSL_EXTRA)
int depth; /* used in X509_STORE_CTX_*_depth */
@ -930,9 +963,9 @@ WOLFSSL_API
#endif /* SESSION_INDEX && SESSION_CERTS */
typedef int (*VerifyCallback)(int, WOLFSSL_X509_STORE_CTX*);
#ifdef OPENSSL_EXTRA
typedef void (CallbackInfoState)(const WOLFSSL*, int, int);
#if defined(HAVE_EX_DATA) || defined(FORTRESS)
typedef int (WOLFSSL_CRYPTO_EX_new)(void* p, void* ptr,
WOLFSSL_CRYPTO_EX_DATA* a, int idx, long argValue, void* arg);
typedef int (WOLFSSL_CRYPTO_EX_dup)(WOLFSSL_CRYPTO_EX_DATA* out,
@ -943,8 +976,6 @@ typedef void (WOLFSSL_CRYPTO_EX_free)(void* p, void* ptr,
WOLFSSL_API int wolfSSL_get_ex_new_index(long argValue, void* arg,
WOLFSSL_CRYPTO_EX_new* a, WOLFSSL_CRYPTO_EX_dup* b,
WOLFSSL_CRYPTO_EX_free* c);
WOLFSSL_API int wolfSSL_CRYPTO_set_ex_data(WOLFSSL_CRYPTO_EX_DATA* r, int idx, void* arg);
WOLFSSL_API void* wolfSSL_CRYPTO_get_ex_data(const WOLFSSL_CRYPTO_EX_DATA* r, int idx);
#endif
WOLFSSL_API void wolfSSL_CTX_set_verify(WOLFSSL_CTX*, int,
@ -2019,8 +2050,12 @@ WOLFSSL_API WOLFSSL_ASN1_TIME *wolfSSL_ASN1_TIME_set(WOLFSSL_ASN1_TIME *s, time_
WOLFSSL_API int wolfSSL_sk_num(WOLFSSL_STACK* sk);
WOLFSSL_API void* wolfSSL_sk_value(WOLFSSL_STACK* sk, int i);
WOLFSSL_API void* wolfSSL_CRYPTO_get_ex_data(void * const* ex_data, int idx);
WOLFSSL_API int wolfSSL_CRYPTO_set_ex_data(void** ex_data, int idx, void *data);
#if defined(HAVE_EX_DATA) || defined(FORTRESS)
WOLFSSL_API void* wolfSSL_CRYPTO_get_ex_data(const WOLFSSL_CRYPTO_EX_DATA* ex_data,
int idx);
WOLFSSL_API int wolfSSL_CRYPTO_set_ex_data(WOLFSSL_CRYPTO_EX_DATA* ex_data, int idx,
void *data);
#endif
/* stunnel 4.28 needs */
WOLFSSL_API void* wolfSSL_CTX_get_ex_data(const WOLFSSL_CTX*, int);

View File

@ -1144,7 +1144,8 @@ WOLFSSL_LOCAL int GetASNTag(const byte* input, word32* idx, byte* tag,
WOLFSSL_LOCAL word32 SetLength(word32 length, byte* output);
WOLFSSL_LOCAL word32 SetSequence(word32 len, byte* output);
WOLFSSL_LOCAL word32 SetOctetString(word32 len, byte* output);
#if (defined(WOLFSSL_QT) || defined(OPENSSL_ALL)) && !defined(NO_DH)
#if (defined(WOLFSSL_QT) || defined(OPENSSL_ALL)) && !defined(NO_DH) \
|| defined(WOLFSSL_OPENSSH)
WOLFSSL_LOCAL int wc_DhParamsToDer(DhKey* key, byte* out, word32* outSz);
WOLFSSL_LOCAL int wc_DhPubKeyToDer(DhKey* key, byte* out, word32* outSz);
WOLFSSL_LOCAL int wc_DhPrivKeyToDer(DhKey* key, byte* out, word32* outSz);

View File

@ -59,7 +59,7 @@ typedef struct DhParams {
/* Diffie-Hellman Key */
struct DhKey {
mp_int p, g, q; /* group parameters */
#if defined(WOLFSSL_QT) || defined(OPENSSL_ALL)
#if defined(WOLFSSL_QT) || defined(OPENSSL_ALL) || defined(WOLFSSL_OPENSSH)
mp_int pub;
mp_int priv;
#endif