forked from wolfSSL/wolfssl
Add wolfSSL_CRYPTO_get_ex_new_index
This commit is contained in:
72
src/ssl.c
72
src/ssl.c
@ -44947,6 +44947,69 @@ int wolfSSL_CTX_use_PrivateKey(WOLFSSL_CTX *ctx, WOLFSSL_EVP_PKEY *pkey)
|
||||
#endif /* !NO_CERTS */
|
||||
|
||||
#endif /* OPENSSL_EXTRA */
|
||||
#if defined(HAVE_EX_DATA) || defined(FORTRESS)
|
||||
static int get_ex_new_index(int class_index)
|
||||
{
|
||||
/* index counter for each class index*/
|
||||
static int ctx_idx = 0;
|
||||
static int ssl_idx = 0;
|
||||
static int x509_idx = 0;
|
||||
|
||||
int index = -1;
|
||||
|
||||
switch(class_index) {
|
||||
case CRYPTO_EX_INDEX_SSL:
|
||||
index = ssl_idx++;
|
||||
break;
|
||||
case CRYPTO_EX_INDEX_SSL_CTX:
|
||||
index = ctx_idx++;
|
||||
break;
|
||||
case CRYPTO_EX_INDEX_X509:
|
||||
index = x509_idx++;
|
||||
break;
|
||||
|
||||
/* following class indexes are not supoprted */
|
||||
case CRYPTO_EX_INDEX_SSL_SESSION:
|
||||
case CRYPTO_EX_INDEX_X509_STORE:
|
||||
case CRYPTO_EX_INDEX_X509_STORE_CTX:
|
||||
case CRYPTO_EX_INDEX_DH:
|
||||
case CRYPTO_EX_INDEX_DSA:
|
||||
case CRYPTO_EX_INDEX_EC_KEY:
|
||||
case CRYPTO_EX_INDEX_RSA:
|
||||
case CRYPTO_EX_INDEX_ENGINE:
|
||||
case CRYPTO_EX_INDEX_UI:
|
||||
case CRYPTO_EX_INDEX_BIO:
|
||||
case CRYPTO_EX_INDEX_APP:
|
||||
case CRYPTO_EX_INDEX_UI_METHOD:
|
||||
case CRYPTO_EX_INDEX_DRBG:
|
||||
default:
|
||||
break;
|
||||
}
|
||||
return index;
|
||||
}
|
||||
/* wolfSSL_CRYPTO_get_ex_new_index issues unique index for the class
|
||||
* specified by class_index. Other parameter except class_index are
|
||||
* ignored. Currentry, following class_index are accepted:
|
||||
* - CRYPTO_EX_INDEX_SSL
|
||||
* - CRYPTO_EX_INDEX_SSL_CTX
|
||||
* - CRYPTO_EX_INDEX_X509
|
||||
* Returns index value grater or equal to zero on success, -1 on failure.
|
||||
*/
|
||||
WOLFSSL_API int wolfSSL_CRYPTO_get_ex_new_index(int class_index,
|
||||
long argl, void* argp,
|
||||
WOLFSSL_CRYPTO_EX_new* new_func,
|
||||
WOLFSSL_CRYPTO_EX_dup* dup_func,
|
||||
WOLFSSL_CRYPTO_EX_free* free_func)
|
||||
{
|
||||
(void)argl;
|
||||
(void)argp;
|
||||
(void)new_func;
|
||||
(void)dup_func;
|
||||
(void)free_func;
|
||||
|
||||
return get_ex_new_index(class_index);
|
||||
}
|
||||
#endif /* HAVE_EX_DATA || FORTRESS */
|
||||
|
||||
#if defined(HAVE_EX_DATA) || defined(FORTRESS) || defined(WOLFSSL_WPAS_SMALL)
|
||||
void* wolfSSL_CTX_get_ex_data(const WOLFSSL_CTX* ctx, int idx)
|
||||
@ -44966,7 +45029,6 @@ void* wolfSSL_CTX_get_ex_data(const WOLFSSL_CTX* ctx, int idx)
|
||||
int wolfSSL_CTX_get_ex_new_index(long idx, void* arg, void* a, void* b,
|
||||
void* c)
|
||||
{
|
||||
static int ctx_idx = 0;
|
||||
|
||||
WOLFSSL_ENTER("wolfSSL_CTX_get_ex_new_index");
|
||||
(void)idx;
|
||||
@ -44975,7 +45037,7 @@ int wolfSSL_CTX_get_ex_new_index(long idx, void* arg, void* a, void* b,
|
||||
(void)b;
|
||||
(void)c;
|
||||
|
||||
return ctx_idx++;
|
||||
return get_ex_new_index(CRYPTO_EX_INDEX_SSL_CTX);
|
||||
}
|
||||
|
||||
/* Return the index that can be used for the WOLFSSL structure to store
|
||||
@ -44986,7 +45048,6 @@ int wolfSSL_get_ex_new_index(long argValue, void* arg,
|
||||
WOLFSSL_CRYPTO_EX_new* cb1, WOLFSSL_CRYPTO_EX_dup* cb2,
|
||||
WOLFSSL_CRYPTO_EX_free* cb3)
|
||||
{
|
||||
static int ssl_idx = 0;
|
||||
|
||||
WOLFSSL_ENTER("wolfSSL_get_ex_new_index");
|
||||
|
||||
@ -44996,7 +45057,7 @@ int wolfSSL_get_ex_new_index(long argValue, void* arg,
|
||||
(void)cb2;
|
||||
(void)cb3;
|
||||
|
||||
return ssl_idx++;
|
||||
return get_ex_new_index(CRYPTO_EX_INDEX_SSL);
|
||||
}
|
||||
|
||||
|
||||
@ -48960,7 +49021,6 @@ void wolfSSL_OPENSSL_config(char *config_name)
|
||||
|
||||
int wolfSSL_X509_get_ex_new_index(int idx, void *arg, void *a, void *b, void *c)
|
||||
{
|
||||
static int x509_idx = 0;
|
||||
|
||||
WOLFSSL_ENTER("wolfSSL_X509_get_ex_new_index");
|
||||
(void)idx;
|
||||
@ -48969,7 +49029,7 @@ int wolfSSL_X509_get_ex_new_index(int idx, void *arg, void *a, void *b, void *c)
|
||||
(void)b;
|
||||
(void)c;
|
||||
|
||||
return x509_idx++;
|
||||
return get_ex_new_index(CRYPTO_EX_INDEX_X509);
|
||||
}
|
||||
#endif
|
||||
|
||||
|
67
tests/api.c
67
tests/api.c
@ -37873,6 +37873,71 @@ static void test_wolfSSL_i2d_PrivateKey(void)
|
||||
#endif
|
||||
}
|
||||
|
||||
static void test_wolfSSL_CRYPTO_get_ex_new_index(void)
|
||||
{
|
||||
#if defined(HAVE_EX_DATA) || defined(FORTRESS)
|
||||
int idx1,idx2;
|
||||
|
||||
printf(testingFmt, "test_wolfSSL_CRYPTO_get_ex_new_index()");
|
||||
|
||||
/* test for unsupported flass index */
|
||||
AssertIntEQ(CRYPTO_get_ex_new_index(CRYPTO_EX_INDEX_SSL_SESSION,
|
||||
0,NULL, NULL, NULL, NULL ), -1);
|
||||
AssertIntEQ(CRYPTO_get_ex_new_index(CRYPTO_EX_INDEX_X509_STORE,
|
||||
0,NULL, NULL, NULL, NULL ), -1);
|
||||
AssertIntEQ(CRYPTO_get_ex_new_index(CRYPTO_EX_INDEX_X509_STORE_CTX,
|
||||
0,NULL, NULL, NULL, NULL ), -1);
|
||||
AssertIntEQ(CRYPTO_get_ex_new_index(CRYPTO_EX_INDEX_DH,
|
||||
0,NULL, NULL, NULL, NULL ), -1);
|
||||
AssertIntEQ(CRYPTO_get_ex_new_index(CRYPTO_EX_INDEX_DSA,
|
||||
0,NULL, NULL, NULL, NULL ), -1);
|
||||
AssertIntEQ(CRYPTO_get_ex_new_index(CRYPTO_EX_INDEX_EC_KEY,
|
||||
0,NULL, NULL, NULL, NULL ), -1);
|
||||
AssertIntEQ(CRYPTO_get_ex_new_index(CRYPTO_EX_INDEX_RSA,
|
||||
0,NULL, NULL, NULL, NULL ), -1);
|
||||
AssertIntEQ(CRYPTO_get_ex_new_index(CRYPTO_EX_INDEX_ENGINE,
|
||||
0,NULL, NULL, NULL, NULL ), -1);
|
||||
AssertIntEQ(CRYPTO_get_ex_new_index(CRYPTO_EX_INDEX_UI,
|
||||
0,NULL, NULL, NULL, NULL ), -1);
|
||||
AssertIntEQ(CRYPTO_get_ex_new_index(CRYPTO_EX_INDEX_BIO,
|
||||
0,NULL, NULL, NULL, NULL ), -1);
|
||||
AssertIntEQ(CRYPTO_get_ex_new_index(CRYPTO_EX_INDEX_APP,
|
||||
0,NULL, NULL, NULL, NULL ), -1);
|
||||
AssertIntEQ(CRYPTO_get_ex_new_index(CRYPTO_EX_INDEX_UI_METHOD,
|
||||
0,NULL, NULL, NULL, NULL ), -1);
|
||||
AssertIntEQ(CRYPTO_get_ex_new_index(CRYPTO_EX_INDEX_DRBG,
|
||||
0,NULL, NULL, NULL, NULL ), -1);
|
||||
AssertIntEQ(CRYPTO_get_ex_new_index(20, 0,NULL, NULL, NULL, NULL ), -1);
|
||||
|
||||
/* test for supported class index */
|
||||
idx1 = CRYPTO_get_ex_new_index(CRYPTO_EX_INDEX_SSL,
|
||||
0,NULL, NULL, NULL, NULL );
|
||||
idx2 = CRYPTO_get_ex_new_index(CRYPTO_EX_INDEX_SSL,
|
||||
0,NULL, NULL, NULL, NULL );
|
||||
AssertIntNE(idx1, -1);
|
||||
AssertIntNE(idx2, -1);
|
||||
AssertIntNE(idx1, idx2);
|
||||
|
||||
idx1 = CRYPTO_get_ex_new_index(CRYPTO_EX_INDEX_SSL_CTX,
|
||||
0,NULL, NULL, NULL, NULL );
|
||||
idx2 = CRYPTO_get_ex_new_index(CRYPTO_EX_INDEX_SSL_CTX,
|
||||
0,NULL, NULL, NULL, NULL );
|
||||
AssertIntNE(idx1, -1);
|
||||
AssertIntNE(idx2, -1);
|
||||
AssertIntNE(idx1, idx2);
|
||||
|
||||
idx1 = CRYPTO_get_ex_new_index(CRYPTO_EX_INDEX_X509,
|
||||
0,NULL, NULL, NULL, NULL );
|
||||
idx2 = CRYPTO_get_ex_new_index(CRYPTO_EX_INDEX_X509,
|
||||
0,NULL, NULL, NULL, NULL );
|
||||
AssertIntNE(idx1, -1);
|
||||
AssertIntNE(idx2, -1);
|
||||
AssertIntNE(idx1, idx2);
|
||||
|
||||
printf(resultFmt, "passed");
|
||||
#endif /* HAVE_EX_DATA || FORTRESS */
|
||||
}
|
||||
|
||||
static void test_wolfSSL_OCSP_id_get0_info(void)
|
||||
{
|
||||
#if defined(OPENSSL_ALL) && defined(HAVE_OCSP) && !defined(NO_FILESYSTEM)
|
||||
@ -43259,7 +43324,7 @@ void ApiTest(void)
|
||||
test_CRYPTO_set_dynlock_xxx();
|
||||
test_CRYPTO_THREADID_xxx();
|
||||
test_ENGINE_cleanup();
|
||||
|
||||
test_wolfSSL_CRYPTO_get_ex_new_index();
|
||||
test_wolfSSL_EC_KEY_set_group();
|
||||
#if defined(OPENSSL_ALL)
|
||||
test_wolfSSL_X509_PUBKEY_get();
|
||||
|
@ -166,6 +166,8 @@ typedef STACK_OF(ACCESS_DESCRIPTION) AUTHORITY_INFO_ACCESS;
|
||||
#define CRYPTO_memcmp wolfSSL_CRYPTO_memcmp
|
||||
#define CRYPTO_get_ex_new_index wolfSSL_CRYPTO_get_ex_new_index
|
||||
|
||||
#define CRYPTO_get_ex_new_index wolfSSL_CRYPTO_get_ex_new_index
|
||||
|
||||
/* this function was used to set the default malloc, free, and realloc */
|
||||
#define CRYPTO_malloc_init() 0 /* CRYPTO_malloc_init is not needed */
|
||||
#define OPENSSL_malloc_init() 0 /* OPENSSL_malloc_init is not needed */
|
||||
|
@ -1074,6 +1074,31 @@ 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);
|
||||
/* class index for wolfSSL_CRYPTO_get_ex_new_index */
|
||||
#define CRYPTO_EX_INDEX_SSL 0
|
||||
#define CRYPTO_EX_INDEX_SSL_CTX 1
|
||||
#define CRYPTO_EX_INDEX_SSL_SESSION 2
|
||||
#define CRYPTO_EX_INDEX_X509 3
|
||||
#define CRYPTO_EX_INDEX_X509_STORE 4
|
||||
#define CRYPTO_EX_INDEX_X509_STORE_CTX 5
|
||||
#define CRYPTO_EX_INDEX_DH 6
|
||||
#define CRYPTO_EX_INDEX_DSA 7
|
||||
#define CRYPTO_EX_INDEX_EC_KEY 8
|
||||
#define CRYPTO_EX_INDEX_RSA 9
|
||||
#define CRYPTO_EX_INDEX_ENGINE 10
|
||||
#define CRYPTO_EX_INDEX_UI 11
|
||||
#define CRYPTO_EX_INDEX_BIO 12
|
||||
#define CRYPTO_EX_INDEX_APP 13
|
||||
#define CRYPTO_EX_INDEX_UI_METHOD 14
|
||||
#define CRYPTO_EX_INDEX_DRBG 15
|
||||
#define CRYPTO_EX_INDEX__COUNT 16
|
||||
|
||||
|
||||
WOLFSSL_API int wolfSSL_CRYPTO_get_ex_new_index(int class_index,
|
||||
long argl, void* argp,
|
||||
WOLFSSL_CRYPTO_EX_new* new_func,
|
||||
WOLFSSL_CRYPTO_EX_dup* dup_func,
|
||||
WOLFSSL_CRYPTO_EX_free* free_func);
|
||||
#endif
|
||||
|
||||
WOLFSSL_API void wolfSSL_CTX_set_verify(WOLFSSL_CTX*, int,
|
||||
|
Reference in New Issue
Block a user