Correct wolfSSL_sk_X509_new in OpenSSL compatible API

This commit is contained in:
jordan
2022-10-04 15:20:32 -05:00
parent 58d482428e
commit 984649eeac
6 changed files with 37 additions and 22 deletions

View File

@@ -4367,7 +4367,7 @@ WOLFSSL_STACK* wolfSSL_CertManagerGetCerts(WOLFSSL_CERT_MANAGER* cm)
if (cm == NULL) if (cm == NULL)
return NULL; return NULL;
sk = wolfSSL_sk_X509_new(); sk = wolfSSL_sk_X509_new_null();
if (sk == NULL) if (sk == NULL)
goto error; goto error;
@@ -19495,7 +19495,7 @@ WOLF_STACK_OF(WOLFSSL_X509)* wolfSSL_set_peer_cert_chain(WOLFSSL* ssl)
if ((ssl == NULL) || (ssl->session->chain.count == 0)) if ((ssl == NULL) || (ssl->session->chain.count == 0))
return NULL; return NULL;
sk = wolfSSL_sk_X509_new(); sk = wolfSSL_sk_X509_new_null();
i = ssl->session->chain.count-1; i = ssl->session->chain.count-1;
for (; i >= 0; i--) { for (; i >= 0; i--) {
x509 = wolfSSL_X509_new(); x509 = wolfSSL_X509_new();
@@ -30397,9 +30397,9 @@ int wolfSSL_ASN1_STRING_canon(WOLFSSL_ASN1_STRING* asn_out,
} }
/* Store cert to free it later */ /* Store cert to free it later */
if (ret == WOLFSSL_SUCCESS && ctx->x509Chain == NULL) { if (ret == WOLFSSL_SUCCESS && ctx->x509Chain == NULL) {
ctx->x509Chain = wolfSSL_sk_X509_new(); ctx->x509Chain = wolfSSL_sk_X509_new_null();
if (ctx->x509Chain == NULL) { if (ctx->x509Chain == NULL) {
WOLFSSL_MSG("wolfSSL_sk_X509_new error"); WOLFSSL_MSG("wolfSSL_sk_X509_new_null error");
ret = WOLFSSL_FAILURE; ret = WOLFSSL_FAILURE;
} }
} }
@@ -30445,9 +30445,9 @@ int wolfSSL_ASN1_STRING_canon(WOLFSSL_ASN1_STRING* asn_out,
ssl->buffers.weOwnCertChain = 1; ssl->buffers.weOwnCertChain = 1;
/* Store cert to free it later */ /* Store cert to free it later */
if (ssl->ourCertChain == NULL) { if (ssl->ourCertChain == NULL) {
ssl->ourCertChain = wolfSSL_sk_X509_new(); ssl->ourCertChain = wolfSSL_sk_X509_new_null();
if (ssl->ourCertChain == NULL) { if (ssl->ourCertChain == NULL) {
WOLFSSL_MSG("wolfSSL_sk_X509_new error"); WOLFSSL_MSG("wolfSSL_sk_X509_new_null error");
return WOLFSSL_FAILURE; return WOLFSSL_FAILURE;
} }
} }
@@ -39806,7 +39806,7 @@ WOLFSSL_STACK* wolfSSL_PKCS7_to_stack(PKCS7* pkcs7)
WOLFSSL_X509* x509 = wolfSSL_X509_d2i(NULL, p7->pkcs7.cert[i], WOLFSSL_X509* x509 = wolfSSL_X509_d2i(NULL, p7->pkcs7.cert[i],
p7->pkcs7.certSz[i]); p7->pkcs7.certSz[i]);
if (!ret) if (!ret)
ret = wolfSSL_sk_X509_new(); ret = wolfSSL_sk_X509_new_null();
if (x509) { if (x509) {
if (wolfSSL_sk_X509_push(ret, x509) != WOLFSSL_SUCCESS) { if (wolfSSL_sk_X509_push(ret, x509) != WOLFSSL_SUCCESS) {
wolfSSL_X509_free(x509); wolfSSL_X509_free(x509);
@@ -39863,7 +39863,7 @@ WOLFSSL_STACK* wolfSSL_PKCS7_get0_signers(PKCS7* pkcs7, WOLFSSL_STACK* certs,
return NULL; return NULL;
} }
signers = wolfSSL_sk_X509_new(); signers = wolfSSL_sk_X509_new_null();
if (signers == NULL) if (signers == NULL)
return NULL; return NULL;

View File

@@ -12766,7 +12766,20 @@ int wolfSSL_X509_get_signature_nid(const WOLFSSL_X509 *x)
#endif /* OPENSSL_EXTRA */ #endif /* OPENSSL_EXTRA */
#if defined(OPENSSL_EXTRA) #if defined(OPENSSL_EXTRA)
WOLFSSL_STACK* wolfSSL_sk_X509_new(void) WOLFSSL_STACK* wolfSSL_sk_X509_new(WOLF_SK_COMPARE_CB(WOLFSSL_X509, cb))
{
(void)cb;
WOLFSSL_STACK* s = (WOLFSSL_STACK*)XMALLOC(sizeof(WOLFSSL_STACK), NULL,
DYNAMIC_TYPE_OPENSSL);
if (s != NULL) {
XMEMSET(s, 0, sizeof(*s));
s->type = STACK_TYPE_X509;
}
return s;
}
WOLFSSL_STACK* wolfSSL_sk_X509_new_null(void)
{ {
WOLFSSL_STACK* s = (WOLFSSL_STACK*)XMALLOC(sizeof(WOLFSSL_STACK), NULL, WOLFSSL_STACK* s = (WOLFSSL_STACK*)XMALLOC(sizeof(WOLFSSL_STACK), NULL,
DYNAMIC_TYPE_OPENSSL); DYNAMIC_TYPE_OPENSSL);
@@ -12777,7 +12790,7 @@ WOLFSSL_STACK* wolfSSL_sk_X509_new(void)
return s; return s;
} }
#endif #endif /* OPENSSL_EXTRA */
#ifdef OPENSSL_ALL #ifdef OPENSSL_ALL

View File

@@ -621,7 +621,7 @@ WOLF_STACK_OF(WOLFSSL_X509)* wolfSSL_X509_STORE_get1_certs(
} }
if (err == 0) { if (err == 0) {
filteredCerts = wolfSSL_sk_X509_new(); filteredCerts = wolfSSL_sk_X509_new_null();
if (filteredCerts == NULL) { if (filteredCerts == NULL) {
err = 1; err = 1;
} }
@@ -1138,7 +1138,7 @@ WOLFSSL_STACK* wolfSSL_X509_STORE_GetCerts(WOLFSSL_X509_STORE_CTX* s)
return NULL; return NULL;
} }
sk = wolfSSL_sk_X509_new(); sk = wolfSSL_sk_X509_new_null();
if (sk == NULL) { if (sk == NULL) {
return NULL; return NULL;

View File

@@ -34685,7 +34685,7 @@ static int test_wolfSSL_X509_STORE_CTX(void)
AssertIntEQ(X509_STORE_add_cert(str, x509), SSL_SUCCESS); AssertIntEQ(X509_STORE_add_cert(str, x509), SSL_SUCCESS);
#ifdef OPENSSL_ALL #ifdef OPENSSL_ALL
/* sk_X509_new only in OPENSSL_ALL */ /* sk_X509_new only in OPENSSL_ALL */
sk = sk_X509_new(); sk = sk_X509_new_null();
AssertNotNull(sk); AssertNotNull(sk);
AssertIntEQ(X509_STORE_CTX_init(ctx, str, x509, sk), SSL_SUCCESS); AssertIntEQ(X509_STORE_CTX_init(ctx, str, x509, sk), SSL_SUCCESS);
#else #else
@@ -34712,7 +34712,7 @@ static int test_wolfSSL_X509_STORE_CTX(void)
SSL_FILETYPE_PEM))); SSL_FILETYPE_PEM)));
AssertNotNull((x5092 = X509_load_certificate_file(cliCertFile, AssertNotNull((x5092 = X509_load_certificate_file(cliCertFile,
SSL_FILETYPE_PEM))); SSL_FILETYPE_PEM)));
AssertNotNull((sk = sk_X509_new())); AssertNotNull((sk = sk_X509_new_null()));
AssertIntEQ(sk_X509_push(sk, x509), 1); AssertIntEQ(sk_X509_push(sk, x509), 1);
AssertNotNull((str = X509_STORE_new())); AssertNotNull((str = X509_STORE_new()));
AssertNotNull((ctx = X509_STORE_CTX_new())); AssertNotNull((ctx = X509_STORE_CTX_new()));
@@ -49539,7 +49539,7 @@ static int test_sk_X509(void)
{ {
STACK_OF(X509)* s; STACK_OF(X509)* s;
AssertNotNull(s = sk_X509_new()); AssertNotNull(s = sk_X509_new_null());
AssertIntEQ(sk_X509_num(s), 0); AssertIntEQ(sk_X509_num(s), 0);
sk_X509_pop_free(s, NULL); sk_X509_pop_free(s, NULL);
@@ -49547,7 +49547,7 @@ static int test_sk_X509(void)
AssertIntEQ(sk_X509_num(s), 0); AssertIntEQ(sk_X509_num(s), 0);
sk_X509_pop_free(s, NULL); sk_X509_pop_free(s, NULL);
AssertNotNull(s = sk_X509_new()); AssertNotNull(s = sk_X509_new_null());
sk_X509_push(s, (X509*)1); sk_X509_push(s, (X509*)1);
AssertIntEQ(sk_X509_num(s), 1); AssertIntEQ(sk_X509_num(s), 1);
AssertIntEQ((sk_X509_value(s, 0) == (X509*)1), 1); AssertIntEQ((sk_X509_value(s, 0) == (X509*)1), 1);
@@ -49571,7 +49571,7 @@ static int test_sk_X509(void)
AssertNotNull(xList[i] = X509_new()); AssertNotNull(xList[i] = X509_new());
/* test push, pop, and free */ /* test push, pop, and free */
AssertNotNull(s = sk_X509_new()); AssertNotNull(s = sk_X509_new_null());
for (i = 0; i < len; ++i) { for (i = 0; i < len; ++i) {
sk_X509_push(s, xList[i]); sk_X509_push(s, xList[i]);
@@ -49595,7 +49595,7 @@ static int test_sk_X509(void)
sk_free(s); sk_free(s);
/* test push, shift, and free */ /* test push, shift, and free */
AssertNotNull(s = sk_X509_new()); AssertNotNull(s = sk_X509_new_null());
for (i = 0; i < len; ++i) { for (i = 0; i < len; ++i) {
sk_X509_push(s, xList[i]); sk_X509_push(s, xList[i]);

View File

@@ -522,7 +522,7 @@ typedef STACK_OF(ACCESS_DESCRIPTION) AUTHORITY_INFO_ACCESS;
#define X509_EXTENSION_dup wolfSSL_X509_EXTENSION_dup #define X509_EXTENSION_dup wolfSSL_X509_EXTENSION_dup
#define sk_X509_new wolfSSL_sk_X509_new #define sk_X509_new wolfSSL_sk_X509_new
#define sk_X509_new_null wolfSSL_sk_X509_new #define sk_X509_new_null wolfSSL_sk_X509_new_null
#define sk_X509_num wolfSSL_sk_X509_num #define sk_X509_num wolfSSL_sk_X509_num
#define sk_X509_value wolfSSL_sk_X509_value #define sk_X509_value wolfSSL_sk_X509_value
#define sk_X509_shift wolfSSL_sk_X509_shift #define sk_X509_shift wolfSSL_sk_X509_shift

View File

@@ -4573,7 +4573,11 @@ WOLFSSL_API int wolfSSL_RAND_set_rand_method(const WOLFSSL_RAND_METHOD *methods)
WOLFSSL_API int wolfSSL_CIPHER_get_bits(const WOLFSSL_CIPHER *c, int *alg_bits); WOLFSSL_API int wolfSSL_CIPHER_get_bits(const WOLFSSL_CIPHER *c, int *alg_bits);
WOLFSSL_API WOLFSSL_STACK* wolfSSL_sk_X509_new(void); #define WOLF_SK_COMPARE_CB(type, arg) \
int (*(arg)) (const type* const* a, const type* const* b)
WOLFSSL_API WOLFSSL_STACK* wolfSSL_sk_X509_new(
WOLF_SK_COMPARE_CB(WOLFSSL_X509, cb));
WOLFSSL_API WOLFSSL_STACK* wolfSSL_sk_X509_new_null(void);
WOLFSSL_API int wolfSSL_sk_X509_num(const WOLF_STACK_OF(WOLFSSL_X509) *s); WOLFSSL_API int wolfSSL_sk_X509_num(const WOLF_STACK_OF(WOLFSSL_X509) *s);
WOLFSSL_API WOLFSSL_STACK* wolfSSL_sk_X509_OBJECT_new(void); WOLFSSL_API WOLFSSL_STACK* wolfSSL_sk_X509_OBJECT_new(void);
@@ -4596,8 +4600,6 @@ WOLFSSL_API void wolfSSL_sk_X509_INFO_pop_free(WOLF_STACK_OF(WOLFSSL_X509_INFO)*
void (*f) (WOLFSSL_X509_INFO*)); void (*f) (WOLFSSL_X509_INFO*));
WOLFSSL_API void wolfSSL_sk_X509_INFO_free(WOLF_STACK_OF(WOLFSSL_X509_INFO)*); WOLFSSL_API void wolfSSL_sk_X509_INFO_free(WOLF_STACK_OF(WOLFSSL_X509_INFO)*);
#define WOLF_SK_COMPARE_CB(type, arg) \
int (*(arg)) (const type* const* a, const type* const* b)
typedef unsigned long (*wolf_sk_hash_cb) (const void *v); typedef unsigned long (*wolf_sk_hash_cb) (const void *v);
WOLFSSL_API WOLF_STACK_OF(WOLFSSL_X509_NAME)* wolfSSL_sk_X509_NAME_new( WOLFSSL_API WOLF_STACK_OF(WOLFSSL_X509_NAME)* wolfSSL_sk_X509_NAME_new(
WOLF_SK_COMPARE_CB(WOLFSSL_X509_NAME, cb)); WOLF_SK_COMPARE_CB(WOLFSSL_X509_NAME, cb));