mirror of https://github.com/wolfSSL/wolfssl.git
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.
parent
9a0d3ba369
commit
e6547c75cd
|
@ -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
185
src/ssl.c
|
@ -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;
|
||||
|
|
|
@ -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)
|
||||
|
|
|
@ -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
|
||||
|
|
|
@ -25,6 +25,7 @@
|
|||
#define WOLFSSL_ECDSA_H_
|
||||
|
||||
#include <wolfssl/openssl/bn.h>
|
||||
#include <wolfssl/openssl/ec.h>
|
||||
|
||||
|
||||
#ifdef __cplusplus
|
||||
|
|
|
@ -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*);
|
||||
|
||||
|
|
|
@ -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);
|
||||
|
|
|
@ -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);
|
||||
|
|
|
@ -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
|
||||
|
|
Loading…
Reference in New Issue